public ResponseMessageDTO UpdateTraining(UpdateTrainingInputDTO updateTrainingInput) { try { if (updateTrainingInput.TrainingID <= 0) { return(new ResponseMessageDTO(false, L("UpdateTraining_Fail"))); } else { var training = _trainingRepository.Get(updateTrainingInput.TrainingID); if (training.StatusId == _trainingStatusRepository.GetTrainingStatusIdByName(TrainingStatus.CANCELED) || training.StatusId == _trainingStatusRepository.GetTrainingStatusIdByName(TrainingStatus.COMPLETED)) { //training already canceled or completed -> cant update return(new ResponseMessageDTO(false, L("UpdateTraining_CancelOrCompleteFail"))); } else if (training.StatusId == _trainingStatusRepository.GetTrainingStatusIdByName(TrainingStatus.ONGOING)) { //training already on going -> can update end date, trainees assigned, trainers assigned //modules arrangement int[] arrayOldTraineesIDAssigned = training.ArrayOfAssignedTrainees; int[] arrayNewTraineesIDAssigned = JsonConvert.DeserializeObject <int[]>(updateTrainingInput.AssignedTrainees); #region Remove training targeted from old trainees assigned List <int> listOldTraineesIDAssigned = _compareAppService.GetMissingIntegers(arrayNewTraineesIDAssigned, arrayOldTraineesIDAssigned).ToList(); foreach (int oldTraineeIDAssigned in listOldTraineesIDAssigned) { var oldTraineeAssigned = _traineeRepository.Get(oldTraineeIDAssigned); List <int> listTrainingsTargeted = oldTraineeAssigned.ArrayOfTargetedTraining.ToList(); var itemToRemove = listTrainingsTargeted.SingleOrDefault(r => r == updateTrainingInput.TrainingID); if (itemToRemove != 0) { //Remove training from trainings targeted of this trainee listTrainingsTargeted.Remove(itemToRemove); } oldTraineeAssigned.ArrayOfTargetedTraining = listTrainingsTargeted.ToArray(); var updateOldTrainee = _traineeRepository.Update(oldTraineeAssigned); if (updateOldTrainee.Id == 0) { return(new ResponseMessageDTO(false, L("UpdateTraining_FailError"))); } } #endregion #region Add training targeted to new trainees assigned List <int> listNewTraineesIDAssigned = _compareAppService.GetMissingIntegers(arrayOldTraineesIDAssigned, arrayNewTraineesIDAssigned).ToList(); foreach (int newTraineeIDAssigned in listNewTraineesIDAssigned) { var newTraineeAssigned = _traineeRepository.Get(newTraineeIDAssigned); List <int> listTrainingsTargeted = newTraineeAssigned.ArrayOfTargetedTraining.ToList(); //Add training to trainings targeted of this trainee listTrainingsTargeted.Add(updateTrainingInput.TrainingID); listTrainingsTargeted = listTrainingsTargeted.Distinct().ToList(); newTraineeAssigned.ArrayOfTargetedTraining = listTrainingsTargeted.ToArray(); var updateNewTrainee = _traineeRepository.Update(newTraineeAssigned); if (updateNewTrainee.Id == 0) { return(new ResponseMessageDTO(false, L("UpdateTraining_FailError"))); } } #endregion //Update training information training.EndDate = DateCalculator.StringToDate(updateTrainingInput.EndDate); training.TotalDuration = updateTrainingInput.TotalDuration; training.ArrayOfAssignedTrainees = JsonConvert.DeserializeObject <int[]>(updateTrainingInput.AssignedTrainees); training.ArrayOfAssignedTrainers = JsonConvert.DeserializeObject <int[]>(updateTrainingInput.AssignedTrainers); training.ModuleArrangement = updateTrainingInput.ModulesArrangement; var updateTraining = _trainingRepository.Update(training); } else { //training just planed -> can update start date, end date, trainees assigned //trainers assigned, modules arrangement if (DateTime.Now >= DateCalculator.StringToDate(updateTrainingInput.StartDate)) { //The StartDate is over -> cant update return(new ResponseMessageDTO(false, L("UpdateTraining_StartEndDate"))); } else { int[] arrayOldTraineesIDAssigned = training.ArrayOfAssignedTrainees; int[] arrayNewTraineesIDAssigned = JsonConvert.DeserializeObject <int[]>(updateTrainingInput.AssignedTrainees); #region Remove training targeted from old trainees assigned List <int> listOldTraineesIDAssigned = _compareAppService.GetMissingIntegers(arrayNewTraineesIDAssigned, arrayOldTraineesIDAssigned).ToList(); foreach (int oldTraineeIDAssigned in listOldTraineesIDAssigned) { var oldTraineeAssigned = _traineeRepository.Get(oldTraineeIDAssigned); List <int> listTrainingsTargeted = oldTraineeAssigned.ArrayOfTargetedTraining.ToList(); var itemToRemove = listTrainingsTargeted.SingleOrDefault(r => r == updateTrainingInput.TrainingID); if (itemToRemove != 0) { //Remove training from trainings targeted of this trainee listTrainingsTargeted.Remove(itemToRemove); } oldTraineeAssigned.ArrayOfTargetedTraining = listTrainingsTargeted.ToArray(); var updateOldTrainee = _traineeRepository.Update(oldTraineeAssigned); if (updateOldTrainee.Id == 0) { return(new ResponseMessageDTO(false, L("UpdateTraining_FailError"))); } } #endregion #region Add training targeted to new trainees assigned List <int> listNewTraineesIDAssigned = _compareAppService.GetMissingIntegers(arrayOldTraineesIDAssigned, arrayNewTraineesIDAssigned).ToList(); foreach (int newTraineeIDAssigned in listNewTraineesIDAssigned) { var newTraineeAssigned = _traineeRepository.Get(newTraineeIDAssigned); List <int> listTrainingsTargeted = newTraineeAssigned.ArrayOfTargetedTraining.ToList(); //Add training to trainings targeted of this trainee listTrainingsTargeted.Add(updateTrainingInput.TrainingID); listTrainingsTargeted = listTrainingsTargeted.Distinct().ToList(); newTraineeAssigned.ArrayOfTargetedTraining = listTrainingsTargeted.ToArray(); var updateNewTrainee = _traineeRepository.Update(newTraineeAssigned); if (updateNewTrainee.Id == 0) { return(new ResponseMessageDTO(false, L("CreateTraining_Fail") + L("UnknownError"))); } } #endregion //Update training information training.StartDate = DateCalculator.StringToDate(updateTrainingInput.StartDate); training.EndDate = DateCalculator.StringToDate(updateTrainingInput.EndDate); training.TotalDuration = updateTrainingInput.TotalDuration; training.ArrayOfAssignedTrainees = JsonConvert.DeserializeObject <int[]>(updateTrainingInput.AssignedTrainees); training.ArrayOfAssignedTrainers = JsonConvert.DeserializeObject <int[]>(updateTrainingInput.AssignedTrainers); training.ModuleArrangement = updateTrainingInput.ModulesArrangement; var updateTraining = _trainingRepository.Update(training); } } return(new ResponseMessageDTO(true, L("UpdateTraining_Success"))); } } catch { return(new ResponseMessageDTO(false, L("CreateTraining_Fail") + L("UnknownError"))); } }
public ResponseMessageDTO UpdateTraining(UpdateTrainingInputDTO updateTrainingInput) { return(_trainingAppService.UpdateTraining(updateTrainingInput)); }