com.sire.web.CxcDocCobrarBean.java Source code

Java tutorial

Introduction

Here is the source code for com.sire.web.CxcDocCobrarBean.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sire.web;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.sire.entities.BanCtaCte;
import com.sire.entities.CxcAbonoC;
import com.sire.entities.CxcAbonoCPK;
import com.sire.entities.CxcAbonoD;
import com.sire.entities.CxcAbonoDPK;
import com.sire.entities.CxcCheque;
import com.sire.entities.CxcChequePK;
import com.sire.entities.CxcCliente;
import com.sire.entities.CxcDocCobrar;
import com.sire.entities.CxcPagoContado;
import com.sire.entities.CxcPagoContadoPK;
import com.sire.entities.FacParametros;
import com.sire.entities.GnrLogHistorico;
import com.sire.entities.GnrLogHistoricoPK;
import com.sire.entities.Pago;
import com.sire.entities.VCliente;
import com.sire.exception.ClienteException;
import com.sire.exception.GPSException;
import com.sire.exception.MailException;
import com.sire.exception.RestException;
import com.sire.exception.VendedorException;
import com.sire.rs.client.BanCtaCteFacadeREST;
import com.sire.rs.client.CxcDocCobrarFacadeREST;
import com.sire.rs.client.FacParametrosFacadeREST;
import com.sire.rs.client.GnrContadorDocFacadeREST;
import com.sire.utils.Round;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.ws.rs.core.Response;
import lombok.Getter;
import lombok.Setter;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.mobile.event.SwipeEvent;

/**
 *
 * @author publio
 */
@ManagedBean(name = "cxcDocCobrarBean")
@SessionScoped

public class CxcDocCobrarBean {

    private static final Logger LOGGER = Logger.getLogger(CxcDocCobrarBean.class.getName());

    private final FacParametrosFacadeREST facParametrosFacadeREST;
    private final Gson gson;

    @Setter
    private List<CxcDocCobrar> cxcDocCobrarList;

    @Getter
    @Setter
    @ManagedProperty("#{cliente}")
    private CustomerBean cliente;

    @Getter
    @Setter
    @ManagedProperty(value = "#{user}")
    private UserManager userManager;
    @Getter
    @Setter
    @ManagedProperty("#{mapa}")
    private MapaBean mapa;

    @Getter
    @Setter
    private Double totalSaldo, totalCapital, diferencia, valorCheque = 0.0;

    @Setter
    private Double retencion = 0.0, retencionIVA = 0.0, efectivo = 0.0, deposito = 0.0, otros = 0.0,
            totalCheques = 0.0;

    @Getter
    @Setter
    private VCliente client;

    @Getter
    @Setter
    private CxcDocCobrar cxcDocCobrarSeleccionado;

    @Getter
    @Setter
    private boolean botonEnviarBloqueado = true, botonAgegarChequeBloqueado = true;

    @Getter
    @Setter
    private String numeroCuenta, codBanco, numCuenta, ctaCorriente;

    @Getter
    @Setter
    private Date fechaCheque;

    @Getter
    @Setter
    private BigInteger numCheque;

    @Getter
    @Setter
    private List<BanCtaCte> banCtaCtes;

    @Getter
    @Setter
    private List<CxcCheque> cxcCheques;

    @Resource(name = "mail/gmail")
    private Session mailSession;
    private CxcDocCobrarFacadeREST cxcDocCobrarFacadeREST;

    public CxcDocCobrarBean() {
        facParametrosFacadeREST = new FacParametrosFacadeREST();
        GsonBuilder builder = new GsonBuilder();
        gson = builder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();

        cxcCheques = new ArrayList<>();
        loadBanCtaCtes();
    }

    public void findDocCobrar() {
        //        VCliente c = cliente.getCliente();
        //
        //        if (c != null) {
        //            c.getCodCliente();
        //        }

    }

    public List<CxcDocCobrar> getCxcDocCobrarList() {
        if (cliente.getCliente() != null) {
            loadCxcDocCobrarList();
        }
        return cxcDocCobrarList;
    }

    public void seleccionarCxcDocCobrar(SelectEvent event) {
        CxcDocCobrar cxcDocCobrar = (CxcDocCobrar) event.getObject();
        LOGGER.log(Level.INFO, "CxcDocCobrar 1 {0}", cxcDocCobrar.getCxcDocCobrarPK().getNumDocumento());
        cxcDocCobrarSeleccionado = cxcDocCobrarList.get(cxcDocCobrarList.indexOf(cxcDocCobrar));
        LOGGER.log(Level.INFO, "CxcDocCobrar 2 {0}", cxcDocCobrar.getCxcDocCobrarPK().getNumDocumento());
    }

    public void calcularSaldo() {
        Double nuevoSaldo;

        LOGGER.log(Level.INFO, "capital: {0}", cxcDocCobrarSeleccionado.getCapital());

        if (cxcDocCobrarSeleccionado.getSaldoOri() == null) {
            cxcDocCobrarSeleccionado.setSaldoOri(cxcDocCobrarSeleccionado.getSaldoDocumento());
        } else {
            cxcDocCobrarSeleccionado.setSaldoDocumento(cxcDocCobrarSeleccionado.getSaldoOri());
        }

        LOGGER.log(Level.INFO, "antiguoSaldo: {0}", cxcDocCobrarSeleccionado.getSaldoDocumento());

        if (cxcDocCobrarSeleccionado.getCapital() != null
                && cxcDocCobrarSeleccionado.getSaldoDocumento() >= cxcDocCobrarSeleccionado.getCapital()) {
            LOGGER.info("## nuevoSaldo ##");
            nuevoSaldo = cxcDocCobrarSeleccionado.getSaldoDocumento() - cxcDocCobrarSeleccionado.getCapital();
            cxcDocCobrarSeleccionado.setSaldoDocumento(nuevoSaldo);
        }

        LOGGER.log(Level.INFO, "nuevoSaldo: {0}", cxcDocCobrarSeleccionado.getSaldoDocumento());

        diferencia = cxcDocCobrarSeleccionado.getCapital();
        calcularTotales();
        //        calcularFormaPago();
    }

    public void calcularFormaPago(String formaPago) {
        LOGGER.info("calcularFormaPago()");
        Double sumFormaPagos = getRetencion() + getRetencionIVA() + getEfectivo() + getDeposito() + getOtros()
                + getTotalCheques();
        if (sumFormaPagos == null || cxcDocCobrarSeleccionado == null
                || cxcDocCobrarSeleccionado.getCapital() == null) {
            return;
        }
        if (sumFormaPagos > cxcDocCobrarSeleccionado.getCapital()) {
            switch (formaPago) {
            case "retencion":
                retencion = 0.0;
                break;
            case "retencionIVA":
                retencionIVA = 0.0;
                break;
            case "efectivo":
                efectivo = 0.0;
                break;
            case "deposito":
                deposito = 0.0;
                break;
            case "otros":
                otros = 0.0;
                break;
            case "totalCheques":
                totalCheques = 0.0;
                break;
            }
            addMessage("Advertencia.", "Monto ingresado excede a la diferencia", FacesMessage.SEVERITY_WARN);
            return;
        }
        diferencia = cxcDocCobrarSeleccionado.getCapital() - sumFormaPagos;
        diferencia = Round.round(diferencia, 2);
        LOGGER.log(Level.INFO, "diferencia: {0}", diferencia);
        if (diferencia == 0 && validarCheque()) {
            botonAgegarChequeBloqueado = true;
            botonEnviarBloqueado = false;
        } else if (diferencia >= 0) {
            botonAgegarChequeBloqueado = false;
            botonEnviarBloqueado = true;
        } else {
            botonAgegarChequeBloqueado = true;
            botonEnviarBloqueado = true;
        }
    }

    public String enviar() {
        LOGGER.info("enviar()");
        BigDecimal numDocumentoResp = null;
        try {
            if (mapa.getDireccion() == null) {
                throw new GPSException("Por favor active el GPS y seleccione Geolocalizar.");
            }

            GnrContadorDocFacadeREST gnrContadorDocFacadeREST = new GnrContadorDocFacadeREST();
            numDocumentoResp = gnrContadorDocFacadeREST.numDocumento(BigDecimal.class, "01", "06", "CIN",
                    userManager.getCurrent().getNombreUsuario());

            CxcAbonoC cxcAbonoC = new CxcAbonoC();
            CxcAbonoCPK cxcAbonoCPK = new CxcAbonoCPK();
            cxcAbonoCPK.setCodDocumento("CIN");
            cxcAbonoCPK.setCodEmpresa(obtenerEmpresa());
            cxcAbonoCPK.setNumAbono(numDocumentoResp.toBigInteger());
            cxcAbonoC.setCxcAbonoCPK(cxcAbonoCPK);
            cxcAbonoC.setCodDivisa("01");
            cxcAbonoC.setCodMotivo("");
            cxcAbonoC.setCodVendedor(obtenerVendedor());
            cxcAbonoC.setCxcCliente(obtenerCliente());
            cxcAbonoC.setCxcInforme(null);
            cxcAbonoC.setDetalle(userManager.getCurrent().getNombreUsuario());
            cxcAbonoC.setEstado("G");
            cxcAbonoC.setFechaAbono(Calendar.getInstance().getTime());
            cxcAbonoC.setFechaEstado(Calendar.getInstance().getTime());
            cxcAbonoC.setNombreUsuario(userManager.getCurrent());
            cxcAbonoC.setTotalCapital(cxcDocCobrarSeleccionado.getCapital());
            cxcAbonoC.setTotalMora(BigInteger.ZERO);

            List<CxcAbonoD> cxcAbonoDList = new ArrayList<>();
            int i = 1;
            for (CxcDocCobrar cxcDocCobrar : cxcDocCobrarList) {
                if (cxcDocCobrar.getCxcDocCobrarPK().getNumDocumento()
                        .equals(cxcDocCobrarSeleccionado.getCxcDocCobrarPK().getNumDocumento())) {
                    if (cxcDocCobrar.getSaldoOri() == null) {
                        cxcDocCobrar.setSaldoOri(cxcDocCobrarSeleccionado.getSaldoOri());
                    }

                    cxcDocCobrar.setSaldoDocumento(cxcDocCobrarSeleccionado.getSaldoDocumento());
                    cxcDocCobrar.setCapital(cxcDocCobrarSeleccionado.getCapital());

                    LOGGER.info("Pago: " + numDocumentoResp + ", cxcDocCobrar: " + cxcDocCobrar
                            + ", cxcDocCobrarSeleccionado.getSaldoDocumento(): "
                            + cxcDocCobrarSeleccionado.getSaldoDocumento() + ", cxcDocCobrar.getSaldoOri(): "
                            + cxcDocCobrar.getSaldoOri() + ", cxcDocCobrar.getSaldoDocumento(): "
                            + cxcDocCobrar.getSaldoDocumento());
                    if (cxcDocCobrar.getSaldoOri() != null
                            && !Objects.equals(cxcDocCobrar.getSaldoOri(), cxcDocCobrar.getSaldoDocumento())) {
                        CxcAbonoD cxcAbonoD = new CxcAbonoD();
                        CxcAbonoDPK cxcAbonoDPK = new CxcAbonoDPK();
                        cxcAbonoDPK.setAuxiliar(i);
                        cxcAbonoDPK.setCodDocumento("CIN");
                        cxcAbonoDPK.setCodEmpresa(cxcDocCobrar.getCxcDocCobrarPK().getCodEmpresa());
                        cxcAbonoDPK.setNumAbono(numDocumentoResp.intValue());
                        cxcAbonoD.setCxcAbonoDPK(cxcAbonoDPK);
                        cxcAbonoD.setCapital(cxcDocCobrar.getCapital());
                        cxcAbonoD.setCodAbono(cxcDocCobrar.getCxcDocCobrarPK().getCodDocumento());
                        cxcAbonoD.setDias(0);
                        cxcAbonoD.setNumDocumento(cxcDocCobrar.getCxcDocCobrarPK().getNumDocumento().intValue());
                        cxcAbonoD.setNumeroCuota(cxcDocCobrar.getCxcDocCobrarPK().getNumeroCuota().intValue());
                        cxcAbonoD.setPorcComision(BigDecimal.ZERO);
                        cxcAbonoD.setValorMora(BigInteger.ZERO);

                        cxcAbonoDList.add(cxcAbonoD);
                        i++;
                    }
                }
            }

            LOGGER.info("Pago: " + numDocumentoResp + ", cxcAbonoDList.size: " + cxcAbonoDList.size());
            cxcAbonoC.setCxcAbonoDList(cxcAbonoDList);

            CxcPagoContado cxcPagoContado = new CxcPagoContado();
            CxcPagoContadoPK cxcPagoContadoPK = new CxcPagoContadoPK();
            cxcPagoContadoPK.setCodDocumento("CIN");
            cxcPagoContadoPK.setCodEmpresa(obtenerEmpresa());
            cxcPagoContadoPK.setNumPago(new BigInteger(numDocumentoResp.toString()));
            cxcPagoContado.setCxcPagoContadoPK(cxcPagoContadoPK);
            cxcPagoContado.setCheques(totalCheques);
            cxcPagoContado.setCodTarjeta(null);
            cxcPagoContado.setCodVendedor(obtenerVendedor());
            cxcPagoContado.setCredito(BigInteger.ZERO);
            cxcPagoContado.setCtaCorriente(ctaCorriente);
            cxcPagoContado.setCxcCliente(obtenerCliente());
            cxcPagoContado.setDeposito(deposito);
            cxcPagoContado.setDetalle("Pago Web");
            cxcPagoContado.setEfectivo(efectivo);
            cxcPagoContado.setFechaDocumento(Calendar.getInstance().getTime());
            cxcPagoContado.setNombreUsuario(userManager.getCurrent().getNombreUsuario());
            cxcPagoContado.setOtros(otros);
            cxcPagoContado.setPagoTotal(cxcDocCobrarSeleccionado.getCapital());
            cxcPagoContado.setRetencion(retencion);
            cxcPagoContado.setRetencionIva(retencionIVA);
            cxcPagoContado.setTarjeta(BigInteger.ZERO);

            Pago pago = new Pago();
            pago.setCxcAbonoC(cxcAbonoC);
            for (CxcCheque cheque : cxcCheques) {
                cheque.getCxcChequePK().setNumDocumento(numDocumentoResp.intValue());
            }
            pago.setCxcAbonoDList(cxcAbonoC.getCxcAbonoDList());
            pago.setCxcChequeList(cxcCheques);
            pago.setCxcDocCobrarList(cxcDocCobrarList);
            pago.setCxcPagoContado(cxcPagoContado);
            agregarLog(pago);
            LOGGER.info("Enviando Pago " + numDocumentoResp + " ...");
            cxcDocCobrarFacadeREST = new CxcDocCobrarFacadeREST();
            Response response = cxcDocCobrarFacadeREST.save_JSON(pago);

            LOGGER.info("Pago: " + numDocumentoResp + ", Response: " + response.toString() + ", Status: "
                    + response.getStatus() + ", Status info: " + response.getStatusInfo().getReasonPhrase());

            if (response.getStatus() != 200) {
                throw new RestException("No se pudo realizar el pago, por favor contacte al administrador.");
            }

            LOGGER.info("Pago " + numDocumentoResp + " Enviado.");

            LOGGER.info("Enviando Mail ...");
            enviarMail(pago);
            LOGGER.info("Mail Enviado.");

            limpiar();

            addMessage("Cobro relizado exitosamente.", "Num. Cobro: " + numDocumentoResp,
                    FacesMessage.SEVERITY_INFO);
            FacesContext context = FacesContext.getCurrentInstance();
            context.getExternalContext().getFlash().setKeepMessages(true);
            return "index?faces-redirect=true";
        } catch (RestException | ClienteException | GPSException | VendedorException ex) {
            LOGGER.log(Level.SEVERE, ex.getMessage());
            addMessage("Advertencia", ex.getMessage(), FacesMessage.SEVERITY_INFO);
            return "cobro?faces-redirect=true";
        } catch (MessagingException | MailException ex) {
            limpiar();
            LOGGER.log(Level.WARNING, ex.getMessage());
            addMessage("Cobro relizado exitosamente.",
                    "Num. Cobro: " + numDocumentoResp + ",  pero no se pudo enviar e-mail.",
                    FacesMessage.SEVERITY_WARN);
            FacesContext context = FacesContext.getCurrentInstance();
            context.getExternalContext().getFlash().setKeepMessages(true);
            return "index?faces-redirect=true";
        } finally {
            if (cxcDocCobrarFacadeREST != null) {
                cxcDocCobrarFacadeREST.close();
            }
        }
    }

    public void calcularCheques() {
        LOGGER.info("calcularCheques()");
        if (valorCheque > 0.0) {
            LOGGER.info("cxcDocCobrarSeleccionado.getCapital(): " + cxcDocCobrarSeleccionado.getCapital()
                    + ", retencion: " + retencion + ", retencionIVA: " + retencionIVA + ", efectivo: " + efectivo
                    + ", deposito: " + deposito + ", otros: " + otros + ", totalCheques:" + totalCheques
                    + ", valorCheque: " + valorCheque);
            Double dif = cxcDocCobrarSeleccionado.getCapital() - retencion - retencionIVA - efectivo - deposito
                    - otros - totalCheques - valorCheque;
            dif = Round.round(dif, 2);
            LOGGER.log(Level.INFO, "dif: {0}", dif);
            if (dif.equals(0.0) && validarCheque()) {
                botonAgegarChequeBloqueado = false;
                botonEnviarBloqueado = false;
            } else if (dif >= 0.0) {
                botonAgegarChequeBloqueado = false;
                botonEnviarBloqueado = true;
            } else {
                botonAgegarChequeBloqueado = true;
                botonEnviarBloqueado = true;
            }
        } else {
            botonAgegarChequeBloqueado = true;
        }
        LOGGER.log(Level.INFO, "botonAgegarChequeBloqueado: {0}", botonAgegarChequeBloqueado);
        RequestContext.getCurrentInstance().update("cobro:accordionPanel:chequesForm:agregarChequeButton");
    }

    public void agregarCheque() {
        LOGGER.log(Level.INFO, "codBanco: {0}", codBanco);
        LOGGER.log(Level.INFO, "fechaCheque: {0}", fechaCheque);
        LOGGER.log(Level.INFO, "numCheque: {0}", numCheque);
        LOGGER.log(Level.INFO, "numCuenta: {0}", numCuenta);
        LOGGER.log(Level.INFO, "valorCheque: {0}", valorCheque);

        CxcCheque cheque = new CxcCheque();
        cheque.setCodBanco(codBanco);
        cheque.setCodDeposito(null);
        cheque.setCodDivisa("01");
        CxcChequePK cxcChequePK = new CxcChequePK();
        cxcChequePK.setAuxiliar(cxcCheques.size() + 1);
        cxcChequePK.setCodDocumento("CIN");
        cxcChequePK.setCodEmpresa(obtenerEmpresa());
        //        cxcChequePK.setNumDocumento(cxcCheques.size() + 1);
        cheque.setCxcChequePK(cxcChequePK);
        try {
            cheque.setCxcCliente(obtenerCliente());
        } catch (ClienteException ex) {
            addMessage("Advertencia", ex.getMessage(), FacesMessage.SEVERITY_INFO);
        }
        cheque.setDetalle(null);
        cheque.setEstado("G");

        cheque.setFechaCheque(fechaCheque);
        cheque.setFechaEstado(Calendar.getInstance().getTime());
        cheque.setFechaRecepcion(Calendar.getInstance().getTime());
        cheque.setNumCheque(numCheque);
        cheque.setNumCuenta(numCuenta);
        cheque.setNumDeposito(0L);
        cheque.setReferencia(null);
        cheque.setValorCheque(valorCheque);

        cxcCheques.add(cheque);
        totalCheques += valorCheque;

        calcularFormaPago("cheque");
        limpiarFormaCheque();
        botonAgegarChequeBloqueado = true;
        RequestContext.getCurrentInstance().update("cobro:accordionPanel:formaPagoForm:enviarButton");
    }

    private void loadCxcDocCobrarList() {
        CxcDocCobrarFacadeREST cxcDocCobrarFacadeREST = new CxcDocCobrarFacadeREST();
        client = cliente.getCliente();
        BigInteger codCliente = cliente.getCliente().getCodCliente();
        String cxcDocCobrarListString;
        try {
            cxcDocCobrarListString = cxcDocCobrarFacadeREST.findByCodClienteCodVendedor(String.class,
                    codCliente.toString(), obtenerVendedor().toString());
            //        String cxcDocCobrarListString = cxcDocCobrarFacadeREST.findAll_JSON(String.class);
            cxcDocCobrarList = gson.fromJson(cxcDocCobrarListString, new TypeToken<List<CxcDocCobrar>>() {
            }.getType());
            calcularTotales();
        } catch (VendedorException ex) {
            Logger.getLogger(CxcDocCobrarBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage("Advertencia", ex.getMessage(), FacesMessage.SEVERITY_INFO);
        }
    }

    private void calcularTotales() {
        totalSaldo = 0.0;
        totalCapital = 0.0;
        for (CxcDocCobrar cxcDocCobrar : cxcDocCobrarList) {
            totalSaldo += cxcDocCobrar.getSaldoDocumento();

            if (cxcDocCobrar.getCapital() != null) {
                totalCapital += cxcDocCobrar.getCapital();
            }
        }

        totalSaldo = Round.round(totalSaldo, 2);
        totalCapital = Round.round(totalCapital, 2);
    }

    private void loadBanCtaCtes() {
        BanCtaCteFacadeREST banCtaCteFacadeREST = new BanCtaCteFacadeREST();
        String banCtaCtesString = banCtaCteFacadeREST.findAll_JSON(String.class);
        banCtaCtes = gson.fromJson(banCtaCtesString, new TypeToken<List<BanCtaCte>>() {
        }.getType());
        RequestContext.getCurrentInstance().update("cobro:accordionPanel:formaPagoForm:bloqueC:cuentaBancaria");
    }

    private String obtenerEmpresa() {
        return userManager.getGnrEmpresa().getCodEmpresa();
    }

    private CxcCliente obtenerCliente() throws ClienteException {
        if (cliente.getCliente() == null) {
            throw new ClienteException("Por favor seleccione el cliente.");
        }

        return new CxcCliente(obtenerEmpresa(), cliente.getCliente().getCodCliente());
    }

    private BigInteger obtenerVendedor() throws VendedorException {
        FacParametros facParametros = obtenerFacParametros();

        if (facParametros == null) {
            throw new VendedorException("Vendedor no asociado a facturacin.");
        }

        Integer defCodVendedor = facParametros.getDefCodVendedor();

        if (defCodVendedor == null) {
            throw new VendedorException("Vendedor no asociado a facturacin.");
        }

        return BigInteger.valueOf(defCodVendedor);
    }

    private FacParametros obtenerFacParametros() {
        FacParametros facParametros = facParametrosFacadeREST.find_JSON(FacParametros.class, "id;codEmpresa="
                + obtenerEmpresa() + ";nombreUsuario=" + userManager.getCurrent().getNombreUsuario());
        return facParametros;
    }

    private void addMessage(String summary, String detail, FacesMessage.Severity severity) {
        FacesMessage message = new FacesMessage(severity, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public boolean validarCheque() {
        //        cxcChequeFacadeREST.findByCodClienteCodEmpresaMes(String.class, obtenerCliente(), obtenerEmpresa(), codBanco)
        botonEnviarBloqueado = true;
        RequestContext.getCurrentInstance().update("cobro:accordionPanel:formaPagoForm:pagoTotal");
        return true;
    }

    public void swipeleft(SwipeEvent event) {
        //        setInvMovimientoDtllSeleccionado(((InvMovimientoDtll) event.getData()));
        CxcCheque cxcCheque = (CxcCheque) event.getData();

        totalCheques = totalCheques - cxcCheque.getValorCheque();
        calcularFormaPago("cheque");
        cxcCheques.remove(cxcCheque);
    }

    private void limpiar() {
        mapa.limpiar();
        cxcCheques.clear();
        cxcDocCobrarList = null;
        numeroCuenta = null;
        botonEnviarBloqueado = true;
        botonAgegarChequeBloqueado = true;
        cxcDocCobrarSeleccionado = null;
        retencion = 0.0;
        retencionIVA = 0.0;
        efectivo = 0.0;
        deposito = 0.0;
        otros = 0.0;
        totalCheques = 0.0;
        totalSaldo = null;
        totalCapital = null;
        diferencia = null;
        cliente.limpiar();
        limpiarFormaCheque();
    }

    public void limpiarFormaPago() {
        mapa.limpiar();
        cxcCheques.clear();
        cxcDocCobrarList = null;
        numeroCuenta = null;
        botonEnviarBloqueado = true;
        botonAgegarChequeBloqueado = true;
        cxcDocCobrarSeleccionado = null;
        retencion = 0.0;
        retencionIVA = 0.0;
        efectivo = 0.0;
        deposito = 0.0;
        otros = 0.0;
        totalCheques = 0.0;
        totalSaldo = null;
        totalCapital = null;
        diferencia = null;
        limpiarFormaCheque();
    }

    private void agregarLog(Pago pago) throws VendedorException {
        GnrLogHistorico gnrLogHistorico = new GnrLogHistorico();
        gnrLogHistorico.setDispositivo("Tablet");
        gnrLogHistorico.setEstado("G");
        gnrLogHistorico.setFechaDocumento(Calendar.getInstance().getTime());
        gnrLogHistorico.setFechaEstado(Calendar.getInstance().getTime());
        GnrLogHistoricoPK gnrLogHistoricoPK = new GnrLogHistoricoPK();
        gnrLogHistoricoPK.setCodDocumento(pago.getCxcAbonoC().getCxcAbonoCPK().getCodDocumento());
        gnrLogHistoricoPK.setCodEmpresa(obtenerEmpresa());
        gnrLogHistoricoPK.setNumDocumento(pago.getCxcAbonoC().getCxcAbonoCPK().getNumAbono().intValue());
        gnrLogHistorico.setGnrLogHistoricoPK(gnrLogHistoricoPK);
        gnrLogHistorico.setNombreUsuario(userManager.getCurrent().getNombreUsuario());
        gnrLogHistorico.setUbicacionGeografica(mapa.getDireccion());
        gnrLogHistorico.setLatitud(Double.valueOf(mapa.getLat()));
        gnrLogHistorico.setLongitud(Double.valueOf(mapa.getLng()));
        pago.setGnrLogHistorico(gnrLogHistorico);
    }

    private void limpiarFormaCheque() {
        codBanco = null;
        fechaCheque = null;
        numCheque = null;
        numCuenta = null;
        valorCheque = 0.0;
    }

    private void enviarMail(Pago pago) throws MessagingException, MailException {
        Message message = new MimeMessage(mailSession);

        if (cliente.getCliente().getMail() != null && !cliente.getCliente().getMail().isEmpty()) {
            String toUser = cliente.getCliente().getMail();
            String sub = "Cobro.";
            String saltoLinea = System.getProperty("line.separator");
            StringBuilder msg = new StringBuilder();
            msg.append("Documento N: ");
            msg.append(pago.getGnrLogHistorico().getGnrLogHistoricoPK().getNumDocumento());
            msg.append(saltoLinea);
            msg.append("Monto: ");
            msg.append(pago.getCxcAbonoC().getTotalCapital());
            msg.append(saltoLinea);
            msg.append("Ret. Fuente: ");
            msg.append(pago.getCxcPagoContado().getRetencion());
            msg.append(saltoLinea);
            msg.append("Dev. Descuento: ");
            msg.append("");
            msg.append(saltoLinea);
            msg.append("Cheques: ");
            msg.append(saltoLinea);
            for (CxcCheque cxcCheque : pago.getCxcChequeList()) {
                msg.append("Banco: ");
                msg.append(cxcCheque.getCodBanco());
                msg.append(saltoLinea);
                msg.append("Cheque N: ");
                msg.append(cxcCheque.getNumCheque());
                msg.append(saltoLinea);
                msg.append("Valor: ");
                msg.append(cxcCheque.getValorCheque());
            }

            message.setRecipient(Message.RecipientType.TO, new InternetAddress(toUser));
            message.setText(msg.toString());
            message.setSubject(sub);
            Transport.send(message);
        } else {
            throw new MailException("Cliente no tiene e-mail");
        }
    }

    public Double getRetencion() {
        if (retencion == null) {
            retencion = 0.0;
        }
        return retencion;
    }

    public Double getRetencionIVA() {
        if (retencionIVA == null) {
            retencionIVA = 0.0;
        }
        return retencionIVA;
    }

    public Double getEfectivo() {
        if (efectivo == null) {
            efectivo = 0.0;
        }
        return efectivo;
    }

    public Double getDeposito() {
        if (deposito == null) {
            deposito = 0.0;
        }
        return deposito;
    }

    public Double getOtros() {
        if (otros == null) {
            otros = 0.0;
        }
        return otros;
    }

    public Double getTotalCheques() {
        if (totalCheques == null) {
            totalCheques = 0.0;
        }
        return totalCheques;
    }

    public void loadCuentaBancaria() {
        ctaCorriente = numeroCuenta;
    }
}