<?php

class PagoAOE1 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($this->escenario)) {
            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()
    {
        $montos = Yii::app()->getDb()->createCommand('
            SELECT coalesce(sum(aporte_patrono), 0) AS aporte_patrono,
                   coalesce(sum(aporte_asociado), 0) AS aporte_asociado,
                   coalesce(sum(aporte_patrono), 0) + coalesce(sum(aporte_asociado), 0) AS total
            FROM retenciones.aporte_ordinario
            WHERE id_txt=:id and blnborrado is false;
        ')->bindValue('id', $this->nomina->id)->queryRow();

        $debe = [
            'cta_banco' => $montos['total'],
            'rev_aport_no_rec_asociado' => $montos['aporte_asociado'],
            'rev_aport_no_rec_patron' => $montos['aporte_patrono'],
        ];

        $haber = [
            'aport_rec_asociado' => $montos['aporte_asociado'],
            'aport_rec_patron' => $montos['aporte_patrono'],
            'rev_cta_x_cobrar_asociado' => $montos['aporte_asociado'],
            'rev_cta_x_cobrar_patron' => $montos['aporte_patrono'],
        ];

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

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

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

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

        $monto_aporte = $this->getMontos();

        $movimiento->crear(
            $this->nomina->bancoCuentaContable(),
            $monto_aporte['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,
            ]),
            $monto_aporte['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,
            ]),
            $monto_aporte['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,
            $monto_aporte['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,
            $monto_aporte['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,
            $monto_aporte['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,
            $monto_aporte['rev_cta_x_cobrar_patron']
        );
    }
}
