public async Task<IActionResult> EditCategory([FromBody]ItemTemplateCategory categoryDto){
            if(categoryDto.Id == 0){
                ModelState.AddModelError("Unit Type Error","Unit Type id cannot be 0.");
            }
            if(!ModelState.IsValid){
                return BadRequest(ModelState);
            }

            if(categoryDto.Name == null || categoryDto.Name == ""){
                return BadRequest("Kategoriens navn må ikke være tomt");
            }
            var categoryToChange = await _repo.GetCategory(categoryDto.Id);
            bool result = await _repo.EditCategory(categoryToChange, categoryDto);

            if(result){
                User currentUser = _userManager.FindByNameAsync(User.Identity.Name).Result;
                result = await _eventLogRepo.AddEventLogChange("kategori", categoryDto.Name, categoryDto.Id, currentUser, categoryToChange, categoryDto);
            }

            if(result){
                return StatusCode(200);
            } else {
                return BadRequest("Kunne ikke ændre kategorien");
            }
        }
        public async Task<IActionResult> AddCategory([FromBody]TemplateCategoryForAddDto categoryDto){
            if(!ModelState.IsValid){
                return BadRequest(ModelState);
            }

            var category = new ItemTemplateCategory(
                categoryDto.Name
            );

            if(category.Name == null || category.Name == ""){
                return BadRequest("Kategoriens navn må ikke være tomt");
            }

            if(_repo.DuplicateExists(category.Name)){
                return BadRequest("Denne kategori findes allerede");
            }

            bool result = await _repo.AddCategory(category);

            if(result){
                User currentUser = _userManager.FindByNameAsync(User.Identity.Name).Result;
                result = await _eventLogRepo.AddEventLog(EventType.Created, "kategori", category.Name, category.Id, currentUser);
            }

            if(result){
                return StatusCode(201);
            } else {
                return BadRequest("Kunne ikke tilføje kategorien");
            }
        }
        public async Task <bool> AddCategory(ItemTemplateCategory category)
        {
            await _context.TemplateCategories.AddAsync(category);

            int result = await _context.SaveChangesAsync();

            return(result > 0);
        }
        public async Task <bool> EditCategory(ItemTemplateCategory oldCategory, ItemTemplateCategory newCategory)
        {
            var result = await _context.TemplateCategories.SingleOrDefaultAsync(x => x.Id == oldCategory.Id);

            if (result != null)
            {
                result.Name = newCategory.Name;
                return(await _context.SaveChangesAsync() > 0);
            }
            return(false);
        }
        public async Task<IActionResult> GetCategory(int id){
            ItemTemplateCategory category = await _repo.GetCategory(id);
            TemplateCategoryForGetDto categoryToReturn = _mapper.Map<TemplateCategoryForGetDto>(category);

            return Ok(categoryToReturn);
        }
        public async Task <IActionResult> AddItemTemplate([FromBody] ItemTemplateForAddDto templateDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            List <TemplatePropertyRelation> propertiesToAdd = new List <TemplatePropertyRelation>();

            foreach (ItemPropertyNameForGetDto prop in templateDto.TemplateProperties)
            {
                propertiesToAdd.Add(new TemplatePropertyRelation {
                    PropertyId = prop.Id
                });
            }

            List <TemplateFileName> filesToAdd = new List <TemplateFileName>();

            if (templateDto.Files != null)
            {
                for (int i = 0; i < templateDto.Files.Length; i++)
                {
                    filesToAdd.Add(new TemplateFileName {
                        FileData = new FileData {
                            Id = templateDto.Files[i]
                        },
                        FileName = templateDto.FileNames[i]
                    });
                }
            }

            var unitTypeToAdd = new UnitType(
                templateDto.UnitType.Id,
                templateDto.UnitType.Name
                );

            var categoryToAdd = new ItemTemplateCategory(
                templateDto.Category.Id,
                templateDto.Category.Name
                );

            var itemTemplateToCreate = new ItemTemplate(
                templateDto.Name,
                unitTypeToAdd,
                templateDto.Description,
                propertiesToAdd,
                templateDto.Parts,
                templateDto.PartOf,
                DateTime.Now,
                templateDto.RevisionedFrom,
                filesToAdd,
                templateDto.LowerLimit,
                categoryToAdd
                );

            bool succes = await _repo.AddItemTemplate(itemTemplateToCreate);

            if (succes)
            {
                User currentUser = _userManager.FindByNameAsync(User.Identity.Name).Result;
                succes = await _eventLogRepo.AddEventLog(EventType.Created, "skabelon", itemTemplateToCreate.Name, itemTemplateToCreate.Id, currentUser);
            }

            return(succes ? StatusCode(201) : BadRequest());
        }