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

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.MarcaClaseServicio;
import com.rjconsultores.ventaboletos.entidad.MarcaClaseServicioPK;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.MarcaClaseServicioService;
import com.rjconsultores.ventaboletos.service.MarcaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
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.Combobox;
import org.zkoss.zul.Messagebox;

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

    @Autowired
    private MarcaClaseServicioService marcaClaseServicioService;
    @Autowired
    private MarcaService marcaService;
    @Autowired
    private ClaseServicioService claseServicioService;
    private MarcaClaseServicio marcaClaseServicio;
    private List<Marca> lsMarcas;
    private List<ClaseServicio> lsClaseServicios;
    private MyListbox marcaClaseServicioList;
    private Combobox cmbMarca;
    private Combobox cmbClaseServicio;
    private Button btnApagar;
    private static Logger log =
            Logger.getLogger(EditarAsociacionClaseServicioMarcaController.class);

    public List<ClaseServicio> getLsClaseServicios() {
        return lsClaseServicios;
    }

    public void setLsClaseServicios(List<ClaseServicio> lsClaseServicios) {
        this.lsClaseServicios = lsClaseServicios;
    }

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

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

    public MarcaClaseServicio getMarcaClaseServicio() {
        return marcaClaseServicio;
    }

    public void setMarcaClaseServicio(MarcaClaseServicio marcaClaseServicio) {
        this.marcaClaseServicio = marcaClaseServicio;
    }

    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 Button getBtnApagar() {
        return btnApagar;
    }

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

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        lsMarcas = marcaService.buscarMarcaPorEmpresa(UsuarioLogado.getUsuarioLogado().getEmpresa());
        lsClaseServicios = claseServicioService.obtenerTodos();

        marcaClaseServicioList = (MyListbox) Executions.getCurrent().getArg().get("marcaClaseServicioList");
        marcaClaseServicio = (MarcaClaseServicio) Executions.getCurrent().getArg().get("marcaClaseServicio");

        super.doAfterCompose(comp);

        if (marcaClaseServicio.getMarcaClaseservicioPK() == null) {
            btnApagar.setVisible(Boolean.FALSE);
        }

        cmbMarca.focus();
    }

    public void onClick$btnSalvar(Event ev) throws InterruptedException {
        cmbMarca.getSelectedItem().getValue();
        cmbClaseServicio.getSelectedItem().getValue();

        try {
            if (marcaClaseServicio.getMarcaClaseservicioPK() != null) {
                MarcaClaseServicioPK marcaClaseServicioPK = new MarcaClaseServicioPK();
                marcaClaseServicioPK.setMarca((Marca) cmbMarca.getSelectedItem().getValue());
                marcaClaseServicioPK.setClaseservicio((ClaseServicio) cmbClaseServicio.getSelectedItem().getValue());

                MarcaClaseServicio mcs = marcaClaseServicioService.obtenerID(marcaClaseServicioPK);


                if (mcs != null && !mcs.getMarcaClaseservicioPK().equals(marcaClaseServicio.getMarcaClaseservicioPK())) {
                    Messagebox.show(
                            Labels.getLabel("MSG.Registro.Existe"),
                            Labels.getLabel("editarAsociacionClaseServicioMarcaController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                    return;
                }
            }
            if (marcaClaseServicio.getMarcaClaseservicioPK() == null) {
                MarcaClaseServicioPK marcaClaseServicioPK = new MarcaClaseServicioPK();
                marcaClaseServicioPK.setMarca((Marca) cmbMarca.getSelectedItem().getValue());
                marcaClaseServicioPK.setClaseservicio((ClaseServicio) cmbClaseServicio.getSelectedItem().getValue());

                MarcaClaseServicio mcs = marcaClaseServicioService.obtenerID(marcaClaseServicioPK);


                if (mcs == null || !mcs.getActivo()) {
                    marcaClaseServicio.setMarcaClaseservicioPK(marcaClaseServicioPK);
                    if (mcs == null) {
                        marcaClaseServicio.setActivo(true);
                        marcaClaseServicioService.suscribir(marcaClaseServicio);
                        marcaClaseServicioList.addItem(marcaClaseServicio);
                    } else {
                        mcs.setActivo(true);
                        marcaClaseServicioService.suscribir(mcs);
                        marcaClaseServicioList.addItem(mcs);
                    }

                    Messagebox.show(
                            Labels.getLabel("editarAsociacionClaseServicioMarcaController.MSG.suscribirOK"),
                            Labels.getLabel("editarAsociacionClaseServicioMarcaController.window.title"),
                            Messagebox.OK, Messagebox.INFORMATION);
                } else {
                    Messagebox.show(
                            Labels.getLabel("MSG.Registro.Existe"),
                            Labels.getLabel("editarAsociacionClaseServicioMarcaController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                }
            } else {
                marcaClaseServicio.getMarcaClaseservicioPK().setMarca((Marca) cmbMarca.getSelectedItem().getValue());
                marcaClaseServicio.getMarcaClaseservicioPK().setClaseservicio((ClaseServicio) cmbClaseServicio.getSelectedItem().getValue());

                marcaClaseServicioService.actualizacion(marcaClaseServicio);
                marcaClaseServicioList.updateItem(marcaClaseServicio);

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

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

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

        if (resp == Messagebox.YES) {
            marcaClaseServicioService.borrar(marcaClaseServicio);

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

            marcaClaseServicioList.removeItem(marcaClaseServicio);

            closeWindow();
        }
    }
}
