public IActionResult Create(CreatureDetailsModel model, IFormFile upload)
        {
            var creature = new Creature();

            if (!ModelState.IsValid)
            {
                model = GetCreatureModel(creature, model);
                return(View(model));
            }

            SaveCreatureData(creature, model, upload);

            return(RedirectToAction("Index", "Creature", new { Area = "Admin", Id = model.SubcategoryId }));
        }
        public IActionResult Create(Guid id)
        {
            var subcategory = _subcategoryRepository.GetSubcategory(id);

            var vm = new CreatureDetailsModel()
            {
                SubcategoryId         = subcategory.Id,
                SubcategoryCommonName = subcategory.CommonName,
                CategoryId            = subcategory.Category.Id,
                CategoryName          = subcategory.Category.Name,
            };

            vm = GetCreatureModel(null, vm);

            return(View(vm));
        }
        public async Task <IActionResult> Edit(CreatureDetailsModel model, IFormFile upload)
        {
            if (!model.Id.HasValue)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var creature = await _creatureRepository.GetCreatureAsync(model.Id.Value);

            if (!ModelState.IsValid)
            {
                model = GetCreatureModel(creature, model);
                return(View(model));
            }

            SaveCreatureData(creature, model, upload);

            return(RedirectToAction("Index", "Creature", new { Area = "Admin", Id = model.SubcategoryId }));
        }
Example #4
0
        private CreatureDetailsModel GetCreatureModel(Creature creature, CreatureDetailsModel vm)
        {
            vm.DifficultyItems         = _enumService.GetDifficulties();
            vm.ReefCompatabilityItems  = _enumService.GetReefCompatability();
            vm.SpecialRequirementItems = _enumService.GetSpecialRequirements();
            vm.TemperamentItems        = _enumService.GetTemperament();
            vm.TagList  = new Guid[0];
            vm.TagItems = new List <TagTypeViewModel>();

            var tagsByTagType = _tagRepository.FindAll().GroupBy(x => EnumHelper <TagType> .GetDisplayValue(x.TagType));

            foreach (var tagType in tagsByTagType)
            {
                var tagtypeModel = new TagTypeViewModel()
                {
                    Name = tagType.Key,
                    Tags = tagType.Select(x => x).ToList(),
                };
                vm.TagItems.Add(tagtypeModel);
            }

            if (creature != null)
            {
                if (creature.CreatureTags.Any())
                {
                    vm.TagList = new Guid[creature.CreatureTags.Count];
                }

                var index = 0;
                foreach (var creatureTag in creature.CreatureTags)
                {
                    vm.TagList[index] = creatureTag.TagId;
                    index++;
                }
            }

            return(vm);
        }
        private CreatureDetailsModel GetCreatureModel(Creature creature, CreatureDetailsModel vm)
        {
            var category = _categoryRepository.GetCategory(vm.CategoryId);

            vm.SubcategoryItems        = _subcategoryRepository.GetSubcategories(category.Id).ToList();
            vm.DifficultyItems         = _enumService.GetDifficulties();
            vm.ReefCompatabilityItems  = _enumService.GetReefCompatability();
            vm.SpecialRequirementItems = _enumService.GetSpecialRequirements();
            vm.TemperamentItems        = _enumService.GetTemperament();

            vm.TagItems = new List <TagTypeViewModel>();

            var tagsByTagType = _tagRepository.FindAll().GroupBy(x => EnumHelper <TagType> .GetDisplayValue(x.TagType)).ToList();

            foreach (var tagType in tagsByTagType)
            {
                var tagtypeModel = new TagTypeViewModel()
                {
                    Name = tagType.Key,
                    Tags = tagType.Select(x => x).ToList(),
                };
                vm.TagItems.Add(tagtypeModel);
            }

            if (vm.TagList == null)
            {
                vm.TagList = new Guid[0];

                if (creature != null && creature.CreatureTags.Any())
                {
                    vm.TagList = creature.CreatureTags.Select(x => x.TagId).ToArray();
                }
            }

            return(vm);
        }
        private void SaveCreatureData(Creature creature, CreatureDetailsModel model, IFormFile upload)
        {
            creature.CommonName            = model.CommonName;
            creature.Description           = model.Description;
            creature.Diet                  = model.Diet;
            creature.DifficultyDescription = model.DifficultyDescription;
            creature.Difficulty            = model.Difficulty;
            creature.Genus                 = model.Genus;
            creature.Species               = model.Species;
            creature.Length                = model.Length;
            creature.Origin                = model.Origin;
            creature.ReefCompatability     = model.ReefCompatability;
            creature.Temperament           = model.Temperament;
            creature.Volume                = model.Volume;
            creature.SpecialRequirements   = model.SpecialRequirements;
            creature.SubcategoryId         = model.SubcategoryId;

            //Update creature image.
            if (upload != null)
            {
                var webRoot = _hostingEnvironment.WebRootPath + Directory;

                var path = Path.Combine(webRoot, upload.FileName);
                if (!System.IO.File.Exists(path))
                {
                    using (var fs = System.IO.File.Create(path))
                    {
                        upload.CopyTo(fs);
                        fs.Flush();
                        fs.Close();
                    }
                }

                if (creature.Media == null)
                {
                    var media = new Media()
                    {
                        ContentType = upload.ContentType,
                        Filename    = upload.FileName,
                        Url         = Directory
                    };
                    creature.Media = media;
                }

                if (upload.FileName != creature.Media?.Filename)
                {
                    creature.Media.ContentType = upload.ContentType;
                    creature.Media.Filename    = upload.FileName;
                    creature.Media.Url         = Directory;
                }
            }

            var creatureTags = creature.CreatureTags.ToList();

            if (creatureTags.Any())
            {
                var itemsToDelete = new List <CreatureTag>();

                if (model.TagList != null && model.TagList.Any())
                {
                    itemsToDelete = creatureTags.Where(x => !model.TagList.Contains(x.TagId)).ToList();
                }

                foreach (var tag in itemsToDelete)
                {
                    _creatureRepository.DeleteCreatureTag(tag);
                    creatureTags.Remove(tag);
                }
            }

            if (model.TagList != null)
            {
                // Check which tags are already coupled to this creature and which tags stay coupled. these can be ignored.
                var newTagIds = model.TagList.Where(x => creatureTags.All(sa => sa.TagId != x)).ToList();

                //Couple checked activities to the student group.
                foreach (var tagId in newTagIds)
                {
                    var creatureTag = new CreatureTag()
                    {
                        CreatureId = creature.Id,
                        TagId      = tagId,
                    };

                    _creatureTagRepository.Add(creatureTag);
                }
            }

            _creatureRepository.Save(creature);
        }