<?php
// vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker:
/**
 * Página del multi-formulario para capturar caso (captura_caso.php). 
 *
 * 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: PagBasicos.php,v 1.69 2009/05/03 12:23:21 vtamara Exp $
 * @link      http://sivel.sf.net
*/

/**
 * Datos básicos del multi-formulario capturar caso 
 */
require_once 'HTML/QuickForm/Action.php';
require_once 'PagBaseSimple.php'; 
require_once 'Intervalo.php'; 


require_once 'HTML/QuickForm/Page.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 'ResConsulta.php';


/**
 * Acción para avanzar a siguienete. 
 *
 * @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
 * @see BuscarId
 */
class Siguiente extends HTML_QuickForm_Action
{

    /** 
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        if ($page->procesa($page->_submitValues)) {
            $pageName =  $page->getAttribute('id');
            $data     =& $page->controller->container();

            // More pages?
            if (null !== ($nextName = 
                $page->controller->getNextName($pageName))) {
                $next =& $page->controller->getPage($nextName);
                $next->handle('jump');
            }         
        } else {
            $page->handle('display');
        }
    }
}


/**
 * Acción para retroceder.
 *
 * @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
 * @see BuscarId
 */
class Anterior extends HTML_QuickForm_Action
{
    /**
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        if ($page->procesa($page->_submitValues)) {
            $pageName =  $page->getAttribute('id');

            // get the previous page and go to it
            // we don't check validation status here, 'jump' handler should */
            if (null === ($prevName = 
                $page->controller->getPrevName($pageName))) {
                $page->handle('jump');
            } else {
                $prev =& $page->controller->getPage($prevName);
                $prev->handle('jump');
            }
        } else {
            $page->handle('display');
        }
    }
}


/**
 * Acción para iniciar caso nuevo.
 *
 * @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
 * @see BuscarId
 */
class CasoNuevo extends HTML_QuickForm_Action
{

    /**
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        if ($page->procesa($page->_submitValues)) {
            unset_var_session();
            header('Location: captura_caso.php');
        } else {
            $page->handle('display');
        }
    }
}


/**
 * Acción para terminar salvando (Menú)
 *
 * @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
 * @see BuscarId
 */
class Terminar extends HTML_QuickForm_Action
{

    /**
     * Ejecuta acción 
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        $v = $page->_submitValues;
        $es_vacio = $v['titulo'] == '' &&
                $v['fecha']['d'] == '' &&
                $v['fecha']['M'] == '' &&
                $v['fecha']['Y'] == '' &&
                $v['hora'] == '' &&
                $v['duracion'] == '' &&
                $v['tipo_ubicacion'] == 
                    DataObjects_Caso::id_sininfo_tipo_ubicacion() &&
                $_SESSION['basicos_id'] == '' ;
        if ($es_vacio) {
                unset_var_session();
                header('Location: index.php');
        } elseif ($page->procesa($page->_submitValues)) {
            unset_var_session();
            header('Location: index.php');
        } else {
            $page->handle('display');
        }
    }
}



/**
 * Acción para terminar sin salvar.
 *
 * @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
 * @see BuscarId
 */
class TerminarSinSalvar extends HTML_QuickForm_Action
{

    /**
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        unset_var_session();
        header('Location: index.php');
    }
}

/**
 * Acción para eliminar caso.
 *
 * @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
 * @see BuscarId
 */
class EliminaCaso extends HTML_QuickForm_Action
{

    /**
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        include_once 'HTML/Javascript.php';

        $htmljs = new HTML_Javascript();
        echo $htmljs->startScript();
        echo $htmljs->confirm('Confirma eliminación del caso ' .
            $_SESSION['basicos_id'] . '?', 'eliminar');
        echo $htmljs->write('eliminar', true);
        echo $htmljs->_out("if (eliminar == true) { " .
            "window.location='eliminar_caso.php'; }");
        echo $htmljs->endScript();
        $page->handle('display');
    }
}


/**
 * Acción para hacer una busqueda.
 *
 * @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
 * @see BuscarId
 */
class Busqueda extends HTML_QuickForm_Action
{
    /**
     * Prepara consulta
     *
     * @param object &$page  Página
     * @param object &$dCaso Registro caso DataObject
     *
     * @return array consulta y conexión a base de datos
     */
    static function prepConsulta(&$page, &$dCaso) 
    {
            $dCaso = DB_DataObject::factory('caso');
            if (PEAR::isError($dCaso)) {
                die($dCaso->getMessage());
            }

            $db =& $dCaso->getDatabaseConnection();

            $dCaso->id = $GLOBALS['idbus'];
            if ($dCaso->find() == 0) {
                die("Problema debería haber un registro en caso con id = " .
                    $GLOBALS['idbus']);
            } 
            $dCaso->fetch();
            $w = "";
            $w2 = "";
            $t = "caso";
            foreach ($page->controller->_pages as $pn => $p) {
                $p->datosBusqueda($w, $t, $dCaso, $w2);
            }

            $q = "SELECT DISTINCT caso.id, caso.fecha, caso.memo FROM ". $t .
                "  WHERE caso.id<>'" . $GLOBALS['idbus'] . "'";
            if ($w != "") {
                $q .= " AND " . $w;
            }
            if ($w2!="") {
                $q .= "AND caso.id IN (" . $w2 . ")";
            }
            ad_orden_cons($q, $_SESSION['busca_presenta']['ordenar']);
            
            //echo "q es $q";
            //die("x");
            return array($q, $db);
    }


    /**
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        if ($page->procesa($page->_submitValues)) {
            list($q, $db) = Busqueda::prepConsulta($page, $dCaso);

            if (isset($_SESSION['busca_presenta']['ensql']) && 
                $_SESSION['busca_presenta']['ensql'] != '') {
                $q = $_SESSION['busca_presenta']['ensql'];
            }
            $result = $db->query($q);
            if (PEAR::isError($result)) {
                die("Problema ejecutando consulta q='$q', " .
                    $result->getMessage()."'");
            }
            $conv = array('caso_id' => 0, 'caso_fecha' => 1, 'caso_memo' =>2);
            $campos = array();
            foreach ($GLOBALS['cw_ncampos']+array('m_fuentes'=>'Fuentes') as 
                $idc => $dc) {
                if (isset($_SESSION['busca_presenta'][$idc]) &&
                    $_SESSION['busca_presenta'][$idc] == 1) {
                    $campos[$idc] = $dc;
                }
            }

            $mvl = isset($_SESSION['busca_presenta']['m_varlineas']) ? 
                $_SESSION['busca_presenta']['m_varlineas'] :
                false;

            $r = new ResConsulta($campos, $db, $result,
                $conv, 
                varEscapa($_SESSION['busca_presenta']['mostrar'], $db),
                array('varlineas' => $mvl), 
                array(), $_SESSION['busca_presenta']);
            //$_SESSION['forma_modo'] = 'consulta';
            $r->aHtml(false,
                '<a href = "captura_caso.php">Consulta Externa</a>, ');
        } else {
            $page->handle('display');
        }
    }
}

/**
 * Acción para presentar reporte general.
 *
 * @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
 * @see BuscarId
 */
class ReporteGeneral extends HTML_QuickForm_Action
{

    /**
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
       if (($pdest = $page->controller->getPage($actionName)) == null) {
            die("No existe en el controlador la página $actionName");
        }
        if ($page->procesa($page->_submitValues)) {
            echo "<html><head><title>Reporte General</title></head>";
            echo "<body>";
            $r = $page->controller->validaCaso($_SESSION['basicos_id']);
            $rep = ResConsulta::reporteGeneral($_SESSION['basicos_id'], null,
                $GLOBALS['cw_ncampos']+array('m_fuentes'=>'Fuentes'));
            echo "<pre>";
            echo $rep;
            echo "</pre>";
            echo "<hr>";
            echo '<a href = "captura_caso.php">Volver al Caso</a> | ';
            echo '<a href = "captura_caso.php?limpia=1">Caso Nuevo</a> | ';
            echo '<a href = "index.php">Menu</a>';
            echo "</body></html>";
        } else {
            $page->handle('display');
        }
    }
}      
 

/**
 * Acción para saltar.
 *
 * @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
 * @see BuscarId
 */
class Salta extends HTML_QuickForm_Action
{
    /**
     * Ejecuta acción
     *
     * @param object &$page      Página
     * @param string $actionName Acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        if (($pdest = $page->controller->getPage($actionName)) == null) {
            die("No existe en el controlador la página $actionName");
        }
        if ($page->procesa($page->_submitValues)) {
            $pdest->handle('jump');
        } else {
            $page->handle('display');
        }
    }
}


/**
 * Responde al boton buscar caso en tabulador Básicos de la ficha de ingreso.
 *
 * @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 BuscarId extends HTML_QuickForm_Action
{
    /**
     * Ejecuta acción.
     *
     * @param object &$page      HTML_QuickForm página que produjo la acción
     * @param string $actionName Nombre de la acción
     *
     * @return void
     */
    function perform(&$page, $actionName)
    {
        unset_var_session();
        $_SESSION['basicos_id'] = (int)varEscapa($_POST['busid']);
        $page->handle('display');
    }
}


/** 
 * Página de datos básicos.
 * Ver documentación de funciones en clase base.
 *
 * @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
 * @see PagBaseSimple
 */
class PagBasicos extends PagBaseSimple
{
    /* Variables DB_DataObject_FormBuilder de caso */
    var $bfrontera_caso;
    var $bregion_caso;

    var $titulo = 'Datos básicos';

    var $clase_modelo = 'caso';

    /**
     * Inicializa variables y datos de la pestaña.
     * Ver documentación completa en clase base.
     *
     * @return handle Conexión a base de datos
     */
    function iniVar()
    {
        list($db, $dcaso, $idcaso) = parent::iniVar(false, true);
        $dfrontera_caso =& DB_DataObject::factory('frontera_caso');
        $dregion_caso =& DB_DataObject::factory('region_caso'); 
                        
        // Modo insercion: id en null indica que se está insertado
        // uno nuevo.
        if (isset($_REQUEST['id'])) {
            $dcaso->id = (int)varEscapa($_REQUEST['id'], $db);
        } else if (isset($_SESSION['basicos_id'])) {
            $dcaso->id = $_SESSION['basicos_id'];
        } else {
            $dcaso->id = null;
        }
        $_SESSION['basicos_id'] = $dcaso->id;
        $dfrontera_caso->id_caso
            = $dregion_caso->id_caso
            = $dcaso->id;

        // Si ya existía lo carga
        if (isset($dcaso->id)) {
            if (($e = $dcaso->find()) != 1 && $dcaso->id != $GLOBALS['idbus']) {
                die("Se esperaba un sólo registro, pero se encontraron $e (" .
                    $dcaso->id.")");
            } else if ($e != 0 || $dcaso->id != $GLOBALS['idbus']) {
                $dcaso->fetch();
            }
            $dfrontera_caso->find();
            $dregion_caso->find();
        }

        $this->bfrontera_caso=& 
            DB_DataObject_FormBuilder::create($dfrontera_caso, 
            array('requiredRuleMessage' => 
            $GLOBALS['mreglareq'],
            'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bregion_caso=& DB_DataObject_FormBuilder::create($dregion_caso, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'],
            'ruleViolationMessage' => $GLOBALS['mreglavio'] ));

        return $db;
    } 


    /**
     * Constructora
     *
     * @param string $nomForma Nombre 
     * @param string $mreq     Mensaje de dato requerido
     *
     * @return void
     */
    function PagBasicos($nomForma, $mreq) 
    {
        parent::PagBaseSimple($nomForma, $mreq, 'Datos básicos');

        $this->addAction('buscar', new BuscarId());
        $this->addAction('siguiente', new Siguiente()); 
    }


    /**
     * Agrega elementos al formulario.
     * Ver documentación completa en clase base.
     *
     * @param handle &$db    Conexión a base de datos
     * @param string $idcaso Id del caso
     *
     * @return void
     *
     * @see PagBaseSimple
     */
    function formularioAgrega(&$db, $idcaso) 
    {
        if (isset($_SESSION['forma_modo']) 
            && $_SESSION['forma_modo'] == 'busqueda') {  //Busqueda
            $this->addElement('hidden', 'id', $GLOBALS['idbus']);

            $e =& $this->addElement('date', 'fini', 'Fecha inicial', 
                array('language' => 'es', 'addEmptyOption' => true, 
                'minYear' => $GLOBALS['anio_min']));
            $v = array();
            if (isset($_SESSION['bus_fecha_inicial'])) {
                $v = call_user_func($this->bcaso->dateFromDatabaseCallback, 
                    $_SESSION['bus_fecha_inicial']);
            }
            $this->_defaultValues['fini'] = $v;
            $e =& $this->addElement('date', 'ffin', 'Fecha final', 
                array('language' => 'es', 'addEmptyOption' => true,
                'minYear' => $GLOBALS['anio_min']));
            $v = array();
            if (isset($_SESSION['bus_fecha_inicial'])) {
                $v = call_user_func($this->bcaso->dateFromDatabaseCallback, 
                    $_SESSION['bus_fecha_final']);
            }
            $this->_defaultValues['ffin'] = $v;
            $this->bcaso->_do->id_intervalo= 
                DataObjects_Intervalo::id_sininfo();
            $this->bcaso->_do->defSinInf = false; 
        } else { // Nuevo o actualización
            $ed = array();
            $tid =& $this->createElement('static', 'id', 'No. Caso: ');
            $ed[] =& $tid;
            $tid =& $this->createElement('text', 'busid', 
                'No. Caso por buscar: ', array("align"=>"right"));
            $tid->setSize(7);
            $ed[] =& $tid;
            $botBuscar =& $this->createElement('submit', 
                $this->getButtonName('buscar'), 'Buscar', 
                array("align" => "right"));
            $ed[] =& $botBuscar;
            $ed[] =& $this->createElement('static', null, 
                'Deje en blanco si es nuevo');
            $this->addGroup($ed, null, 'No. Caso', '&nbsp;', false);
        }


        $this->bcaso->createSubmit = 0;
        $this->bcaso->useForm($this);
        $f =& $this->bcaso->getForm();

        if (isset($_SESSION['forma_modo']) &&
            $_SESSION['forma_modo'] == 'busqueda') { 
            $e =& $this->removeElement('fecha', true);
            
        }

        $e =& $this->addElement('header', null, 'Localización');

        $this->bregion_caso->createSubmit = 0;
        $this->bregion_caso->useForm($this);
        $this->bregion_caso->getForm();
        unset($this->_rules['id_region[]']);
        unset($this->_rules['id_region']);

        $this->bfrontera_caso->createSubmit = 0;
        $this->bfrontera_caso->useForm($this);
        $bff = $this->bfrontera_caso->getForm();
        unset($bff->_rules['id_frontera[]']);
        unset($this->_rules['id_frontera']);

        $this->bcaso->_do->fb_fieldsToRender = $this->bcaso->_do->fb_preDefOrder=
            array('tipo_ubicacion');
        $this->bcaso->createSubmit = 0;
        $this->bcaso->useForm($this);
        $this->bcaso->enumOptionsCallback = array($this->bcaso->_do,
            "enumCallback");
        $this->bcaso->getForm(); 

        $_SESSION['sin_csrf'] = mt_rand(0, 1000);
        $this->addElement('hidden', 'evita_csrf', $_SESSION['sin_csrf']);

    }

    /**
     * Llena valores del formulario.  
     * Ver documentación completa en clase base.
     *
     * @param handle  &$db    Conexión a base de datos
     * @param integer $idcaso Id del caso
     *
     * @return void
     * @see PagBaseSimple
     */
    function formularioValores(&$db, $idcaso) 
    {
        $this->controller->deshabilitaBotones($this, 
            array('anterior','elimina'));

        if (isset($_SESSION['recuperaErrorValida'])) {
            formularioValoresEstablece($this, 
                array('titulo', 'hora', 'duracion', 'id_intervalo',
                'fecha', 'id_region', 'id_frontera'),
                $_SESSION['recuperaErrorValida']);
            unset($_SESSION['recuperaErrorValida']);
        } elseif ($this->bcaso->_do->id != null) {
            $scf =& $this->getElement('id_frontera');
            if (!PEAR::isError($scf)) {
                $valscf = array();
                $this->bfrontera_caso->_do->find();
                while ($this->bfrontera_caso->_do->fetch()) {
                    $valscf[] = $this->bfrontera_caso->_do->id_frontera;
                }
                $scf->setValue($valscf);
            }
            $scr =& $this->getElement('id_region');
            if (!PEAR::isError($scr)) {
                $valscr = array();
                $t = $this->bregion_caso->_do->find();
                while ($this->bregion_caso->_do->fetch()) {
                    $valscr[] = $this->bregion_caso->_do->id_region;
                }
                $scr->setValue($valscr);
            }
            $sci =& $this->getElement('id_intervalo');
            if (!PEAR::isError($sci)) {
                $v = $this->bcaso->_do->id_intervalo;
                $sci->setValue($v);
            }
        } 
    }

    /**
     * Elimina registros de tablas relacionadas con caso de este formulario.
     * Ver documentación completa en clase base.
     *
     * @param handle  &$db    Conexión a base de datos
     * @param integer $idcaso Id del caso
     *
     * @return void
     * @see PagBaseSimple
     */
    static function eliminaDep(&$db, $idcaso) 
    {
        assert($db != null);
        assert(isset($idcaso));
        $result = $db->query("DELETE FROM frontera_caso " .
            "WHERE id_caso='" . $idcaso . "'");
        $result = $db->query("DELETE FROM region_caso " .
            "WHERE id_caso='" . $idcaso . "'");
    }

    /**
     * Procesa valores del formulario enviados por el usuario.
     * Ver documentación completa en clase base.
     *
     * @param handle &$valores Valores ingresados por usuario
     *
     * @return bool Verdadero si y solo si puede completarlo con éxito
     * @see PagBaseSimple
     */
    function procesa(&$valores) 
    {
        if (!$this->validate()) {
            return false;
        }
        if (!isset($valores['evita_csrf']) || 
            $valores['evita_csrf'] != $_SESSION['sin_csrf']) {
            die("Datos enviados no pasaron verificación CSRF (" .
                $_SESSION['sin_csrf'] . ", " . $valores['evita_csrf'] . ")");
        }

        $db = $this->iniVar();
        if (!isset($this->bcaso->_do->memo)) {
            $this->bcaso->_do->memo = '';
        }

        if (isset($_SESSION['forma_modo']) && 
            $_SESSION['forma_modo'] == 'busqueda' &&
            isset($valores['id_caso']) && 
            $valores['id_caso'] == $GLOBALS['idbus']) {
           $oc = $this->bcaso->_do;
           if ($oc->find()==0) {
               $q = "INSERT INTO caso (id, fecha, memo, tipo_ubicacion, " .
                    " id_intervalo) VALUES ('" .
                    $GLOBALS['idbus'] . "', '2005-1-1', '', 'S', '5');";
                $db->query($q);
            }
            $this->bcaso->_do->id = $GLOBALS['idbus'];
            $this->bcaso->
                forceQueryType(DB_DATAOBJECT_FORMBUILDER_QUERY_FORCEUPDATE);
        } else {
            
            if (!isset($valores['id_caso']) || $valores['id_caso'] == '' ||
                $valores['id_caso'] == null) {
                $this->bcaso->
                    forceQueryType(DB_DATAOBJECT_FORMBUILDER_QUERY_FORCEINSERT);
            }
            if ($valores['fecha']['d'] == '' ||
                $valores['fecha']['M'] == '' ||
                $valores['fecha']['Y'] == '') {
                errorValida('Falta fecha del caso', $valores);
                return false;
            }
        }
        $ret = $this->process(array(&$this->bcaso, 'processForm'), false);
        if (PEAR::isError($ret)) {
            die($ret->getMessage());
        }
        $idcaso = $this->bcaso->_do->id;

        if (isset($_SESSION['forma_modo']) && 
            $_SESSION['forma_modo'] == 'busqueda' &&
            isset($idcaso) && $idcaso == $GLOBALS['idbus']) { 
            $v= call_user_func($this->bcaso->dateToDatabaseCallback, 
                varEscapa($_REQUEST['ffin'], $db));
            if ($v == '--') {
                $v = '';
            }
            $_SESSION['bus_fecha_final'] = $v;
            $v = call_user_func($this->bcaso->dateToDatabaseCallback, 
                    varEscapa($_REQUEST['fini'], $db));
            if ($v == '--') {
                $v = '';
            }
            $_SESSION['bus_fecha_inicial'] = $v;
        }

        $this->eliminaDep($db, $idcaso);
        if (isset($valores['id_frontera'])) {
            foreach ($valores['id_frontera'] as $k => $v) {
                $this->bfrontera_caso->_do->id_caso = $idcaso;
                $this->bfrontera_caso->_do->id_frontera = $v;
                $this->bfrontera_caso->_do->insert();
            }
        }
        if (isset($valores['id_region'])) {
            foreach ($valores['id_region'] as $k => $v) {
                $this->bregion_caso->_do->id_caso = $idcaso;
                $this->bregion_caso->_do->id_region = $v;
                $this->bregion_caso->_do->insert();
            }
        }

        $_SESSION['basicos_id'] = $idcaso;
        funcionario_caso($idcaso);
        return  $ret;
    }

    /**
     * Prepara consulta SQL para buscar datos de este formulario.
     * Ver documentación completa en clase base.
     *
     * @param string &$w       Consulta que se construye
     * @param string &$t       Tablas
     * @param object &$dCaso   Objeto con caso
     * @param string &$subcons Subconsulta
     *
     * @return void
     * @see PagBaseSimple
     */
    function datosBusqueda(&$w, &$t, &$dCaso, &$subcons) 
    {
        $db = $dCaso->getDatabaseConnection();
        busand($db, $w, "caso.titulo", $dCaso->titulo);
        list($faini, $fmini, $fdini) = explode('-', 
            $_SESSION['bus_fecha_inicial']);
        list($fafin, $fmfin, $fdfin) = explode('-',
            $_SESSION['bus_fecha_final']);
        if ((int)$faini != 0 && (int)$fmini != 0 || (int)$fdini != 0) {
            busand($db, $w, "caso.fecha", $_SESSION['bus_fecha_inicial'], ">=");
        }
        if ((int)$fafin != 0 || (int)$fmfin != 0 || (int)$fdfin != 0) {
            busand($db, $w, "caso.fecha", $_SESSION['bus_fecha_final'], "<=");
        }
        busand($db, $w, "caso.hora", $dCaso->hora);
        busand($db, $w, "caso.duracion", $dCaso->duracion);
        if ($dCaso->id_intervalo!=
            DataObjects_Intervalo::id_sininfo()) {
            busand($db, $w, "caso.id_intervalo", $dCaso->id_intervalo);
        }

        $t = "caso";
        busor_muchos($w, $t, 'frontera_caso');

        busor_muchos($w, $t, 'region_caso');
        if ($dCaso->tipo_ubicacion != 'S') { 
            busand($db, $w, "caso.tipo_ubicacion", 
                $dCaso->tipo_ubicacion);
        }
    }

}

?>
