<?php

class ExcluirCuotasPrenominaNoPresentesEnNominaAction
{
    use AttributeAccessTrait;

    protected $attributes;

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

    /**
     * Lleva las cuotas de prenomina que no estan presentes en la nomina a la seccion de cuotas excluidas.
     *
     * @return int Número de cuotas afectadas
     */
    public function execute()
    {
        return Yii::app()
            ->getDb()
            ->createCommand(
                "UPDATE prestamos.pre_nomina_tabla_amortizacion
                SET cuota_excluida=true, id_estatus_cuota_excluida=1, observaciones='El monto cargado en la nómina no fue suficiente para concilar está cuota'
                from (
                    select pnta.id as id_cuota
                    from prestamos.pre_nomina_tabla_amortizacion pnta
                    inner join prestamos.credito_tabla_amortizacion cta on cta.id=pnta.id_tabla_amortizacion
                    inner join prestamos.credito c on c.id=cta.idcredito
                    inner join asociado a on a.idasociado=c.idasociado
                    WHERE pnta.id_pre_nomina_credito = :prenomina
                        AND pnta.blnborrado IS FALSE
                        -- Se colocan como excluidas solo las cuotas que no han sido previamente conciliadas con algun monto
                        and cta.id not in(
                            select cta.id
                            from prestamos.datos_txt_tabla_amortizacion dtta
                            inner join prestamos.credito_tabla_amortizacion cta on cta.id=dtta.id_tabla_amortizacion
                            where id_txt=:nomina
                        )
                ) as d
                where id=d.id_cuota"
            )
            ->bindValues(['prenomina' => $this->id_prenomina, 'nomina' => $this->id_nomina])
            ->execute();
    }
}
