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

import com.rjconsultores.ventaboletos.entidad.CategoriaDescuento;
import com.rjconsultores.ventaboletos.entidad.CategoriaPeriodo;
import com.rjconsultores.ventaboletos.service.CategoriaDescuentoService;
import com.rjconsultores.ventaboletos.service.CategoriaPeriodoService;
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.render.RenderConfiguracionCategoriaPeriodo;
import java.util.ArrayList;
import java.util.Calendar;
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.zul.Datebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Messagebox;

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

	private static final long serialVersionUID = 1L;
	@Autowired
	private CategoriaDescuentoService categoriaDescuentoService;
	@Autowired
	private CategoriaPeriodoService categoriaPeriodoService;
	private MyListbox categoriaDescuentoList;
	private MyListbox categoriaPeriodoList;
	private CategoriaDescuento categoriaDescuento;
	private List<CategoriaPeriodo> lsCategoriaPeriodo;
	private Datebox fecInicio;
	private Datebox fecFinal;
	private static Logger log = Logger.getLogger(EditarConfiguracionCategoriaPeriodoController.class);

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);

		categoriaDescuentoList = (MyListbox) Executions.getCurrent().getArg().get("categoriaDescuentoList");
		categoriaDescuento = (CategoriaDescuento) Executions.getCurrent().getArg().get("categoriaDescuento");

		categoriaPeriodoList.setItemRenderer(new RenderConfiguracionCategoriaPeriodo());
		lsCategoriaPeriodo = new ArrayList<CategoriaPeriodo>();

		if (categoriaDescuento.getCategoriadescuentoId() != null) {
			lsCategoriaPeriodo = categoriaDescuento.getCategoriaPeriodoList();
			categoriaPeriodoList.setData(lsCategoriaPeriodo);
		}
	}

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

		fecInicio.setConstraint("no empty, no past");
		fecFinal.setConstraint("no empty, no past");

		fecInicio.getValue();
		fecFinal.getValue();

		if (fecInicio.getValue().after(fecFinal.getValue())) {
			try {
				Messagebox.show(Labels.getLabel("editarConfiguracionCategoriaController.MSG.busquedaPeriodo"),
						Labels.getLabel("editarConfiguracionCategoriaController.window.title"), Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
				log.error(ex);
			}
		} else {
			try {
				CategoriaPeriodo cPeriodo = new CategoriaPeriodo();
				cPeriodo.setFecmodif(Calendar.getInstance().getTime());
				cPeriodo.setActivo(Boolean.TRUE);
				cPeriodo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				cPeriodo.setCategoriaDescuento(categoriaDescuento);

				cPeriodo.setFecinicio(fecInicio.getValue());
				cPeriodo.setFecfin(fecFinal.getValue());

				List<CategoriaPeriodo> lsVT1 = categoriaPeriodoService.buscarPeriodoIntervalo(cPeriodo);

				Boolean podeSalvar = lsVT1.isEmpty() ? true : false;
				// Se for ele mesmo pode salvar.
				if (lsVT1.size() == 1) {
					// Somente edicao
					if (categoriaDescuento.getCategoriadescuentoId() != null) {
						if (categoriaDescuento.getCategoriadescuentoId().equals(lsVT1.get(0).getCategoriaperiodoId())) {
							podeSalvar = true;
						}
					}
				}

				if (podeSalvar) {

					lsCategoriaPeriodo.add(cPeriodo);
					categoriaPeriodoList.setData(lsCategoriaPeriodo);

					categoriaDescuento.setCategoriaPeriodoList(lsCategoriaPeriodo);
					categoriaDescuentoList.updateItem(categoriaDescuento);

					categoriaPeriodoService.suscribir(cPeriodo);

					fecInicio.setConstraint("");
					fecFinal.setConstraint("");

					fecInicio.setValue(null);
					fecFinal.setValue(null);

					fecInicio.setConstraint("no empty");
					fecFinal.setConstraint("no empty");

				} else {
					Messagebox.show(
							Labels.getLabel("editarConfiguracionCategoriaController.MSG.conflitoVigencias"),
							Labels.getLabel("editarConfiguracionCategoriaController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
				}

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

	public void onClick$btnApagarPeriodo(Event ev) {
		try {
			CategoriaPeriodo cPeriodo = (CategoriaPeriodo) categoriaPeriodoList.getSelected();

			if (cPeriodo != null) {

				categoriaPeriodoService.borrar(cPeriodo);
				lsCategoriaPeriodo.remove(cPeriodo);
				categoriaPeriodoList.setData(lsCategoriaPeriodo);

				categoriaDescuento.setCategoriaPeriodoList(lsCategoriaPeriodo);
			} else {
				Messagebox.show(
						Labels.getLabel("editarConfiguracionCategoriaController.MSG.selecionarPeriodo"),
						Labels.getLabel("editarConfiguracionCategoriaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}

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

	public void onClick$btnSalvar(Event ev) {
		try {
			categoriaDescuento.setActivo(true);
			categoriaDescuento.setFecmodif(Calendar.getInstance().getTime());
			categoriaDescuento.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

			if (categoriaDescuento.getCategoriadescuentoId() != null) {
				categoriaDescuentoService.actualizacion(categoriaDescuento);
				categoriaDescuentoList.updateItem(categoriaDescuento);
			}

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