public bool CopyTrainingWeek(string currentUserId, CopyTrainingWeek copyTrainingWeek, out TrainingWeek newTrainingWeek) { newTrainingWeek = null; if (string.IsNullOrWhiteSpace(copyTrainingWeek.UserId) || copyTrainingWeek.OriginYear == 0 || copyTrainingWeek.OriginWeekOfYear == 0 || copyTrainingWeek.Year == 0 || copyTrainingWeek.WeekOfYear == 0 || currentUserId != copyTrainingWeek.UserId) return false; bool result = false; //Verify valid week of year if (copyTrainingWeek.WeekOfYear > 0 && copyTrainingWeek.WeekOfYear <= 52 && !(copyTrainingWeek.Year == copyTrainingWeek.OriginYear && copyTrainingWeek.WeekOfYear == copyTrainingWeek.OriginWeekOfYear)) { //check if new trainingWeek exist var trainingWeekScenario = new TrainingWeekScenario() { ManageTrainingDay = false }; var trainingWeekKey = new TrainingWeekKey() { UserId = copyTrainingWeek.UserId, Year = copyTrainingWeek.Year, WeekOfYear = copyTrainingWeek.WeekOfYear }; var trainingWeek = GetTrainingWeek(trainingWeekKey, trainingWeekScenario); if (trainingWeek != null) throw new ErrorException(string.Format(Translation.P0_ALREADY_EXIST, Translation.TRAINING_WEEK)); // Check if origin training week exist trainingWeekScenario = new TrainingWeekScenario() { ManageTrainingDay = true, TrainingDayScenario = new TrainingDayScenario() { ManageExercise = true } }; trainingWeekKey = new TrainingWeekKey() { UserId = copyTrainingWeek.UserId, Year = copyTrainingWeek.OriginYear, WeekOfYear = copyTrainingWeek.OriginWeekOfYear }; trainingWeek = GetTrainingWeek(trainingWeekKey, trainingWeekScenario); if (trainingWeek == null) throw new ErrorException(string.Format(Translation.P0_NOT_EXIST, Translation.TRAINING_WEEK)); //Change ids of origin training week/exercise/day etc.. for new trainingweek ChangeIDForNewTrainingWeek(trainingWeek, copyTrainingWeek.OriginYear, copyTrainingWeek.OriginWeekOfYear, copyTrainingWeek.Year, copyTrainingWeek.WeekOfYear); // Create data in database (with update for Security existing old data in database) trainingWeek = UpdateTrainingWeek(trainingWeek, trainingWeekScenario); if (trainingWeek == null) { throw new ErrorException(string.Format(Translation.IMPOSSIBLE_TO_CREATE_P0, Translation.TRAINING_WEEK)); } else { result = true; newTrainingWeek = trainingWeek; } } return result; }
public bool CopyTrainingWeek(string currentUserId, CopyTrainingWeek copyTrainingWeek, out TrainingWeek newTrainingWeek) { bool result = false; BeginTransaction(); try { result = GetTrainingWeekManager().CopyTrainingWeek(currentUserId, copyTrainingWeek, out newTrainingWeek); CommitTransaction(); result = true; } catch (Exception exception) { _logger.LogCritical("Unable to copy training week", exception); RollbackTransaction(); throw exception; } finally { EndTransaction(); } return result; }
public IActionResult Copy(CopyTrainingWeekViewModel viewModel) { if (ModelState.IsValid) { ViewBag.UserUnit = GetUserUnit(viewModel.UserId); if(viewModel == null) return View(viewModel); try { var copyTrainingWeek = new CopyTrainingWeek() { UserId = viewModel.UserId, OriginYear = viewModel.OriginYear, OriginWeekOfYear = viewModel.OriginWeekOfYear, Year = viewModel.Year, WeekOfYear = viewModel.WeekOfYear }; TrainingWeek trainingWeek; if (!_trainingWeeksService.CopyTrainingWeek(SessionUserId, copyTrainingWeek, out trainingWeek)) return View(viewModel); return RedirectToAction("View", new { userId = trainingWeek.UserId, year = trainingWeek.Year, weekOfYear = trainingWeek.WeekOfYear }); } catch (ErrorException error) { ModelState.AddModelError(string.Empty, error.Message); return View(viewModel); } } return View(viewModel); }