<?php

class AprobacionAO extends Utilidades
{
    private $nomina;
    private $escenario = 2;
    private $tipo_parametro = 1; /* Unidad */

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

    public function contabilizar()
    {
        if (! ParamEscenarios::conectado($this->escenario)) {
            return;
        }

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

        $this->seguimientoComprobante(
            $comprobante->id,
            $this->nomina->id,
            null,
            6
        );
        ////////////////////////// MOVIMIENTOS DEL COMPROBANTE /////////////////////////
        $this->movimientos($comprobante);
    }

    private function getMontos()
    {
        if (CategoriasVariables::checkVariable(2, 1)) {
            $montos = AporteOrdinario::model()->find([
                'select' => 'sum(aporte_asociado) as aporte_asociado, sum(aporte_patrono) as aporte_patrono',
                'condition' => 'id_txt=:id and blnborrado is false',
                'params' => [
                    'id' => $this->nomina->id,
                ],
            ]);
        } else {
            $montos = (object) $this->nomina->totalAportes();
        }

        $debe = [
            'cta_x_cobrar_asociado' => $montos->aporte_asociado,
            'cta_x_cobrar_patron' => $montos->aporte_patrono,
        ];

        $haber = [
            'aport_no_rec_asociado' => $montos->aporte_asociado,
            'aport_no_rec_patron' => $montos->aporte_patrono,
        ];

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

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

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

        $monto_aporte = $this->getMontos();

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

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

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

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