using Exferia_Aplicacion.Calculos.VentasCompras;
using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Contabilidad;
using Exferia_Aplicacion.Modelos_Existencias;
using Exferia_Aplicacion.Modelos_Generales;
using Exferia_Aplicacion.Modelos_Informes;
using Exferia_Aplicacion.Modelos_Ventas;
using Exferia_Aplicacion.Modelos_Volcado;
using Exferia_EntityFramework;
using Exferia_General;
using Exferia_General._0_Modelos;
using Exferia_Ventas._0_Modelos;
using Exferia_Ventas._1_Datos;
using Exferia_Ventas.General;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;

namespace Exferia_Ventas
{
    public class Datos_Ventas
    {
        #region AUX
        private decimal AUX_Obtener_Deuda_Por_IdCliente(long _lng_idCliente)
        {
            decimal dcm_deuda = 0;
            try
            {
                AUX_Datos obj_AUX_Datos = new AUX_Datos();

                dcm_deuda = obj_AUX_Datos.Obtener_Deuda(_lng_idCliente);
            }
            catch (Control_Errores)
            {
                dcm_deuda = 0;
            }
            catch (Exception)
            {
                dcm_deuda = 0;
            }

            return dcm_deuda;
        }
        #endregion

        #region VTA_AlbaranesCabecera
        private INTERNO_ValorDevuelto_Modelo VTA_AlbaranesCabecera_Insertar(VTA_AlbaranesCabecera _mdl_VTA_AlbaranesCabecera)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                VTA_AlbaranesCabecera_Datos obj_VTA_AlbaranesCabecera_Datos = new VTA_AlbaranesCabecera_Datos();
                mdl_INTERNO_ValorDevuelto_Modelo = obj_VTA_AlbaranesCabecera_Datos.Insertar(_mdl_VTA_AlbaranesCabecera);
            }
            catch (Control_Errores ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.Message;
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.Message;
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        private INTERNO_ValorDevuelto_Modelo VTA_AlbaranesCabecera_Actualizar_Estado(long _lng_idAlbaranCabecera, string _str_Estado)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {
                VTA_AlbaranesCabecera_Datos obj_VTA_AlbaranesCabecera_Datos = new VTA_AlbaranesCabecera_Datos();
                mdl_INTERNO_ValorDevuelto_Modelo = obj_VTA_AlbaranesCabecera_Datos.Actualizar_Estado(_lng_idAlbaranCabecera, _str_Estado);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private VTA_AlbaranesCabecera VTA_AlbaranesCabecera_Obtener_Por_Id(long _lng_id)
        {
            try
            {
                VTA_AlbaranesCabecera_Datos obj_VTA_AlbaranesCabecera_Datos = new VTA_AlbaranesCabecera_Datos();
                return obj_VTA_AlbaranesCabecera_Datos.Obtener_Modelo_Por_Id(_lng_id, false, false);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        #endregion

        #region VTA_AlbaranesFacturasLineas
        private List<INTERNO_ArticuloDiarioActualizar_Documentos_Modelo> VTA_AlbaranesFacturasLineas_Obtener_Para_RecalcularMovimientos_Facturas(long? _lng_idArticulo, DateTime _dtt_Desde, DateTime _dtt_Hasta)
        {
            List<INTERNO_ArticuloDiarioActualizar_Documentos_Modelo> lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            try
            {
                VTA_AlbaranesFacturasLineas_Datos obj_VTA_AlbaranesFacturasLineas_Datos = new VTA_AlbaranesFacturasLineas_Datos();

                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Para_RecalcularMovimientos_Facturas(_lng_idArticulo, _dtt_Desde, _dtt_Hasta);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            }
            catch (Exception)
            {
                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            }

            return lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo;
        }
        private List<INTERNO_ArticuloDiarioActualizar_Documentos_Modelo> VTA_AlbaranesFacturasLineas_Obtener_Para_RecalcularMovimientos_Albaranes(long? _lng_idArticulo, DateTime _dtt_Desde, DateTime _dtt_Hasta)
        {
            List<INTERNO_ArticuloDiarioActualizar_Documentos_Modelo> lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            try
            {
                VTA_AlbaranesFacturasLineas_Datos obj_VTA_AlbaranesFacturasLineas_Datos = new VTA_AlbaranesFacturasLineas_Datos();

                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Para_RecalcularMovimientos_Albaranes(_lng_idArticulo, _dtt_Desde, _dtt_Hasta);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            }
            catch (Exception)
            {
                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            }

            return lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo;
        }

        private List<INTERNO_INF_MovimientosArticulos_Listado_Modelo> VTA_AlbaranesFacturasLineas_Obtener_Listado_Movimientos_Facturas(long _lng_idArticulo,
                                                                                                    DateTime _dtt_FechaDesde,
                                                                                                    DateTime _dtt_FechaHasta,
                                                                                                    long? _lng_idDelegacion,
                                                                                                    long? _lng_idAlmacen,
                                                                                                    long? _lng_idUbicacion)
        {
            List<INTERNO_INF_MovimientosArticulos_Listado_Modelo> lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            try
            {
                VTA_AlbaranesFacturasLineas_Datos obj_VTA_AlbaranesFacturasLineas_Datos = new VTA_AlbaranesFacturasLineas_Datos();

                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Listado_Movimientos_Facturas(_lng_idArticulo, _dtt_FechaDesde, _dtt_FechaHasta, _lng_idDelegacion, _lng_idAlmacen, _lng_idUbicacion);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            }
            catch (Exception)
            {
                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            }

            return lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo;
        }
        private List<INTERNO_INF_MovimientosArticulos_Listado_Modelo> VTA_AlbaranesFacturasLineas_Obtener_Listado_Movimientos_Albaranes(long _lng_idArticulo,
                                                                                                    DateTime _dtt_FechaDesde,
                                                                                                    DateTime _dtt_FechaHasta,
                                                                                                    long? _lng_idDelegacion,
                                                                                                    long? _lng_idAlmacen,
                                                                                                    long? _lng_idUbicacion)
        {
            List<INTERNO_INF_MovimientosArticulos_Listado_Modelo> lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            try
            {
                VTA_AlbaranesFacturasLineas_Datos obj_VTA_AlbaranesFacturasLineas_Datos = new VTA_AlbaranesFacturasLineas_Datos();

                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Listado_Movimientos_Albaranes(_lng_idArticulo, _dtt_FechaDesde, _dtt_FechaHasta, _lng_idDelegacion, _lng_idAlmacen, _lng_idUbicacion);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            }
            catch (Exception)
            {
                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            }

            return lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo;
        }

        #endregion

        #region VTA_Cobros
        private INTERNO_VTA_Cobros_Volcado_Modelo VTA_Cobros_Obtener_Volcado(long _lng_id)
        {
            try
            {
                VTA_Cobros_Datos obj_VTA_Cobros_Datos = new VTA_Cobros_Datos();
                return obj_VTA_Cobros_Datos.Obtener_Volcado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private VTA_Cobros VTA_Cobros_Obtener(long _lng_id, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual)
        {
            try
            {
                VTA_Cobros_Datos obj_VTA_Cobros_Datos = new VTA_Cobros_Datos();
                return obj_VTA_Cobros_Datos.Obtener(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private VTA_Cobros VTA_Cobros_Obtener_Modelo_Por_Id(long _lng_id)
        {
            VTA_Cobros mdl_VTA_Cobros = null;
            try
            {
                VTA_Cobros_Datos obj_VTA_Cobros_Datos = new VTA_Cobros_Datos();

                mdl_VTA_Cobros = obj_VTA_Cobros_Datos.Obtener_Modelo_Por_Id(_lng_id, false);
            }
            catch (Control_Errores)
            {
                mdl_VTA_Cobros = null;
            }
            catch (Exception)
            {
                mdl_VTA_Cobros = null;
            }

            return mdl_VTA_Cobros;
        }
        private VTA_Cobros VTA_Cobros_Obtener_Modelo_Por_Id_AUX_1(long _lng_id,
                                                                  bool _bol_Cargar_Vencimiento)
        {
            VTA_Cobros mdl_VTA_Cobros = null;
            try
            {
                VTA_Cobros_Datos obj_VTA_Cobros_Datos = new VTA_Cobros_Datos();

                mdl_VTA_Cobros = obj_VTA_Cobros_Datos.Obtener_Modelo_Por_Id(_lng_id, _bol_Cargar_Vencimiento);
            }
            catch (Control_Errores)
            {
                mdl_VTA_Cobros = null;
            }
            catch (Exception)
            {
                mdl_VTA_Cobros = null;
            }

            return mdl_VTA_Cobros;
        }
        public static List<INTERNO_ResultadoDeclaracion> VTA_Cobros_ObtenerDeclaracionClientes(DateTime dtm_FechaDesde, DateTime dtm_FechaHasta)
        {
            try
            {
                VTA_Cobros_Datos obj_VTA_Cobros_Datos = new VTA_Cobros_Datos();
                return obj_VTA_Cobros_Datos.ObtenerDeclaracionClientes(dtm_FechaDesde, dtm_FechaHasta);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        #endregion

        #region VTA_CobrosAlbaranes
        private INTERNO_VTA_CobrosAlbaranes_Volcado_Modelo VTA_CobrosAlbaranes_Obtener_Volcado(long _lng_id)
        {
            try
            {
                VTA_CobrosAlbaranes_Datos obj_VTA_CobrosAlbaranes_Datos = new VTA_CobrosAlbaranes_Datos();
                return obj_VTA_CobrosAlbaranes_Datos.Obtener_Volcado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private VTA_CobrosAlbaranes VTA_CobrosAlbaranes_Obtener(long _lng_id, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual)
        {
            try
            {
                VTA_CobrosAlbaranes_Datos obj_VTA_CobrosAlbaranes_Datos = new VTA_CobrosAlbaranes_Datos();
                return obj_VTA_CobrosAlbaranes_Datos.Obtener(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private VTA_CobrosAlbaranes VTA_CobrosAlbaranes_Obtener_Modelo_Por_Id(long _lng_id)
        {
            VTA_CobrosAlbaranes mdl_VTA_CobrosAlbaranes = null;
            try
            {
                VTA_CobrosAlbaranes_Datos obj_VTA_CobrosAlbaranes_Datos = new VTA_CobrosAlbaranes_Datos();

                mdl_VTA_CobrosAlbaranes = obj_VTA_CobrosAlbaranes_Datos.Obtener_Modelo_Por_Id(_lng_id, false);
            }
            catch (Control_Errores)
            {
                mdl_VTA_CobrosAlbaranes = null;
            }
            catch (Exception)
            {
                mdl_VTA_CobrosAlbaranes = null;
            }

            return mdl_VTA_CobrosAlbaranes;
        }

        #endregion

        #region VTA_DevolucionesCobros
        private INTERNO_VTA_DevolucionesCobros_Volcado_Modelo VTA_DevolucionesCobros_Obtener_Volcado(long _lng_id)
        {
            try
            {
                VTA_DevolucionesCobros_Datos obj_VTA_DevolucionesCobros_Datos = new VTA_DevolucionesCobros_Datos();
                return obj_VTA_DevolucionesCobros_Datos.Obtener_Volcado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        #endregion

        #region VTA_FacturasCabecera
        private INTERNO_VTA_FacturasCabecera_Volcado_Modelo VTA_FacturasCabecera_Obtener_Volcado(long _lng_id)
        {
            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                return obj_VTA_FacturasCabecera_Datos.Obtener_Volcado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private List<long> VTA_FacturasCabecera_Obtener_Socios_ConFacturas(string _str_Listado_Socios, DateTime _dtt_Fecha_InicioEjercicio)
        {
            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                return obj_VTA_FacturasCabecera_Datos.Obtener_Socios_ConFacturas(_str_Listado_Socios, _dtt_Fecha_InicioEjercicio);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        private List<INTERNO_CTU_Cartera_Ventas_Modelo> VTA_FacturasCabecera_Obtener_Para_CTU_Cartera_Ventas_Por_FacturaCabeceraVenta(long _lng_idFacturaCabeceraVenta, long _lng_idEmpresa)
        {
            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                return obj_VTA_FacturasCabecera_Datos.CTU_Cartera_Ventas_Obtener_Por_FacturaCabeceraVenta(_lng_idFacturaCabeceraVenta, _lng_idEmpresa);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private List<INTERNO_CTU_Cartera_Ventas_Modelo> VTA_FacturasCabecera_Obtener_Para_CTU_Cartera_Ventas_Por_Cliente(long _lng_idCliente, long _lng_idEmpresa)
        {
            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                return obj_VTA_FacturasCabecera_Datos.CTU_Cartera_Ventas_Obtener_Por_Cliente(_lng_idCliente, _lng_idEmpresa);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private List<INTERNO_CTU_Cartera_Ventas_Modelo> VTA_FacturasCabecera_Obtener_Para_CTU_Cartera_Ventas_Por_AlbaranCabeceraVenta(long _lng_idAlbaranCabeceraVenta, long _lng_idEmpresa)
        {
            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                return obj_VTA_FacturasCabecera_Datos.CTU_Cartera_Ventas_Obtener_Por_AlbaranCabeceraVenta(_lng_idAlbaranCabeceraVenta, _lng_idEmpresa);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private INTERNO_ValorDevuelto_Modelo VTA_FacturasCabecera_Insertar(VTA_FacturasCabecera _mdl_VTA_FacturasCabecera)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                mdl_INTERNO_ValorDevuelto_Modelo = obj_VTA_FacturasCabecera_Datos.Insertar(_mdl_VTA_FacturasCabecera);
            }
            catch (Control_Errores ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.Message;
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.Message;
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo VTA_FacturasCabecera_Actualizar_Estado(long _lng_idFacturaCabecera, string _str_Estado)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                mdl_INTERNO_ValorDevuelto_Modelo = obj_VTA_FacturasCabecera_Datos.Actualizar_Estado(_lng_idFacturaCabecera, _str_Estado);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private VTA_FacturasCabecera VTA_FacturasCabecera_Obtener_Por_Id(long _lng_id)
        {
            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                return obj_VTA_FacturasCabecera_Datos.Obtener_Modelo_Por_Id(_lng_id, false, false, false, false);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> VTA_FacturasCabecera_Obtener_ParaResumenImpuestos(DateTime _dtt_FechaDesde, DateTime _dtt_FechaHasta, long? _lng_idDelegacion, List<long> _lst_IdCliente)
        {
            List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo = null;
            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo = obj_VTA_FacturasCabecera_Datos.Obtener_ParaResumenImpuestos(_dtt_FechaDesde, _dtt_FechaHasta, _lng_idDelegacion, _lst_IdCliente);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo = null;
            }
            catch (Exception)
            {
                lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo = null;
            }

            return lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo;
        }

        public static List<INTERNO_ResultadoDeclaracion> VTA_FacturaCabecera_ObtenerDeclaracionClientes(DateTime dtm_FechaDesde, DateTime dtm_FechaHasta)
        {
            try
            {
                VTA_FacturasCabecera_Datos obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
                return obj_VTA_FacturasCabecera_Datos.ObtenerDeclaracionClientes(dtm_FechaDesde, dtm_FechaHasta);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        #endregion

        #region GenerarPDF
        private INTERNO_ValorDevuelto_Modelo GenerarPDFImprimir_Informe_Vencimiento_Y_Cartas(BackgroundWorker _obj_TareaAsincrona_ParaProgress,
                                                                                             string _str_Opcion,
                                                                                             INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo,
                                                                                             List<long> _lst_idVencimientos,
                                                                                             bool _bol_Imprimir,
                                                                                             string _str_PartesDeLaImpresion)
        {

            return Funciones_Ventas.GenerarPDFImprimir_Informe_Vencimiento_Y_Cartas(_obj_TareaAsincrona_ParaProgress, _str_Opcion, _mdl_INTERNO_ValoresGenerales_Modelo, _lst_idVencimientos, _bol_Imprimir, _str_PartesDeLaImpresion);
        }

        #endregion

        #region VTA_PedidosCabecera
        private bool VTA_PedidosCabecera_TieneRelacion_ConServicios(long _lng_idRelacionClienteProveedor)
        {
            try
            {
                VTA_PedidosCabecera_Datos obj_VTA_PedidosCabecera_Datos = new VTA_PedidosCabecera_Datos();
                return obj_VTA_PedidosCabecera_Datos.TieneRelacion_ConServicios(_lng_idRelacionClienteProveedor);
            }
            catch (Control_Errores)
            {
                return true;
            }
            catch (Exception)
            {
                return true;
            }
        }

        #endregion

        #region VTA_RemesasCabecera
        private INTERNO_VTA_RemesasCabecera_Volcado_Modelo VTA_RemesasCabecera_Obtener_Volcado(long _lng_id)
        {
            try
            {
                VTA_RemesasCabecera_Datos obj_VTA_RemesasCabecera_Datos = new VTA_RemesasCabecera_Datos();
                return obj_VTA_RemesasCabecera_Datos.Obtener_Volcado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        #endregion

        #region VTA_Vencimientos
        private List<INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo> VTA_Vencimientos_CerrarAbrirVolcarDesvolcar_Documento(List<long> _lst_idVencimiento)
        {
            try
            {
                VTA_Vencimientos_Datos obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();
                return obj_VTA_Vencimientos_Datos.Obtener_Vencimiento_CerrarAbrirVolcarDesvolcar_Documento(_lst_idVencimiento);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        private List<long> VTA_Vencimientos_Obtener_Por_FacturaCabecera(long _lng_idFacturaCabecera)
        {
            try
            {
                VTA_Vencimientos_Datos obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();
                return obj_VTA_Vencimientos_Datos.Obtener_ListadoIds_Por_FacturaCabecera(_lng_idFacturaCabecera);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        private dynamic VTA_Vencimientos_Obtener(long _lng_id, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual)
        {
            try
            {
                VTA_Vencimientos_Datos obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();
                return obj_VTA_Vencimientos_Datos.Obtener(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        private VTA_Vencimientos VTA_Vencimientos_Obtener_Modelo_Por_Id(long _lng_id)
        {
            VTA_Vencimientos mdl_VTA_Vencimientos = null;
            try
            {
                VTA_Vencimientos_Datos obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();

                mdl_VTA_Vencimientos = obj_VTA_Vencimientos_Datos.Obtener_Modelo_Por_Id(_lng_id, false);
            }
            catch (Control_Errores)
            {
                mdl_VTA_Vencimientos = null;
            }
            catch (Exception)
            {
                mdl_VTA_Vencimientos = null;
            }

            return mdl_VTA_Vencimientos;
        }

        private INTERNO_ValorDevuelto_Modelo VTA_Vencimientos_Borrar_Modelo_Por_IdFacturaCabecera(long _lng_idFacturaCabecera)
        {
            VTA_Vencimientos_Datos obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();
            return obj_VTA_Vencimientos_Datos.Borrar_Por_IdFacturaCabecera(_lng_idFacturaCabecera);
        }

        //Procedimiento Creado para usarlo en el Servicio de Kronos para obtener el Listado de Vencimientos a imprimir
        private List<INTERNO_Informes_Vencimiento_Modelo> VTA_Vencimientos_ObtenerListado_Para_Informes(string _str_Opcion, List<long> _lst_idVencimientos)
        {
            List<INTERNO_Informes_Vencimiento_Modelo> lst_INTERNO_Impresion_Vencimientos_Modelo = null;

            try
            {
                VTA_Vencimientos_Datos obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();

                //VENCIMIENTO_AUX_1
                if (_str_Opcion.Equals(Variables.G_STR_OPCION_VTA_VENCIMIENTO_AUX_1))
                {
                    lst_INTERNO_Impresion_Vencimientos_Modelo = obj_VTA_Vencimientos_Datos.Obtener_Para_Informes_Por_Vencimientos(_lst_idVencimientos);
                }
                //COBRO_AUX_1
                else if (_str_Opcion.Equals(Variables.G_STR_OPCION_VTA_COBRO_AUX_1))
                {
                    lst_INTERNO_Impresion_Vencimientos_Modelo = obj_VTA_Vencimientos_Datos.Obtener_Para_Informes_Por_Cobros(_lst_idVencimientos);
                }

            }
            catch (Control_Errores)
            {

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(Datos_Ventas) + "/" + nameof(VTA_Vencimientos_ObtenerListado_Para_Informes));
            }

            return lst_INTERNO_Impresion_Vencimientos_Modelo;
        }

        private INTERNO_ValorDevuelto_Modelo VTA_Vencimientos_Grabar(VTA_Vencimientos _mdl_VTA_Vencimientos)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                VTA_Vencimientos_Datos obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();
                mdl_INTERNO_ValorDevuelto_Modelo = obj_VTA_Vencimientos_Datos.Grabar(_mdl_VTA_Vencimientos);
            }
            catch (Control_Errores ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.Message;
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.Message;
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Calculos Externos
        private List<INTERNO_CalculoPedidos_Lineas_Modelo> Pedidos_Calculos_Externos(int _int_NumeroLinea,
                                                                        long _lng_idCliente,
                                                                        DateTime _dtt_Fechahora,
                                                                        long _lng_idEmpresa,
                                                                        decimal _dcm_DescuentoGeneral,
                                                                        long _lng_idArticulo,
                                                                        long _lng_idEmbalaje,
                                                                        decimal _dcm_Cantidad_Principal,
                                                                        long _lng_idEmbalajes_Secundario,
                                                                        decimal _dcm_Cantidad_Secundaria,
                                                                        List<string> _lst_Comentarios)
        {
            List<INTERNO_CalculoPedidos_Lineas_Modelo> lst_INTERNO_CalculoPedidos_Lineas_Modelo = new List<INTERNO_CalculoPedidos_Lineas_Modelo>();

            try
            {

                //CONEXION BASE DE DATOS
                Funciones_FicherosXML.CargarDatosXML_ConexionBD();

                //TIPO DE COMPRA VENTA
                GEN_TiposCompraVenta mdl_GEN_TiposCompraVenta_SELECCIONADA = Datos_Generales.GEN_TiposCompraVenta_Obtener_Registro_Por_Defecto(int.Parse(Variables.G_MDL_TIPOCOMPRAVENTA_VENTA.Codigo));


                VentasCompras_Calculos obj_VentasCompras_Calculos = new VentasCompras_Calculos(Variables.G_INT_TIPOCLIENTEPROVEEDOR_CLIENTE_CODIGO,
                                                                                                _lng_idCliente,
                                                                                                _dtt_Fechahora,
                                                                                                _lng_idEmpresa,
                                                                                                _dcm_DescuentoGeneral);


                //Calculos iniciales por cambio de articulo
                obj_VentasCompras_Calculos.Cambio_Articulo(_lng_idArticulo, false, _lng_idEmbalaje, mdl_GEN_TiposCompraVenta_SELECCIONADA.opcion, mdl_GEN_TiposCompraVenta_SELECCIONADA.id);

                //LA CANTIDAD PRINCIPAL ES DIFERENTE A 1
                if (_dcm_Cantidad_Principal > 0 && _dcm_Cantidad_Principal != 1)
                {
                    obj_VentasCompras_Calculos.Cambio_CantidadPrincipal(_dcm_Cantidad_Principal);
                }


                //LA CANTIDAD SECUNDARIA ES DIFERENTE A 1
                if (_dcm_Cantidad_Secundaria > 0 && _dcm_Cantidad_Secundaria != 1)
                {
                    obj_VentasCompras_Calculos.Cambio_CantidadSecundaria(_dcm_Cantidad_Secundaria);
                }

                #region Embalajes
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEMBALAJES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);
                //Obtener valores
                object[] arr_Parametros = { _lng_idEmbalaje };
                //Pasamos los parametros al metodo y lo ejecutamos
                MAE_Embalajes mdl_MAE_Embalajes_PRINCIPAL = (MAE_Embalajes)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);


                //Cargamos el ensamblado
                Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_1 = m_assembly_1.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                //creamos la instancia
                var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEMBALAJES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);
                //Obtener valores
                object[] arr_Parametros_1 = { _lng_idEmbalajes_Secundario };
                //Pasamos los parametros al metodo y lo ejecutamos
                MAE_Embalajes mdl_MAE_Embalajes_SECUNDARIO = (MAE_Embalajes)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                #endregion

                #region LINEA PRINCIPAL
                INTERNO_CalculoPedidos_Lineas_Modelo mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL = new INTERNO_CalculoPedidos_Lineas_Modelo();

                //linea
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.linea = _int_NumeroLinea + 1;

                //lineaPadre
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.lineaPadre = -1;

                //idArticulo
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.idArticulo = obj_VentasCompras_Calculos.PROPIEDAD_Articulo_Id;

                //codigoArticulo
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.codigoArticulo = obj_VentasCompras_Calculos.PROPIEDAD_Articulo_Codigo;

                //descripcionArticulo
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.descripcionArticulo = obj_VentasCompras_Calculos.PROPIEDAD_Articulo_Descripcion;

                //idTipoVenta
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.idTipoVenta = mdl_GEN_TiposCompraVenta_SELECCIONADA.id;

                //tipoVenta
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.tipoVenta = mdl_GEN_TiposCompraVenta_SELECCIONADA.codigo;

                //descripcionTipoVenta
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.descripcionTipoVenta = mdl_GEN_TiposCompraVenta_SELECCIONADA.descripcion;

                //cantidadEmbalajePrincipal
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.cantidadEmbalajePrincipal = obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Principal;

                //idEmbalajePrincipal
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.idEmbalajePrincipal = obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_Id;

                //codigoEmbalajePrincipal
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.codigoEmbalajePrincipal = mdl_MAE_Embalajes_PRINCIPAL.codigo;

                //tipoEmbalajePrincipal
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.tipoEmbalajePrincipal = mdl_MAE_Embalajes_PRINCIPAL.descripcion;

                //cantidadEmbalajeRelacionado
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.cantidadEmbalajeRelacionado = obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Relacional;

                //idEmbalajeRelacionado
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.idEmbalajeRelacionado = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajeRelacionado_Id != null ? obj_VentasCompras_Calculos.PROPIEDAD_EmbalajeRelacionado_Id.Value : -1;

                //codigoEmbalajeRelacionado
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.codigoEmbalajeRelacionado = mdl_MAE_Embalajes_SECUNDARIO != null ? mdl_MAE_Embalajes_SECUNDARIO.codigo : "";

                //tipoEmbalajeRelacionado
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.tipoEmbalajeRelacionado = mdl_MAE_Embalajes_SECUNDARIO != null ? mdl_MAE_Embalajes_SECUNDARIO.descripcion : "";

                //precio
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.precio = obj_VentasCompras_Calculos.PROPIEDAD_Precio;

                //descuento
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.descuento = obj_VentasCompras_Calculos.PROPIEDAD_DescuentoGeneral;

                //importe
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.importe = obj_VentasCompras_Calculos.PROPIEDAD_Importe;

                //idImpuestoTipo
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.idImpuestoTipo = obj_VentasCompras_Calculos.PROPIEDAD_ImpuestoTipo_Id;

                //relacion
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.relacion = obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Principal_Relacion;

                //operacion
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.operacion = obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_Operacion;

                //segundaUnidad_Precio_Cantidad_SegundaUnidad
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.segundaUnidad_Precio_Cantidad_SegundaUnidad = obj_VentasCompras_Calculos.PROPIEDAD_PrecioPor_SegundaUnidad_Entero;

                //segundaUnidad_relacion
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.segundaUnidad_relacion = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajeRelacionado_Relacion;

                //segundaUnidad_cantidad
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.segundaUnidad_cantidad = obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_EsRelacional ? obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Relacional : 0m;

                //idNomenclaturaPrecio
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.idNomenclaturaPrecio = obj_VentasCompras_Calculos.PROPIEDAD_NomenclaturaPrecio_Id;

                //numeroRedondeo
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.numeroRedondeo = obj_VentasCompras_Calculos.PROPIEDAD_NumeroRedondeo;

                //embalajePrincipalDelArticulo_idEmbalaje
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.embalajePrincipalDelArticulo_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_IdEmbalaje;

                //embalajePrincipalDelArticulo_relacion
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.embalajePrincipalDelArticulo_relacion = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_Cantidad_Principal_Relacion;

                //embalajePrincipalDelArticulo_precio
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.embalajePrincipalDelArticulo_precio = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_Precio;

                //embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_PrecioPor_SegundaUnidad_Entero;

                //embalajePrincipalDelArticulo_segundaUnidad_relacion
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.embalajePrincipalDelArticulo_segundaUnidad_relacion = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Relacion;

                //embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje
                mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Id != null ? obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Id.Value : -1;
                #endregion

                #region TARIFAS/PRMOCIONES
                if (obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR != null &&
                    obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR.Count > 0)
                {
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.TarifasPromociones = new List<INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo>();

                    int int_Contador_LineaTarifaPromocion = 1;
                    foreach (INTERNO_TarifaPromocion_VentasCompras_Modelo mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo in obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR)
                    {
                        INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo = new INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo();

                        //lineaTarifaPromocion
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.lineaTarifaPromocion = int_Contador_LineaTarifaPromocion;

                        //idTarifaPromocion
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.idTarifaPromocion = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Id;

                        //codigo
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.codigo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Codigo;

                        //descripcion
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descripcion = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descripcion;

                        //descuento1
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descuento1 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_1 != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_1.Value : 0m;

                        //descuento2
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descuento2 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_2 != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_2.Value : 0m;

                        //descuento3
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descuento3 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_3 != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_3.Value : 0m;

                        //descuento4
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descuento4 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_4 != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_4.Value : 0m;

                        //descuento5
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descuento5 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_5 != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_5.Value : 0m;

                        //incremento
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.incremento = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Incremento != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Incremento.Value : 0m;

                        //numeroRedondeo
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.numeroRedondeo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NumeroRedondeo != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NumeroRedondeo.Value : 0;

                        //tipo
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.tipo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Tipo;

                        //precioFijoDinamico
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.precioFijoDinamico = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_PrecioFijoDinamico != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_PrecioFijoDinamico.Value : 0;

                        //precio
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.precio = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Precio != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Precio.Value : 0m;

                        //idNomenclaturaPrecio
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.idNomenclaturaPrecio = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NomenclaturaPrecio_Id != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NomenclaturaPrecio_Id.Value : -1;

                        //descuentoMoneda
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descuentoMoneda = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_DescuentoMoneda != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_DescuentoMoneda.Value : 0m;

                        //AB_Cantidad_A
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.AB_Cantidad_A = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_A != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_A.Value : 0m;

                        //AB_Cantidad_B
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.AB_Cantidad_B = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_B != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_B.Value : 0m;

                        //AB_Porcentaje
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.AB_Porcentaje = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Porcentaje != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Porcentaje.Value : 0m;

                        //AB_idArticulo
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.AB_idArticulo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_id != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_id.Value : -1;

                        //articuloPromocion
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.articuloPromocion = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_Codigo;

                        //descripcionArticuloPromocion
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descripcionArticuloPromocion = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_Descripcion;

                        //AB_idEmbalaje
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.AB_idEmbalaje = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_id != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_id.Value : -1;

                        //descripcionEmbalajeObsequio
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.descripcionEmbalajeObsequio = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_Descripcion;

                        //AB_Cancelado
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.AB_Cancelado = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cancelado != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cancelado.Value : false;

                        //orden
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.orden = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Orden;

                        //mensaje_Error
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.mensaje_Error = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Mensaje_Error;

                        //desactivado
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.desactivado = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Desactivado != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Desactivado.Value : false;

                        //noAplicarTarifa
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.noAplicarTarifa = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.NoAplicarTarifa != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.NoAplicarTarifa.Value : false;

                        //aplicadaEnLinea
                        mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.aplicadaEnLinea = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.AplicadaEnLinea != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.AplicadaEnLinea.Value : false;

                        #region Condicionantes
                        if (mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes != null &&
                            mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes.Count > 0)
                        {
                            mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.Condicionantes = new List<INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo>();

                            foreach (INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo in mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes)
                            {
                                INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo = new INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo();

                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.cantidad_Desde_Operador = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Operador;
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.cantidad_Desde_Valor = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Valor != null ? mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Valor.Value : 0;
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.cantidad_Hasta_Operador = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Operador;
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.cantidad_Hasta_Valor = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Valor != null ? mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Valor.Value : 0m;
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.condicionante_Y_O = 0;
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.importe_Desde_Operador = "";
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.importe_Desde_Valor = 0;
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.importe_Hasta_Operador = "";
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo.importe_Hasta_Valor = 0;

                                //Añadir al listado e condicionantes
                                mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo.Condicionantes.Add(mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Condicionantes_Modelo);
                            }
                        }
                        #endregion

                        //Añadir al Listado
                        mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.TarifasPromociones.Add(mdl_INTERNO_CalculoPedidos_Lineas_TarifasPromociones_Modelo);

                        int_Contador_LineaTarifaPromocion += 1;
                    }
                }
                #endregion

                #region COMENTARIOS
                if (_lst_Comentarios != null && _lst_Comentarios.Count > 0)
                {
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.Comentarios = new List<INTERNO_CalculoPedidos_Lineas_Comentarios_Modelo>();
                    foreach (string str_Comentario in _lst_Comentarios)
                    {
                        mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL.Comentarios.Add(new INTERNO_CalculoPedidos_Lineas_Comentarios_Modelo(str_Comentario));
                    }
                }
                #endregion

                //AÑADIR AL LISTADO FINAL
                lst_INTERNO_CalculoPedidos_Lineas_Modelo.Add(mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PRINCIPAL);

                #region PROMOCION
                if (obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Existe)
                {
                    #region Embalajes
                    //Cargamos el ensamblado
                    Assembly m_assembly_2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type_2 = m_assembly_2.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                    //creamos la instancia
                    var obj_Clase_2 = Activator.CreateInstance(m_type_2);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo_2 = obj_Clase_2.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEMBALAJES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);
                    //Obtener valores
                    object[] arr_Parametros_2 = { obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Embalaje_Id };
                    //Pasamos los parametros al metodo y lo ejecutamos
                    MAE_Embalajes mdl_MAE_Embalajes_PROMOCION_PRINCIPAL = (MAE_Embalajes)obj_MethodInfo_2.Invoke(obj_Clase_2, arr_Parametros_2);


                    //Cargamos el ensamblado
                    Assembly m_assembly_3 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type_3 = m_assembly_3.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                    //creamos la instancia
                    var obj_Clase_3 = Activator.CreateInstance(m_type_3);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo_3 = obj_Clase_3.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEMBALAJES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);
                    //Obtener valores
                    object[] arr_Parametros_3 = { obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajeRelacionado_Id };
                    //Pasamos los parametros al metodo y lo ejecutamos
                    MAE_Embalajes mdl_MAE_Embalajes_PROMOCION_SECUNDARIO = (MAE_Embalajes)obj_MethodInfo_3.Invoke(obj_Clase_3, arr_Parametros_3);
                    #endregion

                    INTERNO_CalculoPedidos_Lineas_Modelo mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION = new INTERNO_CalculoPedidos_Lineas_Modelo();

                    //linea
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.linea = _int_NumeroLinea + 2;

                    //lineaPadre
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.lineaPadre = _int_NumeroLinea + 1;

                    //idArticulo
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.idArticulo = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Articulo_Id;

                    //codigoArticulo
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.codigoArticulo = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Articulo_Codigo;

                    //descripcionArticulo
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.descripcionArticulo = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Articulo_Descripcion;

                    //idTipoVenta
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.idTipoVenta = mdl_GEN_TiposCompraVenta_SELECCIONADA.id;

                    //tipoVenta
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.tipoVenta = mdl_GEN_TiposCompraVenta_SELECCIONADA.codigo;

                    //descripcionTipoVenta
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.descripcionTipoVenta = mdl_GEN_TiposCompraVenta_SELECCIONADA.descripcion;

                    //cantidadEmbalajePrincipal
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.cantidadEmbalajePrincipal = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Principal;

                    //idEmbalajePrincipal
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.idEmbalajePrincipal = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Embalaje_Id;

                    //codigoEmbalajePrincipal
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.codigoEmbalajePrincipal = mdl_MAE_Embalajes_PROMOCION_PRINCIPAL.codigo;

                    //tipoEmbalajePrincipal
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.tipoEmbalajePrincipal = mdl_MAE_Embalajes_PROMOCION_PRINCIPAL.descripcion;

                    //cantidadEmbalajeRelacionado
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.cantidadEmbalajeRelacionado = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Relacional;

                    //idEmbalajeRelacionado
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.idEmbalajeRelacionado = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajeRelacionado_Id != null ? obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajeRelacionado_Id.Value : -1;

                    //codigoEmbalajeRelacionado
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.codigoEmbalajeRelacionado = mdl_MAE_Embalajes_PROMOCION_SECUNDARIO != null ? mdl_MAE_Embalajes_PROMOCION_SECUNDARIO.codigo : "";

                    //tipoEmbalajeRelacionado
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.tipoEmbalajeRelacionado = mdl_MAE_Embalajes_PROMOCION_SECUNDARIO != null ? mdl_MAE_Embalajes_PROMOCION_SECUNDARIO.descripcion : "";

                    //precio
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.precio = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Precio;

                    //descuento
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.descuento = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_DescuentoGeneral;

                    //importe
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.importe = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Importe;

                    //idImpuestoTipo
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.idImpuestoTipo = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_ImpuestoTipo_Id;

                    //relacion
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.relacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Principal_Relacion;

                    //operacion
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.operacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Embalaje_Operacion;

                    //segundaUnidad_Precio_Cantidad_SegundaUnidad
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.segundaUnidad_Precio_Cantidad_SegundaUnidad = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_PrecioPor_SegundaUnidad_Entero;

                    //segundaUnidad_relacion
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.segundaUnidad_relacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajeRelacionado_Relacion;

                    //segundaUnidad_cantidad
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.segundaUnidad_cantidad = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Embalaje_EsRelacional ? obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Relacional : 0m;

                    //idNomenclaturaPrecio
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.idNomenclaturaPrecio = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_NomenclaturaPrecio_Id;

                    //numeroRedondeo
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.numeroRedondeo = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_NumeroRedondeo;

                    //embalajePrincipalDelArticulo_idEmbalaje
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.embalajePrincipalDelArticulo_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_IdEmbalaje;

                    //embalajePrincipalDelArticulo_relacion
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.embalajePrincipalDelArticulo_relacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_Cantidad_Principal_Relacion;

                    //embalajePrincipalDelArticulo_precio
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.embalajePrincipalDelArticulo_precio = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_Precio;

                    //embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_PrecioPor_SegundaUnidad_Entero;

                    //embalajePrincipalDelArticulo_segundaUnidad_relacion
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.embalajePrincipalDelArticulo_segundaUnidad_relacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Relacion;

                    //embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje
                    mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION.embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Id != null ? obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Id.Value : -1;

                    //AÑADIR AL LISTADO FINAL
                    lst_INTERNO_CalculoPedidos_Lineas_Modelo.Add(mdl_INTERNO_CalculoPedidos_Lineas_Modelo_PROMOCION);
                }
                #endregion

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(Pedidos_Calculos_Externos) + "/" + nameof(Pedidos_Calculos_Externos));
                lst_INTERNO_CalculoPedidos_Lineas_Modelo = null;
            }

            return lst_INTERNO_CalculoPedidos_Lineas_Modelo;
        }

        private INTERNO_CalculoResumenPedidos_Modelo Pedidos_CalculosResumen_Externos(long _lng_idCliente,
                                                                                            DateTime _dtt_Fechahora,
                                                                                            long _lng_idEmpresa,
                                                                                            long _lng_idImpuestoCabecera,
                                                                                            decimal _dcm_DescuentoProntoPago,
                                                                                            decimal _dcm_DescuentoFinalFactura,
                                                                                            decimal _dcm_DescuentoFinalAlbaran,
                                                                                            bool _bol_RecargoEquivalencia,
                                                                                            dynamic lst_Lineas)
        {
            INTERNO_CalculoResumenPedidos_Modelo mdl_INTERNO_CalculoResumenPedidos_Modelo = null;

            try
            {
                //Convertir el listado en el modelo
                List<INTERNO_VentasCompras_Calculo_Lineas_Modelo> lst_INTERNO_VentasCompras_Calculo_Lineas_Modelo_CONVERTIDO = new List<INTERNO_VentasCompras_Calculo_Lineas_Modelo>();
                if (lst_Lineas != null && lst_Lineas.Count > 0)
                {
                    foreach (dynamic dnm_Linea in lst_Lineas)
                    {
                        lst_INTERNO_VentasCompras_Calculo_Lineas_Modelo_CONVERTIDO.Add(new INTERNO_VentasCompras_Calculo_Lineas_Modelo(dnm_Linea.IdArticulo, dnm_Linea.IdArticuloComodin, dnm_Linea.EsArticuloComodin, dnm_Linea.IdImpuestoTipo, dnm_Linea.Importe));
                    }
                }


                //Instanciar la clase de Calculos
                VentasCompras_Impuestos_Calculos obj_VentasCompras_Impuestos_Calculos = new VentasCompras_Impuestos_Calculos(Variables.G_INT_TIPOCLIENTEPROVEEDOR_CLIENTE_CODIGO,
                                                                                                                              _lng_idCliente,
                                                                                                                              _dtt_Fechahora,
                                                                                                                              _lng_idEmpresa);
                //Obtener ImpuestosCabecera
                GEN_ImpuestosCabecera mdl_GEN_ImpuestosCabecera = Datos_Generales.GEN_ImpuestosCabecera_Obtener_Modelo_Por_Id(_lng_idImpuestoCabecera);

                //Obtener los ImpuestosTipos
                List<INTERNO_GEN_ImpuestosTipos_Listado_Modelo> lst_INTERNO_GEN_ImpuestosTipos_Listado_Modelo = Datos_Generales.GEN_ImpuestosTipos_Obtener_Listado();

                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES = obj_VentasCompras_Impuestos_Calculos.Calcular_ImportesImpuestos(mdl_GEN_ImpuestosCabecera,
                                                                                                                                                                                 lst_INTERNO_GEN_ImpuestosTipos_Listado_Modelo,
                                                                                                                                                                                 _dcm_DescuentoProntoPago,
                                                                                                                                                                                 _dcm_DescuentoFinalFactura,
                                                                                                                                                                                 _dcm_DescuentoFinalAlbaran,
                                                                                                                                                                                 lst_INTERNO_VentasCompras_Calculo_Lineas_Modelo_CONVERTIDO,
                                                                                                                                                                                 null,
                                                                                                                                                                                 _bol_RecargoEquivalencia);

                if (mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES.TodoCorrecto)
                {
                    List<INTERNO_ImportesImpuestos_Modelo> lst_INTERNO_ImportesImpuestos_Modelo = (List<INTERNO_ImportesImpuestos_Modelo>)mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES.Objeto;
                    INTERNO_ImportesImpuestos_Modelo mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES = (INTERNO_ImportesImpuestos_Modelo)mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES.Objeto_Auxiliar_1;

                    if (mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null)
                    {
                        mdl_INTERNO_CalculoResumenPedidos_Modelo = new INTERNO_CalculoResumenPedidos_Modelo();

                        mdl_INTERNO_CalculoResumenPedidos_Modelo.dtoFinAlbaran = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoAlbaranFinal_Calculado;
                        mdl_INTERNO_CalculoResumenPedidos_Modelo.dtoFinFactura = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoFacturaFinal_Calculado;
                        mdl_INTERNO_CalculoResumenPedidos_Modelo.dtoPPago = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoProntoPago_Calculado;
                        mdl_INTERNO_CalculoResumenPedidos_Modelo.totalBruto = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Bruto;
                        mdl_INTERNO_CalculoResumenPedidos_Modelo.totalDescuentos = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoAlbaranFinal_Calculado + mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoProntoPago_Calculado + mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoFacturaFinal_Calculado;
                        mdl_INTERNO_CalculoResumenPedidos_Modelo.totalBaseImponible = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.BaseImponible;
                        mdl_INTERNO_CalculoResumenPedidos_Modelo.totalImpuesto = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Impuesto_Calculado;
                        mdl_INTERNO_CalculoResumenPedidos_Modelo.totalRecargo = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Recargo_Calculado;
                        mdl_INTERNO_CalculoResumenPedidos_Modelo.totalPedido = mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Total_Final;

                        if (lst_INTERNO_ImportesImpuestos_Modelo != null && lst_INTERNO_ImportesImpuestos_Modelo.Count > 0)
                        {
                            mdl_INTERNO_CalculoResumenPedidos_Modelo.Impuestos = new List<INTERNO_CalculoResumenPedidos_Impuestos_Modelo>();

                            int int_ContadosLinea_Impuesto = 1;
                            foreach (INTERNO_ImportesImpuestos_Modelo mdl_INTERNO_ImportesImpuestos_Modelo in lst_INTERNO_ImportesImpuestos_Modelo)
                            {
                                INTERNO_CalculoResumenPedidos_Impuestos_Modelo mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo = new INTERNO_CalculoResumenPedidos_Impuestos_Modelo();

                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.linea = int_ContadosLinea_Impuesto;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.idImpuestoTipo = mdl_INTERNO_ImportesImpuestos_Modelo.IdImpuestoTipo != null ? mdl_INTERNO_ImportesImpuestos_Modelo.IdImpuestoTipo.Value : -1;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.idImpuestoLinea = mdl_INTERNO_ImportesImpuestos_Modelo.IdImpuestoLinea != null ? mdl_INTERNO_ImportesImpuestos_Modelo.IdImpuestoLinea.Value : -1;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.descripcionImpuesto = mdl_INTERNO_ImportesImpuestos_Modelo.ImpuestoTipo;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.porcentajeImpuesto = mdl_INTERNO_ImportesImpuestos_Modelo.Impuesto_Porcentaje != null ? mdl_INTERNO_ImportesImpuestos_Modelo.Impuesto_Porcentaje.Value : 0m;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.porcentajeRecargo = mdl_INTERNO_ImportesImpuestos_Modelo.Recargo_Porcentaje != null ? mdl_INTERNO_ImportesImpuestos_Modelo.Recargo_Porcentaje.Value : 0m;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.bruto = mdl_INTERNO_ImportesImpuestos_Modelo.Bruto;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.impDtoFinAlbaran = mdl_INTERNO_ImportesImpuestos_Modelo.DescuentoAlbaranFinal_Calculado;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.impDtoFinFactura = mdl_INTERNO_ImportesImpuestos_Modelo.DescuentoFacturaFinal_Calculado;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.impDtoPPago = mdl_INTERNO_ImportesImpuestos_Modelo.DescuentoProntoPago_Calculado;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.baseImponible = mdl_INTERNO_ImportesImpuestos_Modelo.BaseImponible;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.impImpuesto = mdl_INTERNO_ImportesImpuestos_Modelo.Impuesto_Calculado;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.impRecargo = mdl_INTERNO_ImportesImpuestos_Modelo.Recargo_Calculado;
                                mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo.impTotal = mdl_INTERNO_ImportesImpuestos_Modelo.Total_Final;

                                //Añadir al listado
                                mdl_INTERNO_CalculoResumenPedidos_Modelo.Impuestos.Add(mdl_INTERNO_CalculoResumenPedidos_Impuestos_Modelo);

                                int_ContadosLinea_Impuesto += 1;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(Pedidos_Calculos_Externos) + "/" + nameof(Pedidos_CalculosResumen_Externos));
                mdl_INTERNO_CalculoResumenPedidos_Modelo = null;
            }

            return mdl_INTERNO_CalculoResumenPedidos_Modelo;
        }

        #endregion

        #region MAE_Clientes_ObtenerInformeVentas
        private INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos VTA_PresupuestosCabecera_ObtenerInformeVentas(DateTime? dtt_desdeFecha1, DateTime? dtt_hastaFecha1, DateTime? dtt_desdeFecha2, DateTime? dtt_hastaFecha2)
        {
            INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos;
            try
            {
                VTA_PresupuestosCabecera_Datos obj_VTA_PresupuestosCabecera_Datos = new VTA_PresupuestosCabecera_Datos();

                mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos = obj_VTA_PresupuestosCabecera_Datos.Obtener_Informe_Ventas(dtt_desdeFecha1, dtt_hastaFecha1, dtt_desdeFecha2, dtt_hastaFecha2);

            }
            catch (Control_Errores)
            {
                mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos = null;
            }
            catch (Exception)
            {
                mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos = null;
            }

            return mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos;
        }
        #endregion MAE_Clientes_ObtenerInformeVentas

        #region MAE_Clientes_ObtenerInformeTransacciones
        private INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos VTA_PresupuestosCabecera_ObtenerInformeTransacciones(DateTime? dtt_desdeFecha1, DateTime? dtt_hastaFecha1, DateTime? dtt_desdeFecha2, DateTime? dtt_hastaFecha2)
        {
            INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos;
            try
            {
                VTA_PresupuestosCabecera_Datos obj_VTA_PresupuestosCabecera_Datos = new VTA_PresupuestosCabecera_Datos();

                mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos = obj_VTA_PresupuestosCabecera_Datos.Obtener_Informe_Transacciones(dtt_desdeFecha1, dtt_hastaFecha1, dtt_desdeFecha2, dtt_hastaFecha2);

            }
            catch (Control_Errores)
            {
                mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos = null;
            }
            catch (Exception)
            {
                mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos = null;
            }

            return mdl_INTERNO_VTA_PresupuestosCabecera_InformeEntreRangos;
        }
        #endregion MAE_Clientes_ObtenerInformeTransacciones
    }
}
