2023 lines
150 KiB
C#
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;
|
|
|
|
}
|
|
|
|
}
|
|
}
|