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

import com.rjconsultores.ventaboletos.entidad.CompaniaBancaria;
import com.rjconsultores.ventaboletos.entidad.MerchantBancario;
import com.rjconsultores.ventaboletos.entidad.UsuarioBancario;
import com.rjconsultores.ventaboletos.service.CompaniaBancariaService;
import com.rjconsultores.ventaboletos.service.MerchantBancarioService;
import com.rjconsultores.ventaboletos.service.UsuarioBancarioService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderMerchantBancario;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderUsuarioBancario;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.Messagebox;
import org.zkoss.zul.Textbox;

/**
 *
 * @author Administrador
 */
@Controller("editarCompaniaBancariaController")
@Scope("prototype")
public class EditarCompanhiaBancariaController extends MyGenericForwardComposer {

    @Autowired
    private CompaniaBancariaService companiaBancariaService;
    @Autowired
    private UsuarioBancarioService usuarioBancarioService;
    @Autowired
    private MerchantBancarioService merchantBancarioService;
    private Button btnApagar;
    private CompaniaBancaria companiaBancaria;
    private MyListbox companiaBancariaList;
    private MyListbox usuarioBancarioList;
    private MyListbox merchantBancarioList;
    private Textbox txtCVECompania;
    private Textbox txtCVESucursal;
    private static Logger log = Logger.getLogger(EditarCompanhiaBancariaController.class);

    public CompaniaBancaria getCompaniaBancaria() {
        return companiaBancaria;
    }

    public void setCompaniaBancaria(CompaniaBancaria companiaBancaria) {
        this.companiaBancaria = companiaBancaria;
    }

    public Textbox getTxtCVECompania() {
        return txtCVECompania;
    }

    public void setTxtCVECompania(Textbox txtCVECompania) {
        this.txtCVECompania = txtCVECompania;
    }

    public Textbox getTxtCVESucursal() {
        return txtCVESucursal;
    }

    public void setTxtCVESucursal(Textbox txtCVESucursal) {
        this.txtCVESucursal = txtCVESucursal;
    }

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

        usuarioBancarioList.setItemRenderer(new RenderUsuarioBancario());
        merchantBancarioList.setItemRenderer(new RenderMerchantBancario());

        companiaBancaria = (CompaniaBancaria) Executions.getCurrent().getArg().get("companiaBancaria");
        companiaBancariaList = (MyListbox) Executions.getCurrent().getArg().get("companiaBancariaList");

        if (companiaBancaria.getCompaniabancariaId() != null) {
            companiaBancaria = companiaBancariaService.obtenerID(companiaBancaria.getCompaniabancariaId());

            List<UsuarioBancario> lsUsuarioBancario = companiaBancaria.getUsuarioBancarioList();
            List<MerchantBancario> lsMerchantBancario = companiaBancaria.getMerchantBancarioList();

            usuarioBancarioList.setData(lsUsuarioBancario);
            merchantBancarioList.setData(lsMerchantBancario);
        } else {
            btnApagar.setVisible(Boolean.FALSE);
        }
    }

    public void onClick$btnAdicionarUsuarioBancario(Event ev) {
        if (companiaBancaria.getUsuarioBancarioList() == null) {
            companiaBancaria.setUsuarioBancarioList(new ArrayList<UsuarioBancario>());
        }

        Map args = new HashMap();
        args.put("companiaBancaria", companiaBancaria);
        args.put("usuarioBancarioList", usuarioBancarioList);
        args.put("lsUsuarioBancario", companiaBancaria.getUsuarioBancarioList());

        openWindow("/gui/seguridad/editarUsuarioBancario.zul",
                Labels.getLabel("editarUsuarioBancarioController.window.title"), args, MODAL);
    }

    public void onClick$btnRemoverUsuarioBancario(Event ev) {
        if (companiaBancaria.getUsuarioBancarioList() != null) {
            UsuarioBancario usuarioBancario = (UsuarioBancario) usuarioBancarioList.getSelected();

            if (usuarioBancario.getUsuariobancarioId() != null) {
                usuarioBancario.setActivo(Boolean.FALSE);
                usuarioBancario.setFecmodif(Calendar.getInstance().getTime());
                usuarioBancario.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

                usuarioBancarioService.borrar(usuarioBancario);
            }

            companiaBancaria.getUsuarioBancarioList().remove(usuarioBancario);
            usuarioBancarioList.setData(companiaBancaria.getUsuarioBancarioList());
        }
    }

    public void onClick$btnAdicionarMerchantBancario(Event ev) {
        if (companiaBancaria.getMerchantBancarioList() == null) {
            companiaBancaria.setMerchantBancarioList(new ArrayList<MerchantBancario>());
        }

        Map args = new HashMap();
        args.put("companiaBancaria", companiaBancaria);
        args.put("merchantBancarioList", merchantBancarioList);
        args.put("lsMerchantBancario", companiaBancaria.getMerchantBancarioList());

        openWindow("/gui/seguridad/editarMerchantBancario.zul",
                Labels.getLabel("editarMerchantBancarioController.window.title"), args, MODAL);
    }

    public void onClick$btnRemoverMerchantBancario(Event ev) {
        if (companiaBancaria.getMerchantBancarioList() != null) {
            MerchantBancario merchantBancario = (MerchantBancario) merchantBancarioList.getSelected();

            if (merchantBancario.getMerchantbancarioId() != null) {
                merchantBancario.setActivo(Boolean.FALSE);
                merchantBancario.setFecmodif(Calendar.getInstance().getTime());
                merchantBancario.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

                merchantBancarioService.borrar(merchantBancario);
            }

            companiaBancaria.getMerchantBancarioList().remove(merchantBancario);
            merchantBancarioList.setData(companiaBancaria.getMerchantBancarioList());
        }
    }

    public void onClick$btnSalvar(Event ev) {
        txtCVECompania.getValue();
        txtCVESucursal.getValue();

        try {

            if (companiaBancaria.getUsuarioBancarioList().isEmpty()) {
                Messagebox.show(
                        Labels.getLabel("editarCompaniaBancariaController.MSG.usu"),
                        Labels.getLabel("editarCompaniaBancariaController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);
            } else if (companiaBancaria.getMerchantBancarioList().isEmpty()) {
                Messagebox.show(
                        Labels.getLabel("editarCompaniaBancariaController.MSG.mer"),
                        Labels.getLabel("editarCompaniaBancariaController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);
            } else {
                companiaBancaria.setActivo(Boolean.TRUE);
                companiaBancaria.setFecmodif(Calendar.getInstance().getTime());
                companiaBancaria.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

                List<CompaniaBancaria> ciaBancaria = companiaBancariaService.buscar(companiaBancaria);

                boolean podeSalvar = false;
                if (ciaBancaria.isEmpty()) {
                    podeSalvar = true;
                } else {
                    if (companiaBancaria.getCompaniabancariaId() != null) {
                        for (CompaniaBancaria c : ciaBancaria) {
                            if (c.getCompaniabancariaId().equals(companiaBancaria.getCompaniabancariaId())) {
                                podeSalvar = true;
                            }
                        }
                    }
                }

                if (podeSalvar) {


                    if (companiaBancaria.getCompaniabancariaId() == null) {
                        companiaBancaria = companiaBancariaService.suscribir(companiaBancaria);
                        companiaBancariaList.addItem(companiaBancaria);
                    } else {
                        companiaBancaria = companiaBancariaService.actualizacion(companiaBancaria);
                        companiaBancariaList.updateItem(companiaBancaria);
                    }

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

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

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

            if (resp == Messagebox.YES) {
                companiaBancariaService.borrar(companiaBancaria);

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

                companiaBancariaList.removeItem(companiaBancaria);

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