<?php

/**
 * Incidente #2504 <-> Traer valor de inventarios -- 20170303
 * producto_inv actions.
 *
 * @package    cartera
 * @subpackage producto_inv
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class producto_invActions extends sfActions {

    /**
     * Executes list action
     *
     * @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 ';
        }



        /*
         * Manejo de errores
         */
        try {


            //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);


            /*
             * Variables obligatorias
             */
            $punto_venta_log = $request['punto_venta_log'];
            $codigo_elemento = $request['codigo'];
            $por_iva = $request['por_iva'];

            /**
             * Si aplica inventario - 20150715
             */
            $sql = <<<EOD
select 
ter.num_doc as num_doc_inv,
ter.razon_soc,
es.descripcion as espacio,
ta.descripcion as tipo_almacenamiento,
co.prefijo,
co.nom_cen_op,
pv.* 
from ca_punto_venta pv

left join centro_operacion co
on pv.id_cen_op = co.id_cen_op

left join in_tipo_almacenamiento ta
on ta.id_tipo_almacenamiento = pv.id_tipo_almacenamiento

left join in_espacio es
on pv.id_espacio = es.id_espacio

left join interceros_v ter
on ter.id_mae_ter = pv.id_mae_ter

where 
pv.id_punto_venta = $punto_venta_log 
and pv.aplica_inventario = 1 
EOD;
            //Ejecutar SQL
            $records_pv = CN_TABLE::executeSQL($sql);

            //Validar si el punto aplica inventario
            if (count($records_pv) > 0) {
                $this->logMessage("[validar_prod_inv] El punto de venta aplica inventario.");

                $id_cen_op = $records_pv[0]['id_cen_op'];
                $id_concepto_movimiento = $records_pv[0]['id_concepto_movimiento'];
                $id_mae_ter = $records_pv[0]['id_mae_ter'];
                $id_tipo_almacenamiento = $records_pv[0]['id_tipo_almacenamiento'];
                $id_espacio = $records_pv[0]['id_espacio'];


                $num_doc_inv = $records_pv[0]['num_doc_inv'];
                $razon_soc = $records_pv[0]['razon_soc'];
                $espacio = $records_pv[0]['espacio'];
                $tipo_almacenamiento = $records_pv[0]['tipo_almacenamiento'];
                $prefijo = $records_pv[0]['prefijo'];
                $nom_cen_op = $records_pv[0]['nom_cen_op'];


                $sql_consulta = <<<EOD
select 
inv.valor_unitario - round( inv.valor_unitario / (1+$por_iva/100) ) as valor_iva,    
$por_iva as por_iva,     
inv.* 
from in_inventario_con inv
where 
inv.id_cen_op = $id_cen_op
and inv.id_espacio = $id_espacio
and  inv.id_mae_ter = $id_mae_ter
and inv.id_tipo_almacenamiento = $id_tipo_almacenamiento

and (inv.id_linea, inv.id_clase, inv.id_catalogo) in ( 
    select 
    invle.id_linea, invle.id_clase, invle.id_catalogo
    from in_codigo_elemento_v invle
    where 
    invle.codigo_elemento = '$codigo_elemento'
) 
EOD;

                /*
                 * sql que trae los resultados
                 * por los filtros, para totalizar las filas
                 */
                //obtener el listado de recaudos
                $sql = <<<EOD
    
$sql_consulta

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

                if (count($resultado) > 0) {

                    $this->totalRows = count($resultado);
                    $this->startRow = 0;
                    $this->endRow = 0 + count($resultado);
                    $this->list_data = $resultado;
                    $this->logMessage("[producto_inv] Consulta de producto exitosa.");
                } else {

                    $this->status = 0;
                    $this->list_data = array();
                    $this->logMessage("[producto_inv] Validación de producto existe.");
                }
            } else {

                $this->status = 0;
                $this->list_data = array();
                $this->logMessage("[producto_inv] Validación del punto de venta aplica inventario.");
            }
        } 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());
        }
    }

}
