public async Task <OperationDataResult <int> > CreateInventoryType([FromBody] ItemTypeCreateModel itemTypeCreateModel)
 {
     return(await _inventoryItemTypeService.CreateItemType(itemTypeCreateModel));
 }
        public async Task <OperationDataResult <int> > CreateItemType(ItemTypeCreateModel itemTypeCreateModel)
        {
            try
            {
                var tags = new List <InventoryTag>();
                if (itemTypeCreateModel.TagIds.Count > 0)
                {
                    tags = _dbContext.InventoryTags
                           .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                           .Where(x => itemTypeCreateModel.TagIds.Contains(x.Id))
                           .ToList();

                    //if (tags.Count != itemTypeCreateModel.TagIds.Count)
                    //{
                    //    return new OperationResult(false,
                    //        _inventoryLocalizationService.GetString("TagsNotFound"));
                    //}
                }

                var itemType = new ItemType
                {
                    Name            = itemTypeCreateModel.Name,
                    Description     = itemTypeCreateModel.Description,
                    CreatedByUserId = _userService.UserId,
                    UpdatedByUserId = _userService.UserId,
                    Usage           = itemTypeCreateModel.Usage,
                    RiskDescription = itemTypeCreateModel.RiskDescription,
                    ItemGroupId     = itemTypeCreateModel.ItemGroupId,
                };
                await itemType.Create(_dbContext);

                // create dependencies
                foreach (var dependency in itemTypeCreateModel.Dependencies)
                {
                    if (await _dbContext.ItemGroups.Where(y => y.WorkflowState != Constants.WorkflowStates.Removed).Where(x => x.Id == dependency.ItemGroupId).AnyAsync())
                    {
                        // create item group dependency
                        var dependencyItemGroup = new ItemGroupDependency
                        {
                            CreatedByUserId = _userService.UserId,
                            UpdatedByUserId = _userService.UserId,
                            ItemGroupId     = (int)dependency.ItemGroupId,
                            ItemTypeId      = itemType.Id,
                        };
                        await dependencyItemGroup.Create(_dbContext);

                        // create item type dependency
                        foreach (var dependencyItemTypesId in dependency.ItemTypesIds)
                        {
                            if (await _dbContext.ItemTypes.Where(y => y.WorkflowState != Constants.WorkflowStates.Removed).Where(x => x.Id == dependencyItemTypesId).AnyAsync())
                            {
                                var dependencyItemType = new ItemTypeDependency
                                {
                                    CreatedByUserId  = _userService.UserId,
                                    UpdatedByUserId  = _userService.UserId,
                                    ParentItemTypeId = itemType.Id,
                                    DependItemTypeId = dependencyItemTypesId,
                                };
                                await dependencyItemType.Create(_dbContext);
                            }
                        }
                    }
                }

                // creating a dependency between tag and item type
                foreach (var itemTypeTag in tags.Select(inventoryTag => new ItemTypeTag
                {
                    CreatedByUserId = _userService.UserId,
                    UpdatedByUserId = _userService.UserId,
                    InventoryTagId = inventoryTag.Id,
                    ItemTypeId = itemType.Id,
                }))
                {
                    await itemTypeTag.Create(_dbContext);
                }

                return(new OperationDataResult <int>(true, itemType.Id));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                return(new OperationDataResult <int>(false,
                                                     _inventoryLocalizationService.GetString("ErrorWhileCreatingItemType")));
            }
        }