Exferia/Exferia_KairosPro/Exferia_KairosPRO/General/Verificacion_Fichajes.cs

2023 lines
150 KiB
C#

using Exferia_Aplicacion.General;
using Exferia_Controles;
using Exferia_EntityFramework;
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 Verificacion_Fichajes
{
#region Variables privadas
private long g_lng_CodigoCliente = -1;
private DateTime g_dtt_Validacion;
private KRS_Empleados g_mdl_KRS_Empleados = null;
private bool g_bol_Grabar_Diccionarios_XML = false;
// private List<INTERNO_VerificacionFichajes_JornadasLinea_Modelo> g_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo = null;
private KRS_DiasFestivos_Datos g_obj_KRS_DiasFestivos_Datos = new KRS_DiasFestivos_Datos();
private KRS_JornadasCabecera_Datos g_obj_KRS_JornadasCabecera_Datos = new KRS_JornadasCabecera_Datos();
private KRS_AusenciasProgramadas_Datos g_obj_KRS_AusenciasProgramadas_Datos = new KRS_AusenciasProgramadas_Datos();
private KRSS_Fichajes_Datos g_obj_KRSS_Fichajes_Datos = new KRSS_Fichajes_Datos();
private KRS_JornadasLinea_Datos g_obj_KRS_JornadasLinea_Datos = new KRS_JornadasLinea_Datos();
private TMP_Emails_FichajesIncidencias_Datos g_obj_TMP_Emails_FichajesIncidencias_Datos = new TMP_Emails_FichajesIncidencias_Datos();
private TMP_Emails_Informes_PorFechas_Datos g_obj_TMP_Emails_Informes_PorFechas_Datos = new TMP_Emails_Informes_PorFechas_Datos();
private TMP_Emails_RecordatorioFichajes_Datos g_obj_TMP_Emails_RecordatorioFichajes_Datos = new TMP_Emails_RecordatorioFichajes_Datos();
private KRSS_DispositivosModelo_Datos g_obj_KRSS_DispositivosModelo_Datos = new KRSS_DispositivosModelo_Datos();
#endregion
public void Proceso(long _lng_CodigoCliente, DateTime _dtt_Validacion, KRS_Empleados _mdl_KRS_Empleados,bool _bol_Grabar_Diccionarios_XML,long _lng_idEmpresa)
{
try
{
g_lng_CodigoCliente = _lng_CodigoCliente;
g_dtt_Validacion = _dtt_Validacion;
g_mdl_KRS_Empleados = _mdl_KRS_Empleados;
g_bol_Grabar_Diccionarios_XML = _bol_Grabar_Diccionarios_XML;
if (g_bol_Grabar_Diccionarios_XML == false)
{
Variables_KairosPRO.G_DCT_JORNADASLINEASHORAINICIALYAVALIDADAS.Clear();
Variables_KairosPRO.G_DCT_JORNADASLINEASHORAINICIALYAVALIDADAS.Add(g_lng_CodigoCliente, new List<INTERNO_VerificacionFichajes_JornadaHoraInicialEmpleado_Validada_Modelo>());
Variables_KairosPRO.G_DCT_JORNADASLINEASHORAFINALYAVALIDADAS.Clear();
Variables_KairosPRO.G_DCT_JORNADASLINEASHORAFINALYAVALIDADAS.Add(g_lng_CodigoCliente, new List<INTERNO_VerificacionFichajes_JornadaHoraFinalEmpleado_Validada_Modelo>());
Variables_KairosPRO.G_DCT_DETALLEFICHAJEYAVALIDADOS.Clear();
Variables_KairosPRO.G_DCT_DETALLEFICHAJEYAVALIDADOS.Add(g_lng_CodigoCliente, new List<INTERNO_VerificacionFichajes_InformeDetalleFichaje_Validado_Modelo>());
}
DateTime dtt_Fecha_Calculada_Validacion = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(g_dtt_Validacion, g_mdl_KRS_Empleados.usoHorario);
//Si la fecha de baja no es nula y es inferior a la fecha a validar nose pone el fichaje
if (g_mdl_KRS_Empleados.fechaBaja == null ||
g_mdl_KRS_Empleados.fechaBaja.Value > dtt_Fecha_Calculada_Validacion)
{
//Presencias Programadas .................................................................................
INTERNO_Verificacion_JornadasCabecera_Modelo mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS = g_obj_KRS_JornadasCabecera_Datos.Obtener_JornadasCabecera_PresenciasProgramadas_ParaVerificacion(g_mdl_KRS_Empleados.id, _lng_CodigoCliente, dtt_Fecha_Calculada_Validacion);
if (mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS != null)
{
Validacion_Jornada(g_mdl_KRS_Empleados.id,
dtt_Fecha_Calculada_Validacion,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS,
_lng_idEmpresa);
}
//Mirar Ausencias Programadas por Dia.................................................................................
else
{
KRS_AusenciasProgramadas mdl_KRS_AusenciasProgramadas = g_obj_KRS_AusenciasProgramadas_Datos.Obtener_Modelo_Por_EmpleadoClienteFecha_SinHoras(g_mdl_KRS_Empleados.id, _lng_CodigoCliente, dtt_Fecha_Calculada_Validacion,true);
if (mdl_KRS_AusenciasProgramadas != null)
{
Validacion_AusenciasProgramadas(g_mdl_KRS_Empleados.id,
dtt_Fecha_Calculada_Validacion,
mdl_KRS_AusenciasProgramadas,
_lng_idEmpresa);
}
//Mirar Dias Festivos .................................................................................
else
{
KRS_DiasFestivos mdl_KRS_DiasFestivos = g_obj_KRS_DiasFestivos_Datos.Obtener_Modelo_Por_CodigoClienteFecha(_lng_CodigoCliente, dtt_Fecha_Calculada_Validacion);
if (mdl_KRS_DiasFestivos != null)
{
Validacion_DiasFestivos(g_mdl_KRS_Empleados.id,
dtt_Fecha_Calculada_Validacion,
mdl_KRS_DiasFestivos,
_lng_idEmpresa);
}
//Mirar la Jornada .................................................................................
else
{
INTERNO_Verificacion_JornadasCabecera_Modelo mdl_INTERNO_Verificacion_JornadasCabecera_Modelo = g_obj_KRS_JornadasCabecera_Datos.Obtener_JornadasCabecera_ParaVerificacion(g_mdl_KRS_Empleados.id, _lng_CodigoCliente, dtt_Fecha_Calculada_Validacion);
if (mdl_INTERNO_Verificacion_JornadasCabecera_Modelo != null)
{
Validacion_Jornada(g_mdl_KRS_Empleados.id,
dtt_Fecha_Calculada_Validacion,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
_lng_idEmpresa);
}
//Si hubieran fichaje para este dia, estarian todos incorrectos
else
{
Validacion_Fichajes_SinNadaAsignado(g_mdl_KRS_Empleados.id,
dtt_Fecha_Calculada_Validacion,
_lng_idEmpresa);
}
}
}
}
}
//..........................................................................................................
}
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Verificacion_Fichajes) + "/" + nameof(Proceso));
}
}
private void Validacion_Jornada(long _lng_idEmpleado,
DateTime _dtt_Actual,
INTERNO_Verificacion_JornadasCabecera_Modelo _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
long _lng_idEmpresa)
{
try
{
DateTime dtt_FechaHoraActual = new DateTime(_dtt_Actual.Year, _dtt_Actual.Month, _dtt_Actual.Day,_dtt_Actual.Hour, _dtt_Actual.Minute, 0);
//Dia de fichaje
DateTime dtt_FechaDesde_BusquedaFichaje = Buscar_FechaInicial_BusquedaFichajes(_dtt_Actual);
DateTime dtt_FechaHasta_BusquedaFichaje = Buscar_FechaFinal_BusquedaFichajes(_dtt_Actual);
//Obtener todos los Fichajes del Dia
List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo = g_obj_KRSS_Fichajes_Datos.Obtener_Listado_ParaVerificacionFichajes(g_lng_CodigoCliente, _lng_idEmpleado, dtt_FechaDesde_BusquedaFichaje, dtt_FechaHasta_BusquedaFichaje, _lng_idEmpresa);
if (g_bol_Grabar_Diccionarios_XML==false && lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo!=null)
{
lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m=>m.validado!=null).ToList().ForEach(m => m.validado = -1);
}
//JornadasLinea
List<INTERNO_VerificacionFichajes_JornadasLinea_Modelo> lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo = g_obj_KRS_JornadasLinea_Datos.Obtener_JornadasLineas_ParaVerificacionFichajes(_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,g_lng_CodigoCliente);
//JornadasLineas Ya Validadas ...........................................
long lng_UltimaJornadaValidada = -1;
List<INTERNO_VerificacionFichajes_JornadaHoraFinalEmpleado_Validada_Modelo> lst_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo = null;
if (Variables_KairosPRO.G_DCT_JORNADASLINEASHORAFINALYAVALIDADAS.Count > 0)
{
lst_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo = Variables_KairosPRO.G_DCT_JORNADASLINEASHORAFINALYAVALIDADAS[g_lng_CodigoCliente];
if (lst_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo != null)
{
INTERNO_VerificacionFichajes_JornadaHoraFinalEmpleado_Validada_Modelo mdl_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo = lst_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo
.Where(m => m.IdEmpleado.Equals(_lng_idEmpleado) &&
m.IdEmpresa.Equals(_lng_idEmpresa) &&
m.Fecha.ToString("dd/MM/yyyy").Equals(_dtt_Actual.ToString("dd/MM/yyyy"))).FirstOrDefault();
if (mdl_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo != null)
{
lng_UltimaJornadaValidada = mdl_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo.IdJornadaLinea;
}
//Sino tiene nada ese dia y la jornadacabecera tiene saltodia y se salto de dia busco en el dia anterior
else
{
if (_dtt_Actual.Date>_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Date)
{
mdl_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo = lst_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo
.Where(m => m.IdEmpleado.Equals(_lng_idEmpleado) &&
m.IdEmpresa.Equals(_lng_idEmpresa) &&
m.Fecha.ToString("dd/MM/yyyy").Equals(_dtt_Actual.AddDays(-1).ToString("dd/MM/yyyy"))).FirstOrDefault();
if (mdl_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo != null)
{
lng_UltimaJornadaValidada = mdl_INTERNO_JornadaHoraFinalEmpleado_Validada_Modelo.IdJornadaLinea;
}
}
}
}
}
//.....................................................................
if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo != null)
{
int int_Contador = 1;
bool bol_JornadaLinea_Inicial = false;
bool bol_Tipo_JornadaAnterior_Flexible = false;
long lng_Tipo_JornadaLinea_Inicio = -1;
long lng_Tipo_JornadaLinea_Fin = -1;
bool bol_Salir_Bucle = false;
bool bol_ValidarFechas_Inferiores = false;
bool bol_ValidarHora_Inicial_JornadaLinea = false;
bool bol_ValidarHora_Final_JornadaLinea = false;
//Se utiliza esta variable para saber cuando cambia de dia la jornada
DateTime? dtt_JornadaLinea_Inicio_Calculo = null;
DateTime? dtt_JornadaLinea_Fin_Calculo = null;
#region Actualizar las jornadaLinea con los datos de las Ausencias programadas por horas si existieran
Funciones_KairosPRO.Obtener_JornadaLineas_ConSolicitudesDeAusentismoPorHoras(_lng_idEmpleado, dtt_FechaHoraActual,ref lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
#endregion
foreach (INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo in lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo)
{
bol_Salir_Bucle = false;
bol_ValidarFechas_Inferiores = false;
bol_JornadaLinea_Inicial = false;
if (int_Contador == 1)
{
bol_JornadaLinea_Inicial = true;
}
//RANGO DE FECHAS Y HORAS ............
#region INICIO
//Tipo
lng_Tipo_JornadaLinea_Inicio = mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.tipo;
if (dtt_JornadaLinea_Inicio_Calculo != null)
{
//Si la Linea salta de dia, se suma 1 dia
if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.saltaDia!=null &&
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.saltaDia.Value)
{
dtt_JornadaLinea_Inicio_Calculo = dtt_JornadaLinea_Inicio_Calculo.Value.AddDays(1);
}
}
else
{
dtt_JornadaLinea_Inicio_Calculo = _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada;
}
DateTime dtt_JornadaLinea_Inicio =new DateTime(dtt_JornadaLinea_Inicio_Calculo.Value.Year,
dtt_JornadaLinea_Inicio_Calculo.Value.Month,
dtt_JornadaLinea_Inicio_Calculo.Value.Day,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora.Hours,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora.Minutes,
0);
#endregion
#region FIN
DateTime dtt_JornadaLinea_Fin;
lng_Tipo_JornadaLinea_Fin = -1;
if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.Count > int_Contador)
{
//Tipo
lng_Tipo_JornadaLinea_Fin = lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador].tipo;
if (dtt_JornadaLinea_Fin_Calculo != null)
{
//Si la Linea salta de dia, se suma 1 dia
if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador].saltaDia != null &&
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador].saltaDia.Value)
{
dtt_JornadaLinea_Fin_Calculo = dtt_JornadaLinea_Fin_Calculo.Value.AddDays(1);
}
}
else
{
//Si la Linea salta de dia, se suma 1 dia
if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador].saltaDia != null &&
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador].saltaDia.Value)
{
dtt_JornadaLinea_Fin_Calculo = _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.AddDays(1);
}
else
{
dtt_JornadaLinea_Fin_Calculo = _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada;
}
}
dtt_JornadaLinea_Fin = new DateTime(dtt_JornadaLinea_Fin_Calculo.Value.Year,
dtt_JornadaLinea_Fin_Calculo.Value.Month,
dtt_JornadaLinea_Fin_Calculo.Value.Day,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador].hora.Hours,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador].hora.Minutes,
0);
}
else//Es el ultimo registro
{
//Si la hora es las 00:00:00 se sustituye por 23:59:59
if (_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.horaCambioDia.Hours == 0 &&
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.horaCambioDia.Minutes == 0)
{
dtt_JornadaLinea_Fin = new DateTime(dtt_JornadaLinea_Inicio.Year,
dtt_JornadaLinea_Inicio.Month,
dtt_JornadaLinea_Inicio.Day,
23,
59,
59);
}
else
{
dtt_JornadaLinea_Fin = new DateTime(dtt_JornadaLinea_Inicio.Year,
dtt_JornadaLinea_Inicio.Month,
dtt_JornadaLinea_Inicio.Day,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.horaCambioDia.Hours,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.horaCambioDia.Minutes,
59);
}
}
#endregion
#region INICIO Y FIN,CALCULAR RANGOS FE FECHAS CORRECTAMENTE
//Si no es la ultuima jornada se resta un segundo
if (lng_Tipo_JornadaLinea_Fin != -1)
{
dtt_JornadaLinea_Fin = dtt_JornadaLinea_Fin.AddSeconds(-1);
}
#endregion
if (lng_UltimaJornadaValidada == -1 ||
lng_UltimaJornadaValidada < mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id)
{
bol_ValidarHora_Inicial_JornadaLinea = Validar_Hora_Inicio(dtt_JornadaLinea_Inicio, _dtt_Actual, _dtt_Actual);
bol_ValidarHora_Final_JornadaLinea = Validar_Hora_Fin(dtt_JornadaLinea_Fin, _dtt_Actual, _dtt_Actual, _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada);
//La hora actual de validacion tiene que ser mayor o igual a la hora Inicial de la jornada linea
if (bol_ValidarHora_Inicial_JornadaLinea)
{
if (bol_ValidarHora_Final_JornadaLinea)
{
//TIPO AUSENCIA OBLIGATORIA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA))
{
Validacion_Jornada_AusenciaObligatoria(_lng_idEmpleado,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
bol_JornadaLinea_Inicial,
dtt_JornadaLinea_Inicio,
dtt_JornadaLinea_Fin,
ref lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
bol_Tipo_JornadaAnterior_Flexible,
_lng_idEmpresa,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
//TIPO FLEXIBLE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
else if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE))
{
Validacion_Jornada_Flexible(_lng_idEmpleado,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
int_Contador,
dtt_JornadaLinea_Inicio,
dtt_JornadaLinea_Fin,
ref lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lng_idEmpresa);
}
//TIPO PRESENCIA OBLIGADA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
else
{
Validacion_Jornada_PresenciaObligatoria(_lng_idEmpleado,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
bol_JornadaLinea_Inicial,
dtt_JornadaLinea_Inicio,
dtt_JornadaLinea_Fin,
ref lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
bol_Tipo_JornadaAnterior_Flexible,
_lng_idEmpresa,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
}
else
{
bol_ValidarFechas_Inferiores = true;
}
//Grabar en diccionario la jornada final ya validada
//Si la fecha actual es mayor que la fecha inicial de la jornadaLinea, significa que cambio de dia, pero esta en la misma jornada
if (_dtt_Actual.Date>_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Date)
{
Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_JornadaLineaHoraFinalYaValidadas( g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id,
_dtt_Actual,
g_bol_Grabar_Diccionarios_XML,
_lng_idEmpresa);
}
else
{
if (_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Date < _dtt_Actual.Date)
{
Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_JornadaLineaHoraFinalYaValidadas(g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id,
_dtt_Actual,
g_bol_Grabar_Diccionarios_XML,
_lng_idEmpresa);
}
else
{
if (dtt_JornadaLinea_Fin <= dtt_FechaHoraActual)
{
Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_JornadaLineaHoraFinalYaValidadas(g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id,
_dtt_Actual,
g_bol_Grabar_Diccionarios_XML,
_lng_idEmpresa);
}
}
}
}
//Hay Fichajes por debajo de la hora y no estan validados, comprobar si son correctos
else
{
bol_Salir_Bucle = true;
bol_ValidarFechas_Inferiores = true;
}
}
else
{
bol_ValidarFechas_Inferiores = true;
}
//TIPO AUSENCIA OBLIGATORIA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA))
{
bol_Tipo_JornadaAnterior_Flexible = false;
}
//TIPO FLEXIBLE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
else if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE))
{
bol_Tipo_JornadaAnterior_Flexible = true;
}
//TIPO PRESENCIA OBLIGADA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
else
{
bol_Tipo_JornadaAnterior_Flexible = false;
}
if (bol_ValidarFechas_Inferiores)
{
//Se hace un bucle , por si se salta de dia, que el order de las fechas sea el correcto
if (lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo != null &&
lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Count > 0)
{
//Solo los fichajes que sean de fecha inferior a la hora inicial de la jornadaLinea que se esta validando ................................
List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_FILTRADO = null;
if (_dtt_Actual >= dtt_JornadaLinea_Fin)
{
lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_FILTRADO = lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => m.fechaHora <= dtt_JornadaLinea_Fin).ToList();
}
//............................................................................................................................................
if (lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_FILTRADO != null)
{
bool bol_Validar_HoraIncial_JornadaLinea_FECHASINERIORES = false;
bool bol_Validar_HoraFinal_JornadaLinea_FECHASINERIORES = false;
foreach (INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo in lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_FILTRADO.Where(m => (g_bol_Grabar_Diccionarios_XML ? m.validado == null : (m.validado != null && m.validado.Value == -1))).OrderBy(m => m.fechaHora))
{
int int_Contador_PARAFICHAJESNOVALIDADOS = 1;
long lng_Tipo_JornadaLinea_Inicio_NOVALIDADOS = -1;
long lng_Tipo_JornadaLinea_Fin_NOVALIDADOS = -1;
bool bol_Tipo_JornadaAnterior_Flexible_NOVALIDADOS = false;
//Se utiliza esta variable para saber cuando cambia de dia la jornada
DateTime? dtt_JornadaLinea_INICIO_NOVALIDADOS_CALCULOS = null;
DateTime? dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS = null;
//Buscar en que jornadaLinea se pone
foreach (INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS in lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo)
{
bol_JornadaLinea_Inicial = false;
if (int_Contador_PARAFICHAJESNOVALIDADOS == 1)
{
bol_JornadaLinea_Inicial = true;
}
//Ver Hora Final .........................................................................
#region INICIO
//Tipo
lng_Tipo_JornadaLinea_Inicio_NOVALIDADOS = mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.tipo;
if (dtt_JornadaLinea_INICIO_NOVALIDADOS_CALCULOS != null)
{
//Si la Linea salta de dia, se suma 1 dia
if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.saltaDia != null &&
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.saltaDia.Value)
{
dtt_JornadaLinea_INICIO_NOVALIDADOS_CALCULOS = dtt_JornadaLinea_INICIO_NOVALIDADOS_CALCULOS.Value.AddDays(1);
}
}
else
{
dtt_JornadaLinea_INICIO_NOVALIDADOS_CALCULOS = _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada;
}
DateTime dtt_JornadaLinea_Inicio_NOVALIDADOS = new DateTime(dtt_JornadaLinea_INICIO_NOVALIDADOS_CALCULOS.Value.Year,
dtt_JornadaLinea_INICIO_NOVALIDADOS_CALCULOS.Value.Month,
dtt_JornadaLinea_INICIO_NOVALIDADOS_CALCULOS.Value.Day,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.hora.Hours,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.hora.Minutes,
0);
#endregion
#region FIN
DateTime dtt_JornadaLinea_Fin_NOVALIDADOS;
lng_Tipo_JornadaLinea_Fin_NOVALIDADOS = -1;
if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.Count > int_Contador_PARAFICHAJESNOVALIDADOS)
{
//Tipo
lng_Tipo_JornadaLinea_Fin_NOVALIDADOS = lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador_PARAFICHAJESNOVALIDADOS].tipo;
if (dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS != null)
{
//Si la Linea salta de dia, se suma 1 dia
if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador_PARAFICHAJESNOVALIDADOS].saltaDia != null &&
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador_PARAFICHAJESNOVALIDADOS].saltaDia.Value)
{
dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS = dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS.Value.AddDays(1);
}
}
else
{
//Si la Linea salta de dia, se suma 1 dia
if (lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador_PARAFICHAJESNOVALIDADOS].saltaDia != null &&
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador_PARAFICHAJESNOVALIDADOS].saltaDia.Value)
{
dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS = _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.AddDays(1);
}
else
{
dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS = _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada;
}
}
dtt_JornadaLinea_Fin_NOVALIDADOS = new DateTime(dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS.Value.Year,
dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS.Value.Month,
dtt_JornadaLinea_FIN_NOVALIDADOS_CALCULOS.Value.Day,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador_PARAFICHAJESNOVALIDADOS].hora.Hours,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador_PARAFICHAJESNOVALIDADOS].hora.Minutes,
0);
}
else//Es el ultimo registro
{
//Si la hora es las 00:00:00 se sustituye por 23:59:59
if (_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.horaCambioDia.Hours == 0 &&
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.horaCambioDia.Minutes == 0)
{
dtt_JornadaLinea_Fin_NOVALIDADOS = new DateTime(dtt_JornadaLinea_Inicio_NOVALIDADOS.Year,
dtt_JornadaLinea_Inicio_NOVALIDADOS.Month,
dtt_JornadaLinea_Inicio_NOVALIDADOS.Day,
23,
59,
59);
}
else
{
dtt_JornadaLinea_Fin_NOVALIDADOS = new DateTime(dtt_JornadaLinea_Inicio_NOVALIDADOS.Year,
dtt_JornadaLinea_Inicio_NOVALIDADOS.Month,
dtt_JornadaLinea_Inicio_NOVALIDADOS.Day,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.horaCambioDia.Hours,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.horaCambioDia.Minutes,
59);
}
}
#endregion
#region INICIO Y FIN,CALCULAR RANGOS FE FECHAS CORRECTAMENTE
//Si no es la ultuima jornada se resta un segundo
if (lng_Tipo_JornadaLinea_Fin_NOVALIDADOS != -1)
{
dtt_JornadaLinea_Fin_NOVALIDADOS = dtt_JornadaLinea_Fin_NOVALIDADOS.AddSeconds(-1);
}
#endregion
bol_Validar_HoraIncial_JornadaLinea_FECHASINERIORES = Validar_Hora_Inicio(dtt_JornadaLinea_Inicio_NOVALIDADOS, _dtt_Actual, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora);
bol_Validar_HoraFinal_JornadaLinea_FECHASINERIORES = Validar_Hora_Fin(dtt_JornadaLinea_Fin_NOVALIDADOS, _dtt_Actual, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora, _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada);
if (bol_Validar_HoraIncial_JornadaLinea_FECHASINERIORES &&
bol_Validar_HoraFinal_JornadaLinea_FECHASINERIORES)
{
//TIPO AUSENCIA OBLIGATORIA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA))
{
Validacion_Jornada_AusenciaObligatoria(_lng_idEmpleado,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS,
_dtt_Actual,
bol_JornadaLinea_Inicial,
dtt_JornadaLinea_Inicio_NOVALIDADOS,
dtt_JornadaLinea_Fin_NOVALIDADOS,
ref lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
bol_Tipo_JornadaAnterior_Flexible_NOVALIDADOS,
_lng_idEmpresa,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
//TIPO FLEXIBLE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
else if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE))
{
Validacion_Jornada_Flexible(_lng_idEmpleado,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS,
_dtt_Actual,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
int_Contador,
dtt_JornadaLinea_Inicio_NOVALIDADOS,
dtt_JornadaLinea_Fin_NOVALIDADOS,
ref lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lng_idEmpresa);
}
//TIPO PRESENCIA OBLIGADA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
else
{
Validacion_Jornada_PresenciaObligatoria(_lng_idEmpleado,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS,
_dtt_Actual,
bol_JornadaLinea_Inicial,
dtt_JornadaLinea_Inicio_NOVALIDADOS,
dtt_JornadaLinea_Fin_NOVALIDADOS,
ref lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
bol_Tipo_JornadaAnterior_Flexible_NOVALIDADOS,
_lng_idEmpresa,
lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
break;
}
//TIPO AUSENCIA OBLIGATORIA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA))
{
bol_Tipo_JornadaAnterior_Flexible_NOVALIDADOS = false;
}
//TIPO FLEXIBLE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
else if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_PARAFICHAJESNOVALIDADOS.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE))
{
bol_Tipo_JornadaAnterior_Flexible_NOVALIDADOS = true;
}
//TIPO PRESENCIA OBLIGADA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
else
{
bol_Tipo_JornadaAnterior_Flexible_NOVALIDADOS = false;
}
int_Contador_PARAFICHAJESNOVALIDADOS += 1;
}
}
}
}
if (bol_Salir_Bucle)
{
break;
}
}
int_Contador += 1;
}
}
}
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Verificacion_Fichajes) + "" + nameof(Validacion_Jornada));
}
}
private void Validacion_Jornada_AusenciaObligatoria(long _lng_idEmpleado,
INTERNO_Verificacion_JornadasCabecera_Modelo _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
INTERNO_VerificacionFichajes_JornadasLinea_Modelo _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
DateTime _dtt_Actual,
bool _bol_JornadaLinea_Inicial,
DateTime _dtt_JornadaLinea_Inicial,
DateTime _dtt_JornadaLinea_Final,
ref List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
bool _bol_Tipo_JornadaLinea_Anterior_Flexible,
long _lng_idEmpresa,
List<INTERNO_VerificacionFichajes_JornadasLinea_Modelo> _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo)
{
//DEBERIA TENER UNA SALIDA , SINO ERROR @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
bool bol_ComprobarIncidencia = true;
List<INTERNO_VerificacionFichajes_JornadaHoraInicialEmpleado_Validada_Modelo> lst_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo = Variables_KairosPRO.G_DCT_JORNADASLINEASHORAINICIALYAVALIDADAS[g_lng_CodigoCliente];
if (lst_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo != null)
{
INTERNO_VerificacionFichajes_JornadaHoraInicialEmpleado_Validada_Modelo mdl_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo_ULTIMOREGISTRO = lst_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo.Where(m => m.IdEmpleado.Equals(_lng_idEmpleado) &&
m.IdEmpresa.Equals(_lng_idEmpresa) &&
m.Fecha.ToString("dd/MM/yyyy").Equals(_dtt_Actual.ToString("dd/MM/yyyy")) &&
m.IdJornadaLinea.Equals(_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id)).LastOrDefault();
if (mdl_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo_ULTIMOREGISTRO != null)
{
bol_ComprobarIncidencia = false;
}
}
if (bol_ComprobarIncidencia)
{
bool bol_Hayincidencia = false;
if (_bol_JornadaLinea_Inicial == false)
{
//jornada anterior a la anterior
INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR = null;
if (_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo != null && _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.Count > 0)
{
int int_Contador = 0;
int int_Contador_2 = 0;
foreach (INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo in _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo)
{
if (int_Contador==2)
{
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR = _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Contador_2-2];
}
else
{
int_Contador += 1;
}
int_Contador_2 += 1;
if (_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id.Equals(mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id))
{
break;
}
}
}
//Buscar el ultimo fichaje antes de ahora
INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ANTERIOR = Buscar_UltimoFichaje_AntesHora(_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo, _dtt_JornadaLinea_Inicial);
//Si el anterior es Flexible y el anterior del anterior es Ausencia el ultimo fichaje tiene que ser una entrada, sino es incorrecto
if (_bol_Tipo_JornadaLinea_Anterior_Flexible &&
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR !=null &&
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA) &&
(
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ANTERIOR == null ||
(
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ANTERIOR!=null &&
!mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ANTERIOR.entradaSalida.Equals(Variables_KairosPRO.G_STR_FICHAJE_ENTRADA)
)
)
)
{
bol_Hayincidencia = true;
}
//Si la jornadalinea anterior fue de tipo Flexible y esta a nulo es un error
else if (mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ANTERIOR == null &&
_bol_Tipo_JornadaLinea_Anterior_Flexible)
{
bol_Hayincidencia = true;
}
}
if (bol_Hayincidencia)
{
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_NOHAYFICHAJE,
g_lng_CodigoCliente,
_lng_idEmpleado,
null,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
Variables_KairosPRO.G_STR_FICHAJE_SALIDA,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_JornadaLineaHoraInicialYaValidadas(g_lng_CodigoCliente,
_lng_idEmpleado,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id,
_dtt_Actual,
g_bol_Grabar_Diccionarios_XML,
_lng_idEmpresa);
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//REVISAR LOS FICHAJE QUE HAY CONTENIDOS EN ESTA JORNADALINEA ###################################################################
if (_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo != null &&
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Count > 0)
{
bool bol_HoraInicio = false;
bool bol_HoraFin = false;
//Se hace un bucle , por si se salta de dia, que el order de las fechas sea el correcto
foreach (INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo in _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => (g_bol_Grabar_Diccionarios_XML ? m.validado == null : (m.validado != null && m.validado.Value == -1))).OrderBy(m => m.fechaHora))
{
//VALIDAR HORA INICIO y FIN ....................................................
bol_HoraInicio = Validar_Hora_Inicio(_dtt_JornadaLinea_Inicial, _dtt_Actual, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora );
bol_HoraFin = Validar_Hora_Fin(_dtt_JornadaLinea_Final, _dtt_Actual, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora, _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada);
if (bol_HoraInicio)
{
if (bol_HoraFin)
{
//Si la fecha de fichaje es diferente a la fecha de jornadaInicio se graba la incidencia
if (!mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora.Equals(_dtt_JornadaLinea_Inicial))
{
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_FUERAJORNADA,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1,g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
//........................................................................................................................................
}
else
{
//Si es una entrada en vez de una salida es un Error
if (mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida.Equals(Variables_KairosPRO.G_STR_FICHAJE_ENTRADA))
{
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_TIPOINCORRECTO_ENTRADASALIDA,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
Variables_KairosPRO.G_STR_FICHAJE_ENTRADA,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
}
else
{
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 0, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 0;
}
}
}
else
{
break;
}
}
else
{
break;
}
}
}
//Verificar si el ultimo rgistro no es una salida esta incorrecto
if (bol_ComprobarIncidencia)
{
INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMAVERIFICACION = Buscar_UltimoFichaje_AntesHora(_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo, _dtt_JornadaLinea_Inicial);
if (
(
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMAVERIFICACION == null &&
_bol_JornadaLinea_Inicial == false &&
_bol_Tipo_JornadaLinea_Anterior_Flexible == false
)
||
( mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMAVERIFICACION != null &&
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMAVERIFICACION.entradaSalida.Equals(Variables_KairosPRO.G_STR_FICHAJE_ENTRADA)
)
)
{
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_NOHAYFICHAJE,
g_lng_CodigoCliente,
_lng_idEmpleado,
null,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
Variables_KairosPRO.G_STR_FICHAJE_SALIDA,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
}
}
private void Validacion_Jornada_Flexible(long _lng_idEmpleado,
INTERNO_Verificacion_JornadasCabecera_Modelo _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
INTERNO_VerificacionFichajes_JornadasLinea_Modelo _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
DateTime _dtt_Actual,
List<INTERNO_VerificacionFichajes_JornadasLinea_Modelo> _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
int _int_Contador,
DateTime _dtt_JornadaLinea_Inicial,
DateTime _dtt_JornadaLinea_Final,
ref List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
long _lng_idEmpresa)
{
//Hay algun Fichaje
if (_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo != null && _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Count > 0)
{
//Ver el tipo de flexibilidad que es para saber que deberia esperar entrada o salida .......................
//Entrada -> 1
//Salida -> 2
string str_TipoFichajeEsperado_ES = Variables_KairosPRO.G_STR_FICHAJE_ENTRADA;
if (_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[_int_Contador].tipo == Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_AUSENCIAOBLIGADA)
{
str_TipoFichajeEsperado_ES = Variables_KairosPRO.G_STR_FICHAJE_SALIDA;
}
//............................................................................................................
List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_FLEXIBLE = _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => (g_bol_Grabar_Diccionarios_XML ? m.validado == null : (m.validado != null && m.validado.Value == -1))).OrderBy(m => m.fechaHora).ToList();
if (lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_FLEXIBLE != null && lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_FLEXIBLE.Count > 0)
{
INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMOFICHAJE_ANTESHORA = null;
bool bol_HoraInicio = false;
bool bol_HoraFin = false;
//Se hace un bucle , por si se salta de dia, que el order de las fechas sea el correcto
foreach (INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo in lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_FLEXIBLE)
{
//VALIDAR HORA INICIO y FIN ....................................................
bol_HoraInicio = Validar_Hora_Inicio(_dtt_JornadaLinea_Inicial, _dtt_Actual, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora);
bol_HoraFin = Validar_Hora_Fin(_dtt_JornadaLinea_Final, _dtt_Actual, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora, _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada);
if (bol_HoraInicio)
{
if (bol_HoraFin)
{
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMOFICHAJE_ANTESHORA = Buscar_UltimoFichaje_AntesHora(_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora);
//No hay nada antes del fichaje
if (mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMOFICHAJE_ANTESHORA == null)
{
//Espera un entrada y el fichaje es una entrada, esta correcto
if (str_TipoFichajeEsperado_ES == Variables_KairosPRO.G_STR_FICHAJE_ENTRADA &&
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida == Variables_KairosPRO.G_STR_FICHAJE_ENTRADA)
{
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 0, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 0;
//........................................................................................................................................
}
//Espera un salida y el fichaje es una salida, esta correcto
else if (str_TipoFichajeEsperado_ES == Variables_KairosPRO.G_STR_FICHAJE_SALIDA &&
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida == Variables_KairosPRO.G_STR_FICHAJE_SALIDA)
{
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 0, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 0;
//........................................................................................................................................
}
else
{
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
//........................................................................................................................................
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_TIPOINCORRECTO_ENTRADASALIDA,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
str_TipoFichajeEsperado_ES,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
}
//Hay algo antes del fichaje
else
{
//Espera un entrada y el fichaje es una entrada y lo ultimo que hay es una salida, esta correcto
if (str_TipoFichajeEsperado_ES == Variables_KairosPRO.G_STR_FICHAJE_ENTRADA &&
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida == Variables_KairosPRO.G_STR_FICHAJE_ENTRADA &&
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMOFICHAJE_ANTESHORA.entradaSalida.Equals(Variables_KairosPRO.G_STR_FICHAJE_SALIDA))
{
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 0, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 0;
//........................................................................................................................................
}
//Espera un salida y el fichaje es una salida y lo ultimo que hay es una entrada, esta correcto
else if (str_TipoFichajeEsperado_ES == Variables_KairosPRO.G_STR_FICHAJE_SALIDA &&
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida == Variables_KairosPRO.G_STR_FICHAJE_SALIDA &&
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMOFICHAJE_ANTESHORA.entradaSalida.Equals(Variables_KairosPRO.G_STR_FICHAJE_ENTRADA))
{
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 0, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 0;
//........................................................................................................................................
}
else
{
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
//........................................................................................................................................
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_TIPOINCORRECTO_ENTRADASALIDA,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
str_TipoFichajeEsperado_ES,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
}
}
else
{
break;
}
}
else
{
break;
}
}
}
}
}
private void Validacion_Jornada_PresenciaObligatoria(
long _lng_idEmpleado,
INTERNO_Verificacion_JornadasCabecera_Modelo _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo,
INTERNO_VerificacionFichajes_JornadasLinea_Modelo _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
DateTime _dtt_Actual,
bool _bol_JornadaLinea_Inicial,
DateTime _dtt_JornadaLinea_Inicial,
DateTime _dtt_JornadaLinea_Fin,
ref List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
bool _bol_Tipo_JornadaLinea_Anterior_Flexible,
long _lng_idEmpresa,
List<INTERNO_VerificacionFichajes_JornadasLinea_Modelo> _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo)
{
//DEBERIA TENER UNA ENTRADA , SINO ERROR @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
bool bol_ComprobarIncidencia = true;
List<INTERNO_VerificacionFichajes_JornadaHoraInicialEmpleado_Validada_Modelo> lst_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo = Variables_KairosPRO.G_DCT_JORNADASLINEASHORAINICIALYAVALIDADAS[g_lng_CodigoCliente];
if (lst_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo != null)
{
INTERNO_VerificacionFichajes_JornadaHoraInicialEmpleado_Validada_Modelo mdl_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo_ULTIMOREGISTRO = lst_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo.Where(m => m.IdEmpleado.Equals(_lng_idEmpleado) &&
m.IdEmpresa.Equals(_lng_idEmpresa) &&
m.Fecha.ToString("dd/MM/yyyy").Equals(_dtt_Actual.ToString("dd/MM/yyyy")) &&
m.IdJornadaLinea.Equals(_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id)).LastOrDefault();
if (mdl_INTERNO_JornadaHoraInicialEmpleado_Validada_Modelo_ULTIMOREGISTRO != null)
{
bol_ComprobarIncidencia = false;
}
}
if (bol_ComprobarIncidencia)
{
bool bol_Hayincidencia = false;
INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo = Buscar_UltimoFichaje_AntesHora(_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo, _dtt_JornadaLinea_Inicial);
//Si la jornadalinea anterior fue de tipo Flexible y esta a nulo es un error
if (mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo == null &&
_bol_Tipo_JornadaLinea_Anterior_Flexible)
{
bol_Hayincidencia = true;
}
if (bol_Hayincidencia)
{
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_NOHAYFICHAJE,
g_lng_CodigoCliente,
_lng_idEmpleado,
null,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
Variables_KairosPRO.G_STR_FICHAJE_ENTRADA,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
Verificacion_Fichajes_Diccionarios.Actualizar_Diccionario_JornadaLineaHoraInicialYaValidadas(g_lng_CodigoCliente,
_lng_idEmpleado,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id,
_dtt_Actual,
g_bol_Grabar_Diccionarios_XML,
_lng_idEmpresa);
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//Hay algun Fichaje
if (_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo != null &&
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Count > 0)
{
List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_PRESENCIAOBLIGATORIA = _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => (g_bol_Grabar_Diccionarios_XML ? m.validado == null : (m.validado != null && m.validado.Value == -1))).OrderBy(m => m.fechaHora).ToList();
if (lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_PRESENCIAOBLIGATORIA != null &&
lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_PRESENCIAOBLIGATORIA.Count > 0)
{
bool bol_HoraInicio = false;
bool bol_HoraFin = false;
//Se hace un bucle , por si se salta de dia, que el order de las fechas sea el correcto
foreach (INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo in lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_PRESENCIAOBLIGATORIA)
{
//VALIDAR HORA INICIO y FIN ....................................................
bol_HoraInicio = Validar_Hora_Inicio(_dtt_JornadaLinea_Inicial, _dtt_Actual, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora );
bol_HoraFin = Validar_Hora_Fin(_dtt_JornadaLinea_Fin, _dtt_Actual, mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora, _mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada);
if (bol_HoraInicio)
{
if (bol_HoraFin)
{
//Si la fecha de fichaje es diferente a la fecha de jornadaInicio se graba la incidencia
if (!mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora.Equals(_dtt_JornadaLinea_Inicial))
{
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_FUERAJORNADA,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
Variables_KairosPRO.G_STR_FICHAJE_ENTRADA,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
}
else
{
//Si es una salida en vez de una entrada es un Error
if (mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida.Equals(Variables_KairosPRO.G_STR_FICHAJE_SALIDA))
{
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_TIPOINCORRECTO_ENTRADASALIDA,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
Variables_KairosPRO.G_STR_FICHAJE_SALIDA,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
}
else
{
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 0, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 0;
}
}
}
else
{
break;
}
}
}
}
}
//Si es una entrada el ultimo registro o esta a nulo, falta la salida, es una incidencia
if (bol_ComprobarIncidencia)
{
INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMAVERIFICACION = Buscar_UltimoFichaje_AntesHora(_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo, _dtt_JornadaLinea_Inicial);
if (
(
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMAVERIFICACION == null &&
_bol_Tipo_JornadaLinea_Anterior_Flexible==false
)
||
(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMAVERIFICACION != null &&
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_ULTIMAVERIFICACION.entradaSalida.Equals(Variables_KairosPRO.G_STR_FICHAJE_SALIDA)
)
)
{
Grabar_ParaEmail_FichajeIncidencia_Jornada(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_NOHAYFICHAJE,
g_lng_CodigoCliente,
_lng_idEmpleado,
null,
_mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.id,
_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
_dtt_Actual,
Variables_KairosPRO.G_STR_FICHAJE_ENTRADA,
_lng_idEmpresa,
_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
}
}
}
private void Validacion_AusenciasProgramadas(long _lng_idEmpleado,
DateTime _dtt_Actual,
KRS_AusenciasProgramadas _mdl_KRS_AusenciasProgramadas,
long _lng_idEmpresa)
{
try
{
//Dia de fichaje
DateTime dtt_FechaDesde_BusquedaFichaje = new DateTime(_dtt_Actual.Year, _dtt_Actual.Month, _dtt_Actual.Day, 0, 0, 0);
DateTime dtt_FechaHasta_BusquedaFichaje = dtt_FechaDesde_BusquedaFichaje.AddHours(24);
//Obtener todos los Fichajes del Dia
List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo = g_obj_KRSS_Fichajes_Datos.Obtener_Listado_ParaVerificacionFichajes(g_lng_CodigoCliente, _lng_idEmpleado, dtt_FechaDesde_BusquedaFichaje, dtt_FechaHasta_BusquedaFichaje, _lng_idEmpresa);
if (lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo != null && lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Count > 0)
{
if (g_bol_Grabar_Diccionarios_XML == false)
{
lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => m.validado != null).ToList().ForEach(m => m.validado = -1);
}
//Se hace un bucle , por si se salta de dia, que el order de las fechas sea el correcto
foreach (INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo in lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => (g_bol_Grabar_Diccionarios_XML ? m.validado == null : (m.validado != null && m.validado.Value == -1))).OrderBy(m => m.fechaHora).ToList())
{
Grabar_ParaEmail_FichajeIncidencia_AusenciasProgramadasDiasFestivos(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_HAYFICHAJENODEBERIA_AUSENCIAPROGRAMA,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_dtt_Actual,
_mdl_KRS_AusenciasProgramadas.KRS_AusenciasProgramadasTipos.descripcion);
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1,g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
//........................................................................................................................................
}
}
}
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Verificacion_Fichajes) + "" + nameof(Validacion_AusenciasProgramadas));
}
}
private void Validacion_DiasFestivos(long _lng_idEmpleado,
DateTime _dtt_Actual,
KRS_DiasFestivos _mdl_KRS_DiasFestivos,
long _lng_idEmpresa)
{
try
{
//Dia de fichaje
DateTime dtt_FechaDesde_BusquedaFichaje = new DateTime(_dtt_Actual.Year, _dtt_Actual.Month, _dtt_Actual.Day, 0, 0, 0);
DateTime dtt_FechaHasta_BusquedaFichaje = dtt_FechaDesde_BusquedaFichaje.AddHours(24);
//Obtener todos los Fichajes del Dia
List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo = g_obj_KRSS_Fichajes_Datos.Obtener_Listado_ParaVerificacionFichajes(g_lng_CodigoCliente, _lng_idEmpleado, dtt_FechaDesde_BusquedaFichaje, dtt_FechaHasta_BusquedaFichaje, _lng_idEmpresa);
if (lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo != null && lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Count > 0)
{
if (g_bol_Grabar_Diccionarios_XML == false)
{
lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => m.validado != null).ToList().ForEach(m => m.validado = -1);
}
//Se hace un bucle , por si se salta de dia, que el order de las fechas sea el correcto
foreach (INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo in lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => (g_bol_Grabar_Diccionarios_XML ? m.validado == null : (m.validado != null && m.validado.Value == -1))).OrderBy(m => m.fechaHora).ToList())
{
Grabar_ParaEmail_FichajeIncidencia_AusenciasProgramadasDiasFestivos(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_HAYFICHAJENODEBERIA_DIAFESTIVO,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_dtt_Actual,
_mdl_KRS_DiasFestivos.descripcion);
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
//........................................................................................................................................
}
}
}
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Verificacion_Fichajes) + "" + nameof(Validacion_AusenciasProgramadas));
}
}
private void Validacion_Fichajes_SinNadaAsignado(long _lng_idEmpleado,
DateTime _dtt_Actual,
long _lng_idEmpresa)
{
try
{
//Dia de fichaje
DateTime dtt_FechaDesde_BusquedaFichaje = new DateTime(_dtt_Actual.Year, _dtt_Actual.Month, _dtt_Actual.Day, 0, 0, 0);
DateTime dtt_FechaHasta_BusquedaFichaje = dtt_FechaDesde_BusquedaFichaje.AddHours(24);
//Obtener todos los Fichajes del Dia
List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo = g_obj_KRSS_Fichajes_Datos.Obtener_Listado_ParaVerificacionFichajes(g_lng_CodigoCliente, _lng_idEmpleado, dtt_FechaDesde_BusquedaFichaje, dtt_FechaHasta_BusquedaFichaje, _lng_idEmpresa);
if (lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo != null && lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Count > 0)
{
//Se hace un bucle , por si se salta de dia, que el order de las fechas sea el correcto
foreach (INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo in lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => (g_bol_Grabar_Diccionarios_XML ? m.validado == null : (m.validado != null && m.validado.Value == -1))).OrderBy(m => m.fechaHora).ToList())
{
Grabar_ParaEmail_FichajeIncidencia_SinNadaAsignado(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_FUERAJORNADA,
g_lng_CodigoCliente,
_lng_idEmpleado,
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id,
_dtt_Actual);
//Fichaje Validado .......................................................................................................................
g_obj_KRSS_Fichajes_Datos.Actualizar_ParaVerificacionFichajes(mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.id, 1, g_lng_CodigoCliente);
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.validado = 1;
//........................................................................................................................................
}
}
}
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Verificacion_Fichajes) + "" + nameof(Validacion_Fichajes_SinNadaAsignado));
}
}
#region Grabar para Enviar por Email mas tarde
private void Grabar_ParaEmail_FichajeIncidencia_Jornada(int _int_TipoIncidencia,
long _lng_CodigoCliente,
long _lng_idEmpleado,
long? _lng_idFichaje,
long? _lng_idJornadaCabecera,
INTERNO_VerificacionFichajes_JornadasLinea_Modelo _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo,
DateTime _dtt_Fecha,
string _str_EntradaSalida,
long _lng_idEmpresa,
List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo,
List<INTERNO_VerificacionFichajes_JornadasLinea_Modelo> _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo)
{
try
{
if (g_bol_Grabar_Diccionarios_XML)
{
TMP_Emails_FichajesIncidencias mdl_TMP_Emails_FichajesIncidencias = new TMP_Emails_FichajesIncidencias();
TMP_Emails_RecordatorioFichajes mdl_TMP_Emails_RecordatorioFichajes = new TMP_Emails_RecordatorioFichajes();
bool bol_NoHayFichaje = false;
//Descripcion de la Incicendia ........................................................................................................
//Fuera Jornada
if (_int_TipoIncidencia.Equals(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_FUERAJORNADA))
{
mdl_TMP_Emails_FichajesIncidencias.incidencia_descripcion = Variables_KairosPRO.G_STR_TIPOINCIDENCIA_FICHAJE_MENSAJE_EMAIL_FUERAJORNADA;
}
//No hay Fichaje
else if (_int_TipoIncidencia.Equals(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_NOHAYFICHAJE))
{
mdl_TMP_Emails_FichajesIncidencias.incidencia_descripcion = Variables_KairosPRO.G_STR_TIPOINCIDENCIA_FICHAJE_MENSAJE_EMAIL_NOHAYFICHAJE;
bol_NoHayFichaje = true;
}
//TipoIncorrcto ES
else if (_int_TipoIncidencia.Equals(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_TIPOINCORRECTO_ENTRADASALIDA))
{
mdl_TMP_Emails_FichajesIncidencias.incidencia_descripcion = Variables_KairosPRO.G_STR_TIPOINCIDENCIA_FICHAJE_MENSAJE_EMAIL_SALIDAENTRADA;
if (mdl_TMP_Emails_FichajesIncidencias.entradaSalida == "S")
{
mdl_TMP_Emails_FichajesIncidencias.incidencia_descripcion = Variables_KairosPRO.G_STR_TIPOINCIDENCIA_FICHAJE_MENSAJE_EMAIL_ENTRADASALIDA;
}
}
//.......................................................................................................................................
if (_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo != null)
{
//Si es de tipo No hay fichaje y deberia
if (bol_NoHayFichaje)
{
//Si tiene Activa la parte de fichaje automatico hacemos el fichaje correctamente
if (g_mdl_KRS_Empleados.permiteFichajeAutomatico != null &&
g_mdl_KRS_Empleados.permiteFichajeAutomatico.Value &&
g_mdl_KRS_Empleados.idEmpresa_FichajeAutomatico != null &&
_lng_idEmpresa == g_mdl_KRS_Empleados.idEmpresa_FichajeAutomatico.Value)
{
//Dispositivo modelo #############
long lng_idDispositivoModelo = -1;
KRSS_DispositivosModelo mdl_KRSS_DispositivosModelo = g_obj_KRSS_DispositivosModelo_Datos.Obtener_Modelo_Por_MAC(Variables_KairosPRO.G_STR_DISPOSITIVOMODELO_AUTOMATICO, _lng_CodigoCliente);
//Si existe le asigno el id a la variable para crear al fichaje
if (mdl_KRSS_DispositivosModelo != null)
{
lng_idDispositivoModelo = mdl_KRSS_DispositivosModelo.id;
}
//Si no creo el dispositivo y asigno el id
else
{
INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
mdl_KRSS_DispositivosModelo = new KRSS_DispositivosModelo();
mdl_KRSS_DispositivosModelo.id = -1;
mdl_KRSS_DispositivosModelo.codigoCliente = _lng_CodigoCliente;
mdl_KRSS_DispositivosModelo.fabricante = Variables_KairosPRO.G_STR_DISPOSITIVOMODELO_DISPOSITIVO + " " + Variables_KairosPRO.G_STR_DISPOSITIVOMODELO_AUTOMATICO;
mdl_KRSS_DispositivosModelo.marca = Variables_KairosPRO.G_STR_DISPOSITIVOMODELO_DISPOSITIVO + " " + Variables_KairosPRO.G_STR_DISPOSITIVOMODELO_AUTOMATICO;
mdl_KRSS_DispositivosModelo.modelo = Variables_KairosPRO.G_STR_DISPOSITIVOMODELO_DISPOSITIVO + " " + Variables_KairosPRO.G_STR_DISPOSITIVOMODELO_AUTOMATICO;
mdl_KRSS_DispositivosModelo.mac = Variables_KairosPRO.G_STR_DISPOSITIVOMODELO_AUTOMATICO;
//Grabamos el DispositivoModelo
mdl_INTERNO_ValorDevuelto_Modelo = g_obj_KRSS_DispositivosModelo_Datos.Insertar(mdl_KRSS_DispositivosModelo);
//Si fue todo correcto asigno el id a la variable
if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
{
lng_idDispositivoModelo = mdl_INTERNO_ValorDevuelto_Modelo.Id;
}
}
// ###############################
//Si el idDispositivoModelo es mayor que -1 creamos el fichaje
if (lng_idDispositivoModelo > -1)
{
//Relleno las varibles con la hora y los minutos
int int_Hora = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora.Hours;
int int_Minutos = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora.Minutes;
//Si el listado de JornadasLinea no es nulo
if (_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo != null &&
_lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.Count() > 0)
{
Random obj_Random = new Random();
int int_Posicion_JornadaLinea = _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.IndexOf(_mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo);
//Miro a ver si tiene algo antes
INTERNO_VerificacionFichajes_JornadasLinea_Modelo mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR = null;
if (int_Posicion_JornadaLinea>0)
{
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR = _lst_INTERNO_VerificacionFichajes_JornadasLinea_Modelo[int_Posicion_JornadaLinea - 1];
}
//Si es una Salida y no tengo un Entrada, grabo una entrada primero
INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo = null;
if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR != null)
{
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo = Buscar_UltimoFichaje_AntesHora(_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo, _dtt_Fecha);
}
//Si la jornadalinea anterior fue de tipo Flexible y esta a nulo es un error
if (_str_EntradaSalida == Variables_KairosPRO.G_STR_FICHAJE_SALIDA &&
(
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo == null ||
(
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida!=null &&
!mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.entradaSalida.Equals(Variables_KairosPRO.G_STR_FICHAJE_ENTRADA)
)
)
)
{
#region Grabo un entrada
//Saco un random entre el 0 y el 3
int int_NumeroRandom_Minuto_AUX = obj_Random.Next(0, 3);
TimeSpan tmp_HoraGenerada_AUX = new TimeSpan(0, int_NumeroRandom_Minuto_AUX, 0);
TimeSpan tmp_HoraFinal_AUX = new TimeSpan();
//Si el numero random que genero es mayor que el random que genero en el if resto los minutos
if (int_NumeroRandom_Minuto_AUX > obj_Random.Next(0, 3))
{
tmp_HoraFinal_AUX = mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.hora - tmp_HoraGenerada_AUX;
}
//sino sumo los minutos
else
{
tmp_HoraFinal_AUX = mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.hora + tmp_HoraGenerada_AUX;
}
int int_Hora_AUX = tmp_HoraFinal_AUX.Hours;
int int_Minutos_AUX = tmp_HoraFinal_AUX.Minutes;
KRSS_Fichajes mdl_KRSS_Fichajes_AUX = new KRSS_Fichajes();
mdl_KRSS_Fichajes_AUX.id = -1;
mdl_KRSS_Fichajes_AUX.idEmpleado = _lng_idEmpleado;
mdl_KRSS_Fichajes_AUX.codigoCliente = _lng_CodigoCliente;
mdl_KRSS_Fichajes_AUX.fechaHora = new DateTime(_dtt_Fecha.Year, _dtt_Fecha.Month, _dtt_Fecha.Day, int_Hora_AUX, int_Minutos_AUX, 0);
mdl_KRSS_Fichajes_AUX.gps_Posicion_Latitud = "";
mdl_KRSS_Fichajes_AUX.gps_Posicion_Longitud = "";
mdl_KRSS_Fichajes_AUX.gps_Proveedor = "";
mdl_KRSS_Fichajes_AUX.idDispositivoModelo = lng_idDispositivoModelo;
mdl_KRSS_Fichajes_AUX.entradaSalida = Variables_KairosPRO.G_STR_FICHAJE_ENTRADA;
mdl_KRSS_Fichajes_AUX.idEmpresa = _lng_idEmpresa;
mdl_KRSS_Fichajes_AUX.validado = 0;
//Grabamos un registro en la tabla de KRSS_Fichajes
g_obj_KRSS_Fichajes_Datos.Insertar(mdl_KRSS_Fichajes_AUX);
#endregion
//Hora y minutos para la salida
//Saco un random entre el 0 y el 3
int int_NumeroRandom_Minuto = obj_Random.Next(0, 3);
TimeSpan tmp_HoraGenerada = new TimeSpan(0, int_NumeroRandom_Minuto, 0);
TimeSpan tmp_HoraFinal = new TimeSpan();
//Si el numero random que genero es mayor que el random que genero en el if resto los minutos
if (int_NumeroRandom_Minuto > obj_Random.Next(0, 3))
{
tmp_HoraFinal = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora - tmp_HoraGenerada;
}
//sino sumo los minutos
else
{
tmp_HoraFinal = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora + tmp_HoraGenerada;
}
int_Hora = tmp_HoraFinal.Hours;
int_Minutos = tmp_HoraFinal.Minutes;
}
else
{
//Si tiene anterior y tiene Flexible calculamos una hora random dentro del rango
if (mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR != null &&
mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.tipo.Equals(Variables_KairosPRO.G_LNG_JORNADALINEA_TIPO_CODIGO_FLEXIBLE))
{
TimeSpan tmp_HorasEntreJornadas = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora - mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo_ANTERIOR.hora;
int int_NumeroRandom_Hora = 0;
int int_NumeroRandom_Minuto = 0;
//Hora
if (tmp_HorasEntreJornadas.Hours > 0)
{
int_NumeroRandom_Hora = obj_Random.Next(0, tmp_HorasEntreJornadas.Hours);
}
//Minuto
if (tmp_HorasEntreJornadas.Minutes > 0)
{
int_NumeroRandom_Minuto = obj_Random.Next(0, tmp_HorasEntreJornadas.Minutes);
}
TimeSpan tmp_HoraGenerada = new TimeSpan(int_NumeroRandom_Hora, int_NumeroRandom_Minuto, 0);
TimeSpan tmp_HoraFinal = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora - tmp_HoraGenerada;
int_Hora = tmp_HoraFinal.Hours;
int_Minutos = tmp_HoraFinal.Minutes;
}
//Sino tiene flexible hacemos que el fichaje se haga un rando de
//3minutos por delante o 3 por dentras
else
{
//Saco un random entre el 0 y el 3
int int_NumeroRandom_Minuto = obj_Random.Next(0, 3);
TimeSpan tmp_HoraGenerada = new TimeSpan(0, int_NumeroRandom_Minuto, 0);
TimeSpan tmp_HoraFinal = new TimeSpan();
//Si el numero random que genero es mayor que el random que genero en el if resto los minutos
if (int_NumeroRandom_Minuto > obj_Random.Next(0, 3))
{
tmp_HoraFinal = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora - tmp_HoraGenerada;
}
//sino sumo los minutos
else
{
tmp_HoraFinal = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.hora + tmp_HoraGenerada;
}
int_Hora = tmp_HoraFinal.Hours;
int_Minutos = tmp_HoraFinal.Minutes;
}
}
}
KRSS_Fichajes mdl_KRSS_Fichajes = new KRSS_Fichajes();
mdl_KRSS_Fichajes.id = -1;
mdl_KRSS_Fichajes.idEmpleado = _lng_idEmpleado;
mdl_KRSS_Fichajes.codigoCliente = _lng_CodigoCliente;
mdl_KRSS_Fichajes.fechaHora = new DateTime(_dtt_Fecha.Year, _dtt_Fecha.Month, _dtt_Fecha.Day, int_Hora, int_Minutos, 0);
mdl_KRSS_Fichajes.gps_Posicion_Latitud = "";
mdl_KRSS_Fichajes.gps_Posicion_Longitud = "";
mdl_KRSS_Fichajes.gps_Proveedor = "";
mdl_KRSS_Fichajes.idDispositivoModelo = lng_idDispositivoModelo;
mdl_KRSS_Fichajes.entradaSalida = _str_EntradaSalida;
mdl_KRSS_Fichajes.idEmpresa = _lng_idEmpresa;
mdl_KRSS_Fichajes.validado = 0;
//Grabamos un registro en la tabla de KRSS_Fichajes
g_obj_KRSS_Fichajes_Datos.Insertar(mdl_KRSS_Fichajes);
}
}
//Sino grabamos la incidencia en la tabla de base de datos
else
{
mdl_TMP_Emails_FichajesIncidencias.codigoCliente = _lng_CodigoCliente;
mdl_TMP_Emails_FichajesIncidencias.idEmpleado = _lng_idEmpleado;
mdl_TMP_Emails_FichajesIncidencias.idFichaje = _lng_idFichaje;
mdl_TMP_Emails_FichajesIncidencias.idJornadaCabecera = _lng_idJornadaCabecera;
mdl_TMP_Emails_FichajesIncidencias.idJornadaLinea = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id;
mdl_TMP_Emails_FichajesIncidencias.incidencia_Tipo = _int_TipoIncidencia;
mdl_TMP_Emails_FichajesIncidencias.fecha = _dtt_Fecha;
mdl_TMP_Emails_FichajesIncidencias.entradaSalida = _str_EntradaSalida;
//Grabamos un registro en la table de TMP_Emails_FichajesIncidencias
g_obj_TMP_Emails_FichajesIncidencias_Datos.Insertar(mdl_TMP_Emails_FichajesIncidencias);
//Recordatorio
//Si no hay fichaje y deberia , y el empleado tiene recordatorio grabo un registro en la tabla de TMP_Emails_RecordatorioFichajes
if (g_mdl_KRS_Empleados.permiteRecordatorio != null && g_mdl_KRS_Empleados.permiteRecordatorio.Value)
{
mdl_TMP_Emails_RecordatorioFichajes.codigoCliente = _lng_CodigoCliente;
mdl_TMP_Emails_RecordatorioFichajes.idEmpleado = _lng_idEmpleado;
mdl_TMP_Emails_RecordatorioFichajes.fecha = _dtt_Fecha;
mdl_TMP_Emails_RecordatorioFichajes.entradaSalida = _str_EntradaSalida;
//Grabamos un registro en la tabla TMP_Emails_RecordatorioFichajes
g_obj_TMP_Emails_RecordatorioFichajes_Datos.Insertar(mdl_TMP_Emails_RecordatorioFichajes);
}
}
}
//Si es del resto de tipos
else
{
mdl_TMP_Emails_FichajesIncidencias.codigoCliente = _lng_CodigoCliente;
mdl_TMP_Emails_FichajesIncidencias.idEmpleado = _lng_idEmpleado;
mdl_TMP_Emails_FichajesIncidencias.idFichaje = _lng_idFichaje;
mdl_TMP_Emails_FichajesIncidencias.idJornadaCabecera = _lng_idJornadaCabecera;
mdl_TMP_Emails_FichajesIncidencias.idJornadaLinea = _mdl_INTERNO_VerificacionFichajes_JornadasLinea_Modelo.id;
mdl_TMP_Emails_FichajesIncidencias.incidencia_Tipo = _int_TipoIncidencia;
mdl_TMP_Emails_FichajesIncidencias.fecha = _dtt_Fecha;
mdl_TMP_Emails_FichajesIncidencias.entradaSalida = _str_EntradaSalida;
g_obj_TMP_Emails_FichajesIncidencias_Datos.Insertar(mdl_TMP_Emails_FichajesIncidencias);
}
}
}
}
catch (Control_Errores)
{ }
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Verificacion_Fichajes) + "/" + nameof(Grabar_ParaEmail_FichajeIncidencia_Jornada));
}
}
private void Grabar_ParaEmail_FichajeIncidencia_AusenciasProgramadasDiasFestivos(int _int_TipoIncidencia,
long _lng_CodigoCliente,
long _lng_idEmpleado,
long? _lng_idFichaje,
DateTime _dtt_Fecha,
string _str_DescripcionIncidencia)
{
try
{
if (g_bol_Grabar_Diccionarios_XML)
{
TMP_Emails_FichajesIncidencias mdl_TMP_Emails_FichajesIncidencias = new TMP_Emails_FichajesIncidencias();
//Descripcion de la incidencia
if (_int_TipoIncidencia.Equals(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_HAYFICHAJENODEBERIA_AUSENCIAPROGRAMA))
{
mdl_TMP_Emails_FichajesIncidencias.incidencia_descripcion = Variables_KairosPRO.G_STR_TIPOINCIDENCIA_FICHAJE_MENSAJE_EMAIL_HAYFICHAJENODEBERIA_AUSENCIAPROGRAMA + _str_DescripcionIncidencia;
}
else if (_int_TipoIncidencia.Equals(Variables_KairosPRO.G_INT_TIPOINCIDENCIA_FICHAJE_HAYFICHAJENODEBERIA_DIAFESTIVO))
{
mdl_TMP_Emails_FichajesIncidencias.incidencia_descripcion = Variables_KairosPRO.G_STR_TIPOINCIDENCIA_FICHAJE_MENSAJE_EMAIL_HAYFICHAJENODEBERIA_DIAFESTIVO + _str_DescripcionIncidencia;
}
mdl_TMP_Emails_FichajesIncidencias.codigoCliente = _lng_CodigoCliente;
mdl_TMP_Emails_FichajesIncidencias.idEmpleado = _lng_idEmpleado;
mdl_TMP_Emails_FichajesIncidencias.idFichaje = _lng_idFichaje;
mdl_TMP_Emails_FichajesIncidencias.idJornadaCabecera = null;
mdl_TMP_Emails_FichajesIncidencias.idJornadaLinea = null;
mdl_TMP_Emails_FichajesIncidencias.incidencia_Tipo = _int_TipoIncidencia;
mdl_TMP_Emails_FichajesIncidencias.fecha = _dtt_Fecha;
mdl_TMP_Emails_FichajesIncidencias.entradaSalida = "";
g_obj_TMP_Emails_FichajesIncidencias_Datos.Insertar(mdl_TMP_Emails_FichajesIncidencias);
}
}
catch (Control_Errores)
{ }
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Verificacion_Fichajes) + "/" + nameof(Grabar_ParaEmail_FichajeIncidencia_AusenciasProgramadasDiasFestivos));
}
}
private void Grabar_ParaEmail_FichajeIncidencia_SinNadaAsignado(int _int_TipoIncidencia,
long _lng_CodigoCliente,
long _lng_idEmpleado,
long? _lng_idFichaje,
DateTime _dtt_Fecha)
{
try
{
if (g_bol_Grabar_Diccionarios_XML)
{
TMP_Emails_FichajesIncidencias mdl_TMP_Emails_FichajesIncidencias = new TMP_Emails_FichajesIncidencias();
mdl_TMP_Emails_FichajesIncidencias.incidencia_descripcion = Variables_KairosPRO.G_STR_TIPOINCIDENCIA_FICHAJE_MENSAJE_EMAIL_FUERAJORNADA;
mdl_TMP_Emails_FichajesIncidencias.codigoCliente = _lng_CodigoCliente;
mdl_TMP_Emails_FichajesIncidencias.idEmpleado = _lng_idEmpleado;
mdl_TMP_Emails_FichajesIncidencias.idFichaje = _lng_idFichaje;
mdl_TMP_Emails_FichajesIncidencias.idJornadaCabecera = null;
mdl_TMP_Emails_FichajesIncidencias.idJornadaLinea = null;
mdl_TMP_Emails_FichajesIncidencias.incidencia_Tipo = _int_TipoIncidencia;
mdl_TMP_Emails_FichajesIncidencias.fecha = _dtt_Fecha;
mdl_TMP_Emails_FichajesIncidencias.entradaSalida = "";
g_obj_TMP_Emails_FichajesIncidencias_Datos.Insertar(mdl_TMP_Emails_FichajesIncidencias);
}
}
catch (Control_Errores)
{ }
catch (Exception ex)
{
Control_Errores.Errores_Log("", ex, nameof(Verificacion_Fichajes) + "/" + nameof(Grabar_ParaEmail_FichajeIncidencia_SinNadaAsignado));
}
}
#endregion
private INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo Buscar_UltimoFichaje_AntesHora(List<INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo> _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo, DateTime _dtt_FechaABuscar)
{
INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_DEVOLVER = null;
//Busco el ultimo fichaje antes de la jornada actual para ver de que tipo fue
if (_lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo != null && _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Count > 0)
{
//Se utiliza un foreach porque las horas pueden saltar de dia, y al no tener un datetime no se sabe sino por el orden
foreach (INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo in _lst_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.Where(m => m.validado != null && m.validado.Value > -1).OrderByDescending(m => m.fechaHora))
{
//Coger el primer registro que la hora de fichaje se menor que la hora de inicio de jornadalinea
if (mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo.fechaHora <= _dtt_FechaABuscar)
{
mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_DEVOLVER = mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo;
break;
}
}
}
return mdl_INTERNO_VerificacionFichajes_KRSS_Fichajes_Modelo_DEVOLVER;
}
private bool Validar_Hora_Inicio(DateTime _dtt_Fecha_JornadaInicio,
DateTime _dtt_Actual,
DateTime _dtt_FechaHoraFichaje)
{
bool bol_Correcto = false;
//El dia de la fecha del fichaje es igual a al dia de la fecha actual
if (_dtt_FechaHoraFichaje.Day >= _dtt_Actual.Day)
{
//Comprobar si la fecha de fichaje es mayor que la fecha JornadaInicio
if (_dtt_FechaHoraFichaje >= _dtt_Fecha_JornadaInicio)
{
bol_Correcto = true;
}
}
//El dia de la fecha del fichaje es menor a al dia de la fecha actual
else
{
bol_Correcto = true;
}
return bol_Correcto;
}
private bool Validar_Hora_Fin(DateTime _dtt_Fecha_JornadaFinal,
DateTime _dtt_Actual,
DateTime _dtt_FechaHoraFichaje,
DateTime _dtt_FechaInicial_Jornada)
{
bool bol_Correcta = false;
//El dia de la fecha del fichaje es igual a al dia de la fecha actual
if (_dtt_FechaHoraFichaje.Day <= _dtt_Actual.Day)
{
//Comprobar si la fecha de fichaje es menor que la fecha JornadaFinal
if (_dtt_FechaHoraFichaje <= _dtt_Fecha_JornadaFinal)
{
bol_Correcta = true;
}
}
else
{
DateTime dtt_Fecha_JornadaFin = new DateTime(_dtt_Actual.Year,
_dtt_Actual.Month,
_dtt_Actual.Day,
_dtt_Fecha_JornadaFinal.Hour,
_dtt_Fecha_JornadaFinal.Minute,
_dtt_Fecha_JornadaFinal.Second);
//Comprobar si la fecha de fichaje es menor que la fecha JornadaInicio
if (_dtt_FechaHoraFichaje <= dtt_Fecha_JornadaFin)
{
bol_Correcta = true;
}
}
return bol_Correcta;
}
private DateTime Buscar_FechaInicial_BusquedaFichajes(DateTime _dtt_Actual)
{
bool bol_Encontro_Registro = false;
TimeSpan tms_HoraCambioDia_Anterior = new TimeSpan(0, 0, 0);
DateTime dtt_FechaInicioJornada= _dtt_Actual;
//Si tiene JornadaCabecera el dia anterior, coger la hora de cambio de dia, para saber desde cuando hay que buscar los fichajes
INTERNO_Verificacion_JornadasCabecera_Modelo mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS = g_obj_KRS_JornadasCabecera_Datos.Obtener_JornadasCabecera_PresenciasProgramadas_ParaVerificacion(g_mdl_KRS_Empleados.id, g_lng_CodigoCliente, _dtt_Actual);
if (mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS != null)
{
DateTime dtt_ABuscar = _dtt_Actual.Date.AddDays(-1);
if (_dtt_Actual.Day > mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.Dia_Inicial_Jornada.Day)
{
dtt_ABuscar = dtt_ABuscar.AddDays(-1);
}
//Buscar el dia anterior para saber el cambioHora
INTERNO_Verificacion_JornadasCabecera_Modelo mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS_AUXILIAR = g_obj_KRS_JornadasCabecera_Datos.Obtener_JornadasCabecera_PresenciasProgramadas_ParaVerificacion(g_mdl_KRS_Empleados.id, g_lng_CodigoCliente, dtt_ABuscar);
if (mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS_AUXILIAR != null)
{
bol_Encontro_Registro = true;
tms_HoraCambioDia_Anterior = mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS_AUXILIAR.horaCambioDia;
dtt_FechaInicioJornada = new DateTime(mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.Dia_Inicial_Jornada.Year,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.Dia_Inicial_Jornada.Month,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.Dia_Inicial_Jornada.Day,
tms_HoraCambioDia_Anterior.Hours,
tms_HoraCambioDia_Anterior.Minutes,
0);
}
else
{
bol_Encontro_Registro = true;
dtt_FechaInicioJornada = new DateTime(mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.Dia_Inicial_Jornada.Year,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.Dia_Inicial_Jornada.Month,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.Dia_Inicial_Jornada.Day,
0,
0,
0);
}
}
//Jornada
if (bol_Encontro_Registro == false)
{
INTERNO_Verificacion_JornadasCabecera_Modelo mdl_INTERNO_Verificacion_JornadasCabecera_Modelo = g_obj_KRS_JornadasCabecera_Datos.Obtener_JornadasCabecera_ParaVerificacion(g_mdl_KRS_Empleados.id, g_lng_CodigoCliente, _dtt_Actual);
if (mdl_INTERNO_Verificacion_JornadasCabecera_Modelo != null)
{
DateTime dtt_ABuscar = _dtt_Actual.Date.AddDays(-1);
if (_dtt_Actual.Day > mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Day)
{
dtt_ABuscar = dtt_ABuscar.AddDays(-1);
}
INTERNO_Verificacion_JornadasCabecera_Modelo mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_AUXILIAR = g_obj_KRS_JornadasCabecera_Datos.Obtener_JornadasCabecera_ParaVerificacion(g_mdl_KRS_Empleados.id, g_lng_CodigoCliente, dtt_ABuscar);
if (mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_AUXILIAR != null)
{
bol_Encontro_Registro = true;
tms_HoraCambioDia_Anterior = mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_AUXILIAR.horaCambioDia;
dtt_FechaInicioJornada = new DateTime(mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Year,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Month,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Day,
tms_HoraCambioDia_Anterior.Hours,
tms_HoraCambioDia_Anterior.Minutes,
0);
}
else
{
bol_Encontro_Registro = true;
dtt_FechaInicioJornada = new DateTime(mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Year,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Month,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.Dia_Inicial_Jornada.Day,
0,
0,
0);
}
}
}
//Fecha Hora Inicial
if (bol_Encontro_Registro == false)
{
dtt_FechaInicioJornada = new DateTime(_dtt_Actual.Year,
_dtt_Actual.Month,
_dtt_Actual.Day,
tms_HoraCambioDia_Anterior.Hours,
tms_HoraCambioDia_Anterior.Minutes,
0);
}
return dtt_FechaInicioJornada;
}
private DateTime Buscar_FechaFinal_BusquedaFichajes(DateTime _dtt_Actual)
{
bool bol_Encontro_Registro = false;
DateTime dtt_FechaFinal_ABuscar= _dtt_Actual;
//Si tiene JornadaCabecera , coger la hora de cambio de dia, para saber desde cuando hay que buscar los fichajes
INTERNO_Verificacion_JornadasCabecera_Modelo mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS = g_obj_KRS_JornadasCabecera_Datos.Obtener_JornadasCabecera_PresenciasProgramadas_ParaVerificacion(g_mdl_KRS_Empleados.id, g_lng_CodigoCliente, _dtt_Actual);
if (mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS != null)
{
bol_Encontro_Registro = true;
dtt_FechaFinal_ABuscar = new DateTime(mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.AUX_JornadaDia_Fin.Year,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.AUX_JornadaDia_Fin.Month,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.AUX_JornadaDia_Fin.Day,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.AUX_JornadaDia_Fin.Hour,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.AUX_JornadaDia_Fin.Minute,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo_PRESENCIASPROGRAMADAS.AUX_JornadaDia_Fin.Second);
}
//Jornada
if (bol_Encontro_Registro == false)
{
INTERNO_Verificacion_JornadasCabecera_Modelo mdl_INTERNO_Verificacion_JornadasCabecera_Modelo = g_obj_KRS_JornadasCabecera_Datos.Obtener_JornadasCabecera_ParaVerificacion(g_mdl_KRS_Empleados.id, g_lng_CodigoCliente, _dtt_Actual);
if (mdl_INTERNO_Verificacion_JornadasCabecera_Modelo != null)
{
bol_Encontro_Registro = true;
dtt_FechaFinal_ABuscar = new DateTime(mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.AUX_JornadaDia_Fin.Year,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.AUX_JornadaDia_Fin.Month,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.AUX_JornadaDia_Fin.Day,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.AUX_JornadaDia_Fin.Hour,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.AUX_JornadaDia_Fin.Minute,
mdl_INTERNO_Verificacion_JornadasCabecera_Modelo.AUX_JornadaDia_Fin.Second);
}
}
if (bol_Encontro_Registro == false)
{
dtt_FechaFinal_ABuscar = new DateTime(_dtt_Actual.Year,
_dtt_Actual.Month,
_dtt_Actual.Day,
23,
59,
59);
}
return dtt_FechaFinal_ABuscar;
}
}
}