<?php
  /**
   * Definición de un sistema para el banco del tiempo de Málaga.
   **/
   class SistemaBtMalaga extends ComponenteBtMalaga {
   
   	static $db = array(
   	                   'Nombre' => 'Varchar',
   	                   'Descripcion' => 'Varchar',   	                                  
                         'Credito' => 'Int',
                         'TipoCredito' => "Enum('Ilimitado,Limitado','Ilimitado')",
                         'TipoImpuestos' => "Enum('Porcentual,Fijo','Porcentual')",
                         'ValorImpuestoPorcentual' => 'Float',
                         'ValorImpuestoFijo' => 'Float',
                         'OfertasIniciales' => 'Int',
                         'Borrado' => 'Boolean'
                        );
                                         
	static $has_one = array(
	                        'TipoMoneda' => 'TipoMonedaBtMalaga',
                              'AdministradorSistema' => 'UsuarioBtMalaga'
	                       );         

	public $ComponenteAdministradorID;

    /**
     * Devuelve el nombre del componente 
     **/
    public function getNombreComponente() {
        return 'sistema';
    }

	
	/**
	 * Función que indica los campos para poner en el grid de listado.
	 * Nota: debe ser sobreescrito por cada componentes.
	 **/
	protected function camposGrid() {
		$resultado = parent::camposGrid();
		$resultado .= '{"Nombre": "Nombre", "Columna":"Nombre", "Ordenacion":"str", "Tipo":"ro", "Tamano":200, "Filtro":"#text_filter", "Alineacion":"left"},';
		$resultado .= '{"Nombre": "Descripci&oacute;n", "Columna":"Descripcion", "Ordenacion":"str", "Tipo":"ro", "Tamano":"*", "Filtro":"#text_filter", "Alineacion":"left"}';
		return $resultado;
	}
	
    /**
     * Función que devuelve los campos para editar
     * el contenido en modo principal.
     **/
    protected function cargarEdicionPrincipal() {
        $pestanasEditable = parent::cargarEdicionPrincipal();       

	//Nombre del contenido.
	$campoNombre = new CampoEditable();
	$campoNombre->setNombre('Nombre');
	$campoNombre->setField(new TextField('Nombre', 'Nombre', $this->Nombre));
	$campoNombre->setValidador(new CampoRequeridoValidador());
	$pestanasEditable->add("Contenido", $campoNombre);

	//DescripciÃ³n del contenido.
	$campoDescripcion = new CampoEditable();
	$campoDescripcion->setNombre('Descripci&oacute;n');
	$campoDescripcion->setField(new TextareaField('Descripcion', 'Descripcion', 8, 3, $this->Descripcion));
	$campoDescripcion->setValidador(new CampoRequeridoValidador());
	$pestanasEditable->add('Contenido', $campoDescripcion);
	
	//Tipo de moneda del sistema.
	$columnasTipoMoneda = '{"Campos":[
	                                                   {"Nombre": "", "Columna":"Seleccionado", "Ordenacion":"na", "Tipo":"ra", "Tamano":20, "Filtro":"&nbsp;", "Alineacion":"left"},
						           {"Nombre": "Nombre", "Columna":"Nombre", "Ordenacion":"str", "Tipo":"ro", "Tamano":200, "Filtro":"#text_filter", "Alineacion":"left"},
		                                           {"Nombre": "DescripciÃ³n", "Columna":"Descripcion", "Ordenacion":"str", "Tipo":"ro", "Tamano":"*", "Filtro":"#text_filter", "Alineacion":"left"}
                                                         ]}';
        $tiposMonedas = DataObject::get('TipoMonedaBtMalaga');
	$tipoMonedaField = new DataGridField('TipoMonedaID',
                                             $columnasTipoMoneda,
                                             $tiposMonedas,
	                                     $this->TipoMonedaID
	                                    );     
	$campoTipoMoneda = new CampoEditable();
      $campoTipoMoneda->setNombre('Tipo de Moneda');
      $campoTipoMoneda->setField($tipoMonedaField);
        $campoTipoMoneda->setValidador(new ReferenciaRequeridaValidador());
        $pestanasEditable->add('Tipo de Moneda', $campoTipoMoneda);

        $campoCreditoDefecto = new CampoEditable();
        $campoCreditoDefecto->setNombre('Cr&eacute;dito por defecto');
        $grupoSeleccion = new SelectionGroup('TipoCredito',array('Ilimitado' => new HiddenField('CreditoOculto','CreditoOculto',$this->Credito),
                                                                 'Limitado' => new TextField('datos[CreditoVisible]','Cr&eacute;dito:',$this->Credito)
                                                                ));
        $grupoSeleccion->value = $this->TipoCredito;
        $campoCreditoDefecto->setField($grupoSeleccion);
        Requirements::javascript('btmalaga/javascript/edicionsistemas.js');

	  $pestanasEditable->add('Contenido', $campoCreditoDefecto);

 	  //Credito del contenido.
	  $campoCredito = new CampoEditable();
	  $campoCredito->setNombre('Credito');
	  $campoCredito->setField(new TextField('Credito', 'Credito', $this->Credito));
        $campoCredito->setVisible(false);
	  $pestanasEditable->add("Contenido", $campoCredito);

  	  //Administrador del sistema.
	  if ($this->AdministradorSistemaID != 0) {
          $administrador = DataObject::get_by_id('UsuarioBtMalaga', $this->AdministradorSistemaID);
          $componenteAdministrador = DataObject::get_one('ComponenteUsuarioBtMalaga', 'UsuarioID='.$administrador->ID);
	    $this->ComponenteAdministradorID = $componenteAdministrador->ID;
	  }

	  $columnasAdministrador = '{"Campos":[
	                                       {"Nombre": "", "Columna":"Seleccionado", "Ordenacion":"na", "Tipo":"ra", "Tamano":20, "Filtro":"&nbsp;", "Alineacion":"left"},
		                                 {"Nombre": "Email", "Columna":"Email", "Ordenacion":"str", "Tipo":"ro", "Tamano":180, "Filtro":"#text_filter", "Alineacion":"left"},
		                                 {"Nombre": "Nombre", "Columna":"FirstName", "Ordenacion":"str", "Tipo":"ro", "Tamano":160, "Filtro":"#text_filter", "Alineacion":"left"},
		                                 {"Nombre": "Primer Apellido", "Columna":"Surname", "Ordenacion":"str", "Tipo":"ro", "Tamano":160, "Filtro":"#text_filter", "Alineacion":"left"},
		                                 {"Nombre": "Segundo Apellido", "Columna":"SApellido", "Ordenacion":"str", "Tipo":"ro", "Tamano":"*", "Filtro":"#text_filter", "Alineacion":"left"}
                                            ]}';

          $sistema = Session::get(ComponenteBtMalagaControl::SISTEMA); 
          $records = DB::query('select distinct ContenidoEditable.ClassName, ContenidoEditableConPermisos.*, ComponenteUsuarioBtMalaga.* from ContenidoEditable, ContenidoEditableConPermisos, ComponenteUsuarioBtMalaga, UsuarioBtMalaga, SistemaUsuarioBtMalaga where ContenidoEditable.ID = ComponenteUsuarioBtMalaga.ID and ContenidoEditableConPermisos.ID=ContenidoEditable.ID and ComponenteUsuarioBtMalaga.UsuarioID=UsuarioBtMalaga.ID and UsuarioBtMalaga.Estado like \'Activo\' and SistemaUsuarioBtMalaga.UsuarioID=UsuarioBtMalaga.ID and SistemaUsuarioBtMalaga.SistemaID='.$sistema);
          $usuarios = singleton('ComponenteUsuarioBtMalaga')->buildDataObjectSet($records);

	  $administradorField = new DataGridField(
	                                          'ComponenteAdministradorID',
	                                          $columnasAdministrador,
                                                  $usuarios,
	                                          $this->ComponenteAdministradorID
	                                         );     
	  $campoAdministrador = new CampoEditable();
        $campoAdministrador->setNombre('Administrador');
        $campoAdministrador->setField($administradorField);
        $campoAdministrador->setValidador(new ReferenciaRequeridaValidador());
        $pestanasEditable->add('Administrador', $campoAdministrador);

        //campo para el tipo de impuestos
        $campoTipoImpuestos = new CampoEditable();
        $campoTipoImpuestos->setNombre('Impuestos del sistema');
        $grupoImpuestos = new SelectionGroup('TipoImpuestos',array('Porcentual' => new TextField('datos[SeleccionValorImpuestoPorcentual]','Cantidad:',$this->ValorImpuestoPorcentual),
                                                                   'Fijo' => new TextField('datos[SeleccionValorImpuestoFijo]','Cantidad:',$this->ValorImpuestoFijo)
                                                                ));
        $grupoImpuestos->value = $this->TipoImpuestos;
        $campoTipoImpuestos->setField($grupoImpuestos);
	  $pestanasEditable->add('Contenido', $campoTipoImpuestos);

 	  //Valor del impuesto porcentual.
	  $campoImpuestoPorcentual = new CampoEditable();
	  $campoImpuestoPorcentual->setNombre('Impuesto porcentual');
	  $campoImpuestoPorcentual->setField(new TextField('ValorImpuestoPorcentual', 'ValorImpuestoPorcentual', $this->ValorImpuestoPorcentual));
        $campoImpuestoPorcentual->setVisible(false);
	  $pestanasEditable->add("Contenido", $campoImpuestoPorcentual);

 	  //Valor del impuesto fijo.
	  $campoImpuestoFijo = new CampoEditable();
	  $campoImpuestoFijo->setNombre('Impuesto fijo');
	  $campoImpuestoFijo->setField(new TextField('ValorImpuestoFijo', 'ValorImpuestoFijo', $this->ValorImpuestoFijo));
        $campoImpuestoFijo->setVisible(false);
	  $pestanasEditable->add("Contenido", $campoImpuestoFijo);

 	  //Valor de las ofertas iniciales.
	  $campoOfertasIniciales = new CampoEditable();
	  $campoOfertasIniciales->setNombre('Ofertas iniciales');
	  $campoOfertasIniciales->setField(new TextField('OfertasIniciales', 'OfertasIniciales', $this->OfertasIniciales));
	  $pestanasEditable->add("Contenido", $campoOfertasIniciales);

        return $pestanasEditable;
    }	
    
    /**
     * Devuelve el cï¿½digo par ver el componente.
     **/	
    protected function CodigoVer() {
      return $this->renderWith('PlantillaVerSistema');
    }

   	/**
	 * Clase que devuelve los botones para el toolbar.
	 * Nota: debe ser sobreescrito por cada componente.
	 **/
	public function botonesToolbar() {
	    //$this->cargarAcciones();
	    $xml = parent::botonesToolbar();

           $puedeEditar = $this->puedeEscribir();
      
       if (!$this->Borrado) {
		
		//botÃ³n para editar
        $xml .= '<item id="editar#'.$this->ID.'" type="button" text="Editar" img="btmalaga/images/edit.gif" imgdis="btmalaga/images/editdisabled.gif"';
        if (!$puedeEditar) {
        	$xml .= ' enabled="false"';
     	}        
        $xml .= '></item>';		
        

        $hayServicios = 0;
        $servicios = DataObject::get('ServicioBtMalaga','SistemaID='.$this->ID);
      	if ($servicios) {
            foreach ($servicios as $servicio) {
                if (!$servicio->Borrado) {
      		    $hayServicios = 1;
                    break;
                }
            }
        }
      	$hayUsuarios = 0;
        $usuarios = DataObject::get('SistemaUsuarioBtMalaga','SistemaID='.$this->ID);
        if (($usuarios) && ($usuarios->Count() > 0)) {
            $hayUsuarios = 1;
        }

        if ((!$servicios) && (!usuarios)) {
            //botón para borrar
            $xml .= '<item id="borrar#'.$this->ID.'" type="button" text="Borrar" img="btmalaga/images/delete.gif" imgdis="btmalaga/images/deletedisabled.gif"';
            if (!$puedeEditar) {
        	$xml .= ' enabled="false"';
     	    }        
            $xml .= '></item>';        
        } else if ((!$hayServicios) && (!$hayUsuarios)) {
            $xml .= '<item id="borradoLogico#'.$this->ID.'" type="button" text="Borrar" img="btmalaga/images/remove-icon.png" imgdis="btmalaga/images/remove-icondisabled.png0"';		        
            if (!$puedeEditar) {
        	$xml .= ' enabled="false"';
     	    }        
            $xml .= '></item>';  
        } 
      } else {
          $xml .= '<item id="restaurar#'.$this->ID.'" type="button" text="Restaurar" img="btmalaga/images/accept-icon.png" imgdis="btmalaga/images/accept-icondisabled.png"';		        
          if (!$puedeEditar) {
      	    $xml .= ' enabled="false"';
     	  }        
          $xml .= '></item>';  
      }
      return $xml;
    }  

    /**
     * sobreescribe la funciÃ³n para borrar
     */
    public function cargarAcciones() {
      	parent::cargarAcciones();
      	
      	//compruesa si existe algÃºn servicio con el sistema actual
      	if (strpos($this->AccionBorrar, 'javascript') !== false) {
              if ($this->Borrado) {
  	            $this->AccionBorrar = 'btmalaga/images/accept-icon.png^Restaurar^javascript:restaurarComponente('.$this->ID.')^_self';                 
              } else {
                  $puedo = 1;
        	  $servicios = DataObject::get('ServicioBtMalaga','SistemaID='.$this->ID);
      	      if ($servicios) {
                      $this->AccionBorrar = 'btmalaga/images/remove-icon.png^Borrar^javascript:borradoLogicoComponente('.$this->ID.')^_self';
                      foreach ($servicios as $servicio) {
                          if (!$servicio->Borrado) {
      		            $this->AccionBorrar = 'btmalaga/images/deletedisabled.gif^Borrar';
                              $puedo = 0;
                              break;
                          }
                      }
                  }
      	      if ($puedo) {
                    $usuarios = DataObject::get('SistemaUsuarioBtMalaga','SistemaID='.$this->ID);
                    if (($usuarios) && ($usuarios->Count() > 0)) {
      		    $this->AccionBorrar = 'btmalaga/images/remove-icon.png^Borrar^javascript:borradoLogicoComponente('.$this->ID.')^_self';
                    }
      	      }
              }              	      		
      	}
    }    

    /**
     * sobreescribe la función guardar para guardar al administrador.
     **/
    public function guardar($datos) {
      $datosFormulario = $datos['datos'];
      $componenteAdministrador = DataObject::get_by_id('ComponenteUsuarioBtMalaga', $datosFormulario['ComponenteAdministradorID']);
      $this->AdministradorSistemaID = $componenteAdministrador->UsuarioID;
      parent::guardar($datos); 
    }

    /**
     * Devuelve el formulario para el filtrado de datos.
     **/
    public function formularioFiltro() {
      $tiposMonedas = DataObject::get('TipoMonedaBtMalaga');
      if ($tiposMonedas) {
	  $tiposMonedas = $tiposMonedas->toDropdownMap('ID', 'Nombre', ' ', true);
      }
      $estadosBorrado = array('' => ' ',
                              '0' => 'No Borrado',
                              '1' => 'Borrado'
                             );
      $fieldBorrado = new DropdownField('Borrado','Borrado:',$estadosBorrado);    

      $fields = new FieldSet(new DropdownField('TipoMoneda', 'Tipo de moneda:', $tiposMonedas),
                             $fieldBorrado);

      return $fields;
    }

   }
?>
