<?php

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

    /**
     * Obtener log especificos
     *
     * @param sfRequest $request A request object
     */
    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");

        /*
         * 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 codigo';
        }

        //solo imprime log la primera vez de consulta
        if ($rowStart == 0) {
            /*
             * variables por defecto para el registro de log
             */
            $id_tabla = 'null';
            $id_vigencia = 'null';
            $id_cen_op = 'null';

            $id_cia = 'null';
            if (isset($request['id_cia'])) {
                $id_cia = $request['id_cia'];
            }

            //obtener id maestro tabla
            $id_mae_bd = "null";

            //1 - indica operacion de consulta
            $id_ope_bd = 1;

            //id del maestro tercero
            $id_mae_ter = 1;
            if (isset($request['id_username'])) {
                $id_mae_ter = $request['id_username'];
            }
            $usuario = 'admin';
            if (isset($request['username'])) {
                if (!is_null($request['username']) && $request['username'] != '') {
                    $usuario = $request['username'];
                }
            }
            $comando = 'sin comando';
            if (isset($request['comando'])) {
                $comando = $request['comando'];
            }
            //construir observacion
            $observacion = "'Se consulto ventas por producto la funcionalidad: " . $comando . "'";

            $id_punto_venta_log = 'null';
            if (isset($request['punto_venta_log'])) {
                $id_punto_venta_log = $request['punto_venta_log'];
            }

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $id_punto_venta_log);
        }

        /*
         * Manejo de errores
         */
        try {


            /*
             * Variables obligatorias
             * 
             * $P{fecha_ini} AND  $P{fecha_fin}
             */
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];

            /*
             * Variables opcionales
             * 
             * $P!{whereProducto} $P!{wherePuntoVenta}
             */
            //producto
            if (isset($request['id_producto'])) {
                $whereProducto = " AND tab0.id_producto = " . $request['id_producto'];
            } else {
                $whereProducto = ' ';
            }
            //punto de venta
            if (isset($request['id_punto_venta'])) {
                $wherePuntoVenta = " AND tab0.id_punto_venta = " . $request['id_punto_venta'];
            } else {
                $wherePuntoVenta = ' ';
            }


            //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 tab0.* from (

select
tab1.id_punto_venta,
tab0.id_producto,tab2.codigo,tab2.descripcion,
tab3.nombre AS PUNTO,tab1.sec_factura,
tab1.fecha_facturacion,

case when tab4.razon_soc IS NULL then tab4.num_doc||' - '||tab4.pnombre||' '||tab4.snombre||' '||tab4.papellido||' '||sapellido else tab4.num_doc||' - '||tab4.razon_soc end AS CLIENTE,

sum(nvl(tab0.cantidad,0)) AS CANTIDAD, 
sum(nvl(tab0.valor_uni_bruto,0)) AS VALOR_BRUTO,
sum(nvl(tab0.valor_uni_iva,0)) AS VALOR_IVA, 
sum(nvl(tab0.valor_uni_total,0)) AS VALOR_TOTAL

from ca_factura_prod tab0
left join ca_factura_pos tab1 ON tab0.id_factura=tab1.id_factura
left join ca_producto tab2 ON tab2.id_producto=tab0.id_producto
left join ca_punto_venta tab3 ON tab3.id_punto_venta = tab1.id_punto_venta
LEFT JOIN INTERCEROS tab4 ON tab4.id_mae_ter = tab1.id_mae_ter

where
to_char(tab1.fecha_facturacion, 'YYYY-MM-DD') BETWEEN '$fecha_ini' AND  '$fecha_fin'

group by
tab1.id_punto_venta,
tab0.id_producto,tab2.codigo,tab2.descripcion,tab3.nombre,tab1.sec_factura,tab1.fecha_facturacion,case when tab4.razon_soc IS NULL then tab4.num_doc||' - '||tab4.pnombre||' '||tab4.snombre||' '||tab4.papellido||' '||sapellido else tab4.num_doc||' - '||tab4.razon_soc end

)tab0
where
1 = 1
$whereProducto $wherePuntoVenta
            
$sortBy

)
EOD;


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


            //obtener el listado de recaudos
            $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (

select tab0.* from (

select
tab1.id_punto_venta,
tab0.id_producto,tab2.codigo,tab2.descripcion,
tab3.nombre AS PUNTO,tab1.sec_factura,
tab1.fecha_facturacion,

case when tab4.razon_soc IS NULL then tab4.num_doc||' - '||tab4.pnombre||' '||tab4.snombre||' '||tab4.papellido||' '||sapellido else tab4.num_doc||' - '||tab4.razon_soc end AS CLIENTE,

sum(nvl(tab0.cantidad,0)) AS CANTIDAD, 
sum(nvl(tab0.valor_uni_bruto,0)) AS VALOR_BRUTO,
sum(nvl(tab0.valor_uni_iva,0)) AS VALOR_IVA, 
sum(nvl(tab0.valor_uni_total,0)) AS VALOR_TOTAL

from ca_factura_prod tab0
left join ca_factura_pos tab1 ON tab0.id_factura=tab1.id_factura
left join ca_producto tab2 ON tab2.id_producto=tab0.id_producto
left join ca_punto_venta tab3 ON tab3.id_punto_venta = tab1.id_punto_venta
LEFT JOIN INTERCEROS tab4 ON tab4.id_mae_ter = tab1.id_mae_ter

where
to_char(tab1.fecha_facturacion, 'YYYY-MM-DD') BETWEEN '$fecha_ini' AND  '$fecha_fin'

group by
tab1.id_punto_venta,
tab0.id_producto,tab2.codigo,tab2.descripcion,tab3.nombre,tab1.sec_factura,tab1.fecha_facturacion,case when tab4.razon_soc IS NULL then tab4.num_doc||' - '||tab4.pnombre||' '||tab4.snombre||' '||tab4.papellido||' '||sapellido else tab4.num_doc||' - '||tab4.razon_soc end

)tab0
where
1 = 1
$whereProducto $wherePuntoVenta

$sortBy
          
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);


            $this->totalRows = $total_record_count;
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($resultado);
            $this->list_data = $resultado;
            $this->logMessage("[VENTAS_PRO_RES] Consulta exitosa.");
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

    /**
     * Metodo para sumar cartera clasificada tercero
     *
     * @param sfWebRequest $request
     */
    public function executeSum(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");

        /*
         * 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 codigo';
        }

        //manejo de errores
        try {

            /*
             * Variables obligatorias
             * 
             * $P{fecha_ini} AND  $P{fecha_fin}
             */
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];

            /*
             * Variables opcionales
             * 
             * $P!{whereProducto} $P!{wherePuntoVenta}
             */
            //producto
            if (isset($request['id_producto'])) {
                $whereProducto = " AND tab0.id_producto = " . $request['id_producto'];
            } else {
                $whereProducto = ' ';
            }
            //punto de venta
            if (isset($request['id_punto_venta'])) {
                $wherePuntoVenta = " AND tab0.id_punto_venta = " . $request['id_punto_venta'];
            } else {
                $wherePuntoVenta = ' ';
            }


            //obtener el listado de recaudos
            $sql = <<<EOD
SELECT

   'TOTAL' as codigo,

   SUM(CANTIDAD)  as CANTIDAD,
   SUM(VALOR_BRUTO)  as VALOR_BRUTO,
   SUM(VALOR_IVA)  as VALOR_IVA,
   SUM(VALOR_TOTAL)  as VALOR_TOTAL

FROM (

select tab0.* from (

select
tab1.id_punto_venta,
tab0.id_producto,tab2.codigo,tab2.descripcion,
tab3.nombre AS PUNTO,tab1.sec_factura,
tab1.fecha_facturacion,

case when tab4.razon_soc IS NULL then tab4.num_doc||' - '||tab4.pnombre||' '||tab4.snombre||' '||tab4.papellido||' '||sapellido else tab4.num_doc||' - '||tab4.razon_soc end AS CLIENTE,

sum(nvl(tab0.cantidad,0)) AS CANTIDAD, 
sum(nvl(tab0.valor_uni_bruto,0)) AS VALOR_BRUTO,
sum(nvl(tab0.valor_uni_iva,0)) AS VALOR_IVA, 
sum(nvl(tab0.valor_uni_total,0)) AS VALOR_TOTAL

from ca_factura_prod tab0
left join ca_factura_pos tab1 ON tab0.id_factura=tab1.id_factura
left join ca_producto tab2 ON tab2.id_producto=tab0.id_producto
left join ca_punto_venta tab3 ON tab3.id_punto_venta = tab1.id_punto_venta
LEFT JOIN INTERCEROS tab4 ON tab4.id_mae_ter = tab1.id_mae_ter

where
to_char(tab1.fecha_facturacion, 'YYYY-MM-DD') BETWEEN '$fecha_ini' AND  '$fecha_fin'

group by
tab1.id_punto_venta,
tab0.id_producto,tab2.codigo,tab2.descripcion,tab3.nombre,tab1.sec_factura,tab1.fecha_facturacion,case when tab4.razon_soc IS NULL then tab4.num_doc||' - '||tab4.pnombre||' '||tab4.snombre||' '||tab4.papellido||' '||sapellido else tab4.num_doc||' - '||tab4.razon_soc end

)tab0
where
1 = 1
$whereProducto $wherePuntoVenta

$sortBy

)

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


            $this->totalRows = count($resultado);
            $this->startRow = 0;
            $this->endRow = count($resultado);
            $this->list_data = $resultado;
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

}
