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

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

import org.apache.commons.collections.CollectionUtils;
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.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Paging;

import com.rjconsultores.ventaboletos.entidad.CasetaPeaje;
import com.rjconsultores.ventaboletos.entidad.CasetaPeajeExcepcion;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.PrecioFixoPedagio;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.service.CasetaPeajeExcepcionService;
import com.rjconsultores.ventaboletos.service.CasetaPeajeService;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.service.PrecioFixoPedagioService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;
import com.rjconsultores.ventaboletos.web.utilerias.menu.item.tarifas.constantes.ConstantesGenericas;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPrecoFixoPedagio;

@Controller("editarCasetaPeajeController")
@Scope("prototype")
@SuppressWarnings("serial")
public class EditarCasetaPeajeController extends MyGenericForwardComposer {

	@Autowired
	private CasetaPeajeService casetaPeajeService;
	@Autowired
	private CasetaPeajeExcepcionService casetaPeajeExcepcionService;
	private CasetaPeaje casetaPeaje;
	private MyListbox casetaPeajeList;
	private MyListbox casetaPeajeExcepcionList;
	private MyListbox lsPrecoFixoPedagio;
	private Button btnApagar;
	private MyTextbox descricaoPracaPedagio;
	
	private MyTextboxDecimal quantiaIda;
	private MyTextboxDecimal quantiaVolta;
	private MyTextboxDecimal valorFixo;
	private static final Logger logger = LogManager.getLogger(EditarCasetaPeajeController.class);
	private List<CasetaPeajeExcepcion> lsCasetaPeajeExcepcion = new ArrayList<CasetaPeajeExcepcion>();;
	private List<CasetaPeajeExcepcion> casetaPeajeExcepcionToDelete = new ArrayList<CasetaPeajeExcepcion>();
	@Autowired
    private transient PagedListWrapper<PrecioFixoPedagio> plwPrecoFixoPedagio;	
	private Paging pagingPrecoFixoPedagio;
	
	@Autowired
	private OrgaoConcedenteService orgaoConcedenteService;
	
	@Autowired
	private ClaseServicioService claseServicioService;
	
	@Autowired
	private PrecioFixoPedagioService precioFixoPedagioService;
	
	@Autowired
	private CasetaPeajeService casetaPaejeService;
	
	private Combobox cmbOrgaoConcedente;
	private Combobox cmbClaseServicio;
	private List<OrgaoConcedente> lsOrgaoConcedente;
	private List<ClaseServicio> lsClaseServicio;
	private PrecioFixoPedagio precioEdicao = new PrecioFixoPedagio();
	
	
	

	public Combobox getCmbOrgaoConcedente() {
		return cmbOrgaoConcedente;
	}

	public void setCmbOrgaoConcedente(Combobox cmbOrgaoConcedente) {
		this.cmbOrgaoConcedente = cmbOrgaoConcedente;
	}

	public Combobox getCmbClaseServicio() {
		return cmbClaseServicio;
	}

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

	public List<OrgaoConcedente> getLsOrgaoConcedente() {
		return lsOrgaoConcedente;
	}

	public void setLsOrgaoConcedente(List<OrgaoConcedente> lsOrgaoConcedente) {
		this.lsOrgaoConcedente = lsOrgaoConcedente;
	}

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

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

	private CasetaPeajeExcepcion casetaPeajeExcepcion;
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);	
		
		lsOrgaoConcedente = orgaoConcedenteService.obtenerTodos();
		lsClaseServicio = claseServicioService.obtenerTodos();
		casetaPeaje = (CasetaPeaje) Executions.getCurrent().getArg().get("casetaPeaje");
		if(casetaPeaje == null){
			casetaPeaje = new CasetaPeaje();
		}
		casetaPeajeList = (MyListbox) Executions.getCurrent().getArg().get("casetaPeajeList");
		
			
		lsPrecoFixoPedagio.setItemRenderer(new RenderPrecoFixoPedagio());
        lsPrecoFixoPedagio.addEventListener(ConstantesGenericas.EVENT_ON_DOUBLE_CLICK, new EventListener() {
			
			@Override
			public void onEvent(Event arg0) throws Exception {
				precioEdicao = (PrecioFixoPedagio) lsPrecoFixoPedagio.getSelected();
				if(precioEdicao!= null){
					preencheFormPrecoFixo(precioEdicao);	
				}
							
			}
		});
		refreshLista();
		lsCasetaPeajeExcepcion = casetaPeaje.getLsCasetaPeajeExcepcion();
		
		
		
//		
//		casetaPeajeExcepcionList.setItemRenderer(new RenderCasetaPeajeExcepcion());
//		casetaPeajeExcepcionList.setData(lsCasetaPeajeExcepcion);
		
		if(casetaPeaje.getCasetaPeajeId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		}
		
		carregarValores(casetaPeaje);
		
		descricaoPracaPedagio.focus();
	}
	private void preencheFormPrecoFixo(PrecioFixoPedagio precioEdicao){
		cmbClaseServicio.setValue(precioEdicao.getClasseId().getDescclase());
		cmbOrgaoConcedente.setValue(precioEdicao.getOrgaoConcedenteId().getDescOrgao());
		valorFixo.setValue(precioEdicao.getValorFixo().toString().replace(".", ","));
	}
	private void limparFormPrecoFixo(){
		cmbClaseServicio.setValue("");
		cmbOrgaoConcedente.setValue("");
		valorFixo.setValue("");
	}
	private void  refreshLista(){
		HibernateSearchObject<PrecioFixoPedagio> pesquisaPrecoFixoPedagio = new HibernateSearchObject<PrecioFixoPedagio>(PrecioFixoPedagio.class, pagingPrecoFixoPedagio.getPageSize());
		pesquisaPrecoFixoPedagio.addFilterEqual("activo", true);
		if(casetaPeaje.getCasetaPeajeId() == null){
			pesquisaPrecoFixoPedagio.addFilterEqual("pracaPedagioId.casetaPeajeId", 0);
		}else{
			pesquisaPrecoFixoPedagio.addFilterEqual("pracaPedagioId.casetaPeajeId", casetaPeaje.getCasetaPeajeId());
		}
		
		plwPrecoFixoPedagio.init(pesquisaPrecoFixoPedagio, lsPrecoFixoPedagio, pagingPrecoFixoPedagio);
	}
    private void carregarValores(CasetaPeaje casetaPeaje) {
		if(casetaPeaje != null) {
			quantiaIda.setValue(casetaPeaje.getImporteIda() != null ? casetaPeaje.getImporteIda().toString().replace(".", ",") : "0,0");
			quantiaVolta.setValue(casetaPeaje.getImporteVuelta() != null ? casetaPeaje.getImporteVuelta().toString().replace(".", ",") : "0,0");
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		descricaoPracaPedagio.getValue();

		try {
			Boolean pracaPedagioValida = casetaPeajeService.validarDescricaoCasetaPeaje(casetaPeaje);

			if (pracaPedagioValida) {
				if (casetaPeaje.getCasetaPeajeId() == null) {
					casetaPeaje.setImporteIda(quantiaIda.getValueDecimal());
					casetaPeaje.setImporteVuelta(quantiaVolta.getValueDecimal());
					casetaPeajeService.suscribir(casetaPeaje);
					casetaPeajeList.addItemNovo(casetaPeaje);
				} else {
					casetaPeaje.setImporteIda(quantiaIda.getValueDecimal());
					casetaPeaje.setImporteVuelta(quantiaVolta.getValueDecimal());
					casetaPeajeService.actualizacion(casetaPeaje);
					casetaPeajeList.updateItem(casetaPeaje);
				}

//				if (!casetaPeajeExcepcionToDelete.isEmpty()) {
//					casetaPeajeService.deletarVigencias(casetaPeajeExcepcionToDelete);
//				}
				
				Messagebox.show(
						Labels.getLabel("editarPracaPedagioController.MSG.suscribirOK"),
						Labels.getLabel("editarPracaPedagioController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				closeWindow();
			} else {
				Messagebox.show(
						Labels.getLabel(ConstantesGenericas.MSG_EXISTE_REGISTRO),
						Labels.getLabel("editarPracaPedagioController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}

		} catch (Exception ex) {
			logger.error("editarPracaPedagioController: " + ex);
			Messagebox.show(
					Labels.getLabel(ConstantesGenericas.MSG_ERROR),
					Labels.getLabel("editarPracaPedagioController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}
    
	public void onClick$btnApagar(Event ev) throws InterruptedException {

		if (CollectionUtils.isNotEmpty(casetaPeaje.getLsRutaSecuencia())) {
			String[] linhas = new String[casetaPeaje.getLsRutaSecuencia().size()];

			for (int i = 0; i < casetaPeaje.getLsRutaSecuencia().size(); i++) {
				if (casetaPeaje.getLsRutaSecuencia().get(i).getRuta() != null) {
					linhas[i] = "\"" + casetaPeaje.getLsRutaSecuencia().get(i).getRuta().getRutaId() + " - " + casetaPeaje.getLsRutaSecuencia().get(i).getRuta().getDescruta() + "\"";
				}
			}
			if (linhas.length > 0) {
				Messagebox.show(
						Labels.getLabel("editarPracaPedagioController.borrar.MSG.linha", linhas).replaceAll("\\{\\w\\}", ""),
						Labels.getLabel("editarPracaPedagioController.window.title"),
						Messagebox.OK, Messagebox.ERROR);
				return;
			}

		}
    	
        int opcao = Messagebox.show(
                Labels.getLabel("editarPracaPedagioController.btnFechar.MSG.Deseja.Borrar"),
                Labels.getLabel("editarPracaPedagioController.window.title"),
                Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
        
        if (opcao == Messagebox.YES) {
        	casetaPeajeService.borrar(casetaPeaje);
        	casetaPeajeList.removeItem(casetaPeaje);        	
        }else{
        	return;
        }
        
        Messagebox.show(
                Labels.getLabel("editarPracaPedagioController.btnFechar.MSG.borrarOK"),
                Labels.getLabel("editarPracaPedagioController.window.title"),
                Messagebox.OK, Messagebox.INFORMATION);

        closeWindow();
        
    }
    
    public void onClick$btnSalvarPrecoFixo(Event ev) throws InterruptedException {
 
    	PrecioFixoPedagio pfp = new PrecioFixoPedagio();
    	
    	
    	Comboitem orgaoConcedente = cmbOrgaoConcedente.getSelectedItem();
    	
    	if (orgaoConcedente == null){
	    	 Messagebox.show(
	                 Labels.getLabel("editarPrecoFixoPedagioController.MSG.orgaoObrigatorio"),
	                 Labels.getLabel("editarPrecoFixoPedagioController.window.title"),
	                 Messagebox.OK, Messagebox.ERROR);
	    	 
	    	 return;
    	}
    	
    	pfp.setOrgaoConcedenteId((OrgaoConcedente)orgaoConcedente.getValue());
    	
    	Comboitem claseServicio = cmbClaseServicio.getSelectedItem();
    	
    	if (claseServicio == null){
    		
    		Messagebox.show(
    				Labels.getLabel("editarPrecoFixoPedagioController.MSG.claseObrigatorio"),
    				Labels.getLabel("editarPrecoFixoPedagioController.window.title"),
    				Messagebox.OK, Messagebox.ERROR);
    		
    		return;
    	}

    	pfp.setClasseId((ClaseServicio) claseServicio.getValue());
    	
    	pfp.setValorFixo(valorFixo.getValueDecimal());
    	pfp.setPracaPedagioId(casetaPeaje);
    	
    	Usuario usuarioLogado = UsuarioLogado.getUsuarioLogado();
    	pfp.setUsuarioId(usuarioLogado.getUsuarioId());
    	pfp.setActivo(true);
    	pfp.setFecmodif(new java.util.Date());
    	
    	
    	Boolean inserir = precioFixoPedagioService.validarInclusaoPrecoFixo(pfp);
        if(inserir){
        	casetaPaejeService.suscribirOrActualizacion(casetaPeaje);
        	precioFixoPedagioService.suscribir(pfp);
        	 Messagebox.show(
                     Labels.getLabel("editarPrecoFixoPedagioController.MSG.suscribirOK"),
                     Labels.getLabel("editarPrecoFixoPedagioController.window.title"),
                     Messagebox.OK, Messagebox.INFORMATION);
        	 refreshLista();
        	 limparFormPrecoFixo();
           
        }else{
        	 Messagebox.show(
                     Labels.getLabel("editarPrecoFixoPedagioController.MSG.suscribirNO"),
                     Labels.getLabel("editarPrecoFixoPedagioController.window.title"),
                     Messagebox.OK, Messagebox.INFORMATION);

           
        }
    }
   public void onClick$btnRemoverPrecoFixo(Event ev) throws InterruptedException {
    	
        int opcao = Messagebox.show(
                Labels.getLabel("editarPrecoFixoPedagioController.btnFechar.MSG.Deseja.Borrar"),
                Labels.getLabel("editarPrecoFixoPedagioController.window.title"),
                Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

        if (opcao == Messagebox.YES) {
        	PrecioFixoPedagio precioFixoPedagio = (PrecioFixoPedagio) lsPrecoFixoPedagio.getSelected();
        	casetaPeaje.getLsPrecoFixoPedagio().remove(precioFixoPedagio);
        	precioFixoPedagioService.borrar(precioFixoPedagio);
        	refreshLista();        	
        }
        
        Messagebox.show(
                Labels.getLabel("editarPrecoFixoPedagioController.btnFechar.MSG.borrarOK"),
                Labels.getLabel("editarPrecoFixoPedagioController.window.title"),
                Messagebox.OK, Messagebox.INFORMATION);

      
        
    }
//    public void onClick$btnAdicionarCasetaPeajeExcepcion(Event ev)  throws InterruptedException{
//    	txtPreco.getValue();
//    	casetaPeajeExcepcion = new CasetaPeajeExcepcion();
//    	casetaPeajeExcepcion.setFecVentaIni(fecInicio.getValue());
//    	casetaPeajeExcepcion.setFecVentaFin(fecFin.getValue());
//    	casetaPeajeExcepcion.setINDDOMINGO(chkINDDOMINGO.isChecked());
//    	casetaPeajeExcepcion.setINDLUNES(chkINDLUNES.isChecked());
//    	casetaPeajeExcepcion.setINDMARTES(chkINDMARTES.isChecked());
//    	casetaPeajeExcepcion.setINDMIERCOLES(chkINDMIERCOLES.isChecked());
//    	casetaPeajeExcepcion.setINDVIERNES(chkINDVIERNES.isChecked());
//    	casetaPeajeExcepcion.setINDJUEVES(chkINDJUEVES.isChecked());
//    	casetaPeajeExcepcion.setINDSABADO(chkINDSABADO.isChecked());
//		if(horaIni.getValue() == null){
//			Calendar horaI=Calendar.getInstance();
//			horaI.set(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DATE), 0, 0, 0);
//			horaIni.setValue(horaI.getTime());
//			casetaPeajeExcepcion.setHoraIni(horaIni.getValue());
//		}else{
//			casetaPeajeExcepcion.setHoraIni(horaIni.getValue());
//		}
//		if(horaFin.getValue() == null){
//			Calendar horaF=Calendar.getInstance();
//			horaF.set(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DATE), 23, 59, 59);
//			horaFin.setValue(horaF.getTime());
//			casetaPeajeExcepcion.setHoraFin(horaFin.getValue());
//		}else{
//			casetaPeajeExcepcion.setHoraFin(horaFin.getValue());
//		}
//		
//		if(!isDataValida(casetaPeajeExcepcion)){
//			try {
//				Messagebox.show(
//				        Labels.getLabel("editarExcepcionPeajeController.MSG.datasInconsistentes.value"),
//				        Labels.getLabel("editarExcepcionPeajeController.window.title"),
//				        Messagebox.OK, Messagebox.EXCLAMATION);
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//			return;
//		}
//		
//		if(!validaHoraFinal(casetaPeajeExcepcion)){
//			try {
//				Messagebox.show(
//				        Labels.getLabel("editarExcepcionPeajeController.MSG.horaInvalida.value"),
//				        Labels.getLabel("editarExcepcionPeajeController.window.title"),
//				        Messagebox.OK, Messagebox.EXCLAMATION);
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//			return;
//		}
//		if(!validaHoras(casetaPeajeExcepcion)){
//			try {
//				Messagebox.show(
//				        Labels.getLabel("editarExcepcionPeajeController.MSG.horasInconsistentes.value"),
//				        Labels.getLabel("editarExcepcionPeajeController.window.title"),
//				        Messagebox.OK, Messagebox.EXCLAMATION);
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//			return;
//		}
//		
//		casetaPeajeExcepcion.setPrecio(txtPreco.getValueDecimal());
//		
//		if(lsCasetaPeajeExcepcion == null){
//			lsCasetaPeajeExcepcion = new ArrayList<CasetaPeajeExcepcion>(); 
//		}
//		casetaPeajeExcepcion.setActivo(Boolean.TRUE);
//		casetaPeajeExcepcion.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
//		casetaPeajeExcepcion.setFecmodif(Calendar.getInstance().getTime());
//		
//		if(!isCasetaPeajeExcepcionValida(casetaPeajeExcepcion)){
//			try {
//				Messagebox.show(
//				        Labels.getLabel("editarExcepcionPeajeController.MSG.conflitoVigencia.value"),
//				        Labels.getLabel("editarExcepcionPeajeController.window.title"),
//				        Messagebox.OK, Messagebox.EXCLAMATION);
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//		 return;
//		}
//	
//		lsCasetaPeajeExcepcion.add(casetaPeajeExcepcion);
//		if(null != lsCasetaPeajeExcepcion){
//			Collections.sort(lsCasetaPeajeExcepcion);
//		}
//		casetaPeajeExcepcion.setCasetaPeaje(casetaPeaje);
//		casetaPeajeExcepcionList.setData(lsCasetaPeajeExcepcion);
//		//casetaPeajeExcepcionService.suscribir(casetaPeajeExcepcion);
//		limparInput();
//	}
	
//	public void onClick$btnRemoverCasetaPeajeExcepcion(Event ev) throws InterruptedException {
//		CasetaPeajeExcepcion cpe = (CasetaPeajeExcepcion) casetaPeajeExcepcionList.getSelected();
//		if(cpe != null){
//			cpe.setActivo(Boolean.FALSE);
//			cpe.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
//			cpe.setFecmodif(Calendar.getInstance().getTime());
//			lsCasetaPeajeExcepcion.remove(cpe);
//			Collections.sort(lsCasetaPeajeExcepcion);
//			casetaPeajeExcepcionList.setData(lsCasetaPeajeExcepcion);
//			casetaPeajeExcepcionService.borrar(cpe);
//		}
//	}
	
	private boolean isDataValida(CasetaPeajeExcepcion cpe){
		if( cpe.getFecVentaIni().after(cpe.getFecVentaFin())){
			return false;
		}
		return true;
	}
	
	private boolean validaHoraFinal(CasetaPeajeExcepcion cpe){
		if( cpe.getHoraFin().getHours() == 0 &&  cpe.getHoraFin().getMinutes() == 0 &&  cpe.getHoraFin().getSeconds() == 0){
			return false;
		}
		return true;
	}
	
	private boolean validaHoras(CasetaPeajeExcepcion cpe){
		if( cpe.getHoraIni().after(cpe.getHoraFin()) || ( cpe.getHoraIni().compareTo(cpe.getHoraFin()) == 0 ) ){
			return false;
		}
		return true;
	}
	
	private boolean isDiasCasetaPeajeExcepcionCoincidencia(CasetaPeajeExcepcion novaCasetaPeajeExcepcion, CasetaPeajeExcepcion cpe){
		if(novaCasetaPeajeExcepcion.getINDDOMINGO() && cpe.getINDDOMINGO()){
			return true;
		}
		if(novaCasetaPeajeExcepcion.getINDLUNES() && cpe.getINDLUNES()){
			return true;
		}
		if(novaCasetaPeajeExcepcion.getINDMARTES() && cpe.getINDMARTES()){
			return true;
		}
		if(novaCasetaPeajeExcepcion.getINDMIERCOLES() && cpe.getINDMIERCOLES()){
			return true;
		}
		if(novaCasetaPeajeExcepcion.getINDJUEVES() && cpe.getINDJUEVES()){
			return true;
		}
		if(novaCasetaPeajeExcepcion.getINDVIERNES() && cpe.getINDVIERNES()){
			return true;
		}
		if(novaCasetaPeajeExcepcion.getINDSABADO() && cpe.getINDSABADO()){
			return true;
		}
		return false;
	}
	
	private boolean isCasetaPeajeExcepcionValida(CasetaPeajeExcepcion novaCasetaPeajeExcepcion){
		
		for(CasetaPeajeExcepcion cpe : lsCasetaPeajeExcepcion){
			if(!cpe.getActivo()){
				continue;
			}
			if(((DateUtil.inicioFecha((novaCasetaPeajeExcepcion.getFecVentaIni())).after(DateUtil.inicioFecha((cpe.getFecVentaIni()))) || DateUtil.inicioFecha((novaCasetaPeajeExcepcion.getFecVentaIni())).compareTo(DateUtil.inicioFecha((cpe.getFecVentaIni()))) == 0) 
				&& (DateUtil.inicioFecha((novaCasetaPeajeExcepcion.getFecVentaIni())).before(DateUtil.fimFecha((cpe.getFecVentaFin())))) || DateUtil.inicioFecha((novaCasetaPeajeExcepcion.getFecVentaIni())).compareTo(DateUtil.fimFecha((cpe.getFecVentaFin()))) == 0)
				|| 
				((DateUtil.fimFecha((novaCasetaPeajeExcepcion.getFecVentaFin())).before(DateUtil.fimFecha((cpe.getFecVentaFin()))) || DateUtil.fimFecha((novaCasetaPeajeExcepcion.getFecVentaFin())).compareTo(DateUtil.fimFecha((cpe.getFecVentaFin()))) == 0) 
				&& (DateUtil.fimFecha((novaCasetaPeajeExcepcion.getFecVentaFin())).after(DateUtil.inicioFecha((cpe.getFecVentaIni()))))) || DateUtil.fimFecha((novaCasetaPeajeExcepcion.getFecVentaFin())).compareTo(DateUtil.inicioFecha((cpe.getFecVentaIni()))) == 0 ){
				if(isDiasCasetaPeajeExcepcionCoincidencia(novaCasetaPeajeExcepcion,cpe)){
					Calendar calNovaHoraIni = Calendar.getInstance();
					Calendar calNovaHoraFin = Calendar.getInstance();
					Calendar calEpvHoraIni = Calendar.getInstance();
					Calendar calEpvHoraFin = Calendar.getInstance();
					calNovaHoraIni.setTime(novaCasetaPeajeExcepcion.getHoraIni());
					calNovaHoraFin.setTime(novaCasetaPeajeExcepcion.getHoraFin());
					calEpvHoraIni.setTime(cpe.getHoraIni());
					calEpvHoraFin.setTime(cpe.getHoraFin());
					calNovaHoraIni.set(2000, 10, 10);
					calNovaHoraFin.set(2000, 10, 10);
					calEpvHoraIni.set(2000, 10, 10);
					calEpvHoraFin.set(2000, 10, 10);
					if (isWithinRange(calNovaHoraIni.getTime(), calEpvHoraIni.getTime(), calEpvHoraFin.getTime())
							|| isWithinRange(calNovaHoraFin.getTime(), calEpvHoraIni.getTime(), calEpvHoraFin.getTime())) {
						return false;
					}
				}
			}
		}
		return true;
	}  

	boolean isWithinRange(Date testDate, Date startDate, Date endDate) {
	    return testDate.getTime() >= startDate.getTime() &&
	             testDate.getTime() <= endDate.getTime();
	}

//	private void limparInput() {
//		fecInicio.setConstraint("");
//		fecInicio.setValue(null);
//		fecInicio.setConstraint("no empty");
//		
//		fecFin.setConstraint("");
//		fecFin.setValue(null);
//		fecFin.setConstraint("no empty");
//		
//		chkINDDOMINGO.setChecked(false);
//		chkINDLUNES.setChecked(false);
//		chkINDMARTES.setChecked(false);
//		chkINDMIERCOLES.setChecked(false);
//		chkINDVIERNES.setChecked(false);
//		chkINDJUEVES.setChecked(false);
//		chkINDSABADO.setChecked(false);
//		horaIni.setText("");
//		horaFin.setText("");
//		txtPreco.setConstraint("");
//		txtPreco.setValue("");
//		txtPreco.setConstraint("no empty, no zero, no negative, /[0-9]+(\\,[0-9][0-9]?)?/");
//    }

	public MyTextbox getDescricaoPracaPedagio() {
		return descricaoPracaPedagio;
	}

	public void setDescricaoPracaPedagio(MyTextbox descricaoPracaPedagio) {
		this.descricaoPracaPedagio = descricaoPracaPedagio;
	}

	public MyTextboxDecimal getQuantiaIda() {
		return quantiaIda;
	}

	public void setQuantiaIda(MyTextboxDecimal quantiaIda) {
		this.quantiaIda = quantiaIda;
	}

	public MyTextboxDecimal getQuantiaVolta() {
		return quantiaVolta;
	}

	public void setQuantiaVolta(MyTextboxDecimal quantiaVolta) {
		this.quantiaVolta = quantiaVolta;
	}

	public CasetaPeaje getCasetaPeaje() {
		return casetaPeaje;
	}

	public void setCasetaPeaje(CasetaPeaje casetaPeaje) {
		this.casetaPeaje = casetaPeaje;
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

	public void setBtnApagar(Button btnApagar) {
		this.btnApagar = btnApagar;
	}

	public MyListbox getCasetaPeajeList() {
		return casetaPeajeList;
	}

	public void setCasetaPeajeList(MyListbox casetaPeajeList) {
		this.casetaPeajeList = casetaPeajeList;
	}

	public MyListbox getLsPrecoFixoPedagio() {
		return lsPrecoFixoPedagio;
	}

	public void setLsPrecoFixoPedagio(MyListbox lsPrecoFixoPedagio) {
		this.lsPrecoFixoPedagio = lsPrecoFixoPedagio;
	}

	public PagedListWrapper<PrecioFixoPedagio> getPlwPrecoFixoPedagio() {
		return plwPrecoFixoPedagio;
	}

	public void setPlwPrecoFixoPedagio(PagedListWrapper<PrecioFixoPedagio> plwPrecoFixoPedagio) {
		this.plwPrecoFixoPedagio = plwPrecoFixoPedagio;
	}

	public Paging getPagingPrecoFixoPedagio() {
		return pagingPrecoFixoPedagio;
	}

	public void setPagingPrecoFixoPedagio(Paging pagingPrecoFixoPedagio) {
		this.pagingPrecoFixoPedagio = pagingPrecoFixoPedagio;
	}       	
	
	
}