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"))); } }
public async Task <OperationResult> UpdateItemType(ItemTypeUpdateModel updateModel) { try { var itemTypesFromDb = await _dbContext.ItemTypes .Where(x => x.Id == updateModel.Id) .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed) .Include(x => x.ItemTypeTags) .Include(x => x.ItemGroupDependencies) .Include(x => x.ItemTypeUploadedDatas) .FirstOrDefaultAsync(); if (itemTypesFromDb == null) { return(new OperationResult(false, _inventoryLocalizationService.GetString("InventoryItemTypeNotFount"))); } var tagIds = itemTypesFromDb.ItemTypeTags .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed) .Select(x => x.InventoryTagId) .ToList(); var tagsForDelete = itemTypesFromDb.ItemTypeTags .Where(x => !updateModel.TagIds.Contains(x.InventoryTagId)) .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed) .ToList(); var tagsForAdd = updateModel.TagIds .Where(x => !tagIds.Contains(x)) .ToList(); // delete tags from item type foreach (var itemTypeTag in tagsForDelete) { await itemTypeTag.Delete(_dbContext); } // add tags to item type foreach (var tagId in tagsForAdd) { var tag = await _dbContext.InventoryTags .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed) .Where(x => x.Id == tagId) .FirstOrDefaultAsync(); if (tag != null) { var itemTypeTag = new ItemTypeTag { InventoryTagId = tag.Id, ItemTypeId = itemTypesFromDb.Id, CreatedByUserId = _userService.UserId, UpdatedByUserId = _userService.UserId, }; await itemTypeTag.Create(_dbContext); } } var dependItemTypes = _dbContext.ItemTypeDependencies .Where(x => x.ParentItemTypeId == itemTypesFromDb.Id) .Where(y => y.WorkflowState != Constants.WorkflowStates.Removed) .ToList(); var itemGroupDependenciesForDelete = itemTypesFromDb.ItemGroupDependencies .Where(y => y.WorkflowState != Constants.WorkflowStates.Removed) .Where(x => updateModel.DependenciesIdsForDelete.Contains(x.Id)) .ToList(); var itemGroupIdsDependenciesForAdd = updateModel.Dependencies.Where(x => !itemTypesFromDb.ItemGroupDependencies .Where(y => y.WorkflowState != Constants.WorkflowStates.Removed) .Select(y => y.ItemGroupId).ToList() .Contains((int)x.ItemGroupId)) .Select(x => x.ItemGroupId); var itemTypeDependenciesForDelete = dependItemTypes.Where(x => updateModel.Dependencies.Any(y => y.ItemTypesIds.Any(z => z != x.DependItemTypeId))).ToList(); var itemTypeDependenciesForAdd = updateModel.Dependencies .SelectMany(x => x.ItemTypesIds) .Where(x => !dependItemTypes.Select(y => y.DependItemTypeId).Contains(x)); // remove item group Dependency from item type foreach (var itemGroupDependency in itemGroupDependenciesForDelete) { await itemGroupDependency.Delete(_dbContext); } foreach (var itemTypeDependency in itemTypeDependenciesForDelete) { await itemTypeDependency.Delete(_dbContext); } // add item group Dependency to item type foreach (var dependency in itemGroupIdsDependenciesForAdd) { if (await _dbContext.ItemGroups.Where(y => y.WorkflowState != Constants.WorkflowStates.Removed).Where(x => x.Id == dependency).AnyAsync()) { // create item group dependency var dependencyItemGroup = new ItemGroupDependency { CreatedByUserId = _userService.UserId, UpdatedByUserId = _userService.UserId, ItemGroupId = (int)dependency, ItemTypeId = itemTypesFromDb.Id, }; await dependencyItemGroup.Create(_dbContext); } } // create item type dependency foreach (var dependencyItemTypesId in itemTypeDependenciesForAdd) { 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 = itemTypesFromDb.Id, DependItemTypeId = dependencyItemTypesId, }; await dependencyItemType.Create(_dbContext); } } // delete uploaded images foreach (var uploadedDataType in itemTypesFromDb.ItemTypeUploadedDatas .Where(y => y.WorkflowState != Constants.WorkflowStates.Removed)) { if (uploadedDataType.Type == TypeUploadedData.Pictogram && updateModel.PictogramImagesForDelete.Contains(uploadedDataType.Id) || uploadedDataType.Type == TypeUploadedData.Danger && updateModel.DangerLabelImagesForDelete.Contains(uploadedDataType.Id)) { uploadedDataType.UpdatedByUserId = _userService.UserId; await uploadedDataType.Delete(_dbContext); } } itemTypesFromDb.RiskDescription = updateModel.RiskDescription; itemTypesFromDb.UpdatedByUserId = _userService.UserId; itemTypesFromDb.ItemGroupId = updateModel.ItemGroupId; itemTypesFromDb.Description = updateModel.Description; itemTypesFromDb.Usage = updateModel.Usage; itemTypesFromDb.Name = updateModel.Name; await itemTypesFromDb.Update(_dbContext); return(new OperationResult(true, _inventoryLocalizationService.GetString("InventoryItemTypeUpdatedSuccessfully"))); } catch (Exception e) { Trace.TraceError(e.Message); return(new OperationResult(false, _inventoryLocalizationService.GetString("ErrorWhileUpdateInventoryItemType"))); } }