public async Task DisposeProductFromStock(Guid productId, int amount, DisposalType type) { var product = await Get(productId); await _context.StockChanges.AddAsync(new StockDisposal() { Amount = amount, Type = type, Product = product }); product.StockInventory -= amount; await _context.SaveChangesAsync(); }
/// <summary> /// Empty a specific folder. /// </summary> /// <param name="folderId">The folder identifier of the folder need to be emptied.</param> /// <param name="deleteType">How an item is deleted.</param> /// <param name="deleteSubfolder">Indicates whether the subfolders are also to be deleted. </param> /// <returns>Empty folder response instance that will send to server.</returns> protected EmptyFolderResponseType CallEmptyFolderOperation(BaseFolderIdType folderId, DisposalType deleteType, bool deleteSubfolder) { // EmptyFolder request. EmptyFolderType emptyFolderRequest = new EmptyFolderType(); // Specify the delete type. emptyFolderRequest.DeleteType = deleteType; // Specify which folder will be emptied. emptyFolderRequest.FolderIds = new BaseFolderIdType[1]; emptyFolderRequest.FolderIds[0] = folderId; emptyFolderRequest.DeleteSubFolders = deleteSubfolder; // Empty the specific folder EmptyFolderResponseType emptyFolderResponse = this.FOLDAdapter.EmptyFolder(emptyFolderRequest); return emptyFolderResponse; }
/// <summary> /// Generate the request message for operation "DeleteFolder". /// </summary> /// <param name="deleteType">How folders are to be deleted.</param> /// <param name="folderIds">An array of folder identifier of the folders need to be deleted</param> /// <returns>Delete folder request instance that will send to server.</returns> protected DeleteFolderType GetDeleteFolderRequest(DisposalType deleteType, params BaseFolderIdType[] folderIds) { Site.Assert.IsNotNull(folderIds, "Folders id should not be null!"); Site.Assert.AreNotEqual<int>(0, folderIds.Length, "Folders id should contains at least one Id!"); DeleteFolderType deleteFolderRequest = new DeleteFolderType(); // Specify the delete type. deleteFolderRequest.DeleteType = deleteType; int folderCount = folderIds.Length; // Set the request's folderId field. deleteFolderRequest.FolderIds = new BaseFolderIdType[folderCount]; for (int folderIdIndex = 0; folderIdIndex < folderCount; folderIdIndex++) { deleteFolderRequest.FolderIds[folderIdIndex] = folderIds[folderIdIndex]; } return deleteFolderRequest; }
public void MSOXWSCORE_S01_TC20_VerifyItemWithDisposalTypeEnum() { DisposalType[] disposalTypes = new DisposalType[] { DisposalType.HardDelete, DisposalType.SoftDelete, DisposalType.MoveToDeletedItems }; // Define an array to store the find item results from FindItem operation response. bool[] findInDeleteditems = new bool[disposalTypes.Length]; for (int i = 0; i < disposalTypes.Length; i++) { DisposalType disposalType = disposalTypes[i]; #region Step 1: Create the item. ItemType[] createdItems = new ItemType[] { new ItemType() }; createdItems[0].Subject = Common.GenerateResourceName( this.Site, TestSuiteHelper.SubjectForCreateItem); CreateItemResponseType createItemResponse = this.CallCreateItemOperation(DistinguishedFolderIdNameType.drafts, createdItems); // Check the operation response. Common.CheckOperationSuccess(createItemResponse, 1, this.Site); ItemIdType[] createdItemIds = Common.GetItemIdsFromInfoResponse(createItemResponse); // One created item should be returned. Site.Assert.AreEqual<int>( 1, createdItemIds.GetLength(0), "One created item should be returned! Expected Item Count: {0}, Actual Item Count: {1}", 1, createdItemIds.GetLength(0)); #endregion #region Step 2: Delete the item with different DisposalType. DeleteItemResponseType deleteItemResponse = this.CallDeleteItemOperation(disposalType); // Check the operation response. Common.CheckOperationSuccess(deleteItemResponse, 1, this.Site); this.ExistItemIds.Remove(createdItemIds[0]); #endregion #region Step 3: Fail to get the deleted item. // Call the GetItem operation. GetItemResponseType getItemResponse = this.CallGetItemOperation(createdItemIds); ItemType[] getItems = Common.GetItemsFromInfoResponse<ItemType>(getItemResponse); // No item should be returned Site.Assert.AreEqual<int>( 0, getItems.GetLength(0), "No item should be returned! Expected Item Count: {0}, Actual Item Count: {1}", 0, getItems.GetLength(0)); #endregion #region Step 4: Find the deleted item in deleteditems folder. if (disposalType == DisposalType.MoveToDeletedItems) { // Find the deleted item in deleteditems folder. ItemIdType[] findItemIds = this.FindItemsInFolder(DistinguishedFolderIdNameType.deleteditems, createdItems[0].Subject, "User1"); findInDeleteditems[i] = findItemIds != null; if (findInDeleteditems[i]) { this.CallMoveItemOperation(DistinguishedFolderIdNameType.drafts, findItemIds); } // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCORE_R1668"); // The item[2] is deleted using SoftDelete value, and it cannot be got in step 3 after DeleteItem operation, also it cannot be found in deleteditems folder, this represent the item is moved to the Deleted Items folder. Site.CaptureRequirementIfIsTrue( findInDeleteditems[2], 1668, @"[In m:DeleteItemType Complex Type] The value ""MoveToDeletedItems"" of ""DeleteType"" which specifies that an item or folder is moved to the Deleted Items folder."); } else if (disposalType == DisposalType.SoftDelete) { if (Common.IsRequirementEnabled(4000, this.Site)) { // Find the deleted item in deleteditems folder. ItemIdType[] findItemIds = this.FindItemsInFolder(DistinguishedFolderIdNameType.recoverableitemsdeletions, createdItems[0].Subject, "User1"); findInDeleteditems[i] = findItemIds != null; if (findInDeleteditems[i]) { this.CallMoveItemOperation(DistinguishedFolderIdNameType.recoverableitemsdeletions, findItemIds); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCORE_R1669"); // The item[1] is deleted using SoftDelete value, and it cannot be got in step 3 after DeleteItem operation, also it cannot be found in deleteditems folder, this represent the item is moved to the Recoverable Items folder. Site.CaptureRequirementIfIsTrue( findInDeleteditems[1], 1669, @"[In m:DeleteItemType Complex Type] The value ""SoftDelete"" of ""DeleteType"" which specifies that an item or folder is moved to the dumpster if the dumpster is enabled."); } } } else { // Items should not be found in the deleteditems folder if the disposal type is HardDelete or SoftDelete. ItemType[] findItems = this.FindItemWithRestriction(DistinguishedFolderIdNameType.deleteditems, createdItems[0].Subject); findInDeleteditems[i] = findItems != null; } #endregion } #region Capture Code // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCORE_R1667"); // The item[0] is deleted using HardDelete value, and it cannot be gotten in step 3 after DeleteItem operation, also it cannot be found in deleteditems folder, this represent the item is permanently removed. Site.CaptureRequirementIfIsFalse( findInDeleteditems[0], 1667, @"[In m:DeleteItemType Complex Type] The value ""HardDelete"" of ""DeleteType"" which specifies that an item or folder is permanently removed from the store."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCORE_R1668"); // The item[2] is deleted using MoveToDeletedItems value, and it cannot be got in step 3 after DeleteItem operation, also it can be found in deleteditems folder, this represent the item is moved to the Deleted Items folder. Site.CaptureRequirementIfIsTrue( findInDeleteditems[2], 1668, @"[In m:DeleteItemType Complex Type] The value ""MoveToDeletedItems"" of ""DeleteType"" which specifies that an item or folder is moved to the Deleted Items folder."); #endregion }