using Exferia_Aplicacion.General; using Exferia_EntityFramework; using Exferia_General; using Exferia_KairosPRO._1_Modelos; using Exferia_KairosPRO_EF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Exferia_KairosPRO._4_Vistas.Controladoras { class Class1 { /*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_HorasReales = 0; int int_MinutosReales = 0; int int_HorasContabilizables = 0; int int_MinutosContabilizables = 0; int int_DiasFetivos = 0; int int_TotalSegundos_Realizados = 0; int int_TotalSegundos_Reales = 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_HorasExtrasTotales_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_HorasReales = 0; int_MinutosReales = 0; int_HorasContabilizables = 0; int_MinutosContabilizables = 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) { //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_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; } } //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) { //Tipo horas if (mdl_KRS_Empleados_Contratos_CargaDias.horas != null && mdl_KRS_Empleados_Contratos_CargaDias.horas.Value) { //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; if (mdl_KRS_JornadasCabecera != null) { // Si se pone esto hay que modificar el servicio web // int int_TotalHorasAusencia_PorHoras = 0; //int int_TotalMinutosAusencia_PorHoras = 0; //#region horas y minutos de la Ausencia por horas //decimal dcm_TotalHoras_TeoricasASumar = (mdl_KRS_AusenciasProgramadas.totalHoras != null ? mdl_KRS_AusenciasProgramadas.totalHoras.Value : 0m); //string[] arr_TotalHoras_TeoricasASumar = dcm_TotalHoras_TeoricasASumar.ToString().Split(','); //int_TotalHorasAusencia_PorHoras = int.Parse(arr_TotalHoras_TeoricasASumar[0]); //decimal dcm_TotalMinutos_TeoricasASumar = dcm_TotalHoras_TeoricasASumar - int_TotalHorasAusencia_PorHoras; //if (dcm_TotalMinutos_TeoricasASumar > 0) //{ // int_TotalMinutosAusencia_PorHoras = int.Parse(Funciones.RedondearDecimal(dcm_TotalMinutos_TeoricasASumar * 60, 0).ToString()); //} //#endregion 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; bol_HorasTeoricasEntro = true; } } 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)); } } //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)); } } } } //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)); } } } } //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)); } } } } //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)); } } } } } } } //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; } } //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; } } //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; //............................................................................................................... //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; //............................................................................................................... #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 //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_EnMinutos = (((int_HorasContabilizables * 60) + (int_MinutosContabilizables_Finales_calculados % 60)) - ((int_HorasTeoricas * 60) + (int_MinutosTeoricos % 60))); int int_Saldo_Horas_Calculadas = int_Saldo_EnMinutos / 60; int int_Saldo_Minutos_Calculados = int_Saldo_EnMinutos % 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_HorasExtrasTotales_Modelo_AUTORIZADAS_POREMPLEADO != null && lst_INTERNO_AUX_HorasExtrasTotales_Modelo_AUTORIZADAS_POREMPLEADO.Count > 0) { INTERNO_AUX_HorasExtrasTotales_Modelo mdl_INTERNO_AUX_HorasExtrasTotales_Modelo = lst_INTERNO_AUX_HorasExtrasTotales_Modelo_AUTORIZADAS_POREMPLEADO.Where(m => m.idEmpleado == mdl_INTERNO_KRS_Empleados_Modelo.id).FirstOrDefault(); if (mdl_INTERNO_AUX_HorasExtrasTotales_Modelo != null) { dcm_HorasExtrasReales = mdl_INTERNO_AUX_HorasExtrasTotales_Modelo.HorasExtra_Real; dcm_HorasExtrasConvertidas = mdl_INTERNO_AUX_HorasExtrasTotales_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 //Si existe Horas ExtrasAutorizadas o Horas extras autorizados por convenio, el saldo es 0 if (dcm_HorasExtrasReales > 0 || dcm_HorasExtrasConvertidas > 0) { INTERNO_AUX_ConsultaDetalladaJornada_Modelo mdl_INTERNO_AUX_ConsultaDetalladaJornada_Modelo = g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Where(m => m.Descripcion == Variables_KairosPRO.G_STR_CONSULTADETALLADA_PORJORNADAEMPLEADO_SALDO).FirstOrDefault(); if (mdl_INTERNO_AUX_ConsultaDetalladaJornada_Modelo != null) { mdl_INTERNO_AUX_ConsultaDetalladaJornada_Modelo.Resultado = "00:00"; } } } } catch (Exception) { throw; } return g_lst_INTERNO_AUX_ConsultaDetalladaJornada_Modelo; }*/ } }