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

import java.math.BigDecimal;
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.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.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Doublebox;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.Banco;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.service.BancoService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.MonedaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;

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

	@Autowired
	private BancoService bancoService;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private PuntoVentaService puntoVentaService;
	@Autowired
	private MonedaService monedaService;
	private List<Empresa> lsEmpresa;
	private List<Moneda> lsMoneda;
	private List<PuntoVenta> lsPuntoVenta;
	private Banco banco;
	private MyListbox bancoList;
	private static Logger log = Logger.getLogger(EditarBancoController.class);
	private MyTextbox txtNome;
	private Button btnApagar;
	private MyTextbox refContrato;
	private MyTextbox concepto;
	private MyTextbox algoritmoref;
	private Doublebox numcuenta;
	private Combobox cmbEmpresa;
	private Combobox cmbMoneda;
	private MyComboboxPuntoVenta cmbPuntoVenta;

	public Banco getBanco() {
		return banco;
	}

	public void setBanco(Banco banco) {
		this.banco = banco;
	}

	public MyTextbox getAlgoritmoref() {
		return algoritmoref;
	}

	public void setAlgoritmoref(MyTextbox algoritmoref) {
		this.algoritmoref = algoritmoref;
	}

	public MyListbox getBancoList() {
		return bancoList;
	}

	public void setBancoList(MyListbox bancoList) {
		this.bancoList = bancoList;
	}

	public BancoService getBancoService() {
		return bancoService;
	}

	public void setBancoService(BancoService bancoService) {
		this.bancoService = bancoService;
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

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

	public MyTextbox getConcepto() {
		return concepto;
	}

	public void setConcepto(MyTextbox concepto) {
		this.concepto = concepto;
	}

	public static Logger getLog() {
		return log;
	}

	public static void setLog(Logger log) {
		EditarBancoController.log = log;
	}

	public Doublebox getNumcuenta() {
		return numcuenta;
	}

	public void setNumcuenta(Doublebox numcuenta) {
		this.numcuenta = numcuenta;
	}

	public MyTextbox getRefContrato() {
		return refContrato;
	}

	public void setRefContrato(MyTextbox refContrato) {
		this.refContrato = refContrato;
	}

	public MyTextbox getTxtNome() {
		return txtNome;
	}

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

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

	public void setCmbEmpresa(Combobox cmbEmpresa) {
		this.cmbEmpresa = cmbEmpresa;
	}

	public Combobox getCmbMoneda() {
		return cmbMoneda;
	}

	public void setCmbMoneda(Combobox cmbMoneda) {
		this.cmbMoneda = cmbMoneda;
	}

	public Combobox getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

	public void setCmbPuntoVenta(MyComboboxPuntoVenta cmbPuntoVenta) {
		this.cmbPuntoVenta = cmbPuntoVenta;
	}

	public EmpresaService getEmpresaService() {
		return empresaService;
	}

	public void setEmpresaService(EmpresaService empresaService) {
		this.empresaService = empresaService;
	}

	public List<Empresa> getLsEmpresa() {
		return lsEmpresa;
	}

	public void setLsEmpresa(List<Empresa> lsEmpresa) {
		this.lsEmpresa = lsEmpresa;
	}

	public List<Moneda> getLsMoneda() {
		return lsMoneda;
	}

	public void setLsMoneda(List<Moneda> lsMoneda) {
		this.lsMoneda = lsMoneda;
	}

	public List<PuntoVenta> getLsPuntoVenta() {
		return lsPuntoVenta;
	}

	public void setLsPuntoVenta(List<PuntoVenta> lsPuntoVenta) {
		this.lsPuntoVenta = lsPuntoVenta;
	}

	public MonedaService getMonedaService() {
		return monedaService;
	}

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

	public PuntoVentaService getPuntoVentaService() {
		return puntoVentaService;
	}

	public void setPuntoVentaService(PuntoVentaService puntoVentaService) {
		this.puntoVentaService = puntoVentaService;
	}
	
	private void aplicarMascara() {
		//Clients.evalJavaScript("jQuery('#" + numcuenta.getUuid() + "').mask('99999999999');");
    }

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

		lsEmpresa =  UsuarioLogado.getUsuarioLogado().getEmpresa();
		lsMoneda = monedaService.obtenerTodos();
		lsPuntoVenta = new ArrayList<PuntoVenta>();

		super.doAfterCompose(comp);

		banco = (Banco) Executions.getCurrent().getArg().get("banco");
		bancoList = (MyListbox) Executions.getCurrent().getArg()
				.get("bancoList");

		if (banco.getBancoId() != null) {
			numcuenta.setText(banco.getNumcuenta().toString());
			if (banco.getPuntoVenta() != null) {
				cmbPuntoVenta.setText(banco.getPuntoVenta().getNombpuntoventa());
			}

		}
		this.aplicarMascara();

		txtNome.focus();

	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		cmbPuntoVenta.getValue();
		cmbEmpresa.getValue();
		cmbMoneda.getValue();

		txtNome.getValue();
		refContrato.getValue();
		numcuenta.getValue();
		algoritmoref.getValue();

		try {

			banco.setActivo(Boolean.TRUE);
			banco.setFecmodif(Calendar.getInstance().getTime());
			banco.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			banco.setNumcuenta(new BigDecimal(numcuenta.getValue()));
			
			boolean podeSalvar = true;
			
			List<Banco> lsBanco = bancoService.buscar(banco);
					
			if (lsBanco != null && lsBanco.size() > 0) {
				podeSalvar = false;
			}

			Comboitem ci = cmbPuntoVenta.getSelectedItem();
			if (ci != null) {
				banco.setPuntoVenta((PuntoVenta) cmbPuntoVenta.getSelectedItem().getValue());
			}
			banco.setEmpresa((Empresa) cmbEmpresa.getSelectedItem().getValue());
			banco.setMoneda((Moneda) cmbMoneda.getSelectedItem().getValue());
			
			if (podeSalvar) {
				if (banco.getBancoId() == null) {
					bancoService.suscribir(banco);
					bancoList.addItem(banco);
				} else {
					bancoService.actualizacion(banco);
					bancoList.updateItem(banco);
				}

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

				closeWindow();
			} else {
				Messagebox.show(
	                    Labels.getLabel("MSG.Registro.Existe"),
	                    Labels.getLabel("editarBancoController.window.title"),
	                    Messagebox.OK, Messagebox.EXCLAMATION);
			}

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

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

		if (resp == Messagebox.YES) {

			bancoService.borrar(banco);

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

			bancoList.removeItem(banco);

			closeWindow();
		}
	}
}
