<commit_before>/*
 * 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(4);
            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<commit_msg>11/06/2016 003<commit_after>/*
 * 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
{'fraction_non_alphanumeric': 0.10309026505435447, 'fraction_numerical': 0.001832172957127153, 'mean_word_length': 2.5507372072853425, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4627564', 'n_tokens_mistral': 2572, 'n_tokens_neox': 2510, 'n_words': 526}