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

import com.rjconsultores.ventaboletos.entidad.PeriodoVacacional;
import com.rjconsultores.ventaboletos.service.PeriodoVacacionalService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
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.Datebox;
import org.zkoss.zul.Messagebox;

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

    @Autowired
    private PeriodoVacacionalService periodoVacacionalService;
    private PeriodoVacacional periodoVacacional;
    private MyListbox periodoVacacionalList;
    private static Logger log = Logger.getLogger(EditarPeriodoVacacionalController.class);
    private Datebox fecInicio;
    private Datebox fecFinal;
    private Button btnApagar;

    public Button getBtnApagar() {
        return btnApagar;
    }

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

    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;
    }

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

        periodoVacacional = (PeriodoVacacional) Executions.getCurrent().getArg().get("periodoVacacional");
        periodoVacacionalList = (MyListbox) Executions.getCurrent().getArg().get("periodoVacacionalList");

        if (periodoVacacional.getPeriodovacacionalId() == null) {
            btnApagar.setVisible(Boolean.FALSE);
        }

        fecInicio.focus();
    }

    public void onClick$btnSalvar(Event ev) throws InterruptedException {
        Date dataInicio = fecInicio.getValue();
        Date dataFim = fecFinal.getValue();

        if (fecInicio.getValue().after(fecFinal.getValue())) {
            try {
                Messagebox.show(
                        Labels.getLabel("editarPeriodoVacacionalController.MSG.busquedaPeriodo"),
                        Labels.getLabel("editarPeriodoVacacionalController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);
            } catch (InterruptedException ex) {
                log.error(ex);
            }
        } else {
            try {
                List<PeriodoVacacional> lsPeriodoVacacional =
                        periodoVacacionalService.buscar(dataInicio, dataFim);

                List<PeriodoVacacional> lsTraslapa = periodoVacacionalService.buscarFechaTraslapa(periodoVacacional);
                Boolean podeSalvarTraslapa = lsTraslapa.isEmpty() ? true : false;
                if (lsTraslapa.size() == 1) {
                    //Somente edição
                    if (periodoVacacional.getPeriodovacacionalId() != null) {
                        if (periodoVacacional.getPeriodovacacionalId().equals(lsTraslapa.get(0).getPeriodovacacionalId())) {
                            podeSalvarTraslapa = true;
                        }
                    }
                }
                //Se não pode salvar pq translapa
                if (!podeSalvarTraslapa) {
                    Messagebox.show(
                            Labels.getLabel("editarPeriodoVacacionalController.MSG.conflitoVigencias"),
                            Labels.getLabel("editarPeriodoVacacionalController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                    return;
                }


                if (lsPeriodoVacacional.isEmpty()) {
                    periodoVacacional.setActivo(Boolean.TRUE);
                    periodoVacacional.setFecmodif(Calendar.getInstance().getTime());
                    periodoVacacional.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

                    if (periodoVacacional.getPeriodovacacionalId() == null) {
                        periodoVacacionalService.suscribir(periodoVacacional);
                        periodoVacacionalList.addItem(periodoVacacional);
                    } else {
                        periodoVacacionalService.actualizacion(periodoVacacional);
                        periodoVacacionalList.updateItem(periodoVacacional);
                    }

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

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

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

            if (resp == Messagebox.YES) {

                periodoVacacionalService.borrar(periodoVacacional);

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

                periodoVacacionalList.removeItem(periodoVacacional);

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

    public PeriodoVacacional getPeriodoVacacional() {
        return periodoVacacional;
    }

    public void setPeriodoVacacional(PeriodoVacacional periodoVacacional) {
        this.periodoVacacional = periodoVacacional;
    }

    public MyListbox getPeriodoVacacionalList() {
        return periodoVacacionalList;
    }

    public void setPeriodoVacacionalList(MyListbox periodoVacacionalList) {
        this.periodoVacacionalList = periodoVacacionalList;
    }

    public PeriodoVacacionalService getPeriodoVacacionalService() {
        return periodoVacacionalService;
    }

    public void setPeriodoVacacionalService(PeriodoVacacionalService periodoVacacionalService) {
        this.periodoVacacionalService = periodoVacacionalService;
    }
}
