public static void PersistDayLog(DayLog daylog, CarPoolToolEntities entities, UserStatus?fillStatus, bool persistChanges) { DateTime day = daylog.Date.Date; var users = entities.Users; if (fillStatus.HasValue) { daylog.FillMissingUsers(users, fillStatus.Value, true); } foreach (var user in users) { if (!daylog.Userdata.ContainsKey(user)) { continue; } var log = (from l in entities.CarpoolLogs where l.data == day && l.username == user.username select l).FirstOrDefault(); UserStatus status = daylog.Userdata[user]; //Remove entry if (status == UserStatus.MissingData) { if (log != null) { entities.CarpoolLogs.Remove(log); } } else { if (log == null) { log = new CarpoolLog(); log.username = user.username; log.data = day; entities.CarpoolLogs.Add(log); } switch (status) { case UserStatus.Driver: log.driver = 1; log.passenger = 0; break; case UserStatus.Passenger: log.driver = 0; log.passenger = 1; break; case UserStatus.Absent: log.driver = 0; log.passenger = 0; break; default: break; } } } //Update o insert if (persistChanges) { entities.SaveChanges(); } }
public ActionResult Update(DateTime day, string username, UserStatus status, UserStatus?formerDriverStatus, bool updateGoogleCalendar) { day = day.Date; CarPoolToolEntities entities = new CarPoolToolEntities(); var driver = (from l in entities.CarpoolLogs where l.data == day && l.driver == 1 select l).FirstOrDefault(); if (driver != null) { if (formerDriverStatus.HasValue && formerDriverStatus != UserStatus.Driver) { driver.driver = 0; driver.passenger = formerDriverStatus == UserStatus.Absent ? (short)0 : (short)1; entities.SaveChanges(); } } var log = (from l in entities.CarpoolLogs where l.data == day && l.username == username select l).FirstOrDefault(); //Remove entry if (status == UserStatus.MissingData) { if (log != null) { entities.CarpoolLogs.Remove(log); } } else { if (log == null) { log = new CarpoolLog(); log.username = username; log.data = day; entities.CarpoolLogs.Add(log); } switch (status) { case UserStatus.Driver: log.driver = 1; log.passenger = 0; break; case UserStatus.Passenger: log.driver = 0; log.passenger = 1; break; case UserStatus.Absent: log.driver = 0; log.passenger = 0; break; default: break; } } //Update o insert entities.SaveChanges(); //Update calendar if (updateGoogleCalendar) { CalendarHelper.UpdateGoogleCalendar(day.Date, day.Date.AddDays(1)); } return(RedirectToAction("Week", new { start = day.Date, skipAheadIfWeekend = false })); }