/*
 * 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.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.Checkbox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.TipoEventoExtra;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.exception.ValidacionCampoException;
import com.rjconsultores.ventaboletos.service.TipoEventoExtraService;
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("editarTipoEventoExtraController")
@Scope("prototype")
public class EditarTipoEventoExtraController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private TipoEventoExtraService tipoEventoExtraService;
	private TipoEventoExtra tipoEventoExtra;
	private MyListbox tipoEventoExtraList;
	private MyTextbox txtNome;
	private Button btnApagar;
	private Textbox impMax;
	private Checkbox cbValidaDocumento;
	private Radio raTipo11;
	private Radio raTipo22;
	private static Logger log = Logger.getLogger(EditarTipoEventoExtraController.class);
	
	public TipoEventoExtra getTipoEventoExtra() {
		return tipoEventoExtra;
	}

	public void setTipoEventoExtra(TipoEventoExtra tipoEventoExtra) {
		this.tipoEventoExtra = tipoEventoExtra;
	}

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

		tipoEventoExtra = (TipoEventoExtra) Executions.getCurrent().getArg().get("tipoEventoExtra");
		tipoEventoExtraList = (MyListbox) Executions.getCurrent().getArg().get("tipoEventoExtraList");

		if (tipoEventoExtra.getTipoeventoextraId() != null) {
			cbValidaDocumento.setChecked(tipoEventoExtra.getIndvalidadocumento());
		} else {
			btnApagar.setVisible(false);
		}

		if (tipoEventoExtra.getIndtipo() != null) {
			if (tipoEventoExtra.getIndtipo().equals("1")) {
				raTipo11.setChecked(Boolean.TRUE);
				raTipo22.setChecked(Boolean.FALSE);
			} else {
				raTipo11.setChecked(Boolean.FALSE);
				raTipo22.setChecked(Boolean.TRUE);
			}
		}

		txtNome.focus();
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		txtNome.getValue();
		impMax.getValue();
		
		tipoEventoExtra.setIndoperacion(TipoEventoExtra.OPERACION_NORMAL);
		tipoEventoExtra.setIndboleto(Boolean.FALSE);// não valida boleto
		tipoEventoExtra.setPorciva(BigDecimal.ZERO);
		tipoEventoExtra.setIndtipo(raTipo11.isChecked() ? "1" : "0");

		try {
			tipoEventoExtra.setActivo(Boolean.TRUE);
			tipoEventoExtra.setFecmodif(Calendar.getInstance().getTime());
			tipoEventoExtra.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

			List<TipoEventoExtra> lsTipoEventoExtra = tipoEventoExtraService.buscar(tipoEventoExtra.getDescTipoEvento());
			boolean podeSalvar = false;
			if (lsTipoEventoExtra.isEmpty()) {
				podeSalvar = true;
			} else {
				for (TipoEventoExtra b : lsTipoEventoExtra) {
					if (b.getTipoeventoextraId().equals(tipoEventoExtra.getTipoeventoextraId())) {
						podeSalvar = true;
					}
				}
			}
			if (!podeSalvar) {
				Messagebox.show(Labels.getLabel("MSG.Registro.Existe"),
						Labels.getLabel("editarTipoEventoExtraController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);

				return;
			} else {
				tipoEventoExtra.setIndvalidadocumento(cbValidaDocumento.isChecked());
				if (tipoEventoExtra.getTipoeventoextraId() == null) {
					tipoEventoExtraService.suscribir(tipoEventoExtra);
					tipoEventoExtraList.addItemNovo(tipoEventoExtra);
				} else {
					tipoEventoExtraService.actualizacion(tipoEventoExtra);
					tipoEventoExtraList.updateItem(tipoEventoExtra);
				}
			}

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

			closeWindow();

		} catch (ValidacionCampoException ve) {
			log.error("editarTipoEventoExtraController: ", ve);
			Messagebox.show(
					ve.getMessage(),
					Labels.getLabel("editarTipoEventoExtraController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

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

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

			if (resp == Messagebox.YES) {
				tipoEventoExtraService.borrar(tipoEventoExtra);

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

				tipoEventoExtraList.removeItem(tipoEventoExtra);

				closeWindow();
			}

		} catch (BusinessException ex) {
			Messagebox.show(ex.getLocalizedMessage(),
					Labels.getLabel("editarTipoEventoExtraController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}
}
