<?php
//  vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: 
/**
 * Estadísticas victimas individuales/casos
 *
 * 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.php,v 1.48 2009/05/03 12:23:21 vtamara Exp $
 * @link      http://sivel.sf.net
*/

/**
 * Estadísticas victimas individuales/casos
 */
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 AccionEstadisticasInd extends HTML_QuickForm_Action
{

    /**
     * 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');
        $pTipo = varPostEscapa('id_tipo_violencia');
        $pSupra = varPostEscapa('id_supracategoria');
        $pSegun = varPostEscapa('segun');
        $pQue = varPostEscapa('que');
        $pMuestra = varPostEscapa('muestra');
        $pMunicipio = varPostEscapa('municipio');
        $pDepartamento = varPostEscapa('departamento');
        $pSinCatRepetidas = varPostEscapa('sin_cat_repetidas');

        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'] . ")");
        }

        $tGeo = '';
        if ($pMunicipio != '') {
            $tGeo = 'departamento, municipio, ';
        } elseif ($pDepartamento != '') {
            $tGeo = 'departamento, ';
        }
        $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), "<=");
        }

        $tablaSegun = $titSegun = "";
        $tCat = "";
        $tQue = "";
        $condSegun = "";
        if ($pSegun == 'id_rango_edad') {
            $campoSegun = "id_rango_edad";
            $cfSegun = "rango_edad.rango";
            $tablaSegun = "rango_edad, ";
            $condSegun = "AND rango_edad.id=$cons2.id_rango_edad";
            $titSegun = 'Edad';
        } elseif ($pSegun == 'sexo') {
            $campoSegun = "sexo";
            $cfSegun = "sexo";
            $tablaSegun = "";
            $condSegun = "";
            $titSegun = 'Sexo';
        } elseif ($pSegun == 'id_p_responsable') {
           $cfSegun = 'presuntos_responsables.nombre';
           $tablaSegun = "presuntos_responsables, ";
           $condSegun = "AND presuntos_responsables.id=$cons2.id_p_responsable";
           $titSegun = 'P. Responsable';
           if ($pQue == 'victimas') {
               busand_sinap($where, "victima.id",
                   "p_responsable_agrede_persona.id_victima");
               $tQue .= "p_responsable_agrede_persona,";
               $campoSegun = "p_responsable_agrede_persona.id_p_responsable";
            } else {
                busand_sinap($where, "presuntos_responsables_caso.id_caso",
                    "caso.id");
               $tQue .= "presuntos_responsables_caso,";
               $campoSegun = "presuntos_responsables_caso.id_p_responsable";
            }
        } elseif ($pSegun == 'meses') {
            $campoSegun = "extract(year from fecha) || '-' " .
                "|| lpad(extract(month from fecha), 2, '0')";
            $cfSegun = "meses";
            $tablaSegun= "";
            $titSegun = 'Mes';
        } elseif ($pSegun != '') {
            $campoSegun = $pSegun;
            $ant = explode("_", $pSegun);
            $tablaSegun = "";
            $tsep = "";
            for ($i = 1; $i < count($ant); $i++) {
                $tablaSegun .= $tsep . $ant[$i];
                $tsep = "_";
            }
            $cfSegun= $tablaSegun . ".nombre";
            $condSegun = "AND $tablaSegun.id=$cons2.$campoSegun";
            $titSegun = $GLOBALS['etiqueta'][$tablaSegun];
            $tablaSegun .= ",";
        }

        $cab = array();
        if ($titSegun != "") {
            $cab[] = $titSegun;
        }
        $tDep = $gDep = "";
        if ($pDepartamento == "1") {
            $tDep = "departamento.id, trim(departamento.nombre), ";
            $gDep = "departamento.id, departamento.nombre, ";
            $cab[] = 'C. Dep.';
            $cab[] = 'Departamento';
        }
        $tMun = $gMun = "";
        if ($pMunicipio == "1") {
            $tMun = "municipio.id, trim(municipio.nombre), ";
            $gMun = "municipio.id, municipio.nombre, ";
            $cab[] = 'C. Mun.';
            $cab[] = 'Municipio';
        }
        $cab[] = 'Tipo de Violencia';
        $cab[] = 'Supracategoria';
        $cab[] = 'Categoria';
        if ($pQue == 'casos') {
            $cab[] = 'N. Casos';
            $tCat = 'categoria_caso';
            $tQue .= "$tCat, ";
            busand_sinap($where, "caso.id", "categoria_caso.id_caso");
            $cCons = 'id_caso';
            $pQ1='';
            $pQ1sel = '';
        } else {
            $cab[] = 'N. Víctimizaciones';
            $tCat .= 'categoria_personal';
            $tQue .= "victima, $tCat, ";
            busand_sinap($where, "victima.id_caso", "caso.id");
            busand_sinap($where, "victima.id", "categoria_personal.id_victima");
            $cCons = 'id_victima';
            $pQ1='id_victima, ';
            $pQ1sel = 'victima.id, ';
        }

        $tablas = $tablaSegun . "$tQue caso";
        $campos = array('caso_id' => 'Cód.');


        if ($pTipo != '') {
            busand($db, $where, "$tCat.id_tipo_violencia", $pTipo);
        }
        if ($pSupra != '') {
            busand($db, $where, "$tCat.id_supracategoria", $pSupra);
        }

        $campoSegun2=$cfSegun2=$cfSegun3=$pSegun2="";
        if ($pSegun != "") {
            $pSegun2=", ".$pSegun;
            $cfSegun2=$cfSegun . ", ";
            $cfSegun3="trim(" . $cfSegun . "), ";
            $campoSegun2=", ".$campoSegun;
        }
        $q1="CREATE VIEW $cons ($pQ1 id_caso, id_tipo_violencia, " .
            "id_supracategoria, id_categoria".$pSegun2 .") AS " .
            "SELECT $pQ1sel caso.id, $tCat.id_tipo_violencia, " .
            "$tCat.id_supracategoria, $tCat.id_categoria $campoSegun2 FROM " .
            $tablas . "  WHERE caso.id<>'".$GLOBALS['idbus'] . "'" ;
        if ($pSinCatRepetidas != "") {
            $rerep = $db->query("SELECT id FROM categoria " .
                "WHERE contada_en IS NOT NULL;");
            if (PEAR::isError($rerep)) {
                die("Problema determinando categorias repetidas " .
                    "--ya actualizó base de datos a Sivel 0.92? " .
                    $rerep->getMessage() . "'");
            }
            $row = array();
            $qnorep = "";
            while ($rerep->fetchInto($row)) {
                $qnorep .= " AND id_categoria<>'".$row[0] . "' ";
            } 
            $q1 .= $qnorep;
        }
        if ($where != "") {
            $q1 .= " AND ".$where;
        }
        $db->query("DROP VIEW $cons2");
        $db->query("DROP VIEW $cons");
        //echo "q1 es $q1<hr>";
        $result = $db->query($q1);
        if (PEAR::isError($result)) {
            die("Problema ejecutando consulta preliminar: '$q', " .
            $result->getMessage()."'");
        }

        $q2="CREATE VIEW $cons2 ($cCons, id_tipo_violencia, " .
            "id_supracategoria, id_categoria" . $pSegun2 . 
            ", id_departamento, id_municipio) ";
        $q2 .= "AS SELECT $cons.$cCons, id_tipo_violencia, " .
            "id_supracategoria, id_categoria" . $pSegun2 . 
            ", departamento_caso.id_departamento, NULL FROM " .
            "departamento_caso, $cons " .
            "WHERE $cons . id_caso = departamento_caso.id_caso";
        foreach (array('municipio_caso', 'clase_caso') as $t) { 
            $q2 .= " UNION  SELECT $cons.$cCons, id_tipo_violencia, " .
                "id_supracategoria, id_categoria" . $pSegun2 . 
                ", $t.id_departamento, $t.id_municipio FROM " .
                "$t, $cons WHERE $cons.id_caso = $t . id_caso";
        } 

        //echo "q2 es $q2<hr>";
        $result = $db->query($q2);
        if (PEAR::isError($result)) {
            die("Problema ejecutando consulta: '$q2', " .
            $result->getMessage()."'");
        }
        $q3="SELECT $cfSegun3 $tDep $tMun trim(tipo_violencia.nombre), " .
            "trim(supracategoria.nombre), trim(categoria.nombre), " .
            "count($cons2.$cCons) FROM 
        $tGeo $tablaSegun tipo_violencia, 
        supracategoria, categoria , $cons2
        WHERE $cons2 . id_tipo_violencia = tipo_violencia.id 
        AND $cons2 . id_tipo_violencia = supracategoria.id_tipo_violencia
        AND $cons2 . id_supracategoria = supracategoria.id 
        AND $cons2 . id_tipo_violencia = categoria.id_tipo_violencia
        AND $cons2 . id_supracategoria = categoria.id_supracategoria
        AND $cons2 . id_categoria = categoria.id ";
    if ($pDepartamento == "1"  || $pMunicipio == "1") {
            $q3 .= " AND departamento.id=$cons2.id_departamento ";
        }
    if ($pMunicipio == "1") {
        $q3 .= " AND municipio.id=$cons2.id_municipio ";
        $q3 .= " AND municipio.id_departamento=$cons2.id_departamento ";
    }
    $q3 .= " $condSegun
        GROUP BY $cfSegun2 $gDep $gMun tipo_violencia.nombre, 
        supracategoria.nombre, categoria.nombre
        ORDER BY $cfSegun2 $gDep $gMun tipo_violencia.nombre, 
        supracategoria.nombre, categoria.nombre
        "; 

        //echo "q3 es $q3<hr>";
        $result = $db->query($q3);
        if (PEAR::isError($result)) {
            die("Problema ejecutando consulta: '$q3', " .
            $result->getMessage()."'");
        }

    if ($pMuestra == 'tabla') {
            encabezado_envia();
            echo "<table border=\"1\"><tr>";
            foreach ($cab as $k => $t) {
                echo "<th>$t</th>";
            }
            echo "</tr>\n";
            $row = array();
            while ($result->fetchInto($row)) {
                    echo "<tr>";
                    foreach ($cab as $k => $t) {
                        echo "<td>";
                        echo $row[$k];
                        echo "</td>";
                    }
                    echo "</tr>\n";
            }
            echo "</table>";
            pie_envia();
        } else { // CSV
            // http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm
            header("Content-type: text/csv");
            $sep = '';
            foreach ($cab as $k => $t) {
                $t = str_replace('"', '""', $t);
                echo $sep . '"' . $t . '"';
                $sep = ', ';
            }
            echo "\n";
            $row = array();
            while ($result->fetchInto($row)) {
                $sep = '';
                foreach ($cab as $k => $t) {
                    echo $sep . $row[$k];
                    $sep = ', ';
                }
                echo "\n";
            }
        }

/*        $r=new ExportaResultados($db, $result);
        $r->aHtml(); */

    }
}


/** 
 * Formulario de Estadísticas Individuales
 *
 * @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 PagEstadisticasInd extends HTML_QuickForm_Page
{

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

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

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


    /**
     * Id tipo violencia 
     *
     * @return string Id tipo violencia
     */
    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 id
     */
    function idSupracategoria() 
    {
        $nclase = null;
        if (isset($this->_submitValues['id_supracategoria'])) {
            return  $this->_submitValues['id_supracategoria'] ;
        }
        return null;
    }


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

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

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


        $tipo =& $this->addElement('select', 'id_tipo_violencia', 
            'Tipo de violencia: ', array());
        $options= array('' => '') + 
            $db->getAssoc("SELECT  id, nombre FROM tipo_violencia " .
            "ORDER BY id");
        $tipo->loadArray($options);
        $tipo->updateAttributes(array('onchange' => 
            'envia(\'estadisticas:id_tipo_violencia\')'));

        $supra =& $this->addElement('select', 'id_supracategoria', 
            'Supracategoria: ', array());

        $ntipoviolencia = $this->idTipoViolencia();
        if ($ntipoviolencia != null) {
            $tipo->setValue($ntipoviolencia);
            $options= array('' => '') +
                $db->getAssoc("SELECT  id, nombre FROM supracategoria " .
                "WHERE id_tipo_violencia='$ntipoviolencia' ORDER BY id");
            $supra->loadArray($options);
        }
        $nsupra = $this->idSupracategoria();

        $sel =& $this->addElement('select',   
            'segun', 'Según');
        $sel->loadArray(array('' => '',
            'id_p_responsable' => 
                strtoupper($GLOBALS['etiqueta']['p_responsable']),
            'id_rango_edad' => strtoupper($GLOBALS['etiqueta']['rango_edad']),
            'sexo' => strtoupper($GLOBALS['etiqueta']['sexo']),
            'id_filiacion' => strtoupper($GLOBALS['etiqueta']['filiacion']),
            'id_profesion' => strtoupper($GLOBALS['etiqueta']['profesion']),
            'id_sector_social' => 
                strtoupper($GLOBALS['etiqueta']['sector_social']),
            'id_organizacion' => 
                strtoupper($GLOBALS['etiqueta']['organizacion']),
            'meses' => 'MESES',
            'id_profesion' => 'PROFESION',
        ));

        $ae = array();
        $t =& $this->createElement('radio', 'que', 'victimas',
            'Victimas Ind.', 'victimas');
        $ae[] =&  $t;

        $ae[] =&  $this->createElement('radio', 'que', 'casos',
            'Casos', 'casos');

        $this->addGroup($ae, null, 'Contar', '&nbsp;', false);
        $t->setChecked(true);


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

        $sel =& $this->addElement('checkbox',   
            'sin_cat_repetidas', 'Excluir  Categorias Repetidas', 
            'Excluir Categorias Repetidas');

        $ae = array();
        $t =& $this->createElement('radio', 'muestra', 'tabla',
            'Tabla HTML', 'tabla');
        $ae[] =&  $t;

        $ae[] =&  $this->createElement('radio', 'muestra', 'csv',
            'Formato CSV (hoja de cálculo)', 'csv');
        $this->addGroup($ae, null, 'Forma de presentación', '&nbsp;', false);
        $t->setChecked(true);


        $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('EstadisticasInd', false);
$consweb = new PagEstadisticasInd($mreq);

$wizard->addPage($consweb);


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

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

$wizard->run();
?>
