示例#1
0
        public async Task Handle_ValidReceiptId_ShouldReturnItems()
        {
            var receipt = await CreateReceipt();

            var createReceiptItem = new CreateReceiptItemCommand
            {
                ItemGroup = 0,
                Count     = 10,
                Name      = "hey",
                Price     = 1235,
                ReceiptId = receipt,
                UserIds   = new List <string>
                {
                    User.Id
                }
            };

            var itemId = await SendAsync(createReceiptItem);

            var query = new GetReceiptItemByReceiptIdQuery {
                ReceiptId = receipt
            };

            var entities = await SendAsync(query);

            entities.Should().NotBeNull();
            entities.Count.Should().Be(1);
            entities.First().Id.Should().Be(itemId);
        }
示例#2
0
        public async Task <IActionResult> EditReceiptPost(CreateReceiptModel model)
        {
            //update receipt
            var command = new UpdateReceiptCommand
            {
                Id          = model.ReceiptDto.Id,
                Location    = model.ReceiptDto.Location,
                DateVisited = model.ReceiptDto.DateVisited,
                Note        = model.ReceiptDto.Note
            };

            await Mediator.Send(command);

            //get already existing receipt items
            var itemQuery = new GetReceiptItemByReceiptIdQuery
            {
                ReceiptId = model.ReceiptDto.Id
            };

            var alreadyExistingItems = await Mediator.Send(itemQuery);

            #region Delete

            //delete receipt item - own request

            var receiptItemsToDelete = alreadyExistingItems
                                       .Where(x => model.ReceiptDto.Items
                                              .All(y => y.Id != x.Id))
                                       .ToList();

            foreach (var itemDto in receiptItemsToDelete)
            {
                var deleteCommand = new DeleteReceiptItemCommand
                {
                    Id = itemDto.Id !,
                    FinancialProjectId = model.FinancialProjectId
                };

                await Mediator.Send(deleteCommand);
            }

            #endregion

            #region Create

            //Create receipt item
            var receiptItemToBeCreated = model.ReceiptDto.Items
                                         .Where(x => alreadyExistingItems
                                                .All(y => y.Id != x.Id))
                                         .ToList();

            foreach (var receiptItemDto in receiptItemToBeCreated)
            {
                var createCommand = new CreateReceiptItemCommand
                {
                    Name      = "",
                    Count     = receiptItemDto.Count,
                    Price     = receiptItemDto.Price,
                    ItemGroup = receiptItemDto.ItemGroup.Value,
                    ReceiptId = model.ReceiptDto.Id,
                    UserIds   = receiptItemDto.Users.Select(x => x.Id).ToList() !
                };

                await Mediator.Send(createCommand);
            }

            #endregion

            #region Update

            //update receipt item - own request
            var receiptItemsToUpdate = model.ReceiptDto.Items
                                       .Where(x => receiptItemsToDelete
                                              .All(y => y.Id != x.Id) &&
                                              receiptItemToBeCreated.All(q => q.Id != x.Id))
                                       .ToList();

            foreach (var receiptItemDto in receiptItemsToUpdate)
            {
                var updateCommand = new UpdateReceiptItemCommand
                {
                    Id                 = receiptItemDto.Id ?? "",
                    Count              = receiptItemDto.Count,
                    ItemGroup          = receiptItemDto.ItemGroup.Value,
                    Price              = receiptItemDto.Price,
                    UserDtos           = receiptItemDto.Users.ToList(),
                    FinancialProjectId = model.FinancialProjectId
                };
                await Mediator.Send(updateCommand);
            }

            #endregion

            return(Json(new
            {
                result = "Redirect",
                url = Url.Action("Index", "Project", new { id = model.FinancialProjectId })
            }));
        }