<?php

/**
 * cuentas_contables_productos actions.
 *
 * @package    cartera
 * @subpackage cuentas_contables_productos
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class cuentas_contables_productosActions 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 cuenta, auxiliar, tercero ';
        }

        //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 = 'cuentas_contables_productos';
//            if (isset($request['comando'])) {
//                $comando = $request['comando'];
//            }
            //construir observacion
            $observacion = "'Se consulto log especifico 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);
        }


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

        /*
         * Manejo de errores
         */
        try {

            /*
             * Variables obligatorias
             */
            $id_productos = $request['id_productos'];
            $producto_names = $request['producto_names'];
            $valores = $request['valores'];
            $tercero = $request['tercero'];

            /*
             * Variables opcionales
             */
            //tercero
            if (isset($request['id_mae_ter'])) {
                $whereTercero = " " . $request['id_mae_ter'];
            } else {
                $whereTercero = ' ';
            }

            $resultado_prod = array();
            $resultado = array();

            //Armar array de productos
            $productos = explode("@", $id_productos);
            $producto_names = explode("@", $producto_names);
            $valores = explode("@", $valores);

            $cant = count($productos);

            for ($i = 1; $i < $cant; $i++) {
                $resultado_prod[$i]['id_producto'] = $productos[$i];
                $resultado_prod[$i]['producto'] = $producto_names[$i];
                $resultado_prod[$i]['valor'] = $valores[$i];
                $resultado_prod[$i]['nombre_tercero'] = $tercero;
            }

            $j = 1;
            foreach ($resultado_prod as $value) {

                $id_producto = $value['id_producto'];
                $producto = $value['producto'];
                $valor = $value['valor'];

                //obtener el listado de cuentas
                $sql = <<<EOD
select distinct

iccam.valor as id_producto,
'$producto' as producto,      
'$valor' as valor,       
case when icasi.naturaleza = 'D' then $valor else 0 end as debito,     
case when icasi.naturaleza = 'C' then $valor else 0 end as credito,   
icasi.*,
icgrp.nombre as grupo,
iccam.catalogo as catalogo_iccam,
iccam.auxiliar as auxiliar_iccam,
subcdig.nombre as nombre_catalogo,
subcaux.nom_aux as nombre_auxiliar

from ic_asiento@CONTABILIDAD.ANM.LOCAL icasi

join ic_grupo@CONTABILIDAD.ANM.LOCAL icgrp
on icgrp.id_grupo = icasi.id_grupo_id

left join ic_campo_cuenta@CONTABILIDAD.ANM.LOCAL iccam
on iccam.id_grupo_id = icasi.id_grupo_id

left join cn_subc_digitos@CONTABILIDAD.ANM.LOCAL subcdig
on subcdig.digitos = iccam.catalogo

left join cn_subc_digitos_aux@CONTABILIDAD.ANM.LOCAL subcaux
on subcaux.digitos = iccam.catalogo
and subcaux.cod_aux = iccam.auxiliar

where
icasi.id_concepto_id = 95
and icasi.id_grupo_id is not null
and iccam.valor = $id_producto

order by
iccam.catalogo,
iccam.auxiliar
EOD;
                //ejecuta y obtiene el resultado del sql
                $resultado_cuenta = CN_TABLE::executeSQL($sql);

                foreach ($resultado_cuenta as $value_cuenta) {

                    $resultado[$j]['id_producto'] = $value_cuenta['id_producto'];
                    $resultado[$j]['producto'] = $value_cuenta['producto'];
                    $resultado[$j]['valor'] = $value_cuenta['valor'];
                    $resultado[$j]['nombre_tercero'] = $tercero;

                    $resultado[$j]['cuenta'] = $value_cuenta['catalogo_iccam'];
                    $resultado[$j]['nombre_cuenta'] = $value_cuenta['nombre_catalogo'];
                    $resultado[$j]['auxiliar'] = $value_cuenta['auxiliar_iccam'] . " " . $value_cuenta['nombre_auxiliar'];
                    
                    
                    $resultado[$j]['debito'] = $value_cuenta['debito'];                    
                    $resultado[$j]['credito'] = $value_cuenta['credito'];

                    $j++;
                }
            }

            //$this->totalRows = $total_record_count;
            //$this->startRow = $rowStart;
            //$this->endRow = $rowStart + count($resultado);
            $this->list_data = $resultado;
            $this->logMessage("[cuentas_contables_productos] 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());
        }
    }

}
