using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Informes;
using Exferia_EntityFramework;
using Exferia_Informes.Informes.PorClientes.MarcosMobiliario;
using Microsoft.Reporting.WinForms;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exferia_Informes.Informes.Mandatos
{
    public class Rellenar_DataSet_MarcosMobiliario
    {
        public static void Rellenar_Albaran(ReportDataSourceCollection _obj_ReportDataSourceCollection,INTERNO_Informes_Ventas_Albaran _mdl_INTERNO_Informes_Ventas_Albaran)
        {
            try
            {
                DataSet dts_Albaran = new DS_MarcosMobiliario_Albaran();

                //Datos Imagenes
                byte[] logo = _mdl_INTERNO_Informes_Ventas_Albaran.Logo_Superior_Izquierda;
                dts_Albaran.Tables["Imagenes"].Rows.Add(logo);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Imagenes", dts_Albaran.Tables["Imagenes"]));

                //Datos TextoFinal
                dts_Albaran.Tables["textoFinal"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Albaran.TextoFinal != null ? _mdl_INTERNO_Informes_Ventas_Albaran.TextoFinal:"");
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_textoFinal", dts_Albaran.Tables["textoFinal"]));

                //Datos Empresa
                dts_Albaran.Tables["Empresa"].Rows.Add((_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.nombreComercial != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.nombreComercial.ToUpper(): ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.razonSocial != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.razonSocial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.nombreVia != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.nombreVia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.poblacion != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.poblacion.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.municipio != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.municipio.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.provincia != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.provincia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.pais != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.pais.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.codigoPostal != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.codigoPostal : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.cif != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.cif.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.telefono != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.telefono : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.fax != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.fax : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Empresa.email != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Empresa.email : ""));
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Empresa", dts_Albaran.Tables["Empresa"]));

                // Datos Cliente
                dts_Albaran.Tables["cliente"].Rows.Add((_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.nombreComercial != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.nombreComercial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.razonSocial != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.razonSocial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.nombreVia != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.nombreVia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.poblacion != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.poblacion.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.municipio != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.municipio.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.provincia != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.provincia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.pais != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.pais.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.codigoPostal != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.codigoPostal : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.cif != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.cif.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.telefono != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.telefono : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Albaran.Cliente.codigo != null ? _mdl_INTERNO_Informes_Ventas_Albaran.Cliente.codigo : "") );
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Cliente", dts_Albaran.Tables["cliente"]));

                // Datos AlbaranCabecera
                dts_Albaran.Tables["albaranCabecera"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Albaran.numero,
                                                                _mdl_INTERNO_Informes_Ventas_Albaran.fecha,
                                                                _mdl_INTERNO_Informes_Ventas_Albaran.vendedorCodigo,
                                                                _mdl_INTERNO_Informes_Ventas_Albaran.vendedorDescripcion,
                                                                (_mdl_INTERNO_Informes_Ventas_Albaran.formaPago != null ? _mdl_INTERNO_Informes_Ventas_Albaran.formaPago.ToUpper() : ""),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Albaran.total,2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Albaran.totalBruto, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Albaran.totalBaseImponible, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Albaran.totalImpuesto, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Albaran.totalRecargo, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Albaran.totalDescuentoFinalAlbaran, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Albaran.descuentoFinalAlbaran, 2),
                                                                _mdl_INTERNO_Informes_Ventas_Albaran.delegacionCodigo,
                                                                _mdl_INTERNO_Informes_Ventas_Albaran.tipoTitulo);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_AlbaranCabecera", dts_Albaran.Tables["albaranCabecera"]));


                // Datos AlbaranLineas
                if (_mdl_INTERNO_Informes_Ventas_Albaran.Lineas!=null && _mdl_INTERNO_Informes_Ventas_Albaran.Lineas.Count>0)
                {
                    foreach (INTERNO_Informes_Ventas_AlbaranLinea mdl_INTERNO_Informes_Ventas_AlbaranLinea in _mdl_INTERNO_Informes_Ventas_Albaran.Lineas)
                    {
                        dts_Albaran.Tables["albaranLineas"].Rows.Add(mdl_INTERNO_Informes_Ventas_AlbaranLinea.articuloCodigo,
                                                                     (mdl_INTERNO_Informes_Ventas_AlbaranLinea.articuloDescripcion != null ? mdl_INTERNO_Informes_Ventas_AlbaranLinea.articuloDescripcion.ToUpper() : ""),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_AlbaranLinea.cantidad,2),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_AlbaranLinea.precio, 3),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_AlbaranLinea.descuento, 2),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_AlbaranLinea.importe, 2));
                    }
                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_AlbaranLineas", dts_Albaran.Tables["albaranLineas"]));


                // Datos AlbaranResumen
                if (_mdl_INTERNO_Informes_Ventas_Albaran.Resumen != null && _mdl_INTERNO_Informes_Ventas_Albaran.Resumen.Count > 0)
                {
                    #region Variables 
                    decimal bruto_1 = 0m;
                    decimal descuentoFinalAlbaran_1 = 0m;
                    decimal baseImponible_1 = 0m;
                    decimal impuestoPorcentaje_1 = 0m;
                    decimal impuestoValor_1 = 0m;
                    decimal recargoPorcentaje_1 = 0m;
                    decimal recargoValor_1 = 0m;
                    decimal total_1 = 0m;

                    decimal bruto_2 = 0m;
                    decimal descuentoFinalAlbaran_2 = 0m;
                    decimal baseImponible_2 = 0m;
                    decimal impuestoPorcentaje_2 = 0m;
                    decimal impuestoValor_2 = 0m;
                    decimal recargoPorcentaje_2 = 0m;
                    decimal recargoValor_2 = 0m;
                    decimal total_2 = 0m;

                    decimal bruto_3 = 0m;
                    decimal descuentoFinalAlbaran_3 = 0m;
                    decimal baseImponible_3 = 0m;
                    decimal impuestoPorcentaje_3 = 0m;
                    decimal impuestoValor_3 = 0m;
                    decimal recargoPorcentaje_3 = 0m;
                    decimal recargoValor_3 = 0m;
                    decimal total_3 = 0m;

                    decimal bruto_4 = 0m;
                    decimal descuentoFinalAlbaran_4 = 0m;
                    decimal baseImponible_4 = 0m;
                    decimal impuestoPorcentaje_4 = 0m;
                    decimal impuestoValor_4 = 0m;
                    decimal recargoPorcentaje_4 = 0m;
                    decimal recargoValor_4 = 0m;
                    decimal total_4 = 0m;

                    decimal bruto_5 = 0m;
                    decimal descuentoFinalAlbaran_5 = 0m;
                    decimal baseImponible_5 = 0m;
                    decimal impuestoPorcentaje_5 = 0m;
                    decimal impuestoValor_5 = 0m;
                    decimal recargoPorcentaje_5 = 0m;
                    decimal recargoValor_5 = 0m;
                    decimal total_5 = 0m;
                    #endregion

                    int int_Contador = 1;
                    foreach (INTERNO_Informes_Ventas_AlbaranResumen mdl_INTERNO_Informes_Ventas_AlbaranResumen in _mdl_INTERNO_Informes_Ventas_Albaran.Resumen)
                    {
                        if (mdl_INTERNO_Informes_Ventas_AlbaranResumen.bruto>0)
                        {
                            if (int_Contador==1)
                            {
                                bruto_1 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.bruto;
                                descuentoFinalAlbaran_1 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.descuentoFinalAlbaran;
                                baseImponible_1 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.baseImponible;
                                impuestoPorcentaje_1 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoPorcentaje;
                                impuestoValor_1 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoValor;
                                recargoPorcentaje_1 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoPorcentaje;
                                recargoValor_1 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoValor;
                                total_1 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 2)
                            {
                                bruto_2 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.bruto;
                                descuentoFinalAlbaran_2 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.descuentoFinalAlbaran;
                                baseImponible_2 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.baseImponible;
                                impuestoPorcentaje_2 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoPorcentaje;
                                impuestoValor_2 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoValor;
                                recargoPorcentaje_2 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoPorcentaje;
                                recargoValor_2 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoValor;
                                total_2 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 3)
                            {
                                bruto_3 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.bruto;
                                descuentoFinalAlbaran_3 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.descuentoFinalAlbaran;
                                baseImponible_3 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.baseImponible;
                                impuestoPorcentaje_3 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoPorcentaje;
                                impuestoValor_3 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoValor;
                                recargoPorcentaje_3 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoPorcentaje;
                                recargoValor_3 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoValor;
                                total_3 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 4)
                            {
                                bruto_4 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.bruto;
                                descuentoFinalAlbaran_4 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.descuentoFinalAlbaran;
                                baseImponible_4 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.baseImponible;
                                impuestoPorcentaje_4 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoPorcentaje;
                                impuestoValor_4 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoValor;
                                recargoPorcentaje_4 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoPorcentaje;
                                recargoValor_4 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoValor;
                                total_4 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 5)
                            {
                                bruto_5 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.bruto;
                                descuentoFinalAlbaran_5 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.descuentoFinalAlbaran;
                                baseImponible_5 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.baseImponible;
                                impuestoPorcentaje_5 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoPorcentaje;
                                impuestoValor_5 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoValor;
                                recargoPorcentaje_5 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoPorcentaje;
                                recargoValor_5 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoValor;
                                total_5 = mdl_INTERNO_Informes_Ventas_AlbaranResumen.total;

                                int_Contador += 1;
                            }

                        }
                    }


                    dts_Albaran.Tables["albaranResumen"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Albaran.Resumen.FirstOrDefault().impuestoDescripcion,
                                                                    //1
                                                                    Funciones.RedondearDecimal(bruto_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_1, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_1, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_1, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_1, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_1, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_1, 2),
                                                                    Funciones.RedondearDecimal(total_1, 2),
                                                                    //2
                                                                    Funciones.RedondearDecimal(bruto_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_2, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_2, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_2, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_2, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_2, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_2, 2),
                                                                    Funciones.RedondearDecimal(total_2, 2),
                                                                    //3
                                                                    Funciones.RedondearDecimal(bruto_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_3, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_3, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_3, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_3, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_3, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_3, 2),
                                                                    Funciones.RedondearDecimal(total_3, 2),
                                                                    //4
                                                                    Funciones.RedondearDecimal(bruto_4, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_4, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_4, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_4, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_4, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_4, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_4, 2),
                                                                    Funciones.RedondearDecimal(total_4, 2),
                                                                    //5
                                                                    Funciones.RedondearDecimal(bruto_5,2), 
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_5, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_5, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_5, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_5, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_5, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_5, 2),
                                                                    Funciones.RedondearDecimal(total_5, 2));

                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_AlbaranResumen", dts_Albaran.Tables["albaranResumen"]));


            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(Rellenar_DataSet_MarcosMobiliario) + "/" + nameof(Rellenar_Albaran), true);
            }
        }

        public static void Rellenar_Factura(ReportDataSourceCollection _obj_ReportDataSourceCollection, INTERNO_Informes_Ventas_Factura _mdl_INTERNO_Informes_Ventas_Factura)
        {
            try
            {
                DataSet dts_Factura = new DS_MarcosMobiliario_Factura();

                //Datos Imagenes
                byte[] logo = _mdl_INTERNO_Informes_Ventas_Factura.Logo_Superior_Izquierda;
                dts_Factura.Tables["Imagenes"].Rows.Add(logo);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Imagenes", dts_Factura.Tables["Imagenes"]));

                //Datos TextoFinal
                dts_Factura.Tables["textoFinal"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Factura.TextoFinal != null ? _mdl_INTERNO_Informes_Ventas_Factura.TextoFinal : "");
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_textoFinal", dts_Factura.Tables["textoFinal"]));

                //Datos Empresa
                dts_Factura.Tables["Empresa"].Rows.Add((_mdl_INTERNO_Informes_Ventas_Factura.Empresa.nombreComercial != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.nombreComercial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.razonSocial != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.razonSocial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.nombreVia != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.nombreVia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.poblacion != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.poblacion.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.municipio != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.municipio.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.provincia != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.provincia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.pais != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.pais.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.codigoPostal != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.codigoPostal : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.cif != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.cif.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.telefono != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.telefono : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.fax != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.fax : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Empresa.email != null ? _mdl_INTERNO_Informes_Ventas_Factura.Empresa.email : ""));
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Empresa", dts_Factura.Tables["Empresa"]));

                // Datos Cliente
                dts_Factura.Tables["cliente"].Rows.Add((_mdl_INTERNO_Informes_Ventas_Factura.Cliente.nombreComercial != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.nombreComercial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.razonSocial != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.razonSocial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.nombreVia != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.nombreVia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.poblacion != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.poblacion.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.municipio != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.municipio.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.provincia != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.provincia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.pais != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.pais.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.codigoPostal != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.codigoPostal : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.cif != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.cif.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.telefono != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.telefono : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.codigo != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.codigo : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Factura.Cliente.iban != null ? _mdl_INTERNO_Informes_Ventas_Factura.Cliente.iban : ""));
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Cliente", dts_Factura.Tables["cliente"]));

                // Datos FacturaCabecera
                dts_Factura.Tables["facturaCabecera"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Factura.numero,
                                                                _mdl_INTERNO_Informes_Ventas_Factura.fecha,
                                                                _mdl_INTERNO_Informes_Ventas_Factura.vendedorCodigo,
                                                                _mdl_INTERNO_Informes_Ventas_Factura.vendedorDescripcion,
                                                                (_mdl_INTERNO_Informes_Ventas_Factura.formaPago != null ? _mdl_INTERNO_Informes_Ventas_Factura.formaPago.ToUpper() : ""),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.total, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.totalBruto, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.totalBaseImponible, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.totalImpuesto, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.totalRecargo, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.totalDescuentoFinalFactura, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.descuentoFinalFactura, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.totalDescuentoProntoPago, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Factura.descuentoProntoPago, 2),
                                                                _mdl_INTERNO_Informes_Ventas_Factura.delegacionCodigo,
                                                                _mdl_INTERNO_Informes_Ventas_Factura.tipoTitulo);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_FacturaCabecera", dts_Factura.Tables["facturaCabecera"]));


                // Datos FacturaLineas
                if (_mdl_INTERNO_Informes_Ventas_Factura.Lineas != null && _mdl_INTERNO_Informes_Ventas_Factura.Lineas.Count > 0)
                {
                    foreach (INTERNO_Informes_Ventas_FacturaLinea mdl_INTERNO_Informes_Ventas_FacturaLinea in _mdl_INTERNO_Informes_Ventas_Factura.Lineas)
                    {
                        dts_Factura.Tables["facturaLineas"].Rows.Add(mdl_INTERNO_Informes_Ventas_FacturaLinea.articuloCodigo,
                                                                     (mdl_INTERNO_Informes_Ventas_FacturaLinea.articuloDescripcion != null ? mdl_INTERNO_Informes_Ventas_FacturaLinea.articuloDescripcion.ToUpper() : ""),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_FacturaLinea.cantidad, 2),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_FacturaLinea.precio, 3),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_FacturaLinea.descuento, 2),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_FacturaLinea.importe, 2));
                    }
                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_FacturaLineas", dts_Factura.Tables["facturaLineas"]));


                // Datos FacturaResumen
                if (_mdl_INTERNO_Informes_Ventas_Factura.Resumen != null && _mdl_INTERNO_Informes_Ventas_Factura.Resumen.Count > 0)
                {
                    #region Variables 
                    decimal bruto_1 = 0m;
                    decimal descuentoProntoPago_1 = 0m;
                    decimal descuentoFinalFactura_1 = 0m;
                    decimal baseImponible_1 = 0m;
                    decimal impuestoPorcentaje_1 = 0m;
                    decimal impuestoValor_1 = 0m;
                    decimal recargoPorcentaje_1 = 0m;
                    decimal recargoValor_1 = 0m;
                    decimal total_1 = 0m;

                    decimal bruto_2 = 0m;
                    decimal descuentoProntoPago_2 = 0m;
                    decimal descuentoFinalFactura_2 = 0m;
                    decimal baseImponible_2 = 0m;
                    decimal impuestoPorcentaje_2 = 0m;
                    decimal impuestoValor_2 = 0m;
                    decimal recargoPorcentaje_2 = 0m;
                    decimal recargoValor_2 = 0m;
                    decimal total_2 = 0m;

                    decimal bruto_3 = 0m;
                    decimal descuentoProntoPago_3 = 0m;
                    decimal descuentoFinalFactura_3 = 0m;
                    decimal baseImponible_3 = 0m;
                    decimal impuestoPorcentaje_3 = 0m;
                    decimal impuestoValor_3 = 0m;
                    decimal recargoPorcentaje_3 = 0m;
                    decimal recargoValor_3 = 0m;
                    decimal total_3 = 0m;

                    decimal bruto_4 = 0m;
                    decimal descuentoProntoPago_4 = 0m;
                    decimal descuentoFinalFactura_4 = 0m;
                    decimal baseImponible_4 = 0m;
                    decimal impuestoPorcentaje_4 = 0m;
                    decimal impuestoValor_4 = 0m;
                    decimal recargoPorcentaje_4 = 0m;
                    decimal recargoValor_4 = 0m;
                    decimal total_4 = 0m;

                    decimal bruto_5 = 0m;
                    decimal descuentoProntoPago_5 = 0m;
                    decimal descuentoFinalFactura_5 = 0m;
                    decimal baseImponible_5 = 0m;
                    decimal impuestoPorcentaje_5 = 0m;
                    decimal impuestoValor_5 = 0m;
                    decimal recargoPorcentaje_5 = 0m;
                    decimal recargoValor_5 = 0m;
                    decimal total_5 = 0m;
                    #endregion

                    int int_Contador = 1;
                    foreach (INTERNO_Informes_Ventas_FacturaResumen mdl_INTERNO_Informes_Ventas_FacturaResumen in _mdl_INTERNO_Informes_Ventas_Factura.Resumen)
                    {
                        if (mdl_INTERNO_Informes_Ventas_FacturaResumen.bruto > 0)
                        {
                            if (int_Contador == 1)
                            {
                                bruto_1 = mdl_INTERNO_Informes_Ventas_FacturaResumen.bruto;
                                descuentoFinalFactura_1 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoFinalFactura;
                                descuentoProntoPago_1= mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoProntoPago;
                                baseImponible_1 = mdl_INTERNO_Informes_Ventas_FacturaResumen.baseImponible;
                                impuestoPorcentaje_1 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoPorcentaje;
                                impuestoValor_1 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoValor;
                                recargoPorcentaje_1 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoPorcentaje;
                                recargoValor_1 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoValor;
                                total_1 = mdl_INTERNO_Informes_Ventas_FacturaResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 2)
                            {
                                bruto_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.bruto;
                                descuentoFinalFactura_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoFinalFactura;
                                descuentoProntoPago_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoProntoPago;
                                baseImponible_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.baseImponible;
                                impuestoPorcentaje_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoPorcentaje;
                                impuestoValor_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoValor;
                                recargoPorcentaje_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoPorcentaje;
                                recargoValor_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoValor;
                                total_2 = mdl_INTERNO_Informes_Ventas_FacturaResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 3)
                            {
                                bruto_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.bruto;
                                descuentoFinalFactura_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoFinalFactura;
                                descuentoProntoPago_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoProntoPago;
                                baseImponible_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.baseImponible;
                                impuestoPorcentaje_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoPorcentaje;
                                impuestoValor_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoValor;
                                recargoPorcentaje_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoPorcentaje;
                                recargoValor_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoValor;
                                total_3 = mdl_INTERNO_Informes_Ventas_FacturaResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 4)
                            {
                                bruto_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.bruto;
                                descuentoFinalFactura_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoFinalFactura;
                                descuentoProntoPago_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoProntoPago;
                                baseImponible_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.baseImponible;
                                impuestoPorcentaje_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoPorcentaje;
                                impuestoValor_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoValor;
                                recargoPorcentaje_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoPorcentaje;
                                recargoValor_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoValor;
                                total_4 = mdl_INTERNO_Informes_Ventas_FacturaResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 5)
                            {
                                bruto_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.bruto;
                                descuentoFinalFactura_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoFinalFactura;
                                descuentoProntoPago_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.descuentoProntoPago;
                                baseImponible_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.baseImponible;
                                impuestoPorcentaje_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoPorcentaje;
                                impuestoValor_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.impuestoValor;
                                recargoPorcentaje_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoPorcentaje;
                                recargoValor_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.recargoValor;
                                total_5 = mdl_INTERNO_Informes_Ventas_FacturaResumen.total;

                                int_Contador += 1;
                            }

                        }
                    }


                    dts_Factura.Tables["facturaResumen"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Factura.Resumen.FirstOrDefault().impuestoDescripcion,
                                                                    //1
                                                                    Funciones.RedondearDecimal(bruto_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_1, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_1, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_1, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_1, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_1, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_1, 2),
                                                                    Funciones.RedondearDecimal(total_1, 2),
                                                                    //2
                                                                    Funciones.RedondearDecimal(bruto_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_2, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_2, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_2, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_2, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_2, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_2, 2),
                                                                    Funciones.RedondearDecimal(total_2, 2),
                                                                    //3
                                                                    Funciones.RedondearDecimal(bruto_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_3, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_3, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_3, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_3, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_3, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_3, 2),
                                                                    Funciones.RedondearDecimal(total_3, 2),
                                                                    //4
                                                                    Funciones.RedondearDecimal(bruto_4, 2),
                                                                   Funciones.RedondearDecimal(descuentoProntoPago_4, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_4, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_4, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_4, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_4, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_4, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_4, 2),
                                                                    Funciones.RedondearDecimal(total_4, 2),
                                                                    //5
                                                                    Funciones.RedondearDecimal(bruto_5, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_5, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_5, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_5, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_5, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_5, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_5, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_5, 2),
                                                                    Funciones.RedondearDecimal(total_5, 2));

                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_FacturaResumen", dts_Factura.Tables["facturaResumen"]));


            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(Rellenar_DataSet_MarcosMobiliario) + "/" + nameof(Rellenar_Factura), true);
            }
        }

        public static void Rellenar_Pedido(ReportDataSourceCollection _obj_ReportDataSourceCollection, INTERNO_Informes_Ventas_Pedido _mdl_INTERNO_Informes_Ventas_Pedido)
        {
            try
            {
                DataSet dts_Pedido = new DS_MarcosMobiliario_Pedido();

                //Datos Imagenes
                byte[] logo = _mdl_INTERNO_Informes_Ventas_Pedido.Logo_Superior_Izquierda;
                dts_Pedido.Tables["Imagenes"].Rows.Add(logo);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Imagenes", dts_Pedido.Tables["Imagenes"]));

                //Datos Empresa
                dts_Pedido.Tables["Empresa"].Rows.Add((_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.nombreComercial != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.nombreComercial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.razonSocial != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.razonSocial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.nombreVia != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.nombreVia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.poblacion != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.poblacion.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.municipio != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.municipio.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.provincia != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.provincia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.pais != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.pais.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.codigoPostal != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.codigoPostal : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.cif != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.cif.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.telefono != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.telefono : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.fax != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.fax : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Empresa.email != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Empresa.email : ""));
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Empresa", dts_Pedido.Tables["Empresa"]));

                // Datos Cliente
                dts_Pedido.Tables["cliente"].Rows.Add((_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.nombreComercial != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.nombreComercial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.razonSocial != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.razonSocial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.nombreVia != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.nombreVia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.poblacion != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.poblacion.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.municipio != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.municipio.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.provincia != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.provincia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.pais != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.pais.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.codigoPostal != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.codigoPostal : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.cif != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.cif.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.telefono != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.telefono : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Pedido.Cliente.codigo != null ? _mdl_INTERNO_Informes_Ventas_Pedido.Cliente.codigo : ""));
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Cliente", dts_Pedido.Tables["cliente"]));

                // Datos FacturaCabecera
                dts_Pedido.Tables["pedidoCabecera"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Pedido.numero,
                                                                _mdl_INTERNO_Informes_Ventas_Pedido.fecha,
                                                                _mdl_INTERNO_Informes_Ventas_Pedido.vendedorCodigo,
                                                                _mdl_INTERNO_Informes_Ventas_Pedido.vendedorDescripcion,
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.total, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.totalBruto, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.totalBaseImponible, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.totalImpuesto, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.totalRecargo, 2),
                                                                 Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.totalDescuentoFinalAlbaran, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.descuentoFinalAlbaran, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.totalDescuentoFinalFactura, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.descuentoFinalFactura, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.totalDescuentoProntoPago, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Pedido.descuentoProntoPago, 2),
                                                                _mdl_INTERNO_Informes_Ventas_Pedido.delegacionCodigo,
                                                                _mdl_INTERNO_Informes_Ventas_Pedido.tipoTitulo);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_PedidoCabecera", dts_Pedido.Tables["pedidoCabecera"]));


                // Datos FacturaLineas
                if (_mdl_INTERNO_Informes_Ventas_Pedido.Lineas != null && _mdl_INTERNO_Informes_Ventas_Pedido.Lineas.Count > 0)
                {
                    foreach (INTERNO_Informes_Ventas_PedidoLinea mdl_INTERNO_Informes_Ventas_PedidoLinea in _mdl_INTERNO_Informes_Ventas_Pedido.Lineas)
                    {
                        dts_Pedido.Tables["pedidoLineas"].Rows.Add(mdl_INTERNO_Informes_Ventas_PedidoLinea.articuloCodigo,
                                                                     (mdl_INTERNO_Informes_Ventas_PedidoLinea.articuloDescripcion != null ? mdl_INTERNO_Informes_Ventas_PedidoLinea.articuloDescripcion.ToUpper() : ""),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_PedidoLinea.cantidad, 2),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_PedidoLinea.precio, 3),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_PedidoLinea.descuento, 2),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_PedidoLinea.importe, 2));
                    }
                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_PedidoLineas", dts_Pedido.Tables["pedidoLineas"]));


                // Datos FacturaResumen
                if (_mdl_INTERNO_Informes_Ventas_Pedido.Resumen != null && _mdl_INTERNO_Informes_Ventas_Pedido.Resumen.Count > 0)
                {
                    #region Variables 
                    decimal bruto_1 = 0m;
                    decimal descuentoProntoPago_1 = 0m;
                    decimal descuentoFinalFactura_1 = 0m;
                    decimal descuentoFinalAlbaran_1 = 0m;
                    decimal baseImponible_1 = 0m;
                    decimal impuestoPorcentaje_1 = 0m;
                    decimal impuestoValor_1 = 0m;
                    decimal recargoPorcentaje_1 = 0m;
                    decimal recargoValor_1 = 0m;
                    decimal total_1 = 0m;

                    decimal bruto_2 = 0m;
                    decimal descuentoProntoPago_2 = 0m;
                    decimal descuentoFinalFactura_2 = 0m;
                    decimal descuentoFinalAlbaran_2 = 0m;
                    decimal baseImponible_2 = 0m;
                    decimal impuestoPorcentaje_2 = 0m;
                    decimal impuestoValor_2 = 0m;
                    decimal recargoPorcentaje_2 = 0m;
                    decimal recargoValor_2 = 0m;
                    decimal total_2 = 0m;

                    decimal bruto_3 = 0m;
                    decimal descuentoProntoPago_3 = 0m;
                    decimal descuentoFinalFactura_3 = 0m;
                    decimal descuentoFinalAlbaran_3 = 0m;
                    decimal baseImponible_3 = 0m;
                    decimal impuestoPorcentaje_3 = 0m;
                    decimal impuestoValor_3 = 0m;
                    decimal recargoPorcentaje_3 = 0m;
                    decimal recargoValor_3 = 0m;
                    decimal total_3 = 0m;

                    decimal bruto_4 = 0m;
                    decimal descuentoProntoPago_4 = 0m;
                    decimal descuentoFinalFactura_4 = 0m;
                    decimal descuentoFinalAlbaran_4 = 0m;
                    decimal baseImponible_4 = 0m;
                    decimal impuestoPorcentaje_4 = 0m;
                    decimal impuestoValor_4 = 0m;
                    decimal recargoPorcentaje_4 = 0m;
                    decimal recargoValor_4 = 0m;
                    decimal total_4 = 0m;

                    decimal bruto_5 = 0m;
                    decimal descuentoProntoPago_5 = 0m;
                    decimal descuentoFinalFactura_5 = 0m;
                    decimal descuentoFinalAlbaran_5 = 0m;
                    decimal baseImponible_5 = 0m;
                    decimal impuestoPorcentaje_5 = 0m;
                    decimal impuestoValor_5 = 0m;
                    decimal recargoPorcentaje_5 = 0m;
                    decimal recargoValor_5 = 0m;
                    decimal total_5 = 0m;
                    #endregion

                    int int_Contador = 1;
                    foreach (INTERNO_Informes_Ventas_PedidoResumen mdl_INTERNO_Informes_Ventas_PedidoResumen in _mdl_INTERNO_Informes_Ventas_Pedido.Resumen)
                    {
                        if (mdl_INTERNO_Informes_Ventas_PedidoResumen.bruto > 0)
                        {
                            if (int_Contador == 1)
                            {
                                bruto_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.bruto;
                                descuentoFinalFactura_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalFactura;
                                descuentoProntoPago_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalAlbaran;
                                baseImponible_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.baseImponible;
                                impuestoPorcentaje_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoPorcentaje;
                                impuestoValor_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoValor;
                                recargoPorcentaje_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoPorcentaje;
                                recargoValor_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoValor;
                                total_1 = mdl_INTERNO_Informes_Ventas_PedidoResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 2)
                            {
                                bruto_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.bruto;
                                descuentoFinalFactura_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalFactura;
                                descuentoProntoPago_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalAlbaran;
                                baseImponible_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.baseImponible;
                                impuestoPorcentaje_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoPorcentaje;
                                impuestoValor_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoValor;
                                recargoPorcentaje_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoPorcentaje;
                                recargoValor_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoValor;
                                total_2 = mdl_INTERNO_Informes_Ventas_PedidoResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 3)
                            {
                                bruto_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.bruto;
                                descuentoFinalFactura_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalFactura;
                                descuentoProntoPago_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalAlbaran;
                                baseImponible_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.baseImponible;
                                impuestoPorcentaje_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoPorcentaje;
                                impuestoValor_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoValor;
                                recargoPorcentaje_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoPorcentaje;
                                recargoValor_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoValor;
                                total_3 = mdl_INTERNO_Informes_Ventas_PedidoResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 4)
                            {
                                bruto_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.bruto;
                                descuentoFinalFactura_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalFactura;
                                descuentoProntoPago_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalAlbaran;
                                baseImponible_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.baseImponible;
                                impuestoPorcentaje_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoPorcentaje;
                                impuestoValor_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoValor;
                                recargoPorcentaje_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoPorcentaje;
                                recargoValor_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoValor;
                                total_4 = mdl_INTERNO_Informes_Ventas_PedidoResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 5)
                            {
                                bruto_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.bruto;
                                descuentoFinalFactura_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalFactura;
                                descuentoProntoPago_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.descuentoFinalAlbaran;
                                baseImponible_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.baseImponible;
                                impuestoPorcentaje_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoPorcentaje;
                                impuestoValor_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.impuestoValor;
                                recargoPorcentaje_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoPorcentaje;
                                recargoValor_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.recargoValor;
                                total_5 = mdl_INTERNO_Informes_Ventas_PedidoResumen.total;

                                int_Contador += 1;
                            }

                        }
                    }


                    dts_Pedido.Tables["pedidoResumen"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Pedido.Resumen.FirstOrDefault().impuestoDescripcion,
                                                                    //1
                                                                    Funciones.RedondearDecimal(bruto_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_1, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_1, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_1, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_1, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_1, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_1, 2),
                                                                    Funciones.RedondearDecimal(total_1, 2),
                                                                    //2
                                                                    Funciones.RedondearDecimal(bruto_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_2, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_2, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_2, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_2, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_2, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_2, 2),
                                                                    Funciones.RedondearDecimal(total_2, 2),
                                                                    //3
                                                                    Funciones.RedondearDecimal(bruto_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_3, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_3, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_3, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_3, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_3, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_3, 2),
                                                                    Funciones.RedondearDecimal(total_3, 2),
                                                                    //4
                                                                    Funciones.RedondearDecimal(bruto_4, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_4, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_4, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_4, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_4, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_4, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_4, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_4, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_4, 2),
                                                                    Funciones.RedondearDecimal(total_4, 2),
                                                                    //5
                                                                    Funciones.RedondearDecimal(bruto_5, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_5, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_5, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_5, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_5, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_5, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_5, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_5, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_5, 2),
                                                                    Funciones.RedondearDecimal(total_5, 2));

                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_PedidoResumen", dts_Pedido.Tables["pedidoResumen"]));


            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(Rellenar_DataSet_MarcosMobiliario) + "/" + nameof(Rellenar_Pedido), true);
            }
        }

        public static void Rellenar_Presupuesto(ReportDataSourceCollection _obj_ReportDataSourceCollection, INTERNO_Informes_Ventas_Presupuesto _mdl_INTERNO_Informes_Ventas_Presupuesto)
        {
            try
            {
                DataSet dts_Presupuesto = new DS_MarcosMobiliario_Presupuesto();

                //Datos Imagenes
                byte[] logo = _mdl_INTERNO_Informes_Ventas_Presupuesto.Logo_Superior_Izquierda;
                dts_Presupuesto.Tables["Imagenes"].Rows.Add(logo);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Imagenes", dts_Presupuesto.Tables["Imagenes"]));

                //Datos Empresa
                dts_Presupuesto.Tables["Empresa"].Rows.Add((_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.nombreComercial != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.nombreComercial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.razonSocial != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.razonSocial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.nombreVia != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.nombreVia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.poblacion != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.poblacion.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.municipio != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.municipio.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.provincia != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.provincia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.pais != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.pais.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.codigoPostal != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.codigoPostal : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.cif != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.cif.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.telefono != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.telefono : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.fax != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.fax : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.email != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Empresa.email : ""));
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Empresa", dts_Presupuesto.Tables["Empresa"]));

                // Datos Cliente
                dts_Presupuesto.Tables["cliente"].Rows.Add((_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.nombreComercial != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.nombreComercial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.razonSocial != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.razonSocial.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.nombreVia != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.nombreVia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.poblacion != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.poblacion.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.municipio != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.municipio.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.provincia != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.provincia.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.pais != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.pais.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.codigoPostal != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.codigoPostal : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.cif != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.cif.ToUpper() : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.telefono != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.telefono : ""),
                                                       (_mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.codigo != null ? _mdl_INTERNO_Informes_Ventas_Presupuesto.Cliente.codigo : ""));
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Cliente", dts_Presupuesto.Tables["cliente"]));

                // Datos FacturaCabecera
                dts_Presupuesto.Tables["presupuestoCabecera"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Presupuesto.numero,
                                                                _mdl_INTERNO_Informes_Ventas_Presupuesto.fecha,
                                                                _mdl_INTERNO_Informes_Ventas_Presupuesto.vendedorCodigo,
                                                                _mdl_INTERNO_Informes_Ventas_Presupuesto.vendedorDescripcion,
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.total, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.totalBruto, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.totalBaseImponible, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.totalImpuesto, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.totalRecargo, 2),
                                                                 Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.totalDescuentoFinalAlbaran, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.descuentoFinalAlbaran, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.totalDescuentoFinalFactura, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.descuentoFinalFactura, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.totalDescuentoProntoPago, 2),
                                                                Funciones.RedondearDecimal(_mdl_INTERNO_Informes_Ventas_Presupuesto.descuentoProntoPago, 2),
                                                                _mdl_INTERNO_Informes_Ventas_Presupuesto.delegacionCodigo,
                                                                _mdl_INTERNO_Informes_Ventas_Presupuesto.tipoTitulo);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_PresupuestoCabecera", dts_Presupuesto.Tables["presupuestoCabecera"]));


                // Datos FacturaLineas
                if (_mdl_INTERNO_Informes_Ventas_Presupuesto.Lineas != null && _mdl_INTERNO_Informes_Ventas_Presupuesto.Lineas.Count > 0)
                {
                    foreach (INTERNO_Informes_Ventas_PresupuestoLinea mdl_INTERNO_Informes_Ventas_PresupuestoLinea in _mdl_INTERNO_Informes_Ventas_Presupuesto.Lineas)
                    {
                        dts_Presupuesto.Tables["presupuestoLineas"].Rows.Add(mdl_INTERNO_Informes_Ventas_PresupuestoLinea.articuloCodigo,
                                                                     (mdl_INTERNO_Informes_Ventas_PresupuestoLinea.articuloDescripcion != null ? mdl_INTERNO_Informes_Ventas_PresupuestoLinea.articuloDescripcion.ToUpper() : ""),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_PresupuestoLinea.cantidad, 2),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_PresupuestoLinea.precio, 3),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_PresupuestoLinea.descuento, 2),
                                                                     Funciones.RedondearDecimal(mdl_INTERNO_Informes_Ventas_PresupuestoLinea.importe, 2));
                    }
                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_PresupuestoLineas", dts_Presupuesto.Tables["presupuestoLineas"]));


                // Datos FacturaResumen
                if (_mdl_INTERNO_Informes_Ventas_Presupuesto.Resumen != null && _mdl_INTERNO_Informes_Ventas_Presupuesto.Resumen.Count > 0)
                {
                    #region Variables 
                    decimal bruto_1 = 0m;
                    decimal descuentoProntoPago_1 = 0m;
                    decimal descuentoFinalFactura_1 = 0m;
                    decimal descuentoFinalAlbaran_1 = 0m;
                    decimal baseImponible_1 = 0m;
                    decimal impuestoPorcentaje_1 = 0m;
                    decimal impuestoValor_1 = 0m;
                    decimal recargoPorcentaje_1 = 0m;
                    decimal recargoValor_1 = 0m;
                    decimal total_1 = 0m;

                    decimal bruto_2 = 0m;
                    decimal descuentoProntoPago_2 = 0m;
                    decimal descuentoFinalFactura_2 = 0m;
                    decimal descuentoFinalAlbaran_2 = 0m;
                    decimal baseImponible_2 = 0m;
                    decimal impuestoPorcentaje_2 = 0m;
                    decimal impuestoValor_2 = 0m;
                    decimal recargoPorcentaje_2 = 0m;
                    decimal recargoValor_2 = 0m;
                    decimal total_2 = 0m;

                    decimal bruto_3 = 0m;
                    decimal descuentoProntoPago_3 = 0m;
                    decimal descuentoFinalFactura_3 = 0m;
                    decimal descuentoFinalAlbaran_3 = 0m;
                    decimal baseImponible_3 = 0m;
                    decimal impuestoPorcentaje_3 = 0m;
                    decimal impuestoValor_3 = 0m;
                    decimal recargoPorcentaje_3 = 0m;
                    decimal recargoValor_3 = 0m;
                    decimal total_3 = 0m;

                    decimal bruto_4 = 0m;
                    decimal descuentoProntoPago_4 = 0m;
                    decimal descuentoFinalFactura_4 = 0m;
                    decimal descuentoFinalAlbaran_4 = 0m;
                    decimal baseImponible_4 = 0m;
                    decimal impuestoPorcentaje_4 = 0m;
                    decimal impuestoValor_4 = 0m;
                    decimal recargoPorcentaje_4 = 0m;
                    decimal recargoValor_4 = 0m;
                    decimal total_4 = 0m;

                    decimal bruto_5 = 0m;
                    decimal descuentoProntoPago_5 = 0m;
                    decimal descuentoFinalFactura_5 = 0m;
                    decimal descuentoFinalAlbaran_5 = 0m;
                    decimal baseImponible_5 = 0m;
                    decimal impuestoPorcentaje_5 = 0m;
                    decimal impuestoValor_5 = 0m;
                    decimal recargoPorcentaje_5 = 0m;
                    decimal recargoValor_5 = 0m;
                    decimal total_5 = 0m;
                    #endregion

                    int int_Contador = 1;
                    foreach (INTERNO_Informes_Ventas_PresupuestoResumen mdl_INTERNO_Informes_Ventas_PresupuestoResumen in _mdl_INTERNO_Informes_Ventas_Presupuesto.Resumen)
                    {
                        if (mdl_INTERNO_Informes_Ventas_PresupuestoResumen.bruto > 0)
                        {
                            if (int_Contador == 1)
                            {
                                bruto_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.bruto;
                                descuentoFinalFactura_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalFactura;
                                descuentoProntoPago_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalAlbaran;
                                baseImponible_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.baseImponible;
                                impuestoPorcentaje_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoPorcentaje;
                                impuestoValor_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoValor;
                                recargoPorcentaje_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoPorcentaje;
                                recargoValor_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoValor;
                                total_1 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 2)
                            {
                                bruto_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.bruto;
                                descuentoFinalFactura_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalFactura;
                                descuentoProntoPago_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalAlbaran;
                                baseImponible_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.baseImponible;
                                impuestoPorcentaje_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoPorcentaje;
                                impuestoValor_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoValor;
                                recargoPorcentaje_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoPorcentaje;
                                recargoValor_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoValor;
                                total_2 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 3)
                            {
                                bruto_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.bruto;
                                descuentoFinalFactura_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalFactura;
                                descuentoProntoPago_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalAlbaran;
                                baseImponible_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.baseImponible;
                                impuestoPorcentaje_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoPorcentaje;
                                impuestoValor_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoValor;
                                recargoPorcentaje_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoPorcentaje;
                                recargoValor_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoValor;
                                total_3 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 4)
                            {
                                bruto_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.bruto;
                                descuentoFinalFactura_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalFactura;
                                descuentoProntoPago_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalAlbaran;
                                baseImponible_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.baseImponible;
                                impuestoPorcentaje_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoPorcentaje;
                                impuestoValor_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoValor;
                                recargoPorcentaje_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoPorcentaje;
                                recargoValor_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoValor;
                                total_4 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.total;

                                int_Contador += 1;
                            }
                            else if (int_Contador == 5)
                            {
                                bruto_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.bruto;
                                descuentoFinalFactura_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalFactura;
                                descuentoProntoPago_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoProntoPago;
                                descuentoFinalAlbaran_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.descuentoFinalAlbaran;
                                baseImponible_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.baseImponible;
                                impuestoPorcentaje_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoPorcentaje;
                                impuestoValor_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.impuestoValor;
                                recargoPorcentaje_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoPorcentaje;
                                recargoValor_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.recargoValor;
                                total_5 = mdl_INTERNO_Informes_Ventas_PresupuestoResumen.total;

                                int_Contador += 1;
                            }

                        }
                    }


                    dts_Presupuesto.Tables["presupuestoResumen"].Rows.Add(_mdl_INTERNO_Informes_Ventas_Presupuesto.Resumen.FirstOrDefault().impuestoDescripcion,
                                                                    //1
                                                                    Funciones.RedondearDecimal(bruto_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_1, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_1, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_1, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_1, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_1, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_1, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_1, 2),
                                                                    Funciones.RedondearDecimal(total_1, 2),
                                                                    //2
                                                                    Funciones.RedondearDecimal(bruto_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_2, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_2, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_2, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_2, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_2, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_2, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_2, 2),
                                                                    Funciones.RedondearDecimal(total_2, 2),
                                                                    //3
                                                                    Funciones.RedondearDecimal(bruto_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_3, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_3, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_3, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_3, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_3, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_3, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_3, 2),
                                                                    Funciones.RedondearDecimal(total_3, 2),
                                                                    //4
                                                                    Funciones.RedondearDecimal(bruto_4, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_4, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_4, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_4, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_4, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_4, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_4, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_4, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_4, 2),
                                                                    Funciones.RedondearDecimal(total_4, 2),
                                                                    //5
                                                                    Funciones.RedondearDecimal(bruto_5, 2),
                                                                    Funciones.RedondearDecimal(descuentoProntoPago_5, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalFactura_5, 2),
                                                                    Funciones.RedondearDecimal(descuentoFinalAlbaran_5, 2),
                                                                    Funciones.RedondearDecimal(baseImponible_5, 2),
                                                                    Funciones.RedondearDecimal(impuestoPorcentaje_5, 2),
                                                                    Funciones.RedondearDecimal(impuestoValor_5, 2),
                                                                    Funciones.RedondearDecimal(recargoPorcentaje_5, 2),
                                                                    Funciones.RedondearDecimal(recargoValor_5, 2),
                                                                    Funciones.RedondearDecimal(total_5, 2));

                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_PresupuestoResumen", dts_Presupuesto.Tables["presupuestoResumen"]));


            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(Rellenar_DataSet_MarcosMobiliario) + "/" + nameof(Rellenar_Presupuesto), true);
            }
        }

    }
}
