public void Horas(int ID) { string Fecha1 = PrimeraFecha; string Fecha2 = SegundaFecha; TimeSpan dias = DateTime.Parse(Fecha2) - DateTime.Parse(Fecha1); for (int i = 0; dias.Days >= i; i++) { #region Local variables DateTime NuevaFecha = DateTime.Parse(Fecha1); NuevaFecha = NuevaFecha.AddDays(i); #region Dia feriado pa to el mundo if (metodos.EsDiaFeriado(NuevaFecha.ToShortDateString())) { float th = 9; if (NuevaFecha.DayOfWeek == DayOfWeek.Friday) { th = 8; } var EmployeeHours = WorkedTime.Where(x => x.ID == ID).FirstOrDefault(); if (EmployeeHours == null) { HorasTrabajadas ht = new HorasTrabajadas(ID, th, NuevaFecha); WorkedTime.Add(ht); } else { EmployeeHours.HorasT += th; } var DayExist = DayHours.Where(x => x.ID == ID && x.Fecha.ToShortDateString().Equals(NuevaFecha.ToShortDateString())).FirstOrDefault(); if (DayExist == null) { HorasTrabajadas dh = new HorasTrabajadas(ID, th, NuevaFecha); DayHours.Add(dh); } } #endregion DataTable UsuariosSeleccionados = metodos.HorasTrabajadasEmpleados(ID, NuevaFecha.ToShortDateString()); int count = UsuariosSeleccionados.Rows.Count; //TimeSpan horasT = new TimeSpan(); //no used anymore #endregion #region Ponches de menos de 2 minutos //another for, a neccesary evil for (int Z = 0; Z < count; Z++) // removes checktimes with less than 2 minutes timespan { if ((Z + 1) < count) { DateTime dateFrom = DateTime.Parse(UsuariosSeleccionados.Rows[Z]["CHECKTIME"].ToString()); DateTime dateTo = DateTime.Parse(UsuariosSeleccionados.Rows[Z + 1]["CHECKTIME"].ToString()); if ((dateTo - dateFrom).TotalMinutes < 2) { UsuariosSeleccionados.Rows.RemoveAt(Z + 1); count--; } } } #endregion int ret = 0; Math.DivRem(count, 2, out ret); #region Ponches huerfanos if (ret != 0) { DataRow r = UsuariosSeleccionados.NewRow(); r["USERID"] = UsuariosSeleccionados.Rows[count - 1]["USERID"]; r["CHECKTIME"] = UsuariosSeleccionados.Rows[count - 1]["CHECKTIME"]; UsuariosSeleccionados.Rows.Add(r); UsuariosSeleccionados.AcceptChanges(); //ponche huerfano } #endregion #region La suma //sums stuff up for (int Z = 0; Z < count; Z += 2) { if ((Z + 1) < count) { DateTime dateFrom = DateTime.Parse(UsuariosSeleccionados.Rows[Z]["CHECKTIME"].ToString()); DateTime dateTo = DateTime.Parse(UsuariosSeleccionados.Rows[Z + 1]["CHECKTIME"].ToString()); //horasT = (horasT + (dateTo.TimeOfDay - dateFrom.TimeOfDay)); //horasT = (horasT + (dateFrom.TimeOfDay - dateTo.TimeOfDay)); TimeSpan ts = (dateTo.TimeOfDay - dateFrom.TimeOfDay); //añadimos las horas separadas ya que estas seran divididas en dayHours y WorkedTime AddHoras(ID, NuevaFecha.ToShortDateString(), ts.ToString()); // tambien siempre es bueno mantener las tandas separadas, las tandas estaran guardadas en horasTrabajadas } } #endregion //AddHoras(ID, NuevaFecha.ToShortDateString(), horasT.ToString()); } }