<?php

class PagosFantantes3 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()
    {
        $montosCombinados = $this->nomina->montoPagadoFaltanteEscenarioDos();
        $montoActivos = $this->nomina->montoPagadoFaltante();

        $debe = [
            'cta_banco' => $this->nomina->getMontoPagado(),
            'rev_aport_no_rec_asociado' => $montosCombinados['monto_pagado_patrono'],
            'rev_aport_no_rec_patron' => $montosCombinados['monto_pagado_asociado'],
        ];

        $haber = [
            'aport_rec_asociado' => $montoActivos['monto_asociado'],
            'aport_rec_patron' => $montoActivos['monto_patrono'],
            'rev_cta_x_cobrar_asociado' => $montosCombinados['monto_pagado_patrono'],
            'rev_cta_x_cobrar_patron' => $montosCombinados['monto_pagado_asociado'],
            'cta_x_pagar_patron' => $this->nomina->getMontoPagado() - $montoActivos['total'],
        ];

        if (CategoriasVariables::checkVariable(2, 2)) {
            $haber = array_merge($haber, [
                'cta_x_pagar_patron' => $this->nomina->getMontoPagado() - $this->nomina->totalDeudaCombinada(),
                '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']
        );
    }
}
