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

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

import org.apache.commons.lang.BooleanUtils;
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.zul.Button;

import com.rjconsultores.ventaboletos.entidad.FormaPagoDet;
import com.rjconsultores.ventaboletos.entidad.HistoricoFormaPagoPuntoVenta;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.service.HistoricoFormaPagoPuntoVentaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
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.MyTextbox;

/**
 *
 * @author Wallace
 */
@Controller("editarPuntoVentaMotivoFormaPagoController")
@Scope("prototype")
public class EditarPuntoVentaMotivoFormaPagoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private HistoricoFormaPagoPuntoVentaService historicoFormaPagoPuntoVentaService;
	private PuntoVenta puntoVenta;
	private Integer empresaId;
	private Button btnApagar;
	private MyTextbox txtMotivo;
	private static Logger log = LogManager.getLogger(EditarPuntoVentaMotivoFormaPagoController.class);
	private MyListbox formaPagoList;
	private MyListbox ptovtaHistoricoFormaPagoList;
	private FormaPagoDet formaPagoDet;
	private Boolean inclusao;
	@Autowired
	private PuntoVentaService puntoVentaService;

	public Button getBtnApagar() {
		return btnApagar;
	}

	public void setBtnApagar(Button btnApagar) {
		this.btnApagar = btnApagar;
	}

	public PuntoVenta getPuntoVenta() {
		return puntoVenta;
	}

	public void setPuntoVenta(PuntoVenta puntoVenta) {
		this.puntoVenta = puntoVenta;
	}

	public MyTextbox getTxtMotivo() {
		return txtMotivo;
	}

	public void setTxtMotivo(MyTextbox txtMotivo) {
		this.txtMotivo = txtMotivo;
	}

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

		puntoVenta = (PuntoVenta) Executions.getCurrent().getArg().get("puntoVenta");
		formaPagoList = (MyListbox) Executions.getCurrent().getArg().get("formaPagoList");
		formaPagoDet = (FormaPagoDet) Executions.getCurrent().getArg().get("formaPagoDet");
		inclusao = (Boolean) Executions.getCurrent().getArg().get("inclusao");
		puntoVenta.setHistoricoFormaPagoPuntoVentaList(new ArrayList<HistoricoFormaPagoPuntoVenta>());
		ptovtaHistoricoFormaPagoList = (MyListbox) Executions.getCurrent().getArg().get("ptovtaHistoricoFormaPagoList");
		empresaId = (Integer) Executions.getCurrent().getArg().get("empresaId");
		txtMotivo.focus();
	}

	@SuppressWarnings("unchecked")
	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		txtMotivo.getValue();
		List<FormaPagoDet> lsFormaPagoDet = null;

		if (puntoVenta.getPuntoventaId() == null) {
			Messagebox.show(
					Labels.getLabel("editarPuntoVentaMotivoFormaPagoController.MSG.puntoVentaNaoCadastrado"),
					Labels.getLabel("editarPuntoVentaMotivoFormaPagoController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			closeWindow();
			return;
		}

		try {

			HistoricoFormaPagoPuntoVenta historicoFormaPagoPuntoVenta = new HistoricoFormaPagoPuntoVenta();
			historicoFormaPagoPuntoVenta.setMotivo(txtMotivo.getValue());
			historicoFormaPagoPuntoVenta.setPuntoVenta(puntoVenta);
			historicoFormaPagoPuntoVenta.setFormaPagoId(formaPagoDet.getFormaPago().getFormapagoId().intValue());
			historicoFormaPagoPuntoVenta.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			historicoFormaPagoPuntoVenta.setFecmodif(Calendar.getInstance().getTime());
			historicoFormaPagoPuntoVenta.setActivo(Boolean.TRUE);
			historicoFormaPagoPuntoVenta.setFecAlteracao(Calendar.getInstance().getTime());
			historicoFormaPagoPuntoVenta.setEmpresaId(empresaId != null ? empresaId : formaPagoDet.getEmpresa().getEmpresaId());

			puntoVenta.getHistoricoFormaPagoPuntoVentaList().add(historicoFormaPagoPuntoVenta);

			if (BooleanUtils.toBoolean(inclusao)) {
				historicoFormaPagoPuntoVenta.setIndInclusao(Boolean.TRUE);
				formaPagoList.addItemNovo(formaPagoDet);
				lsFormaPagoDet = formaPagoList.getListData();
			} else {
				historicoFormaPagoPuntoVenta.setIndInclusao(Boolean.FALSE);
				formaPagoList.removeItem(formaPagoDet);
				lsFormaPagoDet = formaPagoList.getListData();
			}

			puntoVenta.setLsFormaPagoDet(lsFormaPagoDet);
			puntoVentaService.actualizacion(puntoVenta);
			puntoVenta.setHistoricoFormaPagoPuntoVentaList(historicoFormaPagoPuntoVentaService.obtenerTodosPorPuntoVenta(puntoVenta));
			ptovtaHistoricoFormaPagoList.setData(puntoVenta.getHistoricoFormaPagoPuntoVentaList());

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

		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(Labels.getLabel("MSG.Error"),Labels.getLabel("editarPuntoVentaMotivoFormaPagoController.window.title"),Messagebox.OK, Messagebox.ERROR);
		}
	}
}
