public async Task <ActionResult> AssignMolecule(AssignMoleculeViewModel model, IList <AssignValueViewModel> assignValueViewModels) { var validationResult = new ValidationResultList(); model.AssignMolecules = assignValueViewModels; if (ModelState.IsValid) { try { if (assignValueViewModels == null || string.IsNullOrEmpty(model.EssentialOilId)) { Log.Error("AssignMolecule. An unexpected error occurred. Value is null."); throw new ArgumentNullException(Resources.Resources.Error_UnexpectedError); } // Delete all assigned molecules from database in order to update. validationResult = await _essentialOilMoleculeService.DeleteAssignedMoleculesAsync(model.EssentialOilId); // Insert assigned molecules if deletion was successful. if (!validationResult.HasErrors) { foreach (var assignValueViewModel in assignValueViewModels) { // Insert the assigned molecules in database. validationResult = await AssignMoleculeToEssentialOil(model, assignValueViewModel); } } } catch (Exception e) { Log.Error($"AssignMolecule. An unexpected error occurred while inserting or editing: {e}"); throw; } } // Show validation result, if validation error occurred while // inserting or if ModelState is invalid. if (validationResult.HasErrors || !ModelState.IsValid) { AddGeneralModelStateError(validationResult); AddValidationResultsToModelStateErrors(validationResult.Errors); // Set substances to display in list. var substances = await _substanceService.GetAllAsync(new SubstanceFilter()); model.Substances = substances; Log.Info("Show AssignMolecule"); return(View(nameof(AssignMolecule), model)); } Log.Info("Redirect to AssignEffect"); return(RedirectToAction(nameof(AssignEffect), new { id = model.EssentialOilId })); }
/// <summary> /// Gets the AssignMoleculeViewModel. /// </summary> /// <author>Anna Krebs</author> /// <param name="id"></param> /// <returns></returns> private async Task <AssignMoleculeViewModel> GetAssignMoleculeViewModel(string id) { var essentialOil = await _essentialOilService.GetByIdAsync(id); if (essentialOil == null) { Log.Error($"An unexpected error occurred while getting id. No entity with id {id} could be found."); throw new ArgumentNullException(string.Format(Resources.Resources.Error_NoEntityWithIdFound, id)); } // Get values from database. var molecules = await _moleculeService.GetAllAsync(new MoleculeFilter()); var substances = await _substanceService.GetAllAsync(new SubstanceFilter()); var essentialOilMolecules = await _essentialOilMoleculeService.GetAllAsync(new EssentialOilMoleculeFilter { EssentialOilId = id }); IList <AssignValueViewModel> assignValueViewModels = new List <AssignValueViewModel>(); // Create list of molecules for view. foreach (var molecule in molecules) { var assignValueViewModel = new AssignValueViewModel(molecule, null, null); foreach (var essentialOilMolecule in essentialOilMolecules) { // Map values from database to model. if (assignValueViewModel.AssignedValueId == essentialOilMolecule.MoleculeId) { assignValueViewModel.MoleculePercentage = essentialOilMolecule.MoleculePercentage; } } assignValueViewModels.Add(assignValueViewModel); } var model = new AssignMoleculeViewModel(essentialOil, null, assignValueViewModels, substances); Log.Info($"Get AssignMoleculeViewModel for essential oil with id {id}"); return(model); }
/// <summary> /// Inserts all assigned molecules for essential oil in database. /// </summary> /// <author>Anna Krebs</author> /// <param name="model"></param> /// <param name="assignValueViewModel"></param> /// <returns></returns> private async Task <ValidationResultList> AssignMoleculeToEssentialOil(AssignMoleculeViewModel model, AssignValueViewModel assignValueViewModel) { var validationResult = new ValidationResultList(); // Only assign, if MoleculePercentage was assigned. if (assignValueViewModel.MoleculePercentage.HasValue && assignValueViewModel.MoleculePercentage.Value > 0) { var essentialOilMolecule = new EssentialOilMolecule(); // Map view model to entity. essentialOilMolecule.EssentialOilId = model.EssentialOilId; essentialOilMolecule.MoleculeId = assignValueViewModel.AssignedValueId; essentialOilMolecule.MoleculePercentage = assignValueViewModel.MoleculePercentage.Value; validationResult = await _essentialOilMoleculeService.InsertAsync(essentialOilMolecule); Log.Info( $"Assign molecule with id {assignValueViewModel.AssignedValueId} to essential oil with id {model.EssentialOilId}"); } return(validationResult); }
/// <summary> /// Inserts all assigned molecules for effect in database. /// </summary> /// <author>Anna Krebs</author> /// <param name="model"></param> /// <param name="assignValueViewModel"></param> /// <returns></returns> private async Task <ValidationResultList> AssignMoleculeToEffect(AssignMoleculeViewModel model, AssignValueViewModel assignValueViewModel) { var validationResult = new ValidationResultList(); // Only assign, if EffectDegree was assigned. if (assignValueViewModel.EffectDegree > 0) { var effectMolecule = new EffectMolecule(); // Map view model to entity. effectMolecule.EffectId = model.EffectId; effectMolecule.MoleculeId = assignValueViewModel.AssignedValueId; effectMolecule.EffectDegree = assignValueViewModel.EffectDegree; validationResult = await _effectMoleculeService.InsertAsync(effectMolecule); Log.Info( $"Assign molecule with id {assignValueViewModel.AssignedValueId} to effect with id {model.EffectId}"); } return(validationResult); }