Exferia/Exferia_KairosPro/Exferia_KairosPRO/General/Verificacion_Pausas_Email.cs

215 lines
12 KiB
C#

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<string> 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<INTERNO_Email_Modelo> lst_INTERNO_Email_Modelo = new List<INTERNO_Email_Modelo>();
//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>();
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<string> Obtener_Listado_ParaVerificacionPausas(long _lng_CodigoCliente, long _lng_idInformeTipo, KRS_Empleados _mdl_KRS_Empleados)
{
List<KRS_Emails> lst_Emails_ConEmail;
List<KRS_Emails> lst_Emails_ConParametros;
List<string> lst_Emails = new List<string>();
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;
}
}
}