public IActionResult Create(int?ProjectID = 0) { var templateWeek = _context.Week.Where(e => e.ProjectID == ProjectID).LastOrDefault(); // take last generated week var createWeekViewModel = new CreateWeekViewModel(); if (templateWeek != null) { createWeekViewModel.ProjectID = templateWeek.ProjectID; createWeekViewModel.WeekTemplateID = templateWeek.WeekID; createWeekViewModel.Notes1Monday = templateWeek.Notes1Monday; createWeekViewModel.Notes2Tuesday = templateWeek.Notes2Tuesday; createWeekViewModel.Notes3Wednesday = templateWeek.Notes3Wednesday; createWeekViewModel.Notes4Thursday = templateWeek.Notes4Thursday; createWeekViewModel.Notes5Friday = templateWeek.Notes5Friday; createWeekViewModel.Notes6Saturday = templateWeek.Notes6Saturday; createWeekViewModel.Notes7Sunday = templateWeek.Notes7Sunday; } var foundFreeWeek = false; var weekCount = Convert.ToInt16(createWeekViewModel.WeekID.Substring(0, 2)); var year = createWeekViewModel.WeekID.Substring(3, 4); while (!foundFreeWeek) { foundFreeWeek = !_context.Week.Any(e => e.ProjectID == ProjectID && e.WeekID == (weekCount < 10 ? "0" + weekCount : "" + weekCount) + "-" + year); if (!foundFreeWeek) { weekCount++; } } createWeekViewModel.WeekID = (weekCount < 10 ? "0" + weekCount : "" + weekCount) + "-" + year; return(View(createWeekViewModel)); }
public async Task <IActionResult> Create(CreateWeekViewModel createWeekViewModel) { // with this call, a week can be created from scratch or with some slots already referencing this week if (ModelState.IsValid) { var WeekIDRegex = new Regex(@"^\d\d-\d\d\d\d$"); if (!WeekIDRegex.IsMatch(createWeekViewModel.WeekID)) { return(BadRequest()); } var WeekIDInt = Int32.Parse(createWeekViewModel.WeekID.Substring(0, 2)); if (WeekIDInt <= 0 || WeekIDInt > 52) { return(BadRequest()); } if (WeekExists(createWeekViewModel.ProjectID, createWeekViewModel.WeekID) || !_context.Project.Any(e => e.ProjectID == createWeekViewModel.ProjectID)) { return(BadRequest()); } var projectID = createWeekViewModel.ProjectID; var weekID = createWeekViewModel.WeekID; var weekSlots = _context.Slot.AsNoTracking().Where(e => e.ProjectID == projectID && e.WeekID == weekID).ToList(); var weekTemplateSlots = _context.Slot.AsNoTracking().Where(e => e.ProjectID == projectID && e.WeekID == createWeekViewModel.WeekTemplateID).ToList(); var activities = _context.Activity.ToList(); var newSlots = new List <SlotModel>(); foreach (var weekTemplateSlot in weekTemplateSlots.Where(e => !weekSlots.Exists(d => d.ProjectID == e.ProjectID && d.ActivityID == e.ActivityID && d.EmployeeID == e.EmployeeID))) { if (!activities.Single(e => e.ActivityID == weekTemplateSlot.ActivityID).Name.Contains("public holiday")) // do not clone public holidays { var dubletCount = newSlots.Where(e => e.ProjectID == projectID && e.WeekID == weekID && e.ActivityID == weekTemplateSlot.ActivityID).Count(); var employeeID = "_" + (dubletCount + 1); newSlots.Add(new SlotModel { ProjectID = projectID, WeekID = weekID, ActivityID = weekTemplateSlot.ActivityID, EmployeeID = employeeID }); } } if (!_context.Week.Any(e => e.WeekID.Substring(3, 4).Equals(weekID.Substring(3, 4)) && e.ProjectID == projectID)) // any week with a new year in its id? { _WeeksRepository.WeightDecay(_context.ActivityRecord.ToList()); // divide all weights by two every time a new year of work is recorded } await _context.Slot.AddRangeAsync(newSlots); await _context.Week.AddAsync(new WeekModel { ProjectID = projectID, WeekID = weekID, FirstDayOfTheWeek = WeekModel.GetMondayFromWeekID(createWeekViewModel.WeekID), Notes1Monday = createWeekViewModel.Notes1Monday, Notes2Tuesday = createWeekViewModel.Notes2Tuesday, Notes3Wednesday = createWeekViewModel.Notes3Wednesday, Notes4Thursday = createWeekViewModel.Notes4Thursday, Notes5Friday = createWeekViewModel.Notes5Friday, Notes6Saturday = createWeekViewModel.Notes6Saturday, Notes7Sunday = createWeekViewModel.Notes7Sunday, }); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Edit), new { projectID, weekID })); } return(View(createWeekViewModel)); }