<?php

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

    public function __construct($nomina)
    {
        $this->nomina = $nomina;
        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()
    {
        if (CategoriasVariables::checkVariable(2, 1)) {
            $montos = $this->nomina->montoPagadoActivos();
        } else {
            $montos = $this->nomina->montoPagadoCombinado();
        }

        $debe = [
            'cta_banco' => $this->nomina->getMontoPagado(),
            'rev_aport_no_rec_asociado' => $montos['aporte_asociado'],
            'rev_aport_no_rec_patron' => $montos['aporte_patrono'],
        ];

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

        if (CategoriasVariables::checkVariable(2, 2)) {
            $haber = array_merge($haber, [
                'cta_x_pagar_patron' => 0,
                'cta_x_pagar_asociados_no_definidos' => $montos['pendiente_por_pagar'],
            ]);
        }

        // $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']
            );
        } else {
            $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']
            );
        }
    }
}
