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

import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.FormaPago;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.ParamAcumulaPunto;
import com.rjconsultores.ventaboletos.service.CategoriaService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.FormaPagoService;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.service.ParamAcumulaPuntoService;
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.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.zkoss.zk.ui.Component;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zkplus.databind.BindingListModelList;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Spinner;

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

    @Autowired
    private ParamAcumulaPuntoService paramAcumulaPuntoService;
    @Autowired
    private ParadaService paradaService;
    @Autowired
    private EmpresaService empresaService;
    @Autowired
    private CategoriaService categoriaService;
    @Autowired
    private FormaPagoService formaPagoService;
    private List<Empresa> lsEmpresa;
    private List<Categoria> lsCategoria;
    private List<FormaPago> lsFormaPago;
    private ParamAcumulaPunto paramAcumulaPunto;
    private MyListbox paramAcumulaPuntoList;
    private static Logger log = Logger.getLogger(EditarParamAcumulaPuntoController.class);
    private Combobox cmbOrigem;
    private Combobox cmbDestino;
    private Combobox cmbEmpresa;
    private Combobox cmbFormaPago;
    private Combobox cmbCategoria;
    private Datebox fecInicio;
    private Datebox fecFinal;
    private MyTextboxDecimal porcCliente;
    private MyTextboxDecimal porcEmpresa;
    private Spinner cantoperaciondia;
    private Spinner cantboletooperacion;
    private Button btnApagar;

    public Button getBtnApagar() {
        return btnApagar;
    }

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

    public Combobox getCmbEmpresa() {
        return cmbEmpresa;
    }

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

    public Combobox getCmbFormaPago() {
        return cmbFormaPago;
    }

    public void setCmbFormaPago(Combobox cmbFormaPago) {
        this.cmbFormaPago = cmbFormaPago;
    }

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        lsEmpresa =  UsuarioLogado.getUsuarioLogado().getEmpresa();
        lsCategoria = categoriaService.obtenerTodos();
        lsFormaPago = formaPagoService.obtenerTodos();

        super.doAfterCompose(comp);

        paramAcumulaPunto = (ParamAcumulaPunto) Executions.getCurrent().getArg().get("paramAcumulaPunto");
        paramAcumulaPuntoList = (MyListbox) Executions.getCurrent().getArg().get("paramAcumulaPuntoList");

        BindingListModelList modelCategoria = new BindingListModelList(lsCategoria, true);
        cmbCategoria.setModel(modelCategoria);

        if (paramAcumulaPunto.getParamacumulapuntoId() != null) {
            cmbOrigem.setValue(paramAcumulaPunto.getOrigem() == null ? "" : paramAcumulaPunto.getOrigem().getDescparada());
            cmbDestino.setValue(paramAcumulaPunto.getDestino() == null ? "" : paramAcumulaPunto.getDestino().getDescparada());
            cmbCategoria.setValue(paramAcumulaPunto.getCategoria() == null ? " " : paramAcumulaPunto.getCategoria().getDesccategoria());
        }

        if (paramAcumulaPunto.getParamacumulapuntoId() == null) {
            btnApagar.setVisible(Boolean.FALSE);
        } else {
            Parada origem = paramAcumulaPunto.getOrigem();
            if (origem != null) {
                cmbOrigem.setText(origem.getDescparada());
            }

            Parada destino = paramAcumulaPunto.getDestino();
            if (destino != null) {
                cmbDestino.setText(destino.getDescparada());
            }
        }
    }

    public void onClick$btnSalvar(Event ev) throws InterruptedException {
        cantboletooperacion.getValue();
        cantoperaciondia.getValue();
        cmbOrigem.getValue();
        cmbCategoria.getValue();
        cmbDestino.getValue();
        cmbFormaPago.getValue();
        fecInicio.getValue();
        fecFinal.getValue();
        porcCliente.getValue();
        cmbEmpresa.getValue();
        porcEmpresa.getValue();

        Comboitem cbiOrigem = cmbOrigem.getSelectedItem();
        Parada origem = paramAcumulaPunto.getOrigem();
        if (cbiOrigem != null) {
            origem = (Parada) cbiOrigem.getValue();
        }

        Comboitem cbiDestino = cmbDestino.getSelectedItem();
        Parada destino = paramAcumulaPunto.getDestino();
        if (cbiDestino != null) {
            destino = (Parada) cbiDestino.getValue();
        }

        if (destino.equals(origem) && !destino.getParadaId().equals(-1)) {
            Messagebox.show(
                    Labels.getLabel("editarConfiguracionReservacionController.MSG.selectItemDiferente"),
                    Labels.getLabel("editarConfiguracionReservacionController.window.title"),
                    Messagebox.OK, Messagebox.EXCLAMATION);
            return;
        }

        boolean validacion = true;

        try {
            if (fecInicio.getValue() != null && fecFinal.getValue() != null) {
                if (fecInicio.getValue() == null || fecFinal.getValue() == null) {
                    Messagebox.show(Labels.getLabel("editarParamAcumulaPuntoController.MSG.fecha"),
                            Labels.getLabel("editarParamCanjePuntoController.window.title"),
                            Messagebox.OK, Messagebox.INFORMATION);
                    validacion = false;
                } else if (fecInicio.getValue().after(fecFinal.getValue())) {
                    Messagebox.show(Labels.getLabel("editarParamCanjePuntoController.MSG.busquedaPeriodo"),
                            Labels.getLabel("editarParamCanjePuntoController.window.title"), Messagebox.OK,
                            Messagebox.INFORMATION);
                    validacion = false;
                }
            } else if (fecInicio.getValue() == null || fecFinal.getValue() == null) {
                if (fecInicio.getValue() != null || fecFinal.getValue() != null) {
                    Messagebox.show(Labels.getLabel("editarParamAcumulaPuntoController.MSG.fecha"),
                            Labels.getLabel("editarParamCanjePuntoController.window.title"),
                            Messagebox.OK, Messagebox.INFORMATION);
                    validacion = false;
                }
            }
            if (cantoperaciondia.getValue() != null && cantboletooperacion.getValue() != null) {
                if (cantoperaciondia.getValue() == 0 || cantboletooperacion.getValue() == 0) {
                    Messagebox.show(Labels.getLabel("editarParamAcumulaPuntoController.MSG.boleto"),
                            Labels.getLabel("editarParamCanjePuntoController.window.title"),
                            Messagebox.OK, Messagebox.INFORMATION);
                    validacion = false;
                }
            } else if (cantoperaciondia.getValue() == null || cantboletooperacion.getValue() == null) {
                if (cantoperaciondia.getValue() != null || cantboletooperacion.getValue() != null) {
                    Messagebox.show(Labels.getLabel("editarParamAcumulaPuntoController.MSG.boleto"),
                            Labels.getLabel("editarParamCanjePuntoController.window.title"),
                            Messagebox.OK, Messagebox.INFORMATION);
                    validacion = false;
                }
            }
            if (origem == null || destino == null) {
                Messagebox.show(Labels.getLabel("editarParamAcumulaPuntoController.MSG.parada"),
                        Labels.getLabel("editarParamCanjePuntoController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);
                validacion = false;
            }

            if (validacion) {
                try {
                    paramAcumulaPunto.setActivo(true);
                    paramAcumulaPunto.setFecmodif(Calendar.getInstance().getTime());
                    paramAcumulaPunto.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

                    paramAcumulaPunto.setOrigem(origem);
                    paramAcumulaPunto.setDestino(destino);

                    if (paramAcumulaPunto.getParamacumulapuntoId() == null) {
                        paramAcumulaPuntoService.suscribir(paramAcumulaPunto);
                        paramAcumulaPuntoList.addItem(paramAcumulaPunto);
                    } else {
                        paramAcumulaPuntoService.actualizacion(paramAcumulaPunto);
                        paramAcumulaPuntoList.updateItem(paramAcumulaPunto);
                    }

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

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

        } catch (InterruptedException ex) {
            log.error(ex);
        }
    }

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

            if (resp == Messagebox.YES) {

                paramAcumulaPuntoService.borrar(paramAcumulaPunto);

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

                paramAcumulaPuntoList.removeItem(paramAcumulaPunto);

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

    public Combobox getCmbDestino() {
        return cmbDestino;
    }

    public void setCmbDestino(Combobox cmbDestino) {
        this.cmbDestino = cmbDestino;
    }

    public Combobox getCmbOrigem() {
        return cmbOrigem;
    }

    public void setCmbOrigem(Combobox cmbOrigem) {
        this.cmbOrigem = cmbOrigem;
    }

    public Datebox getFecFinal() {
        return fecFinal;
    }

    public void setFecFinal(Datebox fecFinal) {
        this.fecFinal = fecFinal;
    }

    public Datebox getFecInicio() {
        return fecInicio;
    }

    public void setFecInicio(Datebox fecInicio) {
        this.fecInicio = fecInicio;
    }

    public ParadaService getParadaService() {
        return paradaService;
    }

    public void setParadaService(ParadaService paradaService) {
        this.paradaService = paradaService;
    }

    public ParamAcumulaPunto getParamAcumulaPunto() {
        return paramAcumulaPunto;
    }

    public void setParamAcumulaPunto(ParamAcumulaPunto paramAcumulaPunto) {
        this.paramAcumulaPunto = paramAcumulaPunto;
    }

    public MyListbox getParamAcumulaPuntoList() {
        return paramAcumulaPuntoList;
    }

    public void setParamAcumulaPuntoList(MyListbox paramAcumulaPuntoList) {
        this.paramAcumulaPuntoList = paramAcumulaPuntoList;
    }

    public ParamAcumulaPuntoService getParamAcumulaPuntoService() {
        return paramAcumulaPuntoService;
    }

    public void setParamAcumulaPuntoService(ParamAcumulaPuntoService paramAcumulaPuntoService) {
        this.paramAcumulaPuntoService = paramAcumulaPuntoService;
    }

    public CategoriaService getCategoriaService() {
        return categoriaService;
    }

    public void setCategoriaService(CategoriaService categoriaService) {
        this.categoriaService = categoriaService;
    }

    public EmpresaService getEmpresaService() {
        return empresaService;
    }

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

    public FormaPagoService getFormaPagoService() {
        return formaPagoService;
    }

    public void setFormaPagoService(FormaPagoService formaPagoService) {
        this.formaPagoService = formaPagoService;
    }

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

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

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

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

    public List<FormaPago> getLsFormaPago() {
        return lsFormaPago;
    }

    public void setLsFormaPago(List<FormaPago> lsFormaPago) {
        this.lsFormaPago = lsFormaPago;
    }

    public MyTextboxDecimal getPorcCliente() {
        return porcCliente;
    }

    public void setPorcCliente(MyTextboxDecimal porcCliente) {
        this.porcCliente = porcCliente;
    }

    public MyTextboxDecimal getPorcEmpresa() {
        return porcEmpresa;
    }

    public void setPorcEmpresa(MyTextboxDecimal porcEmpresa) {
        this.porcEmpresa = porcEmpresa;
    }

    public Spinner getCantboletooperacion() {
        return cantboletooperacion;
    }

    public void setCantboletooperacion(Spinner cantboletooperacion) {
        this.cantboletooperacion = cantboletooperacion;
    }

    public Spinner getCantoperaciondia() {
        return cantoperaciondia;
    }

    public void setCantoperaciondia(Spinner cantoperaciondia) {
        this.cantoperaciondia = cantoperaciondia;
    }
}
