using Exferia_Aplicacion.General; using Exferia_KairosPRO._1_Modelos; using Exferia_KairosPRO._2_Datos; using Exferia_KairosPRO_EF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Exferia_KairosPRO.General { public class Verificacion_DetalleFichaje_PorFecha { #region Variables privadas private TMP_Emails_Informes_PorFechas_Datos g_obj_TMP_Emails_Informes_PorFechas_Datos = new TMP_Emails_Informes_PorFechas_Datos(); private long g_lng_CodigoCliente =-1; private DateTime g_dtt_Validacion ; private bool g_bol_Grabar_Diccionarios_XML = false; #endregion public void Proceso(long _lng_CodigoCliente, DateTime _dtt_Validacion, bool _bol_Grabar_Diccionarios_XML) { try { g_lng_CodigoCliente = _lng_CodigoCliente; g_dtt_Validacion= _dtt_Validacion; g_bol_Grabar_Diccionarios_XML = _bol_Grabar_Diccionarios_XML; //Si estuviera a nulo el diccionario if (Variables_KairosPRO.G_DCT_DETALLEFICHAJEYAVALIDADOS == null) { Variables_KairosPRO.G_DCT_DETALLEFICHAJEYAVALIDADOS.Add(g_lng_CodigoCliente, new List()); } //Si tuviera valores pero no para este cliente else if (!Variables_KairosPRO.G_DCT_DETALLEFICHAJEYAVALIDADOS.ContainsKey(g_lng_CodigoCliente)) { Variables_KairosPRO.G_DCT_DETALLEFICHAJEYAVALIDADOS.Add(g_lng_CodigoCliente,new List()); } //Empezar a validar los dias que tengo que enviar los informes ................................................................................................................. DateTime dtt_Fecha_SinHoras = new DateTime(_dtt_Validacion.Year, _dtt_Validacion.Month, _dtt_Validacion.Day); List lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo = Variables_KairosPRO.G_DCT_DETALLEFICHAJEYAVALIDADOS[_lng_CodigoCliente]; //Para el Informe Diario, tiene que ser todos los dias, despues de las 12 de la noche, (00:00) if (_dtt_Validacion.Hour >= 00) { Diario(dtt_Fecha_SinHoras.AddDays(-1), lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo); } //Para el Informe Semanal, tiene que ser todos lunes, despues de las 12 de la noche, (00:00) if (_dtt_Validacion.DayOfWeek == DayOfWeek.Monday && _dtt_Validacion.Hour >= 00) { Semanal(dtt_Fecha_SinHoras, lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo); } //Para el Informe Mensual, tiene que ser todos dia 1, despues de las 12 de la noche, (00:00) if (_dtt_Validacion.Day == 1 && _dtt_Validacion.Hour >= 00) { Mensual(dtt_Fecha_SinHoras, lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo); } //Para el Informe Mensual de Total Dispositivos, tiene que ser 2 dias antes del fin del mes, despues de las 12 de la noche (00:00) if(_dtt_Validacion.Day == (DateTime.DaysInMonth(_dtt_Validacion.Year, _dtt_Validacion.Month)-2) && _dtt_Validacion.Hour >= 00) { Mensual_TotalDispositivos_2DiasAntes(dtt_Fecha_SinHoras, lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo); } //Para el Informe Mensual de Total Dispositivos, tiene que ser todos los dias 1, despues de las 12 de la noche (00:00) if (_dtt_Validacion.Day == 1 && _dtt_Validacion.Hour >= 00) { Mensual_TotalDispositivos(dtt_Fecha_SinHoras, lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Verificacion_DetalleFichaje_PorFecha) + "/" + nameof(Proceso)); } } private void Diario(DateTime _dtt_Fecha_SinHoras, List _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo) { try { INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_DIARIO = null; if (_lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo != null && _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Count > 0) { mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_DIARIO = _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Where(m => m.IdInformeTipo.Equals(Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_DIARIO.Id) && m.Fecha.Equals(_dtt_Fecha_SinHoras)).FirstOrDefault(); } //Si esta a nulo, se tiene que enviar el informe del Diario if (mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_DIARIO == null) { //Agregar para Enviar por Email TMP_Emails_Informes_PorFechas mdl_TMP_Emails_Informes_PorFechas = new TMP_Emails_Informes_PorFechas(); mdl_TMP_Emails_Informes_PorFechas.codigoCliente = g_lng_CodigoCliente; mdl_TMP_Emails_Informes_PorFechas.idInformeTipo = Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_DIARIO.Id; mdl_TMP_Emails_Informes_PorFechas.fechaDesde = _dtt_Fecha_SinHoras; mdl_TMP_Emails_Informes_PorFechas.fechaHasta = _dtt_Fecha_SinHoras.AddHours(23).AddMinutes(59); g_obj_TMP_Emails_Informes_PorFechas_Datos.Insertar(mdl_TMP_Emails_Informes_PorFechas); //Se agrega en el Diccionario para no volver a utilizarr este dia Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_Informes_PorFechas(g_lng_CodigoCliente, _dtt_Fecha_SinHoras, Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_DIARIO.Id, g_bol_Grabar_Diccionarios_XML); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Verificacion_DetalleFichaje_PorFecha) + "/" + nameof(Diario)); } } private void Semanal(DateTime _dtt_Fecha_SinHoras, List _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo) { try { INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_SEMANAL = null; if (_lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo != null && _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Count > 0) { mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_SEMANAL = _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Where(m => m.IdInformeTipo.Equals(Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_SEMANAL.Id) && m.Fecha.Equals(_dtt_Fecha_SinHoras)).FirstOrDefault(); } //Si esta a nulo, se tiene que enviar el informe del Semanal if (mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_SEMANAL == null) { //Agregar para Enviar por Email TMP_Emails_Informes_PorFechas mdl_TMP_Emails_Informes_PorFechas = new TMP_Emails_Informes_PorFechas(); mdl_TMP_Emails_Informes_PorFechas.codigoCliente = g_lng_CodigoCliente; mdl_TMP_Emails_Informes_PorFechas.idInformeTipo = Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_SEMANAL.Id; mdl_TMP_Emails_Informes_PorFechas.fechaDesde = _dtt_Fecha_SinHoras.AddDays(-7); mdl_TMP_Emails_Informes_PorFechas.fechaHasta = _dtt_Fecha_SinHoras.AddMinutes(-1); g_obj_TMP_Emails_Informes_PorFechas_Datos.Insertar(mdl_TMP_Emails_Informes_PorFechas); //Se agrega en el Diccionario para no volver a utilizarr este dia Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_Informes_PorFechas(g_lng_CodigoCliente, _dtt_Fecha_SinHoras, Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_SEMANAL.Id, g_bol_Grabar_Diccionarios_XML); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Verificacion_DetalleFichaje_PorFecha) + "/" + nameof(Semanal)); } } private void Mensual(DateTime _dtt_Fecha_SinHoras, List _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo) { try { INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL = null; if (_lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo != null && _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Count > 0) { mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL = _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Where(m => m.IdInformeTipo.Equals(Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_MENSUAL.Id) && m.Fecha.Equals(_dtt_Fecha_SinHoras)).FirstOrDefault(); } //Si esta a nulo, se tiene que enviar el informe del Diario if (mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL == null) { //Agregar para Enviar por Email TMP_Emails_Informes_PorFechas mdl_TMP_Emails_Informes_PorFechas = new TMP_Emails_Informes_PorFechas(); mdl_TMP_Emails_Informes_PorFechas.codigoCliente = g_lng_CodigoCliente; mdl_TMP_Emails_Informes_PorFechas.idInformeTipo = Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_MENSUAL.Id; mdl_TMP_Emails_Informes_PorFechas.fechaDesde = _dtt_Fecha_SinHoras.AddMonths(-1); mdl_TMP_Emails_Informes_PorFechas.fechaHasta = _dtt_Fecha_SinHoras.AddMinutes(-1); g_obj_TMP_Emails_Informes_PorFechas_Datos.Insertar(mdl_TMP_Emails_Informes_PorFechas); //Se agrega en el Diccionario para no volver a utilizar este dia Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_Informes_PorFechas(g_lng_CodigoCliente, _dtt_Fecha_SinHoras, Variables.G_MDL_INFORMES_KAIROSPRO_DETALLEFICHAJE_MENSUAL.Id, g_bol_Grabar_Diccionarios_XML); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Verificacion_DetalleFichaje_PorFecha) + "/" + nameof(Mensual)); } } private void Mensual_TotalDispositivos(DateTime _dtt_Fecha_SinHoras, List _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo) { try { INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL_DISPOSITIVOS = null; if(_lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo != null && _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Count > 0) { mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL_DISPOSITIVOS = _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Where(m => m.IdInformeTipo.Equals(Variables.G_MDL_INFORMES_KAIROSPRO_FICHAJE_MENSUAL_TOTALDISPOSITIVOS.Id) && m.Fecha.Equals(_dtt_Fecha_SinHoras)).FirstOrDefault(); } //Si no esta nulo, se tiene que enviar el informe del Diario if(mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL_DISPOSITIVOS == null) { //Agregar para Enviar por Email TMP_Emails_Informes_PorFechas mdl_TMP_Emails_Informes_PorFechas = new TMP_Emails_Informes_PorFechas(); mdl_TMP_Emails_Informes_PorFechas.codigoCliente = g_lng_CodigoCliente; mdl_TMP_Emails_Informes_PorFechas.idInformeTipo = Variables.G_MDL_INFORMES_KAIROSPRO_FICHAJE_MENSUAL_TOTALDISPOSITIVOS.Id; mdl_TMP_Emails_Informes_PorFechas.fechaDesde = _dtt_Fecha_SinHoras.AddMonths(-1); mdl_TMP_Emails_Informes_PorFechas.fechaHasta = _dtt_Fecha_SinHoras.AddMinutes(-1); g_obj_TMP_Emails_Informes_PorFechas_Datos.Insertar(mdl_TMP_Emails_Informes_PorFechas); //Se agrega en el Diccionario para no volver a utilizar este dia Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_Informes_PorFechas(g_lng_CodigoCliente, _dtt_Fecha_SinHoras, Variables.G_MDL_INFORMES_KAIROSPRO_FICHAJE_MENSUAL_TOTALDISPOSITIVOS.Id, g_bol_Grabar_Diccionarios_XML); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Verificacion_DetalleFichaje_PorFecha) + "/" + nameof(Mensual_TotalDispositivos)); } } private void Mensual_TotalDispositivos_2DiasAntes(DateTime _dtt_Fecha_SinHoras, List _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo) { try { INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL_DISPOSITIVOS = null; if (_lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo != null && _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Count > 0) { mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL_DISPOSITIVOS = _lst_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo.Where(m => m.IdInformeTipo.Equals(Variables.G_MDL_INFORMES_KAIROSPRO_FICHAJE_MENSUALDOSDIASANTES_TOTALDISPOSITIVOS.Id) && m.Fecha.Equals(_dtt_Fecha_SinHoras)).FirstOrDefault(); } //Si no esta nulo, se tiene que enviar el informe del Diario if (mdl_INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo_MENSUAL_DISPOSITIVOS == null) { //Agregar para Enviar por Email TMP_Emails_Informes_PorFechas mdl_TMP_Emails_Informes_PorFechas = new TMP_Emails_Informes_PorFechas(); mdl_TMP_Emails_Informes_PorFechas.codigoCliente = g_lng_CodigoCliente; mdl_TMP_Emails_Informes_PorFechas.idInformeTipo = Variables.G_MDL_INFORMES_KAIROSPRO_FICHAJE_MENSUAL_TOTALDISPOSITIVOS.Id; mdl_TMP_Emails_Informes_PorFechas.fechaDesde = _dtt_Fecha_SinHoras.AddMonths(-1); mdl_TMP_Emails_Informes_PorFechas.fechaHasta = _dtt_Fecha_SinHoras.AddMinutes(-1); g_obj_TMP_Emails_Informes_PorFechas_Datos.Insertar(mdl_TMP_Emails_Informes_PorFechas); //Se agrega en el Diccionario para no volver a utilizar este dia Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_Informes_PorFechas(g_lng_CodigoCliente, _dtt_Fecha_SinHoras, Variables.G_MDL_INFORMES_KAIROSPRO_FICHAJE_MENSUALDOSDIASANTES_TOTALDISPOSITIVOS.Id, g_bol_Grabar_Diccionarios_XML); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Verificacion_DetalleFichaje_PorFecha) + "/" + nameof(Mensual_TotalDispositivos_2DiasAntes)); } } } }