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

import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
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.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.SeguroTarifa;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.service.SeguroTarifaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderSeguroTarifa;

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

	private static final long serialVersionUID = 1L;
	@Autowired
	private SeguroTarifaService seguroTarifaService;
	@Autowired
	private OrgaoConcedenteService orgaoConcedenteService;
	private OrgaoConcedente orgao;

	private List<SeguroTarifa> lsSeguroTarifa;
	private List<OrgaoConcedente> lsOrgaoConcedente;
	private MyListbox seguroTarifaList;
	private MyComboboxEstandar cmbOrgao;
	private Button btnApagar;
	private Button btnAdicionarSeguroTarifa;
	private MyTextboxDecimal txtTarifa;
	private MyTextboxDecimal txtValor;
	private static Logger log = Logger.getLogger(EditarSeguroTarifaController.class);

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

		lsOrgaoConcedente = orgaoConcedenteService.obtenerTodos();

		super.doAfterCompose(comp);

		orgao = (OrgaoConcedente) Executions.getCurrent().getArg().get("orgao");

		seguroTarifaList.setItemRenderer(new RenderSeguroTarifa());
		lsSeguroTarifa = new ArrayList<SeguroTarifa>();

		if (orgao != null
				&& orgao.getOrgaoConcedenteId() != null) {
			lsSeguroTarifa = seguroTarifaService.buscarPorOrgao(orgao);
			seguroTarifaList.setData(lsSeguroTarifa);
			cmbOrgao.setDisabled(Boolean.TRUE);
			cmbOrgao.setValue(orgao.getDescOrgao());
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {

		try {
			if (lsSeguroTarifa.isEmpty()) {
				Messagebox.show(
						Labels.getLabel("editarSeguroTarifaController.MSG.necessaitaInfromar.value"),
						Labels.getLabel("editarSeguroTarifaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
				return;
			}

			for (SeguroTarifa seguroTarifa : lsSeguroTarifa) {
				if (seguroTarifa.getSegurotarifaId() == null) {
					seguroTarifaService.suscribir(seguroTarifa);
				}
			}
			Messagebox.show(
					Labels.getLabel("editarSeguroTarifaController.MSG.suscribirOK"),
					Labels.getLabel("editarSeguroTarifaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();

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

		}
	}

	public void onClick$btnAdicionarSeguroTarifa(Event ev) throws InterruptedException {
		cmbOrgao.getValue();
		txtTarifa.getValue();
		txtValor.getValue();

		if (lsSeguroTarifa.isEmpty()) {

			lsSeguroTarifa = seguroTarifaService.buscarPorOrgao((OrgaoConcedente) cmbOrgao.getSelectedItem().getValue());
			seguroTarifaList.setData(lsSeguroTarifa);
		}

		// ChecandoDuplicado
		boolean existe = false;
		for (SeguroTarifa seguroTarifa : lsSeguroTarifa) {
			if (seguroTarifa.getValortarifaate().equals(txtTarifa.getValueDecimal())) {
				existe = true;
			}
		}

		if (existe) {
			Messagebox.show(
					Labels.getLabel("editarSeguroTarifaController.MSG.existe"),
					Labels.getLabel("editarSeguroTarifaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			limparInput();
			return;
		}

		SeguroTarifa Tarifa = new SeguroTarifa();
		Tarifa.setOrgaoconcedente((OrgaoConcedente) cmbOrgao.getSelectedItem().getValue());
		Tarifa.setValortarifaate(txtTarifa.getValueDecimal());
		Tarifa.setValortarifa(txtValor.getValueDecimal());
		Tarifa.setActivo(true);
		Tarifa.setFecmodif(Calendar.getInstance().getTime());
		Tarifa.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

		lsSeguroTarifa.add(Tarifa);
		seguroTarifaList.setData(lsSeguroTarifa);

		cmbOrgao.setDisabled(Boolean.TRUE);
		limparInput();

	}

	private void limparInput() {
		txtTarifa.setConstraint("");
		txtValor.setConstraint("");
		txtTarifa.setText("");
		txtValor.setText("");
		txtTarifa.setConstraint("no empty, no zero, no negative");
		txtValor.setConstraint("no empty, no zero, no negative");
	}

	public void onClick$btnRemoverSeguroTarifa(Event ev) {
		SeguroTarifa tarifa = (SeguroTarifa) seguroTarifaList.getSelected();
		if (tarifa != null) {

			seguroTarifaService.borrar(tarifa);

			lsSeguroTarifa.remove(tarifa);
			seguroTarifaList.setData(lsSeguroTarifa);
		}
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

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

	public Button getBtnAdicionarSeguroTarifa() {
		return btnAdicionarSeguroTarifa;
	}

	public void setBtnAdicionarSeguroTarifa(Button btnAdicionarSeguroTarifa) {
		this.btnAdicionarSeguroTarifa = btnAdicionarSeguroTarifa;
	}

	public List<OrgaoConcedente> getLsOrgaoConcedente() {
		return lsOrgaoConcedente;
	}

	public void setLsOrgaoConcedente(List<OrgaoConcedente> lsOrgaoConcedente) {
		this.lsOrgaoConcedente = lsOrgaoConcedente;
	}

	public List<SeguroTarifa> getLsSeguroTarifa() {
		return lsSeguroTarifa;
	}

	public void setLsSeguroTarifa(List<SeguroTarifa> lsSeguroTarifa) {
		this.lsSeguroTarifa = lsSeguroTarifa;
	}

	public MyListbox getSeguroTarifaList() {
		return seguroTarifaList;
	}

	public void setSeguroTarifaList(MyListbox seguroTarifaList) {
		this.seguroTarifaList = seguroTarifaList;
	}

	public OrgaoConcedente getOrgao() {
		return orgao;
	}

	public void setOrgao(OrgaoConcedente orgao) {
		this.orgao = orgao;
	}

	public SeguroTarifaService getSeguroTarifaService() {
		return seguroTarifaService;
	}

	public void setSeguroTarifaService(SeguroTarifaService seguroTarifaService) {
		this.seguroTarifaService = seguroTarifaService;
	}

}
