Пример #1
0
        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));
        }
Пример #2
0
        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));
        }