예제 #1
0
        public async Task <IActionResult> UpdateBatchTargetAsync(int id, [FromBody] TargetUpdateViewModel target)
        {
            try
            {
                if (target == null)
                {
                    return(NoContent());
                }

                var qry = _queryFactory.CreateBatchesQuery();
                var dto = await qry.ExecuteAsync(id).ConfigureAwait(false);

                if (dto == null)
                {
                    return(NotFound());
                }

                if (dto.Target == null)
                {
                    // create new target and link to this batch
                    var newCmd = _commandsFactory.CreateTargetsCommand();
                    dto.Target = await newCmd.AddAsync(new TargetDto()).ConfigureAwait(false);

                    var batchCmd = _commandsFactory.CreateBatchesCommand();
                    dto = await batchCmd.UpdateAsync(dto).ConfigureAwait(false);
                }

                dto.Target.EndSugar   = target.EndingSugar;
                dto.Target.pH         = target.pH;
                dto.Target.StartSugar = target.StartingSugar;
                dto.Target.TA         = target.TA;
                dto.Target.Temp       = target.FermentationTemp;

                if (target.EndSugarUOM.HasValue)
                {
                    dto.Target.EndSugarUom = new UnitOfMeasure {
                        Id = target.EndSugarUOM.Value
                    }
                }
                ;
                if (target.StartSugarUOM.HasValue)
                {
                    dto.Target.StartSugarUom = new UnitOfMeasure {
                        Id = target.StartSugarUOM.Value
                    }
                }
                ;
                if (target.TempUOM.HasValue)
                {
                    dto.Target.TempUom = new UnitOfMeasure {
                        Id = target.TempUOM.Value
                    }
                }
                ;

                var cmd       = _commandsFactory.CreateTargetsCommand();
                var targetDto = await cmd.UpdateAsync(dto.Target).ConfigureAwait(false);

                var model = _modelFactory.CreateTargetViewModel(targetDto);

                return(Ok(model));
            }
            catch (Exception)
            {
                return(StatusCode(500));

                throw;
            }
        }
예제 #2
0
        public async Task <IActionResult> UpdateRecipe(RecipeViewModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var qry = _recipeQueryFactory.CreateRecipesQuery();
            var dto = await qry.ExecuteAsync(model.Id).ConfigureAwait(false);

            dto.Title         = model.Title;
            dto.Variety.Id    = model.Variety.Id;
            dto.Yeast.Id      = model.Yeast.Id ?? 0;
            dto.Description   = model.Description;
            dto.Enabled       = model.Enabled;
            dto.Hits          = model.Hits;
            dto.Ingredients   = model.Ingredients;
            dto.Instructions  = model.Instructions;
            dto.NeedsApproved = model.NeedsApproved;

            if (model.Target.HasTargetData())
            {
                var tCmd = _journalCommandFactory.CreateTargetsCommand();

                if (dto.Target?.Id.HasValue == true)
                {
                    // update target
                    var tQry = _journalQueryFactory.CreateTargetsQuery();
                    var t    = await tQry.ExecuteAsync(dto.Target.Id.Value).ConfigureAwait(false);

                    t.EndSugar   = model.Target.EndingSugar;
                    t.pH         = model.Target.pH;
                    t.StartSugar = model.Target.StartingSugar;
                    t.TA         = model.Target.TA;
                    t.Temp       = model.Target.FermentationTemp;

                    if (model.Target.StartSugarUOM != null)
                    {
                        t.StartSugarUom = new UnitOfMeasure()
                        {
                            Id = model.Target.StartSugarUOM.Value
                        }
                    }
                    ;

                    if (model.Target.TempUOM != null)
                    {
                        t.TempUom = new UnitOfMeasure()
                        {
                            Id = model.Target.TempUOM.Value
                        }
                    }
                    ;

                    if (model.Target.EndSugarUOM != null)
                    {
                        t.EndSugarUom = new UnitOfMeasure()
                        {
                            Id = model.Target.EndSugarUOM.Value
                        }
                    }
                    ;

                    var result = await tCmd.UpdateAsync(t).ConfigureAwait(false);

                    dto.Target = result;
                }
                else
                {
                    // add target
                    var t = new TargetDto
                    {
                        EndSugar      = model.Target.EndingSugar,
                        pH            = model.Target.pH,
                        StartSugar    = model.Target.StartingSugar,
                        TA            = model.Target.TA,
                        Temp          = model.Target.FermentationTemp,
                        StartSugarUom = new UnitOfMeasure(),
                        TempUom       = new UnitOfMeasure(),
                        EndSugarUom   = new UnitOfMeasure()
                    };

                    if (model.Target.StartSugarUOM != null)
                    {
                        t.StartSugarUom.Id = model.Target.StartSugarUOM.Value;
                    }

                    if (model.Target.TempUOM != null)
                    {
                        t.TempUom.Id = model.Target.TempUOM.Value;
                    }

                    if (model.Target.EndSugarUOM != null)
                    {
                        t.EndSugarUom.Id = model.Target.EndSugarUOM.Value;
                    }

                    var result = await tCmd.AddAsync(t).ConfigureAwait(false);

                    dto.Target = result;
                }
            }

            var cmd = _recipeCommandFactory.CreateRecipesCommand();
            await cmd.UpdateAsync(dto).ConfigureAwait(false);

            return(RedirectToAction("Index", "Admin", new { id = "recipes" }));
        }
        public async Task <IActionResult> Add(BatchViewModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            ViewData["Title"]    = _localizer["PageTitle"];
            ViewData["PageDesc"] = _localizer["PageDesc"];

            var batchTempQuery = _journalQueryFactory.CreateBatchTempUOMQuery();
            var uomTempList    = await batchTempQuery.ExecuteAsync().ConfigureAwait(false);

            var batchSugarQuery = _journalQueryFactory.CreateBatchSugarUOMQuery();
            var uomSugarList    = await batchSugarQuery.ExecuteAsync().ConfigureAwait(false);

            var batchVolumeQuery = _journalQueryFactory.CreateBatchVolumeUOMQuery();
            var uomVolumeList    = await batchVolumeQuery.ExecuteAsync().ConfigureAwait(false);

            var getCategoriesQuery = _recipeQueryFactory.CreateCategoriesQuery();
            var cList = await getCategoriesQuery.ExecuteAsync().ConfigureAwait(false);

            var varietiesQuery = _recipeQueryFactory.CreateVarietiesQuery();
            var vList          = await varietiesQuery.ExecuteAsync().ConfigureAwait(false);

            var getYeastQuery = _yeastQueryFactory.CreateYeastsQuery();
            var yList         = await getYeastQuery.ExecuteAsync().ConfigureAwait(false);

            // must be logged in to continue
            var submittedBy = await UserManagerAgent.GetUserAsync(User).ConfigureAwait(false);

            if (submittedBy == null)
            {
                var addModel = _modelFactory.CreateBatchViewModel(null, null, vList, cList, yList, null, uomVolumeList, uomSugarList, uomTempList);
                Warning(_localizer["AddGeneralError"], false);
                return(View(addModel));
            }

            // using model validation attributes, if model state says errors do nothing
            if (!ModelState.IsValid)
            {
                var addModel = _modelFactory.CreateBatchViewModel(null, null, vList, cList, yList, null, uomVolumeList, uomSugarList, uomTempList);
                Warning(_localizer["AddGeneralError"], true);
                return(View(addModel));
            }

            TargetDto targetDto;

            if (model.Target.Id.HasValue)
            {
                var targetQuery = _journalQueryFactory.CreateTargetsQuery();
                targetDto = targetQuery.Execute(model.Target.Id.Value);
            }
            else
            {
                targetDto = new TargetDto();
            }

            if (model.Target.HasTargetData())
            {
                // convert add model to batch and target dto
                targetDto.Temp       = model.Target.FermentationTemp;
                targetDto.pH         = model.Target.pH;
                targetDto.TA         = model.Target.TA;
                targetDto.StartSugar = model.Target.StartingSugar;
                targetDto.EndSugar   = model.Target.EndingSugar;

                if (model.Target.TempUOM.HasValue)
                {
                    targetDto.TempUom = new UnitOfMeasure {
                        Id = model.Target.TempUOM.Value
                    }
                }
                ;
                if (model.Target.StartSugarUOM.HasValue)
                {
                    targetDto.StartSugarUom = new UnitOfMeasure {
                        Id = model.Target.StartSugarUOM.Value
                    }
                }
                ;
                if (model.Target.EndSugarUOM.HasValue)
                {
                    targetDto.EndSugarUom = new UnitOfMeasure {
                        Id = model.Target.EndSugarUOM.Value
                    }
                }
                ;

                var updateTargetCommand = _journalCommandFactory.CreateTargetsCommand();
                if (targetDto.Id.HasValue)
                {
                    targetDto = await updateTargetCommand.UpdateAsync(targetDto).ConfigureAwait(false);
                }
                else
                {
                    targetDto = await updateTargetCommand.AddAsync(targetDto).ConfigureAwait(false);
                }
            }

            var batchDto = new BatchDto
            {
                Description = model.Description,
                Vintage     = model.Vintage,
                Volume      = model.Volume,
                Complete    = false,
                SubmittedBy = submittedBy?.Id,
                Title       = model.Title,
                Yeast       = yList.FirstOrDefault(y => y.Id == model.YeastId.Value),
                RecipeId    = model.RecipeId,
                Target      = targetDto,
                VolumeUom   = new UnitOfMeasure {
                    Id = model.VolumeUOM.Value
                },
                Variety = new Code {
                    Id = model.VarietyId.Value
                }
            };

            var updateBatchCommand = _journalCommandFactory.CreateBatchesCommand();
            await updateBatchCommand.AddAsync(batchDto).ConfigureAwait(false);

            // tell user good job and clear or go to thank you page
            ModelState.Clear();
            var addBatchModel = _modelFactory.CreateBatchViewModel(null, null, vList, cList, yList, null, uomVolumeList, uomSugarList, uomTempList);

            Success(_localizer["AddSuccess"], true);

            // validate with User (ApplicationUser)
            var appUser = await UserManagerAgent.GetUserAsync(User).ConfigureAwait(false);

            addBatchModel.BatchJwt = await CreateJwtTokenAsync(appUser, 15).ConfigureAwait(false);

            return(View(addBatchModel));
        }