<?php

class PagoAOE7 extends Utilidades
{
    private $nomina;
    private $montos;
    private $escenario = 3;
    private $tipo_parametro = 1; /* Unidad */

    public function __construct($nomina, $montos)
    {
        $this->nomina = $nomina;
        $this->montos = $montos;
        Yii::import('application.modules.contable.models.*', true);
    }

    public function contabilizar()
    {
        if (! ParamEscenarios::conectado(3)) {
            return;
        }

        ////////////////////////////////// COMPROBANTE /////////////////////////////////
        $comprobante = $this->crearComprobante($this->nomina, 2);

        $this->seguimientoComprobante(
            $comprobante->id,
            $this->nomina->id,
            $this->nomina->getIdComprobantePago(),
            $this->nomina->getTituloProceso()
        );

        ////////////////////////// MOVIMIENTOS DEL COMPROBANTE /////////////////////////
        $this->movimientos($comprobante);
    }

    private function getMontos()
    {
        $debe = array_filter([
            'cta_banco' => $this->nomina->getMontoPagado(),
            'rev_aport_no_rec_asociado' => $this->nomina->totalAportes()['aporte_asociado'],
            'rev_aport_no_rec_patron' => $this->nomina->totalAportes()['aporte_patrono'],
        ]);

        $haber = array_filter([
            'aport_rec_asociado' => $this->nomina->totalAporteAsociadosActivo(),
            'aport_rec_patron' => $this->nomina->totalAportePatronalActivo(),
            'rev_cta_x_cobrar_asociado' => $this->nomina->totalAportes()['aporte_asociado'],
            'rev_cta_x_cobrar_patron' => $this->nomina->totalAportes()['aporte_patrono'],
            'cta_x_pagar_patron' => $this->montos['cuenta_por_pagar_patrono'] + $this->nomina->totalPagadoAsociadosDiferidos(),
        ]);

        if (CategoriasVariables::checkVariable(2, 2)) {
            $haber = array_merge($haber, [
                'cta_x_pagar_patron' => $this->montos['cuenta_por_pagar_patrono'],
                'cta_x_pagar_asociados_no_definidos' => $this->nomina->totalPagadoAsociadosDiferidos(),
            ]);
        }

        // $this->debug($debe, $haber);

        $this->validate($debe, $haber);

        return array_merge([], $debe, $haber);
    }

    private function movimientos($comprobante)
    {
        $movimiento = new Movimiento(
            $comprobante,
            $this->nomina->getFechaOperacion()
        );

        $montos = $this->getMontos();

        $movimiento->crear(
            $this->nomina->bancoCuentaContable(),
            $montos['cta_banco']
        );

        $movimiento->crear(
            Parametros::getCuentaContable([
                'clave' => 'rev_aport_no_rec_asociado',
                'escenario' => $this->escenario,
                'tipo_parametro' => $this->tipo_parametro,
                'proceso' => $this->nomina->id_unidad,
            ]),
            $montos['rev_aport_no_rec_asociado']
        );

        $movimiento->crear(
            Parametros::getCuentaContable([
                'clave' => 'rev_aport_no_rec_patron',
                'escenario' => $this->escenario,
                'tipo_parametro' => $this->tipo_parametro,
                'proceso' => $this->nomina->id_unidad,
            ]),
            $montos['rev_aport_no_rec_patron']
        );

        $movimiento->crear(
            Parametros::getCuentaContable([
                'clave' => 'aport_rec_asociado',
                'escenario' => $this->escenario,
                'tipo_parametro' => $this->tipo_parametro,
                'proceso' => $this->nomina->id_unidad,
            ]),
            0,
            $montos['aport_rec_asociado']
        );

        $movimiento->crear(
            Parametros::getCuentaContable([
                'clave' => 'aport_rec_patron',
                'escenario' => $this->escenario,
                'tipo_parametro' => $this->tipo_parametro,
                'proceso' => $this->nomina->id_unidad,
            ]),
            0,
            $montos['aport_rec_patron']
        );

        $movimiento->crear(
            Parametros::getCuentaContable([
                'clave' => 'rev_cta_x_cobrar_asociado',
                'escenario' => $this->escenario,
                'tipo_parametro' => $this->tipo_parametro,
                'proceso' => $this->nomina->id_unidad,
            ]),
            0,
            $montos['rev_cta_x_cobrar_asociado']
        );

        $movimiento->crear(
            Parametros::getCuentaContable([
                'clave' => 'rev_cta_x_cobrar_patron',
                'escenario' => $this->escenario,
                'tipo_parametro' => $this->tipo_parametro,
                'proceso' => $this->nomina->id_unidad,
            ]),
            0,
            $montos['rev_cta_x_cobrar_patron']
        );

        if (CategoriasVariables::checkVariable(2, 2)) {
            $movimiento->crear(
                Parametros::getCuentaContable([
                    'clave' => 'cta_x_pagar_asociados_no_definidos',
                    'escenario' => $this->escenario,
                    'tipo_parametro' => $this->tipo_parametro,
                    'proceso' => $this->nomina->id_unidad,
                ]),
                0,
                $montos['cta_x_pagar_asociados_no_definidos']
            );
        }

        $movimiento->crear(
            Parametros::getCuentaContable([
                'clave' => 'cta_x_pagar_patron',
                'escenario' => $this->escenario,
                'tipo_parametro' => $this->tipo_parametro,
                'proceso' => $this->nomina->id_unidad,
            ]),
            0,
            $montos['cta_x_pagar_patron']
        );
    }
}
