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

import java.util.ArrayList;
import java.util.Calendar;
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.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Timebox;

import com.rjconsultores.ventaboletos.entidad.ConfRestricaoCanalVenta;
import com.rjconsultores.ventaboletos.entidad.ConfRestricaoExcecao;
import com.rjconsultores.ventaboletos.entidad.ConfRestricaoOrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.ConfRestricaoPtovta;
import com.rjconsultores.ventaboletos.entidad.ConfRestricaoRutas;
import com.rjconsultores.ventaboletos.entidad.ConfRestricaoTramo;
import com.rjconsultores.ventaboletos.entidad.ConfRestricaoTramoOC;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.ConfRestricaoCanalVentaService;
import com.rjconsultores.ventaboletos.service.ConfRestricaoExcecaoService;
import com.rjconsultores.ventaboletos.service.ConfRestricaoOrgaoConcedenteService;
import com.rjconsultores.ventaboletos.service.ConfRestricaoPtovtaService;
import com.rjconsultores.ventaboletos.service.ConfRestricaoRutasService;
import com.rjconsultores.ventaboletos.service.ConfRestricaoTramoOCService;
import com.rjconsultores.ventaboletos.service.ConfRestricaoTramoService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.service.RutaSecuenciaService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.service.TipoPuntoVentaService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
import com.rjconsultores.ventaboletos.utilerias.CustomEnum;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada;
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.render.MyComboRutaRenderer;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfRestOrgaoConcedente;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfRestRuta;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfRestTramoOC;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfRestricaoExcecao;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfRestricaoPtovta;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfRestricaoTramo;

@Controller("editarConfRestricaoCanalVentaController")
@Scope("prototype")
public class EditarConfRestricaoCanalVentaController extends MyGenericForwardComposer {
	
	private static Logger log = LogManager.getLogger(EditarConfRestricaoCanalVentaController.class);

	private static final long serialVersionUID = 1L;
	@Autowired
	private ConfRestricaoCanalVentaService confRestricaoCanalVentaService;
	@Autowired
	private TipoPuntoVentaService tipoPtoVtaService;
	@Autowired
	private RutaService rutaService;
	@Autowired
	private ConfRestricaoExcecaoService confRestricaoExcecaoServide;
	@Autowired
	private ConfRestricaoPtovtaService confRestricaoPtovtaService;
	@Autowired
	private ConfRestricaoTramoService confRestricaoTramoService;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private ParadaService paradaService;
	@Autowired
	private PuntoVentaService puntoVentaService;
	@Autowired
	private OrgaoConcedenteService orgaoConcedenteService;
	@Autowired
	private ConfRestricaoOrgaoConcedenteService confRestricaoOrgaoConcedenteService;
	@Autowired
	private ConfRestricaoRutasService confRestricaoRutasService;
	@Autowired
	private ConfRestricaoTramoOCService confRestricaoTramoOCService;
	@Autowired
	private RutaSecuenciaService rutaSecuenciaService;
	
	private ConfRestricaoCanalVenta confRestricaoCanalVenta;
	private List<TipoPuntoVenta> lsTipoPtoVta;
	private List<ConfRestricaoPtovta> lsConfRestricaoPtovtaTemp;
	private List<Ruta> lsRuta;
	private List<Empresa> lsEmpresa;
	private List<ConfRestricaoTramo> lsConfRestricaoTramo;
	private List<ConfRestricaoTramo> lsConfRestricaoTramoTemp;
	private List<ConfRestricaoExcecao> lsConfRestricaoExcecaoTemp;
	private List<ConfRestricaoRutas> lsConfRestricaoRutaTemp;
	private List<ConfRestricaoRutas> lsConfRestricaoRuta;
	private List<ConfRestricaoTramoOC> lsConfRestricaoTramoOCTemp;
	private MyListbox confRestricaoCanalVentaList;
	private MyListbox excecaoDataList;
	private Button btnApagar;
	private Button btnCopiar;
	private MyComboboxParada cmbOrigen;
	private MyComboboxParada cmbDestino;
	private Combobox cmbRuta;
	private Combobox cmbTipoPtoVta;
	private Combobox cmbConfRestricaoTramoPtoVta;
	private Combobox cmbConfRestricaoTramoExcecao;
	private Combobox cmbEmpresa;
	private Datebox dtExcecaoServicio;
	private Timebox timeTempoPermitir;
	private Checkbox chkSegunda;
	private Checkbox chkTerca;
	private Checkbox chkQuarta;
	private Checkbox chkQuinta;
	private Checkbox chkSexta;
	private Checkbox chkSabado;
	private Checkbox chkDomingo;
	
	private Textbox txtDescConf;
	
	private Datebox feciniciovigencia;
	private Datebox fecfinvigencia;

	private MyComboboxPuntoVenta cmbPuntoVenta;
	private MyListbox confRestricaoPtovtaDataList;
	private MyListbox confRestricaoTramoDataList;
	
	private Combobox cmbOrgaoConcedente;	
	private List<OrgaoConcedente> lsOrgaoConcedente;
	private List<ConfRestricaoOrgaoConcedente> lsConfRestricaoOrgaoConcedenteTemp;
	private MyListbox confRestOrgaoConcedenteDataList;
	
	private Combobox cmbExcecaoRutas;
	private List<Ruta> lsRutasOrgaoConcedente;
	private MyListbox confRestRutasDataList;
	
	private Combobox cmbOrigemTramoOC;
	private Combobox cmbDestinoTramoOC;
	private List<Parada> lsParadaOC;
	private MyListbox confRestTramoOCDataList;

	public ConfRestricaoCanalVenta getConfRestricaoCanalVenta() {
		return confRestricaoCanalVenta;
	}

	public void setConfRestricaoCanalVenta(ConfRestricaoCanalVenta confRestricaoCanalVenta) {
		this.confRestricaoCanalVenta = confRestricaoCanalVenta;
	}

	public List<TipoPuntoVenta> getLsTipoPtoVta() {
		return lsTipoPtoVta;
	}

	public void setLsTipoPtoVta(List<TipoPuntoVenta> lsTipoPtoVta) {
		this.lsTipoPtoVta = lsTipoPtoVta;
	}
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		
		confRestricaoCanalVenta = (ConfRestricaoCanalVenta) Executions.getCurrent().getArg().get("confRestricaoCanalVenta");
		confRestricaoCanalVentaList = (MyListbox) Executions.getCurrent().getArg().get("confRestricaoCanalVentaList");
		
		lsTipoPtoVta = tipoPtoVtaService.obtenerTodos();
		lsEmpresa = obterEmpresasUsuarioLogadoComOpcaoTodas();
		lsConfRestricaoTramo = new ArrayList<ConfRestricaoTramo>();	
		lsConfRestricaoTramoTemp = new ArrayList<ConfRestricaoTramo>();
		lsConfRestricaoExcecaoTemp = new ArrayList<ConfRestricaoExcecao>();
		lsConfRestricaoRuta = new ArrayList<ConfRestricaoRutas>();
		lsConfRestricaoRutaTemp = new ArrayList<ConfRestricaoRutas>();
		lsConfRestricaoPtovtaTemp = new ArrayList<ConfRestricaoPtovta>();
		lsConfRestricaoTramoOCTemp = new ArrayList<ConfRestricaoTramoOC>();
		lsConfRestricaoOrgaoConcedenteTemp = new ArrayList<ConfRestricaoOrgaoConcedente>();
		
		super.doAfterCompose(comp);
		
		atualizarComboOrgaoCOncedente();

		if (!ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.MOSTRAR_EQUIVALENCIA.getDescricao())) {
			cmbEmpresa.setConstraint("no empty");
		}
		
		cmbRuta.setItemRenderer(new MyComboRutaRenderer());
		if (confRestricaoCanalVenta.getConfRestricaoCanalVentaId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
			btnCopiar.setVisible(Boolean.FALSE);
			List<ConfRestricaoPtovta> lsPtovta = new ArrayList<ConfRestricaoPtovta>();
			lsPtovta.add(confRestricaoPtovtaService.obtenerPtovtaTodos());
			confRestricaoCanalVenta.setLsConfRestricaoPtovta(lsPtovta);
			confRestricaoCanalVenta.setLsConfRestricaoTramo(lsConfRestricaoTramo);
			confRestricaoPtovtaDataList.setData(lsPtovta);

		} else {
			confRestricaoCanalVenta = confRestricaoCanalVentaService.obtenerID(confRestricaoCanalVenta.getConfRestricaoCanalVentaId());
			excecaoDataList.setData(confRestricaoCanalVenta.getLsConfRestricaoExcecao());
			lsConfRestricaoExcecaoTemp.addAll(confRestricaoCanalVenta.getLsConfRestricaoExcecao());
			confRestricaoPtovtaDataList.setData(confRestricaoCanalVenta.getLsConfRestricaoPtovta());
			confRestricaoTramoDataList.setData(confRestricaoCanalVenta.getLsConfRestricaoTramo());
			lsConfRestricaoTramo = confRestricaoCanalVenta.getLsConfRestricaoTramo();
			lsConfRestricaoTramoTemp.addAll(lsConfRestricaoTramo);
			lsConfRestricaoPtovtaTemp.addAll(confRestricaoCanalVenta.getLsConfRestricaoPtovta());
			atualizarCombosDeTramosRestritos();
			
			confRestOrgaoConcedenteDataList.setData(confRestricaoCanalVenta.getLsConfRestricaoOrgaoConcedente());
			confRestRutasDataList.setData(confRestricaoCanalVenta.getLsConfRestricaoRutas());
			lsConfRestricaoRuta = confRestricaoCanalVenta.getLsConfRestricaoRutas();
			lsConfRestricaoRutaTemp.addAll(confRestricaoCanalVenta.getLsConfRestricaoRutas());
			confRestTramoOCDataList.setData(confRestricaoCanalVenta.getLsConfRestricaoTramoOC());
			lsConfRestricaoTramoOCTemp.addAll(confRestricaoCanalVenta.getLsConfRestricaoTramoOC());
			lsConfRestricaoOrgaoConcedenteTemp.addAll(confRestricaoCanalVenta.getLsConfRestricaoOrgaoConcedente());
			
			try {
				confRestricaoCanalVenta.clonar();
			} catch (Exception e) {
				log.error(e.getMessage(), e);
			}
		}
		
		excecaoDataList.setItemRenderer(new RenderConfRestricaoExcecao());
		confRestricaoPtovtaDataList.setItemRenderer(new RenderConfRestricaoPtovta());
		confRestricaoTramoDataList.setItemRenderer(new RenderConfRestricaoTramo());
		confRestOrgaoConcedenteDataList.setItemRenderer(new RenderConfRestOrgaoConcedente());
		confRestRutasDataList.setItemRenderer(new RenderConfRestRuta());
		confRestTramoOCDataList.setItemRenderer(new RenderConfRestTramoOC());
		
		buscarListaDeLinhasPorOrgaoConcedente();
		buscarListaDeTrechosPorLinhas();
		verificarLinhaTodosSelecionada();
	}

	private void atualizarComboOrgaoCOncedente() {
		try {
			lsOrgaoConcedente = orgaoConcedenteService.obtenerTodos();
			cmbOrgaoConcedente.setModel(new ListModelList(lsOrgaoConcedente));
			cmbOrgaoConcedente.setSelectedItem(null);			
		} catch (Exception e) {
			log.error("Erro ao carregar os orgaos Concedentes: ", e);
		}
	}
	
	private List<Empresa> obterEmpresasUsuarioLogadoComOpcaoTodas() {
		List<Empresa> listaEmpresas = new ArrayList<Empresa>();
		listaEmpresas.add(empresaService.obtenerID(-1));
		listaEmpresas.addAll(UsuarioLogado.getUsuarioLogado().getEmpresa());
		return listaEmpresas;
	}

	private void atualizarCombosDeTramosRestritos() {
		cmbConfRestricaoTramoExcecao.setModel(new ListModelList(lsConfRestricaoTramo));
		cmbConfRestricaoTramoExcecao.setSelectedItem(null);
		cmbConfRestricaoTramoPtoVta.setModel(new ListModelList(lsConfRestricaoTramo));
		cmbConfRestricaoTramoExcecao.setSelectedItem(null);
	}

	public List<Ruta> getLsRuta() {
		return lsRuta;
	}

	public void setLsRuta(List<Ruta> lsRuta) {
		this.lsRuta = lsRuta;
	}
	
	private boolean clone = false;
	
	public void onClick$btnRemoverConfRestricaoTramo(Event ev) throws InterruptedException {
		ConfRestricaoTramo tramo = (ConfRestricaoTramo) confRestricaoTramoDataList.getSelected();
		if (tramo != null) {
			//Para evitar erro na hora de excluir registros da lista de um registro copiado
			if(tramo.getConfRestricaoTramoId() != null) {
				lsConfRestricaoTramo.remove(tramo);
				lsConfRestricaoTramoTemp.remove(tramo);
				confRestricaoTramoService.borrar(tramo);				
			} else {
				confRestricaoCanalVenta.getLsConfRestricaoTramo().remove(tramo);
				confRestricaoTramoDataList.removeItem(tramo);
				lsConfRestricaoTramo.remove(tramo);
			}
			
			confRestricaoTramoDataList.removeItem(tramo);
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.selecionarrestricaoPtovta"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
		atualizarCombosDeTramosRestritos();
	}
	
	public void onClick$btnAdicionarConfRestricaoTramo(Event ev) {
		cmbOrigen.getValue(true);
		cmbDestino.getValue(true);
		ConfRestricaoTramo tramo = new ConfRestricaoTramo();
		if(cmbTipoPtoVta.getSelectedItem()!= null) {
			tramo.setTipoPuntoVenta((TipoPuntoVenta) cmbTipoPtoVta.getSelectedItem().getValue());
		}else {
			tramo.setTipoPuntoVenta(null);
		}
		
		if(cmbOrigen.getSelectedItem()!= null) {
			tramo.setOrigem((Parada) cmbOrigen.getSelectedItem().getValue());
		}
		if(cmbDestino.getSelectedItem()!= null) {
			tramo.setDestino((Parada) cmbDestino.getSelectedItem().getValue());
		}
		if(timeTempoPermitir!= null) {
			tramo.setTempoPermitir(timeTempoPermitir.getValue());
		}
		tramo.setSegunda(chkSegunda.isChecked());
		tramo.setTerca(chkTerca.isChecked());
		tramo.setQuarta(chkQuarta.isChecked());
		tramo.setQuinta(chkQuinta.isChecked());
		tramo.setSexta(chkSexta.isChecked());
		tramo.setSabado(chkSabado.isChecked());
		tramo.setDomingo(chkDomingo.isChecked());
		
		tramo.setConfRestricaoCanalVenta(confRestricaoCanalVenta);
		tramo.setActivo(Boolean.TRUE);
		tramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		tramo.setFecmodif(Calendar.getInstance().getTime());
		
		if(!lsConfRestricaoTramo.contains(tramo)) {
			lsConfRestricaoTramo.add(tramo);
			lsConfRestricaoTramoTemp.add(tramo);
			confRestricaoTramoDataList.addItemNovo(tramo);
			confRestricaoCanalVenta.setLsConfRestricaoTramo(lsConfRestricaoTramo);
			atualizarCombosDeTramosRestritos();
		}
	}

	public void onClick$btnCopiar(Event ev) throws CloneNotSupportedException, InterruptedException {
		
		if(!clone){
			ConfRestricaoCanalVenta confRestricaoCanalVentaNovo =  confRestricaoCanalVenta.getNewConfRestricaoCanalVenta(confRestricaoCanalVenta);
			
			Constraint constraint = txtDescConf.getConstraint();
			txtDescConf.setConstraint("");
			confRestricaoCanalVentaNovo.setDescConfRestricaoCanalVenta("");
			txtDescConf.setValue("");
			txtDescConf.setConstraint(constraint);
			clone = Boolean.TRUE;
			
			copiarListasConfRestricaoCanalVenta(confRestricaoCanalVentaNovo);
			
			confRestricaoCanalVenta = confRestricaoCanalVentaNovo;
			
		}
	}

	/**
	 * @param confRestricaoCanalVentaNovo
	 */
	protected void copiarListasConfRestricaoCanalVenta(ConfRestricaoCanalVenta confRestricaoCanalVentaNovo) {
		copiarConfRestricaoTramos(confRestricaoCanalVentaNovo);
		
		copiarConfRestricaoPtoVta(confRestricaoCanalVentaNovo);
		
		copiarConfRestricaoExcecao(confRestricaoCanalVentaNovo);
	}

	/**
	 * @param confRestricaoCanalVentaNovo
	 */
	protected void copiarConfRestricaoExcecao(ConfRestricaoCanalVenta confRestricaoCanalVentaNovo) {
		List<ConfRestricaoExcecao> listaAuxExcecao = confRestricaoCanalVentaNovo.getLsConfRestricaoExcecao();			
		confRestricaoCanalVentaNovo.setLsConfRestricaoExcecao(new ArrayList<ConfRestricaoExcecao>());
		
		for (ConfRestricaoExcecao restricaoExcecao : listaAuxExcecao){
			excecaoDataList.removeItem(restricaoExcecao);
			restricaoExcecao.setConfRestricaoExcecaoId(null);
			restricaoExcecao.setActivo(Boolean.TRUE);
			restricaoExcecao.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			restricaoExcecao.setFecmodif(Calendar.getInstance().getTime());
			
			ConfRestricaoTramo tramo = restricaoExcecao.getConfRestricaoTramo();
			if(tramo!= null) {
				tramo.setConfRestricaoTramoId(null);
				restricaoExcecao.setConfRestricaoTramo(tramo);
				tramo.setConfRestricaoCanalVenta(confRestricaoCanalVentaNovo);
			}
			restricaoExcecao.setConfRestricaoCanalVenta(confRestricaoCanalVentaNovo);
			confRestricaoCanalVentaNovo.getLsConfRestricaoExcecao().add(restricaoExcecao);
			excecaoDataList.addItemNovo(restricaoExcecao);
		}
	}

	/**
	 * @param confRestricaoCanalVentaNovo
	 */
	protected void copiarConfRestricaoPtoVta(ConfRestricaoCanalVenta confRestricaoCanalVentaNovo) {
		List<ConfRestricaoPtovta> listaAuxPtoVta = confRestricaoCanalVentaNovo.getLsConfRestricaoPtovta();			
		confRestricaoCanalVentaNovo.setLsConfRestricaoPtovta(new ArrayList<ConfRestricaoPtovta>());			
		
		for (ConfRestricaoPtovta restricaoPtovta : listaAuxPtoVta){
			confRestricaoPtovtaDataList.removeItem(restricaoPtovta);
			restricaoPtovta.setConfRestricaoPtovtaId(null);
			restricaoPtovta.setActivo(Boolean.TRUE);
			restricaoPtovta.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			restricaoPtovta.setFecmodif(Calendar.getInstance().getTime());			
			
			restricaoPtovta.setConfRestricaoCanalVenta(confRestricaoCanalVentaNovo);
			ConfRestricaoTramo tramo = restricaoPtovta.getConfRestricaoTramo();
			if(tramo!= null) {
				tramo.setConfRestricaoTramoId(null);
				restricaoPtovta.setConfRestricaoTramo(tramo);
				tramo.setConfRestricaoCanalVenta(confRestricaoCanalVentaNovo);
			}
			confRestricaoCanalVentaNovo.getLsConfRestricaoPtovta().add(restricaoPtovta);
			confRestricaoPtovtaDataList.addItemNovo(restricaoPtovta);
		}
	}

	/**
	 * @param confRestricaoCanalVentaNovo
	 */
	protected void copiarConfRestricaoTramos(ConfRestricaoCanalVenta confRestricaoCanalVentaNovo) {
		List<ConfRestricaoTramo> listaAuxTramo = confRestricaoCanalVentaNovo.getLsConfRestricaoTramo();			
		confRestricaoCanalVentaNovo.setLsConfRestricaoTramo(new ArrayList<ConfRestricaoTramo>());
		
		for (ConfRestricaoTramo restricaoTramo : listaAuxTramo){
			confRestricaoTramoDataList.removeItem(restricaoTramo);
			restricaoTramo.setConfRestricaoTramoId(null);
			restricaoTramo.setConfRestricaoCanalVenta(confRestricaoCanalVentaNovo);
			restricaoTramo.setActivo(Boolean.TRUE);
			restricaoTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			restricaoTramo.setFecmodif(Calendar.getInstance().getTime());
			
			confRestricaoCanalVentaNovo.getLsConfRestricaoTramo().add(restricaoTramo);
			confRestricaoTramoDataList.addItemNovo(restricaoTramo);
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		//Soluçãoo momentanea para atualizar somente a adm - não APAGAR
//		if( (cmbRuta.getModel() == null || cmbRuta.getModel().getSize() <= 0) && txtServico.getValue() == null) {
//			Messagebox.show(
//					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.servicoOuRutaObrigatorios"),
//					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
//					Messagebox.OK, Messagebox.INFORMATION);
//			return;
//		}
		cmbEmpresa.getValue();
		
		Date dataDe = feciniciovigencia.getValue();
		Date dataAte = fecfinvigencia.getValue();
		dataAte.setSeconds(59);
		
		if(dataDe.after(dataAte)){
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.vigenciaInvalida"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			return;
		}
		
		if(cmbRuta.getValue().toString().trim().equals("")) {
			confRestricaoCanalVenta.setRuta(null);
		}			
		
		for (ConfRestricaoTramo confRestricaoTramo : lsConfRestricaoTramo) {
			if(validaOrigemEDestinoDaRuta(confRestricaoTramo.getOrigem(), confRestricaoTramo.getDestino())) {
				return;
			}
		}

		try {
			if(confRestricaoCanalVenta.getLsConfRestricaoTramo() != null && confRestricaoCanalVenta.getLsConfRestricaoTramo().isEmpty()) {
				Messagebox.show(
						Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.semTramosSelecionados"),
						Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				return;
			}else {
				mantendoACompatibilidade();
			}
			
			confRestricaoCanalVenta.setLsConfRestricaoTramo(lsConfRestricaoTramoTemp);
			confRestricaoCanalVenta.setLsConfRestricaoExcecao(lsConfRestricaoExcecaoTemp);
			confRestricaoCanalVenta.setLsConfRestricaoRutas(lsConfRestricaoRutaTemp);
			confRestricaoCanalVenta.setLsConfRestricaoOrgaoConcedente(lsConfRestricaoOrgaoConcedenteTemp);
			confRestricaoCanalVenta.setLsConfRestricaoPtovta(lsConfRestricaoPtovtaTemp);
			confRestricaoCanalVenta.setLsConfRestricaoTramoOC(lsConfRestricaoTramoOCTemp);
			
			if (!confRestricaoCanalVenta.getLsConfRestricaoPtovta().isEmpty()) {
				for (ConfRestricaoPtovta cre : confRestricaoCanalVenta.getLsConfRestricaoPtovta()) {
					cre.setConfRestricaoCanalVenta(confRestricaoCanalVenta);
				}
			}
			
			zerarHoraVigenciaInicial();
			confRestricaoCanalVentaService.suscribirActualizar(confRestricaoCanalVenta);
			confRestricaoCanalVentaList.updateItem(confRestricaoCanalVenta);

			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.suscribirOK"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();

		} catch (BusinessException e) {
			Messagebox.show(
					e.getMessage(),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		}
	}

	/**
	 * Metodo para manter a compatibilidade com o funcionamento anterior.
	 * TODO Deve ser removido assim que esta versão estiver em produçõo em todos os clientes.
	 * 
	 */
	private void mantendoACompatibilidade() {
		confRestricaoCanalVenta.setTipoPuntoVenta(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getTipoPuntoVenta());
		confRestricaoCanalVenta.setTempoPermitir(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getTempoPermitir());
		confRestricaoCanalVenta.setSegunda(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getSegunda());
		confRestricaoCanalVenta.setTerca(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getTerca());
		confRestricaoCanalVenta.setQuarta(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getQuarta());
		confRestricaoCanalVenta.setQuinta(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getQuinta());
		confRestricaoCanalVenta.setSexta(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getSexta());
		confRestricaoCanalVenta.setSabado(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getSabado());
		confRestricaoCanalVenta.setDomingo(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getDomingo());
		confRestricaoCanalVenta.setOrigem(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getOrigem());
		confRestricaoCanalVenta.setDestino(confRestricaoCanalVenta.getLsConfRestricaoTramo().get(0).getDestino());
	}

	private Boolean validaOrigemEDestinoDaRuta(Parada origen, Parada destino) throws InterruptedException {
		Integer numSecuenciaDestino = -1;
		Integer numSecuenciaOrigen = -1;
		
		
		if (confRestricaoCanalVenta.getRuta() != null && !confRestricaoCanalVenta.getRuta().getRutaId().equals(-1)) {

			if (origen != null && origen.getParadaId() != -1) {
				numSecuenciaOrigen = rutaService.getNumSecuenciaOrigen(confRestricaoCanalVenta.getRuta().getRutaId(), origen.getParadaId());
				if (numSecuenciaOrigen == -1) { 
					Messagebox.show(
							Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.OrigenInvalida"),
							Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
					return true;
				}
			}

			if (destino != null && destino.getParadaId() != -1) {
				numSecuenciaDestino = rutaService.getNumSecuenciaDestino(confRestricaoCanalVenta.getRuta().getRutaId(), destino.getParadaId());
				if (numSecuenciaDestino == -1) {
					Messagebox.show(
							Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.destinoInvalido"),
							Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
					return true;
				}
			}

			if (numSecuenciaOrigen != -1 && numSecuenciaDestino != -1) {
				if (numSecuenciaOrigen > numSecuenciaDestino) {
					Messagebox.show(
							Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.sentidoInvalido"),
							Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
					return true;
				}
			}
		}
		return false;
	}
	
	private void zerarHoraVigenciaInicial(){
		confRestricaoCanalVenta.setFeciniciovigencia(DateUtil.inicioFecha(confRestricaoCanalVenta.getFeciniciovigencia()));
	}

	public void onClick$btnApagar(Event ev) throws InterruptedException {
		Integer resp = Messagebox.show(
				Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.borrarPergunta"),
				Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
				Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

		if (resp.equals(Messagebox.YES)) {
			confRestricaoCanalVentaService.borrar(confRestricaoCanalVenta);

			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.borrarOK"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);

			confRestricaoCanalVentaList.removeItem(confRestricaoCanalVenta);

			closeWindow();
		}
	}

	public void onClick$btnAddRestricaoPtovta(Event ev) throws InterruptedException {

		if (cmbConfRestricaoTramoPtoVta.getSelectedItem() != null) {
			ConfRestricaoTramo tramoRestrito = (ConfRestricaoTramo) cmbConfRestricaoTramoPtoVta.getSelectedItem().getValue();
			
			PuntoVenta pv = null;
			if(cmbPuntoVenta.getSelectedItem() != null) {
				pv = (PuntoVenta) cmbPuntoVenta.getSelectedItem().getValue();								
			} else  {
				pv = puntoVentaService.obtenerID(-1);
			}
			
			ConfRestricaoPtovta ptovta = new ConfRestricaoPtovta();
			ptovta.setPuntoVenta(pv);
			ptovta.setConfRestricaoCanalVenta(confRestricaoCanalVenta);
			ptovta.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			ptovta.setFecmodif(Calendar.getInstance().getTime());
			ptovta.setConfRestricaoTramo(tramoRestrito);
			ptovta.setActivo(Boolean.TRUE);

			if (confRestricaoCanalVenta.getLsConfRestricaoPtovta() == null) {
				confRestricaoCanalVenta.setLsConfRestricaoPtovta(new ArrayList<ConfRestricaoPtovta>());
			}
			
			boolean ptovtaJaCadastrado = confRestricaoCanalVenta.getLsConfRestricaoPtovta().contains(ptovta);
			
			if (!ptovtaJaCadastrado){
				confRestricaoCanalVenta.getLsConfRestricaoPtovta().add(ptovta);
				confRestricaoPtovtaDataList.addItemNovo(ptovta);
				lsConfRestricaoPtovtaTemp.add(ptovta);
			} else {
				Messagebox.show(
						Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.restricaoPtovtaJaCadastrada"),
						Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}
			
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.restricaoPtovta"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}

	public void onClick$btnRemoveRestricaoPtovta(Event ev) throws InterruptedException {
		ConfRestricaoPtovta rPtovta = (ConfRestricaoPtovta) confRestricaoPtovtaDataList.getSelected();
		if (rPtovta != null) {
			//Para evitar erro na hora de excluir registros da lista de um registro copiado
			if(rPtovta.getConfRestricaoPtovtaId() != null) {
				lsConfRestricaoPtovtaTemp.remove(rPtovta);
				confRestricaoPtovtaService.borrar(rPtovta);
			} else {
				confRestricaoCanalVenta.getLsConfRestricaoPtovta().remove(rPtovta);
			}
			
			confRestricaoPtovtaDataList.removeItem(rPtovta);
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.selecionarrestricaoPtovta"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}

	public void onClick$btnAdicionarExcecao(Event ev) throws InterruptedException {
		Date dataExcecao = dtExcecaoServicio.getValue();

		if (dataExcecao != null && cmbConfRestricaoTramoExcecao.getSelectedItem()!= null) {
			ConfRestricaoTramo tramoRestrito = (ConfRestricaoTramo) cmbConfRestricaoTramoExcecao.getSelectedItem().getValue();
			ConfRestricaoExcecao confRestricaoExcecao = new ConfRestricaoExcecao();
			confRestricaoExcecao.setFecExcecao(dataExcecao);
			confRestricaoExcecao.setConfRestricaoCanalVenta(confRestricaoCanalVenta);
			confRestricaoExcecao.setActivo(Boolean.TRUE);
			confRestricaoExcecao.setFecmodif(Calendar.getInstance().getTime());
			confRestricaoExcecao.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			confRestricaoExcecao.setConfRestricaoTramo(tramoRestrito);

			if (confRestricaoCanalVenta.getLsConfRestricaoExcecao() == null) {
				confRestricaoCanalVenta.setLsConfRestricaoExcecao(new ArrayList<ConfRestricaoExcecao>());
			}
			if(!confRestricaoCanalVenta.getLsConfRestricaoExcecao().contains(confRestricaoExcecao)) {
				confRestricaoCanalVenta.getLsConfRestricaoExcecao().add(confRestricaoExcecao);
				excecaoDataList.addItemNovo(confRestricaoExcecao);
				lsConfRestricaoExcecaoTemp.add(confRestricaoExcecao);
			}

			dtExcecaoServicio.setValue(null);
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.informaDataExcecao"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}

	public void onClick$btnRemoverExcecao(Event ev) throws InterruptedException {
		ConfRestricaoExcecao confRestricaoExcecao = (ConfRestricaoExcecao) excecaoDataList.getSelected();
		if (confRestricaoExcecao != null) {
			//Para evitar erro na hora de excluir registros da lista de um registro copiado
			if(confRestricaoExcecao .getConfRestricaoExcecaoId() != null) {
				lsConfRestricaoExcecaoTemp.remove(confRestricaoExcecao);
				confRestricaoExcecaoServide.borrar(confRestricaoExcecao);
			} else {
				confRestricaoCanalVenta.getLsConfRestricaoExcecao().remove(confRestricaoExcecao);
			}
			
			excecaoDataList.removeItem(confRestricaoExcecao);
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.selecionarExcecao"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}

	public List<Empresa> getLsEmpresa() {
		return lsEmpresa;
	}

	public void setLsEmpresa(List<Empresa> lsEmpresa) {
		this.lsEmpresa = lsEmpresa;
	}
	
	public void onChange$cmbRuta(Event ev) throws InterruptedException {
		verificarLinhaTodosSelecionada();		
	}

	private void verificarLinhaTodosSelecionada() {
		Ruta rutaSelecionada = null;
		
		if(cmbRuta.getSelectedItem() != null) {
			rutaSelecionada =  (Ruta) cmbRuta.getSelectedItem().getValue();
		}
		
		if((confRestricaoCanalVenta.getRuta() != null && confRestricaoCanalVenta.getRuta().getRutaId() == -1) || (rutaSelecionada != null && rutaSelecionada.getRutaId().equals(-1))) {
			Parada todos = paradaService.obtenerID(-1);
			
			cmbOrigen.setComboItemByParada(todos);
			cmbDestino.setComboItemByParada(todos);
			
			cmbOrigen.setDisabled(true);
			cmbDestino.setDisabled(true);
			
		} else {
			cmbOrigen.setDisabled(false);
			cmbDestino.setDisabled(false);
		}
	}

	public void onClick$btnAddOrgaoConcedente(Event ev) throws InterruptedException {

		if (cmbOrgaoConcedente.getSelectedItem() != null) {
			OrgaoConcedente orgaoConcedente = (OrgaoConcedente) cmbOrgaoConcedente.getSelectedItem().getValue();
			
			
			ConfRestricaoOrgaoConcedente restOrgaoConcedente = new ConfRestricaoOrgaoConcedente();
			restOrgaoConcedente.setConfRestricaoCanalVenta(confRestricaoCanalVenta);
			restOrgaoConcedente.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			restOrgaoConcedente.setFecmodif(Calendar.getInstance().getTime());
			restOrgaoConcedente.setOrgaoConcedente(orgaoConcedente);
			restOrgaoConcedente.setActivo(Boolean.TRUE);

			if (confRestricaoCanalVenta.getLsConfRestricaoOrgaoConcedente() == null) {
				confRestricaoCanalVenta.setLsConfRestricaoOrgaoConcedente(new ArrayList<ConfRestricaoOrgaoConcedente>());
			}
			
			boolean orgaoConcedenteJaCadastrado = confRestricaoCanalVenta.getLsConfRestricaoOrgaoConcedente().contains(restOrgaoConcedente);
			
			if (!orgaoConcedenteJaCadastrado){
				confRestricaoCanalVenta.getLsConfRestricaoOrgaoConcedente().add(restOrgaoConcedente);
				confRestOrgaoConcedenteDataList.addItemNovo(restOrgaoConcedente);
				lsConfRestricaoOrgaoConcedenteTemp.add(restOrgaoConcedente);
				buscarListaDeLinhasPorOrgaoConcedente();
			} else {
				Messagebox.show(
						Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.restricaoOrgaoConcedenteJaCadastrada"),
						Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}
			
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.restricaoOrgaoConcedente"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}
	
	public void onClick$btnRemoveOrgaoConcedente(Event ev) throws InterruptedException {
		ConfRestricaoOrgaoConcedente restOrgaoConcedente = (ConfRestricaoOrgaoConcedente) confRestOrgaoConcedenteDataList.getSelected();
		if (restOrgaoConcedente != null) {
			//Para evitar erro na hora de excluir registros da lista de um registro copiado
			if(restOrgaoConcedente.getConfRestOrgaoConcedenteId() != null) {
				lsConfRestricaoOrgaoConcedenteTemp.remove(restOrgaoConcedente);
				confRestricaoOrgaoConcedenteService.borrar(restOrgaoConcedente);
			} else {
				confRestricaoCanalVenta.getLsConfRestricaoOrgaoConcedente().remove(restOrgaoConcedente);
			}
			 
			confRestOrgaoConcedenteDataList.removeItem(restOrgaoConcedente);
			buscarListaDeLinhasPorOrgaoConcedente();
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.selecionarrestricaoPtovta"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}
			
	private void buscarListaDeLinhasPorOrgaoConcedente() {
		try {
			List<Ruta> rutasAux = new ArrayList<Ruta>();
			if( confRestricaoCanalVenta.getLsConfRestricaoOrgaoConcedente() != null) {
				for(ConfRestricaoOrgaoConcedente confOrgao : confRestricaoCanalVenta.getLsConfRestricaoOrgaoConcedente()) {
					List<Ruta> rutasPorOrgao = new ArrayList<Ruta>();
					if(confOrgao.getOrgaoConcedente().getOrgaoConcedenteId().equals(-1)) {
						rutasPorOrgao = rutaService.obtenerTodos();
						rutasAux.addAll(rutasPorOrgao);
						break;
					} else {
						rutasPorOrgao = rutaService.buscaRutasFromOrgao(confOrgao.getOrgaoConcedente());
					}
					rutasAux.addAll(rutasPorOrgao);
				}
			}
			
			Ruta rutaTodos = rutaService.obtenerID(-1);
			
			if(!rutasAux.isEmpty() && !rutasAux.contains(rutaTodos)) {
				rutasAux.add(rutaTodos);
			}
			
			lsRutasOrgaoConcedente = new ArrayList<Ruta>();
			lsRutasOrgaoConcedente.addAll(rutasAux);
			
			cmbExcecaoRutas.setModel(new ListModelList(lsRutasOrgaoConcedente));
			cmbExcecaoRutas.setSelectedItem(null);
		} catch (Exception e) {
			log.error("Erro ao buscar linhas por orgao concedente: ", e);
		}
	}

	private void buscarListaDeTrechosPorLinhas() {
		try {
			List<Parada> tramosAux = new ArrayList<Parada>();
			
			if(confRestricaoCanalVenta.getLsConfRestricaoRutas() != null) {
				
				//Se estiver escolhido todas as linhas busca todos os trechos dos Orgaos concedentes
				if(existeRutaTodos(confRestricaoCanalVenta.getLsConfRestricaoRutas())) {
					
					for(Ruta ruta : lsRutasOrgaoConcedente) {
						buscarTrechos(tramosAux, ruta);
					}
					
				} else {
					for(ConfRestricaoRutas confOrgao : confRestricaoCanalVenta.getLsConfRestricaoRutas()) {
						buscarTrechos(tramosAux, confOrgao.getRuta());
					}					
				}
				
			}
			
			lsParadaOC = new ArrayList<Parada>();
			lsParadaOC.addAll(tramosAux);
			
			cmbOrigemTramoOC.setModel(new ListModelList(lsParadaOC));
			cmbOrigemTramoOC.setSelectedItem(null);
			
			cmbDestinoTramoOC.setModel(new ListModelList(lsParadaOC));
			cmbDestinoTramoOC.setSelectedItem(null);
		} catch (Exception e) {
			log.error("Erro ao buscar trechos por linha:  ", e);
		}
	}

	private boolean existeRutaTodos(List<ConfRestricaoRutas> lsConfRestricaoRutas) {
		try {
			Ruta rutaTodos = rutaService.obtenerID(-1);
			
			for(ConfRestricaoRutas conf : lsConfRestricaoRutas) {
				if(rutaTodos.equals(conf.getRuta())) {
					return true;
				}
			}
		} catch (Exception e) {
			log.error("Erro ao buscar ruta todos", e);
		}
		return false;
	}

	private void buscarTrechos(List<Parada> tramosAux, Ruta ruta) {
		List<RutaSecuencia> rutasSequencia = rutaSecuenciaService.buscarSecuenciaOrdenado(ruta);
		
		for(RutaSecuencia rt : rutasSequencia ) {					
			if(!tramosAux.contains(rt.getTramo().getOrigem())) {
				tramosAux.add(rt.getTramo().getOrigem());
			}	
			
			if(!tramosAux.contains(rt.getTramo().getDestino())) {
				tramosAux.add(rt.getTramo().getDestino());
			}	
		}
	}
	
	public void onClick$btnAddRuta(Event ev) throws InterruptedException {

		if (cmbExcecaoRutas.getSelectedItem() != null) {
			Ruta ruta = (Ruta) cmbExcecaoRutas.getSelectedItem().getValue();
			
			
			ConfRestricaoRutas restRutas = new ConfRestricaoRutas();
			restRutas.setConfRestricaoCanalVenta(confRestricaoCanalVenta);
			restRutas.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			restRutas.setFecmodif(Calendar.getInstance().getTime());
			restRutas.setRuta(ruta);
			restRutas.setActivo(Boolean.TRUE);

			if (confRestricaoCanalVenta.getLsConfRestricaoRutas() == null) {
				confRestricaoCanalVenta.setLsConfRestricaoRutas(new ArrayList<ConfRestricaoRutas>());
			}
			
			boolean rutaJaCadastrado = confRestricaoCanalVenta.getLsConfRestricaoRutas().contains(restRutas);
			
			if (!rutaJaCadastrado){
				confRestricaoCanalVenta.getLsConfRestricaoRutas().add(restRutas);
				confRestRutasDataList.addItemNovo(restRutas);
				lsConfRestricaoRuta.add(restRutas);
				lsConfRestricaoRutaTemp.add(restRutas);
				buscarListaDeTrechosPorLinhas();
			} else {
				Messagebox.show(
						Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.restricaoRutaJaCadastrada"),
						Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}
			
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.restricaoOrgaoConcedente"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}
	
	public void onClick$btnRemoveRuta(Event ev) throws InterruptedException {
		ConfRestricaoRutas restRutas = (ConfRestricaoRutas) confRestRutasDataList.getSelected();
		if (restRutas != null) {
			//Para evitar erro na hora de excluir registros da lista de um registro copiado
			if(restRutas.getConfRestRutasId() != null) {
				lsConfRestricaoRuta.remove(restRutas);
				restRutas.setFecmodif(Calendar.getInstance().getTime());
				restRutas.setActivo(Boolean.FALSE);
				restRutas.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				confRestricaoRutasService.borrar(restRutas);
				lsConfRestricaoRutaTemp.remove(restRutas);
			} else {
				confRestricaoCanalVenta.getLsConfRestricaoRutas().remove(restRutas);
			}
			 
			confRestRutasDataList.removeItem(restRutas);
			buscarListaDeTrechosPorLinhas();
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.selecionarrestricaoRuta"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}
	
	public void onClick$btnAddTrechoOC(Event ev) throws InterruptedException {

		if (cmbOrigemTramoOC.getSelectedItem() != null && cmbDestinoTramoOC.getSelectedItem() != null ) {
			Parada origem = (Parada) cmbOrigemTramoOC.getSelectedItem().getValue();
			Parada destino = (Parada) cmbDestinoTramoOC.getSelectedItem().getValue();
			
			
			ConfRestricaoTramoOC restTramo = new ConfRestricaoTramoOC();
			restTramo.setConfRestricaoCanalVenta(confRestricaoCanalVenta);
			restTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			restTramo.setFecmodif(Calendar.getInstance().getTime());
			restTramo.setOrigem(origem);
			restTramo.setDestino(destino);
			restTramo.setActivo(Boolean.TRUE);

			if (confRestricaoCanalVenta.getLsConfRestricaoTramoOC() == null) {
				confRestricaoCanalVenta.setLsConfRestricaoTramoOC(new ArrayList<ConfRestricaoTramoOC>());
			}
			
			boolean rutaJaCadastrado = confRestricaoCanalVenta.getLsConfRestricaoTramoOC().contains(restTramo);
			
			if (!rutaJaCadastrado){
				confRestricaoCanalVenta.getLsConfRestricaoTramoOC().add(restTramo);
				confRestTramoOCDataList.addItemNovo(restTramo);
				lsConfRestricaoTramoOCTemp.add(restTramo);
			} else {
				Messagebox.show(
						Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.restricaoTramoJaCadastrada"),
						Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}
			
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.restricaoTrechoOC"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}
	
	public void onClick$btnRemoveTrechoOC(Event ev) throws InterruptedException {
		ConfRestricaoTramoOC restTrechoOC = (ConfRestricaoTramoOC) confRestTramoOCDataList.getSelected();
		if (restTrechoOC != null) {
			//Para evitar erro na hora de excluir registros da lista de um registro copiado
			if(restTrechoOC.getConfRestTramoOCId() != null) {
				lsConfRestricaoTramoOCTemp.remove(restTrechoOC);
				confRestricaoTramoOCService.borrar(restTrechoOC);
			} else {
				confRestricaoCanalVenta.getLsConfRestricaoTramoOC().remove(restTrechoOC);
			}
			 
			confRestTramoOCDataList.removeItem(restTrechoOC);
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfRestricaoCanalVentaController.MSG.selecionarrestricaoTrechoOC"),
					Labels.getLabel("editarConfRestricaoCanalVentaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}
}
