using Exferia_Aplicacion.General; using Exferia_Controles; using Exferia_EntityFramework; using Exferia_General; using Exferia_KairosPRO._1_Modelos; using Exferia_KairosPRO._2_Datos; using Exferia_KairosPRO_EF; using System; using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Exferia_KairosPRO.General { public class Funciones_KairosPRO { public static string Quitar_Letras_DNI(string _str_DNI_AUX) { string str_DNI_Final = ""; if (_str_DNI_AUX != null && _str_DNI_AUX.Trim().Length > 0) { for (int int_Contador = 0; int_Contador < _str_DNI_AUX.Length; int_Contador++) { if (Funciones.IsNumeric(_str_DNI_AUX.Substring(int_Contador, 1))) { str_DNI_Final += _str_DNI_AUX.Substring(int_Contador, 1); } } } return str_DNI_Final; } public static void FormarCalendario(Exferia_DataGridView _dgv_ARellenar, GEN_EjerciciosActivos_Empresa _mdl_GEN_EjerciciosActivos_Empresa, DateTime _dtt_FechaTrabajo) { try { //Vaciar Todo el Calendario _dgv_ARellenar.ClearSelection(); _dgv_ARellenar.Rows.Clear(); _dgv_ARellenar.Columns.Clear(); DataGridViewColumn obj_DataGridViewColumn = null; DataGridViewRow obj_DataGridViewRow = null; //Formato de la celda DataGridViewCell obj_DataGridViewCell = new DataGridViewTextBoxCell(); obj_DataGridViewCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; DateTime dtt_Ejercicio_Inicio = _mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio; DateTime dtt_Ejercicio_Fin = _mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaFin; //Añadimos primera Columna con los meses DataGridViewColumn obj_DataGridViewColumn_Meses = new DataGridViewColumn(); obj_DataGridViewColumn_Meses.Width = 90; obj_DataGridViewColumn_Meses.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; obj_DataGridViewColumn_Meses.CellTemplate = obj_DataGridViewCell; _dgv_ARellenar.Columns.Add(obj_DataGridViewColumn_Meses); //Cabecera Los dias de la Semana int int_diaSemana = 0; for (int int_Contador = 0; int_Contador < 37; int_Contador++) { obj_DataGridViewColumn = new DataGridViewColumn(); obj_DataGridViewColumn.Width = 27; obj_DataGridViewColumn.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; obj_DataGridViewColumn.CellTemplate = obj_DataGridViewCell; if (int_diaSemana == 0) { //Lunes obj_DataGridViewColumn.HeaderText = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_LUNES; int_diaSemana++; } else if (int_diaSemana == 1) { //Martes obj_DataGridViewColumn.HeaderText = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_MARTES; int_diaSemana++; } else if (int_diaSemana == 2) { //Miercoles obj_DataGridViewColumn.HeaderText = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_MIERCOLES; int_diaSemana++; } else if (int_diaSemana == 3) { //Jueves obj_DataGridViewColumn.HeaderText = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_JUEVES; int_diaSemana++; } else if (int_diaSemana == 4) { //Viernes obj_DataGridViewColumn.HeaderText = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_VIERNES; int_diaSemana++; } else if (int_diaSemana == 5) { //Sabado obj_DataGridViewColumn.HeaderText = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_SABADO; int_diaSemana++; } else if (int_diaSemana == 6) { //Domingo obj_DataGridViewColumn.HeaderText = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_DOMINGO; int_diaSemana = 0; } //Finalmente añadimos la columna al DGV _dgv_ARellenar.Columns.Add(obj_DataGridViewColumn); } //Pintar los Dias int int_MesesTotales = Math.Abs((dtt_Ejercicio_Fin.Month - dtt_Ejercicio_Inicio.Month) + 12 * (dtt_Ejercicio_Fin.Year - dtt_Ejercicio_Inicio.Year)); //Inicial int int_Inicial_Dia = dtt_Ejercicio_Inicio.Day; int int_Inicial_Mes = dtt_Ejercicio_Inicio.Month; int int_Inicial_Anyo = dtt_Ejercicio_Inicio.Year; int int_Final_Dia = dtt_Ejercicio_Fin.Day; int int_Final_Mes = dtt_Ejercicio_Fin.Month; int int_Final_Anyo = dtt_Ejercicio_Fin.Year; for (int int_Contador_Fila_Meses = 0; int_Contador_Fila_Meses <= int_MesesTotales; int_Contador_Fila_Meses++) { obj_DataGridViewRow = new DataGridViewRow(); obj_DataGridViewRow.Height = 27; _dgv_ARellenar.Rows.Add(obj_DataGridViewRow); //Poner Titulo del Mes if (int_Inicial_Mes == 1) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_ENERO + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 2) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_FEBRERO + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 3) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_MARZO + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 4) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_ABRIL + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 5) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_MAYO + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 6) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_JUNIO + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 7) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_JULIO + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 8) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_AGOSTO + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 9) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_SEPTIEMBRE + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 10) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_OCTUBRE + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 11) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_NOVIEMBRE + " " + int_Inicial_Anyo; } else if (int_Inicial_Mes == 12) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[0].Value = Variables_KairosPRO.G_STR_CALENDARIO_MES_SIMPLIFICADO_DICIEMBRE + " " + int_Inicial_Anyo; } //Pintar los Dias int int_DiasMes_EnCuestion = DateTime.DaysInMonth(int_Inicial_Anyo, int_Inicial_Mes); DayOfWeek dow_primerDia = new DateTime(int_Inicial_Anyo, int_Inicial_Mes, 1).DayOfWeek; //Rellenamos las celdas del calendario con los números de los días pertinentes int int_SaltosDias = 0; if (dow_primerDia.Equals(DayOfWeek.Monday)) { int_SaltosDias = 0; } else if (dow_primerDia.Equals(DayOfWeek.Tuesday)) { int_SaltosDias = 1; } else if(dow_primerDia.Equals(DayOfWeek.Wednesday)) { int_SaltosDias = 2; } else if(dow_primerDia.Equals(DayOfWeek.Thursday)) { int_SaltosDias =3; } else if(dow_primerDia.Equals(DayOfWeek.Friday)) { int_SaltosDias = 4; } else if (dow_primerDia.Equals(DayOfWeek.Saturday)) { int_SaltosDias = 5; } else if(dow_primerDia.Equals(DayOfWeek.Sunday)) { int_SaltosDias = 6; } for (int int_Contador_Secundario = 1; int_Contador_Secundario <= int_DiasMes_EnCuestion; int_Contador_Secundario++) { if (int_Contador_Secundario>= int_Inicial_Dia) { if (int_Final_Mes== int_Inicial_Mes && int_Final_Anyo== int_Inicial_Anyo) { if (int_Final_Dia >= int_Contador_Secundario) { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[(int_SaltosDias + int_Contador_Secundario)].Value = int_Contador_Secundario; } } else { _dgv_ARellenar.Rows[int_Contador_Fila_Meses].Cells[(int_SaltosDias + int_Contador_Secundario)].Value = int_Contador_Secundario; } } } int_Inicial_Dia = 1; //Sumar Mes y año si hiciera falta ........ if (int_Inicial_Mes == 12) { int_Inicial_Mes = 1; int_Inicial_Anyo += 1; } else { int_Inicial_Mes += 1; } //......................................... } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(FormarCalendario)); } } public static Color Mezclar_Colores(List _lst_clr_Colores) { int int_R_Mezclados = 0; int int_G_Mezclados = 0; int int_B_Mezclados = 0; foreach (Color clt_Color in _lst_clr_Colores) { int_R_Mezclados += clt_Color.R; int_G_Mezclados += clt_Color.G; int_B_Mezclados += clt_Color.B; } int int_R = Math.Min((int_R_Mezclados), 255); int int_G = Math.Min((int_G_Mezclados), 255); int int_B = Math.Min((int_B_Mezclados), 255); return Color.FromArgb(Convert.ToByte(int_R), Convert.ToByte(int_G), Convert.ToByte(int_B)); } public static INTERNO_AUX_MesAnyo_Modelo Devolver_MesAnyo_Segun_EjercicioSeleccionado(int _int_IndiceFila, GEN_EjerciciosActivos_Empresa _mdl_GEN_EjerciciosActivos_Empresa) { INTERNO_AUX_MesAnyo_Modelo mdl_INTERNO_AUX_MesAnyo_Modelo = null; try { int int_Mes_Inicial = _mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio.Month; int int_Anyo_Inicial = _mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio.Year; //Se suma el indice de la fila int_Mes_Inicial += _int_IndiceFila; if (int_Mes_Inicial>12) { int_Anyo_Inicial += (int_Mes_Inicial / 12); int_Mes_Inicial = int_Mes_Inicial % 12; } mdl_INTERNO_AUX_MesAnyo_Modelo = new INTERNO_AUX_MesAnyo_Modelo(int_Mes_Inicial, int_Anyo_Inicial); } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Devolver_MesAnyo_Segun_EjercicioSeleccionado)); mdl_INTERNO_AUX_MesAnyo_Modelo = null; } return mdl_INTERNO_AUX_MesAnyo_Modelo; } public static INTERNO_AUX_FilaColumna_Modelo Devolver_FilaColumna_Segun_Dia(DateTime _dtt_Fecha, GEN_EjerciciosActivos_Empresa _mdl_GEN_EjerciciosActivos_Empresa) { INTERNO_AUX_FilaColumna_Modelo mdl_INTERNO_AUX_FilaColumna_Modelo = null; try { int int_Fila = Math.Abs((_dtt_Fecha.Month - _mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio.Month) + 12 * (_dtt_Fecha.Year - _mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio.Year)); int int_DiasMes_EnCuestion = DateTime.DaysInMonth(_dtt_Fecha.Year, _dtt_Fecha.Month); DayOfWeek dow_primerDia = new DateTime(_dtt_Fecha.Year, _dtt_Fecha.Month, 1).DayOfWeek; //Rellenamos las celdas del calendario con los números de los días pertinentes int int_SaltosDias = 0; if (dow_primerDia.Equals(DayOfWeek.Monday)) { int_SaltosDias = 0; } else if (dow_primerDia.Equals(DayOfWeek.Tuesday)) { int_SaltosDias = 1; } else if (dow_primerDia.Equals(DayOfWeek.Wednesday)) { int_SaltosDias = 2; } else if (dow_primerDia.Equals(DayOfWeek.Thursday)) { int_SaltosDias = 3; } else if (dow_primerDia.Equals(DayOfWeek.Friday)) { int_SaltosDias = 4; } else if (dow_primerDia.Equals(DayOfWeek.Saturday)) { int_SaltosDias = 5; } else if (dow_primerDia.Equals(DayOfWeek.Sunday)) { int_SaltosDias = 6; } mdl_INTERNO_AUX_FilaColumna_Modelo = new INTERNO_AUX_FilaColumna_Modelo(int_Fila, (int_SaltosDias + _dtt_Fecha.Day)); } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Devolver_FilaColumna_Segun_Dia)); mdl_INTERNO_AUX_FilaColumna_Modelo = null; } return mdl_INTERNO_AUX_FilaColumna_Modelo; } #region Fichajes public static List Obtener_Fichajes_PorEmpleadoJornada(INTERNO_KRS_Empleados_Modelo _mdl_INTERNO_KRS_Empleados_Modelo, int _int_Anyo, int _int_Mes, long _lng_idEmpresa) { List lst_KRSS_Fichajes = null; KRSS_Fichajes_Datos obj_KRSS_Fichajes_Datos = new KRSS_Fichajes_Datos(); try { //Calculo del primer dia del mes DateTime dtt_Dia_PrincipioDeMes = new DateTime(_int_Anyo, _int_Mes, 1).AddDays(-1); KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas_PrincipioDeMes = null; if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null) { mdl_KRS_PresenciasProgramadas_PrincipioDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_PrincipioDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); } //Calculo de ultimo dia del mes ########################################## int int_Total_Dias_Mes = DateTime.DaysInMonth(_int_Anyo, _int_Mes); DateTime dtt_Dia_UltimoDeMes = new DateTime(_int_Anyo, _int_Mes, int_Total_Dias_Mes); DateTime dtt_Dia_PrimeroMesSiguiente = new DateTime(_int_Anyo, _int_Mes, int_Total_Dias_Mes).AddDays(+2).AddMinutes(-1); KRS_JornadasCabecera mdl_KRS_JornadasCabecera = null; if (_mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera != null) { if (_mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea != null) { KRS_PerfilesLinea mdl_KRS_PerfilesLinea_PrincipioDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_PrincipioDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); KRS_JornadasCabecera mdl_KRS_JornadasCabecera_PrincipioDeMes = null; if (mdl_KRS_PerfilesLinea_PrincipioDeMes != null) { mdl_KRS_JornadasCabecera_PrincipioDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_PrincipioDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault().KRS_JornadasCabecera; } if (mdl_KRS_PresenciasProgramadas_PrincipioDeMes != null) { if (mdl_KRS_PresenciasProgramadas_PrincipioDeMes.KRS_JornadasCabecera != null) { TimeSpan obj_TimeSpan = mdl_KRS_PresenciasProgramadas_PrincipioDeMes.KRS_JornadasCabecera.horaCambioDia; dtt_Dia_PrincipioDeMes.Add(obj_TimeSpan); } } else if (mdl_KRS_JornadasCabecera_PrincipioDeMes != null) { TimeSpan obj_TimeSpan = mdl_KRS_JornadasCabecera_PrincipioDeMes.horaCambioDia; dtt_Dia_PrincipioDeMes.Add(obj_TimeSpan); } KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas_UltimoDeMes = null; if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null) { mdl_KRS_PresenciasProgramadas_UltimoDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_UltimoDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); } KRS_PerfilesLinea mdl_KRS_PerfilesLinea_UltimoDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_UltimoDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); KRS_JornadasCabecera mdl_KRS_JornadasCabecera_UltimoDeMes = null; if (mdl_KRS_PerfilesLinea_UltimoDeMes != null) { mdl_KRS_JornadasCabecera_UltimoDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_UltimoDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault().KRS_JornadasCabecera; } //Ver si tiene KRS_JornadasCabecera if (mdl_KRS_PresenciasProgramadas_UltimoDeMes != null) { mdl_KRS_JornadasCabecera = mdl_KRS_PresenciasProgramadas_UltimoDeMes.KRS_JornadasCabecera; } else if (mdl_KRS_JornadasCabecera_UltimoDeMes != null) { mdl_KRS_JornadasCabecera = mdl_KRS_JornadasCabecera_UltimoDeMes; } } } //Si no tiene Jornada comprobamos si tiene fichajes else { KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas_UltimoDeMes = null; if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null) { mdl_KRS_PresenciasProgramadas_UltimoDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_UltimoDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); } if (mdl_KRS_PresenciasProgramadas_UltimoDeMes != null) { mdl_KRS_JornadasCabecera = mdl_KRS_PresenciasProgramadas_UltimoDeMes.KRS_JornadasCabecera; } } //Si tiene jornadaCabecera if (mdl_KRS_JornadasCabecera != null) { TimeSpan obj_TimeSpan = mdl_KRS_JornadasCabecera.horaCambioDia; if (obj_TimeSpan.Hours == 0 && obj_TimeSpan.Minutes == 0) { obj_TimeSpan = new TimeSpan(23, 59, 0); } dtt_Dia_PrimeroMesSiguiente.Add(obj_TimeSpan); } //Listado de Fichajes lst_KRSS_Fichajes = obj_KRSS_Fichajes_Datos.Obtener_ModeloListado_Por_EmpleadoFechaEmpresa(_mdl_INTERNO_KRS_Empleados_Modelo.id, dtt_Dia_PrincipioDeMes, dtt_Dia_PrimeroMesSiguiente, _lng_idEmpresa); } catch (Control_Errores) {} catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_Fichajes_PorEmpleadoJornada)); } return lst_KRSS_Fichajes; } public static object[] Obtener_Fichajes_PorEmpleadoJornada_Dia( INTERNO_KRS_Empleados_Modelo _mdl_INTERNO_KRS_Empleados_Modelo, List _lst_KRSS_Fichajes, List _lst_KRS_DiasFestivos, int _int_Anyo, int _int_Mes, int _int_Dia) { object[] arr_ObjetoDevueltos = new object[2]; List lst_KRSS_Fichajes = null; KRS_JornadasCabecera mdl_KRS_JornadasCabecera=null; KRS_PerfilesLinea mdl_KRS_PerfilesLinea_AUX = null; try { KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas = null; KRS_DiasFestivos mdl_KRS_DiasFestivos = null; KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas = null; if (_int_Dia > 0) { DateTime dtt_Fecha_Actual = new DateTime(_int_Anyo, _int_Mes, _int_Dia, 0, 0, 0); //Buscar JornadaCabecera ................................................................................................................ //Presencia Programada if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null && _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Count() > 0) { mdl_KRS_PresenciasProgramadas = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde <= dtt_Fecha_Actual && x.fechaHasta >= dtt_Fecha_Actual).FirstOrDefault(); } //Ausencia programada if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas != null && _mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.Count() > 0) { mdl_KRS_AusenciasProgramadas = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.Where(x => x.fechaDesde <= dtt_Fecha_Actual && x.fechaHasta >= dtt_Fecha_Actual).FirstOrDefault(); } //Dias Festivos if (_lst_KRS_DiasFestivos != null && _lst_KRS_DiasFestivos.Count() > 0) { mdl_KRS_DiasFestivos = _lst_KRS_DiasFestivos.Where(x => x.fechaDesde <= dtt_Fecha_Actual && x.fechaHasta >= dtt_Fecha_Actual).FirstOrDefault(); } //Jornada if (_mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera != null && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea != null && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Count() > 0) { mdl_KRS_PerfilesLinea_AUX = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde <= dtt_Fecha_Actual && x.fechaHasta >= dtt_Fecha_Actual).FirstOrDefault(); if (mdl_KRS_PerfilesLinea_AUX != null) { mdl_KRS_JornadasCabecera = mdl_KRS_PerfilesLinea_AUX.KRS_JornadasCabecera; } } //Presencia Programada if (mdl_KRS_PresenciasProgramadas != null) { mdl_KRS_JornadasCabecera = mdl_KRS_PresenciasProgramadas.KRS_JornadasCabecera; } //Ausencia programada else if (mdl_KRS_AusenciasProgramadas != null) { mdl_KRS_JornadasCabecera = null; } //Dias Festivos else if (mdl_KRS_DiasFestivos != null) { mdl_KRS_JornadasCabecera = null; } if (_lst_KRSS_Fichajes != null) { bool bol_Encontro_Registro = false; DateTime dtt_Fecha_Anterior = new DateTime(_int_Anyo, _int_Mes, _int_Dia, 0, 0, 0).AddDays(-1); TimeSpan tms_HoraCambioDia_Anterior = new TimeSpan(0, 0, 0); //Si tiene JornadaCabecera el dia anterior, coger la hora de cambio de dia, para saber desde cuando hay que buscar los fichajes if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null && _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Count() > 0) { KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas_AUXILIAR = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde <= dtt_Fecha_Anterior && x.fechaHasta >= dtt_Fecha_Anterior).FirstOrDefault(); if (mdl_KRS_PresenciasProgramadas_AUXILIAR != null) { bol_Encontro_Registro = true; tms_HoraCambioDia_Anterior = mdl_KRS_PresenciasProgramadas_AUXILIAR.KRS_JornadasCabecera.horaCambioDia; } } //Jornada if (bol_Encontro_Registro == false && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera != null && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea != null && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Count() > 0) { KRS_PerfilesLinea mdl_KRS_PerfilesLinea = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde <= dtt_Fecha_Anterior && x.fechaHasta >= dtt_Fecha_Anterior).FirstOrDefault(); if (mdl_KRS_PerfilesLinea != null && mdl_KRS_PerfilesLinea.KRS_JornadasCabecera != null) { tms_HoraCambioDia_Anterior = mdl_KRS_PerfilesLinea.KRS_JornadasCabecera.horaCambioDia; } } //Fecha Hora Inicial DateTime dtt_FechaInicial_ABuscar = new DateTime(dtt_Fecha_Actual.Year, dtt_Fecha_Actual.Month, dtt_Fecha_Actual.Day, tms_HoraCambioDia_Anterior.Hours, tms_HoraCambioDia_Anterior.Minutes, 0); DateTime dtt_FechaFinal_ABuscar; //Si tiene JornadaCabecera y salta de dia if (mdl_KRS_JornadasCabecera != null) { //Recorrer el listado para saber si hay que saltar de dia int int_DiasASumar = mdl_KRS_JornadasCabecera.KRS_JornadasLinea.Where(m => m.saltaDia != null && m.saltaDia.Value).Count(); //Fecha y hora del Fin de jornada del dia anterior if (mdl_KRS_JornadasCabecera.horaCambioDia.Hours == 0 && mdl_KRS_JornadasCabecera.horaCambioDia.Minutes == 0) { dtt_FechaFinal_ABuscar = new DateTime(dtt_Fecha_Actual.AddDays(int_DiasASumar).Year, dtt_Fecha_Actual.AddDays(int_DiasASumar).Month, dtt_Fecha_Actual.AddDays(int_DiasASumar).Day, 23, 59, 59); } else { dtt_FechaFinal_ABuscar = new DateTime(dtt_Fecha_Actual.AddDays(int_DiasASumar).Year, dtt_Fecha_Actual.AddDays(int_DiasASumar).Month, dtt_Fecha_Actual.AddDays(int_DiasASumar).Day, mdl_KRS_JornadasCabecera.horaCambioDia.Hours, mdl_KRS_JornadasCabecera.horaCambioDia.Minutes, 59); } } else { dtt_FechaFinal_ABuscar = new DateTime(dtt_Fecha_Actual.Year, dtt_Fecha_Actual.Month, dtt_Fecha_Actual.Day, 23, 59, 59); } //Listado de Fichajes lst_KRSS_Fichajes = _lst_KRSS_Fichajes.Where(x => x.fechaHora >= dtt_FechaInicial_ABuscar && x.fechaHora <= dtt_FechaFinal_ABuscar) .ToList(); } else { //Listado de Fichajes lst_KRSS_Fichajes = new List(); } } } catch (Exception ex) { Control_Errores.Errores_Log(ex.Message, ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_Fichajes_PorEmpleadoJornada_Dia)); } finally { arr_ObjetoDevueltos[0] = lst_KRSS_Fichajes; arr_ObjetoDevueltos[1] = mdl_KRS_JornadasCabecera; } return arr_ObjetoDevueltos; } #endregion #region Pausas public static List Obtener_Pausas_PorEmpleadoJornada(INTERNO_KRS_Empleados_Modelo _mdl_INTERNO_KRS_Empleados_Modelo, int _int_Anyo, int _int_Mes, long _lng_idEmpresa) { List lst_KRSS_Pausas = null; KRSS_Pausas_Datos obj_KRSS_Pausas_Datos = new KRSS_Pausas_Datos(); try { //Calculo del primer dia del mes DateTime dtt_Dia_PrincipioDeMes = new DateTime(_int_Anyo, _int_Mes, 1).AddDays(-1); KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas_PrincipioDeMes = null; if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null) { mdl_KRS_PresenciasProgramadas_PrincipioDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_PrincipioDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); } //Calculo de ultimo dia del mes ########################################## int int_Total_Dias_Mes = DateTime.DaysInMonth(_int_Anyo, _int_Mes); DateTime dtt_Dia_UltimoDeMes = new DateTime(_int_Anyo, _int_Mes, int_Total_Dias_Mes); DateTime dtt_Dia_PrimeroMesSiguiente = new DateTime(_int_Anyo, _int_Mes, int_Total_Dias_Mes).AddDays(+2).AddMinutes(-1); KRS_JornadasCabecera mdl_KRS_JornadasCabecera = null; if (_mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera != null) { if (_mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea != null) { KRS_PerfilesLinea mdl_KRS_PerfilesLinea_PrincipioDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_PrincipioDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); KRS_JornadasCabecera mdl_KRS_JornadasCabecera_PrincipioDeMes = null; if (mdl_KRS_PerfilesLinea_PrincipioDeMes != null) { mdl_KRS_JornadasCabecera_PrincipioDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_PrincipioDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault().KRS_JornadasCabecera; } if (mdl_KRS_PresenciasProgramadas_PrincipioDeMes != null) { if (mdl_KRS_PresenciasProgramadas_PrincipioDeMes.KRS_JornadasCabecera != null) { TimeSpan obj_TimeSpan = mdl_KRS_PresenciasProgramadas_PrincipioDeMes.KRS_JornadasCabecera.horaCambioDia; dtt_Dia_PrincipioDeMes.Add(obj_TimeSpan); } } else if (mdl_KRS_JornadasCabecera_PrincipioDeMes != null) { TimeSpan obj_TimeSpan = mdl_KRS_JornadasCabecera_PrincipioDeMes.horaCambioDia; dtt_Dia_PrincipioDeMes.Add(obj_TimeSpan); } KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas_UltimoDeMes = null; if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null) { mdl_KRS_PresenciasProgramadas_UltimoDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_UltimoDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); } KRS_PerfilesLinea mdl_KRS_PerfilesLinea_UltimoDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_UltimoDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); KRS_JornadasCabecera mdl_KRS_JornadasCabecera_UltimoDeMes = null; if (mdl_KRS_PerfilesLinea_UltimoDeMes != null) { mdl_KRS_JornadasCabecera_UltimoDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_UltimoDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault().KRS_JornadasCabecera; } //Ver si tiene KRS_JornadasCabecera if (mdl_KRS_PresenciasProgramadas_UltimoDeMes != null) { mdl_KRS_JornadasCabecera = mdl_KRS_PresenciasProgramadas_UltimoDeMes.KRS_JornadasCabecera; } else if (mdl_KRS_JornadasCabecera_UltimoDeMes != null) { mdl_KRS_JornadasCabecera = mdl_KRS_JornadasCabecera_UltimoDeMes; } } } //Si no tiene Jornada comprobamos si tiene Pausas else { KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas_UltimoDeMes = null; if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null) { mdl_KRS_PresenciasProgramadas_UltimoDeMes = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde.ToString("dd/MM/yyyy").Equals(dtt_Dia_UltimoDeMes.ToString("dd/MM/yyyy"))).FirstOrDefault(); } if (mdl_KRS_PresenciasProgramadas_UltimoDeMes != null) { mdl_KRS_JornadasCabecera = mdl_KRS_PresenciasProgramadas_UltimoDeMes.KRS_JornadasCabecera; } } //Si tiene jornadaCabecera if (mdl_KRS_JornadasCabecera != null) { TimeSpan obj_TimeSpan = mdl_KRS_JornadasCabecera.horaCambioDia; if (obj_TimeSpan.Hours == 0 && obj_TimeSpan.Minutes == 0) { obj_TimeSpan = new TimeSpan(23, 59, 0); } dtt_Dia_PrimeroMesSiguiente.Add(obj_TimeSpan); } //Listado de Pausas lst_KRSS_Pausas = obj_KRSS_Pausas_Datos.Obtener_ModeloListado_Por_EmpleadoFechaEmpresa(_mdl_INTERNO_KRS_Empleados_Modelo.id, dtt_Dia_PrincipioDeMes, dtt_Dia_PrimeroMesSiguiente, _lng_idEmpresa); } catch (Control_Errores) { } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_Pausas_PorEmpleadoJornada)); } return lst_KRSS_Pausas; } public static object[] Obtener_Pausas_PorEmpleadoJornada_Dia(INTERNO_KRS_Empleados_Modelo _mdl_INTERNO_KRS_Empleados_Modelo, List _lst_KRSS_Pausas, List _lst_KRS_DiasFestivos, int _int_Anyo, int _int_Mes, int _int_Dia) { object[] arr_ObjetoDevueltos = new object[2]; List lst_KRSS_Pausas = null; KRS_JornadasCabecera mdl_KRS_JornadasCabecera = null; KRS_PerfilesLinea mdl_KRS_PerfilesLinea_AUX = null; try { KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas = null; KRS_DiasFestivos mdl_KRS_DiasFestivos = null; KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas = null; if (_int_Dia > 0) { DateTime dtt_Fecha_Actual = new DateTime(_int_Anyo, _int_Mes, _int_Dia, 0, 0, 0); //Buscar JornadaCabecera ................................................................................................................ //Presencia Programada if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null && _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Count() > 0) { mdl_KRS_PresenciasProgramadas = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde <= dtt_Fecha_Actual && x.fechaHasta >= dtt_Fecha_Actual).FirstOrDefault(); } //Ausencia programada if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas != null && _mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.Count() > 0) { mdl_KRS_AusenciasProgramadas = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.Where(x => x.fechaDesde <= dtt_Fecha_Actual && x.fechaHasta >= dtt_Fecha_Actual).FirstOrDefault(); } //Dias Festivos if (_lst_KRS_DiasFestivos != null && _lst_KRS_DiasFestivos.Count() > 0) { mdl_KRS_DiasFestivos = _lst_KRS_DiasFestivos.Where(x => x.fechaDesde <= dtt_Fecha_Actual && x.fechaHasta >= dtt_Fecha_Actual).FirstOrDefault(); } //Jornada if (_mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera != null && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea != null && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Count() > 0) { mdl_KRS_PerfilesLinea_AUX = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde <= dtt_Fecha_Actual && x.fechaHasta >= dtt_Fecha_Actual).FirstOrDefault(); if (mdl_KRS_PerfilesLinea_AUX != null) { mdl_KRS_JornadasCabecera = mdl_KRS_PerfilesLinea_AUX.KRS_JornadasCabecera; } } //Presencia Programada if (mdl_KRS_PresenciasProgramadas != null) { mdl_KRS_JornadasCabecera = mdl_KRS_PresenciasProgramadas.KRS_JornadasCabecera; } //Ausencia programada else if (mdl_KRS_AusenciasProgramadas != null) { mdl_KRS_JornadasCabecera = null; } //Dias Festivos else if (mdl_KRS_DiasFestivos != null) { mdl_KRS_JornadasCabecera = null; } if (_lst_KRSS_Pausas != null) { bool bol_Encontro_Registro = false; DateTime dtt_Fecha_Anterior = new DateTime(_int_Anyo, _int_Mes, _int_Dia, 0, 0, 0).AddDays(-1); TimeSpan tms_HoraCambioDia_Anterior = new TimeSpan(0, 0, 0); //Si tiene JornadaCabecera el dia anterior, coger la hora de cambio de dia, para saber desde cuando hay que buscar los pausas if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null && _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Count() > 0) { KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas_AUXILIAR = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.Where(x => x.fechaDesde <= dtt_Fecha_Anterior && x.fechaHasta >= dtt_Fecha_Anterior).FirstOrDefault(); if (mdl_KRS_PresenciasProgramadas_AUXILIAR != null) { bol_Encontro_Registro = true; tms_HoraCambioDia_Anterior = mdl_KRS_PresenciasProgramadas_AUXILIAR.KRS_JornadasCabecera.horaCambioDia; } } //Jornada if (bol_Encontro_Registro == false && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera != null && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea != null && _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Count() > 0) { KRS_PerfilesLinea mdl_KRS_PerfilesLinea = _mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera.KRS_PerfilesLinea.Where(x => x.fechaDesde <= dtt_Fecha_Anterior && x.fechaHasta >= dtt_Fecha_Anterior).FirstOrDefault(); if (mdl_KRS_PerfilesLinea != null && mdl_KRS_PerfilesLinea.KRS_JornadasCabecera != null) { tms_HoraCambioDia_Anterior = mdl_KRS_PerfilesLinea.KRS_JornadasCabecera.horaCambioDia; } } //Fecha Hora Inicial DateTime dtt_FechaInicial_ABuscar = new DateTime(dtt_Fecha_Actual.Year, dtt_Fecha_Actual.Month, dtt_Fecha_Actual.Day, tms_HoraCambioDia_Anterior.Hours, tms_HoraCambioDia_Anterior.Minutes, 0); DateTime dtt_FechaFinal_ABuscar; //Si tiene JornadaCabecera y salta de dia if (mdl_KRS_JornadasCabecera != null) { //Recorrer el listado para saber si hay que saltar de dia int int_DiasASumar = mdl_KRS_JornadasCabecera.KRS_JornadasLinea.Where(m => m.saltaDia != null && m.saltaDia.Value).Count(); //Fecha y hora del Fin de jornada del dia anterior if (mdl_KRS_JornadasCabecera.horaCambioDia.Hours == 0 && mdl_KRS_JornadasCabecera.horaCambioDia.Minutes == 0) { dtt_FechaFinal_ABuscar = new DateTime(dtt_Fecha_Actual.AddDays(int_DiasASumar).Year, dtt_Fecha_Actual.AddDays(int_DiasASumar).Month, dtt_Fecha_Actual.AddDays(int_DiasASumar).Day, 23, 59, 59); } else { dtt_FechaFinal_ABuscar = new DateTime(dtt_Fecha_Actual.AddDays(int_DiasASumar).Year, dtt_Fecha_Actual.AddDays(int_DiasASumar).Month, dtt_Fecha_Actual.AddDays(int_DiasASumar).Day, mdl_KRS_JornadasCabecera.horaCambioDia.Hours, mdl_KRS_JornadasCabecera.horaCambioDia.Minutes, 59); } } else { dtt_FechaFinal_ABuscar = new DateTime(dtt_Fecha_Actual.Year, dtt_Fecha_Actual.Month, dtt_Fecha_Actual.Day, 23, 59, 59); } //Listado de Pausas lst_KRSS_Pausas = _lst_KRSS_Pausas.Where(x => x.fechaHora >= dtt_FechaInicial_ABuscar && x.fechaHora <= dtt_FechaFinal_ABuscar) .ToList(); } else { //Listado de Pausas lst_KRSS_Pausas = new List(); } } } catch (Exception ex) { Control_Errores.Errores_Log(ex.Message, ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_Pausas_PorEmpleadoJornada_Dia)); } finally { arr_ObjetoDevueltos[0] = lst_KRSS_Pausas; arr_ObjetoDevueltos[1] = mdl_KRS_JornadasCabecera; } return arr_ObjetoDevueltos; } #endregion #region Consulta detallada Por Jornada Empleado //Variables Generales private static KRS_Empleados_Datos g_obj_KRS_Empleados_Datos = new KRS_Empleados_Datos(); private static KRS_DiasFestivos_Datos g_obj_KRS_DiasFestivos_Datos = new KRS_DiasFestivos_Datos(); private static KRSS_Fichajes_Datos g_obj_KRSS_Fichajes_Datos = new KRSS_Fichajes_Datos(); public static List CargarDatos_ConsultaDetallada_JornadaEmpleado(DateTime _dtt_Inicio, DateTime _dtt_Fin, TimeSpan _tms_Inicio, TimeSpan _tms_Fin, List _lst_idEmpleados, long _lng_idEmpresa, List _lst_INTERNO_ComboBox_Modelo_PRESENCIASPROGRAMADAS, List _lst_INTERNO_ComboBox_Modelo_AUSENCIASPROGRAMADAS, bool _bol_DiasFestivos, List _lst_INTERNO_ComboBox_Modelo_JORNADA, List _lst_INTERNO_ComboBox_Modelo_HORASEXTRAS) { List g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo = null; try { //Contadores int int_DiasTrabajados = 0; int int_HorasTeoricas = 0; int int_MinutosTeoricos = 0; int int_HorasTeoricas_PorFecha = 0; int int_MinutosTeoricos_PorFecha = 0; int int_HorasReales = 0; int int_MinutosReales = 0; int int_HorasContabilizables = 0; int int_MinutosContabilizables = 0; int int_HorasContabilizables_PorFecha = 0; int int_MinutosContabilizables_PorFecha = 0; int int_DiasFetivos = 0; int int_TotalSegundos_Realizados = 0; int int_TotalSegundos_Reales = 0; int int_TotaSegundos_ARealizar = 0; int int_Saldo_Final_Minutos = 0; //Ausencias Programadas Dictionary dct_TotalAuseciasProgramadas_Horas_Contabilizables = new Dictionary(); Dictionary dct_TotalAuseciasProgramadas_Minutos_Contabilizables = new Dictionary(); Dictionary dct_TotalAuseciasProgramadas_Horas_NoContabilizables = new Dictionary(); Dictionary dct_TotalAuseciasProgramadas_Minutos_NoContabilizables = new Dictionary(); decimal dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha = 0; int int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha = 0; decimal dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha = 0; int int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha = 0; //Variables List lst_KRS_PresenciasProgramadas = null; List g_lst_idPresenciasProgramadas = new List(); List lst_KRS_AusenciasProgramadas = null; List g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo = new List(); List lst_KRS_PerfilesLinea = null; List lst_KRSS_Fichajes_RangoFechas = null; List lst_KRS_DiasFestivos = null; List lst_INTERNO_KRS_Empleados_Modelo = null; KRS_JornadasCabecera mdl_KRS_JornadasCabecera = new KRS_JornadasCabecera(); KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas = new KRS_PresenciasProgramadas(); KRS_DiasFestivos mdl_KRS_DiasFestivos = new KRS_DiasFestivos(); List lst_KRS_AusenciasProgramadas_Busqueda = null; GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa = null; KRS_PerfilesCabecera mdl_KRS_PerfilesCabecera = null; DateTime dtt_HoraCambioDia = new DateTime(1900, 1, 1, 0, 0, 0); //Fechas DateTime dtt_Inicio = _dtt_Inicio; DateTime dtt_Fin = _dtt_Fin; TimeSpan tms_Inicio = _tms_Inicio; TimeSpan tms_Fin = _tms_Fin; //Listado de empleados seleccionados List lst_idEmpleados = _lst_idEmpleados; //Saber el idEjercicio de las fechas mdl_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(dtt_Inicio, _lng_idEmpresa); //Dias Festivos lst_KRS_DiasFestivos = g_obj_KRS_DiasFestivos_Datos.Obtener_ModeloListado_Por_Fechas(dtt_Inicio, dtt_Fin); //Obtenemos un listado de todos los empleados con sus relaciones lst_INTERNO_KRS_Empleados_Modelo = g_obj_KRS_Empleados_Datos.Obtener_Registros_Para_Listado(mdl_GEN_EjerciciosActivos_Empresa, lst_idEmpleados); //HORAS EXTRAS AUTORIZADAS KRS_HorasExtrasCalculadasCabecera_Datos obj_KRS_HorasExtrasCalculadasCabecera_Datos = new KRS_HorasExtrasCalculadasCabecera_Datos(); List lst_INTERNO_AUX_HorasExtrasTotal_Modelo_AUTORIZADAS_POREMPLEADO = obj_KRS_HorasExtrasCalculadasCabecera_Datos.Obtener_Totales(_lst_idEmpleados, new DateTime(_dtt_Inicio.Year, _dtt_Inicio.Month, _dtt_Inicio.Day, 0, 0, 0), new DateTime(_dtt_Fin.Year, _dtt_Fin.Month, _dtt_Fin.Day, 0, 0, 0)); //Fichajes de los empleados DateTime dtt_FechaHora_BuscarFichajes_Inicio = new DateTime(dtt_Inicio.Year, dtt_Inicio.Month, dtt_Inicio.Day, tms_Inicio.Hours, tms_Inicio.Minutes, tms_Inicio.Seconds); DateTime dtt_FechaHora_BuscarFichajes_Fin = new DateTime(dtt_Fin.Year, dtt_Fin.Month, dtt_Fin.Day, tms_Fin.Hours, tms_Fin.Minutes, tms_Fin.Seconds); dtt_FechaHora_BuscarFichajes_Fin = dtt_FechaHora_BuscarFichajes_Fin.AddDays(1);//Se le suma un dia, por si el ultimo dia tiene salto de dia lst_KRSS_Fichajes_RangoFechas = g_obj_KRSS_Fichajes_Datos.Obtener_ModeloListado_Por_EmpleadosFechaEmpresa(lst_idEmpleados, dtt_FechaHora_BuscarFichajes_Inicio, dtt_FechaHora_BuscarFichajes_Fin, _lng_idEmpresa); //Rellenar los dias del Listado ............................................................................................. g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo = new List(); //Recorrer los Empleados foreach (INTERNO_KRS_Empleados_Modelo mdl_INTERNO_KRS_Empleados_Modelo in lst_INTERNO_KRS_Empleados_Modelo) { int_DiasTrabajados = 0; int_HorasTeoricas = 0; int_MinutosTeoricos = 0; int_HorasTeoricas_PorFecha = 0; int_MinutosTeoricos_PorFecha = 0; //Ausencias dct_TotalAuseciasProgramadas_Horas_Contabilizables.Clear(); dct_TotalAuseciasProgramadas_Minutos_Contabilizables.Clear(); dct_TotalAuseciasProgramadas_Horas_NoContabilizables.Clear(); dct_TotalAuseciasProgramadas_Minutos_NoContabilizables.Clear(); dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha = 0; int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha = 0; dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha = 0; int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha = 0; int_HorasContabilizables = 0; int_MinutosContabilizables = 0; int_HorasContabilizables_PorFecha = 0; int_MinutosContabilizables_PorFecha = 0; int_DiasFetivos = 0; g_lst_idPresenciasProgramadas.Clear(); g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Clear(); //Rellenar las variables de listados ......................................................... lst_KRS_PresenciasProgramadas = mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null ? mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.ToList() : new List(); lst_KRS_AusenciasProgramadas = mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas != null ? mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.ToList() : new List(); mdl_KRS_PerfilesCabecera = mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera != null ? mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera : new KRS_PerfilesCabecera(); if (mdl_KRS_PerfilesCabecera.KRS_PerfilesLinea != null) { lst_KRS_PerfilesLinea = mdl_KRS_PerfilesCabecera.KRS_PerfilesLinea.ToList(); } if (lst_KRS_DiasFestivos == null) { lst_KRS_DiasFestivos = new List(); } if (lst_KRSS_Fichajes_RangoFechas == null) { lst_KRSS_Fichajes_RangoFechas = new List(); } //........................................................................................... bool bol_Termino = false; //Primero hago las Comprobaciones por si tiene Fecha de Baja ###################################################################### //Si la fecha de baja no es nula compruebo if (mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja != null) { //Si Tuviera fecha de Baja y fuera inferior a la fecha fin del filtro ponermos la de baja, //Sino se deja tal cual if (mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja < dtt_Fin) { dtt_FechaHora_BuscarFichajes_Fin = new DateTime(mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja.Value.Year, mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja.Value.Month, mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja.Value.Day, tms_Fin.Hours, tms_Fin.Minutes, tms_Fin.Seconds); } else { dtt_FechaHora_BuscarFichajes_Fin = new DateTime(dtt_Fin.Year, dtt_Fin.Month, dtt_Fin.Day, tms_Fin.Hours, tms_Fin.Minutes, tms_Fin.Seconds); } //Si la fecha de baja del empleado fue antes que la del comienzo del ejercicio en el que se encuentra, no muestro nada //O si la fecha del filtro es superior a la de baja tampoco muestro nada if (mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja < mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio || mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja < dtt_Inicio) { bol_Termino = true; } } else { dtt_FechaHora_BuscarFichajes_Fin = new DateTime(dtt_Fin.Year, dtt_Fin.Month, dtt_Fin.Day, tms_Fin.Hours, tms_Fin.Minutes, tms_Fin.Seconds); } // ############################################################################################################################ DateTime dtt_Fecha_Auxiliar = new DateTime(dtt_Inicio.Year, dtt_Inicio.Month, dtt_Inicio.Day); List lst_KRS_JornadasLinea_SaltosEndia = null; decimal dcm_HoraExtrasReales = 0m; decimal dcm_HoraExtrasReales_porConvenio = 0m; List lst_KRS_Empleados_Contratos_CargaDias = null; KRS_Empleados_Contratos_CargaDias mdl_KRS_Empleados_Contratos_CargaDias = null; while (!bol_Termino) { int_HorasTeoricas_PorFecha = 0; int_MinutosTeoricos_PorFecha = 0; int_HorasContabilizables_PorFecha = 0; int_MinutosContabilizables_PorFecha = 0; dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha = 0; int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha = 0; dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha = 0; int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha = 0; //Vaciar Variables mdl_KRS_JornadasCabecera = null; dtt_HoraCambioDia = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59); int_TotalSegundos_Reales = 0; int_TotaSegundos_ARealizar = 0; int_TotalSegundos_Realizados = 0; int int_Orden_JornadaLinea = 0; lst_KRS_Empleados_Contratos_CargaDias = null; mdl_KRS_Empleados_Contratos_CargaDias = null; //Buscar CargaDias if (mdl_INTERNO_KRS_Empleados_Modelo.KRS_Empleados_Contratos!=null && mdl_INTERNO_KRS_Empleados_Modelo.KRS_Empleados_Contratos.Count>0) { //Busco Contrato KRS_Empleados_Contratos mdl_KRS_Empleados_Contratos=mdl_INTERNO_KRS_Empleados_Modelo.KRS_Empleados_Contratos.Where(m => m.fechaDesde <= dtt_HoraCambioDia && (m.fechaHasta == null || m.fechaHasta.Value >= dtt_HoraCambioDia)).FirstOrDefault(); if (mdl_KRS_Empleados_Contratos!=null && mdl_KRS_Empleados_Contratos.KRS_Empleados_Contratos_CargaDias!=null) { lst_KRS_Empleados_Contratos_CargaDias=mdl_KRS_Empleados_Contratos.KRS_Empleados_Contratos_CargaDias.ToList(); } } //Tipo de Día //Presencia Programada if (lst_KRS_PresenciasProgramadas.Exists(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0))) { mdl_KRS_PresenciasProgramadas = lst_KRS_PresenciasProgramadas.Where(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0)).FirstOrDefault(); mdl_KRS_JornadasCabecera = mdl_KRS_PresenciasProgramadas.KRS_JornadasCabecera; if (mdl_KRS_PresenciasProgramadas.KRS_PresenciasProgramadasTipos != null) { if (_lst_INTERNO_ComboBox_Modelo_PRESENCIASPROGRAMADAS.Exists(m => m.Identificador.Equals(mdl_KRS_PresenciasProgramadas.idPresenciaProgramadaTipo.ToString()))) { g_lst_idPresenciasProgramadas.Add(mdl_KRS_PresenciasProgramadas.idPresenciaProgramadaTipo); } } //Tiempo a realizar if (mdl_KRS_JornadasCabecera != null) { int_HorasTeoricas += mdl_KRS_JornadasCabecera.tiempoTeorico.Hours; int_MinutosTeoricos += mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes; int_HorasTeoricas_PorFecha = mdl_KRS_JornadasCabecera.tiempoTeorico.Hours; int_MinutosTeoricos_PorFecha = mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes; int_TotaSegundos_ARealizar = (int_HorasTeoricas_PorFecha * 3600) + (int_MinutosTeoricos_PorFecha * 60); } } //Ausencia programada else if (lst_KRS_AusenciasProgramadas.Exists(x => x.fechaDesde >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && ( x.fechaHasta==null || ( x.fechaHasta !=null && x.fechaHasta.Value <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59) ) ) ) ) { lst_KRS_AusenciasProgramadas_Busqueda = lst_KRS_AusenciasProgramadas.Where(x => x.fechaDesde >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && ( x.fechaHasta == null || ( x.fechaHasta != null && x.fechaHasta.Value <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59) ) )).ToList(); if (lst_KRS_AusenciasProgramadas_Busqueda!=null && lst_KRS_AusenciasProgramadas_Busqueda.Count>0) { bool bol_HorasTeoricasEntro = false; foreach (KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas in lst_KRS_AusenciasProgramadas_Busqueda) { if (mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos != null) { //Buscar si existe ne le listado de tipos de ausencias la actual INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Ausencia = _lst_INTERNO_ComboBox_Modelo_AUSENCIASPROGRAMADAS.Where(m => m.Identificador.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo.ToString())).FirstOrDefault(); if (mdl_INTERNO_ComboBox_Modelo_Ausencia!=null) { //Buscar el Contrato if (lst_KRS_Empleados_Contratos_CargaDias != null && lst_KRS_Empleados_Contratos_CargaDias.Count > 0) { mdl_KRS_Empleados_Contratos_CargaDias = lst_KRS_Empleados_Contratos_CargaDias.Where(m => m.idAusenciaProgramadaTipo == mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo).FirstOrDefault(); } //Si tiene un Contrato para ese tipo de Ausencia if (mdl_KRS_Empleados_Contratos_CargaDias != null) { //Si la Ausencia es por horas mirar la jornadaCabera if (lst_KRS_PerfilesLinea.Exists(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0))) { mdl_KRS_JornadasCabecera = lst_KRS_PerfilesLinea.Where(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0)).FirstOrDefault().KRS_JornadasCabecera; } //Tiempo a realizar int int_TotalHoras_ARealizar = 0; int int_TotalMinutos_ARealizar = 0; int_TotaSegundos_ARealizar = 0; if (mdl_KRS_JornadasCabecera != null) { int_TotalHoras_ARealizar = mdl_KRS_JornadasCabecera.tiempoTeorico.Hours; int_TotalMinutos_ARealizar = mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes; if (bol_HorasTeoricasEntro == false) { int_HorasTeoricas += mdl_KRS_JornadasCabecera.tiempoTeorico.Hours; int_MinutosTeoricos += mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes; int_HorasTeoricas_PorFecha = mdl_KRS_JornadasCabecera.tiempoTeorico.Hours; int_MinutosTeoricos_PorFecha = mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes; bol_HorasTeoricasEntro = true; } int_TotaSegundos_ARealizar = (int_TotalHoras_ARealizar * 3600) + (int_TotalMinutos_ARealizar*60); } //Tipo horas if (mdl_KRS_Empleados_Contratos_CargaDias.horas!=null && mdl_KRS_Empleados_Contratos_CargaDias.horas.Value) { decimal dcm_TotalHoras_AUX = (mdl_KRS_AusenciasProgramadas.totalHoras != null ? mdl_KRS_AusenciasProgramadas.totalHoras.Value : 0m); //Si la hora desde es 0 y la hasta es 23 se pone en total horas las horas del tiempo teorico if ((int_TotalHoras_ARealizar + int_TotalMinutos_ARealizar) > 0 && mdl_KRS_AusenciasProgramadas.fechaDesde.Hour == 0 && mdl_KRS_AusenciasProgramadas.fechaDesde.Minute == 0 && mdl_KRS_AusenciasProgramadas.fechaHasta.Value.Hour == 23 && mdl_KRS_AusenciasProgramadas.fechaHasta.Value.Minute == 59) { //Buscar el tiempoTeorico para ese dia dcm_TotalHoras_AUX = Funciones.RedondearDecimal(decimal.Parse(int_TotalHoras_ARealizar.ToString()), 2) + Funciones.RedondearDecimal(decimal.Parse((int_TotalMinutos_ARealizar > 0 ? (decimal.Parse(int_TotalMinutos_ARealizar.ToString()) / 60m): 0).ToString()), 2); } if (g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Count>0 && g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Exists(m=>m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo[g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.IndexOf(g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Where(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo)).FirstOrDefault())].TotalHoras+= dcm_TotalHoras_AUX; } else { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo, mdl_INTERNO_ComboBox_Modelo_Ausencia.Descripcion, 0, dcm_TotalHoras_AUX, mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo)); } //Contablizadas if (mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo!=null && mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value) { dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha = dcm_TotalHoras_AUX; } //No contablizadas else { dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha = dcm_TotalHoras_AUX; } } //Tipo Dias else { //Dias habiles if (mdl_KRS_Empleados_Contratos_CargaDias.tipoDia.Equals(Variables_KairosPRO.G_MDL_TIPODIA_HABIL.Codigo)) { //Obviar Sabados,Domingos y Festivos if (lst_KRS_DiasFestivos == null || !lst_KRS_DiasFestivos.Exists(m => m.fechaDesde <= dtt_Fecha_Auxiliar && m.fechaHasta >= dtt_Fecha_Auxiliar)) { if (!dtt_Fecha_Auxiliar.DayOfWeek.Equals(DayOfWeek.Saturday) && !dtt_Fecha_Auxiliar.DayOfWeek.Equals(DayOfWeek.Sunday)) { if (g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Count > 0 && g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Exists(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo[g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.IndexOf(g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Where(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo)).FirstOrDefault())].TotalDias += 1; } else { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo, mdl_INTERNO_ComboBox_Modelo_Ausencia.Descripcion, 1, 0, mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo)); } //Contablizadas if (mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo != null && mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value) { int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha = 1; } //No contablizadas else { int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha = 1; } } } } //Dias Laborables else if (mdl_KRS_Empleados_Contratos_CargaDias.tipoDia.Equals(Variables_KairosPRO.G_MDL_TIPODIA_LABORABLE.Codigo)) { //Obviar Domingos y Festivos if (lst_KRS_DiasFestivos == null || !lst_KRS_DiasFestivos.Exists(m => m.fechaDesde <= dtt_Fecha_Auxiliar && m.fechaHasta >= dtt_Fecha_Auxiliar)) { if (!dtt_Fecha_Auxiliar.DayOfWeek.Equals(DayOfWeek.Sunday)) { if (g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Count > 0 && g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Exists(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo[g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.IndexOf(g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Where(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo)).FirstOrDefault())].TotalDias += 1; } else { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo, mdl_INTERNO_ComboBox_Modelo_Ausencia.Descripcion, 1, 0, mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo)); } //Contablizadas if (mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo != null && mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value) { int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha = 1; } //No contablizadas else { int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha = 1; } } } } //Dias naturales else { if (g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Count > 0 && g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Exists(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo[g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.IndexOf(g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Where(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo)).FirstOrDefault())].TotalDias += 1; } else { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo, mdl_INTERNO_ComboBox_Modelo_Ausencia.Descripcion, 1, 0, mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo)); } //Contablizadas if (mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo != null && mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value) { int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha = 1; } //No contablizadas else { int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha = 1; } } } } //Dias naturales else { if (g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Count > 0 && g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Exists(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo[g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.IndexOf(g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Where(m => m.IdAusenciaProgramadaTipo.Equals(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo)).FirstOrDefault())].TotalDias += 1; } else { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo(mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo, mdl_INTERNO_ComboBox_Modelo_Ausencia.Descripcion, 1, 0, mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo)); } //Contablizadas if (mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo != null && mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value) { int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha = 1; } //No contablizadas else { int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha = 1; } } } } } } } //Dias Festivos else if (lst_KRS_DiasFestivos.Exists(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0))) { mdl_KRS_DiasFestivos = lst_KRS_DiasFestivos.Where(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0)).FirstOrDefault(); int_DiasFetivos += 1; } //Jornada else if (lst_KRS_PerfilesLinea.Exists(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0))) { mdl_KRS_JornadasCabecera = lst_KRS_PerfilesLinea.Where(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0)).FirstOrDefault().KRS_JornadasCabecera; //Tiempo a realizar if (mdl_KRS_JornadasCabecera!=null) { int_HorasTeoricas += mdl_KRS_JornadasCabecera.tiempoTeorico.Hours; int_MinutosTeoricos += mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes; int_HorasTeoricas_PorFecha = mdl_KRS_JornadasCabecera.tiempoTeorico.Hours; int_MinutosTeoricos_PorFecha = mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes; int_TotaSegundos_ARealizar = (int_HorasTeoricas_PorFecha * 3600) + (int_MinutosTeoricos_PorFecha * 60); } } //Nada else { } //Jornada if (mdl_KRS_JornadasCabecera != null) { //Si la hora de cambio de dia es es mayor que 00:00 se pone ................... if (mdl_KRS_JornadasCabecera.horaCambioDia.TotalHours > 0) { dtt_HoraCambioDia = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, mdl_KRS_JornadasCabecera.horaCambioDia.Hours, mdl_KRS_JornadasCabecera.horaCambioDia.Minutes, mdl_KRS_JornadasCabecera.horaCambioDia.Seconds); } //Ver si tiene JornadaLinea if (mdl_KRS_JornadasCabecera.KRS_JornadasLinea != null) { lst_KRS_JornadasLinea_SaltosEndia = mdl_KRS_JornadasCabecera.KRS_JornadasLinea.Where(m => m.saltaDia != null && m.saltaDia != false).OrderBy(x => x.orden).ToList(); if (lst_KRS_JornadasLinea_SaltosEndia != null && lst_KRS_JornadasLinea_SaltosEndia.Count > 0) { int_Orden_JornadaLinea = lst_KRS_JornadasLinea_SaltosEndia.FirstOrDefault().orden.Value; } } } //Sumar fichajes si los hubiera para ese dia DateTime dtt_Fecha_Auxiliar_Fin = new DateTime(dtt_FechaHora_BuscarFichajes_Fin.Year, dtt_FechaHora_BuscarFichajes_Fin.Month, dtt_FechaHora_BuscarFichajes_Fin.Day, tms_Fin.Hours, tms_Fin.Minutes, 0); //Primer salto de día DateTime? dtt_SaltoDeDia = null; if (lst_KRS_JornadasLinea_SaltosEndia != null && lst_KRS_JornadasLinea_SaltosEndia.Count > 0) { dtt_SaltoDeDia = new DateTime(dtt_Fecha_Auxiliar.AddDays(+1).Year, dtt_Fecha_Auxiliar.AddDays(+1).Month, dtt_Fecha_Auxiliar.AddDays(+1).Day, lst_KRS_JornadasLinea_SaltosEndia.FirstOrDefault().hora.Hours, lst_KRS_JornadasLinea_SaltosEndia.FirstOrDefault().hora.Minutes, 0); dtt_HoraCambioDia = dtt_HoraCambioDia.AddDays(+1); if (dtt_FechaHora_BuscarFichajes_Fin < dtt_SaltoDeDia) { dtt_Fecha_Auxiliar_Fin = dtt_SaltoDeDia.Value; } } List lst_KRSS_Fichajes_DelDia = lst_KRSS_Fichajes_RangoFechas.Where(x => ((x.fechaHora >= dtt_Fecha_Auxiliar) && (x.fechaHora <= dtt_Fecha_Auxiliar_Fin)) && (x.anulado == null) && (x.idEmpleado.Equals(mdl_INTERNO_KRS_Empleados_Modelo.id))).ToList(); string str_TipoEntradaSalida_QueSeEspera = "E"; DateTime dtt_FechaHoraEntrada = dtt_Fecha_Auxiliar; DateTime dtt_FechaHoraSalida = dtt_Fecha_Auxiliar; //Sumar tiempo efectivo List lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo = null; if (lst_KRSS_Fichajes_DelDia != null && lst_KRSS_Fichajes_DelDia.Count > 0) { int_TotalSegundos_Realizados = 0; int_TotalSegundos_Reales = 0; lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo = null; //Ver si tiene que contar los minutos, segun el perfil linea si tiene marcado contabilizado para esta hora ......... if (mdl_KRS_JornadasCabecera != null && mdl_KRS_JornadasCabecera.KRS_JornadasLinea != null && mdl_KRS_JornadasCabecera.KRS_JornadasLinea.Count > 0) { //Instanciar el Listado lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo = new List(); int int_HoraAnterior = -1; DateTime dtt_FechaHora_JornadaLinea = DateTime.Now; foreach (KRS_JornadasLinea mdl_KRS_JornadasLinea in mdl_KRS_JornadasCabecera.KRS_JornadasLinea) { dtt_FechaHora_JornadaLinea = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, mdl_KRS_JornadasLinea.hora.Hours, mdl_KRS_JornadasLinea.hora.Minutes, mdl_KRS_JornadasLinea.hora.Seconds); //Si la Hora anterior es mayor que la hora actual, cambio de dia if (int_HoraAnterior > mdl_KRS_JornadasLinea.hora.Hours) { dtt_FechaHora_JornadaLinea = dtt_FechaHora_JornadaLinea.AddDays(1); } int_HoraAnterior = mdl_KRS_JornadasLinea.hora.Hours; //Añadir al Listado lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Add(new INTERNO_AUX_TiempoRealizadoEfectivo_Modelo(dtt_FechaHora_JornadaLinea, mdl_KRS_JornadasLinea.sumaTiempo)); } } //................................................................................................................... //Recorrer los Fichajes del Dia foreach (KRSS_Fichajes mdl_KRSS_Fichajes in lst_KRSS_Fichajes_DelDia.OrderBy(m => m.fechaHora)) { if (dtt_HoraCambioDia > mdl_KRSS_Fichajes.fechaHora) { //Entrada if (str_TipoEntradaSalida_QueSeEspera.Equals("E") && mdl_KRSS_Fichajes.entradaSalida.Equals("E")) { dtt_FechaHoraEntrada = mdl_KRSS_Fichajes.fechaHora; //............................................ str_TipoEntradaSalida_QueSeEspera = "S"; } //Salida else if (str_TipoEntradaSalida_QueSeEspera.Equals("S") && mdl_KRSS_Fichajes.entradaSalida.Equals("S")) { dtt_FechaHoraSalida = mdl_KRSS_Fichajes.fechaHora; while (dtt_FechaHoraSalida > dtt_FechaHoraEntrada) { //Contar el tiempo realizado efectivo ......................................... if (lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo != null) { for (int int_Contador = 0; int_Contador < lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Count; int_Contador++) { if (lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador].SumaTiempoTeorico) { //Si estoy en el ultimo no sumo if (int_Contador == lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Count - 1) { break; } else if (dtt_FechaHoraEntrada >= lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador].FechaHora && dtt_FechaHoraEntrada < lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador + 1].FechaHora) { int_TotalSegundos_Realizados += 60; } } } } //............................................................................. int_TotalSegundos_Reales += 60; dtt_FechaHoraEntrada = dtt_FechaHoraEntrada.AddMinutes(1); } //............................................ str_TipoEntradaSalida_QueSeEspera = "E"; //Añado un dia trabajado int_DiasTrabajados += 1; } } else { break; } } //Si esta esperando salida y no hay ninguna se presupone que se pone la de cambio de dia if (str_TipoEntradaSalida_QueSeEspera.Equals("S")) { dtt_FechaHoraSalida = dtt_HoraCambioDia; while (dtt_FechaHoraSalida > dtt_FechaHoraEntrada) { //Contar el tiempo realizado efectivo ......................................... if (lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo != null) { for (int int_Contador = 0; int_Contador < lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Count; int_Contador++) { if (lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador].SumaTiempoTeorico) { //Si estoy en el ultimo no sumo if (int_Contador == lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Count - 1) { break; } else if (dtt_FechaHoraEntrada >= lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador].FechaHora && dtt_FechaHoraEntrada < lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador + 1].FechaHora) { int_TotalSegundos_Realizados += 60; } } } } //............................................................................. int_TotalSegundos_Reales += 60; dtt_FechaHoraEntrada = dtt_FechaHoraEntrada.AddMinutes(1); } //Añado un dia trabajado int_DiasTrabajados += 1; } } #region AusenciasProgramadas int int_DiasAusenciasProgramadas_CONTABILIZADAS = 0; int int_HorasAusenciasProgramadas_CONTABILIZADAS = 0; int int_MinutosAusenciasProgramadas_CONTABILIZADAS = 0; int int_DiasAusenciasProgramadas_NOCONTABILIZADAS = 0; int int_HorasAusenciasProgramadas_NOCONTABILIZADAS = 0; int int_MinutosAusenciasProgramadas_NOCONTABILIZADAS = 0; #region CONTABILIZADAS //Horas y Dias if (dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha > 0 && int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha>0) { string[] arr_HorasMinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha.ToString().Split(','); int_HorasAusenciasProgramadas_CONTABILIZADAS = int.Parse(arr_HorasMinutosAusenciasProgramadas[0]); decimal dcm_MinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha - int_HorasAusenciasProgramadas_CONTABILIZADAS; if (dcm_MinutosAusenciasProgramadas > 0) { int_MinutosAusenciasProgramadas_CONTABILIZADAS = int.Parse(Funciones.RedondearDecimal(dcm_MinutosAusenciasProgramadas * 60, 0).ToString()); } //Sumar los Dias a las horas int_HorasAusenciasProgramadas_CONTABILIZADAS += (int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha * 24); } //Solo Horas else if (dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha > 0 && int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha == 0) { string[] arr_HorasMinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha.ToString().Split(','); int_HorasAusenciasProgramadas_CONTABILIZADAS = int.Parse(arr_HorasMinutosAusenciasProgramadas[0]); decimal dcm_MinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha - int_HorasAusenciasProgramadas_CONTABILIZADAS; if (dcm_MinutosAusenciasProgramadas > 0) { int_MinutosAusenciasProgramadas_CONTABILIZADAS = int.Parse(Funciones.RedondearDecimal(dcm_MinutosAusenciasProgramadas * 60, 0).ToString()); } } //Solo Dias else { int_DiasAusenciasProgramadas_CONTABILIZADAS = int_TotalAuseciasProgramadas_Dias_Contabilizables_PorFecha; } #endregion #region NOCONTABILIZADAS //Horas y Dias if (dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha > 0 && int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha > 0) { string[] arr_HorasMinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha.ToString().Split(','); int_HorasAusenciasProgramadas_NOCONTABILIZADAS = int.Parse(arr_HorasMinutosAusenciasProgramadas[0]); decimal dcm_MinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha - int_HorasAusenciasProgramadas_NOCONTABILIZADAS; if (dcm_MinutosAusenciasProgramadas > 0) { int_MinutosAusenciasProgramadas_NOCONTABILIZADAS = int.Parse(Funciones.RedondearDecimal(dcm_MinutosAusenciasProgramadas * 60, 0).ToString()); } //Sumar los Dias a las horas int_HorasAusenciasProgramadas_NOCONTABILIZADAS += (int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha * 24); } //Solo Horas else if (dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha > 0 && int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha == 0) { string[] arr_HorasMinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha.ToString().Split(','); int_HorasAusenciasProgramadas_NOCONTABILIZADAS = int.Parse(arr_HorasMinutosAusenciasProgramadas[0]); decimal dcm_MinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_NoContabilizables_PorFecha - int_HorasAusenciasProgramadas_NOCONTABILIZADAS; if (dcm_MinutosAusenciasProgramadas > 0) { int_MinutosAusenciasProgramadas_NOCONTABILIZADAS = int.Parse(Funciones.RedondearDecimal(dcm_MinutosAusenciasProgramadas * 60, 0).ToString()); } } //Solo Dias else { int_DiasAusenciasProgramadas_NOCONTABILIZADAS = int_TotalAuseciasProgramadas_Dias_NoContabilizables_PorFecha; } #endregion //Rellenar Diccionarios #endregion #region Tiempo Real int int_Horas_Real = (int_TotalSegundos_Reales / 3600); int int_Minutos_Real = ((int_TotalSegundos_Reales - int_Horas_Real * 3600) / 60); int_HorasReales += int_Horas_Real; int_MinutosReales += int_Minutos_Real; #endregion #region Tiempo Realizado Efectivo int int_Horas_ContabilizablesEfectivas = (int_TotalSegundos_Realizados / 3600); int int_Minutos_ContabilizablesEfectivos = ((int_TotalSegundos_Realizados - int_Horas_ContabilizablesEfectivas * 3600) / 60); int_HorasContabilizables += int_Horas_ContabilizablesEfectivas; int_MinutosContabilizables += int_Minutos_ContabilizablesEfectivos; int_HorasContabilizables_PorFecha = int_Horas_ContabilizablesEfectivas; int_MinutosContabilizables_PorFecha =(int_Minutos_ContabilizablesEfectivos + ((int_HorasAusenciasProgramadas_CONTABILIZADAS * 60) + int_MinutosAusenciasProgramadas_CONTABILIZADAS)); int int_HorasContabilizables_PorFecha_Calculadas_deMinutos = int_MinutosContabilizables_PorFecha / 60;//Calculo cuantas horas hay en estos minutos int_HorasContabilizables_PorFecha += int_HorasContabilizables_PorFecha_Calculadas_deMinutos;//Y se la sumo a las horas calculadas int_MinutosContabilizables_PorFecha = int_MinutosContabilizables_PorFecha % 60;//Obtengo los minutos que sobran #endregion #region Horas Extras reales if (lst_KRSS_Fichajes_DelDia!=null && lst_KRSS_Fichajes_DelDia.Count>0) { DateTime dtt_FechaSinHoras = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0); DateTime dtt_Fecha_FinDia = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59); List lst_KRS_KRS_HorasExtrasCalculadasLineas = Funciones_KairosPRO.HorasExtras_CalcularLineas(dtt_FechaSinHoras, lst_KRSS_Fichajes_DelDia.Where(m => m.fechaHora >= dtt_FechaSinHoras && m.fechaHora <= dtt_Fecha_FinDia).ToList(), lst_KRS_DiasFestivos, mdl_INTERNO_KRS_Empleados_Modelo, true, null, (mdl_INTERNO_KRS_Empleados_Modelo.idHoraExtraCabecera != null ? mdl_INTERNO_KRS_Empleados_Modelo.idHoraExtraCabecera.Value : -1), 0, -1, "" ); if (lst_KRS_KRS_HorasExtrasCalculadasLineas != null && lst_KRS_KRS_HorasExtrasCalculadasLineas.Count > 0) { //horas Reales dcm_HoraExtrasReales += lst_KRS_KRS_HorasExtrasCalculadasLineas.Sum(m => m.horasTotalesReales); //horas Reales por convenio dcm_HoraExtrasReales_porConvenio += lst_KRS_KRS_HorasExtrasCalculadasLineas.Sum(m => m.horasTotalesCalculadas); } } #endregion #region Saldo if (lst_INTERNO_AUX_HorasExtrasTotal_Modelo_AUTORIZADAS_POREMPLEADO != null && lst_INTERNO_AUX_HorasExtrasTotal_Modelo_AUTORIZADAS_POREMPLEADO.Count > 0) { INTERNO_AUX_HorasExtrasTotal_Modelo mdl_INTERNO_AUX_HorasExtrasTotal_Modelo = lst_INTERNO_AUX_HorasExtrasTotal_Modelo_AUTORIZADAS_POREMPLEADO.Where(m => m.Fecha.Date == dtt_Fecha_Auxiliar.Date && m.idEmpleado == mdl_INTERNO_KRS_Empleados_Modelo.id).FirstOrDefault(); if (mdl_INTERNO_AUX_HorasExtrasTotal_Modelo != null) { if (mdl_INTERNO_AUX_HorasExtrasTotal_Modelo.HorasExtra_Real == 0 && mdl_INTERNO_AUX_HorasExtrasTotal_Modelo.HorasExtra_Convertidas == 0) { int_Saldo_Final_Minutos += (((int_HorasContabilizables_PorFecha * 60) + (int_MinutosContabilizables_PorFecha)) - ((int_HorasTeoricas_PorFecha * 60) + (int_MinutosTeoricos_PorFecha % 60))); } } else { #region Ausencias int int_Ausencias_Segundos = 0; string[] arr_HorasMinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha.ToString().Split(','); int_HorasAusenciasProgramadas_CONTABILIZADAS = int.Parse(arr_HorasMinutosAusenciasProgramadas[0]); decimal dcm_MinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha - int_HorasAusenciasProgramadas_CONTABILIZADAS; if (dcm_MinutosAusenciasProgramadas > 0) { int_MinutosAusenciasProgramadas_CONTABILIZADAS = int.Parse(Funciones.RedondearDecimal(dcm_MinutosAusenciasProgramadas * 60, 0).ToString()); } int_Ausencias_Segundos = (int_HorasAusenciasProgramadas_CONTABILIZADAS * 3600) + (int_MinutosAusenciasProgramadas_CONTABILIZADAS * 60); #endregion if (int_TotalSegundos_Realizados > 0) { int int_TotalSegundos_Saldo = int_TotalSegundos_Realizados - (int_TotaSegundos_ARealizar - int_Ausencias_Segundos); int_Saldo_Final_Minutos += (int_TotalSegundos_Saldo / 60); } // int_Saldo_Final_Minutos += (((int_HorasContabilizables_PorFecha * 60) + (int_MinutosContabilizables_PorFecha)) - ((int_HorasTeoricas_PorFecha * 60) + (int_MinutosTeoricos_PorFecha % 60))); } } else { #region Ausencias int int_Ausencias_Segundos = 0; string[] arr_HorasMinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha.ToString().Split(','); int_HorasAusenciasProgramadas_CONTABILIZADAS = int.Parse(arr_HorasMinutosAusenciasProgramadas[0]); decimal dcm_MinutosAusenciasProgramadas = dcm_TotalAuseciasProgramadas_Horas_Contabilizables_PorFecha - int_HorasAusenciasProgramadas_CONTABILIZADAS; if (dcm_MinutosAusenciasProgramadas > 0) { int_MinutosAusenciasProgramadas_CONTABILIZADAS = int.Parse(Funciones.RedondearDecimal(dcm_MinutosAusenciasProgramadas * 60, 0).ToString()); } int_Ausencias_Segundos = (int_HorasAusenciasProgramadas_CONTABILIZADAS * 3600) + (int_MinutosAusenciasProgramadas_CONTABILIZADAS * 60); #endregion if (int_TotalSegundos_Realizados > 0) { int int_TotalSegundos_Saldo = int_TotalSegundos_Realizados - (int_TotaSegundos_ARealizar - int_Ausencias_Segundos); int_Saldo_Final_Minutos += (int_TotalSegundos_Saldo / 60); } } #endregion //Añadir dia dtt_Fecha_Auxiliar = dtt_Fecha_Auxiliar.AddDays(1); if (dtt_Fecha_Auxiliar > dtt_Fecha_Auxiliar_Fin) { bol_Termino = true; } } //RESULTADOS ############################################################################################################### #region AusenciasProgramadas int int_TotalAuseciasProgramadas_Horas_Contabilizables = 0; int int_TotalAuseciasProgramadas_Minutos_Contabilizables = 0; int int_TotalAuseciasProgramadas_Horas_NoContabilizables = 0; int int_TotalAuseciasProgramadas_Minutos_NoContabilizables = 0; foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo in _lst_INTERNO_ComboBox_Modelo_AUSENCIASPROGRAMADAS) { INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo=g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.Where(m => m.IdAusenciaProgramadaTipo.ToString() == mdl_INTERNO_ComboBox_Modelo.Identificador).FirstOrDefault(); if (mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo!=null) { //Si tiene Horas y dias se pone todo como TimeSpan, conviertiendo los dias en horas if (mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalDias>0 && mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalHoras>0) { string[] arr_HorasMinutosAusenciasProgramadas = mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalHoras.ToString().Split(','); int int_HorasAusenciasProgramadas = int.Parse(arr_HorasMinutosAusenciasProgramadas[0]); int int_MinutosAusenciasProgramadas = 0; decimal dcm_MinutosAusenciasProgramadas = mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalHoras - int_HorasAusenciasProgramadas; if (dcm_MinutosAusenciasProgramadas > 0) { int_MinutosAusenciasProgramadas = int.Parse(Funciones.RedondearDecimal(dcm_MinutosAusenciasProgramadas * 60, 0).ToString()); } //Sumar los Dias a las horas int_HorasAusenciasProgramadas += (mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalDias * 24); g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_AUSENCIASPROGRAMADAS + ": " + mdl_INTERNO_ComboBox_Modelo.Descripcion, string.Format("{0:00}", int_HorasAusenciasProgramadas) + ":" + string.Format("{0:00}", int_MinutosAusenciasProgramadas), false, Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_SOLICITUDESVARIAS.Codigo)); if (mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.ContabilizarTiempo!=null && mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.ContabilizarTiempo.Value) { int_TotalAuseciasProgramadas_Horas_Contabilizables += int_HorasAusenciasProgramadas; int_TotalAuseciasProgramadas_Minutos_Contabilizables += int_MinutosAusenciasProgramadas; } else { int_TotalAuseciasProgramadas_Horas_NoContabilizables += int_HorasAusenciasProgramadas; int_TotalAuseciasProgramadas_Minutos_NoContabilizables += int_MinutosAusenciasProgramadas; } } //si solo tiene horas se pone como TimeSpan else if (mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalDias == 0 && mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalHoras > 0) { string[] arr_HorasMinutosAusenciasProgramadas = mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalHoras.ToString().Split(','); int int_HorasAusenciasProgramadas = int.Parse(arr_HorasMinutosAusenciasProgramadas[0]); int int_MinutosAusenciasProgramadas = 0; decimal dcm_MinutosAusenciasProgramadas = mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalHoras - int_HorasAusenciasProgramadas; if (dcm_MinutosAusenciasProgramadas > 0) { int_MinutosAusenciasProgramadas = int.Parse(Funciones.RedondearDecimal(dcm_MinutosAusenciasProgramadas * 60, 0).ToString()); } g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_AUSENCIASPROGRAMADAS + ": " + mdl_INTERNO_ComboBox_Modelo.Descripcion, string.Format("{0:00}", int_HorasAusenciasProgramadas) + ":" + string.Format("{0:00}", int_MinutosAusenciasProgramadas),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_SOLICITUDESVARIAS.Codigo)); if (mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.ContabilizarTiempo != null && mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.ContabilizarTiempo.Value) { int_TotalAuseciasProgramadas_Horas_Contabilizables += int_HorasAusenciasProgramadas; int_TotalAuseciasProgramadas_Minutos_Contabilizables += int_MinutosAusenciasProgramadas; } else { int_TotalAuseciasProgramadas_Horas_NoContabilizables += int_HorasAusenciasProgramadas; int_TotalAuseciasProgramadas_Minutos_NoContabilizables += int_MinutosAusenciasProgramadas; } //Restar horas si fueran contabilizables //if () //{ //} } //Si solo tiene dias se pone como int else if (mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalDias > 0 && mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalHoras == 0) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_AUSENCIASPROGRAMADAS + ": " + mdl_INTERNO_ComboBox_Modelo.Descripcion, mdl_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo.TotalDias.ToString(),true,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_SOLICITUDESVARIAS.Codigo)); } } else { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_AUSENCIASPROGRAMADAS + ": " + mdl_INTERNO_ComboBox_Modelo.Descripcion, "0",true,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_SOLICITUDESVARIAS.Codigo)); } } #endregion #region PresenciasProgramadas int int_Contador_PresenciasProgramadas = 0; foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo in _lst_INTERNO_ComboBox_Modelo_PRESENCIASPROGRAMADAS) { int_Contador_PresenciasProgramadas = g_lst_idPresenciasProgramadas.Count > 0 ? g_lst_idPresenciasProgramadas.Where(m => m.Equals(Convert.ToUInt32(mdl_INTERNO_ComboBox_Modelo.Identificador))).Count() : 0; g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_PRESENCIASPROGRAMADAS + ": " + mdl_INTERNO_ComboBox_Modelo.Descripcion, int_Contador_PresenciasProgramadas.ToString(),false,"")); } #endregion #region DiasFestivos if (_bol_DiasFestivos) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_DIASFESTIVOS, int_DiasFetivos.ToString(),false,"")); } #endregion #region Dias Trabajados if (_lst_INTERNO_ComboBox_Modelo_JORNADA.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_DIASTRABAJADOS.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_DIASTRABAJADOS, int_DiasTrabajados.ToString(),true,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_DIASTRABAJADOS.Codigo)); } #endregion #region Horas Teóricas int int_HorasTeoricasCalculadas_deMinutos = int_MinutosTeoricos / 60;//Calculo cuantas horas hay en estos minutos int_HorasTeoricas += int_HorasTeoricasCalculadas_deMinutos;//Y se la sumo a las horas calculadas int int_MinutosTeoricosCalculados = int_MinutosTeoricos % 60;//Obtengo los minutos que sobran if (_lst_INTERNO_ComboBox_Modelo_JORNADA.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASTEORICAS.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASTEORICAS, int_HorasTeoricas.ToString() + ":" + string.Format("{0:00}", int_MinutosTeoricosCalculados),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_HORASTEORICAS.Codigo)); } #endregion #region Horas Reales int int_HorasRealesCalculadas_deMinutos = int_MinutosReales / 60;//Calculo cuantas horas hay en estos minutos int_HorasReales += int_HorasRealesCalculadas_deMinutos;//Y se la sumo a las horas calculadas int int_MinutosRealesCalculados = int_MinutosReales % 60;//Obtengo los minutos que sobran if (_lst_INTERNO_ComboBox_Modelo_JORNADA.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASREALES.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASREALES, int_HorasReales.ToString() + ":" + string.Format("{0:00}", int_MinutosRealesCalculados),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_HORASREALES.Codigo)); } #endregion #region Horas Contabilizables int int_MinutosContabilizables_Finales_calculados = (int_MinutosContabilizables + ((int_TotalAuseciasProgramadas_Horas_Contabilizables * 60) + int_TotalAuseciasProgramadas_Minutos_Contabilizables)); int int_HorasContabilizablesCalculadas_deMinutos = int_MinutosContabilizables_Finales_calculados / 60;//Calculo cuantas horas hay en estos minutos int_HorasContabilizables += int_HorasContabilizablesCalculadas_deMinutos;//Y se la sumo a las horas calculadas int int_MinutoscontabilizablesCalculados = int_MinutosContabilizables_Finales_calculados % 60;//Obtengo los minutos que sobran if (_lst_INTERNO_ComboBox_Modelo_JORNADA.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASCONTABILIZABLES.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASCONTABILIZABLES, int_HorasContabilizables.ToString() + ":" + string.Format("{0:00}", int_MinutoscontabilizablesCalculados),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_HORASCONTABILIZABLES.Codigo)); } #endregion #region Saldo int int_Saldo_Horas_Calculadas = int_Saldo_Final_Minutos / 60; int int_Saldo_Minutos_Calculados = int_Saldo_Final_Minutos % 60;//Obtengo los minutos que sobran if (_lst_INTERNO_ComboBox_Modelo_JORNADA.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_SALDO.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_SALDO, ((int_Saldo_Minutos_Calculados < 0 && int_Saldo_Horas_Calculadas >= 0) ? "-" : "") + (int_Saldo_Horas_Calculadas).ToString() + ":" + string.Format("{0:00}", (int_Saldo_Minutos_Calculados < 0 ? int_Saldo_Minutos_Calculados * -1 : int_Saldo_Minutos_Calculados)),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_SALDO.Codigo)); } #endregion #region Horas Extras reales if (_lst_INTERNO_ComboBox_Modelo_HORASEXTRAS.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASEXTRAS_REALES.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASEXTRAS_REALES, Funciones_KairosPRO.Convertir_Horas_A_String(dcm_HoraExtrasReales),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_HORASEXTRAS_REALES.Codigo)); } #endregion #region Horas Extras reales por convenio if (_lst_INTERNO_ComboBox_Modelo_HORASEXTRAS.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASEXTRAS_REALES_CONVENIO.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASEXTRAS_REALES_PORCONVENIO, Funciones_KairosPRO.Convertir_Horas_A_String(dcm_HoraExtrasReales_porConvenio),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_HORASEXTRAS_REALES_CONVENIO.Codigo)); } #endregion //HORAS EXTRAS DEL EMPLEADO decimal dcm_HorasExtrasReales = 0m; decimal dcm_HorasExtrasConvertidas = 0m; if (lst_INTERNO_AUX_HorasExtrasTotal_Modelo_AUTORIZADAS_POREMPLEADO != null && lst_INTERNO_AUX_HorasExtrasTotal_Modelo_AUTORIZADAS_POREMPLEADO.Count > 0) { List lst_INTERNO_AUX_HorasExtrasTotales_Modelo = lst_INTERNO_AUX_HorasExtrasTotal_Modelo_AUTORIZADAS_POREMPLEADO.Where(m => m.idEmpleado == mdl_INTERNO_KRS_Empleados_Modelo.id).ToList(); if (lst_INTERNO_AUX_HorasExtrasTotales_Modelo != null && lst_INTERNO_AUX_HorasExtrasTotales_Modelo.Count>0) { foreach (INTERNO_AUX_HorasExtrasTotal_Modelo mdl_INTERNO_AUX_HorasExtrasTotal_Modelo in lst_INTERNO_AUX_HorasExtrasTotales_Modelo) { dcm_HorasExtrasReales += mdl_INTERNO_AUX_HorasExtrasTotal_Modelo.HorasExtra_Real; dcm_HorasExtrasConvertidas += mdl_INTERNO_AUX_HorasExtrasTotal_Modelo.HorasExtra_Convertidas; } } } #region Horas Extras Autorizadas string[] arr_Horasreales=dcm_HorasExtrasReales.ToString().Split(','); int int_HorasExtras_Real = int.Parse(arr_Horasreales[0]); int int_MinutosExtras_Real = 0; decimal dcm_HorasExtrasReales_minutos = dcm_HorasExtrasReales- int_HorasExtras_Real; if (dcm_HorasExtrasReales_minutos>0) { int_MinutosExtras_Real = int.Parse(Funciones.RedondearDecimal(dcm_HorasExtrasReales_minutos * 60, 0).ToString()); } if (_lst_INTERNO_ComboBox_Modelo_HORASEXTRAS.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASEXTRAS_AUTORIZADAS.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASEXTRAS_AUTORIZADAS, string.Format("{0:00}", int_HorasExtras_Real) + ":" + string.Format("{0:00}", int_MinutosExtras_Real),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_HORASEXTRAS_AUTORIZADAS.Codigo)); } #endregion #region Horas Extras Autorizadas Convenio string[] arr_HorasConvertidas = dcm_HorasExtrasConvertidas.ToString().Split(','); int int_HorasExtras_Convertidas = int.Parse(arr_HorasConvertidas[0]); int int_MinutosExtras_Convertidas = 0; decimal dcm_HorasExtrasConvertidas_minutos = dcm_HorasExtrasConvertidas - int_HorasExtras_Convertidas; if (dcm_HorasExtrasConvertidas_minutos > 0) { int_MinutosExtras_Convertidas = int.Parse(Funciones.RedondearDecimal(dcm_HorasExtrasConvertidas_minutos * 60, 0).ToString()); } if (_lst_INTERNO_ComboBox_Modelo_HORASEXTRAS.Exists(m => m.Identificador.Equals(Variables_KairosPRO.G_MDL_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASEXTRAS_AUTORIZADAS_CONVENIO.Codigo))) { g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Add(new INTERNO_AUX_ConsultaDetalladaJornada_Modelo(mdl_INTERNO_KRS_Empleados_Modelo.id, Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_HORASEXTRAS_AUTORIZADAS_CONVENIO, string.Format("{0:00}", int_HorasExtras_Convertidas) + ":" + string.Format("{0:00}", int_MinutosExtras_Convertidas),false,Variables_KairosPRO.G_MDL_CONSULTAEXTERNA_HORASEXTRAS_AUTORIZADAS_CONVENIO.Codigo)); } #endregion } } catch (Exception) { throw; } return g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo; } #endregion public static string Convertir_TimeSpan_String(TimeSpan _tms_Valor) { return _tms_Valor.Hours.ToString("00") + ":" + _tms_Valor.Minutes.ToString("00"); } public static string Convertir_Horas_A_String(decimal _dcm_Horas) { string str_Valor = "00:00"; try { if (_dcm_Horas != 0m) { string[] arr_HorasMinutos = _dcm_Horas.ToString().Split(','); int int_Horas = int.Parse(arr_HorasMinutos[0]); int int_Minutos = 0; if (arr_HorasMinutos.Count() > 1) { decimal dcm_Calculo = _dcm_Horas - decimal.Parse(int_Horas.ToString()); dcm_Calculo = dcm_Calculo * 60m; dcm_Calculo = Funciones.RedondearDecimal(dcm_Calculo, 0); string[] arr_Minutos = dcm_Calculo.ToString().Split(','); int_Minutos = int.Parse(arr_Minutos[0]); } str_Valor = string.Format("{0:00}", int_Horas) + ":" + string.Format("{0:00}", int_Minutos); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Convertir_Horas_A_String)); } return str_Valor; } public static TimeSpan Convertir_Horas_A_TimeSpan(decimal _dcm_Horas) { TimeSpan tms_Valor = new TimeSpan(0,0,0); try { if (_dcm_Horas != 0m) { string[] arr_HorasMinutos = _dcm_Horas.ToString().Split(','); int int_Horas = int.Parse(arr_HorasMinutos[0]); int int_Minutos = 0; if (arr_HorasMinutos.Count() > 1) { decimal dcm_Calculo = _dcm_Horas - decimal.Parse(int_Horas.ToString()); dcm_Calculo = dcm_Calculo * 60m; dcm_Calculo = Funciones.RedondearDecimal(dcm_Calculo, 0); string[] arr_Minutos = dcm_Calculo.ToString().Split(','); int_Minutos = int.Parse(arr_Minutos[0]); } tms_Valor = new TimeSpan(int_Horas, int_Minutos, 0); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Convertir_Horas_A_TimeSpan)); } return tms_Valor; } #region Calculo horas Extras public static List HorasExtras_CalcularLineas( DateTime _dtt_Fecha, List _lst_KRSS_Fichajes, List _lst_KRS_DiasFestivos, INTERNO_KRS_Empleados_Modelo _mdl_INTERNO_KRS_Empleados_Modelo, bool _bol_BuscarValores, INTERNO_KRS_HorasExtrasCabecera_Modelo _mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo, long _lng_idHoraExtraCabecera, int _int_TipoSeleccionado, long _lng_idAusenciaProgramadaTipo, string _str_Dia) { List lst_KRS_KRS_HorasExtrasCalculadasLineas = new List(); try { //Variables para las lineas de Horas Extras List lst_INTERNO_AUX_HorasExtras_Modelo = Obtener_HorasExtras(_dtt_Fecha,_lst_KRSS_Fichajes); if (lst_INTERNO_AUX_HorasExtras_Modelo != null && lst_INTERNO_AUX_HorasExtras_Modelo.Count > 0) { #region Buscar valores necesarios if (_bol_BuscarValores) { //Buscar las HorasExtrasCabcera y Lineas KRS_HorasExtrasCabecera_Datos obj_KRS_HorasExtrasCabecera_Datos = new KRS_HorasExtrasCabecera_Datos(); _mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo = obj_KRS_HorasExtrasCabecera_Datos.Obtener(_lng_idHoraExtraCabecera); //Verificar datos if (_mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo != null) { //Dia Actual DayOfWeek dow_primerDia = _dtt_Fecha.DayOfWeek; _str_Dia = ""; if (dow_primerDia.Equals(DayOfWeek.Monday)) { _str_Dia = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_LUNES; } else if (dow_primerDia.Equals(DayOfWeek.Tuesday)) { _str_Dia = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_MARTES; } else if (dow_primerDia.Equals(DayOfWeek.Wednesday)) { _str_Dia = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_MIERCOLES; } else if (dow_primerDia.Equals(DayOfWeek.Thursday)) { _str_Dia = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_JUEVES; } else if (dow_primerDia.Equals(DayOfWeek.Friday)) { _str_Dia = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_VIERNES; } else if (dow_primerDia.Equals(DayOfWeek.Saturday)) { _str_Dia = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_SABADO; } else if (dow_primerDia.Equals(DayOfWeek.Sunday)) { _str_Dia = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_DOMINGO; } //Es dia Festivo bool bol_EsDiaFestivo = false; if (_lst_KRS_DiasFestivos != null && _lst_KRS_DiasFestivos.Count > 0 && _lst_KRS_DiasFestivos.Exists(m => m.fechaDesde >= _dtt_Fecha && m.fechaDesde <= _dtt_Fecha)) { bol_EsDiaFestivo = true; } //Es Tipo de Ausencia Programada bool bol_EsAusenciaProgramadaTipo = false; if (_mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas != null && _mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.Count > 0 && _mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.ToList().Exists(m => m.fechaDesde <= _dtt_Fecha && m.fechaHasta >= _dtt_Fecha)) { bol_EsAusenciaProgramadaTipo = true; } //Orden de Aplicacion if (_mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo.Lineas != null) { //Se ordenan las lineas apra que muestra la prioridad del tipo para este dia foreach (int int_Tipo in _mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo.Lineas.OrderBy(m => m.ordenAplicacion).ThenByDescending(m => m.horaCalculo).ThenBy(m => m.tipo).Select(m => m.tipo).ToList()) { //Dia Festivo if (int_Tipo.ToString() == Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_FESTIVOS.Codigo && bol_EsDiaFestivo) { _int_TipoSeleccionado = int.Parse(Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_FESTIVOS.Codigo); break; } //AusenciaProgramadaTipo if (int_Tipo.ToString() == Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_TIPOAUSENCIAPROGRAMADA.Codigo && bol_EsAusenciaProgramadaTipo) { //Combo de Tipo _int_TipoSeleccionado = int.Parse(Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_TIPOAUSENCIAPROGRAMADA.Codigo); //Combo de AusenciaProgramdasTipo KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.ToList().Where(m => m.fechaDesde <= _dtt_Fecha && m.fechaHasta >= _dtt_Fecha).FirstOrDefault(); if (mdl_KRS_AusenciasProgramadas != null) { _lng_idAusenciaProgramadaTipo = mdl_KRS_AusenciasProgramadas.id; } else { _lng_idAusenciaProgramadaTipo = -1; } break; } //Dia o jornada Normal if (int_Tipo.ToString() == Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_DIA.Codigo || int_Tipo.ToString() == Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_JORNADANORMAL.Codigo) { //Ver si tiene alguna linea para el dia actual if (_mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo.Lineas != null && _mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo.Lineas.Exists(m => m.dia != null && m.dia.Equals(_str_Dia))) { _int_TipoSeleccionado = int.Parse(Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_DIA.Codigo); } //Jornada normal else { _int_TipoSeleccionado = int.Parse(Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_JORNADANORMAL.Codigo); } break; } } } else { //Es dia festivo if (bol_EsDiaFestivo) { _int_TipoSeleccionado = int.Parse(Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_FESTIVOS.Codigo); } //Es Tipo de AusenciaProgramada else if (bol_EsAusenciaProgramadaTipo) { //Combo de Tipo _int_TipoSeleccionado = int.Parse(Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_TIPOAUSENCIAPROGRAMADA.Codigo); //Combo de AusenciaProgramdasTipo KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas = _mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.ToList().Where(m => m.fechaDesde <= _dtt_Fecha && m.fechaHasta >= _dtt_Fecha).FirstOrDefault(); if (mdl_KRS_AusenciasProgramadas != null) { _lng_idAusenciaProgramadaTipo = mdl_KRS_AusenciasProgramadas.id; } else { _lng_idAusenciaProgramadaTipo = -1; } } else { //Combo Tipo _int_TipoSeleccionado = int.Parse(Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_DIA.Codigo); } } } } #endregion //Dia Actual if (_int_TipoSeleccionado!= int.Parse(Variables_KairosPRO.G_MDL_TIPOHORAEXTRA_DIA.Codigo)) { _str_Dia = ""; } List lst_Lineas_FILTRADO = null; if (_mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo.Lineas != null) { lst_Lineas_FILTRADO = _mdl_INTERNO_KRS_HorasExtrasCabecera_Modelo.Lineas.Where(m => m.tipo.Equals(_int_TipoSeleccionado) && (_str_Dia.Trim().Length > 0 ? (m.dia != null && m.dia.Equals(_str_Dia)) : 1 == 1)) .OrderBy(m => m.ordenAplicacion) .ThenByDescending(m => m.horaCalculo) .ThenBy(m => m.tipo) .ToList(); } if (lst_Lineas_FILTRADO != null && lst_Lineas_FILTRADO.Count > 0) { //Si tiene un Tipo de Ausenciaprogramda, primero filtrar por si existiera registros para ese tipo if (_lng_idAusenciaProgramadaTipo > -1 && lst_Lineas_FILTRADO.Exists(m => m.idAusenciaProgramadaTipo != null && m.idAusenciaProgramadaTipo.Value.Equals(_lng_idAusenciaProgramadaTipo))) { lst_Lineas_FILTRADO = lst_Lineas_FILTRADO.Where(m => m.idAusenciaProgramadaTipo != null && m.idAusenciaProgramadaTipo.Value.Equals(_lng_idAusenciaProgramadaTipo)).ToList(); } //Horas Con perfil de horas extras y para convertir double dbl_horasTotalesReales = 0; DateTime dtt_FechaActual_SinHoras = new DateTime(_dtt_Fecha.Year, _dtt_Fecha.Month, _dtt_Fecha.Day, 0, 0, 0); DateTime? dtt_FechaHoraFin_HE_Anterior = null; foreach (INTERNO_KRS_HorasExtrasLineas_Listado_Modelo mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo in lst_Lineas_FILTRADO) { //Horas Extras perfil DateTime dtt_FechaHoraInicio_HE = new DateTime(dtt_FechaActual_SinHoras.Year, dtt_FechaActual_SinHoras.Month, dtt_FechaActual_SinHoras.Day, mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaInicio.Hours, mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaInicio.Minutes, 0); DateTime dtt_FechaHoraFin_HE = new DateTime(dtt_FechaActual_SinHoras.Year, dtt_FechaActual_SinHoras.Month, dtt_FechaActual_SinHoras.Day, mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaFin.Hours, mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaFin.Minutes, 0); //Ver si hay que restar un minuto if (dtt_FechaHoraFin_HE_Anterior != null && dtt_FechaHoraFin_HE_Anterior.Value.AddMinutes(1) == dtt_FechaHoraInicio_HE) { dtt_FechaHoraFin_HE_Anterior = dtt_FechaHoraFin_HE; dtt_FechaHoraInicio_HE = dtt_FechaHoraInicio_HE.AddMinutes(-1); } else { dtt_FechaHoraFin_HE_Anterior = dtt_FechaHoraFin_HE; } if (dtt_FechaHoraInicio_HE > dtt_FechaHoraFin_HE) { dtt_FechaHoraFin_HE.AddDays(1); } dbl_horasTotalesReales = 0; foreach (INTERNO_AUX_HorasExtras_Modelo mdl_INTERNO_AUX_HorasExtras_Modelo in lst_INTERNO_AUX_HorasExtras_Modelo) { //La HoraInicio es inferior a la HoraExtraInicio y la HoraFinal es Superior a la HoraExtraInicio pero Inferior a la HoraExtraFin if (mdl_INTERNO_AUX_HorasExtras_Modelo.Inicio <= dtt_FechaHoraInicio_HE && mdl_INTERNO_AUX_HorasExtras_Modelo.Fin >= dtt_FechaHoraInicio_HE && mdl_INTERNO_AUX_HorasExtras_Modelo.Fin <= dtt_FechaHoraFin_HE) { TimeSpan tms_Resumtado = mdl_INTERNO_AUX_HorasExtras_Modelo.Fin.Subtract(dtt_FechaHoraInicio_HE); dbl_horasTotalesReales += tms_Resumtado.TotalHours; } //La HoraInicio es inferior a la HoraExtraInicio y la HoraFinal es Superior a la HoraExtraInicio y Superior a la HoraExtraFin else if (mdl_INTERNO_AUX_HorasExtras_Modelo.Inicio < dtt_FechaHoraInicio_HE && mdl_INTERNO_AUX_HorasExtras_Modelo.Fin >= dtt_FechaHoraInicio_HE && mdl_INTERNO_AUX_HorasExtras_Modelo.Fin >= dtt_FechaHoraFin_HE) { TimeSpan tms_Resumtado = dtt_FechaHoraFin_HE.Subtract(dtt_FechaHoraInicio_HE); dbl_horasTotalesReales += tms_Resumtado.TotalHours; } //La HoraInicio es superior o igual a la HoraExtraInicio y la HoraFinal es Inferior a la HoraExtraFin else if (mdl_INTERNO_AUX_HorasExtras_Modelo.Inicio >= dtt_FechaHoraInicio_HE && mdl_INTERNO_AUX_HorasExtras_Modelo.Inicio <= dtt_FechaHoraFin_HE && mdl_INTERNO_AUX_HorasExtras_Modelo.Fin <= dtt_FechaHoraFin_HE) { TimeSpan tms_Resumtado = mdl_INTERNO_AUX_HorasExtras_Modelo.Fin.Subtract(mdl_INTERNO_AUX_HorasExtras_Modelo.Inicio); dbl_horasTotalesReales += tms_Resumtado.TotalHours; } //La HoraInicio es superior o igual a la HoraExtraInicio y la HoraFinal es superior a la HoraExtraFin else if (mdl_INTERNO_AUX_HorasExtras_Modelo.Inicio >= dtt_FechaHoraInicio_HE && mdl_INTERNO_AUX_HorasExtras_Modelo.Inicio <= dtt_FechaHoraFin_HE && mdl_INTERNO_AUX_HorasExtras_Modelo.Fin >= dtt_FechaHoraFin_HE) { TimeSpan tms_Resumtado = dtt_FechaHoraFin_HE.Subtract(mdl_INTERNO_AUX_HorasExtras_Modelo.Inicio); dbl_horasTotalesReales += tms_Resumtado.TotalHours; } } //Si tiene Horas Rellenno el modelo con el rango de horas calculadas if (dbl_horasTotalesReales > 0) { KRS_HorasExtrasCalculadasLineas mdl_KRS_HorasExtrasCalculadasLineas = new KRS_HorasExtrasCalculadasLineas(); mdl_KRS_HorasExtrasCalculadasLineas.horaReal = mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaReal; mdl_KRS_HorasExtrasCalculadasLineas.horaCalculada = mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaCalculo; mdl_KRS_HorasExtrasCalculadasLineas.horaInicio = mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaInicio; mdl_KRS_HorasExtrasCalculadasLineas.horaFin = mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaFin; mdl_KRS_HorasExtrasCalculadasLineas.otroRangoHoras = false; mdl_KRS_HorasExtrasCalculadasLineas.horasTotalesReales = decimal.Parse(dbl_horasTotalesReales.ToString().Replace(".", ",")); mdl_KRS_HorasExtrasCalculadasLineas.horasTotalesCalculadas = Funciones.RedondearDecimal(((mdl_KRS_HorasExtrasCalculadasLineas.horasTotalesReales * mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaCalculo) / mdl_INTERNO_KRS_HorasExtrasLineas_Listado_Modelo.horaReal), 2); lst_KRS_KRS_HorasExtrasCalculadasLineas.Add(mdl_KRS_HorasExtrasCalculadasLineas); } } } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(HorasExtras_CalcularLineas)); } return lst_KRS_KRS_HorasExtrasCalculadasLineas; } private static List Obtener_HorasExtras(DateTime _dtt_Fecha, List _lst_KRSS_Fichajes) { List lst_INTERNO_AUX_HorasExtras_Modelo = new List(); try { if (_lst_KRSS_Fichajes != null && _lst_KRSS_Fichajes.Count > 0) { DateTime dtt_FechaActual_SinHoras = new DateTime(_dtt_Fecha.Year, _dtt_Fecha.Month, _dtt_Fecha.Day, 0, 0, 0); DateTime dtt_FechaActual_SinHoras_Final = new DateTime(_dtt_Fecha.Year, _dtt_Fecha.Month, _dtt_Fecha.Day, 23, 59, 59); DateTime? dtt_Entrada = null; string str_UltimoFichaje = ""; foreach (KRSS_Fichajes mdl_KRSS_Fichajes in _lst_KRSS_Fichajes.OrderBy(m => m.fechaHora).ThenByDescending(m=>m.entradaSalida)) { //Entrada if (mdl_KRSS_Fichajes.entradaSalida == Variables_KairosPRO.G_STR_FICHAJE_ENTRADA) { dtt_Entrada = mdl_KRSS_Fichajes.fechaHora; str_UltimoFichaje = Variables_KairosPRO.G_STR_FICHAJE_ENTRADA; } //Salida else { if (str_UltimoFichaje == Variables_KairosPRO.G_STR_FICHAJE_ENTRADA) { lst_INTERNO_AUX_HorasExtras_Modelo.Add(new INTERNO_AUX_HorasExtras_Modelo(dtt_Entrada.Value, mdl_KRSS_Fichajes.fechaHora)); str_UltimoFichaje = Variables_KairosPRO.G_STR_FICHAJE_SALIDA; } } } if (str_UltimoFichaje == Variables_KairosPRO.G_STR_FICHAJE_ENTRADA) { lst_INTERNO_AUX_HorasExtras_Modelo.Add(new INTERNO_AUX_HorasExtras_Modelo(dtt_Entrada.Value, dtt_FechaActual_SinHoras_Final)); } } } catch (Exception ex) { lst_INTERNO_AUX_HorasExtras_Modelo = null; Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_HorasExtras)); } return lst_INTERNO_AUX_HorasExtras_Modelo; } #endregion public static void Obtener_JornadaLineas_ConSolicitudesDeAusentismoPorHoras(long _lng_idEmpleado,DateTime _dtt_FechaActual,ref List _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo) { try { KRS_AusenciasProgramadas_Datos obj_KRS_AusenciasProgramadas_Datos = new KRS_AusenciasProgramadas_Datos(); List lst_KRS_AusenciasProgramadas_FINAL = new List(); List lst_KRS_AusenciasProgramadas_DiaActual = obj_KRS_AusenciasProgramadas_Datos.Obtener_ModeloListado_Por_EmpleadoFechas_ConHoras(_lng_idEmpleado, _dtt_FechaActual.ToString("dd/MM/yyyy")); if (lst_KRS_AusenciasProgramadas_DiaActual != null && lst_KRS_AusenciasProgramadas_DiaActual.Count > 0) { lst_KRS_AusenciasProgramadas_FINAL.AddRange(lst_KRS_AusenciasProgramadas_DiaActual); } List lst_KRS_AusenciasProgramadas_DiaSiguiente = obj_KRS_AusenciasProgramadas_Datos.Obtener_ModeloListado_Por_EmpleadoFechas_ConHoras(_lng_idEmpleado, _dtt_FechaActual.AddDays(1).ToString("dd/MM/yyyy")); if (lst_KRS_AusenciasProgramadas_DiaSiguiente != null && lst_KRS_AusenciasProgramadas_DiaSiguiente.Count > 0) { lst_KRS_AusenciasProgramadas_FINAL.AddRange(lst_KRS_AusenciasProgramadas_DiaSiguiente); } if (lst_KRS_AusenciasProgramadas_FINAL != null && lst_KRS_AusenciasProgramadas_FINAL.Count > 0) { DateTime dtt_Dia_Actual_SinHoras = new DateTime(_dtt_FechaActual.Year, _dtt_FechaActual.Month, _dtt_FechaActual.Day, 0, 0, 0); List lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR = _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.ToList(); //Bucle Ausencias long lng_idAuxiliar = 100000; int int_MinutosFlexible_PorDefecto = 5; bool bol_SaltoDia = false; for (int int_Contador_Linea = 0; int_Contador_Linea < lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR.Count; int_Contador_Linea++) { //Si el campo salto de dia esta a false se pone como nulo para poder ordenar correctamente despues if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea].saltaDia!=null && lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea].saltaDia.Value==false) { lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea].saltaDia = null; } if (bol_SaltoDia) { dtt_Dia_Actual_SinHoras = dtt_Dia_Actual_SinHoras.AddDays(1); } //Fecha Jornada Linea DateTime dtt_JornadaLinea = new DateTime(dtt_Dia_Actual_SinHoras.Year, dtt_Dia_Actual_SinHoras.Month, dtt_Dia_Actual_SinHoras.Day, lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea].hora.Hours, lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea].hora.Minutes, 59); DateTime? dtt_JornadaLinea_Siguiente = null; if (int_Contador_Linea == lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR.Count - 1) { dtt_JornadaLinea_Siguiente = new DateTime(dtt_Dia_Actual_SinHoras.Year, dtt_Dia_Actual_SinHoras.Month, dtt_Dia_Actual_SinHoras.Day, 23, 59, 59); } else { dtt_JornadaLinea_Siguiente = new DateTime(dtt_Dia_Actual_SinHoras.Year, dtt_Dia_Actual_SinHoras.Month, dtt_Dia_Actual_SinHoras.Day, lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea + 1].hora.Hours, lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea + 1].hora.Minutes, 59); } foreach (KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas_FINAL in lst_KRS_AusenciasProgramadas_FINAL.Where(m => m.fechaDesde >= dtt_JornadaLinea && m.fechaDesde < dtt_JornadaLinea_Siguiente.Value).OrderBy(m => m.fechaDesde)) { #region AUSENCIAOBLIGADA(Ausencia programada por horas) //Hora desde Flexible INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE_FLEXIBLE = new INTERNO_VerificacionFichajes_JornadasLinea_Modelo(); mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE_FLEXIBLE.id = lng_idAuxiliar; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE_FLEXIBLE.hora = TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas_FINAL.fechaDesde.ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture); mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE_FLEXIBLE.tipo = Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE_FLEXIBLE.tipo_Descripcion = Variables_KairosPRO.G_STR_JORNADALINEA_TIPO_DESCRIPCION_FLEXIBLE + " (" + mdl_KRS_AusenciasProgramadas_FINAL.KRS_AusenciasProgramadasTipos.descripcion + ")"; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE_FLEXIBLE.sumaTiempo = (mdl_KRS_AusenciasProgramadas_FINAL.KRS_AusenciasProgramadasTipos!=null && mdl_KRS_AusenciasProgramadas_FINAL.KRS_AusenciasProgramadasTipos.contabilizarTiempo!=null) ? mdl_KRS_AusenciasProgramadas_FINAL.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value : false; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE_FLEXIBLE.saltaDia = null; _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.Add(mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE_FLEXIBLE); lng_idAuxiliar += 1; //Hora desde Ausencia INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE = new INTERNO_VerificacionFichajes_JornadasLinea_Modelo(); mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE.id = lng_idAuxiliar; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE.hora = TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas_FINAL.fechaDesde.AddMinutes(int_MinutosFlexible_PorDefecto).ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture); mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE.tipo = Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE.tipo_Descripcion = Variables_KairosPRO.G_STR_JORNADALINEA_TIPO_DESCRIPCION_AUSENCIAOBLIGADA + " (" + mdl_KRS_AusenciasProgramadas_FINAL.KRS_AusenciasProgramadasTipos.descripcion + ")"; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE.sumaTiempo = (mdl_KRS_AusenciasProgramadas_FINAL.KRS_AusenciasProgramadasTipos != null && mdl_KRS_AusenciasProgramadas_FINAL.KRS_AusenciasProgramadasTipos.contabilizarTiempo != null) ? mdl_KRS_AusenciasProgramadas_FINAL.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value : false; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE.saltaDia = null; _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.Add(mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_DESDE); lng_idAuxiliar += 1; #endregion //Que tipo de resgistro vendria despues INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR = null; INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE = null; INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE_2 = null; DateTime dtt_Dia_Recorrer_SinHoras = new DateTime(_dtt_FechaActual.Year, _dtt_FechaActual.Month, _dtt_FechaActual.Day, 0, 0, 0); for (int int_Contador_Linea2 = 0; int_Contador_Linea2 < lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR.Count; int_Contador_Linea2++) { DateTime dtt_FechaHora = new DateTime(dtt_Dia_Recorrer_SinHoras.Year, dtt_Dia_Recorrer_SinHoras.Month, dtt_Dia_Recorrer_SinHoras.Day, lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea2].hora.Hours, lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea2].hora.Minutes, 0); if (mdl_KRS_AusenciasProgramadas_FINAL.fechaHasta.Value0) { mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR = lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea2 - 1]; } //Siguiente si lo hubiera mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE = lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea2]; //Siguiente del siguiente si lo hubiera if (int_Contador_Linea2 < lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR.Count-1) { mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE_2 = lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea2 + 1]; } break; } if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea2].saltaDia != null && lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea2].saltaDia.Value) { dtt_Dia_Recorrer_SinHoras = dtt_Dia_Recorrer_SinHoras.AddDays(1); } } //HoraDesde esta dentro del rango if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE != null) { bool bol_Rellenar = false; //El Siguiente Registro e de tipo Ausenciaprogramada y es el ultimo registro (No se pone nada) if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.id == lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR.Last().id) { //si el anterior es flexible y coincide no se pone nada y se quita el registro de flexible y de ausencia if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR != null && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.hora == TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas_FINAL.fechaHasta.Value.ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture)) { //Borrar el flexible _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.RemoveAll(m => m.id == mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.id); //Borrar la ausencia programada _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.RemoveAll(m => m.id == mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.id); } bol_Rellenar = false; } //El Siguiente Registro e de tipo Ausenciaprogramada y no es el ultimo registro (No se pone nada) else if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.id != lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR.Last().id) { //si el anterior es flexible y coincide no se pone nada y se quita el registro de flexible y de ausencia if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR!=null && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.hora== TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas_FINAL.fechaHasta.Value.ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture)) { //Borrar el flexible _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.RemoveAll(m => m.id == mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.id); //Borrar la ausencia programada _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.RemoveAll(m => m.id == mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.id); bol_Rellenar = false; } else { bol_Rellenar = true; } } //El Siguiente Registro e de tipo Flexible else if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE) { if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE_2 != null) { //Si el Siguiente al Siguiente es una Ausencia, rellenar if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE_2.tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA) { bol_Rellenar = true; } //Si el Siguiente al Siguiente es Flexible, rellenar else if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE_2.tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE) { bol_Rellenar = true; } //Si el Siguiente al Siguiente es una Presencia else { bol_Rellenar = false; } } else { bol_Rellenar = false; } } //El Siguiente Registro e de tipo PresenciaProgramada else if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_PRESENCIAOBLIGADA) { bol_Rellenar = true; } if (bol_Rellenar) { //Hora desde Flexible INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA_FLEXIBLE = new INTERNO_VerificacionFichajes_JornadasLinea_Modelo(); mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA_FLEXIBLE.id = lng_idAuxiliar; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA_FLEXIBLE.hora = TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas_FINAL.fechaHasta.Value.ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture); mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA_FLEXIBLE.tipo = Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA_FLEXIBLE.tipo_Descripcion = Variables_KairosPRO.G_STR_JORNADALINEA_TIPO_DESCRIPCION_FLEXIBLE; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA_FLEXIBLE.sumaTiempo = mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR != null ? mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.sumaTiempo : false; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA_FLEXIBLE.saltaDia = (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR != null && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.saltaDia!=null && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.saltaDia.Value) ? mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.saltaDia : null; _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.Add(mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA_FLEXIBLE); lng_idAuxiliar += 1; //Hora hasta Ausencia INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA = new INTERNO_VerificacionFichajes_JornadasLinea_Modelo(); mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA.id = lng_idAuxiliar; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA.hora = TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas_FINAL.fechaHasta.Value.AddMinutes(int_MinutosFlexible_PorDefecto).ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture); mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA.tipo = Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_PRESENCIAOBLIGADA; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA.tipo_Descripcion = Variables_KairosPRO.G_STR_JORNADALINEA_TIPO_DESCRIPCION_PRESENCIAOBLIGADA; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA.sumaTiempo = mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR != null ? mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.sumaTiempo : false; mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA.saltaDia = (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR != null && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.saltaDia != null && mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.saltaDia.Value) ? mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_SIGUIENTE.saltaDia : null; _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.Add(mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_HORA_HASTA); lng_idAuxiliar += 1; } } } if (bol_SaltoDia && int_Contador_Linea > lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR.Count - 1 && lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea + 1].saltaDia != null && lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_AUXILIAR[int_Contador_Linea + 1].saltaDia.Value) { bol_SaltoDia = true; } } //reornear las lineas DateTime dtt_Dia_Actual_SinHoras_AUX_2 = new DateTime(_dtt_FechaActual.Year, _dtt_FechaActual.Month, _dtt_FechaActual.Day, 0, 0, 0); DateTime dtt_Dia_Actual_SinHoras_AUX_3 = new DateTime(_dtt_FechaActual.Year, _dtt_FechaActual.Month, _dtt_FechaActual.Day, 23, 59, 59); //FechaActual foreach (KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas in lst_KRS_AusenciasProgramadas_FINAL.Where(m=>m.fechaDesde>= dtt_Dia_Actual_SinHoras_AUX_2 && m.fechaDesde <= dtt_Dia_Actual_SinHoras_AUX_3).ToList()) { TimeSpan tms_Desde=TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas.fechaDesde.ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture); TimeSpan tms_Hasta=TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas.fechaHasta.Value.ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture); _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.RemoveAll(m => (m.saltaDia==null || m.saltaDia.Value==false) && m.hora >= tms_Desde && m.hora <= tms_Hasta && m.id < 100000); } //FechaActualSalto Dia dtt_Dia_Actual_SinHoras_AUX_2 = dtt_Dia_Actual_SinHoras_AUX_2.AddDays(1); dtt_Dia_Actual_SinHoras_AUX_3 = dtt_Dia_Actual_SinHoras_AUX_3.AddDays(1); foreach (KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas in lst_KRS_AusenciasProgramadas_FINAL.Where(m => m.fechaDesde >= dtt_Dia_Actual_SinHoras_AUX_2 && m.fechaDesde <= dtt_Dia_Actual_SinHoras_AUX_3).ToList()) { TimeSpan tms_Desde = TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas.fechaDesde.ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture); TimeSpan tms_Hasta = TimeSpan.ParseExact(mdl_KRS_AusenciasProgramadas.fechaHasta.Value.ToString("HH:mm"), "hh\\:mm", CultureInfo.InvariantCulture); _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.RemoveAll(m => m.saltaDia != null && m.saltaDia.Value && m.hora >= tms_Desde && m.hora <= tms_Hasta && m.id < 100000); } //ordenar el Listado _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo = _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.OrderBy(m => m.saltaDia).ThenBy(m => m.hora).ToList(); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_JornadaLineas_ConSolicitudesDeAusentismoPorHoras)); } } #region Calcular Total de Horas y Total de Dias en intervalo de Fechas #region Total Horas public static double Obtener_Calculo_TotalHoras(DateTime _dtt_FechaDesde, DateTime _dtt_FechaHasta,string _str_Hora_Desde,string _str_Hora_Hasta,long _lng_idEmpleado) { double dbl_TotalHoras = 0; try { //Si la fecha Desde es igual a la fecha hasta if (_dtt_FechaDesde == _dtt_FechaHasta) { TimeSpan tms_HoraDesde = TimeSpan.ParseExact(_str_Hora_Desde, "hh\\:mm", CultureInfo.InvariantCulture); TimeSpan tms_HoraHasta = TimeSpan.ParseExact(_str_Hora_Hasta, "hh\\:mm", CultureInfo.InvariantCulture); dbl_TotalHoras = Obtener_Calculo_TotalHoras_Detalle(_dtt_FechaDesde, tms_HoraDesde, tms_HoraHasta, _lng_idEmpleado); } //Fechas Diferentes else { DateTime dtt_FechaContador = new DateTime(_dtt_FechaDesde.Year, _dtt_FechaDesde.Month, _dtt_FechaDesde.Day, 0, 0, 0); bool bol_EsUltimafecha = false; TimeSpan tms_HoraDesde; TimeSpan tms_HoraHasta; while (bol_EsUltimafecha == false) { //Primera fecha if (dtt_FechaContador == _dtt_FechaDesde) { tms_HoraDesde = TimeSpan.ParseExact(_str_Hora_Desde, "hh\\:mm", CultureInfo.InvariantCulture); tms_HoraHasta = TimeSpan.ParseExact("23:59", "hh\\:mm", CultureInfo.InvariantCulture); } //Ultima fecha else if (dtt_FechaContador == _dtt_FechaHasta) { tms_HoraDesde = TimeSpan.ParseExact("00:00", "hh\\:mm", CultureInfo.InvariantCulture); tms_HoraHasta = TimeSpan.ParseExact(_str_Hora_Hasta, "hh\\:mm", CultureInfo.InvariantCulture); } //fechas Intermedias else { tms_HoraDesde = TimeSpan.ParseExact("00:00", "hh\\:mm", CultureInfo.InvariantCulture); tms_HoraHasta = TimeSpan.ParseExact("23:59", "hh\\:mm", CultureInfo.InvariantCulture); } dbl_TotalHoras += Obtener_Calculo_TotalHoras_Detalle(dtt_FechaContador, tms_HoraDesde, tms_HoraHasta, _lng_idEmpleado); if (dtt_FechaContador >= _dtt_FechaHasta) { bol_EsUltimafecha = true; } //Sumar un dia a la fecha desde dtt_FechaContador = dtt_FechaContador.AddDays(1); } } } catch (Control_Errores) { throw; } catch (Exception ex) { throw new Control_Errores("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_Calculo_TotalHoras), true); } return dbl_TotalHoras; } public static double Obtener_Calculo_TotalHoras_Detalle(DateTime _dtt_Fecha, TimeSpan _tms_HoraDesde, TimeSpan _tms_HoraHasta,long _lng_idEmpleado) { double dbl_TotalHoras = 0; try { long lng_idJornadaCabecera = -1; KRS_PresenciasProgramadas_Datos obj_KRS_PresenciasProgramadas_Datos = new KRS_PresenciasProgramadas_Datos(); KRS_PerfilesLinea_Datos obj_KRS_PerfilesLinea_Datos = new KRS_PerfilesLinea_Datos(); KRS_JornadasCabecera_Datos obj_KRS_JornadasCabecera_Datos = new KRS_JornadasCabecera_Datos(); DateTime dtt_Fecha = new DateTime(_dtt_Fecha.Year, _dtt_Fecha.Month, _dtt_Fecha.Day, 0, 0, 0); //Buscar si tiene una presencia para ese dia KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas = obj_KRS_PresenciasProgramadas_Datos.Obtener_Modelo_Por_EmpleadoFecha(_lng_idEmpleado, Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO, dtt_Fecha); if (mdl_KRS_PresenciasProgramadas != null) { lng_idJornadaCabecera = mdl_KRS_PresenciasProgramadas.idJornadaCabecera; } //Buscar si tiene un perfilLinea if (lng_idJornadaCabecera == -1) { KRS_PerfilesLinea mdl_KRS_PerfilesLinea = obj_KRS_PerfilesLinea_Datos.Obtener_Modelo_Por_FechaEmpleado(_lng_idEmpleado, Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO, dtt_Fecha); if (mdl_KRS_PerfilesLinea != null) { lng_idJornadaCabecera = mdl_KRS_PerfilesLinea.idJornadaCabecera; } } //Buscar la jornadaCabecera KRS_JornadasCabecera mdl_KRS_JornadasCabecera = obj_KRS_JornadasCabecera_Datos.Obtener_Modelo_Por_Id(lng_idJornadaCabecera, Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO, true); if (mdl_KRS_JornadasCabecera != null && mdl_KRS_JornadasCabecera.KRS_JornadasLinea != null && mdl_KRS_JornadasCabecera.KRS_JornadasLinea.Count > 0) { List lst_KRS_JornadasLinea = mdl_KRS_JornadasCabecera.KRS_JornadasLinea.ToList().OrderBy(m => m.orden).ToList(); for (int int_ContadorLinea = 0; int_ContadorLinea < lst_KRS_JornadasLinea.Count; int_ContadorLinea++) { if (lst_KRS_JornadasLinea[int_ContadorLinea].sumaTiempo) { TimeSpan tms_HoraDesde_JORNADALINEA = lst_KRS_JornadasLinea[int_ContadorLinea].hora; TimeSpan tms_HoraHasta_JORNADALINEA = int_ContadorLinea == (lst_KRS_JornadasLinea.Count - 1) ? TimeSpan.ParseExact("23:59", "hh\\:mm", CultureInfo.InvariantCulture) : lst_KRS_JornadasLinea[int_ContadorLinea + 1].hora; //HoraDesde inferior a la HoraJornadaInicio y HoraHasta superior a la HoraJornadaInicio if (_tms_HoraDesde < tms_HoraDesde_JORNADALINEA && _tms_HoraHasta > tms_HoraDesde_JORNADALINEA) { //HoraHasta inferior o igual a la HoraJornadaFin if (_tms_HoraHasta >= tms_HoraDesde_JORNADALINEA && _tms_HoraHasta < tms_HoraHasta_JORNADALINEA) { TimeSpan tms_TotalHoras = _tms_HoraHasta - tms_HoraDesde_JORNADALINEA; dbl_TotalHoras += tms_TotalHoras.TotalHours; } //HoraHasta superior a la HoraJornadaFin else { TimeSpan tms_TotalHoras = tms_HoraHasta_JORNADALINEA - tms_HoraDesde_JORNADALINEA; dbl_TotalHoras += tms_TotalHoras.TotalHours; } } //HoraDesde superior o igual a la HoraJornadaInicio y HoraDesde inferior a la HoraJornadaFin else if (_tms_HoraDesde >= tms_HoraDesde_JORNADALINEA && _tms_HoraDesde < tms_HoraHasta_JORNADALINEA) { //HoraHasta inferior o igual a la HoraJornadaFin if (_tms_HoraHasta >= tms_HoraDesde_JORNADALINEA && _tms_HoraHasta < tms_HoraHasta_JORNADALINEA) { TimeSpan tms_TotalHoras = _tms_HoraHasta - _tms_HoraDesde; dbl_TotalHoras += tms_TotalHoras.TotalHours; } //HoraHasta superior a la HoraJornadaFin else { TimeSpan tms_TotalHoras = tms_HoraHasta_JORNADALINEA - _tms_HoraDesde; dbl_TotalHoras += tms_TotalHoras.TotalHours; } } } } } else { TimeSpan tms_TotalHoras = _tms_HoraHasta - _tms_HoraDesde; dbl_TotalHoras = tms_TotalHoras.TotalHours; } } catch (Exception ex) { throw new Control_Errores("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_Calculo_TotalHoras_Detalle), true); } return dbl_TotalHoras; } #endregion #region Total dias public static int Obtener_Calculo_TotalDias(DateTime _dtt_FechaDesde, DateTime _dtt_FechaHasta, KRS_Empleados_Contratos_CargaDias _mdl_KRS_Empleados_Contratos_CargaDias) { int int_TotalDias = 0; try { bool bol_EsUltimafecha = false; //Ver de que tipo dia segun el tipo de ausencia programada string str_TipoDia = Variables_KairosPRO.G_MDL_TIPODIA_NATURAL.Codigo; if (_mdl_KRS_Empleados_Contratos_CargaDias != null) { str_TipoDia = _mdl_KRS_Empleados_Contratos_CargaDias.tipoDia; } while (bol_EsUltimafecha == false) { //Dias Festivos por Ejercicio GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(_dtt_FechaDesde, Variables.G_MDL_INTERNO_VALORESGENERALES_MODELO.lng_idEmpresa); List lst_KRS_DiasFestivos = g_obj_KRS_DiasFestivos_Datos.Obtener_ModeloListado_Por_Ejercicio(mdl_GEN_EjerciciosActivos_Empresa); //Natural if (str_TipoDia == Variables_KairosPRO.G_MDL_TIPODIA_NATURAL.Codigo) { int_TotalDias += 1; } //Laborable else if (str_TipoDia == Variables_KairosPRO.G_MDL_TIPODIA_LABORABLE.Codigo) { if (lst_KRS_DiasFestivos == null || !lst_KRS_DiasFestivos.Exists(m => m.fechaDesde <= _dtt_FechaDesde && m.fechaHasta >= _dtt_FechaDesde)) { DayOfWeek dow_primerDia = _dtt_FechaDesde.DayOfWeek; if (!dow_primerDia.Equals(DayOfWeek.Sunday)) { int_TotalDias += 1; } } } //Habil else if (str_TipoDia == Variables_KairosPRO.G_MDL_TIPODIA_HABIL.Codigo) { //Obviar Sabados,Domingos y Festivos if (lst_KRS_DiasFestivos == null || !lst_KRS_DiasFestivos.Exists(m => m.fechaDesde <= _dtt_FechaDesde && m.fechaHasta >= _dtt_FechaDesde)) { DayOfWeek dow_primerDia = _dtt_FechaDesde.DayOfWeek; if (!dow_primerDia.Equals(DayOfWeek.Saturday) && !dow_primerDia.Equals(DayOfWeek.Sunday)) { int_TotalDias += 1; } } } if (_dtt_FechaDesde == _dtt_FechaHasta) { bol_EsUltimafecha = true; } //Sumar un dia a la fecha desde _dtt_FechaDesde = _dtt_FechaDesde.AddDays(1); } } catch(Exception ex) { throw new Control_Errores("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(Obtener_Calculo_TotalDias), true); } return int_TotalDias; } #endregion #endregion #region Obtener Horas Trabajadas public static List CargarDatos_ConsultaDetallada(List _lst_idEmpleados,DateTime _dtt_Inicio, DateTime _dtt_Fin,long _lng_idEmpresa) { List lst_INTERNO_AUX_ConsultaDetallada_Modelo = new List(); try { KRS_HorasExtrasCalculadasCabecera_Datos obj_KRS_HorasExtrasCalculadasCabecera_Datos = new KRS_HorasExtrasCalculadasCabecera_Datos(); //Variables List lst_KRS_PresenciasProgramadas = null; List lst_KRS_AusenciasProgramadas = null; List lst_KRS_PerfilesLinea = null; List lst_KRSS_Fichajes_RangoFechas = null; List lst_KRS_DiasFestivos = null; List lst_INTERNO_KRS_Empleados_Modelo = null; KRS_JornadasCabecera mdl_KRS_JornadasCabecera = new KRS_JornadasCabecera(); KRS_PresenciasProgramadas mdl_KRS_PresenciasProgramadas = new KRS_PresenciasProgramadas(); KRS_DiasFestivos mdl_KRS_DiasFestivos = new KRS_DiasFestivos(); KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas = new KRS_AusenciasProgramadas(); GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa = null; KRS_PerfilesCabecera mdl_KRS_PerfilesCabecera = null; DateTime dtt_HoraCambioDia = new DateTime(1900, 1, 1, 0, 0, 0); string str_TieneIncidenciasEnDia = ""; int int_TotalSegundos_ARealizar = 0; int int_TotalSegundos_Realizados = 0; int int_TotalSegundos_Reales = 0; //Horas TimeSpan tms_Inicio = TimeSpan.ParseExact(_dtt_Inicio.ToString("HH\\:mm"), "hh\\:mm", CultureInfo.InvariantCulture); TimeSpan tms_Fin = TimeSpan.ParseExact(_dtt_Fin.ToString("HH\\:mm"), "hh\\:mm", CultureInfo.InvariantCulture); //Saber el idEjercicio de las fechas mdl_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(_dtt_Inicio, _lng_idEmpresa); //Dias Festivos lst_KRS_DiasFestivos = g_obj_KRS_DiasFestivos_Datos.Obtener_ModeloListado_Por_Fechas(_dtt_Inicio, _dtt_Fin); //Obtenemos un listado de todos los empleados con sus relaciones lst_INTERNO_KRS_Empleados_Modelo = g_obj_KRS_Empleados_Datos.Obtener_Registros_Para_Listado(mdl_GEN_EjerciciosActivos_Empresa, _lst_idEmpleados); //Fichajes de los empleados DateTime dtt_FechaHora_BuscarFichajes_Inicio = new DateTime(_dtt_Inicio.Year, _dtt_Inicio.Month, _dtt_Inicio.Day, tms_Inicio.Hours, tms_Inicio.Minutes, tms_Inicio.Seconds); DateTime dtt_FechaHora_BuscarFichajes_Fin = new DateTime(_dtt_Fin.Year, _dtt_Fin.Month, _dtt_Fin.Day, tms_Fin.Hours, tms_Fin.Minutes, tms_Fin.Seconds); dtt_FechaHora_BuscarFichajes_Fin = dtt_FechaHora_BuscarFichajes_Fin.AddDays(1);//Se le suma un dia, por si el ultimo dia tiene salto de dia lst_KRSS_Fichajes_RangoFechas = g_obj_KRSS_Fichajes_Datos.Obtener_ModeloListado_Por_EmpleadosFechaEmpresa(_lst_idEmpleados, dtt_FechaHora_BuscarFichajes_Inicio, dtt_FechaHora_BuscarFichajes_Fin, _lng_idEmpresa); //Recorrer los Empleados foreach (INTERNO_KRS_Empleados_Modelo mdl_INTERNO_KRS_Empleados_Modelo in lst_INTERNO_KRS_Empleados_Modelo) { //Rellenar las variables de listados ......................................................... lst_KRS_PresenciasProgramadas = mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas != null ? mdl_INTERNO_KRS_Empleados_Modelo.KRS_PresenciasProgramadas.ToList() : new List(); lst_KRS_AusenciasProgramadas = mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas != null ? mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.ToList() : new List(); mdl_KRS_PerfilesCabecera = mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera != null ? mdl_INTERNO_KRS_Empleados_Modelo.PerfilesCabecera : new KRS_PerfilesCabecera(); if (mdl_KRS_PerfilesCabecera.KRS_PerfilesLinea != null) { lst_KRS_PerfilesLinea = mdl_KRS_PerfilesCabecera.KRS_PerfilesLinea.ToList(); } if (lst_KRS_PerfilesLinea == null) { lst_KRS_PerfilesLinea = new List(); } if (lst_KRS_DiasFestivos == null) { lst_KRS_DiasFestivos = new List(); } if (lst_KRSS_Fichajes_RangoFechas == null) { lst_KRSS_Fichajes_RangoFechas = new List(); } //........................................................................................... bool bol_Termino = false; //Primero hago las Comprobaciones por si tiene Fecha de Baja ###################################################################### //Si la fecha de baja no es nula compruebo if (mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja != null) { //Si Tuviera fecha de Baja y fuera inferior a la fecha fin del filtro ponermos la de baja, //Sino se deja tal cual if (mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja < _dtt_Fin) { dtt_FechaHora_BuscarFichajes_Fin = new DateTime(mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja.Value.Year, mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja.Value.Month, mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja.Value.Day, tms_Fin.Hours, tms_Fin.Minutes, tms_Fin.Seconds); } else { dtt_FechaHora_BuscarFichajes_Fin = new DateTime(_dtt_Fin.Year, _dtt_Fin.Month, _dtt_Fin.Day, tms_Fin.Hours, tms_Fin.Minutes, tms_Fin.Seconds); } //Si la fecha de baja del empleado fue antes que la del comienzo del ejercicio en el que se encuentra, no muestro nada //O si la fecha del filtro es superior a la de baja tampoco muestro nada if (mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja < mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio || mdl_INTERNO_KRS_Empleados_Modelo.fechaBaja < _dtt_Inicio) { bol_Termino = true; } } else { dtt_FechaHora_BuscarFichajes_Fin = new DateTime(_dtt_Fin.Year, _dtt_Fin.Month, _dtt_Fin.Day, tms_Fin.Hours, tms_Fin.Minutes, tms_Fin.Seconds); } // ############################################################################################################################ str_TieneIncidenciasEnDia = ""; DateTime dtt_Fecha_Auxiliar = new DateTime(_dtt_Inicio.Year, _dtt_Inicio.Month, _dtt_Inicio.Day); List lst_KRS_JornadasLinea_SaltosEndia = null; while (!bol_Termino) { //Vaciar variables mdl_KRS_JornadasCabecera = null; dtt_HoraCambioDia = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59); int_TotalSegundos_ARealizar = 0; int_TotalSegundos_Reales = 0; int_TotalSegundos_Realizados = 0; str_TieneIncidenciasEnDia = ""; int int_Orden_JornadaLinea = 0; //Rellenar el Modelo INTERNO_AUX_ConsultaDetallada_Modelo mdl_INTERNO_AUX_ConsultaDetallada_Modelo = new INTERNO_AUX_ConsultaDetallada_Modelo(); mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Id_Empleado = mdl_INTERNO_KRS_Empleados_Modelo.id; //Dia de la Semana mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Fecha = dtt_Fecha_Auxiliar; DayOfWeek dow_Dia_Semana = dtt_Fecha_Auxiliar.DayOfWeek; if (dow_Dia_Semana == DayOfWeek.Monday) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.DiaSemana = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_LUNES; } else if (dow_Dia_Semana == DayOfWeek.Tuesday) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.DiaSemana = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_MARTES; } else if (dow_Dia_Semana == DayOfWeek.Wednesday) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.DiaSemana = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_MIERCOLES; } else if (dow_Dia_Semana == DayOfWeek.Thursday) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.DiaSemana = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_JUEVES; } else if (dow_Dia_Semana == DayOfWeek.Friday) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.DiaSemana = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_VIERNES; } else if (dow_Dia_Semana == DayOfWeek.Saturday) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.DiaSemana = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_SABADO; } else if (dow_Dia_Semana == DayOfWeek.Sunday) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.DiaSemana = Variables.G_STR_CALENDARIO_DIASEMANA_INICIAL_DOMINGO; } #region Tipo de Día //Presencia Programada if (lst_KRS_PresenciasProgramadas.Exists(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0))) { mdl_KRS_PresenciasProgramadas = lst_KRS_PresenciasProgramadas.Where(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0)).FirstOrDefault(); mdl_KRS_JornadasCabecera = mdl_KRS_PresenciasProgramadas.KRS_JornadasCabecera; //Rellenar Modelo mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Tipo = "(P.P.)" + mdl_KRS_PresenciasProgramadas.KRS_PresenciasProgramadasTipos.descripcion; } //Ausencia programada else if (lst_KRS_AusenciasProgramadas.Exists(x => x.totalDias != null && x.totalDias.Value > 0 && x.fechaDesde >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59))) { mdl_KRS_AusenciasProgramadas = lst_KRS_AusenciasProgramadas.Where(x => x.totalDias != null && x.totalDias.Value > 0 && x.fechaDesde >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59)).FirstOrDefault(); #region Si la Ausencia es por horas mirar la jornadaCabera //Buscar CargaDias if (mdl_INTERNO_KRS_Empleados_Modelo.KRS_Empleados_Contratos != null && mdl_INTERNO_KRS_Empleados_Modelo.KRS_Empleados_Contratos.Count > 0) { //Busco Contrato KRS_Empleados_Contratos mdl_KRS_Empleados_Contratos = mdl_INTERNO_KRS_Empleados_Modelo.KRS_Empleados_Contratos.Where(m => m.fechaDesde <= dtt_HoraCambioDia && (m.fechaHasta == null || m.fechaHasta.Value >= dtt_HoraCambioDia)).FirstOrDefault(); if (mdl_KRS_Empleados_Contratos != null && mdl_KRS_Empleados_Contratos.KRS_Empleados_Contratos_CargaDias != null) { if (mdl_KRS_Empleados_Contratos.KRS_Empleados_Contratos_CargaDias.ToList().Where(m => m.idAusenciaProgramadaTipo == mdl_KRS_AusenciasProgramadas.idAusenciaProgramadaTipo).FirstOrDefault() != null) { if (lst_KRS_PerfilesLinea.Exists(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0))) { mdl_KRS_JornadasCabecera = lst_KRS_PerfilesLinea.Where(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0)).FirstOrDefault().KRS_JornadasCabecera; } } } } #endregion //Rellenar Modelo mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Tipo = "(A.P.)" + mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.descripcion; } //Dias Festivos else if (lst_KRS_DiasFestivos.Exists(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0))) { mdl_KRS_DiasFestivos = lst_KRS_DiasFestivos.Where(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0)).FirstOrDefault(); //Rellenar Modelo mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Tipo = "(D.F.)" + mdl_KRS_DiasFestivos.descripcion; } //Jornada else if (lst_KRS_PerfilesLinea.Exists(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0))) { mdl_KRS_JornadasCabecera = lst_KRS_PerfilesLinea.Where(x => x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaHasta >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0)).FirstOrDefault().KRS_JornadasCabecera; //Rellenar Modelo mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Tipo = ""; } //Nada else { } #endregion #region Jornada if (mdl_KRS_JornadasCabecera != null) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Jornada = mdl_KRS_JornadasCabecera.descripcion; //Tiempo a realizar int_TotalSegundos_ARealizar = (mdl_KRS_JornadasCabecera.tiempoTeorico.Hours * 3600) + (mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes * 60) + mdl_KRS_JornadasCabecera.tiempoTeorico.Seconds; mdl_INTERNO_AUX_ConsultaDetallada_Modelo.TiempoARealizar = new TimeSpan(mdl_KRS_JornadasCabecera.tiempoTeorico.Hours, mdl_KRS_JornadasCabecera.tiempoTeorico.Minutes, 0); //Si la hora de cambio de dia es es mayor que 00:00 se pone ................... if (mdl_KRS_JornadasCabecera.horaCambioDia.TotalHours > 0) { dtt_HoraCambioDia = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, mdl_KRS_JornadasCabecera.horaCambioDia.Hours, mdl_KRS_JornadasCabecera.horaCambioDia.Minutes, mdl_KRS_JornadasCabecera.horaCambioDia.Seconds); } //Ver si tiene JornadaLinea if (mdl_KRS_JornadasCabecera.KRS_JornadasLinea != null) { lst_KRS_JornadasLinea_SaltosEndia = mdl_KRS_JornadasCabecera.KRS_JornadasLinea.Where(m => m.saltaDia != null && m.saltaDia != false).OrderBy(x => x.orden).ToList(); if (lst_KRS_JornadasLinea_SaltosEndia != null && lst_KRS_JornadasLinea_SaltosEndia.Count > 0) { int_Orden_JornadaLinea = lst_KRS_JornadasLinea_SaltosEndia.FirstOrDefault().orden.Value; } } } else { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Jornada = ""; mdl_INTERNO_AUX_ConsultaDetallada_Modelo.TiempoARealizar = new TimeSpan(0, 0, 0); } #endregion #region Total de horas de Ausencias Programadas int int_TotalAbsentismo_Dias_Contabilizable = 0; int int_TotalAbsentismo_Dias_NoContabilizable = 0; int int_TotalAbsentismo_Segundos_Contabilizable = 0; int int_TotalAbsentismo_Segundos_NoContabilizable = 0; List lst_KRS_AusenciasProgramadas_FILTRADA = lst_KRS_AusenciasProgramadas.Where(x => x.fechaDesde >= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0) && x.fechaDesde <= new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59)).ToList(); if (lst_KRS_AusenciasProgramadas_FILTRADA != null && lst_KRS_AusenciasProgramadas_FILTRADA.Count > 0) { int int_Dias = 0; int int_Horas = 0; int int_Minutos = 0; int int_Dias_Totales_AUX_1 = 0; int int_Horas_Totales_AUX_1 = 0; int int_Minutos_Totales_AUX_1 = 0; foreach (KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas_AUX in lst_KRS_AusenciasProgramadas_FILTRADA) { int_Horas = 0; int_Minutos = 0; int_Dias = 0; //Por Dias if (mdl_KRS_AusenciasProgramadas_AUX.totalDias != null && mdl_KRS_AusenciasProgramadas_AUX.totalDias.Value > 0) { //Sumar dias int_Dias = mdl_KRS_AusenciasProgramadas_AUX.totalDias.Value; int_Dias_Totales_AUX_1 += mdl_KRS_AusenciasProgramadas_AUX.totalDias.Value; //Sumar en segundos el tiempo final if (mdl_KRS_AusenciasProgramadas_AUX.KRS_AusenciasProgramadasTipos.contabilizarTiempo != null && mdl_KRS_AusenciasProgramadas_AUX.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value) { int_TotalAbsentismo_Dias_Contabilizable += int_Dias; } else { int_TotalAbsentismo_Dias_NoContabilizable += int_Dias; } } //Por horas else if (mdl_KRS_AusenciasProgramadas_AUX.totalHoras != null && mdl_KRS_AusenciasProgramadas_AUX.totalHoras.Value > 0) { //Si la hora desde es 0 y la hasta es 23 se pone en total horas las horas del tiempo teorico if (int_TotalSegundos_ARealizar > 0 && mdl_KRS_AusenciasProgramadas_AUX.fechaDesde.Hour == 0 && mdl_KRS_AusenciasProgramadas_AUX.fechaDesde.Minute == 0 && mdl_KRS_AusenciasProgramadas_AUX.fechaHasta.Value.Hour == 23 && mdl_KRS_AusenciasProgramadas_AUX.fechaHasta.Value.Minute == 59) { //Buscar el tiempoTeorico para ese dia mdl_KRS_AusenciasProgramadas_AUX.totalHoras = Funciones.RedondearDecimal(decimal.Parse(int_TotalSegundos_ARealizar.ToString()) / 3600m, 2); } //Sumar horas y minutos string[] arr_str_Valores = mdl_KRS_AusenciasProgramadas_AUX.totalHoras.Value.ToString().Split(','); if (arr_str_Valores.Length > 0) { int_Horas = int.Parse(arr_str_Valores[0]); int_Horas_Totales_AUX_1 += int.Parse(arr_str_Valores[0]); if (arr_str_Valores.Length > 1) { string str_Minutos = arr_str_Valores[1] + "00"; decimal dcm_Minutos = (decimal.Parse(str_Minutos.Substring(0, 2)) / 100m) * 60m; int_Minutos = Convert.ToInt32(dcm_Minutos); int_Minutos_Totales_AUX_1 += Convert.ToInt32(dcm_Minutos); } } //Sumar en segundos el tiempo final if (mdl_KRS_AusenciasProgramadas_AUX.KRS_AusenciasProgramadasTipos.contabilizarTiempo != null && mdl_KRS_AusenciasProgramadas_AUX.KRS_AusenciasProgramadasTipos.contabilizarTiempo.Value) { int_TotalAbsentismo_Segundos_Contabilizable += (int_Horas * 3600) + (int_Minutos * 60); } else { int_TotalAbsentismo_Segundos_NoContabilizable += (int_Horas * 3600) + (int_Minutos * 60); } } } mdl_INTERNO_AUX_ConsultaDetallada_Modelo.TiempoAbsentismo = int_Dias_Totales_AUX_1 + " dia/s || " + int_Horas + ":" + string.Format("{0:00}", int_Minutos_Totales_AUX_1) + " hora/s"; ; } else { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.TiempoAbsentismo = "0 dia/s || 0 hora/s"; } #endregion //Sumar fichajes si los hubiera para ese dia DateTime dtt_Fecha_Auxiliar_Fin = new DateTime(dtt_FechaHora_BuscarFichajes_Fin.Year, dtt_FechaHora_BuscarFichajes_Fin.Month, dtt_FechaHora_BuscarFichajes_Fin.Day, 23, 59, 59); //Primer salto de día DateTime? dtt_SaltoDeDia = null; if (lst_KRS_JornadasLinea_SaltosEndia != null && lst_KRS_JornadasLinea_SaltosEndia.Count > 0) { dtt_SaltoDeDia = new DateTime(dtt_Fecha_Auxiliar.AddDays(+1).Year, dtt_Fecha_Auxiliar.AddDays(+1).Month, dtt_Fecha_Auxiliar.AddDays(+1).Day, lst_KRS_JornadasLinea_SaltosEndia.FirstOrDefault().hora.Hours, lst_KRS_JornadasLinea_SaltosEndia.FirstOrDefault().hora.Minutes, 0); dtt_HoraCambioDia = dtt_HoraCambioDia.AddDays(+1); } List lst_KRSS_Fichajes_DelDia = lst_KRSS_Fichajes_RangoFechas.Where(x => ((x.fechaHora >= dtt_Fecha_Auxiliar) && (x.fechaHora <= dtt_Fecha_Auxiliar_Fin)) && (x.anulado == null) && (x.idEmpleado.Equals(mdl_INTERNO_KRS_Empleados_Modelo.id))).ToList(); string str_TipoEntradaSalida_QueSeEspera = "E"; DateTime dtt_FechaHoraEntrada = dtt_Fecha_Auxiliar; DateTime dtt_FechaHoraSalida = dtt_Fecha_Auxiliar; //Sumar tiempo efectivo List lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo = null; if (lst_KRSS_Fichajes_DelDia != null && lst_KRSS_Fichajes_DelDia.Count > 0) { int_TotalSegundos_Realizados = 0; int_TotalSegundos_Reales = 0; lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo = null; //Ver si tiene que contar los minutos, segun el perfil linea si tiene marcado contabilizado para esta hora ......... if (mdl_KRS_JornadasCabecera != null && mdl_KRS_JornadasCabecera.KRS_JornadasLinea != null && mdl_KRS_JornadasCabecera.KRS_JornadasLinea.Count > 0) { //Instanciar el Listado lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo = new List(); int int_HoraAnterior = -1; DateTime dtt_FechaHora_JornadaLinea = DateTime.Now; foreach (KRS_JornadasLinea mdl_KRS_JornadasLinea in mdl_KRS_JornadasCabecera.KRS_JornadasLinea) { dtt_FechaHora_JornadaLinea = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, mdl_KRS_JornadasLinea.hora.Hours, mdl_KRS_JornadasLinea.hora.Minutes, mdl_KRS_JornadasLinea.hora.Seconds); //Si la Hora anterior es mayor que la hora actual, cambio de dia if (int_HoraAnterior > mdl_KRS_JornadasLinea.hora.Hours) { dtt_FechaHora_JornadaLinea = dtt_FechaHora_JornadaLinea.AddDays(1); } int_HoraAnterior = mdl_KRS_JornadasLinea.hora.Hours; //Añadir al Listado lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Add(new INTERNO_AUX_TiempoRealizadoEfectivo_Modelo(dtt_FechaHora_JornadaLinea, mdl_KRS_JornadasLinea.sumaTiempo)); } } //................................................................................................................... //Recorrer los Fichajes del Dia foreach (KRSS_Fichajes mdl_KRSS_Fichajes in lst_KRSS_Fichajes_DelDia.OrderBy(m => m.fechaHora)) { //Si cambia de dia, ya no sigo sumando if (dtt_SaltoDeDia != null && mdl_KRSS_Fichajes.fechaHora > dtt_SaltoDeDia) { //sumo uno al orden para saber cual es el siguiente salto de dia int_Orden_JornadaLinea += 1; KRS_JornadasLinea mdl_KRS_JornadasLinea = lst_KRS_JornadasLinea_SaltosEndia.Where(m => m.orden.Equals(int_Orden_JornadaLinea)).FirstOrDefault(); if (mdl_KRS_JornadasLinea != null) { dtt_SaltoDeDia = dtt_SaltoDeDia.Value.AddDays(+1); dtt_SaltoDeDia = new DateTime(dtt_SaltoDeDia.Value.Year, dtt_SaltoDeDia.Value.Month, dtt_SaltoDeDia.Value.Day, mdl_KRS_JornadasLinea.hora.Hours, mdl_KRS_JornadasLinea.hora.Minutes, 0); } dtt_HoraCambioDia = dtt_HoraCambioDia.AddDays(+1); } if (dtt_HoraCambioDia > mdl_KRSS_Fichajes.fechaHora) { //Solo si esta como que no tiene incidencias if (str_TieneIncidenciasEnDia.Equals("")) { if (mdl_KRSS_Fichajes.validado == null) { str_TieneIncidenciasEnDia = Variables_KairosPRO.G_STR_TIPO_INCIDENCIA_SINVALIDAR; } else if (mdl_KRSS_Fichajes.validado == 1) { str_TieneIncidenciasEnDia = Variables_KairosPRO.G_STR_TIPO_INCIDENCIA_CONINCIDENCIAS; } else if (mdl_KRSS_Fichajes.validado == 0) { str_TieneIncidenciasEnDia = Variables_KairosPRO.G_STR_TIPO_INCIDENCIA_SININCIDENCIAS; } } //Entrada if (str_TipoEntradaSalida_QueSeEspera.Equals("E") && mdl_KRSS_Fichajes.entradaSalida.Equals("E")) { dtt_FechaHoraEntrada = mdl_KRSS_Fichajes.fechaHora; //............................................ str_TipoEntradaSalida_QueSeEspera = "S"; } //Salida else if (str_TipoEntradaSalida_QueSeEspera.Equals("S") && mdl_KRSS_Fichajes.entradaSalida.Equals("S")) { dtt_FechaHoraSalida = mdl_KRSS_Fichajes.fechaHora; while (dtt_FechaHoraSalida > dtt_FechaHoraEntrada) { //Contar el tiempo realizado efectivo ......................................... if (lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo != null) { for (int int_Contador = 0; int_Contador < lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Count; int_Contador++) { if (lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador].SumaTiempoTeorico) { //Si estoy en el ultimo no sumo if (int_Contador == lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Count - 1) { break; } else if (dtt_FechaHoraEntrada >= lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador].FechaHora && dtt_FechaHoraEntrada < lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador + 1].FechaHora) { int_TotalSegundos_Realizados += 60; } } } } //............................................................................. int_TotalSegundos_Reales += 60; dtt_FechaHoraEntrada = dtt_FechaHoraEntrada.AddMinutes(1); } //............................................ str_TipoEntradaSalida_QueSeEspera = "E"; } } else { break; } } //Si esta esperando salida y no hay ninguna se presupone que se pone la de cambio de dia if (str_TipoEntradaSalida_QueSeEspera.Equals("S")) { dtt_FechaHoraSalida = dtt_HoraCambioDia; while (dtt_FechaHoraSalida > dtt_FechaHoraEntrada) { //Contar el tiempo realizado efectivo ......................................... if (lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo != null) { for (int int_Contador = 0; int_Contador < lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Count; int_Contador++) { if (lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador].SumaTiempoTeorico) { //Si estoy en el ultimo no sumo if (int_Contador == lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo.Count - 1) { break; } else if (dtt_FechaHoraEntrada >= lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador].FechaHora && dtt_FechaHoraEntrada < lst_INTERNO_AUX_TiempoRealizadoEfectivo_Modelo[int_Contador + 1].FechaHora) { int_TotalSegundos_Realizados += 60; } } } } //............................................................................. int_TotalSegundos_Reales += 60; dtt_FechaHoraEntrada = dtt_FechaHoraEntrada.AddMinutes(1); } } DateTime dtt_FechaSinHoras = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0); #region Horas Extras del Dia Reales DateTime dtt_Fecha_FinDia = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59); List lst_KRS_KRS_HorasExtrasCalculadasLineas = Funciones_KairosPRO.HorasExtras_CalcularLineas(dtt_FechaSinHoras, lst_KRSS_Fichajes_DelDia.Where(m => m.fechaHora >= dtt_FechaSinHoras && m.fechaHora <= dtt_Fecha_FinDia).ToList(), lst_KRS_DiasFestivos, mdl_INTERNO_KRS_Empleados_Modelo, true, null, (mdl_INTERNO_KRS_Empleados_Modelo.idHoraExtraCabecera != null ? mdl_INTERNO_KRS_Empleados_Modelo.idHoraExtraCabecera.Value : -1), 0, -1, "" ); if (lst_KRS_KRS_HorasExtrasCalculadasLineas != null && lst_KRS_KRS_HorasExtrasCalculadasLineas.Count > 0) { //horas Reales decimal dcm_horasExtrasReales = lst_KRS_KRS_HorasExtrasCalculadasLineas.Sum(m => m.horasTotalesReales); mdl_INTERNO_AUX_ConsultaDetallada_Modelo.HorasExtras_Reales = Funciones_KairosPRO.Convertir_Horas_A_TimeSpan(dcm_horasExtrasReales); //horas Reales por convenio decimal dcm_horasExtrasReales_PorConvion = lst_KRS_KRS_HorasExtrasCalculadasLineas.Sum(m => m.horasTotalesCalculadas); mdl_INTERNO_AUX_ConsultaDetallada_Modelo.HorasExtras_Reales_PorConvenio = Funciones_KairosPRO.Convertir_Horas_A_TimeSpan(dcm_horasExtrasReales_PorConvion); } #endregion #region Horas Extras Autorizadas KRS_HorasExtrasCalculadasCabecera mdl_KRS_HorasExtrasCalculadasCabecera = obj_KRS_HorasExtrasCalculadasCabecera_Datos.Obtener_Simple(mdl_INTERNO_KRS_Empleados_Modelo.id, mdl_INTERNO_KRS_Empleados_Modelo.codigoCliente, dtt_FechaSinHoras, true); if (mdl_KRS_HorasExtrasCalculadasCabecera != null) { //horas Autorizadas mdl_INTERNO_AUX_ConsultaDetallada_Modelo.HorasExtras_Autorizadas = Funciones_KairosPRO.Convertir_Horas_A_TimeSpan(mdl_KRS_HorasExtrasCalculadasCabecera.totalHorasExtrasReales); //horas Autorizadas por convenio mdl_INTERNO_AUX_ConsultaDetallada_Modelo.HorasExtras_Autorizadas_PorConvenio = Funciones_KairosPRO.Convertir_Horas_A_TimeSpan(mdl_KRS_HorasExtrasCalculadasCabecera.totalHorasExtrasConvertidas); } #endregion } else { //Si tenia que tener fichajes y no tiene fichajes if (int_TotalSegundos_ARealizar > 0) { str_TieneIncidenciasEnDia = Variables_KairosPRO.G_STR_TIPO_INCIDENCIA_SINFICHAJES; } } //Tiempo Realizado Efectivo .................................................................................................. int int_Horas_RealizadoEfectivo = ((int_TotalSegundos_Realizados) / 3600); int int_Minutos_RealizadoEfectivo = (((int_TotalSegundos_Realizados) - int_Horas_RealizadoEfectivo * 3600) / 60); int int_Segundos_RealizadoEfectivo = (int_TotalSegundos_Realizados) - (int_Horas_RealizadoEfectivo * 3600 + int_Minutos_RealizadoEfectivo * 60); mdl_INTERNO_AUX_ConsultaDetallada_Modelo.TiempoRealizado = new TimeSpan(int_Horas_RealizadoEfectivo, int_Minutos_RealizadoEfectivo, 0); //............................................................................................................... //Tiempo Real .................................................................................................. int int_Horas_Real = (int_TotalSegundos_Reales / 3600); int int_Minutos_Real = ((int_TotalSegundos_Reales - int_Horas_Real * 3600) / 60); int int_Segundos_Real = int_TotalSegundos_Reales - (int_Horas_Real * 3600 + int_Minutos_Real * 60); mdl_INTERNO_AUX_ConsultaDetallada_Modelo.TiempoReal = new TimeSpan(int_Horas_Real, int_Minutos_Real, 0); //............................................................................................................... //Saldo .................................................................................................. TimeSpan tms_Coparacion = new TimeSpan(0, 0, 0); DateTime dtt_Fecha_I = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 0, 0, 0); DateTime dtt_Fecha_S = new DateTime(dtt_Fecha_Auxiliar.Year, dtt_Fecha_Auxiliar.Month, dtt_Fecha_Auxiliar.Day, 23, 59, 59); //Si es una ausencia y no tiene fichajes no se cuenta el saldo if (mdl_KRS_AusenciasProgramadas!=null && (lst_KRSS_Fichajes_DelDia == null || !lst_KRSS_Fichajes_DelDia.Exists(m => m.fechaHora >= dtt_Fecha_I && m.fechaHora <= dtt_Fecha_S))) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Saldo = new TimeSpan(0, 0, 0); } else { if (mdl_INTERNO_AUX_ConsultaDetallada_Modelo.HorasExtras_Autorizadas > tms_Coparacion || mdl_INTERNO_AUX_ConsultaDetallada_Modelo.HorasExtras_Autorizadas_PorConvenio > tms_Coparacion) { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Saldo = new TimeSpan(0, 0, 0); } else { int int_TotalSegundos_Saldo = int_TotalSegundos_Realizados - (int_TotalSegundos_ARealizar - (int_TotalAbsentismo_Segundos_Contabilizable)); int int_Horas_Saldo = (int_TotalSegundos_Saldo / 3600); int int_Minutos_Saldo = ((int_TotalSegundos_Saldo - int_Horas_Saldo * 3600) / 60); int int_Segundos_Saldo = int_TotalSegundos_Saldo - (int_Horas_Saldo * 3600 + int_Minutos_Saldo * 60); mdl_INTERNO_AUX_ConsultaDetallada_Modelo.Saldo = new TimeSpan(int_Horas_Saldo, int_Minutos_Saldo, 0); } } //............................................................................................................... //Incidencias en Horas .......................................................................................... if ((int_TotalSegundos_ARealizar > 0 && int_TotalSegundos_Realizados == 0) || //Si tenia que tener fichajes y no tiene fichajes (int_TotalSegundos_ARealizar == 0 && int_TotalSegundos_Realizados > 0) || //Si no tenia que tener fichajes y tiene fichajes ((int_TotalSegundos_Realizados - (int_TotalSegundos_ARealizar - (int_TotalAbsentismo_Segundos_Contabilizable))) < 0)) //Si la suma de los fichajes no llega al total de horas que tenia que tener { mdl_INTERNO_AUX_ConsultaDetallada_Modelo.IncidenciaHoras = true; } //............................................................................................................... //Incidencias del dia ........................................................................................... mdl_INTERNO_AUX_ConsultaDetallada_Modelo.IncidenciaDia = str_TieneIncidenciasEnDia; //............................................................................................................... //Añadir al Listado --------------------------------------------------------------------------------- lst_INTERNO_AUX_ConsultaDetallada_Modelo.Add(mdl_INTERNO_AUX_ConsultaDetallada_Modelo); //Añadir dia dtt_Fecha_Auxiliar = dtt_Fecha_Auxiliar.AddDays(1); while (dtt_FechaHoraSalida != null && dtt_Fecha_Auxiliar < dtt_FechaHoraSalida) { dtt_Fecha_Auxiliar = dtt_Fecha_Auxiliar.AddDays(1); } if (dtt_Fecha_Auxiliar > dtt_Fecha_Auxiliar_Fin) { bol_Termino = true; } } } } catch (Control_Errores) { lst_INTERNO_AUX_ConsultaDetallada_Modelo = null; } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(Funciones_KairosPRO) + "/" + nameof(CargarDatos_ConsultaDetallada)); lst_INTERNO_AUX_ConsultaDetallada_Modelo = null; } return lst_INTERNO_AUX_ConsultaDetallada_Modelo; } #endregion } }