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

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.Datebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.CorridaCtrl;
import com.rjconsultores.ventaboletos.entidad.GP_PricingEspecifico;
import com.rjconsultores.ventaboletos.entidad.GP_PricingEspecificoAgencia;
import com.rjconsultores.ventaboletos.entidad.GP_PricingEspecificoCanalVendas;
import com.rjconsultores.ventaboletos.entidad.GP_PricingEspecificoCategoria;
import com.rjconsultores.ventaboletos.entidad.GP_PricingEspecificoOcupacion;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.CorridaCtrlService;
import com.rjconsultores.ventaboletos.service.GP_PricingEspecificoAgenciaService;
import com.rjconsultores.ventaboletos.service.GP_PricingEspecificoCanalVendasService;
import com.rjconsultores.ventaboletos.service.GP_PricingEspecificoCategoriaService;
import com.rjconsultores.ventaboletos.service.GP_PricingEspecificoOcupacionService;
import com.rjconsultores.ventaboletos.service.GP_PricingEspecificoService;
import com.rjconsultores.ventaboletos.service.GP_PricingHistoricoService;
import com.rjconsultores.ventaboletos.service.MarcaService;
import com.rjconsultores.ventaboletos.service.MonedaService;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.service.TipoPuntoVentaService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
import com.rjconsultores.ventaboletos.utilerias.CustomEnum;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.gui.controladores.pricing.PricingController;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPricingAgencia;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPricingCanal;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPricingEspecificoCategoria;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPricingEspecificoOcupacion;

import ch.stfo.zk.component.Colorbox;

@Controller("editarGP_PricingEspecificoController")
@Scope("prototype")
@SuppressWarnings({ "unchecked", "rawtypes", "unused" })
public class EditarGP_PricingEspecificoController extends PricingController {

	private static final long serialVersionUID = 1L;
	private static Logger log = LogManager.getLogger(EditarGP_PricingEspecificoController.class);

	@Autowired
	private GP_PricingEspecificoService pricingEspecificoService;
	@Autowired
	private TipoPuntoVentaService puntoVentaService;
	@Autowired
	private ClaseServicioService claseServicioService;
	@Autowired
	private MarcaService marcaService;
	@Autowired
	private ParadaService paradaService;
	@Autowired
	private MonedaService monedaService;
	@Autowired
	private CorridaCtrlService corridaCtrlService;
	@Autowired
	private GP_PricingEspecificoOcupacionService pricingEspecificoOcupacionService;
	@Autowired 
	private GP_PricingEspecificoCategoriaService pricingEspecificoCategoriaService;
	@Autowired
	private PuntoVentaService puntoVenService;
	@Autowired
	private GP_PricingEspecificoAgenciaService  pricingEspecificoAgenciaService;
	@Autowired
	private GP_PricingEspecificoCanalVendasService  pricingEspecificoCanalVendasService;
	@Autowired
	private GP_PricingHistoricoService pricingHistoricoService;

	private GP_PricingEspecifico pricingEspecifico;
	private GP_PricingEspecifico pricingEspecificoOriginal;
	private MyListbox pricingList;
	private Combobox cmbPtovta;
	private Combobox cmbCategoria;
	private Combobox cmbServicio;
	private Combobox cmbMarca;
	private Combobox cmbOrigem;
	private Combobox cmbMoneda;
	private Combobox cmbDestino;
	private List<TipoPuntoVenta> lsPtovata;
	private List<Categoria> lsCategoria;
	private List<ClaseServicio> lsclaseServicio;
	private List<Marca> lsMarca;
	private List<Moneda> lsMoneda;
	private Button btnApagar;
	private Datebox fechaInicio;
	private Datebox fechaFin;
	private Textbox nombrePricing;
	private Textbox tarifaAbierto;
	private Button btnCopiar;
	private Radio rdExibirVendaSi;
	private Radio rdExibirVendaNo;
	private Radio rdSobreposicaoSim;
	private Radio rdSobreposicaoNao;
	private Colorbox colorChoose;

	private MyListbox pricingListEspOcupacion;
	private MyListbox pricingListEspAgencia;
	private MyListbox pricingListEspCategoria;
	private MyListbox pricingListEspCanal;
	private MyComboboxPuntoVenta cmbPuntoVenta;
	private List<GP_PricingEspecificoOcupacion> pricingEspecificoADesativar;
	private List<GP_PricingEspecificoAgencia> pricingEspecificoADesativarAgencia;
	private List<GP_PricingEspecificoCategoria> pricingEspecificoADesativarCategoria;
	
	private List<GP_PricingEspecificoCanalVendas> pricingEspecificoADesativarCanal;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsCategoria = getCategoriaService().obtenerTodos();
		lsMarca = marcaService.buscarMarcaPorEmpresa(UsuarioLogado.getUsuarioLogado().getEmpresa());
		lsMoneda = monedaService.obtenerTodos();
		lsPtovata = puntoVentaService.obtenerTodos();
		lsclaseServicio = claseServicioService.obtenerTodos();
		pricingEspecifico = (GP_PricingEspecifico) Executions.getCurrent().getArg().get("pricingEspecifico");
		pricingList = (MyListbox) Executions.getCurrent().getArg().get("pricingList");
		pricingEspecificoADesativar = new ArrayList<GP_PricingEspecificoOcupacion>();
		pricingEspecificoADesativarAgencia = new ArrayList<GP_PricingEspecificoAgencia>();
		pricingEspecificoADesativarCanal = new ArrayList<GP_PricingEspecificoCanalVendas>();
		pricingEspecificoADesativarCategoria = new ArrayList<GP_PricingEspecificoCategoria>();
		super.doAfterCompose(comp);

		pricingListEspOcupacion.setItemRenderer(new RenderPricingEspecificoOcupacion());
		pricingListEspAgencia.setItemRenderer(new RenderPricingAgencia());
		pricingListEspCanal.setItemRenderer(new RenderPricingCanal());
		pricingListEspCategoria.setItemRenderer(new RenderPricingEspecificoCategoria());
		
		if (pricingEspecifico != null && pricingEspecifico.getIndSobreposicao() != null && pricingEspecifico.getIndSobreposicao()) {
			rdExibirVendaSi.setSelected(Boolean.TRUE);
		} else {
			rdExibirVendaSi.setSelected(Boolean.FALSE);
		}

		if (pricingEspecifico.getPricingespecificoId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
			incluirCategoriasPadroes();
		} else {	
			
			if (pricingEspecifico.getColor() != null) {
				colorChoose.setStyle(" background: #FFFFFF; font-style: oblique;");
				colorChoose.setValue(pricingEspecifico.getColor());
			}
			
			Parada origem = pricingEspecifico.getParada();
			if (origem != null) {
				cmbOrigem.setText(origem.getDescparada());
			}

			Parada destino = pricingEspecifico.getParada1();
			if (destino != null) {
				cmbDestino.setText(destino.getDescparada());
			}

			pricingEspecifico = pricingEspecificoService.obtenerID(pricingEspecifico.getPricingespecificoId());

			pricingListEspOcupacion.setData(pricingEspecifico.getPricingEspecificoOcupacionsListActivos());
			pricingListEspOcupacion.addEventListener("onDoubleClick", new EventListener() {

				@Override
				public void onEvent(Event event) throws Exception {
					GP_PricingEspecificoOcupacion especificoOcupacion = (GP_PricingEspecificoOcupacion) pricingListEspOcupacion.getSelected();
					verPricingEspecificoOcupacion(especificoOcupacion, true);
				}
			});
			pricingListEspAgencia.setData(pricingEspecifico.getPricingEspecificoAgenciaListActivos());
						
			
			pricingListEspCanal.setData(pricingEspecifico.getPricingEspecificoCanalListActivos());
			pricingListEspCategoria.setData(pricingEspecifico.getPricingEspecificoCategoriaList());
			
//			pricingEspecificoOriginal = pricingEspecifico.clonar();
		}

		fechaInicio.focus(); 
	}
	
	public void verPricingEspecificoOcupacion(GP_PricingEspecificoOcupacion especificoOcupacion, Boolean isEdicao) {

		Map args = new HashMap();
		args.put("pricingEspecifico", pricingEspecifico);
		args.put("pricingEspecificoOcupacion", especificoOcupacion);
		args.put("isEdicao", isEdicao);
		args.put("pricingListEspOcupacion", pricingListEspOcupacion);

		openWindow("/gui/gestao_pricing/editarGP_PricingEspecificoOcupacion.zul",
				Labels.getLabel("editarPricingController.window.title"), args, MODAL);
	}

	public void onClick$btnNovoPricingEspOcup(Event ev) throws InterruptedException {
		verPricingEspecificoOcupacion(new GP_PricingEspecificoOcupacion(), false);
	}
	
	public void onClick$btnNovoPricingCategoria(Event ev) throws InterruptedException {
		if (cmbCategoria.getSelectedItem() == null) {
			return;
		}
		GP_PricingEspecificoCategoria pricingCategoria = new GP_PricingEspecificoCategoria((Categoria) cmbCategoria.getSelectedItem().getValue(), pricingEspecifico, UsuarioLogado.getUsuarioLogado().getUsuarioId());

		if (pricingEspecifico.getPricingEspecificoCategoriaList().contains(pricingCategoria)) {
			Messagebox.show(
					Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.noPricingEspecificoCategoriaJaCadastrado"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else {
			pricingListEspCategoria.addItemNovo(pricingCategoria);
			pricingEspecifico.getPricingEspecificoCategoriaList().add(pricingCategoria);
		}

		cmbCategoria.setValue("");
	}
	
	public void onClick$btnNovoPricingAgencia(Event ev) throws InterruptedException {		
		if(cmbPuntoVenta.getSelectedItem() == null){
			return;
		}
		GP_PricingEspecificoAgencia pricingAgencia  = new GP_PricingEspecificoAgencia((PuntoVenta)cmbPuntoVenta.getSelectedItem().getValue(), pricingEspecifico, UsuarioLogado.getUsuarioLogado().getUsuarioId());
		
		if (pricingEspecifico.getPricingEspecificoAgenciasList().contains(pricingAgencia)) {
			Messagebox.show(
					Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.noPricingEspecificoAgenciaJaCadastrado"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else {
			pricingListEspAgencia.addItemNovo(pricingAgencia);
			pricingEspecifico.getPricingEspecificoAgenciasList().add(pricingAgencia);
			
			
			//se não estiver adicionando TODOS
			if(pricingAgencia.getPuntoVenta().getPuntoventaId() != -1){
				
				//busca o todos na lista
				for (GP_PricingEspecificoAgencia pea : pricingEspecifico.getPricingEspecificoAgenciasList() ) {
					if(pea.getPuntoVenta().getPuntoventaId().equals(new Integer("-1"))) {
						pricingListEspAgencia.removeItem(pea);
						pricingEspecificoADesativarAgencia.add(pea);
						break;
					}
				}
							
			}else {
				//se adicionou TODOS remove os outros
				for (GP_PricingEspecificoAgencia p : pricingEspecifico.getPricingEspecificoAgenciasList() ) {
					if(!p.getPuntoVenta().getPuntoventaId().equals(new Integer("-1"))) {
						pricingListEspAgencia.removeItem(p);
						pricingEspecificoADesativarAgencia.add(p);
					}
				}
			}
		}
		
		cmbPuntoVenta.setValue("");
	}
	
	public void onClick$btnNovoPricingCanal(Event ev) throws InterruptedException {
		
		if(cmbPtovta.getSelectedItem() == null){
			return;
		}
		GP_PricingEspecificoCanalVendas pricingCanal  = new GP_PricingEspecificoCanalVendas((TipoPuntoVenta)cmbPtovta.getSelectedItem().getValue(), pricingEspecifico, UsuarioLogado.getUsuarioLogado().getUsuarioId());
		
		if (pricingEspecifico.getPricingEspecificoCanalVendasList().contains(pricingCanal)) {
			Messagebox.show(
					Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.noPricingEspecificoCanalJaCadastrado"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else {
			pricingListEspCanal.addItemNovo(pricingCanal);
			pricingEspecifico.getPricingEspecificoCanalVendasList().add(pricingCanal);
			
			
			//se não estiver adicionando TODOS
			if(pricingCanal.getTipoPtovta().getTipoptovtaId() != -1){
				
				//busca o todos na lista
				for (GP_PricingEspecificoCanalVendas pecv : pricingEspecifico.getPricingEspecificoCanalVendasList() ) {
					if(pecv.getTipoPtovta().getTipoptovtaId().equals(new Short("-1"))) {
						pricingListEspCanal.removeItem(pecv);
						pricingEspecificoADesativarCanal.add(pecv);
						break;
					}
				}
							
			}else {
				//se adicionou TODOS remove os outros
				for (GP_PricingEspecificoCanalVendas p : pricingEspecifico.getPricingEspecificoCanalVendasList() ) {
					if(!p.getTipoPtovta().getTipoptovtaId().equals(new Short("-1"))) {
						pricingListEspCanal.removeItem(p);
						pricingEspecificoADesativarCanal.add(p);
					}
				}
			}
		}
		
		cmbPtovta.setValue("");
	}

	public void onClick$btnApagarPricingEspOcup(Event ev) throws InterruptedException {
		if (pricingListEspOcupacion.getSelected() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.selectItem"),
					Labels.getLabel("editarPricingController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else {
			int resp = Messagebox.show(Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.borrarPergunta"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
			if (resp == Messagebox.YES) {
				GP_PricingEspecificoOcupacion especificoOcupacion = (GP_PricingEspecificoOcupacion) pricingListEspOcupacion.getSelected();

				if (especificoOcupacion.getPricingEspecificoOcupacionId() != null) {
					especificoOcupacion.setActivo(false);
					pricingListEspOcupacion.removeItem(especificoOcupacion);
					pricingEspecificoADesativar.add(especificoOcupacion);
				} else {
					pricingListEspOcupacion.removeSelectedItem();
					removerPricingOcupacion(especificoOcupacion);
				}
			}
		}
	}
	
	public void onClick$btnApagarPricingEspCategoria(Event ev) throws InterruptedException {
		if (pricingListEspCategoria.getSelected() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.selectItem"),
					Labels.getLabel("editarPricingController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else {
			int resp = Messagebox.show(Labels.getLabel("editarPricingEspecificoCategoriaController.MSG.borrarPergunta"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
			if (resp == Messagebox.YES) {
				GP_PricingEspecificoCategoria pricingCategoria = (GP_PricingEspecificoCategoria) pricingListEspCategoria.getSelected();
				pricingListEspCategoria.removeItem(pricingCategoria);
				
				if(pricingCategoria.getPricingEspecificoCategoriaId() != null){
					pricingCategoria.setActivo(false);
					pricingEspecificoADesativarCategoria.add(pricingCategoria);
				}else{
					removerPricingCategoria(pricingCategoria);					
				}
			}
		}
	}
	
	public void onClick$btnApagarPricingEspAgencia(Event ev) throws InterruptedException {
		if (pricingListEspAgencia.getSelected() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.selectItem"),
					Labels.getLabel("editarPricingController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else {
			int resp = Messagebox.show(Labels.getLabel("editarPricingEspecificoAgenciaController.MSG.borrarPergunta"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
			if (resp == Messagebox.YES) {
				GP_PricingEspecificoAgencia pricingEspecificoAgencia = (GP_PricingEspecificoAgencia) pricingListEspAgencia.getSelected();

				if (pricingEspecificoAgencia.getPricingEspecificoAgenciaId() != null) {
					pricingEspecificoAgencia.setActivo(false);
					pricingListEspAgencia.removeItem(pricingEspecificoAgencia);
					pricingEspecificoADesativarAgencia.add(pricingEspecificoAgencia);
				} else {
					pricingListEspAgencia.removeSelectedItem();
					removerPricingAgencia(pricingEspecificoAgencia);
				}
			}
		}
	}
	
	public void onClick$btnApagarPricingEspCanal(Event ev) throws InterruptedException {
		if (pricingListEspCanal.getSelected() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.selectItem"),
					Labels.getLabel("editarPricingController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else {
			int resp = Messagebox.show(Labels.getLabel("editarPricingEspecificoCanalVendaController.MSG.borrarPergunta"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
			if (resp == Messagebox.YES) {
				GP_PricingEspecificoCanalVendas pricingEspecificoCanal = (GP_PricingEspecificoCanalVendas) pricingListEspCanal.getSelected();
				if(pricingEspecifico.getPricingEspecificoCanalVendasList().indexOf(pricingEspecificoCanal)>-1){
					pricingEspecifico.getPricingEspecificoCanalVendasList().get(pricingEspecifico.getPricingEspecificoCanalVendasList().indexOf(pricingEspecificoCanal)).setActivo(Boolean.FALSE);
				}
			
				if (pricingEspecificoCanal.getPricingEspecificoCanalId() != null) {
					pricingEspecificoCanal.setActivo(false);
					pricingListEspCanal.removeItem(pricingEspecificoCanal);
					pricingEspecificoADesativarCanal.add(pricingEspecificoCanal);
				} else {
					pricingListEspCanal.removeSelectedItem();
					removerPricingCanalVendas(pricingEspecificoCanal);
				}
				
			}
		}
	}

	private void removerPricingOcupacion(GP_PricingEspecificoOcupacion especificoOcupacion) {
		if (especificoOcupacion.getPricingEspecificoOcupacionId() != null) {
			pricingEspecifico.getPricingEspecificoOcupacionsList().remove(especificoOcupacion);
		} else {
			int index = 1;
			for (GP_PricingEspecificoOcupacion pricingEspecificoOcupacion : pricingEspecifico.getPricingEspecificoOcupacionsList()) {
				if(especificoOcupacion.getTarifa() != null){
					if (pricingEspecificoOcupacion.getOcupacionfinal().equals(especificoOcupacion.getOcupacionfinal()) &&
							pricingEspecificoOcupacion.getOcupacioninicial().equals(especificoOcupacion.getOcupacioninicial()) &&
							pricingEspecificoOcupacion.getTarifa().equals(especificoOcupacion.getTarifa())) {
						break;
					}
				}
				if(especificoOcupacion.getDescuento() != null){
					if (pricingEspecificoOcupacion.getOcupacionfinal().equals(especificoOcupacion.getOcupacionfinal()) &&
							pricingEspecificoOcupacion.getOcupacioninicial().equals(especificoOcupacion.getOcupacioninicial()) &&
							pricingEspecificoOcupacion.getDescuento().equals(especificoOcupacion.getDescuento())) {
						break;
					}
				}
				
				index++;
			}
			pricingEspecifico.getPricingEspecificoOcupacionsList().remove(index - 1);
		}
	}
	private void removerPricingCategoria(GP_PricingEspecificoCategoria especificoCategoria){
		if(especificoCategoria.getPricingEspecificoCategoriaId() != null){
			pricingEspecifico.getPricingEspecificoCategoriaList().remove(especificoCategoria);
		}
	}
	
	private void removerPricingAgencia(GP_PricingEspecificoAgencia especificoAgencia) {
		if (especificoAgencia.getPricingEspecificoAgenciaId() != null) {
			pricingEspecifico.getPricingEspecificoAgenciasList().remove(especificoAgencia);
		} 
	}
	
	private void removerPricingCanalVendas(GP_PricingEspecificoCanalVendas especificoCanalVendas) {
		if (especificoCanalVendas.getPricingEspecificoCanalId() != null) {
			pricingEspecifico.getPricingEspecificoCanalVendasList().remove(especificoCanalVendas);
		} 
	}

	public void onClick$btnModificarPricingEspOcup(Event ev) {
		GP_PricingEspecificoOcupacion especificoOcupacion = (GP_PricingEspecificoOcupacion) pricingListEspOcupacion.getSelected();

		if (especificoOcupacion != null) {
			verPricingEspecificoOcupacion(especificoOcupacion, true);
		} else {
			try {
				Messagebox.show(Labels.getLabel("editarPricingController.MSG.selectItem"),
						Labels.getLabel("editarPricingController.windowVigencia.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			} catch (InterruptedException ex) {
				log.error("", ex);
			}
		}
	}

	public void onClick$btnApagar(Event e) {
		// Esclusão Logica
		try {
			int resp = Messagebox.show(
					Labels.getLabel("editarPricingController.MSG.borrarPergunta"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {
				pricingEspecificoService.borrar(pricingEspecifico);
				Messagebox.show(
						Labels.getLabel("editarPricingController.MSG.borrarOK"),
						Labels.getLabel("busquedaPricingEspecificoController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				pricingList.removeItem(pricingEspecifico);

				closeWindow();
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		nombrePricing.getValue();
		fechaInicio.getValue();
		fechaFin.getValue();
		tarifaAbierto.getValue();

		List<GP_PricingEspecificoOcupacion> pricingEspecificoOcupacionList = new ArrayList<GP_PricingEspecificoOcupacion>();
		for (Object o : pricingListEspOcupacion.getData()) {
			GP_PricingEspecificoOcupacion p = (GP_PricingEspecificoOcupacion) o;	
			pricingEspecificoOcupacionList.add(p);	
		}
		pricingEspecifico.setPricingEspecificoOcupacionsList(pricingEspecificoOcupacionList);
		
		List<GP_PricingEspecificoCategoria> pec = (List<GP_PricingEspecificoCategoria>) pricingListEspCategoria.getModel();
		for(GP_PricingEspecificoCategoria pricingEspecificoCategoria : pec){
			if(!pricingEspecificoCategoria.getActivo()){
				pec.remove(pricingEspecificoCategoria);
			}
		}
		
		List<GP_PricingEspecificoCanalVendas> pecv =  (List<GP_PricingEspecificoCanalVendas>) pricingListEspCanal.getModel();
		for (GP_PricingEspecificoCanalVendas pricingEspecificoCanalVendas : pecv) {
			if(pricingEspecificoCanalVendas.getActivo().equals(Boolean.FALSE)){
				pecv.remove(pricingEspecificoCanalVendas);
			}
		}
		
		List<GP_PricingEspecificoAgencia> pea =  (List<GP_PricingEspecificoAgencia>) pricingListEspAgencia.getModel();
		for (GP_PricingEspecificoAgencia pricingEspecificoAgencia : pea) {
			if(pricingEspecificoAgencia.getActivo().equals(Boolean.FALSE)){
				pea.remove(pricingEspecificoAgencia);
			}
		}
		pricingEspecifico.setPricingEspecificoCategoriaList(pec);
		pricingEspecifico.setPricingEspecificoAgenciasList(pea);
		pricingEspecifico.setPricingEspecificoCanalVendasList(pecv);
		
		
		if(pricingEspecifico.getPricingEspecificoCategoriaList().isEmpty()){
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.categoria"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}
		
		if (pricingEspecifico.getClaseServicio() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.claseServicio"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);

			return;
		}

		if (pricingEspecifico.getMarca() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.marca"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);

			return;
		}

		if (pricingEspecifico.getParada() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.origen"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);

			return;
		}

		if (pricingEspecifico.getParada1() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.destino"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);

			return;
		}

		if (pricingEspecifico.getMoneda() == null) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.moneda"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);

			return;
		}

		if (pricingEspecifico.getFechorinicio().after(pricingEspecifico.getFechorfin())) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.datasFecha"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);

			return;
		}
		if (rdExibirVendaSi.isChecked()) {
			pricingEspecifico.setExibeVenda(Boolean.TRUE);
		} else {
			pricingEspecifico.setExibeVenda(Boolean.FALSE);
		}
		
		if (rdSobreposicaoSim.isChecked()) {
			pricingEspecifico.setIndSobreposicao(Boolean.TRUE);
		} else {
			pricingEspecifico.setIndSobreposicao(Boolean.FALSE);
		}
		
		if (colorChoose.getValue() != null) {
			pricingEspecifico.setColor(colorChoose.getValue());
		}
		
		if (pricingEspecifico.getCorridaId() != null) {
			CorridaCtrl corridaCtrlId = corridaCtrlService.obtenerID(pricingEspecifico.getCorridaId());
			if (corridaCtrlId == null) {
				Messagebox.show(Labels.getLabel("editarPricingController.MSG.corridaId", new Object[] { pricingEspecifico.getCorridaId() }),
						Labels.getLabel("busquedaPricingEspecificoController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);

				return;
			} else {
				CorridaCtrl corridaCtrlFinal = corridaCtrlService.buscar(
						pricingEspecifico.getCorridaId(),
						pricingEspecifico.getParada(),
						pricingEspecifico.getParada1(),
						pricingEspecifico.getClaseServicio(),
						pricingEspecifico.getMarca());

				if (corridaCtrlFinal == null) {
					Integer opcao = Messagebox.show(Labels.getLabel("editarPricingController.MSG.corridaIdFinalNaoExiste", new Object[] { pricingEspecifico.getCorridaId() }),
							Labels.getLabel("busquedaPricingEspecificoController.window.title"),
							Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

					if (opcao.equals(Messagebox.NO)) {
						return;
					}
				}
			}
		}

		if (!validarPricingEspecificoOcupacion()) {
			return;
		}

		List<GP_PricingEspecifico> lsPricing = pricingEspecificoService.buscarPorNome(pricingEspecifico);
		boolean podeSalvar = false;
		if (lsPricing.isEmpty()) {
			podeSalvar = true;
		} else {
			for (GP_PricingEspecifico p : lsPricing) {
				if (p.getPricingespecificoId().equals(pricingEspecifico.getPricingespecificoId())) {
					podeSalvar = true;
				}
			}
		}

		if (podeSalvar) {
			if(pricingEspecifico.getPricingEspecificoAgenciasList() == null ){								
				pricingEspecifico.setPricingEspecificoAgenciasList(new ArrayList<GP_PricingEspecificoAgencia>());
			}
			if (pricingEspecifico.getPricingEspecificoAgenciasList().isEmpty()){
				
				int resp = Messagebox.show(
						Labels.getLabel("editarPricingEspecificoAgenciaController.MSG.perguntaAdicionarTodosAgencia"),
						Labels.getLabel("busquedaPricingEspecificoController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
				if(resp == Messagebox.YES){
					
					GP_PricingEspecificoAgencia pea1 = new GP_PricingEspecificoAgencia();
					pea1.setPricingEspecifico(pricingEspecifico);
					PuntoVenta pv = puntoVenService.obtenerID(-1);
					pea1.setPuntoVenta(pv);
					pea1.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					pea1.setFecmodif(new Date());
					pea1.setActivo(Boolean.TRUE);
					pricingEspecifico.setPricingEspecificoAgenciasList(new ArrayList<GP_PricingEspecificoAgencia>());
					pricingEspecifico.getPricingEspecificoAgenciasList().add(pea1);
					
					if(pricingEspecifico.getPricingEspecificoAgenciasList().contains(pea1) && pricingEspecifico.getPricingEspecificoAgenciasList().size()>1){
						pricingEspecifico.getPricingEspecificoAgenciasList().get(pricingEspecifico.getPricingEspecificoAgenciasList().indexOf(pea1)).setActivo(Boolean.FALSE);
					}
				}else{
					Messagebox.show(Labels.getLabel("editarPricingEspecificoAgenciaController.MSG.agenciaVazio"),
							Labels.getLabel("busquedaPricingEspecificoController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);

					return;
				}
			}
			
			if(pricingEspecifico.getPricingEspecificoCanalVendasList() == null ){
				pricingEspecifico.setPricingEspecificoCanalVendasList(new ArrayList<GP_PricingEspecificoCanalVendas>());
			}
			
			if (pricingEspecifico.getPricingEspecificoCanalVendasList().isEmpty()){	
				
				int resp = Messagebox.show(
						Labels.getLabel("editarPricingEspecificoCanalVendaController.MSG.perguntaAdicionarTodosCanalVendas"),
						Labels.getLabel("busquedaPricingEspecificoController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
				if(resp == Messagebox.YES){
					TipoPuntoVenta tpv = puntoVentaService.obtenerID(new Short("-1"));
					GP_PricingEspecificoCanalVendas canalTODOS = new GP_PricingEspecificoCanalVendas();
					canalTODOS.setTipoPtovta(tpv);
					canalTODOS.setActivo(Boolean.TRUE);
					canalTODOS.setPricingEspecifico(pricingEspecifico);
					pricingEspecifico.getPricingEspecificoCanalVendasList().add(canalTODOS);
					if(pricingEspecifico.getPricingEspecificoCanalVendasList().contains(canalTODOS) && pricingEspecifico.getPricingEspecificoCanalVendasList().size()>1){
						pricingEspecifico.getPricingEspecificoCanalVendasList().get(pricingEspecifico.getPricingEspecificoCanalVendasList().indexOf(canalTODOS)).setActivo(Boolean.FALSE);
					}
				}else{
					Messagebox.show(Labels.getLabel("editarPricingEspecificoCanalVendaController.MSG.canalVendasVazio"),
							Labels.getLabel("busquedaPricingEspecificoController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);

					return;
				}
			}
			
			if (pricingEspecifico.getPricingespecificoId() == null) {
				pricingEspecificoService.suscribir(pricingEspecifico);
				pricingList.addItemNovo(pricingEspecifico);
			} else {
				pricingEspecificoService.actualizacion(pricingEspecifico);
				pricingList.updateItem(pricingEspecifico);
			}

			desativarPricingEspecificoCategoria();
			desativarPricingEspecificoOcupacionDesativados();
			desativarPricingEspecificoAgenciaDesativados();
			desativarPricingEspecificoCanalDesativados();

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

			closeWindow();
		} else {
			Messagebox.show(
					Labels.getLabel("MSG.Registro.Existe"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		}

	}

	private void compararAlteracoesESalvarHistorico() {
		try {
			pricingHistoricoService.compararESalvar(pricingEspecificoOriginal, pricingEspecifico);
		} catch (Exception e) {
			log.error("Erro ao salvar historico do Pricing Rapido: ", e);
		}
	}

	private void desativarPricingEspecificoCategoria(){
		for(GP_PricingEspecificoCategoria p : pricingEspecificoADesativarCategoria){
			p.setActivo(Boolean.FALSE);
			pricingEspecificoCategoriaService.actualizacion(p);
		}
	}
	
	private void desativarPricingEspecificoOcupacionDesativados() {
		for (GP_PricingEspecificoOcupacion p : pricingEspecificoADesativar) {
			p.setActivo(Boolean.FALSE);
			pricingEspecificoOcupacionService.actualizacion(p);
		}
	}
	
	private void desativarPricingEspecificoAgenciaDesativados() {
		for (GP_PricingEspecificoAgencia p : pricingEspecificoADesativarAgencia) {
			p.setActivo(Boolean.FALSE);
			pricingEspecificoAgenciaService.actualizacion(p);
		}
	}
	
	private void desativarPricingEspecificoCanalDesativados() {
		for (GP_PricingEspecificoCanalVendas p : pricingEspecificoADesativarCanal) {
			p.setActivo(Boolean.FALSE);
			pricingEspecificoCanalVendasService.actualizacion(p);
		}
	}

	/**
	 * Valida se a lista de ocupações são subsequentes e se a primeira ocupação possui ocupação inicial igual a 1.
	 * 
	 * @return
	 * @throws InterruptedException
	 */
	private boolean validarPricingEspecificoOcupacion() throws InterruptedException {
		if (pricingEspecifico.getPricingEspecificoOcupacionsListActivos() == null || pricingEspecifico.getPricingEspecificoOcupacionsListActivos().isEmpty()) {
			Messagebox.show(
					Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.noPricingEspecificoOcupacion"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return false;
		}

		List<GP_PricingEspecificoOcupacion> sOcupacionInicial = new ArrayList<GP_PricingEspecificoOcupacion>(pricingEspecifico.getPricingEspecificoOcupacionsListActivos());
		Collections.sort(sOcupacionInicial, new Comparator<GP_PricingEspecificoOcupacion>() {

			@Override
			public int compare(GP_PricingEspecificoOcupacion o1, GP_PricingEspecificoOcupacion o2) {
				return o1.getOcupacioninicial().compareTo(o2.getOcupacioninicial());
			}
		});

		if (sOcupacionInicial.iterator().next().getOcupacioninicial().intValue() != 1) {
			Messagebox.show(
					Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.pricingEspecificoOcupacionInicial"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return false;
		}

		boolean pricingEspecificoOcupacionNoSubsequente = false;
		for (int i = 0; i < sOcupacionInicial.size(); i++) {
			GP_PricingEspecificoOcupacion pricingEspecificoOcupacion = sOcupacionInicial.get(i);
			GP_PricingEspecificoOcupacion pricingEspecificoOcupacionAnterior = null;

			if (i > 0) {
				pricingEspecificoOcupacionAnterior = sOcupacionInicial.get(i - 1);
			}

			if (pricingEspecificoOcupacionAnterior != null
					&& pricingEspecificoOcupacionAnterior.getOcupacionfinal().add(new BigDecimal(1)).doubleValue() != pricingEspecificoOcupacion.getOcupacioninicial().doubleValue()) {
				pricingEspecificoOcupacionNoSubsequente = true;
				break;
			}
		}

		if (pricingEspecificoOcupacionNoSubsequente) {
			Messagebox.show(
					Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.pricingEspecificoOcupacionNoSubsequente"),
					Labels.getLabel("busquedaPricingEspecificoController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return false;
		}

		return true;
	}

	/**
	 * @return the pricingEspecificoService
	 */
	public GP_PricingEspecificoService getPricingEspecificoService() {
		return pricingEspecificoService;
	}

	/**
	 * @param pricingEspecificoService
	 *            the pricingEspecificoService to set
	 */
	public void setPricingEspecificoService(GP_PricingEspecificoService pricingEspecificoService) {
		this.pricingEspecificoService = pricingEspecificoService;
	}

	/**
	 * @return the pricingEspecifico
	 */
	public GP_PricingEspecifico getPricingEspecifico() {
		return pricingEspecifico;
	}

	/**
	 * @param pricingEspecifico
	 *            the pricingEspecifico to set
	 */
	public void setPricingEspecifico(GP_PricingEspecifico pricingEspecifico) {
		this.pricingEspecifico = pricingEspecifico;
	}

	/**
	 * @return the pricingList
	 */
	public MyListbox getPricingList() {
		return pricingList;
	}

	/**
	 * @param pricingList
	 *            the pricingList to set
	 */
	public void setPricingList(MyListbox pricingList) {
		this.pricingList = pricingList;
	}

	/**
	 * @return the cmbPtovta
	 */
	public Combobox getCmbPtovta() {
		return cmbPtovta;
	}

	/**
	 * @param cmbPtovta
	 *            the cmbPtovta to set
	 */
	public void setCmbPtovta(Combobox cmbPtovta) {
		this.cmbPtovta = cmbPtovta;
	}

	/**
	 * @return the cmbCategoria
	 */
	public Combobox getCmbCategoria() {
		return cmbCategoria;
	}

	/**
	 * @param cmbCategoria
	 *            the cmbCategoria to set
	 */
	public void setCmbCategoria(Combobox cmbCategoria) {
		this.cmbCategoria = cmbCategoria;
	}

	/**
	 * @return the cmbServicio
	 */
	public Combobox getCmbServicio() {
		return cmbServicio;
	}

	/**
	 * @param cmbServicio
	 *            the cmbServicio to set
	 */
	public void setCmbServicio(Combobox cmbServicio) {
		this.cmbServicio = cmbServicio;
	}

	/**
	 * @return the cmbMarca
	 */
	public Combobox getCmbMarca() {
		return cmbMarca;
	}

	/**
	 * @param cmbMarca
	 *            the cmbMarca to set
	 */
	public void setCmbMarca(Combobox cmbMarca) {
		this.cmbMarca = cmbMarca;
	}

	/**
	 * @return the cmbOrigem
	 */
	public Combobox getCmbOrigem() {
		return cmbOrigem;
	}

	/**
	 * @param cmbOrigem
	 *            the cmbOrigem to set
	 */
	public void setCmbOrigem(Combobox cmbOrigem) {
		this.cmbOrigem = cmbOrigem;
	}

	/**
	 * @return the cmbMoneda
	 */
	public Combobox getCmbMoneda() {
		return cmbMoneda;
	}

	/**
	 * @param cmbMoneda
	 *            the cmbMoneda to set
	 */
	public void setCmbMoneda(Combobox cmbMoneda) {
		this.cmbMoneda = cmbMoneda;
	}

	/**
	 * @return the cmbDestino
	 */
	public Combobox getCmbDestino() {
		return cmbDestino;
	}

	/**
	 * @param cmbDestino
	 *            the cmbDestino to set
	 */
	public void setCmbDestino(Combobox cmbDestino) {
		this.cmbDestino = cmbDestino;
	}

	/**
	 * @return the lsPtovata
	 */
	public List<TipoPuntoVenta> getLsPtovata() {
		return lsPtovata;
	}

	/**
	 * @param lsPtovata
	 *            the lsPtovata to set
	 */
	public void setLsPtovata(List<TipoPuntoVenta> lsPtovata) {
		this.lsPtovata = lsPtovata;
	}

	/**
	 * @return the lsCategoria
	 */
	public List<Categoria> getLsCategoria() {
		return lsCategoria;
	}

	/**
	 * @param lsCategoria
	 *            the lsCategoria to set
	 */
	public void setLsCategoria(List<Categoria> lsCategoria) {
		this.lsCategoria = lsCategoria;
	}

	/**
	 * @return the lsclaseServicio
	 */
	public List<ClaseServicio> getLsclaseServicio() {
		return lsclaseServicio;
	}

	/**
	 * @param lsclaseServicio
	 *            the lsclaseServicio to set
	 */
	public void setLsclaseServicio(List<ClaseServicio> lsclaseServicio) {
		this.lsclaseServicio = lsclaseServicio;
	}

	/**
	 * @return the lsMarca
	 */
	public List<Marca> getLsMarca() {
		return lsMarca;
	}

	/**
	 * @param lsMarca
	 *            the lsMarca to set
	 */
	public void setLsMarca(List<Marca> lsMarca) {
		this.lsMarca = lsMarca;
	}

	/**
	 * @return the lsMoneda
	 */
	public List<Moneda> getLsMoneda() {
		return lsMoneda;
	}

	/**
	 * @param lsMoneda
	 *            the lsMoneda to set
	 */
	public void setLsMoneda(List<Moneda> lsMoneda) {
		this.lsMoneda = lsMoneda;
	}

	/**
	 * @return the puntoVentaService
	 */
	public TipoPuntoVentaService getPuntoVentaService() {
		return puntoVentaService;
	}

	/**
	 * @param puntoVentaService
	 *            the puntoVentaService to set
	 */
	public void setPuntoVentaService(TipoPuntoVentaService puntoVentaService) {
		this.puntoVentaService = puntoVentaService;
	}

	/**
	 * @return the claseServicioService
	 */
	public ClaseServicioService getClaseServicioService() {
		return claseServicioService;
	}

	/**
	 * @param claseServicioService
	 *            the claseServicioService to set
	 */
	public void setClaseServicioService(ClaseServicioService claseServicioService) {
		this.claseServicioService = claseServicioService;
	}

	/**
	 * @return the marcaService
	 */
	public MarcaService getMarcaService() {
		return marcaService;
	}

	/**
	 * @param marcaService
	 *            the marcaService to set
	 */
	public void setMarcaService(MarcaService marcaService) {
		this.marcaService = marcaService;
	}

	/**
	 * @return the paradaService
	 */
	public ParadaService getParadaService() {
		return paradaService;
	}

	/**
	 * @param paradaService
	 *            the paradaService to set
	 */
	public void setParadaService(ParadaService paradaService) {
		this.paradaService = paradaService;
	}

	/**
	 * @return the monedaService
	 */
	public MonedaService getMonedaService() {
		return monedaService;
	}

	/**
	 * @param monedaService
	 *            the monedaService to set
	 */
	public void setMonedaService(MonedaService monedaService) {
		this.monedaService = monedaService;
	}

	public MyListbox getPricingListEspOcupacion() {
		return pricingListEspOcupacion;
	}

	public void setPricingListEspOcupacion(MyListbox pricingListEspOcupacion) {
		this.pricingListEspOcupacion = pricingListEspOcupacion;
	}

	public Textbox getTarifaAbierto() {
		return tarifaAbierto;
	}

	public void setTarifaAbierto(Textbox tarifaAbierto) {
		this.tarifaAbierto = tarifaAbierto;
	}
	
	public Radio getRdExibirVendaSi() {
		return rdExibirVendaSi;
	}

	public void setRdExibirVendaSi(Radio rdExibirVendaSi) {
		this.rdExibirVendaSi = rdExibirVendaSi;
	}

	public Radio getRdExibirVendaNo() {
		return rdExibirVendaNo;
	}

	public void setRdExibirVendaNo(Radio rdExibirVendaNo) {
		this.rdExibirVendaNo = rdExibirVendaNo;
	}
	
	public Radio getRdSobreposicaoSim() {
		return rdSobreposicaoSim;
	}

	public void setRdSobreposicaoSim(Radio rdSobreposicaoSim) {
		this.rdSobreposicaoSim = rdSobreposicaoSim;
	}

	public Radio getRdSobreposicaoNao() {
		return rdSobreposicaoNao;
	}

	public void setRdSobreposicaoNao(Radio rdSobreposicaoNao) {
		this.rdSobreposicaoNao = rdSobreposicaoNao;
	}

	public Colorbox getColorChoose() {
		return colorChoose;
	}

	public void setColorChoose(Colorbox colorChoose) {
		this.colorChoose = colorChoose;
	}

	public void onClick$btnCopiar(Event ev) throws InterruptedException {
		incluiCategoriasPadroesAntesCopiar();
		Map args = new HashMap();
		args.put("pricingEspecifico", pricingEspecifico);
		args.put("pricingCategoriaList", pricingEspecifico.getPricingEspecificoCategoriaList());

		openWindow("/gui/gestao_pricing/copiarGP_PricingEspecifico.zul",
				Labels.getLabel("copiarPricingEspecificoController.window.title"), args, MODAL);
	}
	
	private void incluiCategoriasPadroesAntesCopiar() {
		if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.USA_PADRAO_PRICING_TIPO_PASSAGEM_PET.getDescricao())) {
			Categoria categoriaNormal = getCategoriaNormal();
			Categoria categoriaPET = getCategoriaPET();
			Boolean existeNormal = false;
			Boolean existePET = false;

			for (GP_PricingEspecificoCategoria c : pricingEspecifico.getPricingEspecificoCategoriaList()) {
				if (c.getCategoria().equals(categoriaNormal)) {
					existeNormal = true;
				}
				if (c.getCategoria().equals(categoriaPET)) {
					existePET = true;
				}
			}

			if (!existeNormal) {
				incluirCategoriaNormal(categoriaNormal);
			}
			if (!existePET) {
				incluirCategoriaPet(categoriaPET);
			}
		}
	}

	@Override
	protected void incluirCategoriaNormal(Categoria categoriaNormal) {
		GP_PricingEspecificoCategoria pcNormal = new GP_PricingEspecificoCategoria(categoriaNormal, pricingEspecifico, UsuarioLogado.getUsuarioLogado().getUsuarioId());
		pricingListEspCategoria.addItemNovo(pcNormal);
		pricingEspecifico.getPricingEspecificoCategoriaList().add(pcNormal);
	}

	@Override
	protected void incluirCategoriaPet(Categoria categoriaPET) {
		GP_PricingEspecificoCategoria pcPET = new GP_PricingEspecificoCategoria(categoriaPET, pricingEspecifico, UsuarioLogado.getUsuarioLogado().getUsuarioId());
		pricingListEspCategoria.addItemNovo(pcPET);
		pricingEspecifico.getPricingEspecificoCategoriaList().add(pcPET);
	}
	
	public void onChange$colorChoose(Event ev) throws InterruptedException {
		colorChoose.setStyle(" background: #FFFFFF; font-style: oblique;");
	}

}
