using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Informes;
using Microsoft.Reporting.WinForms;
using System;
using System.Data;
using System.Drawing;

namespace Exferia_Informes.Informes.Mythos
{
    public class Rellenar_DataSet_Parte
    {
        public static void Rellenar(ReportDataSourceCollection _obj_ReportDataSourceCollection, INTERNO_Informes_Mythos_Parte_Modelo _mdl_INTERNO_Informes_Mythos_Parte_Modelo)
        {

            try
            {
                DataSet dts_Parte = new DS_Parte();

                #region Datos Empresa
                dts_Parte.Tables["Empresa"].Rows.Add(   _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.descripcion,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.razonSocial,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.nombreVia,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.codigoPostal,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.pais,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.provincia,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.municipio,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.poblacion,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.telefonoOficina,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.telefonoParticular,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.telefonoMovil,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.telefonoFax,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Empresa.email);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Empresa", dts_Parte.Tables["Empresa"]));
                #endregion

                #region Datos Empresa_Logo
                byte[] arr_Imagen = _mdl_INTERNO_Informes_Mythos_Parte_Modelo.logo;
                dts_Parte.Tables["Logo"].Rows.Add(arr_Imagen);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Logo", dts_Parte.Tables["Logo"]));
                #endregion

                #region Datos Cliente
                dts_Parte.Tables["Cliente"].Rows.Add(   _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.codigo,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.razonSocial,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.nombreComercial,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.cif,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.telefono1,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.telefono2,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.fax,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.fechaAlta,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.email,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.web,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.nombreVia,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.codigoPostal,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.pais,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.provincia,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.municipio,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.poblacion,
                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Cliente.deuda);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Cliente", dts_Parte.Tables["Cliente"]));
                #endregion

                #region Datos Instalacion_Cabecera
                dts_Parte.Tables["Instalacion_Cabecera"].Rows.Add(  _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.codigo,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.descripcion,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.fecha,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.nombreVia,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.codigoPostal,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.pais,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.provincia,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.municipio,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.poblacion);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Instalacion_Cabecera", dts_Parte.Tables["Instalacion_Cabecera"]));
                #endregion

                #region Datos Instalacion_Linea
                if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.instalacionLinea_Id>0)
                {
                    dts_Parte.Tables["Instalacion_Linea"].Rows.Add( _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.instalacionLinea_codigo,
                                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Instalacion.instalacionLinea_descripcion);
                }

                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Instalacion_Linea", dts_Parte.Tables["Instalacion_Linea"]));
                #endregion

                #region Datos Contrato
                string str_Descripcion_Contrato = "";
                if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.Contrato!=null && 
                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Contrato.codigo!=null &&
                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Contrato.codigo.Trim().Length>0)
                {
                    str_Descripcion_Contrato = "Contrato nº " + _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Contrato.codigo;
                    if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.Contrato.fechaFin!=null)
                    {
                        str_Descripcion_Contrato += " desde " + _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Contrato.fechaInicio.ToString("dd/MM/yyyy") + " hasta " + _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Contrato.fechaFin.Value.ToString("dd/MM/yyyy");
                    }
                    else
                    {
                        str_Descripcion_Contrato += " INDEFINIDO";
                    }                    
                }
                else
                {
                    str_Descripcion_Contrato = "SIN CONTRATO";
                }
                dts_Parte.Tables["Contrato"].Rows.Add(str_Descripcion_Contrato);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Contrato", dts_Parte.Tables["Contrato"]));
                #endregion

                #region Datos Infraestructura
                if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.Infraestructura!=null && _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Infraestructura.Count>0)
                {
                    foreach (INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo in _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Infraestructura)
                    {

                        dts_Parte.Tables["Infraestructura"].Rows.Add(mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.codigo,
                                                                    mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.descripcion,
                                                                    mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.seccion_Id,
                                                                    mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.seccion_Descripcion,
                                                                    mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.elemento_Id,
                                                                    mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.elemento_Descripcion,
                                                                    mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.elemento_Texto,
                                                                    mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.modelo_Codigo,
                                                                    mdl_INTERNO_Informes_Mythos_Parte_Infraestructura_Modelo.modelo_Descripcion);
                    }
                }

                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Infraestructura", dts_Parte.Tables["Infraestructura"]));
                #endregion

                #region Datos TrabajosRealizados Anteriores
                if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.TrabajosRealizados_Anteriores != null && _mdl_INTERNO_Informes_Mythos_Parte_Modelo.TrabajosRealizados_Anteriores.Count > 0)
                {
                    foreach (INTERNO_Informes_Mythos_Parte_TrabajosRealizados_Anteriores_Modelo mdl_INTERNO_Informes_Mythos_Parte_TrabajosRealizados_Anteriores_Modelo in _mdl_INTERNO_Informes_Mythos_Parte_Modelo.TrabajosRealizados_Anteriores)
                    {
                        dts_Parte.Tables["TrabajosRealizados_Anteriores"].Rows.Add(
                                                                mdl_INTERNO_Informes_Mythos_Parte_TrabajosRealizados_Anteriores_Modelo.fechaHora,
                                                                mdl_INTERNO_Informes_Mythos_Parte_TrabajosRealizados_Anteriores_Modelo.trabajoRealizado,
                                                                mdl_INTERNO_Informes_Mythos_Parte_TrabajosRealizados_Anteriores_Modelo.duracion,
                                                                mdl_INTERNO_Informes_Mythos_Parte_TrabajosRealizados_Anteriores_Modelo.estado,
                                                                mdl_INTERNO_Informes_Mythos_Parte_TrabajosRealizados_Anteriores_Modelo.orden,
                                                                mdl_INTERNO_Informes_Mythos_Parte_TrabajosRealizados_Anteriores_Modelo.tecnico);
                    }
                }

                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_TrabajosRealizados_Anteriores", dts_Parte.Tables["TrabajosRealizados_Anteriores"]));
                #endregion

                #region Datos Protocolos Anteriores
                if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.Protocolos_Anteriores != null && _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Protocolos_Anteriores.Count > 0)
                {
                    foreach (INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo in _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Protocolos_Anteriores)
                    {
                        dts_Parte.Tables["Protocolos_Anteriores"].Rows.Add(mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.id,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.fecha,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.codigo,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.descripcion,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.pregunta_1,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.respuesta_1,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.pregunta_2,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.respuesta_2,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.pregunta_3,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.respuesta_3,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosAnteriores_Modelo.orden);
                    }
                }

                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Protocolos_Anteriores", dts_Parte.Tables["Protocolos_Anteriores"]));
                #endregion

                #region Protocolos Parte Actual
                if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.Protocolos_ParteActual != null && _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Protocolos_ParteActual.Count > 0)
                {
                    foreach (INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo in _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Protocolos_ParteActual)
                    {
                        dts_Parte.Tables["Protocolos_ParteActual"].Rows.Add(mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.id,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.fecha,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.codigo,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.descripcion,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.pregunta_1,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.respuesta_1,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.pregunta_2,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.respuesta_2,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.pregunta_3,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.respuesta_3,
                                                                mdl_INTERNO_Informes_Mythos_Parte_ProtocolosParteActual_Modelo.orden);
                    }
                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Protocolos_ParteActual", dts_Parte.Tables["Protocolos_ParteActual"]));

                #endregion

                #region Datos TrabajoRealizado_Finalizado_ParteActual
                if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.TrabajoRealizado_Finalizado_ParteActual != null)
                {
                    dts_Parte.Tables["TrabajoRealizado_Finalizado_ParteActual"].Rows.Add(_mdl_INTERNO_Informes_Mythos_Parte_Modelo.TrabajoRealizado_Finalizado_ParteActual.fechaHora,
                                                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.TrabajoRealizado_Finalizado_ParteActual.trabajoRealizado,
                                                                                        _mdl_INTERNO_Informes_Mythos_Parte_Modelo.TrabajoRealizado_Finalizado_ParteActual.duracion);
                }
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_TrabajoRealizado_Finalizado_ParteActual", dts_Parte.Tables["TrabajoRealizado_Finalizado_ParteActual"]));
                #endregion


                #region Datos Parte
                dts_Parte.Tables["Parte"].Rows.Add( _mdl_INTERNO_Informes_Mythos_Parte_Modelo.codigo,
                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.prioridad,
                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.tipo,
                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.estado,
                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.fechaHoraCita,
                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.textoCita,
                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.incidencias,
                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.tecnico,
                                                    _mdl_INTERNO_Informes_Mythos_Parte_Modelo.notaImportante);
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Parte", dts_Parte.Tables["Parte"]));
                #endregion

                #region Datos Articulos
                int int_Contador_Articulo = 0;
                if (_mdl_INTERNO_Informes_Mythos_Parte_Modelo.Articulos != null && _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Articulos.Count > 0)
                {
                    foreach (INTERNO_Informes_Mythos_Parte_Articulos_Modelo mdl_INTERNO_Informes_Mythos_Parte_Articulos_Modelo in _mdl_INTERNO_Informes_Mythos_Parte_Modelo.Articulos)
                    {
                        dts_Parte.Tables["Articulos"].Rows.Add( mdl_INTERNO_Informes_Mythos_Parte_Articulos_Modelo.codigo,
                                                                mdl_INTERNO_Informes_Mythos_Parte_Articulos_Modelo.descripcion,
                                                                mdl_INTERNO_Informes_Mythos_Parte_Articulos_Modelo.cantidad);

                        int_Contador_Articulo += 1;
                    }
                }
                       
                if (int_Contador_Articulo < 5)
                {
                    for (int int_Contador= int_Contador_Articulo; int_Contador<5; int_Contador++)
                    {
                        dts_Parte.Tables["Articulos"].Rows.Add();
                    }
                }
                
                _obj_ReportDataSourceCollection.Add(new ReportDataSource("ds_Articulos", dts_Parte.Tables["Articulos"]));
                #endregion

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

    }
}
