public async Task <bool> ReturnItems(ClaimsPrincipal userPrincipal, ReturnItemsRequest request)
        {
            await using var transaction = await _context.Database.BeginTransactionAsync();

            try
            {
                var rentedItem = _context.RentedItems
                                 .FirstOrDefault(x => x.ItemId == request.ItemId && x.RentId == request.RentId);

                rentedItem.IsReturned = true;
                _context.RentedItems.Update(rentedItem);
                await _context.SaveChangesAsync();

                var item = _itemService.Get(request.ItemId);
                item.Quantity += rentedItem.Quantity;
                _context.Items.Update(item);
                await _context.SaveChangesAsync();

                var allItemsAreReturned = await _context.RentedItems
                                          .Where(x => x.RentId == request.RentId)
                                          .AllAsync(x => x.IsReturned);

                if (allItemsAreReturned)
                {
                    var rent = _rentService.GetRent(request.RentId);
                    rent.RentReturnTime = DateTime.Now;
                    _context.Rents.Update(rent);
                    await _context.SaveChangesAsync();
                }
                await transaction.CommitAsync();
            }
            catch (Exception)
            {
                await transaction.RollbackAsync();

                return(false);
            }
            return(true);
        }
예제 #2
0
        public void VerifyResetReturnBackOrderAndCancelItem()
        {
            string xml;
            ResetItemsShippingInformationRequest req1 =
                new ResetItemsShippingInformationRequest(
                    "1234", "5678", EnvironmentType.Sandbox.ToString(),
                    originalOrderID);

            req1.AddMerchantItemId("A1");
            req1.AddMerchantItemId("B1");
            req1.AddMerchantItemId("123456");

            xml = Util.EncodeHelper.Utf8BytesToString(req1.GetXml());

            AutoGen.ResetItemsShippingInformationRequest D
                = EncodeHelper.Deserialize(xml) as AutoGen.ResetItemsShippingInformationRequest;

            Assert.AreEqual(req1.GoogleOrderNumber, D.googleordernumber);

            req1 =
                new ResetItemsShippingInformationRequest(originalOrderID);
            req1.AddMerchantItemId("A1");
            req1.AddMerchantItemId("B1");
            req1.AddMerchantItemId("123456");
            req1.SendEmail = true;
            xml            = Util.EncodeHelper.Utf8BytesToString(req1.GetXml());

            VerifyMessage(xml, typeof(AutoGen.ResetItemsShippingInformationRequest));


            BackorderItemsRequest req2 =
                new BackorderItemsRequest(
                    "1234", "5678", EnvironmentType.Sandbox.ToString(),
                    originalOrderID);

            req2.AddMerchantItemId("A1");
            req2.AddMerchantItemId("B1");
            req2.AddMerchantItemId("123456");

            xml = Util.EncodeHelper.Utf8BytesToString(req2.GetXml());
            VerifyMessage(xml, typeof(AutoGen.BackorderItemsRequest));

            req2 =
                new BackorderItemsRequest(originalOrderID);
            req2.AddMerchantItemId("A1");
            req2.AddMerchantItemId("B1");
            req2.AddMerchantItemId("123456");
            req2.SendEmail = true;
            xml            = Util.EncodeHelper.Utf8BytesToString(req2.GetXml());

            CancelItemsRequest req3 =
                new CancelItemsRequest(
                    "1234", "5678", EnvironmentType.Sandbox.ToString(),
                    originalOrderID);

            req3.AddMerchantItemId("A1");
            req3.AddMerchantItemId("B1");
            req3.AddMerchantItemId("123456");

            xml = Util.EncodeHelper.Utf8BytesToString(req3.GetXml());
            VerifyMessage(xml, typeof(AutoGen.CancelItemsRequest));

            req3 =
                new CancelItemsRequest(
                    "1234", "5678", EnvironmentType.Sandbox.ToString(),
                    originalOrderID, true);
            req3.AddMerchantItemId("A1");
            req3.AddMerchantItemId("B1");
            req3.AddMerchantItemId("123456");

            xml = Util.EncodeHelper.Utf8BytesToString(req3.GetXml());

            req3 =
                new CancelItemsRequest(originalOrderID);
            req3.AddMerchantItemId("A1");
            req3.AddMerchantItemId("B1");
            req3.AddMerchantItemId("123456");
            xml = Util.EncodeHelper.Utf8BytesToString(req3.GetXml());

            req3 =
                new CancelItemsRequest(originalOrderID, false);
            req3.AddMerchantItemId("A1");
            req3.AddMerchantItemId("B1");
            req3.AddMerchantItemId("123456");
            xml = Util.EncodeHelper.Utf8BytesToString(req3.GetXml());

            req3 =
                new CancelItemsRequest(
                    "1234", "5678", EnvironmentType.Sandbox.ToString(),
                    originalOrderID, "Comment", "Reason");
            req3.AddMerchantItemId("A1");
            req3.AddMerchantItemId("B1");
            req3.AddMerchantItemId("123456");
            xml = Util.EncodeHelper.Utf8BytesToString(req3.GetXml());

            ReturnItemsRequest req4 =
                new ReturnItemsRequest(
                    "1234", "5678", EnvironmentType.Sandbox.ToString(),
                    originalOrderID);

            req4.AddMerchantItemId("A1");
            req4.AddMerchantItemId("B1");
            req4.AddMerchantItemId("123456");

            xml = Util.EncodeHelper.Utf8BytesToString(req4.GetXml());
            VerifyMessage(xml, typeof(AutoGen.ReturnItemsRequest));

            req4 =
                new ReturnItemsRequest(originalOrderID);
            req4.AddMerchantItemId("A1");
            req4.AddMerchantItemId("B1");
            req4.AddMerchantItemId("123456");
            req4.SendEmail = true;
            xml            = Util.EncodeHelper.Utf8BytesToString(req4.GetXml());
        }
예제 #3
0
        public async Task <IActionResult> Return(ReturnItemsRequest request)
        {
            var result = await _rentedItemsService.ReturnItems(User, request);

            return(result ? (IActionResult)Ok() : NotFound());
        }