public void FillViewData(ForecastWeek forecastWeek) { ViewData["ForecastTypes"] = new SelectList(new List <SelectListItem> { new SelectListItem { Value = "Project", Text = "Project" }, new SelectListItem { Value = "Vacation", Text = "Vacation" }, new SelectListItem { Value = "Sickness", Text = "Sickness" }, new SelectListItem { Value = "Training", Text = "Training" }, new SelectListItem { Value = "Bench", Text = "Bench" } }, "Value", "Text"); ViewData["Projects"] = new SelectList(_context.Projects.OrderBy(p => p.ProjectName), "Id", "ProjectName"); ViewData["NewForecast"] = new Forecast { CreatedDate = DateTime.Now, EmployeeId = forecastWeek.EmployeeId, ForecastType = "Project", ForecastWeekId = forecastWeek.Id, ModifiedDate = DateTime.Now, Hours = 0 }; ViewData["Total"] = forecastWeek.HoursAll; }
public async Task <IActionResult> Edit(List <Forecast> forecasts) { if (ModelState.IsValid) { try { double pro = 0; double vac = 0; double sic = 0; double tra = 0; double ben = 0; foreach (var item in forecasts) { switch (item.LeaveName) { case "Vacation": vac += item.Hours; break; case "Sickness": sic += item.Hours; break; case "Training": tra += item.Hours; break; case "Bench": ben += item.Hours; break; default: pro += item.Hours; break; } _context.Update(item); } ForecastWeek fw = await _context.ForecastWeeks.FindAsync(forecasts[0].ForecastWeekId); fw.ProjectHours = pro; fw.VacationHours = vac; fw.SicknessHours = sic; fw.TrainingHours = tra; fw.BenchHours = ben; fw.HoursAll = pro + vac + sic + tra + ben; _context.Update(fw); await _context.SaveChangesAsync(); TempData["Toast"] = Toasts.Saved; return(RedirectToAction("Edit")); } catch (DbUpdateConcurrencyException) { throw; } } return(View(forecasts)); }
public async Task <IActionResult> FixThisWeek(int fwId) { ForecastWeek fw = await _context.ForecastWeeks.FindAsync(fwId); List <ForecastWeek> fWeeks = await _context.ForecastWeeks .Where(f => f.WeekStart == fw.WeekStart) .ToListAsync(); int maxWeekId = _context.ForecastWeeks.Max(f => f.Id); foreach (int id in _employeeIds) { if (!fWeeks.Any(f => f.EmployeeId == id)) { double hA = 40; List <WorkDay> workdays = await _context.WorkDays .Where(w => w.WorkDayDate >= fw.WeekStart && w.WorkDayDate <= fw.WeekStart.AddDays(7)) .ToListAsync(); if (workdays.Count > 0) { foreach (var item in workdays) { if (item.IsHoliday) { hA -= 8; } else { hA += 8; } } } maxWeekId++; ForecastWeek newFW = new ForecastWeek { BenchHours = 0, CreatedDate = DateTime.Now, EmployeeId = id, HoursAll = 0, HoursAvailable = hA, ModifiedDate = DateTime.Now, ProjectHours = 0, SicknessHours = 0, TrainingHours = 0, VacationHours = 0, WeekNumber = fw.WeekNumber, WeekStart = fw.WeekStart, Id = maxWeekId }; await _context.ForecastWeeks.AddAsync(newFW); } } await _context.SaveChangesAsync(); return(RedirectToAction("Index")); }
public async Task <string> DeleteForecast(int id) { if (id != 0) { Forecast fc = await _context.Forecast.FindAsync(id); ForecastWeek fw = await _context.ForecastWeeks.FindAsync(fc.ForecastWeekId); switch (fc.ForecastType) { case "Vacation": fw.VacationHours -= fc.Hours; break; case "Sickness": fw.SicknessHours -= fc.Hours; break; case "Training": fw.TrainingHours -= fc.Hours; break; case "Bench": fw.BenchHours -= fc.Hours; break; default: fw.ProjectHours -= fc.Hours; break; } fw.HoursAll = fw.VacationHours + fw.SicknessHours + fw.TrainingHours + fw.BenchHours + fw.ProjectHours; _context.Update(fw); _context.Remove(fc); await _context.SaveChangesAsync(); } return(null); }
public async Task <string> AddForecast( string fcType, int?fcProjectID, int?fcForecastWeekID, int?fcEmployeeID, double fcHours, string fcComment) { // if anything important is missing, do nothing if (string.IsNullOrEmpty(fcType) || fcProjectID == null || fcForecastWeekID == null || fcEmployeeID == null) { return(null); } Forecast newFC = new Forecast { Comment = fcComment, CreatedDate = DateTime.Now, EmployeeId = fcEmployeeID.Value, ForecastType = fcType, ForecastWeekId = fcForecastWeekID.Value, Hours = fcHours, Id = _context.Forecast.Max(f => f.Id) + 1, LeaveName = fcType == "Project" ? null : fcType, ModifiedDate = DateTime.Now, ProjectID = fcProjectID }; ForecastWeek fw = await _context.ForecastWeeks.FindAsync(fcForecastWeekID); switch (fcType) { case "Vacation": fw.VacationHours += fcHours; break; case "Sickness": fw.SicknessHours += fcHours; break; case "Training": fw.TrainingHours += fcHours; break; case "Bench": fw.BenchHours += fcHours; break; default: fw.ProjectHours += fcHours; break; } fw.HoursAll = fw.VacationHours + fw.SicknessHours + fw.TrainingHours + fw.BenchHours + fw.ProjectHours; _context.Update(fw); await _context.Forecast.AddAsync(newFC); await _context.SaveChangesAsync(); return(null); }
public async Task <IActionResult> GenerateWeeks() { int plusWeeks = 6; int.TryParse(_context.AppSettings .FirstOrDefault(s => s.SettingName == "Forecast - Generate Weeks") .SettingValue, out plusWeeks); int addedMaxWeek = Globals.GetCurrentWeekNumber() + plusWeeks; int maxWeekId = _context.ForecastWeeks.Max(f => f.Id); // if there are forecast weeks in the year if (_context.ForecastWeeks.Any(f => f.WeekStart.Year == DateTime.Today.Year)) { int lastWeekNo = _context.ForecastWeeks .Where(f => f.WeekStart.Year == DateTime.Today.Year) .Max(f => f.WeekNumber); DateTime lastWeekStart = _context.ForecastWeeks .Where(f => f.WeekStart.Year == DateTime.Today.Year && f.WeekNumber == lastWeekNo) .FirstOrDefault() .WeekStart; // it there are forecast weeks missing if (lastWeekNo < addedMaxWeek) { while (lastWeekNo < addedMaxWeek) { if (lastWeekNo > 52) { lastWeekNo = 1; } lastWeekStart = lastWeekStart.AddDays(7); lastWeekNo++; double hA = 40; List <WorkDay> workdays = await _context.WorkDays .Where(w => w.WorkDayDate >= lastWeekStart && w.WorkDayDate <= lastWeekStart.AddDays(7)) .ToListAsync(); if (workdays.Count > 0) { foreach (var item in workdays) { if (item.IsHoliday) { hA -= 8; } else { hA += 8; } } } foreach (int id in _employeeIds) { maxWeekId++; ForecastWeek newFW = new ForecastWeek { BenchHours = 0, CreatedDate = DateTime.Now, EmployeeId = id, HoursAll = 0, HoursAvailable = hA, ModifiedDate = DateTime.Now, ProjectHours = 0, SicknessHours = 0, TrainingHours = 0, VacationHours = 0, WeekNumber = lastWeekNo, WeekStart = lastWeekStart, Id = maxWeekId }; await _context.ForecastWeeks.AddAsync(newFW); } await _context.SaveChangesAsync(); } } } else { // this not covers if there were records last year, but missing some weeks (should not happen ever anyway) int lastWeekNo = 1; DateTime lastWeekStart = new DateTime(DateTime.Today.Year, 1, 1) .AddDays(-(int)new DateTime(DateTime.Today.Year, 1, 1).DayOfWeek + (int)DayOfWeek.Monday); while (lastWeekNo < addedMaxWeek) { if (lastWeekNo > 52) { lastWeekNo = 1; } lastWeekStart = lastWeekStart.AddDays(7); lastWeekNo++; double hA = 40; List <WorkDay> workdays = await _context.WorkDays .Where(w => w.WorkDayDate >= lastWeekStart && w.WorkDayDate <= lastWeekStart.AddDays(7)) .ToListAsync(); if (workdays.Count > 0) { foreach (var item in workdays) { if (item.IsHoliday) { hA -= 8; } else { hA += 8; } } } foreach (int id in _employeeIds) { maxWeekId++; ForecastWeek newFW = new ForecastWeek { BenchHours = 0, CreatedDate = DateTime.Now, EmployeeId = id, HoursAll = 0, HoursAvailable = hA, ModifiedDate = DateTime.Now, ProjectHours = 0, SicknessHours = 0, TrainingHours = 0, VacationHours = 0, WeekNumber = lastWeekNo, WeekStart = lastWeekStart, Id = maxWeekId }; await _context.ForecastWeeks.AddAsync(newFW); } await _context.SaveChangesAsync(); } } return(RedirectToAction("Index")); }