<?php

class PagosFantantes4 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()
    {
        $montos = $this->nomina->montoPagadoFaltante();

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

        $haber = [
            'aport_rec_asociado' => $montos['monto_asociado'],
            'aport_rec_patron' => $montos['monto_patrono'],
            'rev_cta_x_cobrar_asociado' => $montos['monto_asociado'],
            'rev_cta_x_cobrar_patron' => $montos['monto_patrono'],
            'cta_x_pagar_patron' => $this->montoPagado($montos),
        ];

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

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

    private function montoPagado($montos)
    {
        return $this->nomina->getMontoPagado() - ($montos['monto_asociado'] + $montos['monto_patrono']);
    }
}
