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

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.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.Combobox;

import com.rjconsultores.ventaboletos.entidad.ConfigRestriccionPago;
import com.rjconsultores.ventaboletos.entidad.FormaPago;
import com.rjconsultores.ventaboletos.entidad.RestriccionPago;
import com.rjconsultores.ventaboletos.service.ConfigRestriccionPagoService;
import com.rjconsultores.ventaboletos.service.FormaPagoService;
import com.rjconsultores.ventaboletos.service.RestriccionPagoService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

/**
 * 
 * @author Administrador
 */
@Controller("editarRestriccionFormaPagoController")
@Scope("prototype")
public class EditarRestriccionFormaPagoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private FormaPagoService formaPagoService;
	@Autowired
	private RestriccionPagoService restriccionPagoService;
	@Autowired
	private ConfigRestriccionPagoService configRestriccionPagoService;
	private ConfigRestriccionPago configRestriccionPago;
	private MyListbox restriccionFormaPagoList;
	private List<FormaPago> lsFormaPago;
	private List<RestriccionPago> lsRestriccionPago;
	private Combobox cmbFormaPago;
	private Combobox cmbRestriccionFormaPago;
	private static Logger log = Logger.getLogger(EditarRestriccionFormaPagoController.class);

	public List<FormaPago> getLsFormaPago() {
		return lsFormaPago;
	}

	public void setLsFormaPago(List<FormaPago> lsFormaPago) {
		this.lsFormaPago = lsFormaPago;
	}

	public List<RestriccionPago> getLsRestriccionPago() {
		return lsRestriccionPago;
	}

	public void setLsRestriccionPago(List<RestriccionPago> lsRestriccionPago) {
		this.lsRestriccionPago = lsRestriccionPago;
	}

	public ConfigRestriccionPago getConfigRestriccionPago() {
		return configRestriccionPago;
	}

	public void setConfigRestriccionPago(ConfigRestriccionPago configRestriccionPago) {
		this.configRestriccionPago = configRestriccionPago;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsFormaPago = formaPagoService.obtenerTodos();
		lsRestriccionPago = restriccionPagoService.obtenerTodos();

		super.doAfterCompose(comp);

		configRestriccionPago = (ConfigRestriccionPago) Executions.getCurrent().getArg().get("configRestriccionPago");
		restriccionFormaPagoList = (MyListbox) Executions.getCurrent().getArg().get("configRestriccionFormaPagoList");

		cmbFormaPago.focus();
	}

	public void onClick$btnSalvar(Event ev) {
		cmbFormaPago.getValue();
		cmbRestriccionFormaPago.getValue();

		try {
			boolean puedoDarDeAlta = configRestriccionPagoService.puedoDarDeAlta(configRestriccionPago);

			List<ConfigRestriccionPago> lsConfig = configRestriccionPagoService.buscar(configRestriccionPago.getFormaPago(), configRestriccionPago.getRestriccion());

			boolean podeSalvar = false;
			if (lsConfig.isEmpty()) {
				podeSalvar = true;
			} else {
				for (ConfigRestriccionPago m : lsConfig) {
					if (m.getConfigrestriccionId().equals(configRestriccionPago.getConfigrestriccionId())) {
						podeSalvar = true;
					}
				}
			}

			if (!puedoDarDeAlta) {

				Integer idRestricion = (configRestriccionPago.getRestriccion().getRestriccionId() == 1)
						? 4
						: (configRestriccionPago.getRestriccion().getRestriccionId() == 2)
								? 5
								: (configRestriccionPago.getRestriccion().getRestriccionId() == 3)
										? 6 : 0;
				RestriccionPago restriContraria = restriccionPagoService.obtenerID(idRestricion.shortValue());
				String msg = "";
				if (restriContraria != null) {
					msg = restriContraria.getDescrestriccion();
				}

				Messagebox.show(
						Labels.getLabel("editarRestriccionFormaPagoController.MSG.puedoDarDeAlta", new Object[] { msg }),
						Labels.getLabel("editarRestriccionFormaPagoController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
				return;
			}

			if (podeSalvar) {
				configRestriccionPago.setActivo(Boolean.TRUE);
				configRestriccionPago.setFecmodif(Calendar.getInstance().getTime());
				configRestriccionPago.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

				if (configRestriccionPago.getConfigrestriccionId() == null) {
					configRestriccionPagoService.suscribir(configRestriccionPago);
					restriccionFormaPagoList.addItem(configRestriccionPago);
				} else {
					configRestriccionPagoService.actualizacion(configRestriccionPago);
					restriccionFormaPagoList.updateItem(configRestriccionPago);
				}

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

				closeWindow();
			} else {
				Messagebox.show(
						Labels.getLabel("MSG.Registro.Existe"),
						Labels.getLabel("editarRestriccionFormaPagoController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnApagar(Event ev) {
		try {
			int resp = Messagebox.show(
					Labels.getLabel("editarRestriccionFormaPagoController.MSG.borrarPergunta"),
					Labels.getLabel("editarRestriccionFormaPagoController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {
				configRestriccionPagoService.borrar(configRestriccionPago);

				Messagebox.show(
						Labels.getLabel("editarRestriccionFormaPagoController.MSG.borrarOK"),
						Labels.getLabel("editarRestriccionFormaPagoController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				restriccionFormaPagoList.removeItem(configRestriccionPago);

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