<?php
/**
 * Oferta de servicio para el sistema de banco del tiempo de Málaga.
 **/
 class OfertaBtMalaga extends ServicioBtMalaga {

    static $db = array(
                       
                      );
 
    static $has_one = array(
                            'Ofertante' => 'UsuarioBtMalaga'
 	                   );
 	                        	                       
    private $ComponenteOfertanteID;
 	                       
    function __construct($record = null, $isSingleton = false) {
        parent::__construct($record, $isSingleton);

        //cambia el valor del Ofertante para cambiar el ID
	//por el de su componente.
 	if ($this->OfertanteID != 0) {
	    $componenteUsuario = DataObject::get_one('ComponenteUsuarioBtMalaga', 'UsuarioID='.$this->OfertanteID);
            if ($componenteUsuario) {
                $this->ComponenteOfertanteID = $componenteUsuario->ID;
                $this->setComponenteUsuario($componenteUsuario);
            }
        }    
    } 	

    /**
     * Devuelve el nombre del componente 
     **/
    public function getNombreComponente() {
        return 'oferta';
    }                                            
 	
    /**
     * Función que devuelve los campos para editar
     * el contenido en modo principal.
     **/
    protected function cargarEdicionPrincipal() { 
        $pestanasEditable = parent::cargarEdicionPrincipal();       

        $datos = $this->Pagina()->Datos();
        $usuarioConectado = Member::currentUser();
	if (($usuarioConectado->ID != $this->OfertanteID) && (!isset($datos[ServicioBtMalaga::AUTOR_SERVICIO]))) {
	    //Ofertante.
	    $columnasOfertante = '{"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":"FirtsName", "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);
            $ofertantes = singleton('ComponenteUsuarioBtMalaga')->buildDataObjectSet($records);	
	    $ofertanteField = new DataGridField(
	                                        'ComponenteOfertanteID',
	                                        $columnasOfertante,
                                                $ofertantes,
	                                        $this->ComponenteOfertanteID
	                                       );
	                                                
	    $campoOfertante = new CampoEditable();
            $campoOfertante->setNombre('Ofertante');
            $campoOfertante->setField($ofertanteField);
            $campoOfertante->setValidador(new ReferenciaRequeridaValidador());
            $pestanasEditable->add('Ofertante', $campoOfertante);
        } else { 
            if (isset($datos[ServicioBtMalaga::AUTOR_SERVICIO])) {
                $this->OfertanteID = $datos[ServicioBtMalaga::AUTOR_SERVICIO];
            }
	    $campoOfertante = new CampoEditable();
	    $campoOfertante->setNombre('Ofertante');
	    $campoOfertante->setField(new HiddenField('OfertanteID', 'OfertanteID', $this->OfertanteID));
	    $campoOfertante->setVisible(false);
	    $pestanasEditable->add("Contenido", $campoOfertante);                        
        }  
        	
        return $pestanasEditable;
    }	        
    
    /**
     * Sobreescribe el método guardar para escribir en el ofertante.
     **/
    public function guardar($datos) {
    
    	if ($this->ComponenteOfertanteID) {
    	    $componenteUsuario = DataObject::get_by_id('ComponenteUsuarioBtMalaga', $this->ComponenteOfertanteID);
    	    if ($componenteUsuario) {
    	        $this->OfertanteID = $componenteUsuario->UsuarioID;
	    }
    	}
    	parent::guardar($datos);
    }
    
    /**
     * Función para clonar un servicio.
     * Nota: debe ser sobreescrito por cada hijo.
     **/
    public function clonarServicio() {
    	return $this->duplicate(true); //true para guardarlo también.
    }
    
    /**
     * Indica si el usuario conectado tiene crédito para solicitar el servicio.
     */
    public function tieneCredito() {
        $usuario = Member::currentUser();
        return $usuario->tieneCredito($this->Precio);
    }    

    /**
     * Devuelve los campso para el formulario para el filtrado de datos.
     **/
    public function formularioFiltroTodos() {
        $fields = parent::formularioFiltroTodos();
        $fieldsPropio = new FieldSet(new TextField('Autor','Autor de la oferta (Email):'));
        $fields->merge($fieldsPropio);
        return $fields;
    }            	                                            

    /**
     * Devuelve los campso para el formulario para el filtrado de datos.
     **/
    public function formularioFiltro() {
        $fields = parent::formularioFiltro();
        $fieldsPropio = new FieldSet(new TextField('Autor','Autor de la oferta (Email):'));
        $fields->merge($fieldsPropio);
        return $fields;
    }          
    
    /**
     * Sobreescribe el método puede publicar para mostrar
     * evitar que se puedan publicar servicios de un usuario no activo.
     **/
    public function puedePublicar() {
        if ($this->Ofertante()->esUsuarioActivo()) {
            return parent::puedePublicar();
        } else {
            $resultado = false;
        }    
    }      	                                            

 }
?>
