Exferia/Exferia_KairosPro/Exferia_KairosPRO/4_Vistas/Controladoras/Class1.cs

934 lines
75 KiB
C#

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<INTERNO_AUX_ConsultaDetalladaJornada_Modelo> CargarDatos_ConsultaDetallada_JornadaEmpleado(DateTime _dtt_Inicio,
DateTime _dtt_Fin,
TimeSpan _tms_Inicio,
TimeSpan _tms_Fin,
List<long> _lst_idEmpleados,
long _lng_idEmpresa,
List<INTERNO_ComboBox_Modelo> _lst_INTERNO_ComboBox_Modelo_PRESENCIASPROGRAMADAS,
List<INTERNO_ComboBox_Modelo> _lst_INTERNO_ComboBox_Modelo_AUSENCIASPROGRAMADAS,
bool _bol_DiasFestivos,
List<INTERNO_ComboBox_Modelo> _lst_INTERNO_ComboBox_Modelo_JORNADA,
List<INTERNO_ComboBox_Modelo> _lst_INTERNO_ComboBox_Modelo_HORASEXTRAS)
{
List<INTERNO_AUX_ConsultaDetalladaJornada_Modelo> 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<KRS_PresenciasProgramadas> lst_KRS_PresenciasProgramadas = null;
List<long> g_lst_idPresenciasProgramadas = new List<long>();
List<KRS_AusenciasProgramadas> lst_KRS_AusenciasProgramadas = null;
List<INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo> g_lst_INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo = new List<INTERNO_AUX_ConsultaDetalladaJornada_AusenciasProgramadas_Modelo>();
List<KRS_PerfilesLinea> lst_KRS_PerfilesLinea = null;
List<KRSS_Fichajes> lst_KRSS_Fichajes_RangoFechas = null;
List<KRS_DiasFestivos> lst_KRS_DiasFestivos = null;
List<INTERNO_KRS_Empleados_Modelo> 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<KRS_AusenciasProgramadas> 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<long> 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<INTERNO_AUX_HorasExtrasTotales_Modelo> 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<INTERNO_AUX_ConsultaDetalladaJornada_Modelo>();
//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<KRS_PresenciasProgramadas>();
lst_KRS_AusenciasProgramadas = mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas != null ? mdl_INTERNO_KRS_Empleados_Modelo.KRS_AusenciasProgramadas.ToList() : new List<KRS_AusenciasProgramadas>();
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<KRS_DiasFestivos>();
}
if (lst_KRSS_Fichajes_RangoFechas == null)
{
lst_KRSS_Fichajes_RangoFechas = new List<KRSS_Fichajes>();
}
//...........................................................................................
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<KRS_JornadasLinea> lst_KRS_JornadasLinea_SaltosEndia = null;
decimal dcm_HoraExtrasReales = 0m;
decimal dcm_HoraExtrasReales_porConvenio = 0m;
List<KRS_Empleados_Contratos_CargaDias> 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<KRSS_Fichajes> 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<INTERNO_AUX_TiempoRealizadoEfectivo_Modelo> 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<INTERNO_AUX_TiempoRealizadoEfectivo_Modelo>();
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<KRS_HorasExtrasCalculadasLineas> 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;
}*/
}
}