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

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.CortesiaDireccion;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.TipoCortesiaDescuento;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.CortesiaDireccionService;
import com.rjconsultores.ventaboletos.service.MarcaService;
import com.rjconsultores.ventaboletos.service.TipoCortesiaDescuentoService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import java.util.Calendar;
import java.util.GregorianCalendar;
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.Datebox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Messagebox;

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

    @Autowired
    private MarcaService marcaService;
    @Autowired
    private ClaseServicioService claseServicioService;
    @Autowired
    private TipoCortesiaDescuentoService cortesiaDescuentoService;
    @Autowired
    private CortesiaDireccionService direccionService;
    private CortesiaDireccion cortesiaDireccion;
    private MyListbox cortesiaDireccionList;
    private List<Marca> marcaList;
    private List<ClaseServicio> claseServicioList;
    private List<TipoCortesiaDescuento> cortesiaDescuentoList;
    private Intbox folioIni;
    private Intbox folioFin;
    private Datebox fecIni;
    private Datebox fecFin;
    private Combobox cmbMarca;
    private Combobox cmbClaseSer;
    private Combobox cmbDesc;
    private static Logger log = Logger.getLogger(EditarCortesiaTipoDireccionController.class);
    private Button btnApagar;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        marcaList = marcaService.buscarDescricaoIdMarca();
        claseServicioList = claseServicioService.buscarTodosExceto(-1);
        cortesiaDescuentoList = cortesiaDescuentoService.obtenerTipoCortesia(2);

        super.doAfterCompose(comp);

        cortesiaDireccion = (CortesiaDireccion) Executions.getCurrent().getArg().get("cortesiaDireccion");
        cortesiaDireccionList = (MyListbox) Executions.getCurrent().getArg().get("cortesiaDireccionList");

        if (cortesiaDireccion.getCortesiaDireccionId() == null) {
            btnApagar.setVisible(false);
        }
    }

    public void onClick$btnSalvar(Event ev) throws InterruptedException {
        folioIni.getValue();
        folioFin.getValue();
        fecIni.getValue();
        fecFin.getValue();
        cmbMarca.getValue();
        cmbClaseSer.getValue();
        cmbDesc.getValue();

        if (fecIni.getValue().after(fecFin.getValue())) {
            try {
                Messagebox.show(Labels.getLabel("editarCortesiaTipoDireccionController.MSG.CortesiaDireccionAlta"),
                        Labels.getLabel("editarCortesiaTipoDireccionController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);
            } catch (InterruptedException ex) {
                log.error(ex);
            }
        } else {
            try {
                if (cortesiaDireccion.getTipocortesiaDescuento() == null) {
                    Messagebox.show(
                            Labels.getLabel("editarCortesiaTipoDireccionController.MSG.descuento"),
                            Labels.getLabel("editarCortesiaTipoDireccionController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                } else if (cortesiaDireccion.getMarca() == null) {
                    Messagebox.show(
                            Labels.getLabel("editarCortesiaTipoDireccionController.MSG.marca"),
                            Labels.getLabel("editarCortesiaTipoDireccionController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                } else if (cortesiaDireccion.getClaseServicio() == null) {
                    Messagebox.show(
                            Labels.getLabel("editarCortesiaTipoDireccionController.MSG.clase"),
                            Labels.getLabel("editarCortesiaTipoDireccionController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                } else {
                    GregorianCalendar gcIni = new GregorianCalendar();
                    gcIni.setTime(cortesiaDireccion.getFecInicioV());
                    gcIni.set(Calendar.HOUR, 00);
                    gcIni.set(Calendar.MINUTE, 00);
                    gcIni.set(Calendar.SECOND, 00);

                    GregorianCalendar gcFin = new GregorianCalendar();
                    gcFin.setTime(cortesiaDireccion.getFecFinV());
                    gcFin.set(Calendar.HOUR, 00);
                    gcFin.set(Calendar.MINUTE, 00);
                    gcFin.set(Calendar.SECOND, 00);

                    cortesiaDireccion.setFecFinV(gcIni.getTime());
                    cortesiaDireccion.setFecFinV(gcFin.getTime());

                    List<CortesiaDireccion> lsCD = direccionService.buscarFolio(cortesiaDireccion);

                    boolean podeSalvarFolio = lsCD.isEmpty() ? true : false;
                    //Se for ele mesmo pode salvar.
                    if (lsCD.size() == 1) {
                        //Somente edição
                        if (cortesiaDireccion.getCortesiaDireccionId() != null) {
                            if (cortesiaDireccion.getCortesiaDireccionId().equals(lsCD.get(0).getCortesiaDireccionId())) {
                                podeSalvarFolio = true;
                            }
                        }
                    }

                    //Pode salvar todos os dados identicos, desde que o FOLIO não TRASLAPE.
                    if (podeSalvarFolio) {
                        cortesiaDireccion.setActivo(Boolean.TRUE);
                        cortesiaDireccion.setFecmodif(Calendar.getInstance().getTime());
                        cortesiaDireccion.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

                        if (cortesiaDireccion.getCortesiaDireccionId() == null) {

                            direccionService.suscribir(cortesiaDireccion);
                            cortesiaDireccionList.addItem(cortesiaDireccion);

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

                            closeWindow();

                        } else {
                            direccionService.actualizacion(cortesiaDireccion);
                            cortesiaDireccionList.updateItem(cortesiaDireccion);

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

                            closeWindow();
                        }
                    } else {
                        Messagebox.show(Labels.getLabel("editarCortesiaTipoDireccionController.MSG.Folio"),
                                Labels.getLabel("editarCortesiaTipoDireccionController.window.title"),
                                Messagebox.OK, Messagebox.EXCLAMATION);
                    }
                }
            } catch (Exception ex) {
                log.error(ex);
                Messagebox.show(
                        Labels.getLabel("MSG.Error"),
                        Labels.getLabel("editarCortesiaTipoDireccionController.window.title"),
                        Messagebox.OK, Messagebox.ERROR);
            }
        }
    }

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

            if (resp == Messagebox.YES) {

                direccionService.borrar(cortesiaDireccion);

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

                cortesiaDireccionList.removeItem(cortesiaDireccion);

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

    public Combobox getCmbClaseSer() {
        return cmbClaseSer;
    }

    public void setCmbClaseSer(Combobox cmbClaseSer) {
        this.cmbClaseSer = cmbClaseSer;
    }

    public Combobox getCmbDesc() {
        return cmbDesc;
    }

    public void setCmbDesc(Combobox cmbDesc) {
        this.cmbDesc = cmbDesc;
    }

    public Combobox getCmbMarca() {
        return cmbMarca;
    }

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

    public Datebox getFecFin() {
        return fecFin;
    }

    public void setFecFin(Datebox fecFin) {
        this.fecFin = fecFin;
    }

    public Datebox getFecIni() {
        return fecIni;
    }

    public void setFecIni(Datebox fecIni) {
        this.fecIni = fecIni;
    }

    public List<ClaseServicio> getClaseServicioList() {
        return claseServicioList;
    }

    public void setClaseServicioList(List<ClaseServicio> claseServicioList) {
        this.claseServicioList = claseServicioList;
    }

    public ClaseServicioService getClaseServicioService() {
        return claseServicioService;
    }

    public void setClaseServicioService(ClaseServicioService claseServicioService) {
        this.claseServicioService = claseServicioService;
    }

    public List<TipoCortesiaDescuento> getCortesiaDescuentoList() {
        return cortesiaDescuentoList;
    }

    public void setCortesiaDescuentoList(List<TipoCortesiaDescuento> cortesiaDescuentoList) {
        this.cortesiaDescuentoList = cortesiaDescuentoList;
    }

    public TipoCortesiaDescuentoService getCortesiaDescuentoService() {
        return cortesiaDescuentoService;
    }

    public void setCortesiaDescuentoService(TipoCortesiaDescuentoService cortesiaDescuentoService) {
        this.cortesiaDescuentoService = cortesiaDescuentoService;
    }

    public CortesiaDireccion getCortesiaDireccion() {
        return cortesiaDireccion;
    }

    public void setCortesiaDireccion(CortesiaDireccion cortesiaDireccion) {
        this.cortesiaDireccion = cortesiaDireccion;
    }

    public MyListbox getCortesiaDireccionList() {
        return cortesiaDireccionList;
    }

    public void setCortesiaDireccionList(MyListbox cortesiaDireccionList) {
        this.cortesiaDireccionList = cortesiaDireccionList;
    }

    public CortesiaDireccionService getDireccionService() {
        return direccionService;
    }

    public void setDireccionService(CortesiaDireccionService direccionService) {
        this.direccionService = direccionService;
    }

    public Intbox getFolioFin() {
        return folioFin;
    }

    public void setFolioFin(Intbox folioFin) {
        this.folioFin = folioFin;
    }

    public Intbox getFolioIni() {
        return folioIni;
    }

    public void setFolioIni(Intbox folioIni) {
        this.folioIni = folioIni;
    }

    public List<Marca> getMarcaList() {
        return marcaList;
    }

    public void setMarcaList(List<Marca> marcaList) {
        this.marcaList = marcaList;
    }

    public MarcaService getMarcaService() {
        return marcaService;
    }

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

    public Button getBtnApagar() {
        return btnApagar;
    }

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