/*
 * 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.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.WrongValueException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Timebox;

import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus;
import com.rjconsultores.ventaboletos.entidad.RolOperativo;
import com.rjconsultores.ventaboletos.service.DiagramaAutobusService;
import com.rjconsultores.ventaboletos.service.RolOperativoService;
import com.rjconsultores.ventaboletos.utilerias.RegistroConDependenciaException;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

/**
 *
 * @author Shiro
 */
@Controller("editarRolOperativoController")
@Scope("prototype")
public class EditarRolOperativoController extends MyGenericForwardComposer {

    @Autowired
    private RolOperativoService operativoService;
    @Autowired
    private DiagramaAutobusService diagramaBuService;
    private RolOperativo rolOperativo;
    private MyListbox rolOperativoList;
    private List<DiagramaAutobus> diagramaList;
    private Timebox timeprevio;
    private Textbox txtDesRol;
    private Combobox cmbDiagramaBus;
    private static Logger log = Logger.getLogger(EditarRolOperativoController.class);

    public Combobox getCmbDiagramaBus() {
        return cmbDiagramaBus;
    }

    public void setCmbDiagramaBus(Combobox cmbDiagramaBus) {
        this.cmbDiagramaBus = cmbDiagramaBus;
    }

    public Textbox getTxtDesRol() {
        return txtDesRol;
    }

    public void setTxtDesRol(Textbox txtDesRol) {
        this.txtDesRol = txtDesRol;
    }

    public Timebox getTimeprevio() {
        return timeprevio;
    }

    public void setTimeprevio(Timebox timeprevio) {
        this.timeprevio = timeprevio;
    }

    public DiagramaAutobusService getDiagramaBuService() {
        return diagramaBuService;
    }

    public void setDiagramaBuService(DiagramaAutobusService diagramaBuService) {
        this.diagramaBuService = diagramaBuService;
    }

    public List<DiagramaAutobus> getDiagramaList() {
        return diagramaList;
    }

    public void setDiagramaList(List<DiagramaAutobus> diagramaList) {
        this.diagramaList = diagramaList;
    }

    public RolOperativoService getOperativoService() {
        return operativoService;
    }

    public void setOperativoService(RolOperativoService operativoService) {
        this.operativoService = operativoService;
    }

    public RolOperativo getRolOperativo() {
        return rolOperativo;
    }

    public void setRolOperativo(RolOperativo rolOperativo) {
        this.rolOperativo = rolOperativo;
    }

    public MyListbox getRolOperativoList() {
        return rolOperativoList;
    }

    public void setRolOperativoList(MyListbox rolOperativoList) {
        this.rolOperativoList = rolOperativoList;
    }

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

        diagramaList = diagramaBuService.obtenerTodos();
        super.doAfterCompose(comp);

        rolOperativo = (RolOperativo) Executions.getCurrent().getArg().get("rolOperativo");
        rolOperativoList = (MyListbox) Executions.getCurrent().getArg().get("rolOperativoList");
    }

    public void onClick$btnSalvar(Event ev) {

        try {
            rolOperativo.setDescroloperativo(txtDesRol.getValue());
            rolOperativo.setTiempoprevio(timeprevio.getValue());
            rolOperativo.setDiagramaAutobus((DiagramaAutobus) cmbDiagramaBus.getSelectedItem().getValue());
            rolOperativo.setActivo(Boolean.TRUE);
            rolOperativo.setFecmodif(Calendar.getInstance().getTime());
            rolOperativo.setUsuarioId(0);

            List<RolOperativo> lsRolOperativo = operativoService.buscar(rolOperativo.getDescroloperativo());

            boolean podeSalvar = false;
            if (lsRolOperativo.isEmpty()) {
                podeSalvar = true;
            } else {
                if (rolOperativo.getRoloperativoId() != null) {
                    for (RolOperativo c : lsRolOperativo) {
                        if (c.getRoloperativoId().equals(rolOperativo.getRoloperativoId())) {
                            podeSalvar = true;
                        }
                    }
                }
            }
            if (podeSalvar) {

                if (rolOperativo.getRoloperativoId() == null) {
                    operativoService.suscribir(rolOperativo);
                    rolOperativoList.addItem(rolOperativo);
                } else {
                    operativoService.actualizacion(rolOperativo);
                    rolOperativoList.updateItem(rolOperativo);
                }
                Messagebox.show(
                        Labels.getLabel("editarRolOperativoController.MSG.suscribirOK"),
                        Labels.getLabel("editarRolOperativoController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);

                closeWindow();

            } else {
                Messagebox.show(
                        Labels.getLabel("MSG.Registro.Existe"),
                        Labels.getLabel("editarRolOperativoController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);
            }

        } catch (WrongValueException ex) {
        	throw ex;
        } catch (Exception ex) {
            log.error(ex);
            Clients.alert(
                    Labels.getLabel("MSG.Error"),
                    Labels.getLabel("editarRolOperativoController.window.title"),
                    Messagebox.ERROR);
        }
    }

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

            if (resp == Messagebox.YES) {

                operativoService.borrar(rolOperativo);

                Messagebox.show(
                        Labels.getLabel("editarRolOperativoController.MSG.BorrarOK"),
                        Labels.getLabel("editarRolOperativoController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);

                rolOperativoList.removeItem(rolOperativo);

                closeWindow();
            }
        } catch (RegistroConDependenciaException ex) {
            Clients.alert(
                    ex.getLocalizedMessage(),
                    Labels.getLabel("editarRolOperativoController.window.title"),
                    Messagebox.INFORMATION);
        } catch (Exception ex) {
            log.error(ex);
            Clients.alert(
                    Labels.getLabel("editarRolOperativoController.MSG.BorrarOK"),
                    Labels.getLabel("editarRolOperativoController.window.title"),
                    Messagebox.INFORMATION);

        }
    }
}
