<?php

class DetalleCondensado
{
    private $nomina;

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

    public function run()
    {
        return (object) Yii::app()->getDb()->createCommand('
            select  pendiente.capital_pendiente
                   ,pendiente.interes_pendiente
                   ,egresados.capital_egresado
                   ,egresados.interes_egresado
                   ,fallecidos.capital_fallecidos
                   ,fallecidos.interes_fallecidos
                   ,suspendidos.capital_suspendido
                   ,suspendidos.interes_suspendido
                   ,reclamar.capital_reclamar
                   ,reclamar.interes_reclamar
                   ,(
                        pendiente.capital_pendiente
                        + egresados.capital_egresado
                        + fallecidos.capital_fallecidos
                        + suspendidos.capital_suspendido
                        + reclamar.capital_reclamar
                    ) as total_capital
                   ,(
                        pendiente.interes_pendiente
                        + egresados.interes_egresado
                        + fallecidos.interes_fallecidos
                        + suspendidos.interes_suspendido
                        + reclamar.interes_reclamar
                    ) as total_interes
            from (select 1 as clave) as tabla
            -- monto pendiente
            left join (
                select 1 as clave
                       ,sum(coalesce(cdc.capital_cobro, 0)) as capital_pendiente
                       ,sum(coalesce(cdc.interes_cobro, 0)) as interes_pendiente
                from prestamos.datos_txt_tabla_amortizacion dtta
                left join prestamos.cobro_diferencial_cuota cdc on dtta.id=cdc.id_proceso
                    and cdc.id_nombre_proceso=1
                    and dtta.actual is true
                where dtta.id_txt=:nomina
            ) as pendiente on pendiente.clave=tabla.clave
            -- cuotas egresadas
            left join (
                select 1 as clave,
                       coalesce(sum(cta.monto_capital), 0) as capital_egresado,
                       coalesce(sum(cta.monto_interes), 0) as interes_egresado
                from prestamos.pre_nomina_tabla_amortizacion pnta
                inner join prestamos.credito_tabla_amortizacion cta on cta.id=pnta.id_tabla_amortizacion
                where pnta.id_pre_nomina_credito=:prenomina
                    and pnta.id_estatus_cuota_excluida=5
            ) as egresados on egresados.clave=tabla.clave
            -- fallecidos
            left join (
                select 1 as clave,
                       coalesce(sum(cta.monto_capital), 0) as capital_fallecidos,
                       coalesce(sum(cta.monto_interes), 0) as interes_fallecidos
                from prestamos.pre_nomina_tabla_amortizacion pnta
                inner join prestamos.credito_tabla_amortizacion cta on cta.id=pnta.id_tabla_amortizacion
                where pnta.id_pre_nomina_credito=:prenomina
                    and pnta.id_estatus_cuota_excluida=6
            ) as fallecidos on fallecidos.clave=tabla.clave
            -- suspendidos
            left join (
                select  1 as clave
                       ,coalesce(sum(cta.monto_capital), 0) as capital_suspendido
                       ,coalesce(sum(cta.monto_interes), 0) as interes_suspendido
                from prestamos.pre_nomina_tabla_amortizacion pnta
                inner join prestamos.credito_tabla_amortizacion cta on cta.id=pnta.id_tabla_amortizacion
                where pnta.id_pre_nomina_credito=:prenomina
                    and pnta.id_estatus_cuota_excluida=7
            ) as suspendidos on suspendidos.clave=tabla.clave
            -- reclarmar
            left join (
                select  1 as clave
                       ,coalesce(sum(cta.monto_capital), 0) as capital_reclamar
                       ,coalesce(sum(cta.monto_interes), 0) as interes_reclamar
                from prestamos.pre_nomina_tabla_amortizacion pnta
                inner join prestamos.credito_tabla_amortizacion cta on cta.id=pnta.id_tabla_amortizacion
                where id_pre_nomina_credito=:prenomina
                     and id_estatus_cuota_excluida=8
            ) as reclamar on reclamar.clave=tabla.clave
        ')->bindValues([
            'nomina' => $this->nomina->id,
            'prenomina' => $this->nomina->id_prenomina_credito
        ])->queryRow();
    }
}
