<?php
/**
 * Clase con la acción para listar los componentes de un determinado tipo en la
 * web del banco del tiempo de Málaga.
 **/
class AccionListarComponentesBtMalaga extends AccionBtMalaga {
 
    static $db = array('TipoComponente' => 'Varchar',
                       'InfoConsulta' => 'Text',
                       'FormularioFiltrado' => 'Varchar'
                      );
 
    /**
     * clase con la acción a realizar.
     **/
    public function ejecutarAccion($controlador, $recurso) {
        $this->listarComponentes($controlador, $this->TipoComponente);
 	return parent::ejecutarAccion($controlador, $recurso);
    }
 	
    /**
     * Función que devuelve los campos para editar
     * el contenido como subcampo.
     **/
    protected function cargarSubContenido() {
        $camposEditable = parent::cargarSubContenido();
      
        //campo para el tipo de componente.
        $campoTipoComponente = new CampoEditable();
        $campoTipoComponente->setNombre('Tipo de componente');
        $campoTipoComponente->setField(new TextField('TipoComponente','TipoComponente',$this->TipoComponente));
        $camposEditable->add($campoTipoComponente);    

        //campo para el formulario de filtrado.
        $campoFormularioFiltrado = new CampoEditable();
        $campoFormularioFiltrado->setNombre('Formulario de filtrado');
        $campoFormularioFiltrado->setField(new TextField('FormularioFiltrado','FormularioFiltrado',$this->FormularioFiltrado));
        $camposEditable->add($campoFormularioFiltrado);    

        //indica la información de filtrado para la consulta.
        $campoFiltro = new CampoEditable();
        $campoFiltro->setNombre('Informacion filtrado');
        $campoFiltro->setField(new TextareaField('InfoConsulta','InfoConsulta',8,3,$this->InfoConsulta));
        $camposEditable->add($campoFiltro);     
            
        return $camposEditable;      
    } 
 	
    /**
     * Función para listar todos los componentes de un determinado tipo
     * en un datagrid.
     **/
    private function listarComponentes($controlador, $tipoComponente) {
             	
        //incluye el css y el javascript necesario.
  	Requirements::css('dhtmlx/dhtmlxgrid/dhtmlxgrid.css');
  	Requirements::css('dhtmlx/dhtmlxgrid/skins/dhtmlxgrid_dhx_skyblue.css');
  	Requirements::css('dhtmlx/dhtmlxgrid/ext/dhtmlxgrid_pgn_bricks.css');
  	Requirements::css('dhtmlx/dhtmlxwindows/dhtmlxwindows.css');
  	Requirements::css('dhtmlx/dhtmlxwindows/skins/dhtmlxwindows_dhx_skyblue.css');
        Requirements::css('dhtmlx/dhtmlxtoolbar/skins/dhtmlxtoolbar_dhx_skyblue.css');
  	Requirements::javascript('dhtmlx/dhtmlxcommon/dhtmlxcommon.js');
  	Requirements::javascript('dhtmlx/dhtmlxgrid/dhtmlxgrid.js');
  	Requirements::javascript('dhtmlx/dhtmlxgrid/dhtmlxgridcell.js');
  	Requirements::javascript('dhtmlx/dhtmlxgrid/ext/dhtmlxgrid_filter.js');
  	Requirements::javascript('dhtmlx/dhtmlxgrid/ext/dhtmlxgrid_pgn.js');
  	Requirements::javascript('dhtmlx/dhtmlxwindows/dhtmlxwindows.js');
        Requirements::javascript('dhtmlx/dhtmlxtoolbar/dhtmlxtoolbar.js');
  	Requirements::javascript('dhtmlx/dhtmlxwindows/dhtmlxcontainer.js');
  	
  	Requirements::javascript('jsparty/jquery/jquery.js');
  	$componente = new $tipoComponente();
  	$seleccionarComponente = '0';
  	$nombreCampos = '';
  	$tituloCampos = '';
        if ($this->FormularioFiltrado) {
            $nombreFormulario = $this->FormularioFiltrado;
            $formularioFiltrado = $componente->$nombreFormulario();
            if ($formularioFiltrado) {
                $controlador->setFormularioFiltrado($formularioFiltrado);
                $campos = $formularioFiltrado;
                $cont = 0;
                if ($campos) {
                    foreach ($campos as $campo) {
                        if ($cont > 0) {
                            $nombreCampos .= ',';
                            $tituloCampos .= ',';   
	                }
                        $nombreCampos .= "'".$campo->Name()."'";
                        $tituloCampos .= "'".$campo->Title()."'";
                        $cont++;
                    }
                }
            }
        }
        $nombreCampos = 'new Array('.$nombreCampos.');';
        $tituloCampos = 'new Array('.$tituloCampos.');';
        $parametros = $componente->parametrosListado();
       	$controlador->setPuedeEditarEnListado($componente->puedeEditarEnListado()); 	
  	
  	if (isset($_GET['seleccionarComponente'])) {
  	    $seleccionarComponente = $_GET['seleccionarComponente'];
  	}
  	$variables = array('tipoComponente' => $this->TipoComponente,
                           'cargaAutomatica' => true,
                           'direccionCargaDatos' => $controlador->URLSegment.'/cargarDatos/'.$tipoComponente,
                           'camposGrid' => $componente->getCamposGrid(),
                           'camposFiltro' => $this->InfoConsulta,
  			   'direccionEditar' => $controlador->URLSegment.'/FormularioAccion',	
                           'direccionBorrar' => $controlador->URLSegment.'/FormularioAccion',	
			   'direccionVer' => $controlador->URLSegment.'/verComponente',
  	                   'direccionCargarToolbar' => $controlador->URLSegment.'/cargarToolbar',
			   'direccionCrearNuevo' => $controlador->URLSegment.'/FormularioAccion?'.ControlPicasso::PARAMETRO_ACCION.'='.ComponenteBtMalagaControl::ACCION_CREAR_NUEVO_COMPONENTE.'&'.ControlPicasso::PARAMETRO_TIPO_COMPONENTE.'='.$tipoComponente.'&'.ControlPicasso::PARAMETRO_FORMULARIO_EDICION.'=FormularioEditableBtMalaga&'.ControlPicasso::PARAMETRO_NUEVO_RECURSO.'=si'.$parametros,
                           'direccionActivarUsuario' => $controlador->URLSegment.'/FormularioAccion',
                           'direccionDesactivarUsuario' => $controlador->URLSegment.'/FormularioAccion',
                           'direccionCrearNuevaFactura' => $controlador->URLSegment.'/FormularioAccion?'.ControlPicasso::PARAMETRO_ACCION.'='.ComponenteBtMalagaControl::ACCION_CREAR_NUEVO_COMPONENTE.'&'.ControlPicasso::PARAMETRO_TIPO_COMPONENTE.'=FacturaBtMalaga&'.ControlPicasso::PARAMETRO_FORMULARIO_EDICION.'=FormularioEditableBtMalaga&'.ControlPicasso::PARAMETRO_NUEVO_RECURSO.'=si&'.ServicioBtMalaga::SERVICIO_SELECCIONADO.'=',
                           'direccionBase' => $controlador->URLSegment.'/FormularioAccion',
                           'direccionSegmento' => $controlador->URLSegment,
                           'verOpinionesFactura' => $controlador->URLSegment.'/verOpinionesFactura',
                           'direccionCrearNuevaOpinionServicio' => $controlador->URLSegment.'/FormularioAccion?'.ControlPicasso::PARAMETRO_ACCION.'='.ComponenteBtMalagaControl::ACCION_CREAR_NUEVO_COMPONENTE.'&'.ControlPicasso::PARAMETRO_TIPO_COMPONENTE.'=OpinionServicioBtMalaga&'.ControlPicasso::PARAMETRO_FORMULARIO_EDICION.'=FormularioEditableBtMalaga&'.ControlPicasso::PARAMETRO_NUEVO_RECURSO.'=si&'.OpinionServicioBtMalaga::PARAMETRO_FACTURA_SELECCIONADA.'=',
  	                   'seleccionarComponente' => $seleccionarComponente,
                           'parametros' => $parametros,
			   'nombreCampos' => $nombreCampos,
			   'tituloCampos' => $tituloCampos,
                           'nombreComponente' => $componente->NombreComponente					    					    	
  	                  );
  	Requirements::javascriptTemplate('btmalaga/javascript/listarcomponentes.js', $variables);
  	$controlador->setPlantilla('PlantillaListadoComponentes');
      $controlador->setNombreComponente($componente->getNombreComponente());
    } 
}

?>
