using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Informes;
using Exferia_EntityFramework;
using Exferia_Informes.Informes.InformeContable;
using Exferia_Informes.Informes.InformesOficiales.BalancesSumasYSaldos;
using Microsoft.Reporting.WinForms;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Exferia_Informes.Informes.InformesOficiales.LibroDiario
{
    public class Rellenar_DataSet_InformeOficial_BalancesSumasYSaldos
    {
        public static void Rellenar_InformeOficial_BalancesSumasYSaldos(ReportDataSourceCollection _obj_ReportDataSourceCollection,
                                                                        GEN_Empresas _mdl_GEN_Empresas,
                                                                        GEN_EjerciciosActivos_Empresa _mdl_GEN_EjerciciosActivos_Empresa,
                                                                        DateTime _dtt_FechaListado,
                                                                        string _str_Titulo,
                                                                        int? _int_DatosIniciales_Pagina,
                                                                        DateTime _dtt_Criterio_FechaDesde,
                                                                        DateTime _dtt_Criterio_FechaHasta,
                                                                        string _str_Cuenta_Desde,
                                                                        string _str_Cuenta_Hasta,
                                                                        List<INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo> _lst_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo,
                                                                        List<CTA_PlanGeneralContable> _lst_CTA_PlanGeneralContable)
        {
            try
            {
                DataSet dts_BalancesSumasYSaldos = new DS_BalancesSumasYSaldos();

                #region InformeOficial_BalancesSumasYSaldos
                dts_BalancesSumasYSaldos.Tables["InformeOficial_BalancesSumasYSaldos"].Rows.Add(_str_Titulo,
                                                                                            (_mdl_GEN_EjerciciosActivos_Empresa!=null ? _mdl_GEN_EjerciciosActivos_Empresa.anioControl : ""),
                                                                                            _dtt_Criterio_FechaDesde.ToString("dd/MM/yyyy"),
                                                                                            _dtt_Criterio_FechaHasta.ToString("dd/MM/yyyy"),
                                                                                            (_int_DatosIniciales_Pagina!=null ? _int_DatosIniciales_Pagina.Value : 0),
                                                                                            _str_Cuenta_Desde,
                                                                                            _str_Cuenta_Hasta,
                                                                                            _dtt_FechaListado.ToString("dd/MM/yyyy"));
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_InformeOficial_BalancesSumasYSaldos", dts_BalancesSumasYSaldos.Tables["InformeOficial_BalancesSumasYSaldos"]));
                #endregion

                #region InformeOficial_BalancesSumasYSaldos_Empresa

                GEN_Direcciones mdl_GEN_Direcciones_Actual = null;
                string str_NombreVia_Actual = "";
                string str_CodigoPostal_Actual = "";
                string str_Pais_Actual = "";
                string str_Municipio_Actual = "";
                string str_Provincia_Actual = "";
                string str_Poblacion_Actual = "";
                if (_mdl_GEN_Empresas.GEN_Direcciones!=null && _mdl_GEN_Empresas.GEN_Direcciones.Count>0)
                {
                    mdl_GEN_Direcciones_Actual = _mdl_GEN_Empresas.GEN_Direcciones.Where(m => m.tipoDireccion.Equals(Variables.G_STR_TIPODIRECCION_FACTURACION)).FirstOrDefault();
                    if (mdl_GEN_Direcciones_Actual!=null)
                    {
                        //nombreVia
                        str_NombreVia_Actual = mdl_GEN_Direcciones_Actual.nombreVia;

                        //codigoPostal
                        str_CodigoPostal_Actual = mdl_GEN_Direcciones_Actual.codigoPostal;

                        //Pais
                        if (mdl_GEN_Direcciones_Actual.GEN_Paises!=null)
                        {
                            str_Pais_Actual = mdl_GEN_Direcciones_Actual.GEN_Paises.descripcion;
                        }

                        //Provincias
                        if (mdl_GEN_Direcciones_Actual.GEN_Provincias != null)
                        {
                            str_Provincia_Actual = mdl_GEN_Direcciones_Actual.GEN_Provincias.descripcion;
                        }

                        //Municipios
                        if (mdl_GEN_Direcciones_Actual.GEN_Municipios != null)
                        {
                            str_Municipio_Actual = mdl_GEN_Direcciones_Actual.GEN_Municipios.descripcion;
                        }

                        //Poblaciones
                        if (mdl_GEN_Direcciones_Actual.GEN_Poblaciones != null)
                        {
                            str_Poblacion_Actual = mdl_GEN_Direcciones_Actual.GEN_Poblaciones.descripcion;
                        }
                    }
                }

                dts_BalancesSumasYSaldos.Tables["InformeOficial_BalancesSumasYSaldos_Empresa"].Rows.Add(_mdl_GEN_Empresas.id,
                                                                                      _mdl_GEN_Empresas.razonSocial,
                                                                                      _mdl_GEN_Empresas.descripcion,
                                                                                      _mdl_GEN_Empresas.nif,
                                                                                      str_NombreVia_Actual,
                                                                                      str_CodigoPostal_Actual,
                                                                                      str_Pais_Actual,
                                                                                      str_Provincia_Actual,
                                                                                      str_Municipio_Actual,
                                                                                      str_Poblacion_Actual
                                                                                      );
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_InformeOficial_BalancesSumasYSaldos_Empresa", dts_BalancesSumasYSaldos.Tables["InformeOficial_BalancesSumasYSaldos_Empresa"]));

                #endregion

                #region InformeOficial_BalancesSumasYSaldos_Lineas

                if (_lst_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo!=null && _lst_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.Count>0)
                {
                    string str_Agrupado_Codigo = "";
                    string str_Agrupado_Descripcion = "";
                    CTA_PlanGeneralContable mdl_CTA_PlanGeneralContable_Grupos_1 = null;
                    foreach (INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo in _lst_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo)
                    {
                        //cambio de grupo_1
                        if (!str_Agrupado_Codigo.Equals(mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.cuentaCodigo.Substring(0, 1)))
                        {
                            if (_lst_CTA_PlanGeneralContable != null && _lst_CTA_PlanGeneralContable.Count > 0)
                            {
                                mdl_CTA_PlanGeneralContable_Grupos_1 = _lst_CTA_PlanGeneralContable.Where(m => m.codigo.Equals(mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.cuentaCodigo.Substring(0, 1))).FirstOrDefault();
                                if (mdl_CTA_PlanGeneralContable_Grupos_1 != null)
                                {
                                    str_Agrupado_Codigo = mdl_CTA_PlanGeneralContable_Grupos_1.codigo;
                                    str_Agrupado_Descripcion = mdl_CTA_PlanGeneralContable_Grupos_1.descripcion;
                                }
                            }
                        }

                        dts_BalancesSumasYSaldos.Tables["InformeOficial_BalancesSumasYSaldos_Lineas"].Rows.Add(mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.cuentaCodigo,
                                                                                                                mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.cuentaDescripcion,
                                                                                                                mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.apertura_D,
                                                                                                                mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.apertura_H,
                                                                                                                mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.periodo_D,
                                                                                                                mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.periodo_H,
                                                                                                                mdl_INTERNO_InformeOficial_BalancesSumasYSaldos_Modelo.saldo,
                                                                                                                str_Agrupado_Codigo,
                                                                                                                str_Agrupado_Descripcion);

                    }
                }

                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_InformeOficial_BalancesSumasYSaldos_Lineas", dts_BalancesSumasYSaldos.Tables["InformeOficial_BalancesSumasYSaldos_Lineas"]));
                #endregion



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

    }
}
