コード例 #1
0
        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 }));
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }