<?php

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

    /**
     * 
     * @param sfWebRequest $request
     */
    public function executePdf(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");

        $id_agrup_concepto = $request['id_agrup_concepto'];
        $id_periodo = $request['id_periodo_filtro'];

//        $id_agrup_concepto = 1;
//        $id_periodo = 13;


        $consul = Doctrine_Manager::getInstance()->connection();


        /*
         * Tomar periodo mensual de la fecha de corte
         */
        //Sql
        $sql = <<<EOD
select * from no_periodo
where id_tipo_periodo = 1
and (select fecha_ini-1  from no_periodo where id_periodo = $id_periodo) between fecha_ini and fecha_fin
and rownum = 1  
EOD;
        //Ejecutar SQL
        $st = $consul->execute($sql);
        $rec = $st->fetchAll();
        $id_periodo_fecha_corte = $rec[0]['ID_PERIODO'];


        $sql = "select * from no_agrup_concepto where id_agrup_concepto=" . $id_agrup_concepto;
        $st = $consul->execute($sql);
        $agrupacion = $st->fetchAll();

        $nombre_agrupacion = $agrupacion[0]['DESCRIPCION'];

        $sql = "select * from no_periodo_V where id_periodo=" . $id_periodo;
        $st = $consul->execute($sql);
        $periodo = $st->fetchAll();

        $nombre_periodo = $periodo[0]['PERIODO'];
        $anho = $periodo[0]['ID_ANHOS'];
        $mes = $periodo[0]['ID_MESES'];



        $sql = "select tab0.*,tab1.*,tab3.* 
          
            from no_estado_func tab0
            left join no_datos_funcionario_v tab1 ON tab1.id_tipo_doc = tab0.id_tipo_doc and tab1.num_doc = tab0.num_doc
            left join no_nombramiento_v tab3 ON tab3.id_tipo_doc = tab0.id_tipo_doc and tab3.num_doc = tab0.num_doc
            
            where tab0.actual = 1 and tab0.periodo=" . $id_periodo;

        $st = $consul->execute($sql);
        $funcionarios = $st->fetchAll();

        $sql = "select tab0.*,tab1.* 
          
          from no_agrup_deta tab0
          left join no_concep_nomina tab1 ON tab1.id_concep_nomina = tab0.id_concep_nomina

        where tab0.id_agrup_concepto = " . $id_agrup_concepto;

        $st = $consul->execute($sql);
        $agrupaciones = $st->fetchAll();


        $arreglo = array();


        for ($i = 0; $i < count($funcionarios); $i++) {
            $valor = 0;
            $num_dias = 0;
            $id_tipo_doc = $funcionarios[$i]['ID_TIPO_DOC'];
            $num_doc = $funcionarios[$i]['NUM_DOC'];


            for ($j = 0; $j <= count($agrupaciones) - 1; $j++) {


                $id_concepto = $agrupaciones[$j]['ID_CONCEP_NOMINA'];
                $concepto = $agrupaciones[$j]['ABREVIATURA'];

                /**
                 * Tomar el valor del salario segun concepto periodo, para la fecha de corte prima de navidad - 20141128
                 */
                if ($id_concepto == 1) {
                    $agrupaciones[$j]['TIPO_VALOR'] = "R";
                }


                if ($agrupaciones[$j]['TIPO_VALOR'] == "C") {


                    $sql = "select nvl(valor,0) AS VALOR 
                       from no_concepto_func 
                       where id_tipo_doc=" . $id_tipo_doc . " and num_doc = " . $num_doc . " and id_concep_nomina=" . $id_concepto . " and estado = 1 and actual = 1";

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                    } else {
                        $valor = 0;
                    }
                }


                if ($agrupaciones[$j]['TIPO_VALOR'] == "R") {


                    $sql = "select valor from( SELECT tab.*, ROW_NUMBER() OVER ( "
                            . "PARTITION BY tab.num_doc ORDER BY TAB.FECHA_HASTA desc ) as rn "
                            . "from no_concepto_periodo tab "
                            . "where periodo = $id_periodo_fecha_corte and num_doc = $num_doc "
                            . "and id_tipo_doc = $id_tipo_doc and id_concep_nomina = $id_concepto  ) "
                            . "where rn = 1 ";

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                    } else {
                        $valor = 0;
                    }
                }

                if ($agrupaciones[$j]['TIPO_VALOR'] == "U") {


                    $sql = "select nvl(valor,0) AS VALOR 
                       from no_ultimo_valor 
                       where id_tipo_doc=" . $id_tipo_doc . " and num_doc = " . $num_doc . " and id_concep_nomina=" . $id_concepto;

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                    } else {
                        $valor = 0;
                    }
                }

                if ($agrupaciones[$j]['TIPO_VALOR'] == "M") {


                    $sql = "select nvl(valor_liquidado,0) AS VALOR, num_dias AS NUM_DIAS 
                       from no_liquida_nomina 
                       where id_tipo_doc=" . $id_tipo_doc . " and num_doc = " . $num_doc . " and id_concep_nomina=" . $id_concepto . " and id_periodo=" . $id_periodo;

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                        $num_dias = $conceptos[0]['NUM_DIAS'];
                    } else {
                        $valor = 0;
                        $num_dias = 0;
                    }
                }

                if ($agrupaciones[$j]['TIPO_VALOR'] == "V") {

                    $vig_ini = $anho;
                    $per_ini = 1;
                    $vig_fin = $anho;
                    $per_fin = $mes;


                    //                    $sql = "select nvl(sum(liqnom.valor_liquidado),0) as VALOR, 0 AS NUM_DIAS   from no_liquida_nomina liqnom  
//                        join no_periodo per on per.id_periodo = liqnom.id_periodo where    1 = 1 
//                        and per.id_anhos || lpad(per.id_meses, 2, '0') between  $vig_ini || lpad( $per_ini, 2, '0') and $vig_fin || lpad( $per_fin, 2, '0')  
//                                and liqnom.num_doc = $num_doc  and liqnom.id_tipo_doc = $id_tipo_doc  
//                                    and liqnom.id_concep_nomina = $id_concepto  ";


                    $sql = "
select  sum(valor) as valor from(

    select
   
    nvl(sum(liqnom.valor_liquidado),0) as valor 
   
    from no_liquida_nomina liqnom 
   
    join no_periodo per on per.id_periodo = liqnom.id_periodo
   
    where    1 = 1
    and per.id_anhos || lpad(per.id_meses, 2, '0')
    between  $vig_ini || lpad( $per_ini, 2, '0') and $vig_fin || lpad( $per_fin, 2, '0') 
    and liqnom.num_doc = $num_doc 
    and liqnom.id_tipo_doc = $id_tipo_doc 
    and liqnom.id_concep_nomina in ( $id_concepto  )
   
    union
   
    select
   
    nvl(sum(liqnom.valor_liquidado),0) as valor 
   
    from no_liquida_nomina liqnom 
   
    join no_periodo per on per.id_periodo = liqnom.id_periodo
   
    where    1 = 1
    and per.id_anhos || lpad(per.id_meses, 2, '0')
    between  $vig_ini || lpad( $per_ini, 2, '0') and $vig_fin || lpad( $per_fin, 2, '0') 
    and liqnom.num_doc = $num_doc 
    and liqnom.id_tipo_doc = $id_tipo_doc 
    and liqnom.id_concep_nomina in (  (select id_concep_ajuste from no_concep_nomina where id_concep_nomina = $id_concepto) )
   
    union
   
    select
   
    nvl(sum(liqnom.valor_liquidado),0) * -1 as valor 
   
    from no_liquida_nomina liqnom 
   
    join no_periodo per on per.id_periodo = liqnom.id_periodo
   
    where    1 = 1
    and per.id_anhos || lpad(per.id_meses, 2, '0')
    between  $vig_ini || lpad( $per_ini, 2, '0') and $vig_fin || lpad( $per_fin, 2, '0') 
    and liqnom.num_doc = $num_doc 
    and liqnom.id_tipo_doc = $id_tipo_doc 
    and liqnom.id_concep_nomina in (  (select id_concep_rein from no_concep_nomina where id_concep_nomina = $id_concepto) )

)";

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                    } else {
                        $valor = 0;
                    }
                }

                $fecha_ingreso = $funcionarios[$i]['FECHA_INGRESO'];
                $fecha_ingreso = explode(" ", $fecha_ingreso);
                $fecha_ingreso = $fecha_ingreso[0];

                $arreglo[$i]['NUM_DOC'] = $funcionarios[$i]['NUM_DOC'];
                $arreglo[$i]['NOMBRE'] = $funcionarios[$i]['NOMBRE_APELLIDO'];
                $arreglo[$i]['FECHA_INGRE'] = $fecha_ingreso;
                $arreglo[$i]['FECHA_TERMINA'] = "";
                $arreglo[$i]['NUM_DIAS'] = $num_dias;


                $arreglo[$i][$concepto] = $valor;
                $valor = 0;
            }
        }

        $pdf = new CDPDF('L', 'mm', 'letter');
        $pdf->SetFont('Times', 'B', 8);
        $pdf->SetFillColor(255);
        $pdf->SetTextColor(0);
        // Header
        $pdf->AddPage();

        $pdf->SetFont('Times', 'B', 14);

        $pdf->Cell(250, 8, $nombre_agrupacion, 0, 1, 'C');
        $pdf->Cell(250, 8, $nombre_periodo, 0, 1, 'C');
        $pdf->ln();
        $pdf->SetFont('Times', '', 6);


        $html = '<table border="1"><tr><td>aaa</td></tr></table>';



        $html = '<table border="1">';
        $html.='<tr>';

        foreach ($arreglo[0] as $key => $value) {

            $html.='<td style="text-align:center;background-color:rgb(100, 100, 100); color: rgb(255, 255, 255);">' . $key . '</td>';
        }
        $html.='</tr>';

        foreach ($arreglo as $key => $value) {
            $html.='<tr>';

            foreach ($value as $key => $registro) {
                if (!is_numeric($registro)) {

                    if ($key == "FECHA_INGRE" || $key == "FECHA_TERMINA") {
                        $html.='<td style="text-align:center">' . $registro . '</td>';
                    } else {

                        $html.='<td>' . $registro . '</td>';
                    }
                } else {
                    if ($key == "NUM_DOC" || $key == "NUM_DIAS") {
                        $html.='<td  style="text-align:center">' . $registro . '</td>';
                    } else {
                        $html.='<td  style="text-align:right">' . number_format($registro, 2) . '</td>';
                    }
                }
            }
            $html.='</tr>';
        }

        $html.='</table>';





        $pdf->writeHTML($html, true, false, true, false, '');

        $pdf->Output("inf_liquida_prima", "D");
        exit();
    }

    /**
     * 
     * @param sfWebRequest $request
     */
    public function executeExcel(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");

        $id_agrup_concepto = $request['id_agrup_concepto'];
        $id_periodo = $request['id_periodo_filtro'];

//      $id_agrup_concepto = 1;
//      $id_periodo = 13;


        $consul = Doctrine_Manager::getInstance()->connection();


        /*
         * Tomar periodo mensual de la fecha de corte
         */
        //Sql
        $sql = <<<EOD
select * from no_periodo
where id_tipo_periodo = 1
and (select fecha_ini-1  from no_periodo where id_periodo = $id_periodo) between fecha_ini and fecha_fin
and rownum = 1  
EOD;
        //Ejecutar SQL
        $st = $consul->execute($sql);
        $rec = $st->fetchAll();
        $id_periodo_fecha_corte = $rec[0]['ID_PERIODO'];


        $sql = "select * from no_agrup_concepto where id_agrup_concepto=" . $id_agrup_concepto;
        $st = $consul->execute($sql);
        $agrupacion = $st->fetchAll();

        $nombre_agrupacion = $agrupacion[0]['DESCRIPCION'];

        $sql = "select * from no_periodo_V where id_periodo=" . $id_periodo;
        $st = $consul->execute($sql);
        $periodo = $st->fetchAll();

        $nombre_periodo = $periodo[0]['PERIODO'];
        $anho = $periodo[0]['ID_ANHOS'];
        $mes = $periodo[0]['ID_MESES'];



        $sql = "select tab0.*,tab1.*,tab3.* 
          
            from no_estado_func tab0
            left join no_datos_funcionario_v tab1 ON tab1.id_tipo_doc = tab0.id_tipo_doc and tab1.num_doc = tab0.num_doc
            left join no_nombramiento_v tab3 ON tab3.id_tipo_doc = tab0.id_tipo_doc and tab3.num_doc = tab0.num_doc
            
            where tab0.actual = 1 and tab0.periodo=" . $id_periodo;

        $st = $consul->execute($sql);
        $funcionarios = $st->fetchAll();

        $sql = "select tab0.*,tab1.* 
          
          from no_agrup_deta tab0
          left join no_concep_nomina tab1 ON tab1.id_concep_nomina = tab0.id_concep_nomina

        where tab0.id_agrup_concepto = " . $id_agrup_concepto;

        $st = $consul->execute($sql);
        $agrupaciones = $st->fetchAll();


        $arreglo = array();


        for ($i = 0; $i < count($funcionarios); $i++) {
            $valor = 0;
            $num_dias = 0;
            $id_tipo_doc = $funcionarios[$i]['ID_TIPO_DOC'];
            $num_doc = $funcionarios[$i]['NUM_DOC'];


            for ($j = 0; $j <= count($agrupaciones) - 1; $j++) {


                $id_concepto = $agrupaciones[$j]['ID_CONCEP_NOMINA'];
                $concepto = $agrupaciones[$j]['ABREVIATURA'];

                /**
                 * Tomar el valor del salario segun concepto periodo, para la fecha de corte prima de navidad - 20141128
                 */
                if ($id_concepto == 1) {
                    $agrupaciones[$j]['TIPO_VALOR'] = "R";
                }


                if ($agrupaciones[$j]['TIPO_VALOR'] == "C") {


                    $sql = "select nvl(valor,0) AS VALOR 
                       from no_concepto_func 
                       where id_tipo_doc=" . $id_tipo_doc . " and num_doc = " . $num_doc . " and id_concep_nomina=" . $id_concepto . " and estado = 1 and actual = 1";

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                    } else {
                        $valor = 0;
                    }
                }


                if ($agrupaciones[$j]['TIPO_VALOR'] == "R") {


                    $sql = "select valor from( SELECT tab.*, ROW_NUMBER() OVER ( "
                            . "PARTITION BY tab.num_doc ORDER BY TAB.FECHA_HASTA desc ) as rn "
                            . "from no_concepto_periodo tab "
                            . "where periodo = $id_periodo_fecha_corte and num_doc = $num_doc "
                            . "and id_tipo_doc = $id_tipo_doc and id_concep_nomina = $id_concepto  ) "
                            . "where rn = 1 ";

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                    } else {
                        $valor = 0;
                    }
                }

                if ($agrupaciones[$j]['TIPO_VALOR'] == "U") {


                    $sql = "select nvl(valor,0) AS VALOR 
                       from no_ultimo_valor 
                       where id_tipo_doc=" . $id_tipo_doc . " and num_doc = " . $num_doc . " and id_concep_nomina=" . $id_concepto;

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                    } else {
                        $valor = 0;
                    }
                }

                if ($agrupaciones[$j]['TIPO_VALOR'] == "M") {


                    $sql = "select nvl(valor_liquidado,0) AS VALOR, num_dias AS NUM_DIAS 
                       from no_liquida_nomina 
                       where id_tipo_doc=" . $id_tipo_doc . " and num_doc = " . $num_doc . " and id_concep_nomina=" . $id_concepto . " and id_periodo=" . $id_periodo;

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                        $num_dias = $conceptos[0]['NUM_DIAS'];
                    } else {
                        $valor = 0;
                        $num_dias = 0;
                    }
                }

                if ($agrupaciones[$j]['TIPO_VALOR'] == "V") {

                    $vig_ini = $anho;
                    $per_ini = 1;
                    $vig_fin = $anho;
                    $per_fin = $mes;


//                    $sql = "select nvl(sum(liqnom.valor_liquidado),0) as VALOR, 0 AS NUM_DIAS   from no_liquida_nomina liqnom  
//                        join no_periodo per on per.id_periodo = liqnom.id_periodo where    1 = 1 
//                        and per.id_anhos || lpad(per.id_meses, 2, '0') between  $vig_ini || lpad( $per_ini, 2, '0') and $vig_fin || lpad( $per_fin, 2, '0')  
//                                and liqnom.num_doc = $num_doc  and liqnom.id_tipo_doc = $id_tipo_doc  
//                                    and liqnom.id_concep_nomina = $id_concepto  ";


                    $sql = "
select  sum(valor) as valor from(

    select
   
    nvl(sum(liqnom.valor_liquidado),0) as valor 
   
    from no_liquida_nomina liqnom 
   
    join no_periodo per on per.id_periodo = liqnom.id_periodo
   
    where    1 = 1
    and per.id_anhos || lpad(per.id_meses, 2, '0')
    between  $vig_ini || lpad( $per_ini, 2, '0') and $vig_fin || lpad( $per_fin, 2, '0') 
    and liqnom.num_doc = $num_doc 
    and liqnom.id_tipo_doc = $id_tipo_doc 
    and liqnom.id_concep_nomina in ( $id_concepto  )
   
    union
   
    select
   
    nvl(sum(liqnom.valor_liquidado),0) as valor 
   
    from no_liquida_nomina liqnom 
   
    join no_periodo per on per.id_periodo = liqnom.id_periodo
   
    where    1 = 1
    and per.id_anhos || lpad(per.id_meses, 2, '0')
    between  $vig_ini || lpad( $per_ini, 2, '0') and $vig_fin || lpad( $per_fin, 2, '0') 
    and liqnom.num_doc = $num_doc 
    and liqnom.id_tipo_doc = $id_tipo_doc 
    and liqnom.id_concep_nomina in (  (select id_concep_ajuste from no_concep_nomina where id_concep_nomina = $id_concepto) )
   
    union
   
    select
   
    nvl(sum(liqnom.valor_liquidado),0) * -1 as valor 
   
    from no_liquida_nomina liqnom 
   
    join no_periodo per on per.id_periodo = liqnom.id_periodo
   
    where    1 = 1
    and per.id_anhos || lpad(per.id_meses, 2, '0')
    between  $vig_ini || lpad( $per_ini, 2, '0') and $vig_fin || lpad( $per_fin, 2, '0') 
    and liqnom.num_doc = $num_doc 
    and liqnom.id_tipo_doc = $id_tipo_doc 
    and liqnom.id_concep_nomina in (  (select id_concep_rein from no_concep_nomina where id_concep_nomina = $id_concepto) )

)";

                    $st = $consul->execute($sql);
                    $conceptos = $st->fetchAll();
                    if (count($conceptos) > 0) {
                        $valor = $conceptos[0]['VALOR'];
                    } else {
                        $valor = 0;
                    }
                }

                $fecha_ingreso = $funcionarios[$i]['FECHA_INGRESO'];
                $fecha_ingreso = explode(" ", $fecha_ingreso);
                $fecha_ingreso = $fecha_ingreso[0];

                $arreglo[$i]['NUM_DOC'] = $funcionarios[$i]['NUM_DOC'];
                $arreglo[$i]['NOMBRE'] = $funcionarios[$i]['NOMBRE_APELLIDO'];
                $arreglo[$i]['FECHA_INGRE'] = $fecha_ingreso;
                $arreglo[$i]['FECHA_TERMINA'] = "";
                $arreglo[$i]['NUM_DIAS'] = $num_dias;


                $arreglo[$i][$concepto] = $valor;
            }
        }


        $html = "<h2>" . $nombre_agrupacion . "</h2>";
        $html.="<h2>" . $nombre_periodo . "</h2>";




        $html.='<table border="1">';
        $html.='<tr>';

        foreach ($arreglo[0] as $key => $value) {

            $html.='<td style="text-align:center;background-color:rgb(100, 100, 100); color: rgb(255, 255, 255);">' . $key . '</td>';
        }
        $html.='</tr>';


        /**
         * FORMATO HTML PARA TABLAS - 20141205
         * Texto . td style='mso-number-format:\@'> 
         * Numero . td style='mso-number-format:\"0\.00'>".str_replace('.',',',$recaudado)
         * Fecha . td style='mso-number-format:\"yyyy\-mm\-dd\"'>
         */
        foreach ($arreglo as $key => $value) {
            $html.='<tr>';

            foreach ($value as $key => $registro) {
                if (!is_numeric($registro)) {

                    if ($key == "FECHA_INGRE" || $key == "FECHA_TERMINA") {
                        $html.='<td style="text-align:center">' . $registro . '</td>';
                    } else {

                        $html.='<td>' . $registro . '</td>';
                    }
                } else {
                    if ($key == "NUM_DOC" || $key == "NUM_DIAS") {
                        $html.='<td  style="text-align:center">' . $registro . '</td>';
                    } else {
                        $html.='<td  style="text-align:right" >' . str_replace('.', ',', $registro) . '</td>';
                    }
                }
            }
            $html.='</tr>';
        }

        $html.='</table>';


        $nombre = "Planilla_Liquida.xls";
        header("Content-type: application/vnd.ms-excel; name='excel'");
        header("Content-Disposition: filename=" . $nombre);
        header("Pragma: no-cache");
        header("Expires: 0");
        echo $html;
        die();
        exit();
    }

}
