using Exferia_Aplicacion.General; using Exferia_Aplicacion.Modelos_Generales; using Exferia_Aplicacion.Modelos_Informes; using Exferia_KairosPRO._2_Datos; using Exferia_KairosPRO_EF; using Microsoft.Reporting.WinForms; using System; using System.Collections.Generic; using System.Reflection; using System.Linq; namespace Exferia_KairosPRO.General { public class Verificacion_Pausas_Email { public static bool Enviar_Pausa_Incidencia( long _lng_codigoCliente, INTERNO_KairosPRO_PausaIncidencias_Modelo _mdl_INTERNO_KairosPRO_PausaIncidencias_Modelo, KRS_Empleados _mdl_KRS_Empleados) { bool bol_TodoCorrecto = false; ReportViewer obj_ReportViewer = null; try { //Clases de Negocio necesarias KRS_ValoresGenerales_Datos obj_KRS_ValoresGenerales_Datos = new KRS_ValoresGenerales_Datos(); KRS_Emails_Datos obj_KRS_Emails_Datos = new KRS_Emails_Datos(); KRS_ValoresGenerales mdl_KRS_ValoresGenerales = obj_KRS_ValoresGenerales_Datos.Obtener_PorCliente(_lng_codigoCliente); KRS_ConfiguracionesEmails mdl_KRS_ConfiguracionesEmails = null; if (mdl_KRS_ValoresGenerales != null && mdl_KRS_ValoresGenerales.KRS_ConfiguracionesEmails != null) { mdl_KRS_ConfiguracionesEmails = mdl_KRS_ValoresGenerales.KRS_ConfiguracionesEmails; } if (mdl_KRS_ConfiguracionesEmails == null) { Control_Errores.Errores_Log("No encontro Configuracion para Emails, codigoCliente:" + _lng_codigoCliente, null, nameof(Verificacion_Pausas_Email) + "/" + nameof(Enviar_Pausa_Incidencia)); } else { //Obtener los Emails List lst_KRS_Emails = Obtener_Listado_ParaVerificacionPausas(_lng_codigoCliente, Variables.G_MDL_INFORMES_KAIROSPRO_INCIDENCIASPAUSAS.Id, _mdl_KRS_Empleados); if (lst_KRS_Emails != null && lst_KRS_Emails.Count > 0) { //Listado para guardar los emails List lst_INTERNO_Email_Modelo = new List(); //Rellenar el modelo de emails foreach (string str_Emails in lst_KRS_Emails) { INTERNO_Email_Modelo mdl_INTERNO_Email_Modelo = new INTERNO_Email_Modelo(); mdl_INTERNO_Email_Modelo.Email = str_Emails; mdl_INTERNO_Email_Modelo.Oculto = false; mdl_INTERNO_Email_Modelo.Copia = false; lst_INTERNO_Email_Modelo.Add(mdl_INTERNO_Email_Modelo); } string str_AsuntoEmail = "Incidencia pausa día " + _mdl_INTERNO_KairosPRO_PausaIncidencias_Modelo.Dia.ToString("dd/MM/yyyy") + " " + _mdl_INTERNO_KairosPRO_PausaIncidencias_Modelo.Empleado_Nombre; //Cargamos el ensamblado ######################################################################################################################################################################### Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_KAIROSPROINFORMES + ".dll"); //Obtenemos el tipo de la clase Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_KAIROSPROINFORMES + "." + Variables.G_STR_LIBRERIA_DATOSKAIROSPROINFORMES); //creamos la instancia var obj_Clase_1 = Activator.CreateInstance(m_type_1); //Cargamos el metodo solicitado MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSKAIROSPROINFORMES_PROCEDIMIENTO_CREARINFORMESPAUSAINCIDENCIA, BindingFlags.Instance | BindingFlags.NonPublic); //Obtener valores object[] arr_Parametros_1 = { _mdl_INTERNO_KairosPRO_PausaIncidencias_Modelo }; //Pasamos los parametros al metodo y lo ejecutamos obj_ReportViewer = (ReportViewer)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1); //################################################################################################################################################################################################## if (obj_ReportViewer != null) { //Transformar ReportViewer a byte[] // Variables Warning[] arr_Advertenias; string[] arr_streamIds; string str_mimeType = string.Empty; string str_encoding = string.Empty; string str_extension = string.Empty; //ReportViever byte[] bytes = obj_ReportViewer.LocalReport.Render("PDF", null, out str_mimeType, out str_encoding, out str_extension, out arr_streamIds, out arr_Advertenias); INTERNO_EnvioEmail_Modelo mdl_INTERNO_EnvioEmail_Modelo = new INTERNO_EnvioEmail_Modelo(); mdl_INTERNO_EnvioEmail_Modelo.email = mdl_KRS_ConfiguracionesEmails.email; mdl_INTERNO_EnvioEmail_Modelo.nombreAMostrar = mdl_KRS_ConfiguracionesEmails.nombreAMostrar != null ? mdl_KRS_ConfiguracionesEmails.nombreAMostrar : ""; mdl_INTERNO_EnvioEmail_Modelo.asunto = str_AsuntoEmail; mdl_INTERNO_EnvioEmail_Modelo.cuerpo = ""; mdl_INTERNO_EnvioEmail_Modelo.smtp_Servidor = mdl_KRS_ConfiguracionesEmails.smtp_Servidor; mdl_INTERNO_EnvioEmail_Modelo.smtp_Puerto = mdl_KRS_ConfiguracionesEmails.smtp_Puerto; mdl_INTERNO_EnvioEmail_Modelo.smtp_Usuario = mdl_KRS_ConfiguracionesEmails.smtp_Usuario; mdl_INTERNO_EnvioEmail_Modelo.smtp_Clave = mdl_KRS_ConfiguracionesEmails.smtp_Clave; mdl_INTERNO_EnvioEmail_Modelo.smtp_ConexionSSL = mdl_KRS_ConfiguracionesEmails.smtp_ConexionSSL; mdl_INTERNO_EnvioEmail_Modelo.emails_destino = lst_INTERNO_Email_Modelo; //Ficheros mdl_INTERNO_EnvioEmail_Modelo.ficheros = new List(); INTERNO_EnvioEmail_Ficheros_Modelo mdl_INTERNO_EnvioEmail_Ficheros_Modelo = new INTERNO_EnvioEmail_Ficheros_Modelo(); mdl_INTERNO_EnvioEmail_Ficheros_Modelo.fichero_PDF = bytes; mdl_INTERNO_EnvioEmail_Ficheros_Modelo.nombreFichero_A_Enviar = "Incidencias_Pausa.pdf"; mdl_INTERNO_EnvioEmail_Modelo.ficheros.Add(mdl_INTERNO_EnvioEmail_Ficheros_Modelo); INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo(); mdl_ValorDevuelto_Modelo.TodoCorrecto = true; mdl_ValorDevuelto_Modelo = Funciones.Email_Enviar(mdl_INTERNO_EnvioEmail_Modelo); bol_TodoCorrecto = mdl_ValorDevuelto_Modelo.TodoCorrecto; } } else { //Se borrar el registro como que fue enviado, porque significa que no tiene email selecionados, por lo tanto no quieren que se envie bol_TodoCorrecto = true; } } } catch (Control_Errores) { } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Verificacion_Pausas_Email) + "/" + nameof(Enviar_Pausa_Incidencia)); } finally { if (obj_ReportViewer != null) { obj_ReportViewer.Dispose(); } } return bol_TodoCorrecto; } private static List Obtener_Listado_ParaVerificacionPausas(long _lng_CodigoCliente, long _lng_idInformeTipo, KRS_Empleados _mdl_KRS_Empleados) { List lst_Emails_ConEmail; List lst_Emails_ConParametros; List lst_Emails = new List(); try { KRS_Emails_Datos obj_KRS_Emails_Datos = new KRS_Emails_Datos(); //Listado de Emails, con Emails lst_Emails_ConEmail = obj_KRS_Emails_Datos.Obtener_ModeloListado_Por_InformeTipo_Email(_lng_CodigoCliente, _lng_idInformeTipo); //Ahora los recorremos y vamos metiendo los emails en el listado if (lst_Emails_ConEmail != null && lst_Emails_ConEmail.Count > 0) { foreach (KRS_Emails mdl_KRS_Email in lst_Emails_ConEmail) { lst_Emails.Add(mdl_KRS_Email.email); } } //Solo Buscaremos los parametros si el empleado no es Nulo if (_mdl_KRS_Empleados != null) { //Listado de Emails, con parametros lst_Emails_ConParametros = obj_KRS_Emails_Datos.Obtener_ModeloListado_Por_InformeTipo_Parametros(_lng_CodigoCliente, _lng_idInformeTipo); if (lst_Emails_ConParametros != null) { foreach (KRS_Emails mdl_KRS_Email_Parametro in lst_Emails_ConParametros) { //Obtenemos todos los parametros string[] arr_Parametros = mdl_KRS_Email_Parametro.parametrosParaBuscarEmail.Split('|'); foreach (string str_Parametro in arr_Parametros) { if (str_Parametro.Equals(Variables.G_MDL_PARAMETRO_EMAIL_DEPARTAMENTO.Codigo)) { //Vamos a buscar los Emails relacionados con el Departamento if (_mdl_KRS_Empleados.KRS_Departamentos != null && _mdl_KRS_Empleados.KRS_Departamentos.fechaBorrado == null) { if (_mdl_KRS_Empleados.KRS_Departamentos.KRS_DepartamentosEmails != null && _mdl_KRS_Empleados.KRS_Departamentos.KRS_DepartamentosEmails.Count > 0) { foreach (KRS_DepartamentosEmails mdl_KRS_DepartamentosEmails in _mdl_KRS_Empleados.KRS_Departamentos.KRS_DepartamentosEmails) { lst_Emails.Add(mdl_KRS_DepartamentosEmails.email); } } } } } } } lst_Emails = lst_Emails.Distinct().ToList(); } } catch (Control_Errores) { throw; } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Verificacion_Pausas_Email) + "/" + nameof(Obtener_Listado_ParaVerificacionPausas)); } return lst_Emails; } } }