Ejemplo n.º 1
0
        public async Task <IActionResult> CreateReceiptPost(CreateReceiptModel model)
        {
            var command = new CreateReceiptCommand
            {
                DateVisited        = model.ReceiptDto.DateVisited,
                FinancialProjectId = model.FinancialProjectId,
                Location           = model.ReceiptDto.Location,
                Note = model.ReceiptDto.Note
            };

            var receiptId = await Mediator.Send(command);

            foreach (var receiptItemModel in model.ReceiptDto.Items)
            {
                var createReceiptItemCommand = new CreateReceiptItemCommand
                {
                    Name      = "Receipt",
                    Count     = receiptItemModel.Count,
                    ItemGroup = receiptItemModel.ItemGroup.Value,
                    ReceiptId = receiptId,
                    Price     = receiptItemModel.Price,
                    UserIds   = receiptItemModel.Users.Select(x => x.Id).ToList() !
                };

                await Mediator.Send(createReceiptItemCommand);
            }

            //redirect to index
            return(Json(new
                        { result = "Redirect", url = Url.Action("Index", "Project", new { id = model.FinancialProjectId }) }));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> EditReceipt(string id, string financialProjectId)
        {
            var query = new GetReceiptByIdQuery
            {
                ReceiptId = id
            };

            var receiptDto = await Mediator.Send(query);

            var usersQuery = new GetUsersFromFinancialProjectQuery {
                FinancialProjectId = financialProjectId
            };

            var userDtos = await Mediator.Send(usersQuery);

            var model = new CreateReceiptModel
            {
                ReceiptDto          = receiptDto,
                FinancialProjectId  = financialProjectId,
                CreateReceiptItemVm = await CreateReceiptItemVm(userDtos)
            };


            return(View(model));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> UploadPdfReceipt(string id, IFormFile file)
        {
            PdfReceiptReader pdfReceiptReader = new PdfReceiptReader(file);
            var receipt = pdfReceiptReader.GetReceipt();

            var financialQuery = new GetUsersFromFinancialProjectQuery()
            {
                FinancialProjectId = id
            };

            var userDtos = await Mediator.Send(financialQuery);

            var createReceiptModel = new CreateReceiptModel
            {
                FinancialProjectId  = id,
                CreateReceiptItemVm = await CreateReceiptItemVm(userDtos),
                ReceiptDto          = new ReceiptDto()
            };

            createReceiptModel.ReceiptDto.Location    = receipt.Location;
            createReceiptModel.ReceiptDto.DateVisited = receipt.DateVisited;


            var model = new PdfReceiptVm
            {
                CreateReceiptModel = createReceiptModel,
                PdfReceiptDto      = receipt
            };

            return(View("CreateReceiptFromPdf", model));
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> CreateReceipt(string id)
        {
            var financialQuery = new GetUsersFromFinancialProjectQuery()
            {
                FinancialProjectId = id
            };

            var userDtos = await Mediator.Send(financialQuery);

            var model = new CreateReceiptModel
            {
                FinancialProjectId  = id,
                CreateReceiptItemVm = await CreateReceiptItemVm(userDtos)
            };

            return(View("CreateReceipt", model));
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> CreateReceiptFromPdf(string id, PdfReceiptDto pdfReceiptDto)
        {
            var financialQuery = new GetUsersFromFinancialProjectQuery()
            {
                FinancialProjectId = id
            };

            var userDtos = await Mediator.Send(financialQuery);

            var createReceiptModel = new CreateReceiptModel
            {
                FinancialProjectId  = id,
                CreateReceiptItemVm = await CreateReceiptItemVm(userDtos)
            };


            var model = new PdfReceiptVm
            {
                CreateReceiptModel = createReceiptModel,
                PdfReceiptDto      = pdfReceiptDto
            };

            return(View(model));
        }
Ejemplo n.º 6
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 })
            }));
        }