<?php

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

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeIndex(sfWebRequest $request) {



        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");


        /*
         * obtener variables del request
         */
        $tipo = $request->getParameter("tipo");
        $documento = $request->getParameter("documento");
        $numero = $request->getParameter("numero");


        if ($tipo != null) {
            $this->titulo = "Worflow " . $tipo . " " . $numero;
        } else {
            $this->titulo = "Worflow Proceso " . $numero;
        }
        $estados = array();
        $estados[0] = "PROGRAMACION_COMISION";
        $estados[1] = "CDP";
        $estados[2] = "RESOLUCION";
        $estados[3] = "RP";
        $estados[4] = "RADICACION_CXP";
        $estados[5] = "OBLIGACION";
        $estados[6] = "LEGALIZANDO";
        $estados[7] = "RADICADO_COMISION";
        $estados[8] = "REVISION_LEGALIZACION";
        $estados[9] = "CIERRE_LEGALIZACION";

        $where = " where " . $documento . "=" . $numero;

        if ($documento != null && $numero != null) {

            /*
             * conexion a base de datos websafiERP
             */
            $records = array();
            //connexion a la base de datos
            $conn = oci_connect("websafiERP", "Sistemas", "192.168.2.9/websafiERP"); //se debe verificar cambio de ip para uso fuera de la red interna

            $sql = <<<EOD
select case when c.id is null then 0 else (case when c.estado=1 then 1 else 2 end) end as PROGRAMACION_COMISION, to_char(c.fecha,'DD-MM-YYYY') as PROGRAMACION_COMISION_ORDEN,
case when cdp.id is null then 0 else (case when cdp.estado=-1 then 2 else 1 end) end as CDP,  to_char(cdp.fecha,'DD-MM-YYYY') as CDP_ORDEN,
case when res.id is null then 0 else 1 end as RESOLUCION,'01-01-2011' as RESOLUCION_ORDEN,
case when rp.id is null then 0 else (case when rp.estado=1 then 1 else 2 end) end as RP, to_char(rp.fecha_proceso,'DD-MM-YYYY') as RP_ORDEN,
case when cxp.id_cxp is null then 0 else (case when cxp.estado is null then 1 else 2 end) end as RADICACION_CXP, to_char(cxp.fecha_proceso,'DD-MM-YYYY') as RADICACION_CXP_ORDEN,
case when obl.id_obligacion is null then 0 else (case when obl.estado=-1 then 2 else 1 end) end as OBLIGACION, to_char(obl.fecha_proceso,'DD-MM-YYYY') as OBLIGACION_ORDEN,
case when legaliz.id_cierre_comision is null then 0 else 1 end as LEGALIZANDO, to_char(legaliz.fecha_proceso,'DD-MM-YYYY') as LEGALIZANDO_ORDEN,
case when radic.id_cierre_comision is null then 0 else 1 end as RADICADO_COMISION, to_char(radic.fecha_proceso,'DD-MM-YYYY') as RADICADO_COMISION_ORDEN,
case when revis.id_cierre_comision is null then 0 else 1 end as REVISION_LEGALIZACION, to_char(revis.fecha_proceso,'DD-MM-YYYY') as REVISION_LEGALIZACION_ORDEN,
case when cierre.id_cierre_comision is null then 0 else 1 end as CIERRE_LEGALIZACION, to_char(cierre.fecha_proceso,'DD-MM-YYYY') as CIERRE_LEGALIZACION_ORDEN
from COMISIONES c
left join PR_CDP_COMIS cdp ON cdp.id_comision = c.id
and cdp.ano_fiscal = c.vigencia
left join PR_RESOL_COMIS res ON res.id_cdp = cdp.id
and res.vigencia = c.vigencia
and res.id_vigencia = cdp.id_vigencia
left join PR_RP_COMIS rp ON cdp.id = rp.id_cdp
and rp.id_vigencia = cdp.id_vigencia
and rp.vigencia = c.vigencia
and rp.no_acto_admin = res.id
left join TS_CXP cxp ON rp.id = cxp.id_rp
and cxp.ano_fiscal = rp.vigencia
and cxp.id_vigencia = rp.id_vigencia
left join (
select cat.id_obligacion, cat.id_vigencia, cat.ano_fiscal, cat.id_rp, min(cat.fecha_proceso) as fecha_proceso, cat.estado
from TS_OBLIGACION cat
group by cat.id_obligacion, cat.id_vigencia, cat.ano_fiscal, cat.id_rp, cat.estado
) obl ON obl.id_rp = rp.id
and obl.id_vigencia = rp.id_vigencia
and obl.ano_fiscal = rp.vigencia
left join (
select ci.id_rp_comis, ci.vigencia, ci.id_vigencia, ci.id_cierre_comision, ci.fecha_proceso
from PR_CIERRE_COMISION ci
where ci.id_tipo_nov_comis = 30
)legaliz ON rp.id = legaliz.id_rp_comis
and legaliz.vigencia = rp.vigencia
and legaliz.id_vigencia = rp.id_vigencia
left join (
select ci.id_rp_comis, ci.vigencia, ci.id_vigencia, ci.id_cierre_comision,  ci.fecha_proceso
from PR_CIERRE_COMISION ci
where ci.id_tipo_nov_comis = 28
)radic ON rp.id = radic.id_rp_comis
and radic.vigencia = rp.vigencia
and radic.id_vigencia = rp.id_vigencia
left join (
select ci.id_rp_comis, ci.vigencia, ci.id_vigencia, ci.id_cierre_comision,  ci.fecha_proceso
from PR_CIERRE_COMISION ci
where ci.id_tipo_nov_comis = 28
)revis ON rp.id = revis.id_rp_comis
and revis.vigencia = rp.vigencia
and revis.id_vigencia = rp.id_vigencia
left join (
select ci.id_rp_comis, ci.vigencia, ci.id_vigencia, ci.id_cierre_comision,  ci.fecha_proceso
from PR_CIERRE_COMISION ci
where ci.id_tipo_nov_comis = 29
)cierre ON rp.id = cierre.id_rp_comis
and cierre.vigencia = rp.vigencia
and cierre.id_vigencia = rp.id_vigencia
$where 
group by case when c.id is null then 0 else (case when c.estado=1 then 1 else 2 end) end , to_char(c.fecha,'DD-MM-YYYY'),
case when cdp.id is null then 0 else (case when cdp.estado=-1 then 2 else 1 end) end ,  to_char(cdp.fecha,'DD-MM-YYYY') ,
case when res.id is null then 0 else 1 end ,'01-01-2011' ,
case when rp.id is null then 0 else (case when rp.estado=1 then 1 else 2 end) end , to_char(rp.fecha_proceso,'DD-MM-YYYY') ,
case when cxp.id_cxp is null then 0 else (case when cxp.estado is null then 1 else 2 end) end , to_char(cxp.fecha_proceso,'DD-MM-YYYY') ,
case when obl.id_obligacion is null then 0 else (case when obl.estado=-1 then 2 else 1 end) end , to_char(obl.fecha_proceso,'DD-MM-YYYY') ,
case when legaliz.id_cierre_comision is null then 0 else 1 end , to_char(legaliz.fecha_proceso,'DD-MM-YYYY') ,
case when radic.id_cierre_comision is null then 0 else 1 end , to_char(radic.fecha_proceso,'DD-MM-YYYY') ,
case when revis.id_cierre_comision is null then 0 else 1 end , to_char(revis.fecha_proceso,'DD-MM-YYYY') ,
case when cierre.id_cierre_comision is null then 0 else 1 end , to_char(cierre.fecha_proceso,'DD-MM-YYYY')
EOD;

            //ejecutar sql para la connexion
            $stid = oci_parse($conn, $sql);
            $exec = oci_execute($stid);


            //recorrer la salida(filas) y guardar totdos en un solo array
            while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
//ID_BN en websafi TESORERIA
//                echo $id_ts_bn= $row['username'];
//            echo $row . "-" . $i++;
//            foreach ($row as $key => $value) {
//                echo $key . "-" . $value;
//            }
                $records[] = $row;
            }
            //cerrar conexion
            oci_close($conn);

//            $st = $consul->execute($sql);
//            $novp = $st->fetchAll();
            $orden = $this->getOrden($records);
            $this->matriz = $this->transformar($records, $orden, $estados);
            $this->orden = $orden;
            $this->resultado = $records;
            $this->estados = $estados;
            $this->documento = $documento;
            $this->numero = $numero;
        }




        /*
          $where = " where " . $documento . "=" . $numero;
          $consul = Doctrine_Manager::getInstance()->connection();
          $sql = "--Estados:
          --0 No tiene documento,
          --1 Documento Activo
          --2 Documento Anulado
          select case when c.id is null then 0 else (case when c.estado=1 then 1 else 2 end) end as PROGRAMACION_COMISION, to_char(c.fecha,'DD-MM-YYYY') as PROGRAMACION_COMISION_ORDEN,
          case when cdp.id is null then 0 else (case when cdp.estado=-1 then 2 else 1 end) end as CDP,  to_char(cdp.fecha,'DD-MM-YYYY') as CDP_ORDEN,
          case when res.id is null then 0 else 1 end as RESOLUCION,'01-01-2011' as RESOLUCION_ORDEN,
          case when rp.id is null then 0 else (case when rp.estado=1 then 1 else 2 end) end as RP, to_char(rp.fecha_proceso,'DD-MM-YYYY') as RP_ORDEN,
          case when cxp.id_cxp is null then 0 else (case when cxp.estado is null then 1 else 2 end) end as RADICACION_CXP, to_char(cxp.fecha_proceso,'DD-MM-YYYY') as RADICACION_CXP_ORDEN,
          case when obl.id_obligacion is null then 0 else (case when obl.estado=-1 then 2 else 1 end) end as OBLIGACION, to_char(obl.fecha_proceso,'DD-MM-YYYY') as OBLIGACION_ORDEN,
          case when legaliz.id_cierre_comision is null then 0 else 1 end as LEGALIZANDO, to_char(legaliz.fecha_proceso,'DD-MM-YYYY') as LEGALIZANDO_ORDEN,
          case when radic.id_cierre_comision is null then 0 else 1 end as RADICADO_COMISION, to_char(radic.fecha_proceso,'DD-MM-YYYY') as RADICADO_COMISION_ORDEN,
          case when revis.id_cierre_comision is null then 0 else 1 end as REVISION_LEGALIZACION, to_char(revis.fecha_proceso,'DD-MM-YYYY') as REVISION_LEGALIZACION_ORDEN,
          case when cierre.id_cierre_comision is null then 0 else 1 end as CIERRE_LEGALIZACION, to_char(cierre.fecha_proceso,'DD-MM-YYYY') as CIERRE_LEGALIZACION_ORDEN
          from COMISIONES c
          left join PR_CDP_COMIS cdp ON cdp.id_comision = c.id
          and cdp.ano_fiscal = c.vigencia
          left join PR_RESOL_COMIS res ON res.id_cdp = cdp.id
          and res.vigencia = c.vigencia
          and res.id_vigencia = cdp.id_vigencia
          left join PR_RP_COMIS rp ON cdp.id = rp.id_cdp
          and rp.id_vigencia = cdp.id_vigencia
          and rp.vigencia = c.vigencia
          and rp.no_acto_admin = res.id
          left join TS_CXP cxp ON rp.id = cxp.id_rp
          and cxp.ano_fiscal = rp.vigencia
          and cxp.id_vigencia = rp.id_vigencia
          left join (
          select cat.id_obligacion, cat.id_vigencia, cat.ano_fiscal, cat.id_rp, min(cat.fecha_proceso) as fecha_proceso, cat.estado
          from TS_OBLIGACION cat
          group by cat.id_obligacion, cat.id_vigencia, cat.ano_fiscal, cat.id_rp, cat.estado
          ) obl ON obl.id_rp = rp.id
          and obl.id_vigencia = rp.id_vigencia
          and obl.ano_fiscal = rp.vigencia
          left join (
          select ci.id_rp_comis, ci.vigencia, ci.id_vigencia, ci.id_cierre_comision, ci.fecha_proceso
          from PR_CIERRE_COMISION ci
          where ci.id_tipo_nov_comis = 30
          )legaliz ON rp.id = legaliz.id_rp_comis
          and legaliz.vigencia = rp.vigencia
          and legaliz.id_vigencia = rp.id_vigencia
          left join (
          select ci.id_rp_comis, ci.vigencia, ci.id_vigencia, ci.id_cierre_comision,  ci.fecha_proceso
          from PR_CIERRE_COMISION ci
          where ci.id_tipo_nov_comis = 28
          )radic ON rp.id = radic.id_rp_comis
          and radic.vigencia = rp.vigencia
          and radic.id_vigencia = rp.id_vigencia
          left join (
          select ci.id_rp_comis, ci.vigencia, ci.id_vigencia, ci.id_cierre_comision,  ci.fecha_proceso
          from PR_CIERRE_COMISION ci
          where ci.id_tipo_nov_comis = 28
          )revis ON rp.id = revis.id_rp_comis
          and revis.vigencia = rp.vigencia
          and revis.id_vigencia = rp.id_vigencia
          left join (
          select ci.id_rp_comis, ci.vigencia, ci.id_vigencia, ci.id_cierre_comision,  ci.fecha_proceso
          from PR_CIERRE_COMISION ci
          where ci.id_tipo_nov_comis = 29
          )cierre ON rp.id = cierre.id_rp_comis
          and cierre.vigencia = rp.vigencia
          and cierre.id_vigencia = rp.id_vigencia
          " . $where . "
          --se agrupa por todos los elementos del select!
          group by case when c.id is null then 0 else (case when c.estado=1 then 1 else 2 end) end , to_char(c.fecha,'DD-MM-YYYY'),
          case when cdp.id is null then 0 else (case when cdp.estado=-1 then 2 else 1 end) end ,  to_char(cdp.fecha,'DD-MM-YYYY') ,
          case when res.id is null then 0 else 1 end ,'01-01-2011' ,
          case when rp.id is null then 0 else (case when rp.estado=1 then 1 else 2 end) end , to_char(rp.fecha_proceso,'DD-MM-YYYY') ,
          case when cxp.id_cxp is null then 0 else (case when cxp.estado is null then 1 else 2 end) end , to_char(cxp.fecha_proceso,'DD-MM-YYYY') ,
          case when obl.id_obligacion is null then 0 else (case when obl.estado=-1 then 2 else 1 end) end , to_char(obl.fecha_proceso,'DD-MM-YYYY') ,
          case when legaliz.id_cierre_comision is null then 0 else 1 end , to_char(legaliz.fecha_proceso,'DD-MM-YYYY') ,
          case when radic.id_cierre_comision is null then 0 else 1 end , to_char(radic.fecha_proceso,'DD-MM-YYYY') ,
          case when revis.id_cierre_comision is null then 0 else 1 end , to_char(revis.fecha_proceso,'DD-MM-YYYY') ,
          case when cierre.id_cierre_comision is null then 0 else 1 end , to_char(cierre.fecha_proceso,'DD-MM-YYYY')";



          if ($documento != null && $numero != null) {
          $st = $consul->execute($sql);
          $novp = $st->fetchAll();
          $orden = $this->getOrden($novp);
          $this->matriz = $this->transformar($novp, $orden, $estados);
          $this->orden = $orden;
          $this->resultado = $novp;
          $this->estados = $estados;
          $this->documento = $documento;
          $this->numero = $numero;
          }
         */
    }

    public function getOrden($array) {
        $array = $array[0];
        $orden = array();
        $i = 0;
        $j = 0;
        foreach ($array as $key => $value) {
            if ($j % 2 != 0) {//impares
                if (!$this->isAsigned($orden, $value)) {
                    $orden[$i] = $value;
                    $i++;
                }
            } else {//pares
            }
            $j++;
        }
        return $orden;
    }

    public function transformar($array, $orden, $estados) {
        $array = $array[0];
        $matriz = array();
        foreach ($orden as $o) {
            $matriz[$o] = array();
            foreach ($estados as $e) {
                if ($array["$e"] != 0 && $array[$e . "_ORDEN"] == $o) {
                    $matriz[$o][$e] = $array["$e"];
                } else {
                    $matriz[$o][$e] = 0;
                }
            }
        }
        return $matriz;
    }

    public function isAsigned($array, $value) {
        foreach ($array as $arr) {
            if ($arr == $value) {
                return true;
            }
        }
        return false;
    }

}
