<?php
//  vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: 
/**
* Estadísticas victimas combatientes
 *
 * PHP version 5
 *
 * @category  SIVeL
 * @package   SIVeL
 * @author    Vladimir Támara <vtamara@pasosdeJesus.org>
 * @copyright 2004 Dominio público. Sin garantías.
 * @license   http://creativecommons.org/licenses/publicdomain/ Dominio Público. Sin garantías.
 * @version   $Id: estadisticas_comb.php,v 1.29 2009/05/03 12:23:21 vtamara Exp $
 * @link      http://sivel.sf.net
*/

/**
 * Estadísticas victimas combatientes
 */

include "aut/conf.php";
require_once 'HTML/QuickForm/Controller.php';
require_once 'HTML/QuickForm/Action/Display.php';
require_once 'HTML/QuickForm/Action/Next.php';
require_once 'HTML/QuickForm/Action/Back.php';
require_once 'HTML/QuickForm/Action/Jump.php';
require_once 'HTML/QuickForm/header.php';
require_once 'HTML/QuickForm/date.php';
require_once 'HTML/QuickForm/text.php';
require_once 'PagLocalizacion.php';
require_once 'PagTipoViolencia.php';
require_once 'ResConsulta.php';

/**
 * Responde a botón Consulta
 *
 * @category SIVeL
 * @package  SIVeL
 * @author   Vladimir Támara <vtamara@pasosdeJesus.org>
 * @license  http://creativecommons.org/licenses/publicdomain/ Dominio Público.
 * @link     http://sivel.sf.net/tec
 */
class AccionEstadisticasComb extends HTML_QuickForm_Action
{

    /**
     * Muestra un dato
     * 
     * @param string  $t    Selector
     * @param unknown $np   Nombre de organización
     * @param unknown $ndep Departamento
     * @param unknown $nmun Municipio
     * @param array   $res  Vector con otros
     *
     * @return void   
     * @access public 
     */
    function muestraUno($t, $np, $ndep, $nmun, $res)
    {
        if ($t == 'Organización') {
            echo "<td>$np</td>";
        } elseif ($t == 'C. Dep.') {
           echo "<td>$ndep</td>";
        } elseif ($t == 'C. Mun.') {
           echo "<td>$nmun</td>";
        } else {
            echo "<td>" .
                (isset($res[$t]) ? (int)$res[$t] : 0) ."</td>";
        }
    }

    /**
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *                            
     * @return void  
     */
    function perform(&$page, $actionName)
    {
        $d = DB_DataObject::factory('departamento');
        if (PEAR::isError($d)) {
            die($d->getMessage());
        }
        $fb =& DB_DataObject_FormBuilder::create($d);
        $db =& $d->getDatabaseConnection();

        $pFini = varPostEscapa('fini');
        $pFfin = varPostEscapa('ffin');
        $pMunicipio = varPostEscapa('municipio');
        $pDepartamento = varPostEscapa('departamento');

        if (!isset($_POST['evita_csrf']) ||
            $_POST['evita_csrf'] != $_SESSION['sin_csrf']) {
            die("Datos enviados no pasaron verificación CSRF (" .
                $_SESSION['sin_csrf'] . ", " . $_POST['evita_csrf'] . ")");
        }

        $cons = 'cons';
        $cons2="cons2";
        $where = "";

        busand($db, $where, "caso.fecha", 
            $GLOBALS['consulta_web_fecha_min'], ">=");
        busand($db, $where, "caso.fecha", 
            $GLOBALS['consulta_web_fecha_max'], "<=");

        if ($pFini['Y'] != '') {
            busand($db, $where, "caso.fecha", 
                arr_a_fecha($pFini, true), ">=");
        }
        if ($pFfin['Y'] != '') {
            busand($db, $where, "caso.fecha", 
                arr_a_fecha($pFfin, false), "<=");
        }

        $wgeo = '';
        $sgeo = '';
        $tgeo = '';
        $ggeo = '';
        $ogeo = '';
        $cab = array('Organización');
        if ($pDepartamento != '') {
            $cab[] = 'C. Dep.';
            $sgeo .= 'iddep, ';
        }
        if ($pMunicipio != '') {
            $cab[] = 'C. Mun.';
            $sgeo = 'iddep, idmun, ';
        }
        $dr = DB_DataObject::factory('resultado_agresion');
        $dr->find();
        $dr->orderBy('id');
        while ($dr->fetch()) {
            $cab[] = $dr->nombre;
        }
        $cab[] = 'Total';

        $db->query("DROP VIEW vestcomb");
        $q = "CREATE VIEW vestcomb (presp, iddep, idmun, nomres, cid) AS 
            (SELECT presuntos_responsables.nombre, 
            departamento_caso.id_departamento, NULL, resultado_agresion.nombre, 
            combatiente.id FROM resultado_agresion, caso, departamento_caso, 
            combatiente, presuntos_responsables WHERE $where AND 
            departamento_caso.id_caso = caso.id AND 
            resultado_agresion.id = id_resultado_agresion AND 
            caso.id = combatiente.id_caso AND 
            presuntos_responsables.id = id_organizacion_armada"; 
        foreach (array("municipio", "clase") as $t) {
            $q .= " UNION SELECT presuntos_responsables.nombre, 
                {$t}_caso.id_departamento, {$t}_caso.id_municipio, 
                resultado_agresion.nombre, combatiente.id 
                FROM resultado_agresion, caso, {$t}_caso, combatiente, 
                presuntos_responsables 
                WHERE $where AND {$t}_caso.id_caso = caso.id AND 
                resultado_agresion.id = id_resultado_agresion AND 
                caso.id = combatiente.id_caso AND 
                presuntos_responsables.id = id_organizacion_armada"; 
        }
        $q .= " )"; 
        //echo "q= $q";
        $db->query("$q");

        $q = "SELECT presp, $sgeo nomres, count(cid) FROM vestcomb 
            GROUP BY presp, $sgeo nomres ORDER BY presp, $sgeo nomres";
        //echo "<hr>q=$q";
        $result = $db->query($q);
        if (PEAR::isError($result)) {
            die("Problema ejecutando consulta preliminar: '$q', " .
            $result->getMessage()."'");
        }
        $n = array();
        $row = array();
        while ($result->fetchInto($row)) {
            if ($pMunicipio != '') {
                $n[$row[0]][$row[1]][$row[2]][$row[3]]=(int)$row[4];
                if (!isset($n[$row[0]][$row[1]][$row[2]]['Total'])) {
                    $n[$row[0]][$row[1]][$row[2]]['Total']=0;
                }
                $n[$row[0]][$row[1]][$row[2]]['Total']+=(int)$row[4];
            } else if ($pDepartamento != '') {
                $n[$row[0]][$row[1]][$row[2]]=(int)$row[3];
                if (!isset($n[$row[0]][$row[1]]['Total'])) {
                    $n[$row[0]][$row[1]]['Total']=0;
                }
                $n[$row[0]][$row[1]]['Total']+=(int)$row[3];
            } else {
                $n[$row[0]][$row[1]]=(int)$row[2];
                if (!isset($n[$row[0]]['Total'])) {
                    $n[$row[0]]['Total']=0;
                }
                $n[$row[0]]['Total']+=(int)$row[2];
            }

        }
        encabezado_envia();
        echo "<table border=\"1\"><tr>";
        foreach ($cab as $k => $t) {
            echo "<th>$t</th>";
        }
        echo "</tr>\n";
        foreach ($n as $np => $dep) {
            if ($pDepartamento == '' && $pMunicipio == '') {
                echo "<tr>";
                foreach ($cab as $k => $t) {
                    $this->muestraUno($t, $np, null, null, $dep);
                }
                echo "</tr>\n";
            } else {
                foreach ($dep as $ndep => $mun) {
                    if ($pMunicipio != '') {
                        foreach ($mun as $nmun => $res) {
                            echo "<tr>";
                            foreach ($cab as $k => $t) {
                                $this->muestraUno($t, $np, $ndep, $nmun, $res);
                            }
                            echo "</tr>\n";
                        }
                    } else {
                        echo "<tr>";
                        foreach ($cab as $k => $t) {
                            $this->muestraUno($t, $np, $ndep, null, $mun);
                        }
                        echo "</tr>\n";
                    }
                }
            }
        }
        echo "</table>";
        pie_envia();
    }
}


/**
 * Formulario de Estadísticas por Combatiente
 *
 * @category SIVeL
 * @package  SIVeL
 * @author   Vladimir Támara <vtamara@pasosdeJesus.org>
 * @license  http://creativecommons.org/licenses/publicdomain/ Dominio Público.
 * @link     http://sivel.sf.net/tec
 */
class PagEstadisticasComb extends HTML_QuickForm_Page
{

    /**
     * Constructora.
     *
     * @return void
     */
    function PagEstadisticasComb()
    {
        $this->HTML_QuickForm_Page('estadisticas', 'post', '_self', null);

        $this->addAction('id_tipo_violencia', new CamTipoViolencia());

        $this->addAction('consulta', new AccionEstadisticasComb());
    }


    /**
     * Id del tipo de violencia
     * 
     * @return string Id. tipo de violencia
     * @access public 
     */
    function idTipoViolencia() 
    {
        $ntipoviolencia= null;
        if (isset($this->_submitValues['id_tipo_violencia'])) {
            $ntipoviolencia = $this->_submitValues['id_tipo_violencia'] ;
        } else if (isset($_SESSION['id_tipo_violencia'])) {
            $ntipoviolencia = $_SESSION['id_tipo_violencia'] ;
        }
        return $ntipoviolencia;
    }


    /**
     * Id. supracategoria
     * 
     * @return string Supracategoria
     * @access public
     */
    function idSupracategoria() 
    {
        $nclase = null;
        if (isset($this->_submitValues['id_supracategoria'])) {
            return  $this->_submitValues['id_supracategoria'] ;
        }
        return null;
    }


    /**
     * Cosntruye formulario
     * 
     * @return void  
     * @access public
     */
    function buildForm()
    {
        encabezado_envia();
        $this->_formBuilt = true;
        $x =&  DB_DataObject::factory('departamento');
        $db = $x->getDatabaseConnection();

        $e =& $this->addElement('header', null, 
            'Conteos Victimas Combatientes');

        //    $e =& $this->addElement('static', 'fini', 'Victimas ');

        $cy = date('Y');
        if ($cy < 2005) {
            $cy = 2005;
        }
        $e =& $this->addElement('date', 'fini', 'Desde: ',
            array('language' => 'es', 'addEmptyOption' => true, 
            'minYear' => $GLOBALS['anio_min'], 'maxYear' => $cy));
        $e =& $this->addElement('date', 'ffin', 'Hasta', 
            array('language' => 'es', 'addEmptyOption' => true,
            'minYear' => $GLOBALS['anio_min'], 'maxYear' => $cy));

        $ae = array();
        $sel =& $this->createElement('checkbox',
            'departamento', 'Departamento', 'Departamento');
        $sel->setValue(true);
        $ae[] =& $sel;

        $sel =& $this->createElement('checkbox',
            'municipio', 'Municipio', 'Municipio');
        $sel->setValue(true);
        $ae[] =& $sel;
        $this->addGroup($ae, null, 'Localización', '&nbsp;', false);

        $prevnext = array();
        $sel =& $this->createElement('submit',   
            $this->getButtonName('consulta'), 'Consulta');
        $prevnext[] =& $sel;

        $this->addGroup($prevnext, null, '', '&nbsp;', false);

        $tpie = "<div align=right><a href=\"index.php\">" .
            "Menú Principal</a></div>";
        $e =& $this->addElement('header', null, $tpie);


        if (!isset($_POST['evita_csrf'])) {
            $_SESSION['sin_csrf'] = mt_rand(0, 1000);
        }
        $this->addElement('hidden', 'evita_csrf', $_SESSION['sin_csrf']);

        $this->setDefaultAction('consulta');

    }

}

$aut_usuario = "";
autenticaUsuario($dsn, $accno, $aut_usuario, 21);

$wizard =& new HTML_QuickForm_Controller('EstadisticasComb', false);
$consweb = new PagEstadisticasComb($mreq);

$wizard->addPage($consweb);


$wizard->addAction('display', new HTML_QuickForm_Action_Display());
$wizard->addAction('jump', new HTML_QuickForm_Action_Jump());

$wizard->addAction('process', new AccionEstadisticasComb());

$wizard->run();
?>
