public static WeeklyTimeTrack GetWeeklyClockInOutTimeByDate(string userName, DateTime startDate, DateTime endDate)
{
var weekEndDateToSearchInDatabase = endDate.AddDays(1);
var weeklyTimeTrack = new WeeklyTimeTrack
{
WeekStartDate = startDate.Date,
WeekEndDate = endDate.Date,
DailyTimeTracks = new List<DailyTimeTrack>()
};
using (var dbContext = new TimeTrackingEntities())
{
var currentUser =
dbContext.ExtendedUserProfiles.FirstOrDefault(c => c.UserName.ToLower().Equals(userName));
var userWeeklyClockInOutTimings = (from utsh in dbContext.UserTimeTrackHistories
where utsh.IsDeleted == false &&
utsh.UserName.ToLower().Equals(userName.ToLower()) &&
(utsh.StampDate >= startDate && utsh.StampDate < weekEndDateToSearchInDatabase) &&
utsh.ClockInTime.Length > 0
select utsh).ToList();
if (userWeeklyClockInOutTimings.Any())
{
var weekDay = startDate.Date;
while (weekDay.Date <= endDate.Date)
{
var dailyUserStampList =
userWeeklyClockInOutTimings.Where(
daily =>
daily.StampDate >= weekDay &&
daily.StampDate < weekDay.AddDays(1)).ToList();
var dailyTimeTrack = new DailyTimeTrack(startDate, currentUser.HourlyRate.HasValue ? currentUser.HourlyRate.Value : 0)
{
StampDate = weekDay,
TimeTrackList =
GetTimeTrackList(dailyUserStampList, weekDay).
OrderByDescending(c => c.ClockInTime).ThenByDescending(
d => d.ClockOutTime).ToList()
};
weeklyTimeTrack.DailyTimeTracks.Add(dailyTimeTrack);
weeklyTimeTrack.DailyTimeTracks = weeklyTimeTrack.DailyTimeTracks.OrderByDescending(c => c.StampDate).ToList();
weekDay = weekDay.AddDays(1);
}
}
}
return weeklyTimeTrack;
}