/*
 * 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.Ciudad;
import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.entidad.TipoCambioCiudad;
import com.rjconsultores.ventaboletos.entidad.TipoCambioCtrl;
import com.rjconsultores.ventaboletos.service.MonedaService;
import com.rjconsultores.ventaboletos.service.TipoCambioCiudadService;
import com.rjconsultores.ventaboletos.service.TipoCambioCtrlService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxCiudad;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;
import java.util.ArrayList;
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.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Messagebox;

/**
 *
 * @author Administrador
 *
 * Rafael: Nessa tela foi retirada a opção de adicionar varias cidades.
 * Senda
 */
@Controller("editarTipoCambioCiudadController")
@Scope("prototype")
public class EditarTipoCambioCiudadController extends MyGenericForwardComposer {

    @Autowired
    private TipoCambioCtrlService tipoCambioCtrlService;
    @Autowired
    private TipoCambioCiudadService tipoCambioCiudadService;
    @Autowired
    private MonedaService monedaService;
    private Ciudad ciudadSeleccionada;
    private MyComboboxCiudad cmbCiudad;
    private TipoCambioCtrl tipoCambioCtrl;
    private MyListbox tipoCambioCiudadList;
    private List<TipoCambioCiudad> lsTipoCambioCiudad;
    private List<Moneda> lsMoneda;
    private Button btnApagar;
    private Datebox dtFecaplicacion;
    private Combobox cmbMonedaOrigen;
    private Combobox cmbMonedaDestino;
    private MyTextboxDecimal decImportecambio;
    private static Logger log = Logger.getLogger(EditarTipoCambioCiudadController.class);

    public Button getBtnApagar() {
        return btnApagar;
    }

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

    public Combobox getCmbCiudad() {
        return cmbCiudad;
    }

    public TipoCambioCtrl getTipoCambioCtrl() {
        return tipoCambioCtrl;
    }

    public void setTipoCambioCtrl(TipoCambioCtrl tipoCambioCtrl) {
        this.tipoCambioCtrl = tipoCambioCtrl;
    }

    public List<Moneda> getLsMoneda() {
        return lsMoneda;
    }

    public void setLsMoneda(List<Moneda> lsMoneda) {
        this.lsMoneda = lsMoneda;
    }

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

        lsTipoCambioCiudad = new ArrayList<TipoCambioCiudad>();
        lsMoneda = monedaService.obtenerTodos();

        tipoCambioCtrl = (TipoCambioCtrl) Executions.getCurrent().getArg().get("tipoCambioCtrl");
        tipoCambioCiudadList = (MyListbox) Executions.getCurrent().getArg().get("tipoCambioCiudadList");

        if (tipoCambioCtrl.getTipocambioctrlId() == null) {
            btnApagar.setVisible(Boolean.FALSE);
        } else {
            tipoCambioCtrl = tipoCambioCtrlService.obtenerID(tipoCambioCtrl.getTipocambioctrlId());
            lsTipoCambioCiudad.addAll(tipoCambioCtrl.getTipoCambioCiudadList());

            decImportecambio.setValue(tipoCambioCtrl.getImportecambio().setScale(2).toString());

            if (lsTipoCambioCiudad.size() > 0) {
                ciudadSeleccionada = lsTipoCambioCiudad.get(0).getCiudad();
            } 
        }

        dtFecaplicacion.focus();
    }

    public void onClick$btnSalvar(Event ev) throws InterruptedException {

        dtFecaplicacion.getValue();
        cmbMonedaOrigen.getValue();
        cmbMonedaDestino.getValue();
        cmbCiudad.getValue(true);
        decImportecambio.getValue();

        try {

            if (cmbCiudad.getSelectedItem() != null) {
                lsTipoCambioCiudad = new ArrayList<TipoCambioCiudad>();
                TipoCambioCiudad tc = new TipoCambioCiudad();
                tc.setActivo(Boolean.TRUE);
                tc.setFecmodif(Calendar.getInstance().getTime());
                tc.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
                tc.setTipoCambioCtrl(tipoCambioCtrl);
                tc.setCiudad((Ciudad) cmbCiudad.getSelectedItem().getValue());
                lsTipoCambioCiudad.add(tc);
            } else {
                Messagebox.show(
                        Labels.getLabel("editarTipoCambioCiudadController.MSG.necessitaCiudad"),
                        Labels.getLabel("editarTipoCambioCiudadController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);
                return;
            }

            if (lsTipoCambioCiudad.isEmpty()) {
                Messagebox.show(
                        Labels.getLabel("editarTipoCambioCiudadController.MSG.necessitaCiudad"),
                        Labels.getLabel("editarTipoCambioCiudadController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);
                return;
            }
            if (cmbMonedaOrigen.getValue().equals(cmbMonedaDestino.getValue())) {
                Messagebox.show(
                        Labels.getLabel("editarTipoCambioCiudadController.MSG.diferenteMoneda"),
                        Labels.getLabel("editarTipoCambioCiudadController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);
                return;
            }

            tipoCambioCtrl.setActivo(Boolean.TRUE);
            tipoCambioCtrl.setFecmodif(Calendar.getInstance().getTime());
            tipoCambioCtrl.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
            tipoCambioCtrl.setTipoCambioCiudadList(lsTipoCambioCiudad);

            if (tipoCambioCtrl.getTipocambioctrlId() == null) {
                tipoCambioCtrlService.suscribir(tipoCambioCtrl);
                tipoCambioCiudadList.addItem(tipoCambioCtrl);
            } else {
                tipoCambioCtrlService.actualizacion(tipoCambioCtrl);
                tipoCambioCiudadList.updateItem(tipoCambioCtrl);
            }

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

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

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

            if (resp == Messagebox.YES) {
                tipoCambioCtrlService.borrar(tipoCambioCtrl);

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

                tipoCambioCiudadList.removeItem(tipoCambioCtrl);

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

    public Ciudad getCiudadSeleccionada() {
        return ciudadSeleccionada;
    }

    public void setCiudadSeleccionada(Ciudad ciudadSeleccionada) {
        this.ciudadSeleccionada = ciudadSeleccionada;
    }
    
}
