public NewTimesheetEntryExtensionBase CreateTimeslip(TimeslipVM timeslipVM) { Guid userGuid = Guid.Parse(timeslipVM.UserId); Guid wbiGuid = Guid.Parse(timeslipVM.WBI_Id); NewTimesheetEntryExtensionBase timeslip = new NewTimesheetEntryExtensionBase() { NewTimesheetEntryId = Guid.NewGuid(), NewRemarks = timeslipVM.Remarks, CustomDayId = timeslipVM.DayId, NewChangeRequestId = wbiGuid, OwningUser = userGuid, NewStartTask = DateTime.Parse(timeslipVM.StartTime), NewEndTask = DateTime.Parse(timeslipVM.EndTime) }; TimeSpan?duration = timeslip.NewEndTask - timeslip.NewStartTask; int durationInHours = (int)duration?.TotalHours; NewChangeRequestExtensionBase wbi = _context.NewChangeRequestExtensionBase .Where(w => w.NewChangeRequestId == timeslip.NewChangeRequestId) .FirstOrDefault(); wbi.NewActualHours += durationInHours; if (wbi.NewActualHours > wbi.NewEstimatedHours) { throw new ArgumentException("Alloted hours for this WBI has been maxed out."); } // a.start <= b.end && a.end >= b.start var date = Convert.ToDateTime(timeslip.NewStartTask); var sameDate = date.Date; foreach (var item in _context.NewTimesheetEntryExtensionBase .Where(u => Convert.ToDateTime(u.NewStartTask).Date == sameDate && u.OwningUser == userGuid)) { if (item.NewTimesheetEntryId != timeslip.NewTimesheetEntryId) { if (item.NewStartTask < timeslip.NewEndTask && item.NewEndTask > timeslip.NewStartTask) { throw new ArgumentException("Times cannot overlap"); } } } _context.NewTimesheetEntryExtensionBase.Add(timeslip); _context.SaveChanges(); return(timeslip); }
public void SeedData() { if (_context.AccountBase.Any()) { return; } var clients = new AccountBase[] { new AccountBase { AccountId = Guid.NewGuid(), Name = "Calgary Flames", DeletionStateCode = 0, StateCode = 0 }, new AccountBase { AccountId = Guid.NewGuid(), Name = "Vancouver Canucks", DeletionStateCode = 0, StateCode = 0 }, new AccountBase { AccountId = Guid.NewGuid(), Name = "Winnipeg Jets", DeletionStateCode = 0, StateCode = 0 } }; foreach (AccountBase a in clients) { _context.AccountBase.Add(a); } _context.SaveChanges(); if (_context.NewProjectTypeExtensionBase.Any()) { return; } var projectTypes = new NewProjectTypeExtensionBase[] { new NewProjectTypeExtensionBase { NewProjectTypeId = Guid.NewGuid(), NewName = "Sports related" } }; foreach (NewProjectTypeExtensionBase t in projectTypes) { _context.NewProjectTypeExtensionBase.Add(t); } _context.SaveChanges(); if (_context.NewProjectExtensionBase.Any()) { return; } var projects = new NewProjectExtensionBase[] { new NewProjectExtensionBase { NewProjectId = Guid.NewGuid(), NewName = "Project Calgary", NewStartDate = new DateTime(2018, 01, 20, 01, 01, 01), NewEndDate = new DateTime(2018, 01, 30, 02, 02, 02), NewAccountId = clients.Single(c => c.Name == "Calgary Flames").AccountId, NewProjectTypeId = projectTypes.Single(t => t.NewName == "Sports related").NewProjectTypeId }, new NewProjectExtensionBase { NewProjectId = Guid.NewGuid(), NewName = "Project Vancouver", NewStartDate = new DateTime(2018, 02, 20, 01, 01, 01), NewEndDate = new DateTime(2018, 02, 27, 02, 02, 02), NewAccountId = clients.Single(c => c.Name == "Vancouver Canucks").AccountId, NewProjectTypeId = projectTypes.Single(t => t.NewName == "Sports related").NewProjectTypeId }, new NewProjectExtensionBase { NewProjectId = Guid.NewGuid(), NewName = "Project Winnipeg", NewStartDate = new DateTime(2018, 03, 20, 01, 01, 01), NewEndDate = new DateTime(2018, 03, 30, 02, 02, 02), NewAccountId = clients.Single(c => c.Name == "Winnipeg Jets").AccountId, NewProjectTypeId = projectTypes.Single(t => t.NewName == "Sports related").NewProjectTypeId } }; foreach (NewProjectExtensionBase p in projects) { _context.NewProjectExtensionBase.Add(p); } _context.SaveChanges(); if (_context.NewChangeRequestExtensionBase.Any()) { return; } var workBreakdownItems = new NewChangeRequestExtensionBase[] { new NewChangeRequestExtensionBase { NewChangeRequestId = Guid.NewGuid(), NewName = "Calgary's Finance", NewEstimatedHours = 999, NewActualHours = 20, NewProjectId = projects.Single(p => p.NewName == "Project Calgary").NewProjectId }, new NewChangeRequestExtensionBase { NewChangeRequestId = Guid.NewGuid(), NewName = "Calgary's Management", NewEstimatedHours = 999, NewActualHours = 30, NewProjectId = projects.Single(p => p.NewName == "Project Calgary").NewProjectId }, new NewChangeRequestExtensionBase { NewChangeRequestId = Guid.NewGuid(), NewName = "Vancouver's Finance", NewEstimatedHours = 999, NewActualHours = 20, NewProjectId = projects.Single(p => p.NewName == "Project Vancouver").NewProjectId }, new NewChangeRequestExtensionBase { NewChangeRequestId = Guid.NewGuid(), NewName = "Vancouver's Management", NewEstimatedHours = 999, NewActualHours = 30, NewProjectId = projects.Single(p => p.NewName == "Project Vancouver").NewProjectId }, new NewChangeRequestExtensionBase { NewChangeRequestId = Guid.NewGuid(), NewName = "Winnipeg's Finance", NewEstimatedHours = 999, NewActualHours = 20, NewProjectId = projects.Single(p => p.NewName == "Project Winnipeg").NewProjectId }, new NewChangeRequestExtensionBase { NewChangeRequestId = Guid.NewGuid(), NewName = "Winnipeg's Management", NewEstimatedHours = 999, NewActualHours = 30, NewProjectId = projects.Single(p => p.NewName == "Project Winnipeg").NewProjectId }, }; foreach (NewChangeRequestExtensionBase w in workBreakdownItems) { _context.NewChangeRequestExtensionBase.Add(w); } _context.SaveChanges(); if (_context.Users.Any()) { return; } var users = new User[] { new User { UserId = Guid.NewGuid(), Email = "*****@*****.**", Password = "******", FirstName = "Bob", LastName = "Jones" }, new User { UserId = Guid.NewGuid(), Email = "*****@*****.**", Password = "******", FirstName = "Sally", LastName = "Smith" } }; foreach (User u in users) { _context.Users.Add(u); } _context.SaveChanges(); if (_context.NewTimesheetEntryExtensionBase.Any()) { return; } var timeslips = new NewTimesheetEntryExtensionBase[] { new NewTimesheetEntryExtensionBase { NewTimesheetEntryId = Guid.NewGuid(), NewStartTask = DateTime.ParseExact("2018-04-20 08:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture), NewEndTask = DateTime.ParseExact("2018-04-20 11:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture), NewRemarks = "Test Remark", NewChangeRequestId = workBreakdownItems.Single(w => w.NewName == "Calgary's Finance").NewChangeRequestId, OwningUser = users.Single(u => u.Email == "*****@*****.**").UserId }, new NewTimesheetEntryExtensionBase { NewTimesheetEntryId = Guid.NewGuid(), NewStartTask = DateTime.ParseExact("2018-04-20 13:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture), NewEndTask = DateTime.ParseExact("2018-04-20 16:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture), NewRemarks = "Test Remark two", NewChangeRequestId = workBreakdownItems.Single(w => w.NewName == "Vancouver's Finance").NewChangeRequestId, OwningUser = users.Single(u => u.Email == "*****@*****.**").UserId }, }; foreach (NewTimesheetEntryExtensionBase t in timeslips) { _context.NewTimesheetEntryExtensionBase.Add(t); } _context.SaveChanges(); if (_context.CustomDays.Any()) { return; } var customMonday = new CustomDay { CustomDayId = "aosidjf", Name = "My Monday", Description = "This is my typical monday", UserId = _context.Users.FirstOrDefault().UserId }; _context.CustomDays.Add(customMonday); _context.SaveChanges(); if (_context.Timeslip_Templates.Any()) { return; } var timeslipTemplates = new CustomDay_WBI[] { new CustomDay_WBI { TimeslipTemplateId = "testId1", NewChangeRequestId = workBreakdownItems.Single(w => w.NewName == "Calgary's Finance").NewChangeRequestId, CustomDayId = customMonday.CustomDayId, StartTime = DateTime.ParseExact("08:00", "HH:mm", CultureInfo.InvariantCulture), EndTime = DateTime.ParseExact("11:00", "HH:mm", CultureInfo.InvariantCulture), Remarks = "This is a test remark on morning timeslip template" }, new CustomDay_WBI { TimeslipTemplateId = "testId2", NewChangeRequestId = workBreakdownItems.Single(w => w.NewName == "Vancouver's Finance").NewChangeRequestId, CustomDayId = customMonday.CustomDayId, StartTime = DateTime.ParseExact("13:00", "HH:mm", CultureInfo.InvariantCulture), EndTime = DateTime.ParseExact("16:00", "HH:mm", CultureInfo.InvariantCulture), Remarks = "This is a test remark on afternoon timeslip template" }, }; foreach (CustomDay_WBI c in timeslipTemplates) { _context.Timeslip_Templates.Add(c); } _context.SaveChanges(); }