public TimeSheet Add(string userId, DateTime fromDate, DateTime toDate) { DataSets.TimeSheet dbTimeSheet = new DataSets.TimeSheet() { FromDate = fromDate, ToDate = toDate, DateAdded = DateTime.Now, UserId = userId }; db.TimeSheets.Add(dbTimeSheet); bool saved = db.SaveChanges() == 1; return(saved ? _mapper.Map <TimeSheet>(dbTimeSheet) : null); }
public TimeSheet Add(string userId, DateTime fromDate, DateTime toDate, out string message) { message = ""; var userTimeSheets = db.TimeSheets.Where(c => c.UserId == userId && ((fromDate >= c.FromDate && fromDate <= c.ToDate) || (toDate >= c.FromDate && toDate <= c.ToDate))) .FirstOrDefault(); if (userTimeSheets == null) { DataSets.TimeSheet dbTimeSheet = new DataSets.TimeSheet() { FromDate = fromDate, ToDate = toDate, DateAdded = DateTime.Now, UserId = userId, }; db.TimeSheets.Add(dbTimeSheet); if (db.SaveChanges() > 0) { //bool addedTimeSheetStatus = AddTimeSheetStatuses(userId, dbTimeSheet.ID); return(_mapper.Map <TimeSheet>(dbTimeSheet)); //if (addedTimeSheetStatus) //else //{ // db.TimeSheets.Remove(dbTimeSheet); // message = "something went wrong please try again "; // return null; //} } else { throw new InvalidOperationException(); } } else { message = $"Dates {fromDate.ToShortDateString()}/{toDate.ToShortDateString()} Fall betweeen user's timesheet dates {userTimeSheets.FromDate.ToShortDateString()}/{userTimeSheets.ToDate.ToShortDateString()}"; return(null); } }
public TimeSheet Get(int id, out List <Project> projects, bool includeActivites = true) { projects = new List <Project>(); DataSets.TimeSheet dbTimeSheet = null; if (includeActivites) { dbTimeSheet = db.TimeSheets .Include(k => k.TimeSheetTasks) .ThenInclude(x => x.Activities) .Include(k => k.TimeSheetTasks) .ThenInclude(x => x.ProjectTask) .ThenInclude(x => x.Project) .FirstOrDefault(k => k.ID == id); } else { dbTimeSheet = db.TimeSheets .Include(k => k.TimeSheetTasks) .ThenInclude(x => x.ProjectTask) .ThenInclude(x => x.Project) .FirstOrDefault(k => k.ID == id); } if (dbTimeSheet == null) { return(null); } foreach (var tsProject in dbTimeSheet.TimeSheetTasks) { var parent = tsProject.ProjectTask.Project; if (!projects.Any(k => k.ID == parent.ID)) { projects.Add(_mapper.Map <Project>(parent)); } } return(_mapper.Map <TimeSheet>(dbTimeSheet)); }
public async Task <TimeSheet> Save(TimeSheetSaveModel model) { IQueryable <DataSets.TimeSheet> conflictQuery = db.TimeSheets.Where(c => c.UserId == model.userId && ((model.fromDate >= c.FromDate && model.fromDate <= c.ToDate) || (model.toDate >= c.FromDate && model.toDate <= c.ToDate))); void ensureNoConflict(DataSets.TimeSheet ts) { if (ts != null) { throw new ClientException($"Dates {model.fromDate.ToShortDateString()}/{model.toDate.ToShortDateString()} Fall betweeen user's timesheet dates {ts.FromDate.ToShortDateString()}/{ts.ToDate.ToShortDateString()}"); } } if (model.fromDate >= model.toDate) { throw new ClientException("from date must be before to date"); } if (model.id.HasValue) { var possibleConflictTimeSheet = conflictQuery.Where(k => k.ID != model.id.Value).FirstOrDefault(); ensureNoConflict(possibleConflictTimeSheet); // # save timeSheet # // get timeSheet var dbTimeSheet = db.TimeSheets.FirstOrDefault(k => k.ID == model.id.Value); if (dbTimeSheet == null) { throw new ClientException("record not found"); } // check activities var minActivity = db.TimeSheetActivities .OrderBy(k => k.FromDate) .FirstOrDefault(); var maxActivity = db.TimeSheetActivities .OrderByDescending(k => k.FromDate) .FirstOrDefault(); if (minActivity != null && model.fromDate > minActivity.FromDate) { throw new ClientException($"from date should be before {minActivity.FromDate.Date.ToDisplayDate()} which is the earliest activity made on that date on the schedule"); } if (maxActivity != null && model.toDate < maxActivity.FromDate) { throw new ClientException($"to date should be after {maxActivity.FromDate.Date.ToDisplayDate()} which is the latest activity made on that date on the schedule"); } // update values dbTimeSheet.FromDate = model.fromDate; dbTimeSheet.ToDate = model.toDate; db.SaveChanges(); await notificationMethods.Send(model.GetAddedByUser(), model.userId, $"schedule time was modified", NotificationType.Information, true, dbTimeSheet.ID); var parsed = _mapper.Map <TimeSheet>(dbTimeSheet); parsed.HasTasks = db.TimeSheetTasks.Any(k => k.TimeSheetId == parsed.ID); var addedByUser = db.Users.First(k => k.Id == dbTimeSheet.AddedByUserId); parsed.AddedByUserName = addedByUser.FirstName + " " + addedByUser.LastName; return(parsed); } else { var possibleConflictTimeSheet = conflictQuery.FirstOrDefault(); ensureNoConflict(possibleConflictTimeSheet); // # new timesheet # DataSets.TimeSheet dbTimeSheet = new DataSets.TimeSheet() { UserId = model.userId, FromDate = model.fromDate, ToDate = model.toDate, DateAdded = DateTime.Now, AddedByUserId = model.GetAddedByUser() }; // add the timeSheet db.TimeSheets.Add(dbTimeSheet); // save changes on teamstimeSheets db.SaveChanges(); await notificationMethods.Send(model.GetAddedByUser(), model.userId, $"New schedule added", NotificationType.Default, true, dbTimeSheet.ID); var parsed = _mapper.Map <TimeSheet>(dbTimeSheet); var addedByUser = db.Users.First(k => k.Id == dbTimeSheet.AddedByUserId); parsed.AddedByUserName = addedByUser.FirstName + " " + addedByUser.LastName; return(parsed); } //DataSets.TimeSheet dbTimeSheet = new DataSets.TimeSheet() //{ // FromDate = fromDate, // ToDate = toDate, // DateAdded = DateTime.Now, // UserId = userId //}; //db.TimeSheets.Add(dbTimeSheet); //if (db.SaveChanges() > 0) //{ // return _mapper.Map<TimeSheet>(dbTimeSheet); //} }