<?php

class ServicioController extends AdminController {

	public function cashAction()
	{

		
		$potencial = Usuario::getPotencialLogueado();
		$idChofer = $potencial->getChofer();
		$chofer = new Chofer($idChofer);
		$cajas = $chofer->getCash();
	
		$layout = $this->getLayout();

		$bt_inicio = new VstBoton_Cabecera('/servicio/index', VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
		$layout->reg_cabecera->addBoton($bt_inicio);

		$layout->reg_cabecera->setTitulo('Cajas');
		$cajasHtml = '';
		
		if (count($cajas) > 0) {
			foreach ($cajas as $caja) {
				$saldo = 0;
				if (!is_null($caja['saldo'])) {
					$saldo = AppHerramienta::formatearNumero( $caja['saldo'], 2);
				}
				$cajasHtml .= '
				<div class="panel panel-default">
					<div class="panel-heading">' . $caja['nombre'] . '</div>
					<div class="panel-body">' . $saldo . '</div>
				</div>
				';
			}	
		} else {
			$cajasHtml = '<div class="alert alert-info" role="alert">No tienes caja asignada</div>';
		}
		
		$cajasHtml = '<div style="padding-top:15px">' . $cajasHtml . '</div>';

		$cajas = new VstHTML($cajasHtml);
		$layout->reg_contenido->addElement($cajas);
	}
	
	/*
	 * Muestra los trabajos del chófer
	 */
	public function indexAction(){

		$u = Usuario::getPotencialLogueado();
		
		$layout = $this->getLayout();

		$ft = $this->getParametro('ft','');
		$titulo = 'Mis trabajos';
		switch ($ft){
			case 'fra':
				$titulo = 'Francia';
				break;
			case 'tds':
				$titulo = 'Todos';
				break;
		}

		// Título
		
		//Cabecera
		
		$bt = new VstBoton_Cabecera('/servicio/cash',VstBoton_Cabecera::icon_euro,'Cajas');
		$layout->reg_cabecera->addBoton($bt);
		
		if (($u->getUsuarioKarve())) {
			$boton_todos = new VstBoton_Cabecera('/servicio/index/ft/tds', VstBoton_Cabecera::icon_viajes_todos, 'Todos');
			$layout->reg_cabecera->addBoton($boton_todos);
			//$boton_todos = new VstBoton_Cabecera('/servicio/geo', VstBoton_Cabecera::icon_info, 'POS');
			//$layout->reg_cabecera->addBoton($boton_todos);
		}
		if (($u->getUsuarioKarve()) || ( $u->getCodigo()==POTENCIAL_AQUILINO)){
			$bt = new VstBoton_Cabecera('/servicio/index/ft/fra',VstBoton_Cabecera::icon_viajes_francia,'Francia');
			$layout->reg_cabecera->addBoton($bt);
			$bt = new VstBoton_Cabecera('/servicio/index',VstBoton_Cabecera::icon_viajes_españa,'Mis Trabajos');
			$layout->reg_cabecera->addBoton($bt);
		}
		
		$listado = new LSTMisTrabajos();
		$listado->addParametroMetodo('filtro',$ft);
		$layout->reg_contenido->addElement($listado);
		// Actualizar el estado si tiene hoja de ruta

		$html = '<script type="text/javascript">';
		$html .= ' $(function(){ ';
		$parametros['filtro'] = $ft;
		$potencial = Usuario::getPotencialLogueado();
		$parametros['chofer'] = $potencial->getChofer();
		$parametros['esUsuarioKarve'] = $potencial->tieneUsuarioKarve();
		$parametros['potencial'] = $potencial->getCodigo();
		//$t0 = microtime(true);
		$servicios = Servicio::lst_mitrabajo($parametros)->getDatos();
		$layout->reg_cabecera->setTitulo($titulo . ' (' . count($servicios) . ')');
		//$t1 = microtime(true);
		//$duration = $t1 - $t0;
		//echo 'D1:';
		//echo $duration;
		//echo '</br></br>';
		/*foreach ($servicios as $ser){
			$registro = RegistroDocumento::findHojaRutaByServicio($ser['numeroServicio']);
			//print_r($registro->getRutaEnDisco());
			if ($registro->getRutaEnDisco()){
				$html .= sprintf("$('#estado_%s').text('Hoja de Ruta');", $ser['numeroServicio']);
			}
		}*/
		$html .= '});';
		$html .= '</script>';
		$vh = new VstHTML($html);
		$layout->reg_contenido->addElement($vh);

		//$t2 = microtime(true);
		//$duration2 = $t2 - $t1;
		//echo 'D2:';
		//echo $duration2;
		//die('$duration');

	}

	public function hojarutaAction(){
		$layout = $this->getLayout();
		$codigoServicio = $this->getParametro('cs','');
		//echo 'COD:'.$codigoServicio;
		//$doc = RegistroDocumento::findHojaRutaByServicio($codigoServicio);
		if ($codigoServicio){
			try {
				$ser = new Servicio($codigoServicio);
				$usuario = Usuario::getPotencialLogueado();
				$usuarioWeb = $usuario->getUsuarioWeb();
				$doc = RegistroDocumento::findHojaRutaByServicio($codigoServicio);
				if (!$doc->getNumero()){
					$doc = new RegistroDocumento();
					$doc->asignarServicio($ser->getNumeroServicio());
					$doc->asignarSubidaApp($usuarioWeb);
					$doc->setTipoDocumento(RegistroDocumento::TIPODOCUMENTO_HOJA_DE_RUTA);
					$nuevoCodigo = $doc->generarNuevoCodigo();
					$doc->setNumero($nuevoCodigo);
					$doc->setLogCreadoUsuario($usuario->getUsuarioKarve());
					$doc->setLogCreadoFecha(date('YmdH:i'));		
				} else {
					$doc->asignarServicio($ser->getNumeroServicio());
				}
				$doc->setFecha(date('Y-m-d'));
				$doc->setLogUltimaModificacionFecha(date('YmdH:i'));
				$doc->setLogUltimaModificacionUsuario($usuario->getUsuarioKarve());
				//$doc->asignarRuta();
				$subido = $doc->guardarFichero($_FILES['fichero']);
				echo 'SUBIDO: '.($subido)?'SI':'NO';
				// CAMBIAR LA RUTA A D:/ESCANEOSPRUEBA
				//print_r($doc);
			} catch(Exception $e) {
				echo $e->getMessage();
			}
			if ($subido) {
 				$doc->save();
			}
 			$url = BASEURL.'/servicio/estados/id/'.$codigoServicio;
 			header('Location:'.$url);
		} else {
			$codigoServicio = $this->getParametro('id',-1);
			$doc = RegistroDocumento::findHojaRutaByServicio($codigoServicio);
			$layout->reg_cabecera->setTitulo($codigoServicio);
			if ($codigoServicio) {

				$formulario = new AppFormulario();
				$formulario->setAction('/servicio/hojaruta', false);
				$formulario->setEnctype(AppFormulario::ENCTYPE_MULTIPART);
				$formulario->setModo(AppFormulario::MODO_NORMAL);
				$cmpCs = new EFHidden("cs");
				$cmpCs->setValue($codigoServicio);
				$cmpFile = new EFFichero("fichero");
				$cmpFile->setLabel('Hoja de ruta:');
				$formulario->addElement($cmpCs);
			
				$formulario->addElement($cmpFile);
				$submit = new EFSubmit('guardar');
				$submit->setValue('Enviar');
				$formulario->addElement($submit);

				$xhtml = '';

				if($doc->getRutaEnDisco()){ 
					$rutatemporal = $doc->getRutaEnDisco();
					$rutatemporal = str_replace('D:', 'C:', $rutatemporal);
					$xhtml .= '<div class="form-group">
								<div class="col-sm-8 col-sm-offset-4">
								<a class="btn btn-default noajax" target="_blank" href="'.BASEURL. '/file/downfile?fichero=' . $rutatemporal.'">Descargar Hoja de Ruta</a>
								</div>
							   </div>';
				} else
					$xhtml .= 'No hay';
				$descarga = new VstHTML($xhtml);
				
				
				$titulo = new vstContenedor("Subir hoja de ruta");
				$fs = new VstFieldSet();
				$fs->addElement($cmpCs);
				$fs->addElement($cmpFile);
				$fs->addElement($descarga);
				$fs->addElement($submit);
				$titulo->addElement($fs);
				$formulario->addElementoVista($titulo);		
				$layout->reg_contenido->addElement($formulario);
				$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$codigoServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
				$layout->reg_cabecera->addBoton($bt_inicio);
				
				
				

			} else {
				$mensaje = 'Error: No se ha pasado servicio';
				$pagina = new VstHTML($mensaje);
				$layout->reg_contenido->addElement($pagina);
			}
		}
		
		
	}
	

	public function ticketsAction(){

		//AppLibreria::addJs('documental.js');

		$layout = $this->getLayout();
		$codigoServicio = $this->getParametro('cs','');
		//echo 'COD:'.$codigoServicio;
		//$doc = RegistroDocumento::findHojaRutaByServicio($codigoServicio);
		if ($codigoServicio){

			if ($codigoServicio == '00000016386') {

				// Borrar
				$codigoDocumental = $this->getParametro('cod','');
				if ($codigoDocumental) {
					$rd = new RegistroDocumento($codigoDocumental);
					$rd->remove();	
					$url = BASEURL.'/servicio/tickets/id/'.$codigoServicio;
					header('Location:' . $url);	
					die();
				}

				// Insertar
				try {
					$ser = new Servicio($codigoServicio);
					$usuario = Usuario::getPotencialLogueado();
					$usuarioWeb = $usuario->getUsuarioWeb();
					$doc = new RegistroDocumento();
					$doc->asignarServicio($ser->getNumeroServicio());
					$doc->asignarSubidaApp($usuarioWeb);
					$doc->setTipoDocumento(RegistroDocumento::TIPODOCUMENTO_TICKET_APP);
					$nuevoCodigo = $doc->generarNuevoCodigo();
					$doc->setNumero($nuevoCodigo);
					$doc->setLogCreadoUsuario($usuario->getUsuarioKarve());
					$doc->setLogCreadoFecha(date('YmdH:i'));		
					$doc->setFecha(date('Y-m-d'));
					$doc->setLogUltimaModificacionFecha(date('YmdH:i'));
					$doc->setLogUltimaModificacionUsuario($usuario->getUsuarioKarve());
					//$doc->asignarRuta();
					$subido = $doc->guardarFichero($_FILES['fichero']);
					//echo 'SUBIDO: '.($subido)?'SI':'NO';
					// CAMBIAR LA RUTA A D:/ESCANEOSPRUEBA
					//print_r($doc);
				} catch(Exception $e) {
					echo $e->getMessage();
				}
				if ($subido) {
					// iNSERTAR TICKET
					$usuario = Usuario::getPotencialLogueado();
					$usuarioWeb = $usuario->getUsuarioWeb();
					$codigoChofer = $ser->getCodigoChofer();
					$codigoVehiculo = $ser->getCodigoVehiculo();

					$date = $this->getParametro('date');
					if (!$date) $date = date('d/m/Y');
					$date = AppHerramienta::fechaHumanaAMysql($date);

					$time = $this->getParametro('time');
					if (!$time) $time = date('H:i');
					
					$amount = $this->getParametro('amount');
					if (!$amount) $amount = 0;
					$amount = AppHerramienta::numeroQuitarComas($amount);

					$base = $this->getParametro('base');
					if (!$base) $base = 0;
					$base = AppHerramienta::numeroQuitarComas($base);

					$liters = $this->getParametro('liters');
					$kms = $this->getParametro('kms');
					$paymentMethod = $this->getParametro('paymentMethod');
					$concept = $this->getParametro('concept');
					$supplier = $this->getParametro('supplier');

					$ticket = new Ticket(
						$codigoServicio,
						$date,
						$time,
						$amount,
						$base,
						$paymentMethod,
						$concept,
						$supplier,
						$codigoChofer,
						$codigoVehiculo,
						$liters,
						$kms
					);
					echo 'DOC<br>';
					print_r($doc);
					$numeroTicket = $ticket->save();
					echo '<br><br>NT:' . $numeroTicket;
					$doc->setTicket($numeroTicket);
					echo '<br><br>DOC<br>';
					print_r($doc);
					try {
						$doc->save();
					} catch (Exception $e) {
						print_r($e);
					}
				}

				$url = BASEURL.'/servicio/tickets/id/'.$codigoServicio;
				header('Location:'.$url);
				die();

			} else {
			// Borrar
			$codigoDocumental = $this->getParametro('cod','');
			if ($codigoDocumental) {
				$rd = new RegistroDocumento($codigoDocumental);
				$rd->remove();	
				$url = BASEURL.'/servicio/tickets/id/'.$codigoServicio;
				header('Location:' . $url);	
				die();
			}

			// Insertar
			try {
				$ser = new Servicio($codigoServicio);
				$usuario = Usuario::getPotencialLogueado();
				$usuarioWeb = $usuario->getUsuarioWeb();
				$doc = new RegistroDocumento();
				$doc->asignarServicio($ser->getNumeroServicio());
				$doc->asignarSubidaApp($usuarioWeb);
				$doc->setTipoDocumento(RegistroDocumento::TIPODOCUMENTO_TICKET_APP);
				$nuevoCodigo = $doc->generarNuevoCodigo();
				$doc->setNumero($nuevoCodigo);
				$doc->setLogCreadoUsuario($usuario->getUsuarioKarve());
				$doc->setLogCreadoFecha(date('YmdH:i'));		
				$doc->setFecha(date('Y-m-d'));
				$doc->setLogUltimaModificacionFecha(date('YmdH:i'));
				$doc->setLogUltimaModificacionUsuario($usuario->getUsuarioKarve());
				//$doc->asignarRuta();
				$subido = $doc->guardarFichero($_FILES['fichero']);
				//echo 'SUBIDO: '.($subido)?'SI':'NO';
				// CAMBIAR LA RUTA A D:/ESCANEOSPRUEBA
				//print_r($doc);
			} catch(Exception $e) {
				echo $e->getMessage();
			}
			if ($subido) {
 				$doc->save();
			}
 			$url = BASEURL.'/servicio/tickets/id/'.$codigoServicio;
 			header('Location:'.$url);
		} // fin codigo servicio
		} else {
			$codigoServicio = $this->getParametro('id',-1);
			$docs = RegistroDocumento::findTicketsByServicio($codigoServicio);
			$layout->reg_cabecera->setTitulo($codigoServicio);
			if ($codigoServicio) {

				// ESTADOS
				$btEnCoche = new VstBoton_Cabecera('/servicio/estados/id/'.$codigoServicio, VstBoton_Cabecera::icon_encoche, 'En coche');
				$layout->reg_cabecera->addBoton($btEnCoche);

				//TICKETS
				$btTicket = new VstBoton_Cabecera('/servicio/tickets/id/' . $codigoServicio, VstBoton_Cabecera::icon_ticket, 'Tickets');
				$btTicket->setEstaSeleccionado(true);
				$layout->reg_cabecera->addBoton($btTicket);
				
				// INFO
				$btVer = new VstBoton_Cabecera('/servicio/ver/id/'.$codigoServicio, VstBoton_Cabecera::icon_info, 'Datos');
				$layout->reg_cabecera->addBoton($btVer);		
				


				// Listado
				$docs = RegistroDocumento::findTicketsByServicio($codigoServicio);
				$urlRemove = BASEURL . '/servicio/tickets/cs/' . $codigoServicio;
				$docHtml = '<div id="tickets-download" data-url="' . $urlRemove . '"> <ol>';
				foreach ($docs as $doc) {
					//print_r($doc);
					$tempPath = str_replace('D:', 'C:', $doc->getRutaEnDisco());
					$docHtml .='<li>
						<a class="btn btn-default noajax" target="_blank" href="'.BASEURL. '/file/downfile?fichero=' . $tempPath.'">Descargar Ticket</a>
					</li>';
					// 						<button class="btn btn-danger noajax remove-doc" data-num="' . $doc->getNumero() . '" title="Eliminar"><i class="fa fa-minus-circle" aria-hidden="true"></i></button>
				}
				$docHtml .= '</ol></div>';
				$docHtml .= "<script type='text/javascript'>
				$(function(){
					
					$('.remove-doc').click( function(){
						let url = $('#tickets-download').data('url');
						if (confirm('¿Deseas eliminar el ticket?')) {
							var urlcompleta = url + '/cod/' + $(this).data('num');
							location.href = urlcompleta;
						}
					});
				
				});
				</script>";
				$vstDocList = new VstHTML($docHtml);
				$listado = new vstContenedor("Tickets subidos");
				$listado->addElement($vstDocList);
				$layout->reg_contenido->addElement($listado);

				// Formulario
				$formulario = new AppFormulario();
				$formulario->setAction('/servicio/tickets', false);
				$formulario->setEnctype(AppFormulario::ENCTYPE_MULTIPART);
				$formulario->setModo(AppFormulario::MODO_NORMAL);
				
				$cmpCs = new EFHidden("cs");
				$cmpCs->setValue($codigoServicio);
				$formulario->addElement($cmpCs);

				$cmpFile = new EFFichero("fichero");
				$cmpFile->setLabel('');
				$formulario->addElement($cmpFile);

				if ($codigoServicio == '00000016386') {
					$cmpDate = new EFFecha('date');
					$cmpDate->setLabel('Fecha');
					$cmpDate->setValue(date('d/m/Y'));
					$formulario->addElement($cmpDate);

					$cmpTime = new EFHora('time');
					$cmpTime->setLabel('Hora');
					$cmpTime->setValue(date('H:i'));
					$formulario->addElement($cmpTime);

					$cmpAmount = new EFDecimal('amount');
					$cmpAmount->setLabel('Importe');
					$cmpAmount->setDecimales(2);
					$cmpAmount->setRequired(true);
					$formulario->addElement($cmpAmount);

					$cmpBase = new EFDecimal('base');
					$cmpBase->setLabel('Base');
					$cmpBase->setDecimales(2);
					$cmpBase->setRequired(true);
					$formulario->addElement($cmpBase);

					$cmpPaymentMethod = new EFCombobox('paymentMethod');
					$cmpPaymentMethod->setLabel('Forma de pago:');
					$potencial = Usuario::getPotencialLogueado();
					$idChofer = $potencial->getChofer();
					$chofer = new Chofer($idChofer);
					$cajas = $chofer->getCash();
					foreach ($cajas as $caja) {
						$cmpPaymentMethod->addMultiOption($caja['cuenta'], $caja['nombre']);
					}
					$formulario->addElement($cmpPaymentMethod);
					$cmpPaymentMethod->addMultiOptions(Formapago::listado_select_fixed());
			
					
					$cmpConcept = new EFCombobox('concept');
					$cmpConcept->setLabel('Concepto:');
					$cmpConcept->setMultiOptions(ConceptoTicket::listado_select());
					$formulario->addElement($cmpConcept);

					$cmpSupplier = new EFCombobox('supplier');
					$cmpSupplier->setLabel('Proveedor:');
					$cmpSupplier->setMultiOptions(Proveedor::listado_select());
					$formulario->addElement($cmpSupplier);
				
					
					$cmpLiters = new EFDecimal('liters');
					$cmpLiters->setLabel('Litros');
					$formulario->addElement($cmpLiters);

					$cmpKms = new EFDecimal('kms');
					$cmpKms->setLabel('Kms');
					$formulario->addElement($cmpKms);
				}

				$submit = new EFSubmit('guardar');
				$submit->setValue('Enviar');
				$formulario->addElement($submit);

				$xhtml = '';
				
				$titulo = new vstContenedor("Subir ticket");
				$fs = new VstFieldSet();
				$fs->addElement($cmpCs);
				if ($codigoServicio == '00000016386') {
					$fs->addElement($cmpDate);
					$fs->addElement($cmpTime);
					$fs->addElement($cmpAmount);
					$fs->addElement($cmpBase);
					$fs->addElement($cmpLiters);
					$fs->addElement($cmpKms);
					$fs->addElement($cmpPaymentMethod);
					$fs->addElement($cmpConcept);
					$fs->addElement($cmpSupplier);
				}
				$fs->addElement($cmpFile);
				//$fs->addElement($descarga);
				$fs->addElement($submit);
				$titulo->addElement($fs);
				$formulario->addElementoVista($titulo);		
				$layout->reg_contenido->addElement($formulario);
				//$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$codigoServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
				//$layout->reg_cabecera->addBoton($bt_inicio);

			} else {
				$mensaje = 'Error: No se ha pasado servicio';
				$pagina = new VstHTML($mensaje);
				$layout->reg_contenido->addElement($pagina);
			}
		}
		
		
	}
	

	public function geoAction(){
		$layout = $this->getLayout();
		$pagina = new VstHTML(
			'
				<button onclick="getLocation()">Try It</button>

<p id="demo"></p>

<script>
var x = document.getElementById("demo");

function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition, showError);
    } else { 
        x.innerHTML = "Geolocation is not supported by this browser.";
    }
}

function showPosition(position) {
    x.innerHTML = "Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude;
}

function showError(error) {
    switch(error.code) {
        case error.PERMISSION_DENIED:
            x.innerHTML = "User denied the request for Geolocation."
            break;
        case error.POSITION_UNAVAILABLE:
            x.innerHTML = "Location information is unavailable."
            break;
        case error.TIMEOUT:
            x.innerHTML = "The request to get user location timed out."
            break;
        case error.UNKNOWN_ERROR:
            x.innerHTML = "An unknown error occurred."
            break;
    }
}
</script>
				'	
				);
		$layout->reg_contenido->addElement($pagina);
		
		$html = '<input type="file" name="fsdfds">';
		$layout->reg_contenido->addElement($html);
		
		$html = '<input type="file" accept="image/*" capture="camera" />';
		$html = '<input type="file" accept="image/*;capture=camera">';
		$layout->reg_contenido->addElement($html);
		
		$html = '<h1>Ejemplo sólo</h1>';
		$html .= '<input type="file" accept="image/*" id="capture" capture="camera"> ';
		$layout->reg_contenido->addElement($html);
		$html = '<video autoplay></video>
<img src="" id="eje">
<canvas style="display:none;"></canvas>

<script>
  var video = document.querySelector(\'video\');
  var canvas = document.querySelector(\'canvas\');
  var ctx = canvas.getContext(\'2d\');
  var localMediaStream = null;

  function snapshot() {
    if (localMediaStream) {
      ctx.drawImage(video, 0, 0);
      // "image/webp" works in Chrome.
      // Other browsers will fall back to image/png.
      document.querySelector(\'#eje\').src = canvas.toDataURL(\'image/webp\');
    }
  }
 
  video.addEventListener(\'click\', snapshot, false);

  // Not showing vendor prefixes or code that works cross-browser.
  navigator.getUserMedia({video: true}, function(stream) {
    video.src = window.URL.createObjectURL(stream);
    localMediaStream = stream;
  }, errorCallback);
</script>';
		$layout->reg_contenido->addElement($html);
	}
	
	/**
	 * Ver los datos del servicio
	 */
	public function verAction(){

		// Leer parámetros
		$id = $this->_request->getParam('id', -1);
		$vieneDelIndex = $this->getParametro('ini');
		
		// Lógica
		$servicio = new Servicio($id);
		
		if (($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR') && $vieneDelIndex==1){
			$ruta = '/servicio/resumen/id/'.$id;
			$this->_redirect($ruta);
		}
		// Visual
		$layout = $this->getLayout();
		
		// Cabecera
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		// TAREAS
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
			$codigo = $servicio->getCodigoParaViaje();
		} else {
			$codigo = $servicio->getNumeroServicio();
		}
		if (ServicioViaje::getTareasViajeros($codigo)>0){
			$btTareas = new VstBoton_Cabecera('/servicio/tareas/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_tareas, 'Tareas');
			$layout->reg_cabecera->addBoton($btTareas);
				
		}
		// RESUMEN
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR' || $servicio->tarifa == 'TARISUREST'){
			$btFrancia = new VstBoton_Cabecera('/servicio/resumen/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_francia, 'Viajeros');
			$layout->reg_cabecera->addBoton($btFrancia);
		}
		// ESTADOS
		$btEnCoche = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_encoche, 'En coche');
		$layout->reg_cabecera->addBoton($btEnCoche);

		//TICKETS
		$btTicket = new VstBoton_Cabecera('/servicio/tickets/id/' . $servicio->numeroServicio, VstBoton_Cabecera::icon_ticket, 'Tickets');
		$layout->reg_cabecera->addBoton($btTicket);
		
		// INFO
		$btVer = new VstBoton_Cabecera('/servicio/ver/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_info, 'Datos');
		$btVer->setEstaSeleccionado(true);
		$layout->reg_cabecera->addBoton($btVer);		
		

		// Fin de cabecera	
		
		
		
		// Contenido
		
		
		
		$cont = new vstContenedor('Datos del servicio');
		$info = new VstInfo();
		$info->addElement('Nº Servicio:', $servicio->numeroServicio);
		$personaContacto = $servicio->personaContacto.' <a href="tel:'.$servicio->personaTelefono.'" target="_blank">'.$servicio->personaTelefono.'</a>';
		if ($servicio->agenteCoche || $servicio->propietarioCoche){
			if (!$personaContacto)	$personaContacto = $servicio->clienteNombre.' <a href="tel:'.$servicio->clienteTelefono.'" target="_blank">'.$servicio->clienteTelefono.'</a>';
		} else {
			$info->addElement('Cliente:', $servicio->clienteNombre.' <a href="tel:'.$servicio->clienteTelefono.'" target="_blank">'.$servicio->clienteTelefono.'</a>');
		}
		if ($servicio->nombreComercial)
		$info->addElement('Nom. Comercial', $servicio->nombreComercial);
		//$info->addElement('Propietario', $servicio->propietarioCoche);
		//$info->addElement('Agente', $servicio->agenteCoche);

		$direccionOrigen = $servicio->direccion_origen;
		if ($servicio->gpsOrigen)
			$direccionOrigen = $servicio->gpsOrigen;
		$direccionDestino = $servicio->direccion_destino;
		if ($servicio->gpsDestino)
			$direccionDestino = $servicio->gpsDestino;
		if (!$personaContacto) $personaContacto ='&nbsp; ';
		$info->addElement('Contacto', $personaContacto);
		$info->addElement('Nº Personas:', $servicio->getNumeroPersonasViaje());
		$info->addElement('Servicio', $servicio->tipoServicio);
		$info->addElement('Vehículo', $servicio->vehiculoMarca.' '.$servicio->vehiculoModelo.' ('.$servicio->vehiculoMatricula.')');
		$info->addElement('Origen:', $servicio->fecha_hora_inicio.'<br/>'.$servicio->origenLugar.'<br/><a href="https://www.google.es/maps/dir/'.$direccionOrigen.'" target="_blank">'.$servicio->direccion_origen.'</a>');
		$info->addElement('Destino:', $servicio->fechaServicioFin.' '.$servicio->horaServicioFin.'<br/>'.$servicio->destinoLugar.'<br/><a href="https://www.google.es/maps/dir/'.$direccionDestino.'" target="_blank">'.$servicio->direccion_destino.'</a>');
		$info->addElement('Referencia', $servicio->referencia);
		$info->addElement('Observaciones:', $servicio->observaciones);
		$info->addElement('Itinerario:', $servicio->itinerario);
		if (!$servicio->getPermisoNoMostrarPendienteCobroEnHojaRuta() && $servicio->getCobrosPendientes()>0 && $servicio->tarifa != 'TARISUREST')
			$info->addElement('Cobros pendientes', AppHerramienta::formatearNumero($servicio->getCobrosPendientes(),2));
		
		$cont->addElement($info);
		$layout->reg_contenido->addElement($cont);

		
		
	}

	
	/**
	 * Ver el resumen de los pasajeros
	 */
	public function resumenAction(){
	
		//AppLibreria::addJs('servicio.js');
		
		// Leer parámetros
		$id = $this->_request->getParam('id', -1);
	
		// Lógica
		$servicio = new Servicio($id);
		$codigoVehículo = $servicio->getCodigoVehiculo();
		$vehiculo = new Vehiculo($codigoVehículo);
		$numeroPlazasVehículo = $vehiculo->getNumeroPlazas();
	
		// Visual
		$layout = $this->getLayout();
	
		
		// Cabecera
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		// TAREAS
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
			$codigo = $servicio->getCodigoParaViaje();
		} else {
			$codigo = $servicio->getNumeroServicio();
		}
		if (ServicioViaje::getTareasViajeros($codigo)>0){
			$btTareas = new VstBoton_Cabecera('/servicio/tareas/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_tareas, 'Tareas');
			$layout->reg_cabecera->addBoton($btTareas);
		
		}
		// RESUMEN
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR' || $servicio->tarifa == 'TARISUREST'){
			$btFrancia = new VstBoton_Cabecera('/servicio/resumen/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_francia, 'Viajeros');
			$btFrancia->setEstaSeleccionado(true);
			$layout->reg_cabecera->addBoton($btFrancia);
		}
		// ESTADOS
		$btEnCoche = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_encoche, 'En coche');
		$layout->reg_cabecera->addBoton($btEnCoche);

		//TICKETS
		$btTicket = new VstBoton_Cabecera('/servicio/tickets/id/' . $servicio->numeroServicio, VstBoton_Cabecera::icon_ticket, 'Tickets');
		$layout->reg_cabecera->addBoton($btTicket);
		
		// INFO
		$btVer = new VstBoton_Cabecera('/servicio/ver/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_info, 'Datos');
		$layout->reg_cabecera->addBoton($btVer);
		
		
		// Fin de cabecera
		
		
		
		
		
			
	
		
	
		// Viajeros en FRANCIA
	
		if ($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR' || $servicio->tarifa == 'TARISUREST'){
			$tituloIda = 'IDA';
			$tituloVuelta = 'VUELTA';
			if ($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
				$codigoFrancia = $servicio->getCodigoParaViaje();
				$tituloIda = 'España - Francia';
				$tituloVuelta = 'Francia - España';
			} else {
				$codigoFrancia = $servicio->getNumeroServicio();
			}
			$servicioFrancia = new Servicio($codigoFrancia);
			$cobros = $servicio->loadCobrosViaje();
			$importeServicio = 0;
			
			$contPasajeros = new vstContenedor('Pasajeros');
			$vista = new VstVista('resumen');
			
			$plazasDisponibles = $numeroPlazasVehículo - $servicioFrancia->numeroPlazasOcupadas(0);
			$fechaEspFra = $servicioFrancia->getFechaSalidaDeEspana().' '.$servicioFrancia->getHoraSalidaDeEspana();
			$fechaFraEsp = $servicioFrancia->getFechaSalidaDeFrancia().' '.$servicioFrancia->getHoraSalidaDeFrancia();

			//************* IDA *********************/
			$vista->titulo = $tituloIda." (Pax:".$servicioFrancia->numeroPlazasOcupadas(0)." / Dispo:".$plazasDisponibles.")<br>".$fechaEspFra;
			$vista->contrato = $servicio->getCodigoParaViaje();
			$vista->ida = 0;
			$vista->esTarea = false;
			$vista->cobros = $cobros;
			$vista->verCobros = false;
			if ($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
				$vista->verCobros = true;
			}

			$parametros = array('contrato'=> $codigoFrancia,'ida'=>0);
			$lista_viajes = ServicioViaje::lstPasajeros($parametros);
			foreach ($lista_viajes as $viaje){
				$importeServicio += $viaje['paquetesImporte']>0?$viaje['paquetesImporte']:0;
				$importeServicio += $viaje['personasImporte']>0?$viaje['personasImporte']:0;
			}

			foreach ($lista_viajes as $key => &$reg){
				if ($reg['paquetesCantidad']>0 && $reg['personasCantidad']==0)
					$reg['estadovisible'] = 'Paquete_sin_recoger';
				else 
					$reg['estadovisible'] = 'Persona_sin_recoger';
			}
			$vista->lista_viajes = $lista_viajes;
			$contPasajeros->addElement($vista);

			//******** VUELTA *******************/
			$vista = new VstVista('resumen');
			$plazasDisponibles = $numeroPlazasVehículo - $servicioFrancia->numeroPlazasOcupadas(1);
			$vista->titulo = $tituloVuelta." (Pax:".$servicioFrancia->numeroPlazasOcupadas(1)." / Dispo:".$plazasDisponibles.")<br>".$fechaFraEsp;
			$vista->contrato = $servicio->getCodigoParaViaje();
			$vista->ida = 1;
			$vista->cobros = $cobros;
			$vista->esTarea = false;
			$vista->verCobros = false;
			if ($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
				$vista->verCobros = true;
			}

			$parametros = array('contrato'=> $codigoFrancia ,'ida'=>1);
			$lista_viajes = ServicioViaje::lstPasajeros($parametros);
			foreach ($lista_viajes as $viaje){
				$importeServicio += $viaje['paquetesImporte']>0?$viaje['paquetesImporte']:0;
				$importeServicio += $viaje['personasImporte']>0?$viaje['personasImporte']:0;
			}
				
			if (is_array($lista_viajes)){
				foreach ($lista_viajes as $key => &$reg){
					if ($reg['paquetesCantidad']>0 && $reg['personasCantidad']==0)
						$reg['estadovisible'] = 'Paquete_recogido';
					else
						$reg['estadovisible'] = 'Persona_recogido';
				}
			}
		
			$vista->lista_viajes = $lista_viajes;
			
			// Resúmenes
			$cobradoEfectivo = 0;
			$cobradoCheque = 0;
			foreach ($cobros as $cob){
				if ($cob['formaPago'] == CobroViaje::COBRO_FORMA_PAGO_CHEQUE)
					$cobradoCheque += $cob['importe'];
				else
					$cobradoEfectivo += $cob['importe'];
			}
			$pendienteCobrarServicio = $importeServicio - $cobradoCheque - $cobradoEfectivo;
			$gastosEnEfectivo = $servicioFrancia->getGastosEnEfectivo();
			$gastosEnEfectivoObservaciones = $servicioFrancia->getGastosEnEfectivoObservaciones();
			if ($gastosEnEfectivo=='') $gastosEnEfectivo = 0;
			//print_r($cobros);
			/*echo 'Cheque:'.$cobradoCheque;
			echo '<br>';
			echo 'Efectivo:'.$cobradoEfectivo;
			echo '<br>';
			echo 'Servicio:'.$importeServicio;
			echo '<br>';
			echo 'Servicio:'.$pendienteCobrarServicio;
			*/
			$contPasajeros->addElement($vista);
			
			$layout->reg_contenido->addElement($contPasajeros);
			
			$contResumen = new vstContenedor('Resumen del viaje');
			$info = new VstInfo('resumen');
			$info->addElement('Importe del Servicio:', '<input type="text" class="form-control" readonly="readonly" value="'.number_format($importeServicio,2).'">');
			$info->addElement('Pendiente cobrar servicio:', '<input type="text" class="form-control"  readonly="readonly" value="'.number_format($pendienteCobrarServicio,2).'">');
			$info->addElement('Cobrado Cheque:', '<input type="text" class="form-control"  readonly="readonly" value="'.number_format($cobradoCheque,2).'">');
			$info->addElement('Cobrado Efectivo:', '<input type="text" class="form-control" id="cobradoefectivo" readonly="readonly" value="'.$cobradoEfectivo.'">');
			$info->addElement('Gastos En Efectivo', '<input type="text" class="form-control" id="gastosenefectivo" data-url="'.BASEURL.'" data-contrato="'.$codigoFrancia.'" value="'.$gastosEnEfectivo.'">');
			$info->addElement('Observaciones Gastos', '<textarea class="form-control" id="gastosenefectivoObservaciones" data-url="'.BASEURL.'" data-contrato="'.$codigoFrancia.'">'.$gastosEnEfectivoObservaciones.'</textarea>');
			$info->addElement('Efectivo a entregar en oficina:', '<input type="text" class="form-control" id="entregaOficina" readonly="readonly" value="">');
			
			$contResumen->addElement($info);
			if ($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
				$layout->reg_contenido->addElement($contResumen);
			}
			
		} else {
			$msj = ' No hay viajeros.';
			$layout->reg_contenido->addElement($msj);
		}
	
	
	
	}
	
	public function savegastosAction(){
		$contrato = $this->getParametro('contrato');
		$gastos = $this->getParametro('gastos');
		echo $contrato;
		echo $gastos;
		$servicio = new Servicio($contrato);
		$servicio->saveGastosEfectivo($gastos);
		die();
	}

	public function savegastosobservacionesAction(){
		$contrato = $this->getParametro('contrato');
		$observaciones = $this->getParametro('observaciones');
		$servicio = new Servicio($contrato);
		$servicio->saveGastosEfectivoObservaciones($observaciones);
		die();
	}
	
	public function savegpsAction(){
		$numeroPotencial = $this->getParametro('potencial');
		$ida = $this->getParametro('ida');
		$dejar = $this->getParametro('dejar');
		$pos = $this->getParametro('pos');
		$contrato = $this->getParametro('contrato');
		$linea = $this->getParametro('linea');
		echo $numeroPotencial;
		echo '<br>';
		echo $ida;
		echo '<br>';
		echo $dejar;
		echo '<br>';
		echo $dejar;
		echo '<br>';
		echo $dejar;
		echo '<br>';
		echo $contrato;
		echo '<br>';
		echo $linea;
		$potencial = new Potencial($numeroPotencial);
		$viaje = new ServicioViaje($contrato, $linea, $ida);
		if (!$ida){ // ESP - FRA
			if (!$dejar){
				$direccion = PotencialViaje::findByDireccionESP($viaje->getContacto(), $viaje->getOrigenDireccion());
				if ($direccion){
					$direccion->setGpsEspana($pos);
					$direccion->save();
				} else {
					$potencial->setGpsEspana($pos);
				}
				$viaje->setOrigenGPS($pos);
			} else{
				$direccion = PotencialViaje::findByDireccionFRA($viaje->getContacto(), $viaje->getDestinoDireccion());
				if ($direccion){
					$direccion->setGpsFrancia($pos);
					$direccion->save();
				} else {
					$potencial->setGpsFrancia($pos);
				}
				
				$viaje->setDestinoGPS($pos);
			}
		} else { // FRA - ESP
			if (!$dejar){
				$direccion = PotencialViaje::findByDireccionFRA($viaje->getContacto(), $viaje->getOrigenDireccion());
				if ($direccion){
					$direccion->setGpsFrancia($pos);
					$direccion->save();
				} else {
					$potencial->setGpsFrancia($pos);
				}
				$viaje->setOrigenGPS($pos);
			} else { 
				$direccion = PotencialViaje::findByDireccionESP($viaje->getContacto(), $viaje->getDestinoDireccion());
				if ($direccion){
					$direccion->setGpsEspana($pos);
					$direccion->save();
				} else {
					$potencial->setGpsEspana($pos);
				}
				$viaje->setDestinoGPS($pos);
			}
		}
		$potencial->save(); 
		$viaje->save();
		die();
	}
	
	public function tareasAction(){
		
		$todos = $this->getParametro('td',-1);
		// parámetro $todos nos indica si sólo mostramos los que falta o todos: -1 / 1 
		$idServicio = $this->getParametro('id');
		$servicio = new Servicio($idServicio);
		$codigoVehículo = $servicio->getCodigoVehiculo();
		$vehiculo = new Vehiculo($codigoVehículo);
		$numeroPlazasVehículo = $vehiculo->getNumeroPlazas();
		$cobros = array();
		// Visual
		$layout = $this->getLayout();
		
		// Cabecera
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		// TAREAS
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
			$codigo = $servicio->getCodigoParaViaje();
		} else {
			$codigo = $servicio->getNumeroServicio();
		}
		if (ServicioViaje::getTareasViajeros($codigo)>0){
			$btTareas = new VstBoton_Cabecera('/servicio/tareas/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_tareas, 'Tareas');
			$btTareas->setEstaSeleccionado(true);
			$layout->reg_cabecera->addBoton($btTareas);
		
		}
		// RESUMEN
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR' || $servicio->tarifa == 'TARISUREST'){
			$btFrancia = new VstBoton_Cabecera('/servicio/resumen/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_francia, 'Viajeros');
			$layout->reg_cabecera->addBoton($btFrancia);
		}
		// ESTADOS
		$btEnCoche = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_encoche, 'En coche');
		$layout->reg_cabecera->addBoton($btEnCoche);

		//TICKETS
		$btTicket = new VstBoton_Cabecera('/servicio/tickets/id/' . $servicio->numeroServicio, VstBoton_Cabecera::icon_ticket, 'Tickets');
		$layout->reg_cabecera->addBoton($btTicket);
		
		// INFO
		$btVer = new VstBoton_Cabecera('/servicio/ver/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_info, 'Datos');
		$layout->reg_cabecera->addBoton($btVer);
		
		
		// Fin de cabecera
		
		
		
		
		
		// Viajes sin son de Francia o tareas si son otras tarifas
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR' || $servicio->tarifa == 'TARISUREST'){
			$verCobros = false;
			$editarViajeros = false;
			$tituloIda = 'IDA';
			$tituloVuelta = 'VUELTA';
			if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
				$verCobros = true;
				$editarViajeros = true;
				$tituloIda = 'España - Francia';
				$tituloVuelta = 'Francia - España';
			}
				
			$codigoFrancia = $codigo;
			$servicioFrancia = new Servicio($codigoFrancia);
			
			$fechaEspFra = $servicioFrancia->getFechaSalidaDeEspana().' '.$servicioFrancia->getHoraSalidaDeEspana();
			$fechaFraEsp = $servicioFrancia->getFechaSalidaDeFrancia().' '.$servicioFrancia->getHoraSalidaDeFrancia();	
			$cobros = $servicio->loadCobrosViaje();
			//print_r($cobros);
			//die();
				
			//**************** VIAJE DE IDA
			$parametros = array('contrato'=> $codigoFrancia ,
								'ida'=>0,
								'todos'=>$todos
			);
			$lista_viajes = ServicioViaje::lstTodos($parametros)->getDatos();
			$vista = new VstVista('trabajo_viajes');
			$plazasDisponibles = $numeroPlazasVehículo - $servicioFrancia->numeroPlazasOcupadas(0);
			$vista->titulo = $tituloIda." (Pax:".$servicioFrancia->numeroPlazasOcupadas(0)." / Dispo:".$plazasDisponibles.")<br>".$fechaEspFra;
			$vista->contrato = $servicio->getCodigoParaViaje();
			$vista->ida = 0;
			$vista->numeroservicio = $servicio->numeroServicio;
			$vista->esTarea = false;
			$vista->accion = 'tareas';
			$vista->cobros = $cobros;
			$vista->verCobros = $verCobros;
			$vista->editarViajeros = $editarViajeros;
						
			if ($todos==-1)
				$vista->todos = 1;
			else 
				$vista->todos = -1;
			
			foreach ($lista_viajes as $key => &$reg){
				$reg['estadovisible'] = ServicioViaje::devolverEstilo($reg);
			}
			$vista->lista_viajes = $lista_viajes;
			$layout->reg_contenido->addElement($vista);
				
			//************ VIAJE DE VUELTA
			$parametros = array('contrato'=> $codigoFrancia ,
					'ida'=>1,
					'todos' => $todos
			);
			$vista = new VstVista('trabajo_viajes');
			$lista_viajes = ServicioViaje::lstTodos($parametros)->getDatos();
			
			$plazasDisponibles = $numeroPlazasVehículo - $servicioFrancia->numeroPlazasOcupadas(1);
			$vista->titulo = $tituloVuelta." (Pax:".$servicioFrancia->numeroPlazasOcupadas(1)." / Dispo:".$plazasDisponibles.")<br>".$fechaFraEsp;
			$vista->ida = 1;
			$vista->contrato = $servicio->getCodigoParaViaje();
			$vista->numeroservicio = $servicio->numeroServicio;
			$vista->esTarea = false;
			$vista->accion = 'tareas';
			$vista->cobros = $cobros;
			$vista->verCobros = $verCobros;
			$vista->editarViajeros = $editarViajeros;
							
			if ($todos==-1)
				$vista->todos = 1;
			else
				$vista->todos = -1;
			foreach ($lista_viajes as $key => &$reg){
				$reg['estadovisible'] = ServicioViaje::devolverEstilo($reg);
		
			}
		
			$vista->lista_viajes = $lista_viajes;
			$layout->reg_contenido->addElement($vista);
				
				
		} else {
				
			$parametros = array('contrato' => $servicio->getNumeroServicio(),
					'ida'=>7,
					'todos'=> $todos
			);
			$lista_viajes = ServicioViaje::lstTodos($parametros)->getDatos();
			$vista = new VstVista('trabajo_viajes');
			$vista->titulo = 'Tareas';
			$vista->esTarea = true;
			$vista->numeroservicio = $servicio->numeroServicio;
			$vista->accion = 'tareas';
			$vista->cobros = $cobros;
			$vista->ida=7; // Las tareas sólo tienen esta ida
			if ($todos==-1)
				$vista->todos = 1;
			else 
				$vista->todos = -1;
			foreach ($lista_viajes as $key => &$reg){
				$reg['estadovisible'] = ServicioViaje::devolverEstilo($reg);
			}
			$vista->lista_viajes = $lista_viajes;
			$layout->reg_contenido->addElement($vista);
				
				
		}
		
	}
	
	/* 
	 * Muestra los datos del servicio y los estados en botón del mismo
	 */
	public function estadosAction(){

		// Leer parámetros
		$id = $this->_request->getParam('id', -1);
		
		// Lógica
		$servicio = new Servicio($id);
		
		//$formulario = new FRMServicioEstado($servicio);
		
		$lista_estados = array();
		$lista_estados2 = array();
		
		$lista_estados[Servicio::ST_CONFIRMAR] = array('id_estado'=> Servicio::ST_CONFIRMAR, 'nombre' =>'Confirmar' );
		$lista_estados[Servicio::ST_SALIDA_GARAGE] = array('id_estado'=> Servicio::ST_SALIDA_GARAGE, 'nombre' =>'Salida de Garaje' );
		//if($servicio->tarifa != 'TARIFRANC' && $servicio->tarifa != 'SCONDUCTOR'){
		$lista_estados[Servicio::ST_EN_LUGAR_INICIO] = array('id_estado'=> Servicio::ST_EN_LUGAR_INICIO, 'nombre' =>'En lugar de inicio');
		$lista_estados[Servicio::ST_CON_CLIENTE] = array('id_estado'=> Servicio::ST_CON_CLIENTE, 'nombre' =>'Con cliente');
		//}else{
			
		//}
		$lista_estados[Servicio::ST_FINALIZADO] = array('id_estado'=> Servicio::ST_FINALIZADO, 'nombre' =>'Finalizado');
		$lista_estados[Servicio::ST_EN_GARAGE] = array('id_estado'=> Servicio::ST_EN_GARAGE, 'nombre' =>'En garaje');
		
		$id_estado = 0;
		$id_estado_aux = 0;
		$estados_pasados = $servicio->getEstados();
		
		foreach($estados_pasados as $key_pasado => $pasados){
		
			$id_estado = $key_pasado;
			if(isset($lista_estados[$key_pasado])){
				$lista_estados[$key_pasado]['FECHA'] 	= $pasados->FECHA;
				$lista_estados[$key_pasado]['HORA'] 	= $pasados->HORA;
			}else{
				$lista_estados2[$key_pasado]['FECHA'] 	= $pasados->FECHA;
				$lista_estados2[$key_pasado]['HORA'] 	= $pasados->HORA;
			}
		
		}
		
		if($servicio->LLAMADA_CONFIRMA > 0){
			$id_estado_aux = 1;
		}
		if($servicio->LLAMADA_ENLUGAR > 0){
			$id_estado_aux = 3;
		}
		if($servicio->LLAMADA_ENCOCHE > 0){
			$id_estado_aux = 4;
		}
		if($servicio->LLAMADA_FINALIZADO > 0){
			$id_estado_aux = 5;
		}
		
		if ($servicio->LLAMADA_LGARAJE > 0) 
			$id_estado_aux = 6;
		
		if($id_estado_aux> $id_estado){
			$id_estado = $id_estado_aux;
		}
		
			
		// Visual
		$layout = $this->getLayout();
		
		// Cabecera
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		// TAREAS
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR'){
			$codigo = $servicio->getCodigoParaViaje();
		} else {
			$codigo = $servicio->getNumeroServicio();
		}
		if (ServicioViaje::getTareasViajeros($codigo)>0){
			$btTareas = new VstBoton_Cabecera('/servicio/tareas/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_tareas, 'Tareas');
			$layout->reg_cabecera->addBoton($btTareas);
		
		}
		// RESUMEN
		if($servicio->tarifa == 'TARIFRANC' || $servicio->tarifa == 'SCONDUCTOR' || $servicio->tarifa == 'TARISUREST'){
			$btFrancia = new VstBoton_Cabecera('/servicio/resumen/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_francia, 'Viajeros');
			$layout->reg_cabecera->addBoton($btFrancia);
		}
		// ESTADOS
		$btEnCoche = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_encoche, 'En coche');
		$btEnCoche->setEstaSeleccionado(true);
		$layout->reg_cabecera->addBoton($btEnCoche);

		//TICKETS
		$btTicket = new VstBoton_Cabecera('/servicio/tickets/id/' . $servicio->numeroServicio, VstBoton_Cabecera::icon_ticket, 'Tickets');
		$layout->reg_cabecera->addBoton($btTicket);
		
		// INFO
		$btVer = new VstBoton_Cabecera('/servicio/ver/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_info, 'Datos');
		$layout->reg_cabecera->addBoton($btVer);
		
		
		// Fin de cabecera
		
		
		// Contenido

		
		
		foreach($lista_estados as $estado){
			$texto_estado = '';
				
			if($estado['id_estado'] == $id_estado+1){
				$texto_estado = 'color_actual';
			}elseif($estado['id_estado'] <= $id_estado){
				$texto_estado = 'color_finalizado';
			}else{
				$texto_estado = 'btn-default';
			}
			$km = 0;
			switch ($estado['id_estado']){
				case 2:
					$km = $servicio->kilometrosParkingSalida;
					break;
				case 3:
					$km = $servicio->kilometrosVehiculoSalida;
					break;
				case 5:
					$km = $servicio->kilometrosVehiculoLlegada;
					break;
				case 6:
					$km = $servicio->kilometrosParkingLlegada;
					break;
						
			}

			$boton = new VstBoton('/servicio/cambiaestado/ne/'.$estado['id_estado'].'/id/'.$id ,
					BASEURL,
					$estado['nombre'],
					$estado['nombre'].(($km>0)?' Kms:'.$km:'').(isset($estado['FECHA'])?'<br/> '.$estado['FECHA']:'').(isset($estado['HORA'])?' '.$estado['HORA']:'')
			);			
			$boton->setClase('btn '. $texto_estado .' btn-lg btn-block'. (($estado['id_estado'] > $id_estado+1)?' disabled':''));
			$layout->reg_contenido->addElement($boton);
						
		}	
		$hojaRuta = RegistroDocumento::findHojaRutaByServicio($id);
		$btHoja = new VstBoton('/servicio/hojaruta/id/'.$servicio->numeroServicio, BASEURL, 'Subir hoja de ruta','Hoja de Ruta '.($hojaRuta->getNumero()?'<br/>Está subida':''));
		$btHoja->setClase('btn btn-lg btn-block '.($hojaRuta->getNumero()?'color_finalizado':'btn-default').' '.($id_estado<6?'disabled':''));
		$layout->reg_contenido->addElement($btHoja);

		$tickets = RegistroDocumento::findTicketsByServicio($id);
		$txtTickets = ticket ? '(' . count($tickets) .')' : '';
		$btTickets = new VstBoton('/servicio/tickets/id/'.$servicio->numeroServicio, BASEURL, 'Subir ticket','Tickets '. $txtTickets);
		$btTickets->setClase('btn btn-lg btn-block btn-default '.($id_estado < 6?'disabled':''));
		$layout->reg_contenido->addElement($btTickets);

		// Botón Resumen
		if ($servicio->tarifa =='SDRFISCAL') {
			$boton = new VstBoton('/servicio/resumenfiscal/id/'.$id ,
					BASEURL,
					'Resumen',
					'Resumen'
			);
			
			$boton->setClase('btn '. $texto_estado .' btn-lg btn-block'. (($estado['id_estado'] > $id_estado+1)?' disabled':''));
			$layout->reg_contenido->addElement($boton);
		}
		
		/*
		foreach($lista_estados2 as $estado){
			$texto_estado = '';
		
			if($estado['id_estado'] == $id_estado+1){
				$texto_estado = 'color_actual';
			}elseif($estado['id_estado'] <= $id_estado){
				$texto_estado = 'color_finalizado';
			}else{
				$texto_estado = 'btn-default';
			}
			$km = 0;
			switch ($estado['id_estado']){
				case 2:
					$km = $servicio->kilometrosParkingSalida;
					break;
				case 3:
					$km = $servicio->kilometrosVehiculoSalida;
					break;
				case 5:
					$km = $servicio->kilometrosVehiculoLlegada;
					break;
				case 6:
					$km = $servicio->kilometrosParkingLlegada;
					break;
		
			}
			$boton = new VstBoton('/servicio/cambiaestado/ne/'.$estado['id_estado'].'/id/'.$id ,
					BASEURL,
					$estado['nombre'],
					$estado['nombre'].(($km>0)?' Kms:'.$km:'').(isset($estado['FECHA'])?'<br/> '.$estado['FECHA']:'').(isset($estado['HORA'])?' '.$estado['HORA']:'')
			);
			$boton->setClase('btn '. $texto_estado .' btn-lg btn-block'. (($estado['id_estado'] > $id_estado+1)?' disabled':''));
			$layout->reg_contenido->addElement($boton);
		}
		*/
		
		// Fin Contenido Estados
	
	}
	
	
	public function editarAction(){
		
		AppCabecera::setTitulo('Hoja de ruta');
		
		
		$boton = new Boton('/servicio/index/' , BASEURL, 'VOLVER', 'Volver');
		$boton->setClase('btn-primary btn-lg btn-block');
		$this->regionContenido->addElement($boton);
		
		
		$id = $this->_request->getParam('id', -1);
		
		$servicio = new Servicio($id);
		
		
		$formulario = new FRMServicio($servicio);
		$this->regionContenido->addElement($formulario);
		
		$listado = new LSTDetalleServicio();
		$listado->setParametroMetodo('servicio', $id);
		$this->regionContenido->addElement($listado);
		
	}
	
	public function cambiaestadoAction(){

		$gps = gps::getUltimaPosicionChofer();
		
		$id = $this->_request->getParam('id', -1);
		$id_nuevo_estado = $this->_request->getParam('ne', -1);
		
		$servicio = new Servicio($id);
		$servicio->CambiarEstado($id_nuevo_estado);
		
		switch ($id_nuevo_estado) {
			case 1:
				$this->_redirect('servicio/confirmar/id/'.$id);
				break;
			case 2:
				$this->_redirect('servicio/editarpaso/id/'.$id.'/p/2');
				break;
			case 3:
				$this->_redirect('servicio/editarpaso/id/'.$id.'/p/3');
				break;
			case 4:
				$this->_redirect('servicio/concliente/id/'.$id);
				break;
			case 5:
				$this->_redirect('servicio/editarpaso/id/'.$id.'/p/5');
				break;
			case 6:
				$this->_redirect('servicio/editarpaso/id/'.$id.'/p/6');
				break;
		}
		
		
		
	}
	
	public function confirmarAction(){
		$id = $this->_request->getParam('id', -1);
		$this->_redirect('servicio/estados/id/'.$id);
	}

	
	public function resumenfiscalAction(){
	
		// Carga datos
		$id = $this->_request->getParam('id', -1);
		$servicio = new Servicio($id);
			
		$cmp_info = new VstInfo();
		$kilometrosServicio = $servicio->kilometrosParkingLlegada-$servicio->kilometrosParkingSalida;
		if ($kilometrosServicio > $servicio->limiteKilometros) 
			$kilometrosExtra=$kilometrosServicio - $servicio->limiteKilometros;
		else
			$kilometrosExtra = 0;
		$cmp_info->addElement('Kilómetros Totales:', $servicio->kilometrosParkingLlegada-$servicio->kilometrosParkingSalida);
		$cmp_info->addElement('Kilómetros Servicio:', $servicio->limiteKilometros);
		$cmp_info->addElement('Kilómetros Extra', $kilometrosExtra);
		
		$linea = new ServicioLinea($servicio->numeroServicio, Servicio::CON_LIN_EXTRA_HORAS_ESPERA_FISCAL);
		
		$fechaFin = $servicio->fechaParkingEntrada;
		$horaFin = $servicio->horaParkingEntrada;
		$fechaInicio = $servicio->fechaServicioInicio;
		$horaInicio = $servicio->horaServicioInicio;

		if ($horaInicio > $servicio->horaServicioRealSalida)
			$horaInicio = $servicio->horaServicioRealSalida;
 
		if (isset($fechaFin) && $fechaFin) {
			$minutosCortesia = 15;
			$fechaFinMysql = AppHerramienta::fechaHumanaAMysql($fechaFin);
			$ff = strtotime($fechaFinMysql.' '.$horaFin);
			$fechaIniMysql = AppHerramienta::fechaHumanaAMysql($fechaInicio);
			$fs = strtotime($fechaIniMysql.' '.$horaInicio);
			$diferencia_ensegundos = $ff - $fs;
			$horas = floor( $diferencia_ensegundos / (60*60) );
			if ($horas==0) $horas =1;
		
			$minutos = ($diferencia_ensegundos - (60*60*$horas))/60;
			if ($minutos>$minutosCortesia)
				$horas++;

			$horasEspera = $horas - $servicio->limiteHoras;
			if ($horasEspera<0) $horasEspera=0;
		} else {
			$horas = '';
			$horasEspera  ='';
		}
	
		//$horasEspera = $linea->cantidad;
		
		$cmp_horas = new VstInfo();
		$cmp_horas->addElement('Horas Totales:', $horas);
		$cmp_horas->addElement('Horas Servicio:', round($servicio->limiteHoras,0));
		$cmp_horas->addElement('Horas Espera:', $horasEspera);
		
		
	
		// Visual
		$layout = $this->getLayout();
	
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
		$layout->reg_cabecera->addBoton($bt_inicio);
	
		// Contenido
		$layout->reg_contenido->addElement($cmp_info);
		$layout->reg_contenido->addElement($cmp_horas);
	}
	
	
	public function editarpasoAction(){
	
		// Carga datos
		$id = $this->_request->getParam('id', -1);
		$paso = $this->getParametro('p');
		$servicio = new Servicio($id);
		switch ($paso) {
			case 6:
				if (!$servicio->fechaParkingEntrada){
					$servicio->fechaParkingEntrada = date('d/m/Y');
					$servicio->horaParkingEntrada = date('H:i:s');
				}
				break;
			case 2:
				if (!$servicio->fechaParkingSalida){
					$servicio->fechaParkingSalida = date('d/m/Y');
					$servicio->horaParkingSalida = date('H:i:s');
					$servicio->horaServicioRealSalida = $servicio->horaParkingSalida;
				}
				break;
		}
		$linea = new ServicioLinea($servicio->numeroServicio, Servicio::CON_LIN_EXTRA_HORAS_ESPERA_FISCAL);
		$servicio->tiempoEspera = $linea->cantidad;
		$formulario = new FRMPasosServicio($servicio, $paso);
	
		// Visual
		$layout = $this->getLayout();
	
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
		$layout->reg_cabecera->addBoton($bt_inicio);
	
		// Contenido
		$layout->reg_contenido->addElement($formulario);
	}
	
	
	public function salidaAction(){
	

		
		// Carga datos
		$id = $this->_request->getParam('id', -1);
		$servicio = new Servicio($id);
		$formulario = new FRMSalida($servicio);
		
		// Visual
		$layout = $this->getLayout();
		
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
		$layout->reg_cabecera->addBoton($bt_inicio);
		
		// Contenido
		$ct = new vstContenedor('Salida Garaje');
		$ct->addElement($formulario);
		$layout->reg_contenido->addElement($ct);	
	}	
	
	public function resumenviajeAction(){
		// Carga datos
		$id = $this->_request->getParam('id', -1);
		$servicio = new Servicio($id);
		
		$formulario = new FRMPasosServicio($servicio);
		
		// Visual
		$layout = $this->getLayout();
		
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
		$layout->reg_cabecera->addBoton($bt_inicio);
		
		// Contenido
		$layout->reg_contenido->addElement($formulario);
		
		
	}
	
	public function enlugarAction(){
		
		
		// Carga datos
		$id = $this->_request->getParam('id', -1);
		$servicio = new Servicio($id);
		$formulario = new FRMEnlugar($servicio);
		
		// Visual
		$layout = $this->getLayout();
		
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
		$layout->reg_cabecera->addBoton($bt_inicio);
		
		$ct = new vstContenedor('Lugar Inicio');
		$ct->addElement($formulario);
		$layout->reg_contenido->addElement($ct);
		
	}
	
	public function conclienteAction(){
		$id = $this->_request->getParam('id', -1);
		$this->_redirect('servicio/estados/id/'.$id);
	}
	
	public function finalizadoAction(){
		
		
		// Carga datos
		$id = $this->_request->getParam('id', -1);
		$servicio = new Servicio($id);
		$formulario = new FRMFinalizado($servicio);
		$fecha = date('d/m/Y');
		$hora = date('H:i');
		$formulario->fechaServicioFin->setValue($fecha);
		$formulario->horaServicioFin->setValue($hora);
		
		// Cabecera
		$layout = $this->getLayout();
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
		$layout->reg_cabecera->addBoton($bt_inicio);
		
		// Contenido
		$ct = new vstContenedor('Dejar al cliente');
		$ct->addElement($formulario);
		$layout->reg_contenido->addElement($ct);
		
	}
	
	public function engarajeAction(){

		// Carga datos
		$id = $this->_request->getParam('id', -1);
		$servicio = new Servicio($id);
		$formulario = new FRMEngaraje($servicio);
		
		// Cabecera
		$layout = $this->getLayout();
		$titulo = $servicio->numeroServicio;
		$layout->reg_cabecera->setTitulo($servicio->numeroServicio);
		$bt_inicio = new VstBoton_Cabecera('/servicio/estados/id/'.$servicio->numeroServicio, VstBoton_Cabecera::icon_volver, 'Volver al Servicio');
		$layout->reg_cabecera->addBoton($bt_inicio);
		
		// Contenido
		$ct = new vstContenedor('Llegada garaje');
		$ct->addElement($formulario);
		$layout->reg_contenido->addElement($ct);
		
	}
	
}