<?php 
class Potencial extends AppObjeto{
	
	protected static $_aliasTabla = 'a';
	protected static $_nombreTabla = 'POTENCIALES';
	protected static $_campoPK = 'NUMERO';
	protected static $_tipo_primary = self::APP_TIPO_PRIMARY_STRING;
	
	const PERFIL_CHOFER = 'CHOFER';
	const PERFIL_COMERCIAL = 'COMERCIAL';
	const PERFIL_PROVEEDOR = 'PROVEEDOR';
	const PERFIL_ADMINISTRACION = 'ADMIN';
	const SUFIJO_COMERCIAL_PARA_PADRE = '000';
	
	// campos
	protected $codigo;
	protected $direccion;
	protected $numeroDireccion;
	protected $codigo_postal;
	protected $poblacion;
	protected $fax;
	protected $email;
	protected $web;
	protected $empresa;
	protected $nombre;	
	protected $telefono;
	protected $telefono2;
	protected $movil;
	protected $nif;
	protected $usuarioAlta;
	protected $fecha_alta;
	protected $SUBLICEN;
	protected $usuarioUltimaModificacion;
	protected $ultima_modificacion;
	protected $medio;
	protected $origen;
	protected $fecha_creacion;
	protected $oficina;
	protected $direccionEspana;
	protected $direccionFrancia;
	protected $gpsEspana;
	protected $gpsFrancia;
	protected $usuarioWeb;
	protected $contraseWeb;
	protected $direccionIP;
	protected $idioma;
	protected $estaEmailValidado;
	protected $estaEmailValidadoPersonal;
			
	protected $chofer;
	protected $comercial;	
	protected $codigoComisionista;
	protected $codigoComisionistaPadre;
	protected $proveedor;
	protected $codigoCliente;
	protected $codigoPropietario;	

	protected $perfilesDisponibles;
	protected $perfilActivo;
	
	protected $usuarioKarve;
	
	
	protected static function initMetaDatos(){
		self::addPropiedadBD('a', 'NUMERO', 'codigo', self::META_VARCHAR);
		self::addPropiedadBD('a', 'NOMBRE', 'nombre', self::META_VARCHAR);
		self::addPropiedadBD('a', 'DIRECCION', 'direccion', self::META_VARCHAR);
		self::addPropiedadBD('a', 'DIR_NUM', 'numeroDireccion', self::META_VARCHAR);
		self::addPropiedadBD('a', 'CP', 'codigo_postal', self::META_VARCHAR);
		self::addPropiedadBD('a', 'POBLACION', 'poblacion', self::META_VARCHAR);
		self::addPropiedadBD('a', 'NIF', 'nif', self::META_VARCHAR);
		self::addPropiedadBD('a', 'TELEFONO', 'telefono', self::META_VARCHAR);
		self::addPropiedadBD('a', 'TEL2', 'telefono2', self::META_VARCHAR);
		self::addPropiedadBD('a', 'MOVIL', 'movil', self::META_VARCHAR);
		self::addPropiedadBD('a', 'FAX', 'fax', self::META_VARCHAR);
		self::addPropiedadBD('a', 'EMAIL', 'email', self::META_VARCHAR);
		self::addPropiedadBD('a', 'WEB', 'web', self::META_VARCHAR);
		self::addPropiedadBD('a', 'EMPRESA_PT', 'empresa', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ALTA','fecha_alta' , self::META_DATE);
		self::addPropiedadBD('a', 'SUBLICEN', 'SUBLICEN', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ULTMODI', 'ultima_modificacion', self::META_VARCHAR);
		self::addPropiedadBD('a', 'USUARIO', 'usuarioUltimaModificacion', self::META_VARCHAR);
		self::addPropiedadBD('a', 'MEDIO', 'medio', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ORIGEN', 'origen', self::META_VARCHAR);
		self::addPropiedadBD('a', 'USUCREA', 'usuarioAlta', self::META_VARCHAR);
		self::addPropiedadBD('a', 'FECHACREA', 'fecha_creacion', self::META_VARCHAR);
		self::addPropiedadBD('a', 'OFICINA', 'oficina', self::META_VARCHAR);
		self::addPropiedadBD('a', 'DIRESP', 'direccionEspana', self::META_VARCHAR);
		self::addPropiedadBD('a', 'DIRFRAN', 'direccionFrancia', self::META_VARCHAR);
		self::addPropiedadBD('a', 'GPSESP', 'gpsEspana', self::META_VARCHAR);
		self::addPropiedadBD('a', 'GPSFRAN', 'gpsFrancia', self::META_VARCHAR);
		self::addPropiedadBD('a', 'USUARIO_WEB', 'usuarioWeb', self::META_VARCHAR);
		self::addPropiedadBD('a', 'CONTRASE_WEB', 'contraseWeb', self::META_VARCHAR);
		self::addPropiedadBD('a', 'DIR_IP', 'direccionIP', self::META_VARCHAR);
		self::addPropiedadBD('a', 'IDIOMA', 'idioma', self::META_INT);
		self::addPropiedadBD('a', 'VALIDA_MAIL', 'estaEmailValidado', self::META_INT);
		self::addPropiedadBD('a', 'VALIDA_MAIL_PERSO', 'estaEmailValidadoPersonal', self::META_INT);
		

		self::addPropiedadBD('a', 'CHOFER', 'chofer', self::META_VARCHAR);
		self::addPropiedadBD('a', 'PROVEE', 'proveedor', self::META_VARCHAR);
		self::addPropiedadBD('a', 'CLIENTE', 'codigoCliente', self::META_VARCHAR);
		self::addPropiedadBD('a', 'PROPIE', 'codigoPropietario', self::META_VARCHAR);
		self::addPropiedadBD('a', 'COMICLAVE', 'comercial', self::META_VARCHAR);
		self::addPropiedadBD('a', 'COMI', 'codigoComisionista', self::META_VARCHAR);		
		self::addPropiedadBD('a', 'SUBCOMIDE', 'codigoComisionistaPadre', self::META_VARCHAR);
		self::addPropiedadBD('a', 'USU_KARVE', 'usuarioKarve', self::META_VARCHAR);
	}

	public function getUsuarioKarve() {
	    return $this->usuarioKarve;
	}
	public function setUsuarioKarve($usuarioKarve) {
	    $this->usuarioKarve = $usuarioKarve;
	}
	
	private function setId($id){
		$this->id = $id;
	}
	
	public function tienePerfil($perfil){
		if (array_search($perfil, $this->perfilesDisponibles)=== false) 
			return false;
		else 
			return true;	
	}
	
	public function tieneUsuarioKarve(){
		if (strlen($this->usuarioKarve)>0)
			return true;
		else 
			return false;
	}
	
	public function asignarComercial($codigoOrigen, $codigoAfiliado){
		$comercial = '';
		if ($codigoAfiliado){
			$comercial = $codigoAfiliado;
		} else {
			if ($codigoOrigen){
				$origen = new Origen($codigoOrigen);
				$comisionistaOrigen = $origen->getCodigoComisionista();
				if ($comisionistaOrigen>0) $comercial = $comisionistaOrigen;
			}
		}
		$this->comercial = $comercial;
	}
	
	public function cargarPerfiles()
	{
		$perfiles = array();
		//if (((int)$this->chofer)>0) $perfiles[] = Potencial::PERFIL_CHOFER;
		if (((int)$this->codigoComisionista)>0) $perfiles[] = Potencial::PERFIL_COMERCIAL;
		if (((int)$this->proveedor)>0) $perfiles[] = Potencial::PERFIL_PROVEEDOR;
		if (strlen($this->usuarioKarve)>0) $perfiles[] = Potencial::PERFIL_ADMINISTRACION;
		$this->perfilesDisponibles = $perfiles;
	}
	
	public function getPerfilesDisponibles(){
		return $this->perfilesDisponibles;
	}
	
	public function setPerfilPorDefecto(){
		$this->perfilActivo = null;
		if (((int)$this->proveedor)>0) $this->perfilActivo = Potencial::PERFIL_PROVEEDOR;
		if (((int)$this->codigoComisionista)>0) $this->perfilActivo = Potencial::PERFIL_COMERCIAL;
		if (strlen($this->usuarioKarve)>0) $this->perfilActivo = Potencial::PERFIL_ADMINISTRACION;
	}
	
	public function setPerfilActivo($perfil){
		if ($this->tienePerfil($perfil)){
			$this->perfilActivo = $perfil;
			return true;
		} else {
			return false;
		}
	}
	
	public function getEstaEmailValidado() {
		if ($this->estaEmailValidado)
			return true;
		else 
			return false;
	}
	
	public function setEstaEmailValidado($estaEmailValidado) {
		$this->estaEmailValidado = $estaEmailValidado;
	}
	
	public function getEstaEmailValidadoPersonal() {
		if ($this->estaEmailValidadoPersonal)
			return true;
		else
			return false;
	}
	public function setEstaEmailValidadoPersonal($estaEmailValidadoPersonal) {
		$this->estaEmailValidadoPersonal = $estaEmailValidadoPersonal;
	}
	
	public function getWeb() {
	    return $this->web;
	}
	
	public function setWeb($web) {
	    $this->web = $web;
	}
	
	public static function getNombreBoton($perfil){
		$nombre ='';
		switch ($perfil){
			case Potencial::PERFIL_CHOFER:
				$nombre = 'CH';
				break;
			case Potencial::PERFIL_COMERCIAL:
				$nombre = 'CO';
				break;
			case Potencial::PERFIL_PROVEEDOR:
				$nombre = 'PR';
				break;
			case Potencial::PERFIL_ADMINISTRACION:
				$nombre = 'AD';
				break;
		}
		return $nombre;
	}
	
	public static function getUrlPorDefectoDependeDePerfil($perfil){
		$url = 'windex/index';
		switch ($perfil){
			case Potencial::PERFIL_CHOFER:
				$url = 'wchofer/listado';
				break;
			case Potencial::PERFIL_COMERCIAL:
				$url = 'wpresupuesto/listado';
				break;
			case Potencial::PERFIL_PROVEEDOR:
				$url = 'wvehiculo/listado';
				break;
			case Potencial::PERFIL_ADMINISTRACION:
				$url = 'wservicio/trabajo';
				break;
		}
		return $url;
	}
	
	public function getPerfilActivo(){
		return $this->perfilActivo;
	}
	
	public function getComercial() {
	    return $this->comercial;
	}
	
	public function getComercialPadre() {
		if (!$this->comercial) return '';
		$raiz_comercial = substr($this->comercial,0,4);
		$numero_sucomercial = substr($this->comercial,4,3);
		if ( $numero_sucomercial != self::SUFIJO_COMERCIAL_PARA_PADRE){
			return $raiz_comercial.self::SUFIJO_COMERCIAL_PARA_PADRE;
		}
	}
	
	public function setComercial($comercial) {
	    $this->comercial = $comercial;
	}
	
	public function getIdioma() {
	    return $this->idioma;
	}
	
	public function setIdioma($idioma) {
	    $this->idioma = $idioma;
	}

	public function getCodigo(){
		return $this->codigo;
	}

	public function getProveedor() {
	    return $this->proveedor;
	}
	public function setProveedor($proveedor) {
	    $this->proveedor = $proveedor;
	}
	
	public function getGpsEspana() {
	    return $this->gpsEspana;
	}
	public function setGpsEspana($gpsEspana) {
	    $this->gpsEspana = $gpsEspana;
	}
	
	public function getGpsFrancia() {
	    return $this->gpsFrancia;
	}
	public function setGpsFrancia($gpsFrancia) {
	    $this->gpsFrancia = $gpsFrancia;
	}
	
	public function getDireccionEspana() {
	    return $this->direccionEspana;
	}
	public function setDireccionEspana($direccionEspana) {
	    $this->direccionEspana = $direccionEspana;
	}
	
	public function getDireccionFrancia() {
	    return $this->direccionFrancia;
	}
	public function setDireccionFrancia($direccionFrancia) {
	    $this->direccionFrancia = $direccionFrancia;
	}
	
	public function setNumeroDireccion($numeroDireccion){
		$this->numeroDireccion = $numeroDireccion;
	}
	
	public function setUsuarioWeb($usuarioweb){
		$this->usuarioWeb = $usuarioweb;
	}
	
	public function getUsuarioWeb(){
		return $this->usuarioWeb;
	}
	
	public function getUsuarioUltimaModificacion() {
	    return $this->usuarioUltimaModificacion;
	}
	public function setUsuarioUltimaModificacion($usuarioUltimaModificacion) {
	    $this->usuarioUltimaModificacion = $usuarioUltimaModificacion;
	}
	

	/**
	 * Lista separada por comas
	 * @param unknown $lista
	 * @return Ambigous <boolean, multitype:, multitype:NULL >
	 */
	public static function getByLista($lista){
	
		//TODO: campo empresa y sublicen para filtrar
			
		$select = self::selectObjeto();
		$select->where('a.empresa=?','00');
		$select->where("a.numero in (".$lista.")");
		$res = self::selectExecute($select);
		if (!$res->estaVacio()){
			$resultado = $res->getDatos();
		} else {
			$resultado = false;
		}
		return $resultado;
	}
	
	public static function getByComisinistasHijos($comisionistaPadre){
		
		//TODO: campo empresa y sublicen para filtrar
		 
		if (!($comisionistaPadre>0)) die('falta comisionista padre');
		$select = self::selectObjeto();
		$select->where('a.empresa=?','00');
		$select->where('a.subcomide=?',$comisionistaPadre);
		$res = self::selectExecute($select);
		if (!$res->estaVacio()){
			$resultado = $res->getDatos();
		} else {
			$resultado = false;
		}
		return $resultado;
	}
	
	public static function getByCodigoComisionista($comisionista){
	
		//TODO: campo empresa y sublicen para filtrar
			
		if (!($comisionista>0)) die('falta comisionista padre');
		$select = self::selectObjeto();
		$select->where('a.empresa=?','00');
		$select->where('a.comi=?',$comisionista);
		//echo $select;
		$res = self::selectExecute($select);
		$pot = new Potencial();
		if (!$res->estaVacio()){
			$datos = $res->getDatos();
			$codigo = $datos[0]['codigo'];
			$datos[0]['id']= $codigo;
			$pot->asignaDatosObjeto($datos[0]);
			$pot->setId($codigo);
		}
		return $pot;
		
	}
	
	public static function getCodigoByEmail($email){
		$email = str_replace('@', '#', $email);
		$select = self::selectObjeto();
		$select->where('email=?',$email);
		$potencial = self::selectExecute($select,null,true);
		$potencial = $potencial->getDatos();
		if (isset($potencial[0]['codigo'])){
			$codigo = $potencial[0]['codigo'];
		} else { 
			$codigo = '';
		}
		return $codigo;
	}

	public static function getByEmail($email){
	
		$_cmp_email = 'EMAIL';
	
		$email = str_replace('@', '#', $email);
		$clase = get_called_class();
		$select = $clase::selectObjeto();
		$select->where($clase::getAliasTabla().'.'.$_cmp_email.'=?',$email);
		$res = $clase::selectExecute($select);
		$pot = new Potencial();
		if (!$res->estaVacio()){
			$datos = $res->getDatos();
			$codigo = $datos[0]['codigo'];
			$datos[0]['id']= $codigo;
			$pot->asignaDatosObjeto($datos[0]);
			$pot->setId($codigo);
		}
		return $pot;
	}
	
	public static function getEmailRepetidos(){
		$_cmp_email = 'EMAIL';
		$_cmp_arr_email = 'email';
		$_cmp_arr_numero_repeticiones = 'numero_repeticiones';
		
		$db = self::getDb();
		$select = $db->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p'=> self::getNombreTabla()),array($_cmp_arr_email=>$_cmp_email, $_cmp_arr_numero_repeticiones => 'count(*)'));
		$select->group($_cmp_arr_email);
		$select->having($_cmp_arr_numero_repeticiones.'>1');
		$resultado = self::selectExecute($select, null);
		$datos = $resultado->getDatos();
		return $datos;
	}
	
	public function load($id){
		parent::load($id);
		$this->email = str_replace('#', '@', $this->email);
		$this->cargarPerfiles();
		$this->setPerfilPorDefecto();
	}
	
	public function save(){
		// Comprobar si es insertar o modificar
		if ($this->codigo>0){
			$this->ultima_modificacion = date('YmdH:i');
		} else {
			//Crear un potencial
			$this->fecha_creacion = date('YmdH:i');
			$this->codigo = $this->siguienteIdMaximo();
			$this->SUBLICEN = '00';
			$this->empresa = '00';
			$this->fecha_alta = date('d/m/Y');
			$this->ultima_modificacion = date('YmdH:i');
			$this->oficina = 'C1';
			//origen
			//comisionista
		}
		$this->email = str_replace('@', '#', $this->email);
		parent::save();
	}
	
	/*public function save(){
		$usuario = Usuario::UsuarioLoqueado();
		$this->email = str_replace('@', '#', $this->email);
		if(!$this->id){
			$this->fecha_alta = date('d/m/Y');
		}
		if($usuario->EMPRESA){
			$this->SUBLICEN = $usuario->EMPRESA;
		}else{
			$this->SUBLICEN = '00';
		}
		
		//$this->empresa = $this->SUBLICEN;
		$this->ultima_modificacion = date('YmdH:i');
		if(!is_numeric($this->medio)){
			$this->medio = '11';
		}
		
		if(!is_numeric($this->origen)){
			$this->origen = '64';
		}
		if(!$this->oficina){
			$this->oficina = 'C1';
		}
		$this->fecha_creacion = date('YmdH:i');
		$this->codigo = $this->siguienteIdMaximo();
		parent::save();
	}	
	*/
	
	public function toCliente(){

		if (!$this->codigoCliente){
			try {
				$codigoPotencial = $this->codigo;
				$sql = "select cv.fnPotencialCliente('".$codigoPotencial."') as codigoCliente";
				$db = self::getDb();
				$adapter = $db->getAdapter();
				$stmt = $adapter->query($sql);
				$rows = $stmt->fetchAll();
				$codigoCliente = $rows[0]['codigoCliente'];
				return $codigoCliente;
				
			} catch (Exception $e){
				echo $e->getMessage();
				return null;
			}
		} else {
			return $this->codigoCliente;
		}
	}
	
	public function siguienteIdMaximo(){
		$db = self::getDb();
		$select = $db->select();
		$usuario = Usuario::UsuarioLoqueado();
		$select->setIntegrityCheck(false);
		$select->from(array('r'=>$this->getNombreTabla()),array('numero_max' => 'MAX(NUMERO)'));
		if (isset($usuario->EMPRESA))  {
			$empresa = $usuario->EMPRESA;
		}else {
			$empresa = '00';
		}
		$select->where("NUMERO like '".$empresa."%'");
		$resultado = self::selectExecute($select, null, true);
		$datos = $resultado->getDatos();
		$num_max = $datos[0]['numero_max'] + 1;
		$num_max = str_repeat('0',7-strlen($num_max)).$num_max;
		return $num_max;
	}
	
	public static function getByDNI($dni){
		$select = self::selectObjeto();
		$select->where('NIF=?', $dni);
		$resultado = self::selectExecute($select,null,true);
		$datos = $resultado->getDatos();
		if(count($datos)>0){
			$potencial = new Potencial($datos[0]['codigo']);
			return $potencial;
		}else{
			return false;
		}
		
	}

	
	public static function getByUsuarioWeb($email){
		$select = self::selectObjeto();
		$select->where('USUARIO_WEB=?', $email);
		$resultado = self::selectExecute($select,null,true);
		$datos = $resultado->getDatos();
		if(count($datos)>0){
			$potencial = new Potencial($datos[0]['codigo']);
			return $potencial;
		}else{
			return false;
		}
	
	}
	
	public static function getByChofer($chofer){
		$select = self::selectObjeto();
		$select->where('CHOFER=?', $chofer);
		$resultado = self::selectExecute($select,null,true);
		$datos = $resultado->getDatos();
		if(count($datos)>0){
			$potencial = new Potencial($datos[0]['codigo']);
			return $potencial;
		}else{
			return false;
		}
	
	}

	
	public static function getByCliente($cliente){
		$select = self::selectObjeto();
		$select->where('CLIENTE=?', $cliente);
		$resultado = self::selectExecute($select,null,true);
		$datos = $resultado->getDatos();
		if(count($datos)>0){
			$potencial = new Potencial($datos[0]['codigo']);
			return $potencial;
		}else{
			return false;
		}
	
	}
	
	public static function getByPropietario($propietario){
		$select = self::selectObjeto();
		$select->where('PROPIE=?', $propietario);
		$resultado = self::selectExecute($select,null,true);
		$datos = $resultado->getDatos();
		if(count($datos)>0){
			$potencial = new Potencial($datos[0]['codigo']);
			return $potencial;
		}else{
			return false;
		}
	
	}
	
	public function getCodigoPropietario() {
		return $this->codigoPropietario;
	}
	public function setCodigoPropietario($codigoPropietario) {
		$this->codigoPropietario = $codigoPropietario;
	}
	
	public function getNif() {
		return $this->nif;
	}
	public function setNif($nif) {
		$this->nif = $nif;
	}
	
	public function getMovil() {
		return $this->movil;
	}
	public function setMovil($movil) {
		$this->movil = $movil;
	}
	
	public function getTelefono2() {
		return $this->telefono2;
	}
	public function setTelefono2($telefono2) {
		$this->telefono2 = $telefono2;
	}
	
	public function getTelefono() {
		return $this->telefono;
	}
	public function setTelefono($telefono) {
		$this->telefono = $telefono;
	}
	
	public function getNombre() {
		return $this->nombre;
	}
	public function setNombre($nombre) {
		$this->nombre = $nombre;
	}
	
	public function getEmpresa() {
		return $this->empresa;
	}
	public function setEmpresa($empresa) {
		$this->empresa = $empresa;
	}
	
	public function getChofer() {
		return $this->chofer;
	}
	
	public function setChofer($chofer) {
		$this->chofer = $chofer;
	}
	
	public function getEmail() {
	    return str_replace('#', '@', $this->email);
	}
	public function setEmail($email) {
	    $this->email = $email;
	}
	
	public function getPoblacion() {
	    return $this->poblacion;
	}
	public function setPoblacion($poblacion) {
	    $this->poblacion = $poblacion;
	}
	
	
	public function getCodigoPostal() {
	    return $this->codigo_postal;
	}
	public function setCodigoPostal($codigoPostal) {
	    $this->codigo_postal = $codigoPostal;
	}
	
	public function getDireccion() {
	    return $this->direccion;
	}
	
	public function setDireccion($direccion) {
	    $this->direccion = $direccion;
	}
	
	public function getCodigoComisionista() {
	    return $this->codigoComisionista;
	}
	
	public function setCodigoComisionista($codigoComisionista) {
	    $this->codigoComisionista = $codigoComisionista;
	}
	
	public function getCodigoComisionistaPadre() {
	    return $this->codigoComisionistaPadre;
	}
	public function setCodigoComisionistaPadre($codigoComisionistaPadre) {
	    $this->codigoComisionistaPadre = $codigoComisionistaPadre;
	}
	
	public function getOrigen() {
	    return $this->origen;
	}
	
	public function setOrigen($origen) {
	    $this->origen = $origen;
	}

	public function getCodigoCliente() {
	    return $this->codigoCliente;
	}
	
	public function setCodigoCliente($codigoCliente) {
	    $this->codigoCliente = $codigoCliente;
	}
	
	public function getUsuarioAlta() {
	    return $this->usuarioAlta;
	}
	public function setUsuarioAlta($usuarioAlta) {
	    $this->usuarioAlta = $usuarioAlta;
	}
	
	public function getDireccionIP() {
	    return $this->direccionIP;
	}
	public function setDireccionIP($direccionIP) {
	    $this->direccionIP = $direccionIP;
	}
	
			
	
	
				
	
	
	
	
}