package com.rjconsultores.ventaboletos.web.gui.controladores.seguridad;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.SelectEvent;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Tabbox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.dao.EsquemaCorridaDAO;
import com.rjconsultores.ventaboletos.dao.RutaDAO;
import com.rjconsultores.ventaboletos.dao.RutaEmpresaDAO;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.OperadorEmbarcada;
import com.rjconsultores.ventaboletos.entidad.OperadorEmbarcadaLinha;
import com.rjconsultores.ventaboletos.entidad.OperadorEmbarcadaServico;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.RutaEmpresa;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.MarcaService;
import com.rjconsultores.ventaboletos.service.OperadorEmbarcadaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.InputMessageBox;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.api.CacheOperadorEmbarcada;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;
import com.rjconsultores.ventaboletos.web.utilerias.render.ItemRenderRutaOperadorEmbarcada;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfiguracionCorrida;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRutasOperadorEmbarcada;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderSelecionarUsuario;
import com.trg.search.Filter;

@Controller("editarOperadorEmbarcadaController")
@Scope("prototype")
public class EditarOperadorEmbarcadaController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = LogManager.getLogger(EditarOperadorEmbarcadaController.class);
	private Textbox txtLogin;
	
	private Intbox txtIdLinha;
	private Textbox txtDescLinha;
	private Textbox txtNumeroLinha;
	
	private MyListbox usuarioList;
	private Paging pagingUsuario = new Paging();
	private Combobox cmbEmpresa;
	private List<Empresa> lsEmpresas;
	private Combobox cmbClaseServicio;
	private List<ClaseServicio> lsClaseServicio;
	private Paging pagingRuta;
	private MyListbox linhaList;
	private Combobox cmbSentido;
	private List<String> lsSentido;
	
	private Intbox txtIdServico;
	private Textbox txtDescServico;
	private Combobox cmbMarcaServicio;
	private Combobox  cmbClaseServicioServico;
	private MyComboboxPuntoVenta cmbPuntoVenta;
	private Textbox txtNombUsuario;
	private Textbox txtNumeroServicoVirgula;
	
	private List<ItemRenderRutaOperadorEmbarcada> itensRutaList = new ArrayList<ItemRenderRutaOperadorEmbarcada>();
	private List<EsquemaCorrida> servicosSelecionados = new ArrayList<EsquemaCorrida>();
	private List<EsquemaCorrida> novosServicosSelecionados = new ArrayList<EsquemaCorrida>();
	
	private List<Marca> lsMarca;
	
	@Autowired
	private ClaseServicioService claseServicioServicce;
		
	@Autowired
	private RutaDAO rutaDAO;
	
	@Autowired 
	private RutaEmpresaDAO rutaEmpresaDAO;
	
	@Autowired
	private EsquemaCorridaDAO esquemaCorridaDAO;
	
	@Autowired
	private OperadorEmbarcadaService operadorService;
	
	private List<Usuario> usuariosSelecionados;
	private List<ItemRenderRutaOperadorEmbarcada> itemRutaSelecionados;
	
	private OperadorEmbarcada operadorEdicao; 
	
	private Tabbox tabBox;
	private Paging pagingEsquemaCorrida = new Paging();
	private MyListbox esquemaCorridaList;
	
	@Autowired
	private MarcaService marcaService;
	
	@Autowired
	private transient PagedListWrapper<Usuario> plwFormaPago;
	@Autowired
	private transient PagedListWrapper<EsquemaCorrida> plwEsquemaCorrida;
	
	private Button btnPesquisaUsuario;
	private Button btnApagar;
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		usuariosSelecionados = new ArrayList<Usuario>();
		new ArrayList<OperadorEmbarcada>();
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		
		lsClaseServicio = claseServicioServicce.buscarPorEmpresasDoUsuario(lsEmpresas);
		
		lsSentido = new ArrayList<String>();
		lsSentido.add(" - ");
		lsSentido.add("IDA");
		lsSentido.add("VOLTA");
		
		lsMarca = marcaService.buscarMarcaPorEmpresa(lsEmpresas);
		
		super.doAfterCompose(comp);
		
		operadorEdicao = (OperadorEmbarcada) Executions.getCurrent().getArg().get("Operador");
		
		if (operadorEdicao.getUsuario() == null) {
			btnApagar.setVisible(false);
		}
		pagingUsuario.setPageSize(10000);
		pagingEsquemaCorrida.setPageSize(10000);
				
		usuarioList.setItemRenderer( new RenderSelecionarUsuario());
		usuarioList.setMultiple(true);
		
		linhaList.setItemRenderer(new RenderRutasOperadorEmbarcada());
		linhaList.setMultiple(true);
		
		esquemaCorridaList.setItemRenderer(new RenderConfiguracionCorrida());
		esquemaCorridaList.setMultiple(true);
		
		if(operadorEdicao != null && operadorEdicao.getUsuario() != null ) {
			btnPesquisaUsuario.setDisabled(true);
			usuariosSelecionados.add(operadorEdicao.getUsuario());
			
			List<Ruta> rutaJaSelecionadas = new ArrayList<Ruta>();
			for(OperadorEmbarcadaLinha opl : operadorEdicao.getLinhas()) {
				rutaJaSelecionadas.add(opl.getRuta());
			}
			
			separarRutasRenderer(rutaJaSelecionadas, true);
			
			List<EsquemaCorrida> corridaJaSelecionadas = new ArrayList<EsquemaCorrida>();
			
			for(OperadorEmbarcadaServico ops : operadorEdicao.getServicos()) {
				corridaJaSelecionadas.add(ops.getCorrida());
			}
			
			
			esquemaCorridaList.setData(corridaJaSelecionadas);
			esquemaCorridaList.selectItems(corridaJaSelecionadas);
			
			novosServicosSelecionados.addAll(corridaJaSelecionadas);
			operadorEdicao.clonar();
		} 
		
		atualizarListaUsuariosSelecionados(false);		
	}
	
	private void refreshLista() {	
		usuariosSelecionados = usuarioList.getItensSelecionados(Usuario.class);
		
		HibernateSearchObject<Usuario> sistemaBusqueda = new HibernateSearchObject<Usuario>(Usuario.class);
		
		String nombUsuario = txtNombUsuario.getText();
		if (!nombUsuario.equals("")) {
			sistemaBusqueda.addFilterILike("nombusuario", "%" + nombUsuario.trim().concat("%"));
		}
			
		String cveUsuario = txtLogin.getText();
		if (!cveUsuario.equals("")) {
			sistemaBusqueda.addFilterLike("claveUsuario", "%" + cveUsuario.trim().concat("%"));
		}		
		
		Comboitem puntoVentaSeleccionada = cmbPuntoVenta.getSelectedItem();

		if (puntoVentaSeleccionada != null) {
			PuntoVenta puntoVenta = (PuntoVenta) puntoVentaSeleccionada.getValue();
			sistemaBusqueda.addFilterSome("usuarioUbicacionList", Filter.and(Filter.equal("puntoVenta", puntoVenta),
							Filter.equal("activo", Boolean.TRUE)));
		}

		sistemaBusqueda.addSortAsc("claveUsuario");
		sistemaBusqueda.addFilterEqual("activo", Boolean.TRUE);

		plwFormaPago.init(sistemaBusqueda, usuarioList, pagingUsuario);

		if (usuarioList.getData().length == 0) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
						Labels.getLabel("busquedaUsuarioController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
			}
		} else {
			atualizarListaUsuariosSelecionados(true);
		}
	}

	private void atualizarListaUsuariosSelecionados(boolean consulta) {
		if (usuariosSelecionados != null && !usuariosSelecionados.isEmpty()) {
			
			usuarioList.clear();
			if (!consulta) {
				usuarioList.setData(usuariosSelecionados);			
			}			
			usuarioList.selectItems(usuariosSelecionados);			
		}
	}
	
	private void refreshListaLinha() {
		itemRutaSelecionados = linhaList.getItensSelecionados(ItemRenderRutaOperadorEmbarcada.class);
		
		List<Integer> empresasIds = new ArrayList<Integer>();;
		Integer rutaId  = null;
		String descRuta = txtDescLinha.getText();
		ClaseServicio classe = null;
		String numeroLinha = null;
		
		if (cmbEmpresa.getSelectedIndex() >= 0) {
			Empresa e = (Empresa) cmbEmpresa.getSelectedItem().getValue();
			empresasIds.add(e.getEmpresaId());
		} else {
			empresasIds.addAll(getIdEmpresas(lsEmpresas));
		}

		if (txtIdLinha.getValue() != null) {
			rutaId = txtIdLinha.getValue();
		}

		if (txtNumeroLinha.getValue() != null && !txtNumeroLinha.getValue().isEmpty()) {
			numeroLinha =  txtNumeroLinha.getValue();
		}

		Comboitem cbiClaseServicio = cmbClaseServicio.getSelectedItem();
		if (cbiClaseServicio != null) {
			classe = (ClaseServicio) cbiClaseServicio.getValue();			
		}
				
		List<Ruta> rutasList = rutaDAO.buscarRutasVendaEmbarcada(empresasIds, rutaId, numeroLinha, descRuta, classe);

		if (rutasList.isEmpty()) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), Labels.getLabel("busquedaCatalogoDeRutaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
			}
		} else {			
			separarRutasRenderer(rutasList, false);									
		}
	}

	private void separarRutasRenderer(List<Ruta> rutasList, boolean selecionadas) {
		
//		if (!linhaList.getItensSelecionados(ItemRenderRutaOperadorEmbarcada.class).isEmpty()) {
//			return;
//		}
		itemRutaSelecionados = linhaList.getItensSelecionados(ItemRenderRutaOperadorEmbarcada.class);;
		itensRutaList.clear();
		itensRutaList.addAll(itemRutaSelecionados);
		for(Ruta r : rutasList) {
			List<RutaEmpresa> listRutaEmpresa = rutaEmpresaDAO.obtenerPorRuta(r);
			
//			itensRutaList.add(new ItemRenderRutaOperadorEmbarcada(r.getNumRuta(), r.getDescruta(), r.getClaseServicio().getDescclase(), r.getPrefixo(), listRutaEmpresa, r));
		
			if(itensRutaList.isEmpty()) {
				itensRutaList.add(new ItemRenderRutaOperadorEmbarcada(r.getNumRuta(), r.getDescruta(), r.getClaseServicio().getDescclase(), listRutaEmpresa, r));
			} else {
				boolean adicionou = false;
				for(int i = 0 ; i < itensRutaList.size(); i++) {
					if(itensRutaList.get(i).getNumRuta().equals(r.getNumRuta())) {
						boolean idIgual = false;
						for(Ruta rs : itensRutaList.get(i).getListaRutas()) {
							if(rs.getRutaId().equals(r.getRutaId())) {
								idIgual = true;
							}
						}
						//Para não adicionar a mesma ruta mais de uma vez
						if(!idIgual) {
							itensRutaList.get(i).getListaRutas().add(r);
						}
						adicionou = true;
					}
				}
				
				if(!adicionou) {
					itensRutaList.add(new ItemRenderRutaOperadorEmbarcada(r.getNumRuta(), r.getDescruta(), r.getClaseServicio().getDescclase(), listRutaEmpresa, r));
				}
			}
		}
	
//		itemRutaSelecionados = linhaList.getItensSelecionados(ItemRenderRutaOperadorEmbarcada.class);
		if(selecionadas) {
			itemRutaSelecionados = itensRutaList;
		}
		
		linhaList.setData(itensRutaList);
		linhaList.selectItems(itemRutaSelecionados);
	}
	
	public void refreshListaServico() {
		servicosSelecionados = esquemaCorridaList.getItensSelecionados(EsquemaCorrida.class);
		
		HibernateSearchObject<EsquemaCorrida> busquedaCorrita = new HibernateSearchObject<EsquemaCorrida>(EsquemaCorrida.class);

		busquedaCorrita.addFilterEqual("activo", Boolean.TRUE);
		Date dataAtual = new Date();
		busquedaCorrita.addFilterLessOrEqual("esquemaOperacional.fecniciovigencia", dataAtual);
		busquedaCorrita.addFilterGreaterOrEqual("esquemaOperacional.fecfinvigencia", dataAtual);
		
		if(txtIdServico.getValue() != null) {
			busquedaCorrita.addFilterEqual("esquemacorridaId", txtIdServico.getValue());
		}
		
		if (txtNumeroServicoVirgula.getValue() != null && !txtNumeroServicoVirgula.getValue().equals("")) {
			String[] txtSplit = txtNumeroServicoVirgula.getValue().replace(" ", "").split("\\,");
			List<Integer> whereIn = new ArrayList<Integer>();
			
			for (String txt: txtSplit) {
				try {
					whereIn.add(Integer.valueOf(txt));
				} catch (NumberFormatException e) {
					continue;
				}
			}
			
			if (!whereIn.isEmpty()) {
				busquedaCorrita.addFilterIn("numCorrida", whereIn);
			}
		}		
		
		Comboitem cbiClase = cmbClaseServicioServico.getSelectedItem();		 
		if (cbiClase != null) {
			ClaseServicio claseServicio = (ClaseServicio) cbiClase.getValue();
			busquedaCorrita.addFilterEqual("claseServicio", claseServicio);
		}
		
		Comboitem cbiSentido = cmbSentido.getSelectedItem();		 
		if (cbiSentido != null && !cbiSentido.getValue().toString().equals(" - ")) {
			String sentido = (String) cbiSentido.getValue();
			busquedaCorrita.addFilterEqual("ruta.indSentidoIda", sentido.equals("IDA"));
		}

		Comboitem cbiMarca = cmbMarcaServicio.getSelectedItem();		 
		if (cbiMarca != null) {
			Marca marca = (Marca) cbiMarca.getValue();
			busquedaCorrita.addFilterEqual("marca", marca);
		} else {
			busquedaCorrita.addFilterIn("marca", lsMarca);
		}

		List<Ruta> linhasSelecionadas = new ArrayList<Ruta>();
		for(ItemRenderRutaOperadorEmbarcada itr : itemRutaSelecionados) {
			linhasSelecionadas.addAll(itr.getListaRutas());
		}

		if (linhasSelecionadas != null && !linhasSelecionadas.isEmpty()) {			
			busquedaCorrita.addFilterIn("ruta", linhasSelecionadas);
		}
						
		busquedaCorrita.addSortDesc("esquemacorridaId");

		plwEsquemaCorrida.init(busquedaCorrita, esquemaCorridaList, pagingEsquemaCorrida);
		servicosSelecionados.addAll(novosServicosSelecionados);
		esquemaCorridaList.selectItems(servicosSelecionados);
		
		if (esquemaCorridaList.getData().length == 0) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
						Labels.getLabel("selecionarServicosGerarController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
			}
		}
	}
	
	private List<Integer> getIdEmpresas(List<Empresa> lsEmpresa2) {

		if (lsEmpresa2 == null || lsEmpresa2.isEmpty()) {
			return null;
		}

		List<Integer> ids = new ArrayList<Integer>();
		for (Empresa empresa : lsEmpresa2) {
			ids.add(empresa.getEmpresaId());
		}

		return ids;
	}
	
	public void onSelect$linhaList(SelectEvent event) {
		
		if (event != null && event.getReference() != null && event.getReference().getClass() == Listitem.class) {
			event.stopPropagation();
	        Listitem item = (Listitem)event.getReference();
	        ItemRenderRutaOperadorEmbarcada itemRuta = (ItemRenderRutaOperadorEmbarcada)linhaList.getListData().get(item.getIndex());
	        selectLinhas(itemRuta);
		}
				
	}
	
	private void selectLinhas(ItemRenderRutaOperadorEmbarcada itemRuta) {

		List<Ruta> rutas = null;
		if (itemRuta == null) {
			rutas = new ArrayList<Ruta>();
			List<ItemRenderRutaOperadorEmbarcada> rutasSelecionadas = linhaList.getItensSelecionados(ItemRenderRutaOperadorEmbarcada.class);
			for (ItemRenderRutaOperadorEmbarcada itemRenderRutaOperadorEmbarcada : rutasSelecionadas) {
				rutas.addAll(rutaDAO.buscarNumRuta(itemRenderRutaOperadorEmbarcada.getNumRuta()));
			}
		} else {
			rutas = rutaDAO.buscarNumRuta(itemRuta.getNumRuta());
		}
		List<EsquemaCorrida> selecionados = new ArrayList<EsquemaCorrida>();

		for (Ruta ruta : rutas) {
			selecionados.addAll(esquemaCorridaDAO.buscarPorRuta(ruta));
		}
		
		novosServicosSelecionados = selecionados;
	}
	
	public void onSelect$tabLinhas(Event event) {
		List<Usuario> selected = usuarioList.getItensSelecionados(Usuario.class);
				
		if(selected != null && selected.isEmpty()) {
			try {
				Messagebox.show(Labels.getLabel("busquedaOperadorEmbarcada.mensage.escolherUsuario"), 
						Labels.getLabel("busquedaOperadorEmbarcada.mensage.escolherUsuario.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			} catch (Exception e) {
			
			}
			tabBox.setSelectedIndex(0);
		} else {
			usuariosSelecionados = selected;
			refreshListaLinha();
		}
	}
	
	public void onSelect$tabServico(Event event) {
		List<ItemRenderRutaOperadorEmbarcada> selected = linhaList.getItensSelecionados(ItemRenderRutaOperadorEmbarcada.class);
				
		if(selected != null && selected.isEmpty()) {
			try {
				Messagebox.show(Labels.getLabel("busquedaOperadorEmbarcada.mensage.escolherLinha"), 
						Labels.getLabel("busquedaOperadorEmbarcada.mensage.escolherLinha.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			} catch (Exception e) {
			
			}
			if(usuariosSelecionados.isEmpty()) {
				tabBox.setSelectedIndex(0);
			} else {
				tabBox.setSelectedIndex(1);
			}
		} else {
			itemRutaSelecionados = selected;
			refreshListaServico();
		}
	}
	

	public void onClick$btnSalvar(Event ev) {
		
		try {			
			servicosSelecionados = esquemaCorridaList.getItensSelecionados(EsquemaCorrida.class);

			if (usuariosSelecionados.isEmpty() || itemRutaSelecionados.isEmpty() || servicosSelecionados.isEmpty()) {
				
				Messagebox.show(Labels.getLabel("busquedaOperadorEmbarcada.mensage.naoEpossivelSalvar"), Labels.getLabel("busquedaOperadorEmbarcada.mensage.naoEpossivelSalvar.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				return;
			}
			
			for(Usuario us : usuariosSelecionados) {
				OperadorEmbarcada operador = operadorService.buscarOperadorEmbarcadaPorUsuario(us.getUsuarioId());
				
				if(operadorEdicao != null && operadorEdicao.getUsuario() != null  && us.getUsuarioId() == operadorEdicao.getUsuario().getUsuarioId()) {
					operador = operadorEdicao;
				}
				
				if (operador == null) {
					operador = new OperadorEmbarcada();
					operador.setActivo(Boolean.TRUE);
					operador.setFecmodif(new Date());
					operador.setUsuario(us);
				}
				
				List<ItemRenderRutaOperadorEmbarcada> selected = linhaList.getItensSelecionados(ItemRenderRutaOperadorEmbarcada.class);
				if (selected != null && !selected.isEmpty()) {
					itemRutaSelecionados = selected;
				}
				
				//Separa todas as rutas selecionadas
				List<Ruta> rutasSelecionadas = new ArrayList<Ruta>();
				for(ItemRenderRutaOperadorEmbarcada r :itemRutaSelecionados) {
					rutasSelecionadas.addAll(r.getListaRutas());
				}
				
				List<OperadorEmbarcadaLinha> linhas = new ArrayList<OperadorEmbarcadaLinha>();
				for(Ruta r : rutasSelecionadas) {
					OperadorEmbarcadaLinha opl = new OperadorEmbarcadaLinha();
					
					opl.setActivo(Boolean.TRUE);
					opl.setOperadorEmbarcada(operador);
					opl.setRuta(r);
					
					linhas.add(opl);
				}
				
				//Separa os servicos selecionados
				List<OperadorEmbarcadaServico> listaServicos = new ArrayList<OperadorEmbarcadaServico>();				
				for (EsquemaCorrida cor : servicosSelecionados) {
					OperadorEmbarcadaServico servicos = new OperadorEmbarcadaServico();
					
					servicos.setOperadorEmbarcada(operador);
					servicos.setActivo(Boolean.TRUE);
					servicos.setCorrida(cor);
					
					listaServicos.add(servicos);
				}
				
				operador = operadorService.suscribirActualizar(operador, linhas, listaServicos);
				
				Usuario usuario = operador.getUsuario();
				String OperadorId = operadorEdicao.getOperadorEmbarcadaId().toString();
				
				String senha = InputMessageBox.showQuestion(Labels.getLabel("limparCacheAPI.message.senha"), 
						Labels.getLabel("limparCacheAPI.title"), Messagebox.OK);
				
				CacheOperadorEmbarcada.getInstance().limparCacheOperador(OperadorId, senha, usuario);
			}
			try {
				Messagebox.show(Labels.getLabel("busquedaOperadorEmbarcada.mensage.operadorSalvo"), Labels.getLabel("busquedaOperadorEmbarcada.mensage.operadorSalvo.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				closeWindow();
			} catch (Exception e) {
			}
		} catch (Exception e) {
			try {
				log.error("Erro: ", e);
				Messagebox.show(Labels.getLabel("busquedaOperadorEmbarcada.mensage.erroAoSalvar"), Labels.getLabel("busquedaOperadorEmbarcada.mensage.naoEpossivelSalvar.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				return;
			} catch (InterruptedException e1) {
				log.error("Erro: ", e);
			}
		}
	}
	
	public void onClick$btnApagar(Event ev) {
		try {
			int resp = Messagebox.show(
					Labels.getLabel("busquedaOperadorEmbarcada.MSG.borrarPergunta"),
					Labels.getLabel("busquedaOperadorEmbarcada.MSG.borrarPergunta.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {
				
				String senha = InputMessageBox.showQuestion(Labels.getLabel("limparCacheAPI.message.senha"), 
						Labels.getLabel("limparCacheAPI.title"), Messagebox.OK);
				
				Usuario usuario = operadorEdicao.getUsuario();
				String OperadorId = operadorEdicao.getOperadorEmbarcadaId().toString();
				
				operadorService.apagar(operadorEdicao);
				
				Messagebox.show(
						Labels.getLabel("busquedaOperadorEmbarcada.MSG..borrarOK"),
						Labels.getLabel("busquedaOperadorEmbarcada.MSG.borrarPergunta.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				CacheOperadorEmbarcada.getInstance().limparCacheOperador(OperadorId, senha, usuario);
				
				closeWindow();
			}
		} catch (Exception ex) {
			log.error("Erro ao deletar: ", ex);
		}
		
	}
		
	public void onClick$btnPesquisaLinha(Event ev) {
		selectLinhas(null);
		refreshListaLinha();
	}
	
	public void onClick$btnPesquisaServico(Event ev) {
		refreshListaServico();
	}
	
	
	public void onClick$btnPesquisaUsuario(Event ev) {
		refreshLista();
	}

	public void onSelect$esquemaCorridaList(SelectEvent event) {
		if (event != null && event.getReference() != null && event.getReference().getClass() == Listitem.class) {
			event.stopPropagation();
	        Listitem item = (Listitem) event.getReference();
	        EsquemaCorrida esquemaCorrida = (EsquemaCorrida) esquemaCorridaList.getListData().get(item.getIndex());
	        
	        if (item.isSelected()) {
	        	novosServicosSelecionados.add(esquemaCorrida);
	        } else {
	        	novosServicosSelecionados.remove(esquemaCorrida);
	        }	        
		}
	}
	

	public Textbox getTxtLogin() {
		return txtLogin;
	}

	public void setTxtLogin(Textbox txtLogin) {
		this.txtLogin = txtLogin;
	}

	public MyListbox getUsuarioList() {
		return usuarioList;
	}

	public void setUsuarioList(MyListbox usuarioList) {
		this.usuarioList = usuarioList;
	}

	public Paging getPagingUsuario() {
		return pagingUsuario;
	}

	public void setPagingUsuario(Paging pagingUsuario) {
		this.pagingUsuario = pagingUsuario;
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

	public void setCmbEmpresa(Combobox cmbEmpresa) {
		this.cmbEmpresa = cmbEmpresa;
	}

	public List<Empresa> getLsEmpresas() {
		return lsEmpresas;
	}

	public void setLsEmpresas(List<Empresa> lsEmpresas) {
		this.lsEmpresas = lsEmpresas;
	}

	public Combobox getCmbClaseServicio() {
		return cmbClaseServicio;
	}

	public void setCmbClaseServicio(Combobox cmbClaseServicio) {
		this.cmbClaseServicio = cmbClaseServicio;
	}

	public List<ClaseServicio> getLsClaseServicio() {
		return lsClaseServicio;
	}

	public void setLsClaseServicio(List<ClaseServicio> lsClaseServicio) {
		this.lsClaseServicio = lsClaseServicio;
	}

	public Intbox getTxtIdLinha() {
		return txtIdLinha;
	}

	public void setTxtIdLinha(Intbox txtIdLinha) {
		this.txtIdLinha = txtIdLinha;
	}

	public Textbox getTxtDescLinha() {
		return txtDescLinha;
	}

	public void setTxtDescLinha(Textbox txtDescLinha) {
		this.txtDescLinha = txtDescLinha;
	}

	public Textbox getTxtNumeroLinha() {
		return txtNumeroLinha;
	}

	public void setTxtNumeroLinha(Textbox txtNumeroLinha) {
		this.txtNumeroLinha = txtNumeroLinha;
	}

	public Paging getPagingRuta() {
		return pagingRuta;
	}

	public void setPagingRuta(Paging pagingRuta) {
		this.pagingRuta = pagingRuta;
	}

	public MyListbox getLinhaList() {
		return linhaList;
	}

	public void setLinhaList(MyListbox linhaList) {
		this.linhaList = linhaList;
	}

	public Tabbox getTabBox() {
		return tabBox;
	}

	public void setTabBox(Tabbox tabBox) {
		this.tabBox = tabBox;
	}

	public Combobox getCmbSentido() {
		return cmbSentido;
	}

	public void setCmbSentido(Combobox cmbSentido) {
		this.cmbSentido = cmbSentido;
	}

	public List<String> getLsSentido() {
		return lsSentido;
	}

	public void setLsSentido(List<String> lsSentido) {
		this.lsSentido = lsSentido;
	}

	public Intbox getTxtIdServico() {
		return txtIdServico;
	}

	public void setTxtIdServico(Intbox txtIdServico) {
		this.txtIdServico = txtIdServico;
	}

	public Combobox getCmbMarcaServicio() {
		return cmbMarcaServicio;
	}

	public void setCmbMarcaServicio(Combobox cmbMarcaServicio) {
		this.cmbMarcaServicio = cmbMarcaServicio;
	}

	public List<Marca> getLsMarca() {
		return lsMarca;
	}

	public void setLsMarca(List<Marca> lsMarca) {
		this.lsMarca = lsMarca;
	}

	public List<Usuario> getUsuariosSelecionados() {
		return usuariosSelecionados;
	}

	public void setUsuariosSelecionados(List<Usuario> usuariosSelecionados) {
		this.usuariosSelecionados = usuariosSelecionados;
	}

	public Textbox getTxtDescServico() {
		return txtDescServico;
	}

	public void setTxtDescServico(Textbox txtDescServico) {
		this.txtDescServico = txtDescServico;
	}

	public Combobox getCmbClaseServicioServico() {
		return cmbClaseServicioServico;
	}

	public void setCmbClaseServicioServico(Combobox cmbClaseServicioServico) {
		this.cmbClaseServicioServico = cmbClaseServicioServico;
	}

	public Paging getPagingEsquemaCorrida() {
		return pagingEsquemaCorrida;
	}

	public void setPagingEsquemaCorrida(Paging pagingEsquemaCorrida) {
		this.pagingEsquemaCorrida = pagingEsquemaCorrida;
	}

	public MyListbox getEsquemaCorridaList() {
		return esquemaCorridaList;
	}

	public void setEsquemaCorridaList(MyListbox esquemaCorridaList) {
		this.esquemaCorridaList = esquemaCorridaList;
	}

	public MyComboboxPuntoVenta getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

	public void setCmbPuntoVenta(MyComboboxPuntoVenta cmbPuntoVenta) {
		this.cmbPuntoVenta = cmbPuntoVenta;
	}

	public Textbox getTxtNombUsuario() {
		return txtNombUsuario;
	}

	public void setTxtNombUsuario(Textbox txtNombUsuario) {
		this.txtNombUsuario = txtNombUsuario;
	}
	
	public Textbox getTxtNumeroServicoVirgula() {
		return txtNumeroServicoVirgula;
	}
	
	public void setTxtNumeroServicoVirgula(Textbox txtNumeroServicoVirgula) {
		this.txtNumeroServicoVirgula = txtNumeroServicoVirgula;
	}	
}