<?php

class CasoBAction
{
    use AttributeAccessTrait;

    protected $attributes;

    public function __construct($attributes)
    {
        $this->attributes = $attributes;
    }

    public function execute()
    {
        $this->conciliarCuotas();

        $cuotasSinDefinir = (new CrearCuotasSinDefinirAction($this->attributes))->execute();

        $cuotasExcluidas = (new ExcluirCuotasPrenominaNoPresentesEnNominaAction($this->attributes))->execute();

        (new CrearEstatusNominaAction(
            $this->id_nomina,
            NominaEstatusObject::get($cuotasSinDefinir, $cuotasExcluidas)
        ))->execute();

        (new ActualizarEstatusPrenominaAction(
            $this->id_prenomina,
            PrenominaEstatusObject::get($cuotasSinDefinir, $cuotasExcluidas)
        ))->execute();

        return true;
    }

    private function conciliarCuotas()
    {
        foreach (CuotasPrenominaQuery::asociadosActivos(['prenomina' => $this->id_prenomina]) as $cuota) {
            $model = new DatosTxtTablaAmortizacion();
            $model->id_txt = $this->id_nomina;
            $model->id_tabla_amortizacion = $cuota['id_cuota'];
            $model->monto_cuota_pagado = Yii::app()->format->number($cuota['monto_cuota']);
            $model->monto_cobro = 0;
            $model->monto_remanente = 0;
            $model->monto_diferido = 0;
            $model->insert();
        }

        return true;
    }
}
