/*
 * 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.Categoria;
import com.rjconsultores.ventaboletos.entidad.Ciudad;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Plaza;
import com.rjconsultores.ventaboletos.entidad.TarifaOficial;
import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.service.CategoriaService;
import com.rjconsultores.ventaboletos.service.CiudadService;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.MarcaService;
import com.rjconsultores.ventaboletos.service.MercadoCompetidoService;
import com.rjconsultores.ventaboletos.service.MonedaService;
import com.rjconsultores.ventaboletos.service.TarifaOficialService;
import com.rjconsultores.ventaboletos.service.TipoPuntoVentaService;
import com.rjconsultores.ventaboletos.service.TramoService;
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.MyTextboxDecimal;
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 org.zkoss.zul.Combobox;
import org.zkoss.zul.Textbox;

/**
 * 
 * @author rodrigo
 */
@Controller("editarTarifaOficialController")
@Scope("prototype")
public class EditarTarifaOficialController extends MyGenericForwardComposer {

	@Autowired
	private TarifaOficialService tarifaOficialService;
	@Autowired
	private CiudadService ciudadService;
	@Autowired
	private MarcaService marcaService;
	@Autowired
	private ClaseServicioService claseServicioService;
	@Autowired
	private TramoService tramoService;
	@Autowired
	private MonedaService monedaService;
	@Autowired
	private CategoriaService categoriaService;
	@Autowired
	private TipoPuntoVentaService tipoPuntoVentaService;
	@Autowired
	private MercadoCompetidoService mercadoCompetidoService;
	private TarifaOficial tarifaOficial;
	private MyListbox tarifaOficialList;
	private MyListbox tarifaOficialCategoriaList;
	private MyListbox tarifaOficialTipoPontoVentaList;
	private Combobox cmbTramo;
	private Combobox cmbClaseServicio;
	private Combobox cmbMarca;
	private Combobox cmbCategoria;
	private Combobox cmbTipoPontoVenta;
	private Combobox cmbVigencia;
	private MyTextboxDecimal dbPrecioAbiertoTarifaOficialCategoria;
	private MyTextboxDecimal dbPrecioTarifaOficialCategoria;
	private MyTextboxDecimal dbPrecioTipoPuntoVenta;
	private MyTextboxDecimal dbPrecioAbiertoTipoPuntoVenta;
	private MyTextboxDecimal txtPrecio;
	private MyTextboxDecimal txtPrecioOriginal;
	private MyTextboxDecimal txtPrecioRedAbierto;
	private MyTextboxDecimal txtOutros;
	private MyTextboxDecimal txtSeguro;
	private MyTextboxDecimal txtTaxa;
	private MyTextboxDecimal txtPedagio;
	private Textbox txtDescripcionTramo;
	private List<Marca> lsMarcas;
	private List<ClaseServicio> lsClaseServico;
	private List<Moneda> lsMonedas;
	private List<Categoria> lsCategoria;
	private List<TipoPuntoVenta> lsTipoPontoVenta;
	private Button btnApagar;
	private static Logger log = Logger.getLogger(EditarTarifaOficialController.class);

	public Combobox getCmbVigencia() {
		return cmbVigencia;
	}

	public void setCmbVigencia(Combobox cmbVigencia) {
		this.cmbVigencia = cmbVigencia;
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

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

	public Combobox getCmbCategoria() {
		return cmbCategoria;
	}

	public void setCmbCategoria(Combobox cmbCategoria) {
		this.cmbCategoria = cmbCategoria;
	}

	public MyListbox getTarifaOficialCategoriaList() {
		return tarifaOficialCategoriaList;
	}

	public void setTarifaOficialCategoriaList(MyListbox tarifaOficialCategoriaList) {
		this.tarifaOficialCategoriaList = tarifaOficialCategoriaList;
	}

	public Combobox getCmbClaseServicio() {
		return cmbClaseServicio;
	}

	public void setCmbClaseServicio(Combobox cmbClaseServicio) {
		this.cmbClaseServicio = cmbClaseServicio;
	}

	public Combobox getCmbMarca() {
		return cmbMarca;
	}

	public void setCmbMarca(Combobox cmbMarca) {
		this.cmbMarca = cmbMarca;
	}

	public Combobox getCmbTramo() {
		return cmbTramo;
	}

	public void setCmbTramo(Combobox cmbTramo) {
		this.cmbTramo = cmbTramo;
	}

	public List<ClaseServicio> getLsClaseServico() {
		return lsClaseServico;
	}

	public void setLsClaseServico(List<ClaseServicio> lsClaseServico) {
		this.lsClaseServico = lsClaseServico;
	}

	public List<Marca> getLsMarcas() {
		return lsMarcas;
	}

	public void setLsMarcas(List<Marca> lsMarcas) {
		this.lsMarcas = lsMarcas;
	}

	public List<Moneda> getLsMonedas() {
		return lsMonedas;
	}

	public void setLsMonedas(List<Moneda> lsMonedas) {
		this.lsMonedas = lsMonedas;
	}

	public TarifaOficial getTarifaOficial() {
		return tarifaOficial;
	}

	public void setTarifaOficial(TarifaOficial tarifaOficial) {
		this.tarifaOficial = tarifaOficial;
	}

	public List<Categoria> getLsCategoria() {
		return lsCategoria;
	}

	public void setLsCategoria(List<Categoria> lsCategoria) {
		this.lsCategoria = lsCategoria;
	}

	public List<TipoPuntoVenta> getLsTipoPontoVenta() {
		return lsTipoPontoVenta;
	}

	public void setLsTipoPontoVenta(List<TipoPuntoVenta> lsTipoPontoVenta) {
		this.lsTipoPontoVenta = lsTipoPontoVenta;
	}

	public Combobox getCmbTipoPontoVenta() {
		return cmbTipoPontoVenta;
	}

	public void setCmbTipoPontoVenta(Combobox cmbTipoPontoVenta) {
		this.cmbTipoPontoVenta = cmbTipoPontoVenta;
	}

	public MyListbox getTarifaOficialTipoPontoVentaList() {
		return tarifaOficialTipoPontoVentaList;
	}

	public void setTarifaOficialTipoPontoVentaList(MyListbox tarifaOficialTipoPontoVentaList) {
		this.tarifaOficialTipoPontoVentaList = tarifaOficialTipoPontoVentaList;
	}

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

		tarifaOficialList = (MyListbox) Executions.getCurrent().getArg().get("tarifaOficialList");
		tarifaOficial = (TarifaOficial) Executions.getCurrent().getArg().get("tarifaOficial");

		tarifaOficial = tarifaOficialService.obtenerID(tarifaOficial.getTarifaOficialId());

		lsMarcas = marcaService.buscarMarcaPorEmpresa(UsuarioLogado.getUsuarioLogado().getEmpresa());

		lsClaseServico = new ArrayList<ClaseServicio>();
		lsClaseServico.add(null);
		lsClaseServico.addAll(claseServicioService.obtenerTodos());

		lsMonedas = new ArrayList<Moneda>();
		lsMonedas.add(null);
		lsMonedas.addAll(monedaService.obtenerTodos());
		
		lsCategoria = new ArrayList<Categoria>();
		lsCategoria.add(null);
		lsCategoria.addAll(categoriaService.obtenerTodos());

		lsTipoPontoVenta = new ArrayList<TipoPuntoVenta>();
		lsTipoPontoVenta.add(null);
		lsTipoPontoVenta.addAll(tipoPuntoVentaService.obtenerTodos());
		lsTipoPontoVenta.remove(tipoPuntoVentaService.obtenerID((short) -1));

		if (tarifaOficial.getTarifaOficialId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		} else {
			StringBuilder sb = new StringBuilder("");
			sb.append(tarifaOficial.getTramo().getOrigem()).append(" - ").append(tarifaOficial.getTramo().getDestino()).append(" | ").append(tarifaOficial.getTramo().getVia().getNombvia());
			txtDescripcionTramo.setText(sb.toString());

			tarifaOficial.setPreciooriginal(tarifaOficial.getPrecio());
		}
	}

	private void validarObligatorio() {
		txtPrecio.getValue();
		txtPrecioRedAbierto.getValue();
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		validarObligatorio();
		
		txtPrecio.getValue();
		txtPrecioRedAbierto.getValue();
		txtPrecioOriginal.getValue();
		txtOutros.getValue();
		txtSeguro.getValue();
		txtTaxa.getValue();
		txtPedagio.getValue();
		
		tarifaOficial.setFecmodif(Calendar.getInstance().getTime());
		tarifaOficial.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		tarifaOficial.setActivo(Boolean.TRUE);

		tarifaOficialService.actualizacion(tarifaOficial);
		tarifaOficialList.updateItem(tarifaOficial);

		Messagebox.show(
				Labels.getLabel("editarTarifaOficialController.btnFechar.MSG.SuscbrirOK"),
				Labels.getLabel("editarTarifaOficialController.window.title"),
				Messagebox.OK, Messagebox.INFORMATION);

		closeWindow();

	}

	public void onClick$btnApagar(Event ev) {
		tarifaOficial.setFecmodif(Calendar.getInstance().getTime());
		tarifaOficial.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		tarifaOficial.setActivo(Boolean.TRUE);

		try {
			int opcao = Messagebox.show(
					Labels.getLabel("editarTarifaOficialController.btnFechar.MSG.Deseja.Borrar"),
					Labels.getLabel("editarTarifaOficialController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (opcao == Messagebox.YES) {
				tarifaOficialService.borrar(tarifaOficial);
				tarifaOficialList.removeItem(tarifaOficial);

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

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