public async Task <IActionResult> Add()
        {
            ViewData["Title"]    = _localizer["PageTitleAdd"];
            ViewData["PageDesc"] = _localizer["PageDescAdd"];

            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);

            var addBatchModel = _modelFactory.CreateBatchViewModel(null, null, vList, cList, yList, null, uomVolumeList, uomSugarList, uomTempList);

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

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

            return(View(addBatchModel));
        }
예제 #2
0
        /// <summary>
        /// Opening Page for Entering New Recipes
        /// </summary>
        public async Task <IActionResult> Add()
        {
            ViewData["Title"]    = _localizer["PageTitleAdd"];
            ViewData["PageDesc"] = _localizer["PageDescAdd"];

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

            var getVarietiesQuery = _queryFactory.CreateVarietiesQuery();
            var vList             = await getVarietiesQuery.ExecuteAsync().ConfigureAwait(false);

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

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

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


            var addRecipeModel = _modelFactory.CreateAddRecipeModel(cList, vList, yList, uomSugarList, uomTempList);

            addRecipeModel.User = await UserManagerAgent.GetUserAsync(User).ConfigureAwait(false);

            return(View(addRecipeModel));
        }
        public async Task <IActionResult> Index()
        {
            ViewData["Title"]    = _localizer["PageTitle"];
            ViewData["PageDesc"] = _localizer["PageDesc"];

            var submittedBy = await UserManagerAgent.GetUserAsync(User).ConfigureAwait(false);

            var model = _modelFactory.CreateContactModel();

            model.User = submittedBy;
            return(View(model));
        }
        public async Task <IActionResult> EditBatch(int id)
        {
            ViewData["Title"]    = _localizer["PageTitleDetails"];
            ViewData["PageDesc"] = _localizer["PageDescDetails"];

            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 cultureQuery = _maloCultureQueryFactory.CreateMaloCulturesQuery();
            var cultureList  = await cultureQuery.ExecuteAsync().ConfigureAwait(false);

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

            var batchQuery = _journalQueryFactory.CreateBatchesQuery();
            var batchDto   = await batchQuery.ExecuteAsync(id).ConfigureAwait(false);

            var entriesQuery = _journalQueryFactory.CreateBatchEntriesQuery();
            var entriesDto   = await entriesQuery.ExecuteByFKAsync(id).ConfigureAwait(true);

            var batchEntriesDto = entriesDto
                                  .OrderByDescending(e => e.ActionDateTime)
                                  .ThenByDescending(e => e.EntryDateTime).ToList();

            var model = _modelFactory.CreateBatchViewModel(batchDto, batchEntriesDto, vList, cList, yList, cultureList, uomVolumeList, uomSugarList, uomTempList);

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

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

            return(View("UpdateBatch", model));
        }
        public async Task <IActionResult> AddFromRecipe(int?recipeId, int?yeastId, int?varietyId, int?targetId)
        {
            ViewData["Title"]    = _localizer["PageTitleAdd"];
            ViewData["PageDesc"] = _localizer["PageDescAdd"];

            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);

            BatchDto batch = new BatchDto();

            if (targetId.HasValue)
            {
                var getTargetsQuery = _journalQueryFactory.CreateTargetsQuery();
                batch.Target = getTargetsQuery.Execute(targetId.Value);
            }

            var addBatchModel = _modelFactory.CreateBatchViewModel(batch, null, vList, cList, yList, null, uomVolumeList, uomSugarList, uomTempList);

            addBatchModel.VarietyId = varietyId;
            addBatchModel.RecipeId  = recipeId;
            addBatchModel.YeastId   = yeastId;

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

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

            return(View("Add", addBatchModel));
        }
        /// <summary>
        /// Main Landing Page for Journals
        /// </summary>
        public async Task <IActionResult> Index()
        {
            ViewData["Title"]    = _localizer["PageTitle"];
            ViewData["PageDesc"] = _localizer["PageDesc"];

            var submittedBy = await UserManagerAgent.GetUserAsync(User).ConfigureAwait(false);

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

            var entriesQuery = _journalQueryFactory.CreateBatchEntriesQuery();

            var getBatchesQuery = _journalQueryFactory.CreateBatchesQuery();
            var batchesDto      = await getBatchesQuery.ExecuteByUserAsync(submittedBy.Id).ConfigureAwait(false);

            foreach (var b in batchesDto)
            {
                var entriesDto = await entriesQuery.ExecuteByFKAsync(b.Id.Value).ConfigureAwait(true);

                b.Entries.AddRange(entriesDto.OrderByDescending(e => e.ActionDateTime).ThenByDescending(e => e.EntryDateTime));
                b.Variety.Literal = vList.FirstOrDefault(v => v.Id == b.Variety.Id).Literal;
            }

            var journalModel = _modelFactory.CreateJournalModel();

            var batchItemsModel = _modelFactory.BuildBatchListItemModels(batchesDto);

            journalModel.Batches = batchItemsModel
                                   .OrderBy(r => r.BatchComplete)
                                   .ThenByDescending(r => r.Vintage)
                                   .ThenBy(r => r.Variety);

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

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

            return(View(journalModel));
        }
예제 #7
0
        public async Task <IActionResult> Add(AddRecipeViewModel model)
        {
            ViewData["Title"]    = _localizer["PageTitle"];
            ViewData["PageDesc"] = _localizer["PageDesc"];

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

            var getVarietiesQuery = _queryFactory.CreateVarietiesQuery();
            var vList             = await getVarietiesQuery.ExecuteAsync().ConfigureAwait(false);

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

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

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

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

            if (submittedBy == null)
            {
                var addRecipeModel = _modelFactory.CreateAddRecipeModel(cList, vList, yList, uomSugarList, uomTempList, model);
                Warning(_localizer["NoLogIn"], false);
                return(View(addRecipeModel));
            }

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

            ICode variety = null;

            if (int.TryParse(model?.VarietyId, out int varietyId))
            {
                variety = vList.FirstOrDefault(c => c.Id == varietyId);
            }

            ICode category = null;

            if (variety != null && variety.ParentId.HasValue)
            {
                category = cList.FirstOrDefault(c => c.Id == variety.ParentId.Value);
            }

            YeastDto yeast = null;

            if (int.TryParse(model?.YeastId, out int yeastId))
            {
                yeast = yList.FirstOrDefault(y => y.Id == yeastId);
            }

            Business.Journal.Dto.TargetDto target = null;

            if (model.Target.HasTargetData())
            {
                target = new Business.Journal.Dto.TargetDto
                {
                    EndSugar   = model.Target.EndingSugar,
                    pH         = model.Target.pH,
                    StartSugar = model.Target.StartingSugar,
                    TA         = model.Target.TA,
                    Temp       = model.Target.FermentationTemp,
                };

                if (model.Target.StartSugarUOM.HasValue)
                {
                    target.StartSugarUom = uomSugarList.FirstOrDefault(u => u.Id == model.Target.StartSugarUOM.Value);
                }
                if (model.Target.EndSugarUOM.HasValue)
                {
                    target.EndSugarUom = uomSugarList.FirstOrDefault(u => u.Id == model.Target.EndSugarUOM.Value);
                }
                if (model.Target.TempUOM.HasValue)
                {
                    target.TempUom = uomTempList.FirstOrDefault(u => u.Id == model.Target.TempUOM.Value);
                }
            }
            // convert add model to recipe dto
            var recipeDto = new Business.Recipe.Dto.RecipeDto
            {
                Description   = model.Description,
                Enabled       = false,
                Hits          = 0,
                Ingredients   = model.Ingredients,
                Instructions  = model.Instructions,
                NeedsApproved = true,
                Rating        = null,
                SubmittedBy   = submittedBy.Id,
                Target        = target,
                Title         = model.Title,
                Yeast         = yeast,
                Variety       = variety
            };

            //recipeDto.Id = 1;  // for testing only
            var updateRecipesCommand = _commandsFactory.CreateRecipesCommand();

            recipeDto = await updateRecipesCommand.AddAsync(recipeDto).ConfigureAwait(false);


            // process uploaded files
            if (model.Images != null)
            {
                var           updateImageCommand = _commandsFactory.CreateImageCommand();
                long          maxFileSizeBytes   = 512000;
                List <string> allowedExtensions  = new List <string> {
                    ".jpg", ".jpeg", ".bmp", ".png", ".gif"
                };
                int maxUploads  = 4;
                int uploadCount = 1;

                foreach (FormFile file in model.Images)
                {
                    // Max File Size per Image: 500 KB
                    if (file.Length > maxFileSizeBytes)
                    {
                        continue;
                    }
                    // Allowed Image Extensions: .jpg | .gif | .bmp | .jpeg | .png ONLY
                    var ext = Path.GetExtension(file.FileName);
                    if (!allowedExtensions.Any(e => e.Equals(ext, StringComparison.OrdinalIgnoreCase)))
                    {
                        continue;
                    }
                    // Pictures Max 4
                    if (uploadCount > maxUploads)
                    {
                        break;
                    }

                    using MemoryStream ms = new MemoryStream();
                    file.OpenReadStream().CopyTo(ms);
                    var imageData = await ResizeImage(ms.ToArray(), 360, 480).ConfigureAwait(false);

                    var thumbData = await ResizeImage(ms.ToArray(), 100, 150).ConfigureAwait(false);

                    var imageDto = _dtoFactory.CreateNewImageFile(recipeDto.Id, file.FileName, file.Name, imageData, thumbData, file.Length, file.ContentType);
                    await updateImageCommand.AddAsync(imageDto).ConfigureAwait(false);

                    uploadCount++;
                }
            }

            var subjectLine = "There is a new recipe is in the approval queue.";
            var bodyContent = "A new recipe has been submitted and needs approved.";

            // notify admin that new recipe is in the approval queue
            await _emailAgent.SendEmailAsync(_appSettings.SMTP.FromEmail, _appSettings.SMTP.FromEmail, _appSettings.SMTP.AdminEmail,
                                             subjectLine, bodyContent, false, null).ConfigureAwait(false);

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

            addNewRecipeModel.User = submittedBy;

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

            return(View(addNewRecipeModel));
        }
        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));
        }