co.com.codesoftware.logica.facturacion.RemisionLogica.java Source code

Java tutorial

Introduction

Here is the source code for co.com.codesoftware.logica.facturacion.RemisionLogica.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 co.com.codesoftware.logica.facturacion;

import co.com.codesoftware.persistencia.HibernateUtil;
import co.com.codesoftware.persistencia.ReadFunction;
import co.com.codesoftware.persistencia.entidad.facturacion.DetProdRemision;
import co.com.codesoftware.persistencia.entidad.facturacion.RemisionEntity;
import co.com.codesoftware.persistencia.entidad.generico.facturacion.RelFacRemiGenEntity;
import co.com.codesoftware.persistencia.utilities.DataType;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author nicolas
 */
public class RemisionLogica implements AutoCloseable {

    private Session sesion;
    private Transaction tx;

    /**
     * Funcion con la cual obtengo las remisiones basandome en el id del cliente
     *
     * @param idCliente
     * @return
     */
    public List<RemisionEntity> obtieneRemisionesXCliente(Integer idCliente, Date fechaIni, Date fechaFin) {
        List<RemisionEntity> rta = null;
        try {
            this.initOperation();
            Criteria crit = sesion.createCriteria(RemisionEntity.class);
            crit.setFetchMode("usuario.perfil", FetchMode.JOIN);
            crit.setFetchMode("usuario.persona", FetchMode.JOIN);
            crit.setFetchMode("usuario.sede", FetchMode.JOIN);
            if (fechaIni != null && fechaFin != null) {
                crit.add(Restrictions.between("fechaCreacion", fechaIni, fechaFin));
            }
            rta = crit.list();
        } catch (Exception e) {
            e.printStackTrace();
            rta = null;
        }
        return rta;
    }

    /**
     * Funcion con la cual obtengo los detalles de la remision teniendo en
     * cuenta su id
     *
     * @param idRemision
     * @return
     */
    public List<DetProdRemision> buscaDetallesRemision(Integer idRemision) {
        List<DetProdRemision> rta = null;
        try {
            this.initOperation();
            Criteria crit = sesion.createCriteria(DetProdRemision.class);
            crit.add(Restrictions.eq("idRemi", idRemision));
            crit.setFetchMode("producto.categoria", FetchMode.JOIN);
            crit.setFetchMode("producto.marca", FetchMode.JOIN);
            crit.setFetchMode("producto.referencia", FetchMode.JOIN);
            crit.setFetchMode("producto.subcuenta", FetchMode.JOIN);
            rta = crit.list();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rta;
    }

    /**
     * Funcion la cual llama al procedimiento para convertir una remision en
     * factura
     *
     * @param idRemision
     * @param idTius
     * @param idRsfa
     * @param diasPlazo
     * @return
     */
    public String realizarFacturaXRemision(Integer idRemision, Integer idTius, Integer idRsfa, Integer diasPlazo,
            String retefuente) {
        String rta = "";
        List<String> response = new ArrayList<>();
        try (ReadFunction rf = new ReadFunction()) {
            rf.setNombreFuncion("FA_REMISION_FACTURA");
            rf.setNumParam(5);
            rf.addParametro("" + idTius, DataType.INT);
            rf.addParametro("" + idRemision, DataType.INT);
            rf.addParametro("" + idRsfa, DataType.INT);
            rf.addParametro("" + diasPlazo, DataType.INT);
            rf.addParametro(retefuente, DataType.TEXT);
            rf.callFunctionJdbc();
            response = rf.getRespuestaPg();
            rta = response.get(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rta;
    }

    /**
     * Funcion con la cual realizo un abono de una remision
     *
     * @param idTius
     * @param idFact
     * @param valorPago
     * @param tipoPago
     * @param pagoTotal
     * @return
     */
    public String realizaPagoRemision(Integer idTius, Integer idFact, BigDecimal valorPago, String tipoPago,
            String pagoTotal) {
        String rta = "";
        List<String> response = new ArrayList<>();
        try (ReadFunction rf = new ReadFunction()) {
            rf.setNombreFuncion("FA_REGISTRA_PAGO_REMISION");
            rf.setNumParam(5);
            rf.addParametro("" + idTius, DataType.INT);
            rf.addParametro("" + idFact, DataType.INT);
            rf.addParametro(valorPago.toString(), DataType.BIGDECIMAL);
            rf.addParametro("" + tipoPago, DataType.TEXT);
            rf.addParametro("" + pagoTotal, DataType.TEXT);
            rf.callFunctionJdbc();
            response = rf.getRespuestaPg();
            rta = response.get(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rta;
    }

    /**
     * Funcion con la cual busco los dos principales id's para la realizaccion
     * de los pagos de remisiones
     *
     * @param tipoDoc
     * @param idDocumento
     * @return
     */
    public RelFacRemiGenEntity buscaRemisionXTipoDoc(String tipoDoc, Integer idDocumento) {
        RelFacRemiGenEntity rta = null;
        try {
            this.initOperation();
            Criteria crit = sesion.createCriteria(RemisionEntity.class);
            if ("FA".equalsIgnoreCase(tipoDoc)) {
                crit.add(Restrictions.eq("idFactura", idDocumento));
            } else {
                crit.add(Restrictions.eq("id", idDocumento));
            }
            RemisionEntity respuesta = (RemisionEntity) crit.uniqueResult();
            rta = new RelFacRemiGenEntity();
            if (respuesta == null) {
                rta.setMensaje("Error la factura no existe o no tiene una remision asociada");
            } else {
                rta.setMensaje("Ok");
                rta.setEstado(respuesta.getEstado());
                rta.setIdFactura(respuesta.getIdFactura());
                rta.setIdRemision(respuesta.getId());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rta;
    }

    private void initOperation() {
        try {
            sesion = HibernateUtil.getSessionFactory().openSession();
            tx = sesion.beginTransaction();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void close() throws Exception {
        try {
            if (tx != null) {
                tx.commit();
            }
            if (sesion != null) {
                sesion.close();
            }
        } catch (Exception e) {
            System.err.println("Error al cerrar la sesion del cliente hibernate " + e);
        }

    }
}