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

import java.util.Calendar;
import java.util.List;

import org.apache.commons.lang.math.NumberUtils;
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.zk.ui.event.InputEvent;
import org.zkoss.zkplus.databind.BindingListModelList;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.api.Spinner;

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.EsquemaAgrupacion;
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.RolOperativo;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.EsquemaAgrupacionService;
import com.rjconsultores.ventaboletos.service.EsquemaCorridaService;
import com.rjconsultores.ventaboletos.service.MarcaClaseServicioService;
import com.rjconsultores.ventaboletos.service.MarcaService;
import com.rjconsultores.ventaboletos.service.RolOperativoService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

/**
 * 
 * @author RJ Consultores
 */
@Controller("editarServicioController")
@Scope("prototype")
public class EditarServicioController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private List<RolOperativo> lsRolOperativo;
	private List<Marca> lsMarca;
	@Autowired
	private RolOperativoService rolOperativoService;
	@Autowired
	private ClaseServicioService claseService;
	@Autowired
	private MarcaClaseServicioService marcaClaseServicioService;
	@Autowired
	private MarcaService marcaService;
	@Autowired
	private EsquemaCorridaService esquemaCorridaService;
	@Autowired
	private EsquemaAgrupacionService esquemaAgrupacionService;
	@Autowired
	private EditarEsquemaAgrupacionController editarEsquemaAgrupacionController;

	private EsquemaCorrida esquemaCorrida;
	private EsquemaAgrupacion esquemaAgrupacion;

	private Intbox txtNumCorrida;
	private MyListbox esquemaCorridaList;
	private Spinner cantparados;
	private Combobox cmbRolOperativo;
	private Combobox cmbMarca;
	private Combobox cmbClase;

	private List<ClaseServicio> lsClase;

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

		esquemaCorrida = (EsquemaCorrida) Executions.getCurrent().getArg().get("esquemaCorrida");
		esquemaAgrupacion = (EsquemaAgrupacion) Executions.getCurrent().getArg().get("esquemaAgrupacion");
		esquemaCorridaList = (MyListbox) Executions.getCurrent().getArg().get("esquemaCorridaList");
		editarEsquemaAgrupacionController = (EditarEsquemaAgrupacionController) Executions.getCurrent().getArg().get("editarEsquemaAgrupacionController");

		lsClase = claseService.buscarTodosExceto(-1);

		lsRolOperativo = rolOperativoService.obtenerTodos();
		llenarMarcaPorClaseServicio();

		if (esquemaCorrida.getCantparados() == null) {
			esquemaCorrida.setCantparados(NumberUtils.INTEGER_ZERO);
		}

	}

	private void llenarMarcaPorClaseServicio() {
		if (esquemaCorrida.getClaseServicio() == null) {
			return;
		}
		lsMarca = marcaClaseServicioService.buscar(esquemaCorrida.getClaseServicio());
		BindingListModelList l = new BindingListModelList(lsMarca, true);
		cmbMarca.setModel(l);
	}

	public void onChange$cmbClase(InputEvent ev) {

		if (ev.isChangingBySelectBack()) {
			return;
		}
		llenarMarcaPorClaseServicio();
	}

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

		if (esquemaCorrida.getNumCorrida() == null) {
			Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.numCorrida"),
					Labels.getLabel("editarConfiguracionCorridaController.window.title"),
					Messagebox.OK,
					Messagebox.EXCLAMATION);
		} else if (esquemaCorrida.getRolOperativo() == null) {
			Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.rolOperativo"),
					Labels.getLabel("editarConfiguracionCorridaController.window.title"),
					Messagebox.OK,
					Messagebox.EXCLAMATION);
		} else if (esquemaCorrida.getMarca() == null) {
			Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.Marca"),
					Labels.getLabel("editarConfiguracionCorridaController.window.title"),
					Messagebox.OK,
					Messagebox.EXCLAMATION);
		} else {

			Boolean existeNumCorrida = true;
			existeNumCorrida = esquemaCorridaService.buscarNumCorrida(txtNumCorrida.getValue(), 9999);

			if (existeNumCorrida) {
				
				esquemaCorrida = esquemaCorridaService.obtenerByEsquemaCorrida(esquemaCorrida.getNumCorrida());
				
				if (esquemaCorrida.getEsquemaAgrupacionId() != null) {
					Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.AgrupacionCorrida"),
							Labels.getLabel("editarConfiguracionCorridaController.window.title"),
							Messagebox.OK,
							Messagebox.EXCLAMATION);

					return;
				}
			}
			
			esquemaCorrida.setActivo(Boolean.TRUE);
			esquemaCorrida.setFecmodif(Calendar.getInstance().getTime());
			esquemaCorrida.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

			Comboitem ciRol = cmbRolOperativo.getSelectedItem();
			Comboitem ciMarca = cmbMarca.getSelectedItem();

			esquemaCorrida.setCantparados(cantparados.getValue());
			esquemaCorrida.setRolOperativo(((RolOperativo) ciRol.getValue()));
			esquemaCorrida.setMarca((Marca) ciMarca.getValue());

			Comboitem ciClase = cmbClase.getSelectedItem();
			ClaseServicio clase = null;

			if (ciClase != null) {
				clase = (ClaseServicio) ciClase.getValue();
				esquemaCorrida.setClaseServicio(clase);
			}

			esquemaCorrida.setEmpresa(esquemaCorrida.getMarca().getEmpresa());
			esquemaCorrida.setEmpresa1(esquemaCorrida.getMarca().getEmpresa());
			esquemaCorrida.setTipocorrida("P");
			esquemaCorrida.setStatusCorrida("A");

			esquemaCorridaList.addItemNovo(esquemaCorrida);

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

			closeWindow();
		}
	}

	public List<RolOperativo> getLsRolOperativo() {
		return lsRolOperativo;
	}

	public void setLsRolOperativo(List<RolOperativo> lsRolOperativo) {
		this.lsRolOperativo = lsRolOperativo;
	}

	public RolOperativoService getRolOperativoService() {
		return rolOperativoService;
	}

	public void setRolOperativoService(RolOperativoService rolOperativoService) {
		this.rolOperativoService = rolOperativoService;
	}

	public ClaseServicioService getClaseService() {
		return claseService;
	}

	public void setClaseService(ClaseServicioService claseService) {
		this.claseService = claseService;
	}

	public List<Marca> getLsMarca() {
		return lsMarca;
	}

	public void setLsMarca(List<Marca> lsMarca) {
		this.lsMarca = lsMarca;
	}

	public MarcaClaseServicioService getMarcaClaseServicioService() {
		return marcaClaseServicioService;
	}

	public void setMarcaClaseServicioService(MarcaClaseServicioService marcaClaseServicioService) {
		this.marcaClaseServicioService = marcaClaseServicioService;
	}

	public EsquemaCorrida getEsquemaCorrida() {
		return esquemaCorrida;
	}

	public void setEsquemaCorrida(EsquemaCorrida esquemaCorrida) {
		this.esquemaCorrida = esquemaCorrida;
	}

	public Combobox getCmbMarca() {
		return cmbMarca;
	}

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

	public MarcaService getMarcaService() {
		return marcaService;
	}

	public void setMarcaService(MarcaService marcaService) {
		this.marcaService = marcaService;
	}

	public Intbox getTxtNumCorrida() {
		return txtNumCorrida;
	}

	public void setTxtNumCorrida(Intbox txtNumCorrida) {
		this.txtNumCorrida = txtNumCorrida;
	}

	public EsquemaCorridaService getEsquemaCorridaService() {
		return esquemaCorridaService;
	}

	public void setEsquemaCorridaService(EsquemaCorridaService esquemaCorridaService) {
		this.esquemaCorridaService = esquemaCorridaService;
	}

	public EsquemaAgrupacionService getEsquemaAgrupacionService() {
		return esquemaAgrupacionService;
	}

	public void setEsquemaAgrupacionService(EsquemaAgrupacionService esquemaAgrupacionService) {
		this.esquemaAgrupacionService = esquemaAgrupacionService;
	}

	public EsquemaAgrupacion getEsquemaAgrupacion() {
		return esquemaAgrupacion;
	}

	public void setEsquemaAgrupacion(EsquemaAgrupacion esquemaAgrupacion) {
		this.esquemaAgrupacion = esquemaAgrupacion;
	}

	public EditarEsquemaAgrupacionController getEditarEsquemaAgrupacionController() {
		return editarEsquemaAgrupacionController;
	}

	public void setEditarEsquemaAgrupacionController(EditarEsquemaAgrupacionController editarEsquemaAgrupacionController) {
		this.editarEsquemaAgrupacionController = editarEsquemaAgrupacionController;
	}

	public MyListbox getEsquemaCorridaList() {
		return esquemaCorridaList;
	}

	public void setEsquemaCorridaList(MyListbox esquemaCorridaList) {
		this.esquemaCorridaList = esquemaCorridaList;
	}

	public Spinner getCantparados() {
		return cantparados;
	}

	public void setCantparados(Spinner cantparados) {
		this.cantparados = cantparados;
	}

	public Combobox getCmbRolOperativo() {
		return cmbRolOperativo;
	}

	public void setCmbRolOperativo(Combobox cmbRolOperativo) {
		this.cmbRolOperativo = cmbRolOperativo;
	}

	public List<ClaseServicio> getLsClase() {
		return lsClase;
	}

	public void setLsClase(List<ClaseServicio> lsClase) {
		this.lsClase = lsClase;
	}

	public Combobox getCmbClase() {
		return cmbClase;
	}

	public void setCmbClase(Combobox cmbClase) {
		this.cmbClase = cmbClase;
	}

}
