<?php

class Servicio extends AppObjeto {
	
	//Configuración de tabla

	protected static $_aliasTabla = 'a';
	protected static $_nombreTabla = 'CONTRATOS1';
	protected static $_campoPK = 'NUMERO';
	protected static $_tipo_primary = self::APP_TIPO_PRIMARY_STRING;
	protected $empresa;
	public $itinerario;
	public $codigoVehiculo;
	public $numeroServicio;
	public $fechaServicioInicio;
	public $horaServicioInicio;
	public $horaServicioRealSalida;
	public $origenLugar;
	public $origenCalle;
	public $origenNumero;
	public $origenCP;
	public $origenPoblacion;
	public $fechaServicioFin;
	public $horaServicioFin;
	public $destinoLugar;
	public $destinoCalle;
	public $destinoNumero;
	public $destinoCP;
	public $destinoPoblacion;
	public $horaCeremonia;
	public $tipoServicio;
	public $vehiculoMarca;
	public $vehiculoModelo;
	public $vehiculoMatricula;
	public $vehiculoGrupo;
	public $kilometrosVehiculoSalida;
	public $kilometrosVehiculoLlegada;
	public $kilometrosServicio;
	public $fechaParkingSalida;
	public $fechaParkingEntrada;
	public $horaParkingSalida;
	public $horaParkingEntrada;
	public $tiempoParking;
	public $kilometrosParkingLlegada;
	public $kilometrosParkingSalida;
	public $kilometrosParking;
	public $ivaTotal;
	public $baseImponible;
	public $totalConIva;
	public $nombreComercial;
	public $clienteNombre;
	public $clienteTelefono;
	public $tarifa;
	public $codigoCliente;
	public $numeroPersonas;
	public $gpsOrigen;
	public $gpsDestino;
	public $numeroPersonasViaje;
	protected $archivoRuta;
	protected $kmsRuta;
	protected $tiempoRuta;
	protected $comercial;
	protected $comisionista;
	protected $subcomisionista;
	protected $choferNombre;
	protected $codigoChofer;
	protected $fechaSalidaDeFrancia;
	protected $horaSalidaDeFrancia;
	protected $fechaSalidaDeEspana;
	protected $horaSalidaDeEspana;
	
	public $ESTADO_SERVICIO;
	
	public $LLAMADA_CONFIRMA;
	public $LLAMADA_ENLUGAR;
	public $LLAMADA_ENCOCHE;
	public $LLAMADA_FINALIZADO;
	
	
	public $LLAMADA_SGARAJE;
	public $LLAMADA_LGARAJE;
	
	public $nombreVehiculo;
	public $fecha_hora_inicio;
	public $direccion_origen;
	public $direccion_destino;
	public $limiteKilometros;
	public $limiteHoras;
	public $observaciones;
	public $referencia;
	public $personaContacto;
	public $personaTelefono;
	public $propietarioCoche;
	public $agenteCoche;
	protected $presupuesto;
	protected $reserva;
	protected $localizador;
	protected $factura;
	protected $agente;
	
	public $permisoNoMostrarPendienteCobroEnHojaRuta;
	public $cobrospagados;
	public $disponibilidad;
	public $clave_enlace;
	public $prueba;
	public $gastosEnEfectivo;
	public $gastosEnEfectivoObservaciones;
	
	private $encuestaFecha;
	private $encuestaSatisfaccion;
	private $encuestaDesarrollo;
	private $encuestaPuntualidad;
	private $encuestaQuejas;
	private $encuestaPersonal;
	private $encuestaCalidadPrecio;
	private $encuestaConfiariaMasServicios;
	private $encuestaConfiariaEsteServicio;
	private $encuestaPresencia;
	private $encuestaActitud;
	private $encuestaInformacion;
	private $encuestaSolucion;
	public $tiempoEspera = 9;
	
	
	
	CONST CON_LIN_EXTRA_HORAS = 5;
	CONST CON_LIN_EXTRA_KMS = 7;
	CONST CON_LIN_EXTRA_KMS_FISCAL = 53;
	CONST CON_LIN_EXTRA_HORAS_ESPERA_FISCAL = 48;
	
	
	CONST ST_CONFIRMAR = 1;
	CONST ST_SALIDA_GARAGE = 2;
	CONST ST_EN_LUGAR_INICIO = 3;
	CONST ST_CON_CLIENTE = 4;
	CONST ST_FINALIZADO = 5;
	CONST ST_EN_GARAGE = 6;
	CONST ST_RESUMEN = 7;
	
	const TARIFA_SERVICIO_MENSUAL_FISCAL = 206;
	
	public static $asociado_estado = array(
			self::ST_CONFIRMAR => 'LLAMADA_CONFIRMA',
			self::ST_SALIDA_GARAGE => 'LLAMADA_SGARAJE',
			self::ST_EN_LUGAR_INICIO => 'LLAMADA_ENLUGAR',
			self::ST_CON_CLIENTE => 'LLAMADA_ENCOCHE',
			self::ST_FINALIZADO => 'LLAMADA_FINALIZADO',
			self::ST_EN_GARAGE => 'LLAMADA_LGARAJE',
			
	);
	
	
	
	//para el parking
	public $cantidadParking;
	public $precioParking;
	public $resultadoParking;

	protected static function initMetaDatos(){
		//parent::initMetaDatos();
		self::addTablaRelacion('LICON', 'LICON', 'NUMERO', 'a', 'NUMERO',FALSE,'LICON.incluido=-1 AND LICON.concepto=24');
		self::addTablaRelacion('COBROS', 'visRptContraPlus', 'NUMERO', 'a', 'NUMERO');
		self::addTablaRelacion('CHOFER', 'CHOFERES', 'COD_CHOF', 'a', 'CHOFER_CON1');		
		self::addTablaRelacionJoin(self::JOIN_LEFT,'CONTRATOS4', 'CONTRATOS4', 'NUMERO', 'a', 'NUMERO',true);
		self::addTablaRelacionJoin(self::JOIN_LEFT,'CONTRATOS2', 'CONTRATOS2', 'NUMERO', 'a', 'NUMERO', true);				
		self::addTablaRelacionJoin(self::JOIN_LEFT,'NTARI', 'NTARI', 'CODIGO', 'a', 'TARIFA_CON1', false);
		self::addTablaRelacionJoin(self::JOIN_LEFT,'VEHICULO1', 'VEHICULO1', 'CODIINT', 'a', 'vcact_con1');
		self::addTablaRelacionJoin(self::JOIN_LEFT,'VEHI_CONT', 'VEHI_CONT', 'CONTRATO', 'a', 'NUMERO', true);
		self::addTablaRelacionJoin(self::JOIN_LEFT,'CLIENTES1', 'CLIENTES1', 'NUMERO_CLI', 'a', 'CLIENTE_CON1');
		self::addPropiedadBD('a', 'NUMERO', 'numeroServicio', self::META_VARCHAR);		
		self::addPropiedadBD('a', 'SUBLICEN_CON1', 'empresa', self::META_VARCHAR);
		self::addPropiedadBD('a', 'vcact_con1', 'codigoVehiculo', self::META_VARCHAR);
		self::addPropiedadBD('a', 'NOTAS_CON1', 'itinerario', self::META_VARCHAR);
		self::addPropiedadBD('a', 'CLIENTE_CON1', 'codigoCliente', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LUENTRE_CON1', 'origenLugar', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ENT_CALLE', 'origenCalle', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ENT_NUM', 'origenNumero', self::META_VARCHAR);		
		self::addPropiedadBD('a', 'ENT_CP', 'origenCP', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ENT_POB', 'origenPoblacion', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LLAMADA_CONFIRMA', 'LLAMADA_CONFIRMA', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LLAMADA_ENLUGAR', 'LLAMADA_ENLUGAR', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LLAMADA_ENCOCHE', 'LLAMADA_ENCOCHE', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LLAMADA_FINALIZADO', 'LLAMADA_FINALIZADO', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LLAMADA_SGARAJE', 'LLAMADA_SGARAJE', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LLAMADA_LGARAJE', 'LLAMADA_LGARAJE', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ESTADO_SERVICIO', 'ESTADO_SERVICIO', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LUDEVO_CON1', 'destinoLugar', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ENT_CALLER', 'destinoCalle', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ENT_NUMR', 'destinoNumero', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ENT_CPR', 'destinoCP', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ENT_POBR', 'destinoPoblacion', self::META_VARCHAR);
		self::addPropiedadBD('a', 'HORA_CEREMONIA', 'horaCeremonia', self::META_TIME);
		self::addPropiedadBD('a', 'TARIFA_CON1','tarifa',self::META_VARCHAR);
		self::addPropiedadBD('a', 'FSALIDA_CON1', 'fechaServicioInicio', self::META_DATE);
		self::addPropiedadBD('a', 'HSALIDA_CON1','horaServicioInicio', self::META_TIME);
		self::addPropiedadBD('a', 'FPREV_CON1','fechaServicioFin', self::META_DATE);
		self::addPropiedadBD('a', 'HPREV_CON1','horaServicioFin', self::META_TIME);
		self::addPropiedadBD('a', 'FSAL_GARAJE_CON1', 'fechaParkingSalida',self::META_DATE);
		self::addPropiedadBD('a', 'FRET_GARAJE_CON1', 'fechaParkingEntrada',self::META_DATE);
		self::addPropiedadBD('a', 'HSAL_PARKING','horaParkingSalida', self::META_TIME);
		self::addPropiedadBD('a', 'HLLE_PARKING','horaParkingEntrada', self::META_TIME);
		self::addPropiedadBD('a', 'REFERE_CON1', 'referencia', self::META_VARCHAR);
		self::addPropiedadBD('a', 'persona_con1',	'personaContacto', self::META_VARCHAR);
		self::addPropiedadBD('a', 'TELFPERS_CON1', 'personaTelefono', self::META_VARCHAR);
		self::addPropiedadBD('a', 'NO_PENDHRUTA', 'permisoNoMostrarPendienteCobroEnHojaRuta', self::META_INT);
		self::addPropiedadBD('a', 'H_REAL_SALIDA_CON1', 'horaServicioRealSalida', self::META_TIME);
		self::addPropiedadBD('a', 'ARCHIVO_RUTA', 'archivoRuta', self::META_VARCHAR);
		self::addPropiedadBD('a', 'KMS_RUTA', 'kmsRuta', self::META_VARCHAR);
		self::addPropiedadBD('a', 'TIEMPO_RUTA', 'tiempoRuta', self::META_VARCHAR);
		self::addPropiedadBD('a', 'NPERSONAS_CON1', 'numeroPersonasViaje', self::META_INT);
		self::addPropiedadBD('a', 'CHOFER_CON1', 'codigoChofer', self::META_VARCHAR);
		
		self::addPropiedadBD('a', 'COORDGPS_SAL', 'gpsOrigen', self::META_VARCHAR);
		self::addPropiedadBD('a', 'COORDGPS_RET', 'gpsDestino', self::META_VARCHAR);
		self::addPropiedadBD('a', 'FSAL_FRA_CON1', 'fechaSalidaDeFrancia', self::META_DATE);
		self::addPropiedadBD('a', 'HSAL_FRA_CON1', 'horaSalidaDeFrancia', self::META_TIME);
		self::addPropiedadBD('a', 'FSAL_ESP_CON1', 'fechaSalidaDeEspana', self::META_DATE);
		self::addPropiedadBD('a', 'HSAL_ESP_CON1', 'horaSalidaDeEspana', self::META_TIME);
		self::addPropiedadBD('a', 'GASTOS_ENEFECTIVO', 'gastosEnEfectivo', self::META_DECIMAL);		
		self::addPropiedadBD('a', 'OBS_GASTOS_ENEFECTIVO', 'gastosEnEfectivoObservaciones', self::META_VARCHAR);
		self::addPropiedadBD('a', 'PRESUPUESTO_CON1', 'presupuesto', self::META_VARCHAR);
		self::addPropiedadBD('a', 'ULTFRANUM_CON1', 'factura', self::META_VARCHAR);
		self::addPropiedadBD('a', 'RESERVA_CON1', 'reserva', self::META_VARCHAR);
		self::addPropiedadBD('a', 'LOCALIZADOR_CON1', 'localizador', self::META_VARCHAR);
		
		self::addPropiedadBD('NTARI', 'NOMBRE', 'tipoServicio', self::META_VARCHAR);
		
		self::addPropiedadBD('VEHICULO1', 'MARCA', 'vehiculoMarca', self::META_VARCHAR);
		self::addPropiedadBD('VEHICULO1', 'MODELO', 'vehiculoModelo', self::META_VARCHAR);
		self::addPropiedadBD('VEHICULO1', 'MATRICULA', 'vehiculoMatricula', self::META_VARCHAR);
		self::addPropiedadBD('VEHICULO1', 'GRUPO', 'vehiculoGrupo', self::META_VARCHAR);
		self::addPropiedadBD('VEHICULO1', 'PROPIE', 'propietarioCoche', self::META_VARCHAR);
		self::addPropiedadBD('VEHICULO1', 'AGENTE_VEHI', 'agenteCoche', self::META_VARCHAR);
		self::addPropiedadBD('VEHICULO1', 'NUMPLAZAS', 'numeroPersonas', self::META_INT);
		
		self::addPropiedadBD('CONTRATOS4', 'kmclisal_con4', 'kilometrosVehiculoSalida', self::META_DECIMAL);
		self::addPropiedadBD('CONTRATOS4', 'kmclille_con4', 'kilometrosVehiculoLlegada', self::META_DECIMAL);
		
		self::addPropiedadBD('VEHI_CONT', 'km', 'kilometrosParkingSalida', self::META_DECIMAL);
		self::addPropiedadBD('VEHI_CONT', 'km_ll', 'kilometrosParkingLlegada', self::META_DECIMAL);
		
		self::addPropiedadBD('CLIENTES1', 'nombre', 'clienteNombre', self::META_VARCHAR);
		self::addPropiedadBD('CLIENTES1', 'MOVIL', 'clienteTelefono', self::META_VARCHAR);
		
		self::addPropiedadBD('CONTRATOS2', 'BASEI_CON2', 'baseImponible', self::META_DECIMAL);
		self::addPropiedadBD('CONTRATOS2', 'iva_con2', 'ivaTotal', self::META_DECIMAL);
		self::addPropiedadBD('CONTRATOS2', 'TOLON_CON2', 'totalConIva', self::META_DECIMAL);
		self::addPropiedadBD('CONTRATOS2', 'COMICLAVE_CON2', 'comercial', self::META_VARCHAR);
		self::addPropiedadBD('CONTRATOS2', 'COMISIO_CON2', 'comisionista', self::META_VARCHAR);
		self::addPropiedadBD('CONTRATOS2', 'COMISIO2_CON2', 'subcomisionista', self::META_VARCHAR);
		self::addPropiedadBD('CONTRATOS2', 'OBS1_CON2', 'observaciones', self::META_VARCHAR);
		
		self::addPropiedadBD('LICON', 'CANTIDAD', 'cantidadParking', self::META_DECIMAL);
		self::addPropiedadBD('LICON', 'PRECIO', 'precioParking', self::META_DECIMAL);

		self::addPropiedadBD('COBROS', 'depo', 'cobrospagados', self::META_DECIMAL);
		
		self::addTablaRelacionJoin(self::JOIN_INNER,'POTENCIALES', 'POTENCIALES', 'CLIENTE', 'CLIENTES1','NUMERO_CLI');
		self::addPropiedadBD('POTENCIALES', 'NOMCOMER', 'nombreComercial', self::META_VARCHAR);

		self::addPropiedadBD('CHOFER', 'NOM_CHOF','choferNombre', self::META_VARCHAR);
		
		self::addPropiedad('resultadoParking','resultadoParking');
		self::addPropiedad('kilometrosServicio', 'kilometrosServicio');
		self::addPropiedad('kilometrosParking', 'kilometrosParking');
		self::addPropiedad('enlace_clave', 'enlace_clave');
		self::addPropiedad('tiempoEspera', 'tiempoEspera');
		
		
	}
	
	public function lst_activos($params){
		$comercial = Usuario::getPotencialLogueado();
		
		$select = self::selectObjeto();
		// Servicios cuyo comiclave es el comercial
		$select->where("CONTRATOS2.comiclave_con2=?",$comercial->getCodigoComisionista());
		// Servicios cuyo codigo empieza por 00 codigo de la empresa
		$select->where("a.numero like ?",Constantes::NUMERO_EMPRESA.'%');
		// Servicios hecho con chófer
		$select->where("a.fretor_con1 is null");
		// Servicios anulados
		$select->where("CONTRATOS2.FEANU_CON2 IS NULL");
		
		$select->order(array("a.FSALIDA_CON1 desc","a.HSALIDA_CON1"));
		$res = self::selectExecute($select,$params);
		$datos = $res->getDatos();
		foreach ($datos as $key => $value){
			$datos[$key]['horaServicioInicio'] = substr($value['horaServicioInicio'], 0, 5);
			$datos[$key]['nombre_estado'] = self::getEstado($value);
		}
		$res->setDatos($datos);
		
		return $res;
	}
	
	public function getFactura() {
	    return $this->factura;
	}
	public function setFactura($factura) {
	    $this->factura = $factura;
	}
	
	public function getCodigoChofer() {
	    return $this->codigoChofer;
	}
	public function setCodigoChofer($codigoChofer) {
	    $this->codigoChofer = $codigoChofer;
	}
	
	public function getPresupuesto() {
	    return $this->presupuesto;
	}
	public function setPresupuesto($presupuesto) {
	    $this->presupuesto = $presupuesto;
	}
	
	public function getReserva() {
	    return $this->reserva;
	}
	public function setReserva($reserva) {
	    $this->reserva = $reserva;
	}
	
	public function getLocalizador() {
	    return $this->localizador;
	}
	public function setLocalizador($localizador) {
	    $this->localizador = $localizador;
	}
	
	public function getEmpresa() {
	    return $this->empresa;
	}
	public function setEmpresa($empresa) {
	    $this->empresa = $empresa;
	}
	 
	public function getCodigoCliente() {
	    return $this->codigoCliente;
	}
	public function setCodigoCliente($codigoCliente) {
	    $this->codigoCliente = $codigoCliente;
	}
	public function getComisionista() {
	    return $this->comisionista;
	}
	public function setComisionista($comisionista) {
	    $this->comisionista = $comisionista;
	}
	
	public function getSubcomisionista() {
	    return $this->subcomisionista;
	}
	
	public function setSubcomisionista($subcomisionista) {
	    $this->subcomisionista = $subcomisionista;
	}
	
	public function getOrigenCalle() {
	    return $this->origenCalle;
	}
	public function setOrigenCalle($origenCalle) {
	    $this->origenCalle = $origenCalle;
	}
	public function getKilometrosVehiculoSalida() {
	    return $this->kilometrosVehiculoSalida;
	}
	public function setKilometrosVehiculoSalida($kilometrosVehiculoSalida) {
	    $this->kilometrosVehiculoSalida = $kilometrosVehiculoSalida;
	}
	public function getFechaServicioFin() {
	    return $this->fechaServicioFin;
	}
	public function setFechaServicioFin($fechaServicioFin) {
	    $this->fechaServicioFin = $fechaServicioFin;
	}
	
	public function getPermisoNoMostrarPendienteCobroEnHojaRuta(){
		return $this->permisoNoMostrarPendienteCobroEnHojaRuta;
	}
	
	public function getFechaSalidaDeFrancia(){
		return $this->fechaSalidaDeFrancia;
	}
	
	public function getHoraSalidaDeFrancia(){
		return $this->horaSalidaDeFrancia;
	}
	public function getFechaSalidaDeEspana(){
		return $this->fechaSalidaDeEspana;
	}
	public function getHoraSalidaDeEspana(){
		return $this->horaSalidaDeEspana;
	}
	
	public function getGastosEnEfectivoObservaciones() {
	    return $this->gastosEnEfectivoObservaciones;
	}
	public function setGastosEnEfectivoObservaciones($gastosEnEfectivoObservaciones) {
	    $this->gastosEnEfectivoObservaciones = $gastosEnEfectivoObservaciones;
	}
	
	
	
	public function getCobrosPendientes(){
		$total = $this->totalConIva;
		if (!is_numeric($total)) $total = 0;
		$pagado = $this->cobrospagados;
		if (!is_numeric($pagado)) $pagado = 0;
		$pendiente = $total - $pagado;
		return $pendiente;
	}
	
	public static function esSqlServer(){
		return false;
	}
	
	
	public function __construct($id = null) {
		
		parent::__construct($id);
		if ($id) {
			$linea = ServicioLinea::getLineaConKmyHoras($id);
			if (count($linea)>0) {
				if (isset($linea[0]['horas']))
					$this->limiteHoras = $linea[0]['horas'];
				if (isset($linea[0]['km'])) 
					$this->limiteKilometros = $linea[0]['km'];
			}
		}
	
	}
	
	public function addCobro($importe, $codigoAutorizacion){
		$sql = "execute spCobroCon @CONTRATO='".$this->numeroServicio."', @IMPORTE='".$importe."', @TARTI =null, @TARNUM = NULL,@TARNOM = NULL, @TARCADU = NULL, @CODAUTO =".$codigoAutorizacion;
		try{
			$db = self::getDb();
			$adapter = $db->getAdapter();
			$adapter->query($sql);
		} catch (Exception $e){
			echo $e->getMessage();
		}
	}
	
	public function loadCobros(){
		return Cobro::loadPorContrato($this->numeroServicio);
	}
	
	public function loadCobrosViaje(){
		return CobroViaje::loadCobrosFranciaPorContrato($this->numeroServicio);
	}
	
	public function calcularCierreFiscal(){
		$this->insertaKmExtraFiscal();
		$this->insertarHorasEsperaFiscal();
		$this->recalcularPrecio();
	}

	public function calcularCierreViaje($horas) {
		$this->insertarHorasEspera($horas);
		$this->recalcularPrecio();
	}
	
	public function calcularCierre($fechaFin, $horaFin, $kmServicioLlegada, $horas = 0){
		$this->kilometrosVehiculoLlegada = $kmServicioLlegada;
		$this->fechaServicioFin = $fechaFin;
		$this->horaServicioFin = $horaFin;
		$this->insertaKmExtra($kmServicioLlegada);
		$this->insertarHorasExtra($fechaFin, $horaFin);
		$this->insertarHorasEspera($horas);
		$this->recalcularPrecio();		
	}

	private function insertaKmExtraFiscal(){
		// El concepto de servicio debe estar creado
		$linea = new ServicioLinea($this->numeroServicio, self::CON_LIN_EXTRA_KMS_FISCAL);
		//$this->limiteKilometros=0;
		if ($linea->id > 0){
			if ($this->limiteKilometros === 0 || $this->limiteKilometros > 0){
				if ($this->tarifa == self::TARIFA_SERVICIO_MENSUAL_FISCAL) {
					$kilometrosServicioParking = $this->kilometrosParkingLlegada - $this->kilometrosParkingSalida;
					$kmExtra = $kilometrosServicioParking - $this->limiteKilometros;
				} else {
					$kilometrosCliente = $this->kilometrosVehiculoLlegada - $this->kilometrosVehiculoSalida;
					$kmExtra = $kilometrosCliente - $this->limiteKilometros;
				}
				if ($linea->id>0 && $kmExtra > 0){
					$linea->grupo = $this->vehiculoGrupo;
					$linea->tarifa = $this->tarifa;
					$linea->asignarCantidad($kmExtra);
					$linea->save();
				} elseif ($linea->id>0) {
					$linea->grupo = $this->vehiculoGrupo;
					$linea->tarifa = $this->tarifa;
					$linea->asignarCantidad(0);
					$linea->save();
				}
			}
		}
	}
	
	private function insertarHorasEsperaFiscal(){
		// El concepto de servicio debe estar creado

		$linea = new ServicioLinea($this->numeroServicio, self::CON_LIN_EXTRA_HORAS_ESPERA_FISCAL);
		$fechaFin = $this->fechaParkingEntrada;
		if ($this->horaParkingEntrada > $this->horaServicioFin)
			$horaFin = $this->horaParkingEntrada;
		else 
			$horaFin = $this->horaServicioFin;
		$fechaInicio = $this->fechaParkingSalida;
		$horaInicio = $this->horaParkingSalida;
		if ($this->horaServicioRealSalida < $this->horaParkingSalida)
			$horaInicio = $this->horaServicioRealSalida;
		else
			$horaInicio = $this->horaParkingSalida;

		if ($linea->id > 0) {
			if ($this->limiteHoras === 0 || $this->limiteHoras > 0) {
				$minutosCortesia = 15;
				$fechaFinMysql = AppHerramienta::fechaHumanaAMysql($fechaFin);
				$ff = strtotime($fechaFinMysql.' '.$horaFin);
				$fechaIniMysql = AppHerramienta::fechaHumanaAMysql($fechaInicio);
				$fs = strtotime($fechaIniMysql.' '.$horaInicio);
				$fs1 = $fs;
				$diferencia_ensegundos = $ff - $fs;

				$horas = floor( $diferencia_ensegundos / (60*60) );
 
				$minutos = ($diferencia_ensegundos - (60*60*$horas))/60;
				if ($minutos>$minutosCortesia)
					$horas +=1;
				$horasExtras = $horas - $this->limiteHoras;				
				if ($horasExtras>0){
					$linea->asignarCantidad($horasExtras);
					$linea->save();
				} else {
					$linea->asignarCantidad(0);
					$linea->save();
				}
			}
		}
	
	}

	public function insertarHorasEspera($horas){
		// El concepto de servicio debe estar creado

		$linea = new ServicioLinea($this->numeroServicio, self::CON_LIN_EXTRA_HORAS_ESPERA_FISCAL);
		if ($linea->id > 0) {
			$linea->asignarCantidad($horas);
			$linea->save();
		}
	
	}

	
	private function insertaKmExtra($kmServicioLlegada){
		// El concepto de servicio debe estar creado
		$linea = new ServicioLinea($this->numeroServicio, self::CON_LIN_EXTRA_KMS);	
		//$this->limiteKilometros=0;
		if ($linea->id > 0){
			if ($this->limiteKilometros === 0 || $this->limiteKilometros > 0){
				$this->kilometrosVehiculoLlegada = $kmServicioLlegada;
				$this->kilometrosServicio = $this->kilometrosVehiculoLlegada - $this->kilometrosVehiculoSalida;
				$kmExtra = $this->kilometrosServicio - $this->limiteKilometros;
				if ($linea->id>0 && $kmExtra > 0){
					$linea->grupo = $this->vehiculoGrupo;
					$linea->tarifa = $this->tarifa;
					$linea->asignarCantidad($kmExtra);
					$linea->save();
				} elseif ($linea->id>0) {
					$linea->grupo = $this->vehiculoGrupo;
					$linea->tarifa = $this->tarifa;
					$linea->asignarCantidad(0);
					$linea->save();
				}
			}
		}
	}
	
	private function insertarHorasExtra($fechaFin, $horaFin){
		// El concepto de servicio debe estar creado
		$linea = new ServicioLinea($this->numeroServicio, self::CON_LIN_EXTRA_HORAS);		
		if ($linea->id > 0) {
			if ($this->limiteHoras === 0 || $this->limiteHoras > 0) {
				$minutosCortesia = 15;
				$fechaFinMysql = AppHerramienta::fechaHumanaAMysql($fechaFin);
				$ff = strtotime($fechaFinMysql.' '.$horaFin);
				$fs = strtotime(AppHerramienta::fechaHumanaAMysql($this->fechaServicioInicio).' '.$this->horaServicioInicio);
				$fs = $fs + ($this->limiteHoras*60*60);			
				$diferencia_ensegundos = $ff - $fs;
				$horas = floor( $diferencia_ensegundos / (60*60) );
				$minutos = ($diferencia_ensegundos - (60*60*$horas))/60;
				if ($minutos>$minutosCortesia) 
					$horas +=1;
				if ($horas>0){
					$this->fechaServicioFin = $fechaFin;
					$this->horaServicioFin = $horaFin;
					$linea->grupo = $this->vehiculoGrupo;
					$linea->tarifa = $this->tarifa;
					$linea->asignarCantidad($horas);
					$linea->save();
				} else {
					$this->fechaServicioFin = date('d/m/Y',$fs);
					$this->horaServicioFin = date('H:i:j',$fs);
					$linea = new ServicioLinea($this->numeroServicio, self::CON_LIN_EXTRA_HORAS);
					$linea->grupo = $this->vehiculoGrupo;
					$linea->tarifa = $this->tarifa;
					$linea->asignarCantidad(0);
					$linea->save();
				}
			}
		}
		
	}
	
	protected function recalcularPrecio(){
		$lineas = $this->getLineas()->getDatos();
		$baseImponible = 0;
		$iva = 0;
		foreach ($lineas as $reg) {
			$baseImponible += $reg['subtotal'];
			$iva += $reg['subtotal']*($reg['iva']/100);
		}
		
		$subtotal = $baseImponible + $iva;
		$this->baseImponible = $baseImponible;
		$this->ivaTotal = $iva;
		$this->totalConIva = $subtotal;		
	} 
	
	
	public static function lst_mitrabajo($parametros) {
		
		//$select = self::selectObjeto();
		//die('iiii');

		
		/*		"a"."SUBLICEN_CON1" AS "empresa", "a"."vcact_con1" AS "codigoVehiculo", 
		"a"."NOTAS_CON1" AS "itinerario", "a"."CLIENTE_CON1" AS "codigoCliente",  "a"."ENT_CP" AS "origenCP",   "a"."ESTADO_SERVICIO",
		  "a"."ENT_CPR" AS "destinoCP", "a"."HORA_CEREMONIA" AS "horaCeremonia", 
		  "a"."FPREV_CON1" AS "fechaServicioFin", 
		"a"."HPREV_CON1" AS "horaServicioFin", "a"."FSAL_GARAJE_CON1" AS "fechaParkingSalida", "a"."FRET_GARAJE_CON1" AS "fechaParkingEntrada", "a"."HSAL_PARKING" AS "horaParkingSalida", 
		"a"."HLLE_PARKING" AS "horaParkingEntrada", "a"."REFERE_CON1" AS "referencia", "a"."persona_con1" AS "personaContacto", "a"."TELFPERS_CON1" AS "personaTelefono", 
		"a"."NO_PENDHRUTA" AS "permisoNoMostrarPendienteCobroEnHojaRuta", "a"."H_REAL_SALIDA_CON1" AS "horaServicioRealSalida", "a"."ARCHIVO_RUTA" AS "archivoRuta", "a"."KMS_RUTA" AS "kmsRuta", 
		"a"."TIEMPO_RUTA" AS "tiempoRuta", "a"."NPERSONAS_CON1" AS "numeroPersonasViaje", "a"."CHOFER_CON1" AS "codigoChofer", "a"."COORDGPS_SAL" AS "gpsOrigen", "a"."COORDGPS_RET" AS "gpsDestino", 
		  "a"."FSAL_ESP_CON1" AS "fechaSalidaDeEspana", "a"."HSAL_ESP_CON1" AS "horaSalidaDeEspana", 
		"a"."GASTOS_ENEFECTIVO" AS "gastosEnEfectivo", "a"."OBS_GASTOS_ENEFECTIVO" AS "gastosEnEfectivoObservaciones", "a"."PRESUPUESTO_CON1" AS "presupuesto", "a"."ULTFRANUM_CON1" AS "factura", 
		"a"."RESERVA_CON1" AS "reserva", "a"."LOCALIZADOR_CON1" AS "localizador", ifnull(LICON.CANTIDAD, '', LICON.CANTIDAD) AS "cantidadParking", ifnull(LICON.PRECIO, '', LICON.PRECIO) AS "precioParking", 
		ifnull(COBROS.depo, '', COBROS.depo) AS "cobrospagados", ifnull(CONTRATOS4.kmclisal_con4, '', CONTRATOS4.kmclisal_con4) AS "kilometrosVehiculoSalida", 
		ifnull(CONTRATOS4.kmclille_con4, '', CONTRATOS4.kmclille_con4) AS "kilometrosVehiculoLlegada", ifnull(CONTRATOS2.BASEI_CON2, '', CONTRATOS2.BASEI_CON2) AS "baseImponible", 
		fnull(CONTRATOS2.iva_con2, '', CONTRATOS2.iva_con2) AS "ivaTotal", ifnull(CONTRATOS2.TOLON_CON2, '', CONTRATOS2.TOLON_CON2) AS "totalConIva", 
		ifnull(CONTRATOS2.COMICLAVE_CON2, '', CONTRATOS2.COMICLAVE_CON2) AS "comercial", ifnull(CONTRATOS2.COMISIO_CON2, '', CONTRATOS2.COMISIO_CON2) AS "comisionista", 
		ifnull(CONTRATOS2.COMISIO2_CON2, '', CONTRATOS2.COMISIO2_CON2) AS "subcomisionista", ifnull(CONTRATOS2.OBS1_CON2, '', CONTRATOS2.OBS1_CON2) AS "observaciones", 
		 ifnull(VEHICULO1.MARCA, '', VEHICULO1.MARCA) AS "vehiculoMarca", ifnull(VEHICULO1.MODELO, '', VEHICULO1.MODELO) AS "vehiculoModelo", 
		ifnull(VEHICULO1.MATRICULA, '', VEHICULO1.MATRICULA) AS "vehiculoMatricula", ifnull(VEHICULO1.GRUPO, '', VEHICULO1.GRUPO) AS "vehiculoGrupo", ifnull(VEHICULO1.PROPIE, '', VEHICULO1.PROPIE) AS "propietarioCoche", 
		ifnull(VEHICULO1.AGENTE_VEHI, '', VEHICULO1.AGENTE_VEHI) AS "agenteCoche", ifnull(VEHICULO1.NUMPLAZAS, '', ifnull(VEHI_CONT.km, '', VEHI_CONT.km) AS "kilometrosParkingSalida", 
		ifnull(VEHI_CONT.km_ll, '', VEHI_CONT.km_ll) AS "kilometrosParkingLlegada", ifnull(CLIENTES1.nombre, '',  ifnull(CLIENTES1.MOVIL, '', CLIENTES1.MOVIL) AS "clienteTelefono", 
		ifnull(POTENCIALES.NOMCOMER, '', POTENCIALES.NOMCOMER) AS "nombreComercial" FROM "CONTRATOS1" AS "a"  */
		

		/*$selectJML = 'SELECT CLIENTES1.nombre) AS "clienteNombre",
		ifnull(CHOFER.NOM_CHOF, \'\', CHOFER.NOM_CHOF) AS "choferNombre",
		"a"."TARIFA_CON1" AS "tarifa","a"."FSALIDA_CON1" AS "fechaServicioInicio", "a"."HSALIDA_CON1" AS "horaServicioInicio",
		"a"."LLAMADA_CONFIRMA", "a"."LLAMADA_ENLUGAR", 
		"a"."LLAMADA_ENCOCHE", "a"."LLAMADA_FINALIZADO", "a"."LLAMADA_SGARAJE", "a"."LLAMADA_LGARAJE",
		"a"."LUENTRE_CON1" AS "origenLugar", "a"."ENT_POB" AS "origenPoblacion", "a"."ENT_CALLE" AS "origenCalle", "a"."ENT_NUM" AS "origenNumero",
		"a"."LUDEVO_CON1" AS "destinoLugar",  "a"."ENT_POBR" AS "destinoPoblacion", "a"."ENT_CALLER" AS "destinoCalle", "a"."ENT_NUMR" AS "destinoNumero",
		ifnull(NTARI.NOMBRE, \'\', NTARI.NOMBRE) AS "tipoServicio", VEHICULO1.NUMPLAZAS) AS "numeroPersonas",
		"a"."FSAL_FRA_CON1" AS "fechaSalidaDeFrancia", "a"."HSAL_FRA_CON1" AS "horaSalidaDeFrancia",
		"a"."NUMERO" AS "numeroServicio"
		LEFT JOIN "LICON" ON LICON.NUMERO=a.NUMERO AND LICON.incluido=-1 AND LICON.concepto=24 LEFT JOIN "visRptContraPlus" AS "COBROS" ON COBROS.NUMERO=a.NUMERO 
		LEFT JOIN "CHOFERES" AS "CHOFER" ON CHOFER.COD_CHOF=a.CHOFER_CON1 
		LEFT JOIN "CONTRATOS4" ON CONTRATOS4.NUMERO=a.NUMERO 
		LEFT JOIN "CONTRATOS2" ON CONTRATOS2.NUMERO=a.NUMERO 
		LEFT JOIN "NTARI" ON NTARI.CODIGO=a.TARIFA_CON1 
		LEFT JOIN "VEHICULO1" ON VEHICULO1.CODIINT=a.vcact_con1 
		LEFT JOIN "VEHI_CONT" ON VEHI_CONT.CONTRATO=a.NUMERO 
		LEFT JOIN "CLIENTES1" ON CLIENTES1.NUMERO_CLI=a.CLIENTE_CON1 
		INNER JOIN POTENCIALES ON POTENCIALES.CLIENTE=CLIENTES1.NUMERO_CLI ';*/

		$select = self::selectObjeto();
		
		switch ($parametros['filtro']){
			case 'fra':
				if (($parametros['esUsuarioKarve']) || ( $parametros['potencial']==POTENCIAL_AQUILINO)){
					$titulo = 'Trabajos Francia';
					$select->where("a.TARIFA_CON1 = 'SCONDUCTOR' or a.TARIFA_CON1='TARIFRANC'");
				} else {
					$titulo = 'Mis Trabajos';
					$select->where("a.CHOFER_CON1 = ?",$parametros['chofer']);
				}
				break;
			case 'tds':
				if (($parametros['esUsuarioKarve'])){				
					$titulo = 'Todos los trabajos';
				} else {
					$titulo = 'Mis Trabajos';
					$select->where("a.CHOFER_CON1 = ?",$parametros['chofer']);
				}
				break;
			default:
				$titulo = 'Mis Trabajos';
				$select->where("a.CHOFER_CON1 = ?",$parametros['chofer']);
				break;
		}
		
		/*
		if ($parametros['esUsuarioKarve']){
			if ($parametros['potencial']==POTENCIAL_AQUILINO){
				$select->where("a.TARIFA_CON1 = 'SCONDUCTOR' or a.TARIFA_CON1='TARIFRANC'");
			} else {
				//$select->where("a.CHOFER_CON1 = ?",$parametros['chofer']);
				if ($parametros['filtro']=='fra'){
					$select->where("a.TARIFA_CON1 = 'SCONDUCTOR' or a.TARIFA_CON1='TARIFRANC'");
				} else {
					$select->where("a.TARIFA_CON1 <> 'SCONDUCTOR' and a.TARIFA_CON1<>'TARIFRANC'");
				}
				
			} 			
		}else {
			if(isset($parametros['chofer']) && $parametros['chofer'])
				$select->where("a.CHOFER_CON1 = ?",$parametros['chofer']);
			else 
				$select->where('1=0');
		}
		*/
		$select->where("a.fretor_con1 is null"); // NO REALIZADO "a.hechoconchofer_con1 is  null or a.hechoconchofer_con1 = 0"
		$usuario = Usuario::UsuarioLoqueado();
		$select->where("a.sublicen_con1 = '".$usuario->EMPRESA."'");
		$select->where("a.esconchofer_con1=1");
		$select->where("a.usuanula_con1 is  null");
		$select->where("CONTRATOS2.feanu_con2 is  null");
		$select->order(array("a.FSALIDA_CON1 asc", "a.HSALIDA_CON1 asc"));
		//$select->reset(Zend_Db_Select::COLUMNS);
		//$select->columns(array('numeroServicio'=>'a.NUMERO'));

		//echo $select;
		//die('selectServicio');
		//$t1 = microtime(true);
		
		$resultado = self::selectExecute($select,$parametros);
		$datos = $resultado->getDatos();

		//print_r($datos);
		$numeroDeServicios = [];
		foreach ($datos as $value) {
			$numeroDeServicios[] = $value['numeroServicio'];
		}
		$fechasFrancia = [];
		$plazasDisponibles = [];
		if ($numeroDeServicios) {
			$fechasFrancia = self::fechasFranciaserviciosPR($numeroDeServicios);
			$plazasDisponibles = self::plazasDisponibles($numeroDeServicios);	
		}
		//print_r($plazasDisponibles);
		foreach ($datos as $key => $value){
			$datos[$key]['clienteNombre'] = utf8_encode($value['clienteNombre']);
			$datos[$key]['choferNombre'] = utf8_encode($value['choferNombre']);
			
			//$datos[$key]['fechaFormada'] = $value['numeroServicio'].'<br/>'.$value['fechaServicioInicio'].'<br/>'.substr($value['horaServicioInicio'], 0, 5);
			if($datos[$key]['tarifa'] == 'TARIFRANC' || $datos[$key]['tarifa'] == 'SCONDUCTOR' || $datos[$key]['tarifa'] == 'TARISUREST'){
				$datos[$key]['fechaServicioInicio'] = $value['fechaSalidaDeEspana'];
				$datos[$key]['horaServicioInicio'] = substr($value['horaSalidaDeEspana'], 0, 5);
			} else {
				$datos[$key]['fechaServicioInicio'] = $value['fechaServicioInicio'];				
				$datos[$key]['horaServicioInicio'] = substr($value['horaServicioInicio'], 0, 5);
			}
			$datos[$key]['nombre_estado'] = self::getEstado($value); 
						
			$origen = $value['origenLugar'];
			if (!$origen)
				$origen = $value['origenPoblacion'].' '.$value['origenCalle'].' '.$value['origenNumero'];
			if ($origen) $origen = substr($origen,0,20);
			$datos[$key]['origen'] = utf8_encode($origen);
			
			
			$destino = is_null($value['destinoLugar'])?'':$value['destinoLugar'];
			if (!$destino)
				$destino = $value['destinoPoblacion'].' '.$value['destinoCalle'].' '.$value['destinoNumero'];
			if ($destino) $destino = substr($destino,0,20);
			$datos[$key]['destino'] = utf8_encode($destino);
						
			$datos[$key]['tipoServicio'] = substr($datos[$key]['tipoServicio'], 0,25);
			
			$datos[$key]['numeroPlazas'] = $value['numeroPersonas'];
			
			if (strlen($datos[$key]['fechaSalidaDeFrancia'])>0 && ( ($datos[$key]['tarifa'] == 'TARIFRANC' || $datos[$key]['tarifa'] == 'SCONDUCTOR' || $datos[$key]['tarifa'] == 'TARISUREST'))){
				$datos[$key]['fechaSalidaDeFrancia'] = '<br><b>'.$datos[$key]['fechaSalidaDeFrancia'].' '.substr($datos[$key]['horaSalidaDeFrancia'],0,5).'</b> (FRA a ESP) ';
			} else {
				$datos[$key]['fechaSalidaDeFrancia'] = '';
			}
					
			// Calcular plazas disponibles
			$disponibilidad = '';
			
			if($datos[$key]['tarifa'] == 'TARIFRANC' || $datos[$key]['tarifa'] == 'SCONDUCTOR' || $datos[$key]['tarifa'] == 'TARISUREST'){
				if($datos[$key]['tarifa'] == 'TARISUREST'){
					$tituloIda = 'Ida';
					$tituloVuelta = 'Vuelta';
				} else {
					$tituloIda = 'Espana';
					$tituloVuelta = 'Francia';
				}
				$disponibilidad .= sprintf("%s: <b><span style='font-size:1.2em'>%d</span></b>", $tituloIda, $plazasDisponibles[$value['numeroServicio']][0]);				
				$disponibilidad .= sprintf("&nbsp;&nbsp;&nbsp;%s <b><span style='font-size:1.2em'>%d</span></b>",$tituloVuelta, $plazasDisponibles[$value['numeroServicio']][1]);
				if (strlen($fechasFrancia[$value['numeroServicio']]['fechaSalidaDeFrancia'])>0){
					$datos[$key]['fechaSalidaDeFrancia'] .= '<br><b>'.$fechasFrancia[$value['numeroServicio']]['fechaSalidaDeFrancia'].' '.substr($fechasFrancia[$value['numeroServicio']]['horaSalidaDeFrancia'],0,5).'</b> (FRA a ESP) ';

				}
				if ($fechasFrancia[$value['numeroServicio']]['fechaSalidaDeEspana']){
					$datos[$key]['fechaServicioInicio'] = $fechasFrancia[$value['numeroServicio']]['fechaSalidaDeEspana'];
					$datos[$key]['horaServicioInicio'] = substr($fechasFrancia[$value['numeroServicio']]['horaSalidaDeEspana'],0,5);
				}
			}
			$datos[$key]['disponibilidad'] = $disponibilidad;
			
			$datos[$key]['enlace_clave'] = str_replace('/', '', $datos[$key]['fechaServicioInicio']);			
		}
		//$t2 = microtime(true);
		//echo 'DD: ' . ($t2 - $t1);
		//die('lst_mitrabajo');		

		$resultado->setDatos($datos);
		return $resultado;		
	}
	
	/*public function save(){
		parent::save();
		//$this->saveParcking();
	}
	*/
	public function load($id){
		
		
		
		parent::load($id);
		if($this->id){
			
			$this->kilometrosServicio = round($this->kilometrosVehiculoLlegada - $this->kilometrosVehiculoSalida,2);
			$this->kilometrosParking = round($this->kilometrosParkingLlegada - $this->kilometrosParkingSalida,2);
			
			$this->nombreVehiculo = $this->codigoVehiculo.' '.$this->vehiculoMarca.' '.$this->vehiculoModelo;
			$this->fecha_hora_inicio = $this->fechaServicioInicio.' '. $this->horaServicioInicio;
			$this->direccion_origen = $this->origenCalle. ' '.$this->origenNumero.', '.$this->origenCP .', '. $this->origenPoblacion;
			
	//		$parking = ServicioLinea::getParkingByServicio($this->id);

			$this->kilometrosParkingSalida = round($this->kilometrosParkingSalida,2);
			$this->kilometrosParkingLlegada = round($this->kilometrosParkingLlegada,2);
			$this->kilometrosVehiculoSalida = round($this->kilometrosVehiculoSalida,2);
			$this->kilometrosVehiculoLlegada = round($this->kilometrosVehiculoLlegada);
			
			$this->cantidadParking = round($this->cantidadParking, 2);
			$this->precioParking = round($this->precioParking, 2);
			$this->resultadoParking = round($this->cantidadParking * $this->precioParking,2);
			$this->direccion_destino = $this->destinoCalle.' '.$this->destinoNumero	.', '.$this->destinoCP .', '.$this->destinoPoblacion;
		}
		
	}
	
	public function saveEncuesta(){
		$sql = sprintf("UPDATE contratos1 SET 
				enc_fecha 			= '%s',
				enc_satisfacion 	= %d,
				enc_desarrollo		= %d,
				enc_puntualidad		= %d,
				enc_quejas			= %d,
				enc_personal		= %d,
				enc_calidadprecio	= %d,
				enc_confiaria		= %d,
				enc_confiaria2		= %d,
				enc_presencia		= %d,
				enc_actitud			= %d,
				enc_informacion		= %d,
				enc_solucion		= %d
				WHERE numero		= '%s' ",
				$this->getEncuestaFecha(),
				$this->getEncuestaSatisfaccion(),
				$this->getEncuestaDesarrollo(),
				$this->getEncuestaPuntualidad(),
				$this->getEncuestaQuejas(),
				$this->getEncuestaPersonal(),
				$this->getEncuestaCalidadPrecio(),
				$this->getEncuestaConfiariaMasServicios(),
				$this->getEncuestaConfiariaEsteServicio(),
				$this->getEncuestaPresencia(),
				$this->getEncuestaActitud(),
				$this->getEncuestaInformacion(),
				$this->getEncuestaSolucion(),
				$this->getNumeroServicio()
				);
		//echo 'encuesta';
	//echo $sql;
		try{
			$db = self::getDb();
			$adapter = $db->getAdapter();
			$adapter->query($sql);
		} catch (Exception $e){
			echo $e->getMessage();
		}
		
	}
	
	public function saveGastosEfectivo($gastos){
		$sql = sprintf("update contratos1 set GASTOS_ENEFECTIVO='%s' where numero='%s'", $gastos, $this->getNumeroServicio());
		//echo $sql;
		//die();
		try{
			$db = self::getDb();
			$adapter = $db->getAdapter();
			$adapter->query($sql);
		} catch (Exception $e){
			echo $e->getMessage();
		}
		
	}

	public function saveGastosEfectivoObservaciones($gastos){
		$sql = sprintf("update contratos1 set OBS_GASTOS_ENEFECTIVO='%s' where numero='%s'", $gastos, $this->getNumeroServicio());
		//echo $sql;
		//die();
		try{
			$db = self::getDb();
			$adapter = $db->getAdapter();
			$adapter->query($sql);
		} catch (Exception $e){
			echo $e->getMessage();
		}
	
	}
	
	public function saveParcking(){
		$parking = ServicioLinea::getParkingByServicio($this->id);
		print_r($parking);
		die();
		
		if($parking instanceof ServicioLinea){
			$parking->cantidad = $this->cantidadParking;
			$parking->precio = $this->precioParking;
			$parking->save();
		} 
	}
	/**
	 * Ver el número de plazas ocupadas
	 * @param int $cuando: -1: todas, 0: ida, 1: vuelta
	 * @return AppResultado
	 */
	public function numeroPlazasOcupadas($cuando){
		$db = self::getDb();
		$select = $db->select();
		$select->setIntegrityCheck(false);
		$select->from('CONTRA_VIAJES',array('numeroPasajeros'=>new Zend_Db_Expr('sum(pax)')));
		$select->where('contrato=?',$this->getNumeroServicio());
		if ($cuando==0)
			$select->where('ida=0');
		elseif ($cuando==1)
			$select->where('ida=1');
		$res = self::selectExecute($select,null, true)->getDatos();
		if ($res[0]['numeroPasajeros']>0)
			return $res[0]['numeroPasajeros'];
		else
			return 0;
	}

	/**
	 * Plazas disponibles
	 */
	public static function plazasDisponibles($numeroDeServicios) {
		// convertir a codigos de PR
		foreach($numeroDeServicios as $key => $value) {
			$numeroDeServicios[$key] = 'PR'.substr($numeroDeServicios[$key], 2);
		}

		$db = self::getDb();
		$select = $db->select();
		$select->setIntegrityCheck(false);
		$select->from('CONTRA_VIAJES', [
			'numeroServicio' => 'contrato',
			'ida' => 'ida',
			'numeroPasajeros'=>new Zend_Db_Expr('sum(pax)')
		]);
		$select->where('contrato in (?)', $numeroDeServicios);
		$select->group(['contrato','ida']);
		$res = self::selectExecute($select)->getDatos();
		$indexedResult = [];
		foreach ($res as $value) {
			$indexedResult['00'.substr($value['numeroServicio'], 2)][$value['ida']] = $value['numeroPasajeros'];
		}
		return $indexedResult;
	}

	/**
	 * Contratos en PR de los servicios que se pasen
	 */
	public static function fechasFranciaServiciosPR($numeroDeServicios) {
		// convertir a codigos de PR
		foreach($numeroDeServicios as $key => $value) {
			$numeroDeServicios[$key] = 'PR'.substr($numeroDeServicios[$key], 2);
		}

		$db = self::getDb();
		$select = $db->select();
		$select->setIntegrityCheck(false);
		$select->from('CONTRATOS1',array(
			'numeroServicio' => 'NUMERO', 
			'fechaSalidaDeFrancia' =>'FSAL_FRA_CON1', 
			'horaSalidaDeFrancia' => 'HSAL_FRA_CON1',
			'fechaSalidaDeEspana' =>'FSAL_ESP_CON1', 
			'horaSalidaDeEspana' => 'HSAL_ESP_CON1'
		));
		$select->where('NUMERO IN (?)',$numeroDeServicios);
		$res = self::selectExecute($select)->getDatos();

		$indexedResult = [];
		foreach ($res as $reg) {
			$indexedResult['00'.substr($reg['numeroServicio'], 2)] = [ 
				'fechaSalidaDeFrancia' => $reg['fechaSalidaDeFrancia'], 
				'horaSalidaDeFrancia' => $reg['horaSalidaDeFrancia'], 
				'fechaSalidaDeEspana' => $reg['fechaSalidaDeEspana'], 
				'horaSalidaDeEspana' => $reg['horaSalidaDeEspana'] 
			];
		}
		return $indexedResult;
	}
	
	public function getLineas(){
		return ServicioLinea::getByServicio($this->numeroServicio);
	} 
	
	public function getEstados(){
		$salida = array();
		foreach (self::$asociado_estado as $key => $value){
			$valor = $this->$value;
			$llamada = new LlamadasEntrantes($valor);
			if($llamada->id)
				$salida[$key]= $llamada;
			
		}
		return $salida;
		
	}
	
	
	public function CambiarEstado($estado){
		
	$usuario = Usuario::UsuarioLoqueado();
	$gps = gps::getUltimaPosicionChofer();
	$ID_TELFENTRADA_LLEN = 32;
	$TELEFONO_ENTRADA_LLEN='APP3';
	$pasados = $this->getEstados();
	
	
	
	if(isset($pasados[$estado])){
		return;
	}
	
	
		switch ($estado) {
			case self::ST_CONFIRMAR:
				
				if($this->LLAMADA_CONFIRMA == null)
					$this->LLAMADA_CONFIRMA = -999;
				$this->ESTADO_SERVICIO = 1;
				
				$ID_TELFENTRADA_LLEN = '32';
				$TELEFONO_ENTRADA_LLEN='APP3';
				break;
			case self::ST_SALIDA_GARAGE:
				$ID_TELFENTRADA_LLEN = '30';
				$TELEFONO_ENTRADA_LLEN='APP1';
				break;
			case self::ST_EN_LUGAR_INICIO:
				if($this->LLAMADA_ENLUGAR == null)
					$this->LLAMADA_ENLUGAR = -999;
				$this->ESTADO_SERVICIO = 2;
				$ID_TELFENTRADA_LLEN = '33';
				$TELEFONO_ENTRADA_LLEN='APP4';
				break;
			case self::ST_CON_CLIENTE:
				if($this->LLAMADA_ENCOCHE == null)
					$this->LLAMADA_ENCOCHE = -999;
				$this->ESTADO_SERVICIO = 2;
				
				$ID_TELFENTRADA_LLEN = '34';
				$TELEFONO_ENTRADA_LLEN='APP5';
				break;
			case self::ST_FINALIZADO:
				if($this->LLAMADA_FINALIZADO == null)
					$this->LLAMADA_FINALIZADO = -999;
				$this->ESTADO_SERVICIO = 5;
				$ID_TELFENTRADA_LLEN = '35';
				$TELEFONO_ENTRADA_LLEN='APP6';
				break;
			case self::ST_EN_GARAGE:
				$ID_TELFENTRADA_LLEN = '31';
				$TELEFONO_ENTRADA_LLEN='APP2';
				break;
		}
		
		//$this->save();

		$llamadaEntrada = new LlamadasEntrantes();
		
		$llamadaEntrada->TELEFONO_LLEN = 'APP';
		$llamadaEntrada->ID_TELFENTRADA_LLEN = $ID_TELFENTRADA_LLEN;
		$llamadaEntrada->TELEFONO_ENTRADA_LLEN = $TELEFONO_ENTRADA_LLEN;
		$llamadaEntrada->SERVICIO = $this->id;
			
		
		$llamadaEntrada->save();
		
		$campo = self::$asociado_estado[$estado];
		$this->$campo = $llamadaEntrada->id;
		
		$this->save();

	}
	
	private static function getEstado($llamadas = array()){
		
		$estado = 'Pte confirmar';
		if ($llamadas['LLAMADA_CONFIRMA']>0) $estado = 'Pte_salir_garaje';
		else return $estado;
		
		if ($llamadas['LLAMADA_SGARAJE']>0) $estado = 'Pte_llegar_lugar';
		else return $estado;
		
		if ($llamadas['LLAMADA_ENLUGAR']>0) $estado = 'Pte_cliente';
		else return $estado;
		
		if ($llamadas['LLAMADA_ENCOCHE']>0) $estado = 'Pte_finalizar';
		else return $estado;
		
		if ($llamadas['LLAMADA_FINALIZADO']>0) $estado = 'Pte_llegar_garaje';
		else return $estado;
		
		if ($llamadas['LLAMADA_LGARAJE']>0) $estado = 'En_garaje';
		else return $estado;
		return $estado;
	}
	
	public function getCodigoParaViaje(){
		return 'PR'.substr($this->id, 2);
	}

	
	public function getNumeroPersonas() {
	    return number_format($this->numeroPersonas,0);
	}
	
	public function getNumeroPersonasViaje() {
		if ($this->numeroPersonasViaje>0)
			return number_format($this->numeroPersonasViaje,0);
		else return 0;
	}
	
	public function setNumeroPersonas($numeroPersonas) {
	    $this->numeroPersonas = $numeroPersonas;
	}

	// GET Y SET
	public function getNumeroServicio() {
	    return $this->numeroServicio;
	}
	public function setNumeroServicio($numeroServicio) {
	    $this->numeroServicio = $numeroServicio;
	}
	
	public static function getCodigoParaServicio($contrato){
		return '00'.substr($contrato, 2);
	}
	
	public function getCodigoVehiculo() {
	    return $this->codigoVehiculo;
	}
	public function setCodigoVehiculo($codigoVehiculo) {
	    $this->codigoVehiculo = $codigoVehiculo;
	}
	
	public function getClienteNombre() {
	    return $this->clienteNombre;
	}
	public function setClienteNombre($clienteNombre) {
	    $this->clienteNombre = $clienteNombre;
	}
		
	public function getClienteTelefono() {
	    return $this->clienteTelefono;
	}
	public function setClienteTelefono($clienteTelefono) {
	    $this->clienteTelefono = $clienteTelefono;
	}

public function getContactoNombre() {
    return $this->personaContacto;
}
public function setContactoNombre($personaContacto) {
    $this->personaContacto = $personaContacto;
}

public function getContactoTelefono() {
    return $this->personaTelefono;
}
public function setContactoTelefono($personaTelefono) {
    $this->personaTelefono = $personaTelefono;
}

public function getTipoServicio() {
    return $this->tipoServicio;
}
public function setTipoServicio($tipoServicio) {
    $this->tipoServicio = $tipoServicio;
}

public function getFechaHoraInicio() {
    return $this->fechaServicioInicio.' '.$this->horaServicioInicio;
}

public function getVehiculoNombre() {
    return $this->vehiculoMarca. ' '.$this->vehiculoModelo;
}

public function getObservaciones() {
    return $this->observaciones;
}
public function setObservaciones($observaciones) {
    $this->observaciones = $observaciones;
}

public function getItinerario() {
    return $this->itinerario;
}
public function setItinerario($itinerario) {
    $this->itinerario = $itinerario;
}

public function getOrigenLugar() {
    return $this->origenLugar;
}
public function setOrigenLugar($origenLugar) {
    $this->origenLugar = $origenLugar;
}

public function getOrigenDireccion() {
    return $this->direccion_origen;
}
public function setOrigenDireccion($direccion_origen) {
    $this->direccion_origen = $direccion_origen;
}

public function getDestinoDireccion() {
    return $this->direccion_destino;
}
public function setDestinoDireccion($direccion_destino) {
    $this->direccion_destino = $direccion_destino;
}

public function getDestinoLugar() {
    return $this->destinoLugar;
}
public function setDestinoLugar($destinoLugar) {
    $this->destinoLugar = $destinoLugar;
}

public function getPrecioConIva() {
    return $this->totalConIva;
}
public function setPrecioConIva($totalConIva) {
    $this->totalConIva = $totalConIva;
}

public function getGastosEnEfectivo() {
    return $this->gastosEnEfectivo;
}
public function setGastosEnEfectivo($gastosEnEfectivo) {
    $this->gastosEnEfectivo = $gastosEnEfectivo;
}

public function getEncuestaSolucion() {
	return $this->encuestaSolucion;
}
public function setEncuestaSolucion($encuestaSolucion) {
	$this->encuestaSolucion = $encuestaSolucion;
}

public function getEncuestaInformacion() {
	return $this->encuestaInformacion;
}

public function setEncuestaInformacion($encuestaInformacion) {
	$this->encuestaInformacion = $encuestaInformacion;
}

public function getEncuestaActitud() {
	return $this->encuestaActitud;
}
public function setEncuestaActitud($encuestaActitud) {
	$this->encuestaActitud = $encuestaActitud;
}

public function getEncuestaPresencia() {
	return $this->encuestaPresencia;
}
public function setEncuestaPresencia($encuestaPresencia) {
	$this->encuestaPresencia = $encuestaPresencia;
}

public function getEncuestaConfiariaEsteServicio() {
	return $this->encuestaConfiariaEsteServicio;
}
public function setEncuestaConfiariaEsteServicio($encuestaConfiariaEsteServicio) {
	$this->encuestaConfiariaEsteServicio = $encuestaConfiariaEsteServicio;
}

public function getEncuestaConfiariaMasServicios() {
	return $this->encuestaConfiariaMasServicios;
}
public function setEncuestaConfiariaMasServicios($encuestaConfiariaMasServicios) {
	$this->encuestaConfiariaMasServicios = $encuestaConfiariaMasServicios;
}

public function getEncuestaCalidadPrecio() {
	return $this->encuestaCalidadPrecio;
}
public function setEncuestaCalidadPrecio($encuestaCalidadPrecio) {
	$this->encuestaCalidadPrecio = $encuestaCalidadPrecio;
}

public function getEncuestaPersonal() {
	return $this->encuestaPersonal;
}
public function setEncuestaPersonal($encuestaPersonal) {
	$this->encuestaPersonal = $encuestaPersonal;
}

public function getEncuestaQuejas() {
	return $this->encuestaQuejas;
}
public function setEncuestaQuejas($encuestaQuejas) {
	$this->encuestaQuejas = $encuestaQuejas;
}

public function getEncuestaPuntualidad() {
	return $this->encuestaPuntualidad;
}
public function setEncuestaPuntualidad($encuestaPuntualidad) {
	$this->encuestaPuntualidad = $encuestaPuntualidad;
}

public function getEncuestaDesarrollo() {
	return $this->encuestaDesarrollo;
}
public function setEncuestaDesarrollo($encuestaDesarrollo) {
	$this->encuestaDesarrollo = $encuestaDesarrollo;
}

public function getEncuestaSatisfaccion() {
	return $this->encuestaSatisfaccion;
}
public function setEncuestaSatisfaccion($encuestaSatisfaccion) {
	$this->encuestaSatisfaccion = $encuestaSatisfaccion;
}

public function getEncuestaFecha() {
	return $this->encuestaFecha;
}
public function setEncuestaFecha($encuestaFecha) {
	$this->encuestaFecha = $encuestaFecha;
}






				
	
	
}