private bool Ausente(DateTime fecha, DetalleHorarioDTO horarioDia, List <AccesoDTO> _listaAccesosDía, out bool?porLlegarTarde) { bool _hayNovedadHoraEntrada; bool _hayComisionServicioHoraEntrada; var listaComisonesServicioDelDia = ComisionesEnElMes(fecha).Where(comision => (comision.FechaDesde <= fecha) && (comision.FechaHasta >= fecha)).AsParallel().ToList(); var listaNovedadesDelDia = NovedadesEnElMes(fecha).Where(novedad => (novedad.FechaDesde <= fecha) && (novedad.FechaHasta >= fecha)).AsParallel().ToList();; porLlegarTarde = false; _hayNovedadHoraEntrada = listaNovedadesDelDia.Any() ? (listaNovedadesDelDia.Where(novedad => ((novedad.HoraDesde <= horarioDia.HoraEntrada) && (novedad.HoraHasta >= horarioDia.HoraEntrada))).Any() ? true : false) : false; _hayComisionServicioHoraEntrada = listaComisonesServicioDelDia.Any() ? (listaComisonesServicioDelDia.Where(comision => (((comision.HoraInicio <= horarioDia.HoraEntrada) && (comision.HoraFin >= horarioDia.HoraEntrada)) || comision.JornadaCompleta)).Any() ? true : false) : false; if (_hayNovedadHoraEntrada || _hayComisionServicioHoraEntrada) // Primer check (novedades y comision de servicio) { return(false); } else if (_listaAccesosDía.Any()) // Segundo check (horarios y accesos) { if (TardanzaSuperaLimite(Tardanza(_listaAccesosDía, horarioDia), _minutosToleranciaAusente)) // Tercer check (tardanza) { porLlegarTarde = true; return(true); } return(false); } else if (fecha.Date <= DateTime.Now.Date) { return(true); } return(false); }
private TimeSpan?Tardanza(List <AccesoDTO> accesosDia, DetalleHorarioDTO horarioDia) { TimeSpan?_horaEntradaAcceso = accesosDia.Where(acceso => acceso.TipoAcceso.Equals("Entrada")).Any() ? accesosDia.Where(acceso => acceso.TipoAcceso.Equals("Entrada")).Last().Hora : (TimeSpan?)null; TimeSpan _horaEntradaHorario = (TimeSpan)horarioDia.HoraEntrada; if (_horaEntradaAcceso != null && ((TimeSpan)_horaEntradaAcceso).TotalMinutes > _horaEntradaHorario.TotalMinutes) { return(Diff(_horaEntradaHorario, (TimeSpan)_horaEntradaAcceso)); } else { return(null); } }
private TimeSpan?TardanzaExtension(List <AccesoDTO> accesosDia, DetalleHorarioDTO horarioDia) { TimeSpan?_horaEntradaParcialAcceso = accesosDia.Where(acceso => acceso.TipoAcceso.Equals("EntradaParacial")).Any() ? accesosDia.Where(acceso => acceso.TipoAcceso.Equals("EntradaParacial")).Last().Hora : (TimeSpan?)null; TimeSpan _horaEntradaParcialHorario = (TimeSpan)horarioDia.HoraEntradaParcial; if (_horaEntradaParcialAcceso > _horaEntradaParcialHorario && _horaEntradaParcialAcceso != null) { return(Diff(_horaEntradaParcialHorario, (TimeSpan)_horaEntradaParcialAcceso)); } else { return(null); } }
public IEnumerable <DetalleHorarioDTO> AgregarDetalleHorario(List <DetalleHorarioDTO> listahorarios, long id, DateTime fechadesde, DateTime fechahasta, TimeSpan?horaentrada, TimeSpan?horasalidaparcial, TimeSpan?horaentradaparcial, TimeSpan?horasalida, bool lunes, bool martes, bool miercoles, bool jueves, bool viernes, bool sabado, bool domingo) { var nuevoHorario = new DetalleHorarioDTO(); nuevoHorario.AgenteId = id; nuevoHorario.FechaDesde = fechadesde; nuevoHorario.FechaHasta = fechahasta; nuevoHorario.HoraEntrada = horaentrada; nuevoHorario.HoraSalidaParcial = horasalidaparcial; nuevoHorario.HoraEntradaParcial = horaentradaparcial; nuevoHorario.HoraSalida = horasalida; nuevoHorario.Lunes = lunes; nuevoHorario.Martes = martes; nuevoHorario.Miercoles = miercoles; nuevoHorario.Jueves = jueves; nuevoHorario.Viernes = viernes; nuevoHorario.Sabado = sabado; nuevoHorario.Domingo = domingo; listahorarios.Add(nuevoHorario); return(listahorarios); }
public List <ReporteMensualDTO> ObtenerPorId(long agenteId, int año, int mes) { var lista = new List <ReporteMensualDTO>(); for (int i = 1; i <= _diasDelMes; i++) { var dia = new DateTime(año, mes, i); _horarioDia = HorarioDelDia(dia); var _finMes = new DateTime(_fecha.Year, _fecha.Month, _diasDelMes); var reporte = new ReporteMensualDTO(); bool?porLlegarTarde = null; var listaAccesosDelDia = ListaAccesosDelDia(dia); _diasDelMes = DateTime.DaysInMonth(dia.Year, dia.Month); if (_horarioDia != null) { reporte.AgenteId = _agenteId; reporte.Numero = i; // Listas para las grillas de abajo reporte.Comisiones = ComisionesEnElMes(dia) ?? new List <ComisionServicioDTO>(); reporte.Lactancias = LactanciasEnElMes(dia) ?? new List <LactanciaDTO>(); reporte.Novedades = NovedadesEnElMes(dia) ?? new List <NovedadAgenteDTO>(); reporte.Fecha = dia; reporte.Dia = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(dia.ToString("dddd", new CultureInfo("es-Ar"))); // Horas de los accesos reporte.HoraEntrada = listaAccesosDelDia == null ? null : listaAccesosDelDia.Where(acceso => acceso.TipoAcceso == "Entrada").Any() ? listaAccesosDelDia.Where(acceso => acceso.TipoAcceso == "Entrada").Last().Hora : (TimeSpan?)null; reporte.HoraEntradaParcial = listaAccesosDelDia == null ? null : _horarioDia.HoraEntradaParcial == null ? null : listaAccesosDelDia.Where(acceso => acceso.TipoAcceso == "EntradaParacial").Any() ? listaAccesosDelDia.Where(acceso => acceso.TipoAcceso == "EntradaParacial").Last().Hora : (TimeSpan?)null; reporte.HoraSalida = listaAccesosDelDia == null ? null : listaAccesosDelDia.Where(acceso => acceso.TipoAcceso == "Salida").Any() ? listaAccesosDelDia.Where(acceso => acceso.TipoAcceso == "Salida").Last().Hora : (TimeSpan?)null; reporte.HoraSalidaParcial = listaAccesosDelDia == null ? null : _horarioDia.HoraSalidaParcial == null ? null : listaAccesosDelDia.Where(acceso => acceso.TipoAcceso == "SalidaParcial").Any() ? listaAccesosDelDia.Where(acceso => acceso.TipoAcceso == "SalidaParcial").Last().Hora : (TimeSpan?)null; // Minutos tarde y minutos faltantes reporte.MinutosTarde = listaAccesosDelDia == null ? null : Tardanza(listaAccesosDelDia, _horarioDia); reporte.MinutosTardeExtension = listaAccesosDelDia == null ? null : _horarioDia.HoraEntradaParcial == null ? null : TardanzaExtension(listaAccesosDelDia, _horarioDia); reporte.MinutosFaltantes = listaAccesosDelDia == null ? null : (reporte.HoraSalidaParcial != null && reporte.HoraEntrada != null) ? Diff((TimeSpan)reporte.HoraSalidaParcial, (TimeSpan)reporte.HoraEntrada) : (TimeSpan?)null; reporte.MinutosFaltantesExtension = listaAccesosDelDia == null ? null : _horarioDia.HoraEntradaParcial == null ? ((reporte.HoraSalida != null && reporte.HoraEntrada != null) ? Diff(Diff((TimeSpan)reporte.HoraSalida, (TimeSpan)reporte.HoraEntrada), Diff((TimeSpan)_horarioDia.HoraSalida, (TimeSpan)_horarioDia.HoraEntrada)) : (TimeSpan?)null) : ((reporte.HoraSalida != null && reporte.HoraEntradaParcial != null) ? Diff(Diff((TimeSpan)reporte.HoraSalida, (TimeSpan)reporte.HoraEntradaParcial), Diff((TimeSpan)_horarioDia.HoraSalida, (TimeSpan)_horarioDia.HoraEntradaParcial)) : (TimeSpan?)null); reporte.Ausente = listaAccesosDelDia == null ? (bool?)null : Ausente(dia, _horarioDia, listaAccesosDelDia, out porLlegarTarde) || ((reporte.MinutosTarde != null) && ((TimeSpan)reporte.MinutosTarde).TotalMinutes > _minutosToleranciaAusente ? true : false); reporte.AusentePorLlegarTarde = listaAccesosDelDia == null ? (bool?)null : porLlegarTarde; } else { reporte.AgenteId = _agenteId; reporte.Numero = i; reporte.Ausente = null; // Listas para las grillas de abajo reporte.Comisiones = ComisionesEnElMes(dia) ?? new List <ComisionServicioDTO>(); reporte.Lactancias = LactanciasEnElMes(dia) ?? new List <LactanciaDTO>(); reporte.Novedades = NovedadesEnElMes(dia) ?? new List <NovedadAgenteDTO>(); reporte.Fecha = dia; reporte.Dia = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(dia.ToString("dddd", new CultureInfo("es-Ar"))); // Horas de los accesos reporte.HoraEntrada = null; reporte.HoraEntradaParcial = null; reporte.HoraSalida = null; reporte.HoraSalidaParcial = null; // Minutos tarde y minutos faltantes reporte.MinutosTarde = null; reporte.MinutosTardeExtension = null; reporte.MinutosFaltantes = null; reporte.MinutosFaltantesExtension = null; reporte.AusentePorLlegarTarde = null; } lista.Add(reporte); } return(lista); }