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