/*
 * 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.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.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Row;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.service.MonedaService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
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 Rafius
 */
@Controller("editarMonedaController")
@Scope("prototype")
public class EditarMonedaController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private MonedaService monedaService;
	private Moneda moneda;
	private MyListbox monedaList;
	private Button btnApagar;
	private Button btnSalvar;
	private BusquedaMonedaController busquedaMonedaController;
	private static Logger log = Logger.getLogger(EditarMonedaController.class);
	private MyTextbox txtNome;
	private Row rowEquivalencia;

	public Button getBtnApagar() {
		return btnApagar;
	}

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

	public Textbox getTxtNome() {
		return txtNome;
	}

	public void setTxtNome(MyTextbox txtNome) {
		this.txtNome = txtNome;
	}

	public Button getBtnSalvar() {
		return btnSalvar;
	}

	public void setBtnSalvar(Button btnSalvar) {
		this.btnSalvar = btnSalvar;
	}

	public Row getRowEquivalencia() {
		return rowEquivalencia;
	}

	public void setRowEquivalencia(Row rowEquivalencia) {
		this.rowEquivalencia = rowEquivalencia;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		busquedaMonedaController = (BusquedaMonedaController) Executions.getCurrent().getArg().get("busquedaMonedaController");
		moneda = (Moneda) Executions.getCurrent().getArg().get("moneda");
		monedaList = (MyListbox) Executions.getCurrent().getArg().get("monedaList");

		if (moneda.getMonedaId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		} else {
			if (moneda.getMonedaId() <= 2) {
				btnApagar.setVisible(Boolean.FALSE);
				btnSalvar.setVisible(Boolean.FALSE);
				txtNome.setDisabled(Boolean.TRUE);

				Messagebox.show(
						Labels.getLabel("MSG.noEditabled"),
						Labels.getLabel("editarMonedaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}
		}

		if (!ApplicationProperties.getInstance().mostrarEquivalencia()) {
			rowEquivalencia.setVisible(Boolean.FALSE);
		}

		txtNome.focus();
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		txtNome.getValue();
		try {
			moneda.setActivo(true);
			moneda.setFecmodif(Calendar.getInstance().getTime());
			moneda.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

			if (moneda.getMonedaId() == null) {
				List<Moneda> lsMoneda = monedaService.buscar(moneda.getDescmoneda());

				boolean podeSalvar = false;
				if (lsMoneda.isEmpty()) {
					podeSalvar = true;
				} else {
					for (Moneda m : lsMoneda) {
						if (m.getMonedaId().equals(moneda.getMonedaId())) {
							podeSalvar = true;
						}
					}
				}

				if (!podeSalvar) {
					Messagebox.show(
							Labels.getLabel("MSG.Registro.Existe"),
							Labels.getLabel("editarMonedaController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
				} else {
					monedaService.suscribir(moneda);
					monedaList.addItem(moneda);

					Messagebox.show(
							Labels.getLabel("editarMonedaController.MSG.suscribirOK"),
							Labels.getLabel("editarMonedaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
					busquedaMonedaController.refreshLista();
					closeWindow();
				}
			} else {
				monedaService.actualizacion(moneda);
				monedaList.updateItem(moneda);

				Messagebox.show(
						Labels.getLabel("editarMonedaController.MSG.suscribirOK"),
						Labels.getLabel("editarMonedaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				busquedaMonedaController.refreshLista();
				closeWindow();
			}
		} catch (Exception ex) {
			log.error("editarMonedaController: " + ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarMonedaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

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

			if (resp == Messagebox.YES) {

				monedaService.borrar(moneda);

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

				monedaList.removeItem(moneda);

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

	public Moneda getMoneda() {
		return moneda;
	}

	public void setMoneda(Moneda moneda) {
		this.moneda = moneda;
	}

	public MyListbox getMonedaList() {
		return monedaList;
	}

	public void setMonedaList(MyListbox monedaList) {
		this.monedaList = monedaList;
	}

	public MonedaService getMonedaService() {
		return monedaService;
	}

	public void setMonedaService(MonedaService monedaService) {
		this.monedaService = monedaService;
	}
}
