<?php

/**
 * boletin_deu_morosos actions.
 *
 * @package    cartera
 * @subpackage boletin_deu_morosos
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class boletin_deu_morososActions extends sfActions {

    /**
     * Generar archivo de deudores morosos
     *
     * @param sfWebRequest $request
     */
    public function executeList(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        /*
         * Manejar Errores
         */
        try {


            /*
             * Paginacion
             */
            if (isset($request['_startRow'])) {
                $rowStart = $request['_startRow'];
            } else {
                $rowStart = 0;
            }

            if (isset($request['_endRow'])) {
                $rowEnd = $request['_endRow'];
            } else {
                $rowEnd = 75;
            }

            //ordenar consulta
            if (isset($request['_sortBy'])) {
                $sortBy = " Order by " . $request['_sortBy'];
            } else {
                $sortBy = ' Order by nitocc ';
            }

            /*
             * Variables
             */
            $vigencia = date('Y');
            $mes = date('m');
            $fecha_fin = $request['fecha_fin'];
            $tope = '';
            if (isset($request['tope'])) {
                $tope = "WHERE total.saldo_total >= " . $request['tope'];
                $tope2 = "WHERE vrtotal>= " . $request['tope'];		
                
            }
            
            /*
             * Se elimina 2176 - Drummnod de la consulta
             */
            $quitarTercero = " and saldos.id_mae_ter != 2176 ";

            //solo imprime log la primera vez de consulta
            if ($rowStart == 0) {

                //sentencia sql
                $sql = <<<EOD
TRUNCATE TABLE CA_DEUDOR 
EOD;
                //ejecuta y obtiene el resultado del sql
                CN_TABLE::executeSQL($sql);

                //sentencia sql
                $sql = <<<EOD
TRUNCATE TABLE CA_DEUDOR_DET 
EOD;
                //ejecuta y obtiene el resultado del sql
                CN_TABLE::executeSQL($sql);

                
                //sentencia sql
                $sql = <<<EOD
INSERT INTO CA_DEUDOR_DET (NITOCC,RAZSOC,NUMFAC,FECFAC,FECVEN,DIASVEN,VRTOTAL,TIPDOC,OBSERV,CONCEPTO,TIPDEU,PLACA_RMN,CODCIA)


SELECT NITOCC,RAZSOC,NUMFAC,FECFAC,FECVEN,DIASVEN,VRTOTAL,TIPDOC,OBSERV,CONCEPTO,TIPDEU,PLACA_RMN,CODCIA           

FROM(                
                
SELECT 
rownum AS ID_DEUDOR_DET,
saldos.num_doc AS NITOCC,
saldos.razon_soc AS RAZSOC,
saldos.sec_debito AS NUMFAC,
saldos.fecha_proceso AS FECFAC,
saldos.fecha_vence AS FECVEN,
saldos.dias_pago AS DIASVEN,
round(saldos.saldo_actual,2) AS VRTOTAL,
tipde.desc_corta AS TIPDOC,
'PRINCIPAL '||saldos.observaciones AS OBSERV,
prod.codigo||'-'||prod.descripcion AS CONCEPTO,
'01' AS TIPDEU,
referencia.id_referencia2 AS PLACA_RMN,
saldos.abreviatura_pv AS CODCIA


from ca_debito_saldos saldos

left join ca_debito_ref referencia ON referencia.id_debito = saldos.id_debito

left join ca_tipo_debito tipde ON tipde.id_tipo_debito = saldos.id_tipo_debito

left join (
  SELECT 
   deta.*,
   ROW_NUMBER() OVER (
    PARTITION BY deta.id_debito
    ORDER BY deta.id_debito desc
   ) AS rn
   from ca_debito_detalle deta
) detalle ON detalle.id_debito = saldos.id_debito and detalle.rn = 1

LEFT JOIN ca_producto prod ON prod.id_producto = detalle.id_producto

where saldos.id_anhos_sal= $vigencia and saldos.id_meses_sal= $mes
and saldos.fecha_vence<=to_date('$fecha_fin','yyyy-mm-dd')
and saldos.saldo_actual>20000
and saldos.id_punto_venta!=4
$quitarTercero
            
)boletin                

left join(
select saldos.num_doc,sum(nvl(saldos.saldo_actual,0)) as SALDO_TOTAL
from ca_debito_saldos saldos

left join ca_debito_ref referencia ON referencia.id_debito = saldos.id_debito


where saldos.id_anhos_sal= $vigencia and saldos.id_meses_sal= $mes
and saldos.fecha_vence<=to_date('$fecha_fin','yyyy-mm-dd')
and saldos.saldo_actual>20000
group by saldos.num_doc

)total ON boletin.nitocc = total.num_doc

$tope

EOD;
                //ejecuta y obtiene el resultado del sql
                CN_TABLE::executeSQL($sql);


//sentencia sql
              /*  $sql = <<<EOD
INSERT INTO CA_DEUDOR_DET (NITOCC,DV,RAZSOC,NUMFAC,FECFAC,FECVEN,DIASVEN,VRTOTAL,TIPDOC,OBSERV,CONCEPTO,TIPDEU,PLACA_RMN,CODCIA,COBRO_COACTIVO)


select * from(

select persona.num_doc AS NITOCC,'' AS DV,persona.raz_soc AS RAZSOC,
princi.numfac,princi.fecfac,princi.fecven,princi.diasven,princi.vrtotal,princi.tipdoc,
'SOLIDARIO '||princi.observ,princi.concepto,'02' AS TIPDEU,princi.placa_rmn,princi.codcia,
princi.cobro_coactivo AS COBRO_COACTIVO


from ca_deudor_det princi

LEFT JOIN rmn_titulo@can titulo ON titulo.placa_rmn = princi.placa_rmn
LEFT JOIN rmn_titulo_persona@can titper ON titper.id_titulo = titulo.id_titulo
LEFT JOIN rmn_persona_v@can persona ON persona.id_persona = titper.id_titular

where persona.num_doc!=princi.nitocc
) $tope2

EOD;*/
                //ejecuta y obtiene el resultado del sql
                CN_TABLE::executeSQL($sql);


//sentencia sql
                $sql = <<<EOD
INSERT INTO CA_DEUDOR (NITOCC,DV,TIPDEU,NOM1,NOM2,APL1,APL2,RAZSOC,VALOBL,TIPIDE,NUMOBL)

SELECT NITOCC,DV,MIN(TIPDEU) TIPDEU ,MAX(NOM1) NOM1,MAX(NOM2) NOM2,MAX(APL1) APL1,MAX(APL2) APL2,MAX(RAZSOC) RAZSOC,SUM(VALOBL) VALOBL ,MAX(TIPIDE) TIPIDE,MAX(NUMOBL) NUMOBL

FROM(

select detalle.nitocc,
case when detalle.NITOCC>=800000000 and detalle.NITOCC<=999999999 then digito_verificacion(detalle.nitocc) else null end  AS DV,
case when detalle.NITOCC>=800000000 and detalle.NITOCC<=999999999 then '' else inter.pnombre end AS NOM1,
case when detalle.NITOCC>=800000000 and detalle.NITOCC<=999999999 then '' else inter.snombre end AS NOM2,
case when detalle.NITOCC>=800000000 and detalle.NITOCC<=999999999 then '' else inter.papellido end AS APL1,
case when detalle.NITOCC>=800000000 and detalle.NITOCC<=999999999 then '' else inter.sapellido end AS APL2,
case when detalle.NITOCC>=800000000 and detalle.NITOCC<=999999999 then inter.razon_soc else '' end AS RAZSOC,
case when detalle.NITOCC>=800000000 and detalle.NITOCC<=999999999 then '2' else '1' end AS TIPIDE,
detalle.tipdeu AS TIPDEU,detalle.numfac AS NUMOBL,
detalle.vrtotal AS VALOBL


from ca_deudor_det detalle

left join interceros inter ON inter.num_doc = to_char(detalle.nitocc)
where detalle.tipdeu='01'
)

GROUP BY NITOCC,DV

EOD;
                //ejecuta y obtiene el resultado del sql
                CN_TABLE::executeSQL($sql);



            }


            //sentencia sql
            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;
            //ejecuta y obtiene el resultado del sql
            CN_TABLE::executeSQL($sql);

            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD
select count(*) as count from (

select * from CA_DEUDOR_DET 

)
EOD;


            $total_record_count = CN_TABLE::executeSQL($sql);
            $total_record_count = $total_record_count[0]["count"];

            /*
             * Obtiene las vigencias/periodo que se encuentre en la tabla de saldos
             */
            $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (
    
select * from CA_DEUDOR_DET 

$sortBy
          
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;

            $records = CN_TABLE::executeSQL($sql);

            //Ejecuta sql
            $this->totalRows = $total_record_count;
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($records);
            $this->list_data = $records;
        } catch (Exception $e) {

            $mensaje = "[boletin_deu_morosos] ERROR!!!";

            $this->status = 1;
            $this->mensajeError = $mensaje;
            $this->list_data = array();
            $this->logMessage($mensaje);
            $this->logMessage($e->getMessage());
        }
    }

}
