/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.pricing;

import java.util.Calendar;
import java.util.Date;

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.event.Event;
import org.zkoss.zul.Datebox;

import com.rjconsultores.ventaboletos.entidad.Pricing;
import com.rjconsultores.ventaboletos.entidad.PricingVigencia;
import com.rjconsultores.ventaboletos.service.PricingVigenciaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

/**
 * 
 * @author Rafius
 */
@Controller("editarPricingVigenciaController")
@Scope("prototype")
public class EditarPricingVigenciaController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private PricingVigenciaService pricingVigenciaService;
	private PricingVigencia pricingVigencia;
	private MyListbox pricingVigenciaList;
	private static Logger log = Logger.getLogger(EditarPricingVigenciaController.class);
	private Datebox fecinicioviaje;
	private Datebox fecfinviaje;
	private Datebox fecinicioventa;
	private Datebox fecfinventa;

	private Pricing pricing;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		pricingVigencia = (PricingVigencia) Executions.getCurrent().getArg().get("pricingVigencia");
		pricing = (Pricing) Executions.getCurrent().getArg().get("pricing");
		pricingVigenciaList = (MyListbox) Executions.getCurrent().getArg().get("pricingVigenciaList");

		super.doAfterCompose(comp);

		if (pricingVigencia.getPricingvigenciaId() != null) {
			fecinicioviaje.setValue(pricingVigencia.getFecinicioviaje());
			fecfinviaje.setValue(pricingVigencia.getFecfinviaje());
			fecinicioventa.setValue(pricingVigencia.getFecinicioventa());
			fecfinventa.setValue(pricingVigencia.getFecfinventa());
		}
	}

	public void onChange$fecfinviaje(Event ev) throws Exception {
		fecfinventa.setValue(fecfinviaje.getValue());
	}

	public void onClick$btnAdicionarVigencia(Event ev) throws Exception {
		fecinicioviaje.getValue();
		fecfinviaje.getValue();
		fecinicioventa.getValue();
		fecfinventa.getValue();

		if (fecinicioviaje.getValue().after(fecfinviaje.getValue())) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.fechaViaje"),
					Labels.getLabel("editarPricingController.windowVigencia.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else if (fecinicioventa.getValue().after(fecfinventa.getValue())) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.fechaVenta"),
					Labels.getLabel("editarPricingController.windowVigencia.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else if (fecfinventa.getValue().after(fecfinviaje.getValue())) {
			Messagebox.show(Labels.getLabel("editarPricingController.MSG.datas2"),
					Labels.getLabel("editarPricingController.windowVigencia.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		} else {
			try {
				pricingVigencia.setFecinicioviaje(fecinicioviaje.getValue());
				pricingVigencia.setFecfinviaje(fecfinviaje.getValue());
				pricingVigencia.setFecinicioventa(fecinicioventa.getValue());
				pricingVigencia.setFecfinventa(fecfinventa.getValue());

				pricingVigencia.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				pricingVigencia.setFecmodif(Calendar.getInstance().getTime());
				pricingVigencia.setActivo(Pricing.ATIVO);

				Date inicio = pricingVigencia.getFecinicioviaje();
				Date fim = pricingVigencia.getFecfinviaje();

				Boolean podeSalvar = pricingVigenciaService.podeSalvar(pricing, pricingVigencia, inicio, fim);
				if (pricingVigencia.getPricingvigenciaId() != null) {
					if (podeSalvar) {
						pricingVigenciaService.actualizacion(pricingVigencia);
						pricingVigenciaList.updateItem(pricingVigencia);
						closeWindow();
					} else {
						Messagebox.show(
								Labels.getLabel("MSG.Registro.Existe"),
								Labels.getLabel("editarPricingController.windowCategoria.title"),
								Messagebox.OK, Messagebox.EXCLAMATION);
					}
				} else {
					if (podeSalvar) {
						pricingVigenciaService.suscribir(pricingVigencia);
						pricingVigenciaList.addItemNovo(pricingVigencia);
						closeWindow();
					} else {
						Messagebox.show(
								Labels.getLabel("editarPricingController.MSG.vigenciaExiste"),
								Labels.getLabel("editarPricingController.windowCategoria.title"),
								Messagebox.OK, Messagebox.EXCLAMATION);
					}
				}
			} catch (Exception ex) {
				log.error("Erro ao adicionar pricing vigencia: " + ex);
			}
		}
	}

	public void onClick$btnRemoverVigencia(Event ev) {
		try {
			PricingVigencia pVigencia = (PricingVigencia) pricingVigenciaList.getSelected();
			if (pVigencia != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarPricingController.MSG.borrarPerguntaVigencia"),
						Labels.getLabel("editarPricingController.windowVigencia.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

				if (resp == Messagebox.YES) {
					pricingVigencia.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					pricingVigencia.setFecmodif(Calendar.getInstance().getTime());
					pricingVigencia.setActivo(Pricing.INATIVO);

					pricingVigenciaList.removeItem(pricingVigencia);
					pricingVigenciaService.borrar(pricingVigencia);
					closeWindow();
				}
			} else {
				Messagebox.show(
						Labels.getLabel("editarPricingController.MSG.selectItem"),
						Labels.getLabel("editarPricingController.windowVigencia.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public Datebox getFecfinventa() {
		return fecfinventa;
	}

	public void setFecfinventa(Datebox fecfinventa) {
		this.fecfinventa = fecfinventa;
	}

	public Datebox getFecfinviaje() {
		return fecfinviaje;
	}

	public void setFecfinviaje(Datebox fecfinviaje) {
		this.fecfinviaje = fecfinviaje;
	}

	public Datebox getFecinicioventa() {
		return fecinicioventa;
	}

	public void setFecinicioventa(Datebox fecinicioventa) {
		this.fecinicioventa = fecinicioventa;
	}

	public Datebox getFecinicioviaje() {
		return fecinicioviaje;
	}

	public void setFecinicioviaje(Datebox fecinicioviaje) {
		this.fecinicioviaje = fecinicioviaje;
	}

	public PricingVigencia getPricingVigencia() {
		return pricingVigencia;
	}

	public void setPricingVigencia(PricingVigencia pricingVigencia) {
		this.pricingVigencia = pricingVigencia;
	}

	public MyListbox getPricingVigenciaList() {
		return pricingVigenciaList;
	}

	public void setPricingVigenciaList(MyListbox pricingVigenciaList) {
		this.pricingVigenciaList = pricingVigenciaList;
	}

	public PricingVigenciaService getPricingVigenciaService() {
		return pricingVigenciaService;
	}

	public void setPricingVigenciaService(PricingVigenciaService pricingVigenciaService) {
		this.pricingVigenciaService = pricingVigenciaService;
	}
}
