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

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

import org.apache.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.WrongValueException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.ComboitemRenderer;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Timebox;

import com.rjconsultores.ventaboletos.entidad.ExcepcionPeaje;
import com.rjconsultores.ventaboletos.entidad.ExcepcionPeajeVigencia;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.service.ExcepcionPeajeService;
import com.rjconsultores.ventaboletos.service.RutaService;
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.MyComboboxParadaCve;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderExcepcionPeajeVigencia;

@Controller("editarExcepcionPeajeController")
@Scope("prototype")
public class EditarExcepcionPeajeController   extends MyGenericForwardComposer {
	
	private static final long serialVersionUID = 1L;
	
	private ExcepcionPeaje excepcionPeaje;
	private MyListbox excepcionPeajeList;
	private List<ExcepcionPeaje> lsExcepcionPeaje;
	
	private MyComboboxParada cmbParadaOrigem;
	private MyComboboxParadaCve cmbParadaOrigemCve;
	private MyComboboxParada cmbParadaDestino;
	private MyComboboxParadaCve cmbParadaDestinoCve;
	private List<Ruta> lsRuta;
	private Combobox cmbRuta;
	@Autowired
	private RutaService rutaService;
	@Autowired
    private ExcepcionPeajeService excepcionPeajeService;
	private static Logger log = Logger.getLogger(EditarExcepcionPeajeController.class);
	
	private MyListbox excepcionPeajeVigenciaList;
	private List<ExcepcionPeajeVigencia> lsExcepcionPeajeVigencia;
	private ExcepcionPeajeVigencia excepcionPeajeVigencia;
	
	private Datebox fecInicio;
	private Datebox fecFin;
	private Checkbox chkINDLUNES;
	private Checkbox chkINDMARTES;
	private Checkbox chkINDMIERCOLES;
	private Checkbox chkINDJUEVES;
	private Checkbox chkINDVIERNES;
	private Checkbox chkINDSABADO;
	private Checkbox chkINDDOMINGO;
	private Timebox horaIni;
	private Timebox horaFin;
	private MyTextboxDecimal txtPreco;
	
	private boolean isEdicao;
	
	public MyComboboxParada getCmbParadaOrigem() {
		return cmbParadaOrigem;
	}

	public void setCmbParadaOrigem(MyComboboxParada cmbParadaOrigem) {
		this.cmbParadaOrigem = cmbParadaOrigem;
	}

	public MyComboboxParadaCve getCmbParadaOrigemCve() {
		return cmbParadaOrigemCve;
	}

	public void setCmbParadaOrigemCve(MyComboboxParadaCve cmbParadaOrigemCve) {
		this.cmbParadaOrigemCve = cmbParadaOrigemCve;
	}

	public MyComboboxParada getCmbParadaDestino() {
		return cmbParadaDestino;
	}

	public void setCmbParadaDestino(MyComboboxParada cmbParadaDestino) {
		this.cmbParadaDestino = cmbParadaDestino;
	}

	public MyComboboxParadaCve getCmbParadaDestinoCve() {
		return cmbParadaDestinoCve;
	}

	public void setCmbParadaDestinoCve(MyComboboxParadaCve cmbParadaDestinoCve) {
		this.cmbParadaDestinoCve = cmbParadaDestinoCve;
	}

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

	public void setLsRuta(List<Ruta> lsRuta) {
		this.lsRuta = lsRuta;
	}

	public Combobox getCmbRuta() {
		return cmbRuta;
	}

	public void setCmbRuta(Combobox cmbRuta) {
		this.cmbRuta = cmbRuta;
	}

	public RutaService getRutaService() {
		return rutaService;
	}

	public void setRutaService(RutaService rutaService) {
		this.rutaService = rutaService;
	}

	@Override
    public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		
		excepcionPeaje = (ExcepcionPeaje) Executions.getCurrent().getArg().get("excepcionPeaje");
		excepcionPeajeList = (MyListbox) Executions.getCurrent().getArg().get("excepcionPeajeList");
		lsExcepcionPeaje = (ArrayList<ExcepcionPeaje>) Executions.getCurrent().getArg().get("lsExcepcionPeaje");
		isEdicao = (Boolean) Executions.getCurrent().getArg().get("isEdicao");
		
		excepcionPeaje = excepcionPeajeService.obtenerID(excepcionPeaje.getExcepcionPeajeId());
		lsExcepcionPeajeVigencia = excepcionPeaje.getLsExcepcionPeajeVigencia();
		if(lsExcepcionPeajeVigencia != null){
			Collections.sort(lsExcepcionPeajeVigencia);
		}
		excepcionPeajeVigenciaList.setItemRenderer(new RenderExcepcionPeajeVigencia());
		if(lsExcepcionPeajeVigencia != null ){
			excepcionPeajeVigenciaList.setData(lsExcepcionPeajeVigencia);
		}
		
        lsRuta = rutaService.obtenerTodos();
        cmbParadaOrigemCve.setItemRenderer(new ComboitemRenderer() {
			@Override
			public void render(Comboitem cmbtm, Object o) throws Exception {
				Parada parada = (Parada) o;

				cmbtm.setLabel(parada.getCveparada());
				cmbtm.setValue(parada);
			}
		});

		cmbParadaDestinoCve.setItemRenderer(new ComboitemRenderer() {
			@Override
			public void render(Comboitem cmbtm, Object o) throws Exception {
				Parada parada = (Parada) o;

				cmbtm.setLabel(parada.getCveparada());
				cmbtm.setValue(parada);
			}
		});
		
		if(excepcionPeaje.getRuta() != null ){
			Comboitem ci = new Comboitem(excepcionPeaje.getRuta().toString());
			ci.setAttribute("value", excepcionPeaje.getRuta());
			ci.setValue(excepcionPeaje.getRuta());
			ci.setParent(cmbRuta);
			cmbRuta.setSelectedItem(ci);
		}
		if(excepcionPeaje.getOrigem() != null ){
			Comboitem ci = new Comboitem(excepcionPeaje.getOrigem().toString());
			ci.setAttribute("value", excepcionPeaje.getOrigem());
			ci.setValue(excepcionPeaje.getOrigem());
			ci.setParent(cmbParadaOrigem);
			cmbParadaOrigem.setSelectedItem(ci);
		}
		if(excepcionPeaje.getOrigem() != null ){
			Comboitem ci = new Comboitem(excepcionPeaje.getOrigem().getCveparada().toString());
			ci.setAttribute("value", excepcionPeaje.getOrigem());
			ci.setValue(excepcionPeaje.getOrigem().getCveparada());
			ci.setParent(cmbParadaOrigemCve);
			cmbParadaOrigemCve.setSelectedItem(ci);
		}
		if(excepcionPeaje.getDestino() != null ){
			Comboitem ci = new Comboitem(excepcionPeaje.getDestino().toString());
			ci.setAttribute("value", excepcionPeaje.getDestino());
			ci.setValue(excepcionPeaje.getDestino());
			ci.setParent(cmbParadaDestino);
			cmbParadaDestino.setSelectedItem(ci);
		}
		if(excepcionPeaje.getOrigem() != null ){
			Comboitem ci = new Comboitem(excepcionPeaje.getDestino().getCveparada().toString());
			ci.setAttribute("value", excepcionPeaje.getDestino());
			ci.setValue(excepcionPeaje.getDestino().getCveparada());
			ci.setParent(cmbParadaDestinoCve);
			cmbParadaDestinoCve.setSelectedItem(ci);
		}
		
		txtPreco.setConstraint("no empty, no zero, no negative, /[0-9]+(\\,[0-9][0-9]?)?/");
	}
	
	public void onSelect$cmbParadaOrigemCve(Event ev) {
		if (cmbParadaOrigemCve.getSelectedItem() != null) {
			cmbParadaOrigem.setComboItemByParada((Parada) cmbParadaOrigemCve.getSelectedItem().getValue());
		}
	}

	public void onSelect$cmbParadaOrigem(Event ev) {
		if (cmbParadaOrigem.getSelectedItem() != null)
			cmbParadaOrigemCve.setComboItemByParada((Parada) cmbParadaOrigem.getSelectedItem().getValue());
	}

	public void onSelect$cmbParadaDestinoCve(Event ev) {
		if (cmbParadaDestinoCve.getSelectedItem() != null) {
			cmbParadaDestino.setComboItemByParada((Parada) cmbParadaDestinoCve.getSelectedItem().getValue());
		}
	}

	public void onSelect$cmbParadaDestino(Event ev) {
		if (cmbParadaDestino.getSelectedItem() != null) {
			cmbParadaDestinoCve.setComboItemByParada((Parada) cmbParadaDestino.getSelectedItem().getValue());
		}
	}
	
	@SuppressWarnings("deprecation")
	public void onClick$btnSalvar(Event ev) {
		try{
				try{
					if(cmbRuta.getSelectedItem() == null || cmbRuta.getSelectedItem().getValue() == null) {
						 Messagebox.show(
			                        Labels.getLabel("editarExcepcionPeajeController.MSG.necessitaRuta.value"),
			                        Labels.getLabel("editarExcepcionPeajeController.window.title"),
			                        Messagebox.OK, Messagebox.EXCLAMATION);
						 return;
					}
				}catch(WrongValueException e){
					Messagebox.show(
	                        Labels.getLabel("editarExcepcionPeajeController.MSG.necessitaRuta.value"),
	                        Labels.getLabel("editarExcepcionPeajeController.window.title"),
	                        Messagebox.OK, Messagebox.EXCLAMATION);
				 return;
				}
				
				try{
					if(cmbParadaOrigem.getSelectedItem() == null || cmbParadaOrigem.getSelectedItem().getValue() == null) {
						 Messagebox.show(
			                        Labels.getLabel("editarExcepcionPeajeController.MSG.necessitaOrigen.value"),
			                        Labels.getLabel("editarExcepcionPeajeController.window.title"),
			                        Messagebox.OK, Messagebox.EXCLAMATION);
						 return;
					}
				}catch(WrongValueException e){
					Messagebox.show(
	                        Labels.getLabel("editarExcepcionPeajeController.MSG.necessitaOrigen.value"),
	                        Labels.getLabel("editarExcepcionPeajeController.window.title"),
	                        Messagebox.OK, Messagebox.EXCLAMATION);
					return;
				}
				
				try{
					if(cmbParadaDestino.getSelectedItem() == null || cmbParadaDestino.getSelectedItem().getValue() == null) {
						 Messagebox.show(
			                        Labels.getLabel("editarExcepcionPeajeController.MSG.necessitaDestino.value"),
			                        Labels.getLabel("editarExcepcionPeajeController.window.title"),
			                        Messagebox.OK, Messagebox.EXCLAMATION);
						 return;
					}
				}catch(WrongValueException e){
					Messagebox.show(
	                        Labels.getLabel("editarExcepcionPeajeController.MSG.necessitaDestino.value"),
	                        Labels.getLabel("editarExcepcionPeajeController.window.title"),
	                        Messagebox.OK, Messagebox.EXCLAMATION);
				 return;
				}
				
				excepcionPeaje.setOrigem((Parada) cmbParadaOrigem.getSelectedItem().getValue()); 
				excepcionPeaje.setDestino((Parada) cmbParadaDestino.getSelectedItem().getValue());
				excepcionPeaje.setRuta((Ruta) cmbRuta.getSelectedItem().getValue());
		    	
				excepcionPeaje.setActivo(true);
				excepcionPeaje.setFecmodif(Calendar.getInstance().getTime());
				excepcionPeaje.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				

				if((!isEdicao) && verificaJaExisteExcepcionPeaje(excepcionPeaje)){
					Messagebox.show(
	                        Labels.getLabel("editarExcepcionPeajeController.MSG.ExcepcionPeajeExiste.value"),
	                        Labels.getLabel("editarExcepcionPeajeController.window.title"),
	                        Messagebox.OK, Messagebox.EXCLAMATION);
					return;
				}
		
				 if (excepcionPeaje.getExcepcionPeajeId() == null) {
					 excepcionPeajeService.suscribir(excepcionPeaje);
					 excepcionPeajeList.addItem(excepcionPeaje);
					 lsExcepcionPeaje = excepcionPeajeService.obtenerTodos();
					 Collections.sort(lsExcepcionPeaje);
						excepcionPeajeList.setData(lsExcepcionPeaje);
		       } else {
		    	   excepcionPeajeService.actualizacion(excepcionPeaje);
		    	   excepcionPeajeList.updateItem(excepcionPeaje);
		    	   lsExcepcionPeaje = excepcionPeajeService.obtenerTodos();
		    	   Collections.sort(lsExcepcionPeaje);
		   		excepcionPeajeList.setData(lsExcepcionPeaje);
		       }
		       Messagebox.show(
		               Labels.getLabel("busquedaExcepcionPeajeController.MSG.suscribirOK"),
		               Labels.getLabel("busquedaExcepcionPeajeController.window.title"),
		               Messagebox.OK, Messagebox.INFORMATION);
		
		       closeWindow();
			}catch (Exception ex) {
				log.error(ex);
			}
    }

	private boolean verificaJaExisteExcepcionPeaje(ExcepcionPeaje excepcionPeaje){
		for (ExcepcionPeaje ep : lsExcepcionPeaje) {
			if(ep.getRuta().getRutaId().toString().equals(excepcionPeaje.getRuta().getRutaId().toString())
					&& ep.getOrigem().getParadaId().toString().equals(excepcionPeaje.getOrigem().getParadaId().toString())
					&& ep.getDestino().getParadaId().toString().equals(excepcionPeaje.getDestino().getParadaId().toString())){
				return true;
			}
		}
		return false;
	}
	
	public ExcepcionPeaje getExcepcionPeaje() {
		return excepcionPeaje;
	}

	public void setExcepcionPeaje(ExcepcionPeaje excepcionPeaje) {
		this.excepcionPeaje = excepcionPeaje;
	}

	public MyListbox getExcepcionPeajeList() {
		return excepcionPeajeList;
	}

	public void setExcepcionPeajeList(MyListbox excepcionPeajeList) {
		this.excepcionPeajeList = excepcionPeajeList;
	}
	
	public void onClick$btnApagar(Event ev)  throws InterruptedException{
		excepcionPeajeService.borrar(excepcionPeaje);
		excepcionPeajeList.removeItem(excepcionPeaje);
		lsExcepcionPeaje.remove(excepcionPeaje);
		 Messagebox.show(
                 Labels.getLabel("editarExcepcionPeajeController.MSG.borrarOK"),
                 Labels.getLabel("editarExcepcionPeajeController.window.title"),
                 Messagebox.OK, Messagebox.INFORMATION);
		closeWindow();
	}
	
	public void onClick$btnRemoverExcepcionPeajeVigencia(Event ev) {
		ExcepcionPeajeVigencia epv = (ExcepcionPeajeVigencia) excepcionPeajeVigenciaList.getSelected();
		if(epv != null){
			epv.setActivo(Boolean.FALSE);
			epv.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			epv.setFecmodif(Calendar.getInstance().getTime());
			excepcionPeajeService.actualizacion(excepcionPeaje);
			lsExcepcionPeajeVigencia.remove(epv);
			Collections.sort(lsExcepcionPeajeVigencia);
			excepcionPeajeVigenciaList.setData(lsExcepcionPeajeVigencia);
			excepcionPeaje.setLsExcepcionPeajeVigencia(lsExcepcionPeajeVigencia);
		}
	}
	
	public void onClick$btnAdicionarExcepcionPeajeVigencia(Event ev) {
		
		getTxtPreco().getValue();
		excepcionPeajeVigencia = new ExcepcionPeajeVigencia();
		excepcionPeajeVigencia.setFecVentaIni(fecInicio.getValue());
		excepcionPeajeVigencia.setFecVentaFin(fecFin.getValue());
		excepcionPeajeVigencia.setINDDOMINGO(chkINDDOMINGO.isChecked());
		excepcionPeajeVigencia.setINDLUNES(chkINDLUNES.isChecked());
		excepcionPeajeVigencia.setINDMARTES(chkINDMARTES.isChecked());
		excepcionPeajeVigencia.setINDMIERCOLES(chkINDMIERCOLES.isChecked());
		excepcionPeajeVigencia.setINDVIERNES(chkINDVIERNES.isChecked());
		excepcionPeajeVigencia.setINDJUEVES(chkINDJUEVES.isChecked());
		excepcionPeajeVigencia.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());
			excepcionPeajeVigencia.setHoraIni(horaIni.getValue());
		}else{
			excepcionPeajeVigencia.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());
			excepcionPeajeVigencia.setHoraFin(horaFin.getValue());
		}else{
			excepcionPeajeVigencia.setHoraFin(horaFin.getValue());
		}
		
		if(!isDataValida(excepcionPeajeVigencia)){
			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(excepcionPeajeVigencia)){
			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(excepcionPeajeVigencia)){
			try {
				Messagebox.show(
				        Labels.getLabel("editarExcepcionPeajeController.MSG.horasInconsistentes.value"),
				        Labels.getLabel("editarExcepcionPeajeController.window.title"),
				        Messagebox.OK, Messagebox.EXCLAMATION);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return;
		}
		
		excepcionPeajeVigencia.setPrecio(txtPreco.getValueDecimal());
		
		if(lsExcepcionPeajeVigencia == null){
			List<ExcepcionPeajeVigencia> ls = new ArrayList<ExcepcionPeajeVigencia>(); 
			lsExcepcionPeajeVigencia = ls;
		}
		excepcionPeajeVigencia.setActivo(Boolean.TRUE);
		excepcionPeajeVigencia.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		excepcionPeajeVigencia.setFecmodif(Calendar.getInstance().getTime());
		
		if(!isExcepcionPeajeVigenciaValida(excepcionPeajeVigencia)){
			try {
				Messagebox.show(
				        Labels.getLabel("editarExcepcionPeajeController.MSG.conflitoVigencia.value"),
				        Labels.getLabel("editarExcepcionPeajeController.window.title"),
				        Messagebox.OK, Messagebox.EXCLAMATION);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		 return;
		}
		lsExcepcionPeajeVigencia.add(excepcionPeajeVigencia);
		if(null != lsExcepcionPeajeVigencia){
			Collections.sort(lsExcepcionPeajeVigencia);
		}
		excepcionPeajeVigencia.setExcepcionPeaje(excepcionPeaje);
		excepcionPeajeVigenciaList.setData(lsExcepcionPeajeVigencia);
		excepcionPeaje.setLsExcepcionPeajeVigencia(lsExcepcionPeajeVigencia);
		limparInput();
		
	}
	
	private boolean isDataValida(ExcepcionPeajeVigencia epv){
		if( epv.getFecVentaIni().after(epv.getFecVentaFin())){
			return false;
		}
		return true;
	}
	
	private boolean validaHoraFinal(ExcepcionPeajeVigencia epv){
		if( epv.getHoraFin().getHours() == 0 &&  epv.getHoraFin().getMinutes() == 0 &&  epv.getHoraFin().getSeconds() == 0){
			return false;
		}
		return true;
	}
	
	private boolean validaHoras(ExcepcionPeajeVigencia epv){
		if( epv.getHoraIni().after(epv.getHoraFin()) || ( epv.getHoraIni().compareTo(epv.getHoraFin()) == 0 ) ){
			return false;
		}
		return true;
	}
	
	private boolean isDiasExcepcionPeajeVigenciaCoincidencia(ExcepcionPeajeVigencia novaExcepcionPeajeVigencia, ExcepcionPeajeVigencia epv){
		if(novaExcepcionPeajeVigencia.getINDDOMINGO() && epv.getINDDOMINGO()){
			return true;
		}
		if(novaExcepcionPeajeVigencia.getINDLUNES() && epv.getINDLUNES()){
			return true;
		}
		if(novaExcepcionPeajeVigencia.getINDMARTES() && epv.getINDMARTES()){
			return true;
		}
		if(novaExcepcionPeajeVigencia.getINDMIERCOLES() && epv.getINDMIERCOLES()){
			return true;
		}
		if(novaExcepcionPeajeVigencia.getINDJUEVES() && epv.getINDJUEVES()){
			return true;
		}
		if(novaExcepcionPeajeVigencia.getINDVIERNES() && epv.getINDVIERNES()){
			return true;
		}
		if(novaExcepcionPeajeVigencia.getINDSABADO() && epv.getINDSABADO()){
			return true;
		}
		return false;
	}
	
	private boolean isExcepcionPeajeVigenciaValida(ExcepcionPeajeVigencia novaExcepcionPeajeVigencia){
		
		for(ExcepcionPeajeVigencia epv : lsExcepcionPeajeVigencia){
			if(((DateUtil.inicioFecha((novaExcepcionPeajeVigencia.getFecVentaIni())).after(DateUtil.inicioFecha((epv.getFecVentaIni()))) || DateUtil.inicioFecha((novaExcepcionPeajeVigencia.getFecVentaIni())).compareTo(DateUtil.inicioFecha((epv.getFecVentaIni()))) == 0) 
				&& (DateUtil.inicioFecha((novaExcepcionPeajeVigencia.getFecVentaIni())).before(DateUtil.fimFecha((epv.getFecVentaFin())))) || DateUtil.inicioFecha((novaExcepcionPeajeVigencia.getFecVentaIni())).compareTo(DateUtil.fimFecha((epv.getFecVentaFin()))) == 0)
				|| 
				((DateUtil.fimFecha((novaExcepcionPeajeVigencia.getFecVentaFin())).before(DateUtil.fimFecha((epv.getFecVentaFin()))) || DateUtil.fimFecha((novaExcepcionPeajeVigencia.getFecVentaFin())).compareTo(DateUtil.fimFecha((epv.getFecVentaFin()))) == 0) 
				&& (DateUtil.fimFecha((novaExcepcionPeajeVigencia.getFecVentaFin())).after(DateUtil.inicioFecha((epv.getFecVentaIni()))))) || DateUtil.fimFecha((novaExcepcionPeajeVigencia.getFecVentaFin())).compareTo(DateUtil.inicioFecha((epv.getFecVentaIni()))) == 0 ){
				if(isDiasExcepcionPeajeVigenciaCoincidencia(novaExcepcionPeajeVigencia,epv)){
					Calendar calNovaHoraIni = Calendar.getInstance();
					Calendar calNovaHoraFin = Calendar.getInstance();
					Calendar calEpvHoraIni = Calendar.getInstance();
					Calendar calEpvHoraFin = Calendar.getInstance();
					calNovaHoraIni.setTime(novaExcepcionPeajeVigencia.getHoraIni());
					calNovaHoraFin.setTime(novaExcepcionPeajeVigencia.getHoraFin());
					calEpvHoraIni.setTime(epv.getHoraIni());
					calEpvHoraFin.setTime(epv.getHoraFin());
					calNovaHoraIni.set(2000, 10, 10);
					calNovaHoraFin.set(2000, 10, 10);
					calEpvHoraIni.set(2000, 10, 10);
					calEpvHoraFin.set(2000, 10, 10);
					if(calNovaHoraIni.getTime().after(calEpvHoraIni.getTime()) && calNovaHoraIni.getTime().before(calEpvHoraFin.getTime())
							|| calNovaHoraFin.getTime().before(calEpvHoraFin.getTime()) && calNovaHoraFin.getTime().after(calEpvHoraIni.getTime())){
						return false;
					}
				}
			}
		}
		return true;
	}
	
	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 MyTextboxDecimal getTxtPreco() {
		return txtPreco;
	}

	public void setTxtPreco(MyTextboxDecimal txtPreco) {
		this.txtPreco = txtPreco;
	}
	
	
        
}
