Ejemplo n.º 1
0
        public async Task <IActionResult> Update([FromBody] UpdateInvoiceInput updateInvoiceInput)
        {
            var apiResponse = new ApiResponse();

            if (!this.ModelState.IsValid)
            {
                apiResponse.IsSuccessful = false;

                return(this.BadRequest(apiResponse));
            }

            try
            {
                updateInvoiceInput.UpdatedBy = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "fullname")?.Value;

                apiResponse = await this.invoiceService.UpdateInvoice(updateInvoiceInput);

                if (apiResponse.IsSuccessful)
                {
                    return(this.Ok(apiResponse));
                }

                return(this.BadRequest(apiResponse));
            }
            catch (Exception exception)
            {
                return(this.StatusCode(
                           500,
                           new ApiResponse
                {
                    IsSuccessful = false,
                    Message = exception.InnerException.Message
                }));
            }
        }
Ejemplo n.º 2
0
        /// <inheritdoc />
        /// <summary>
        /// The update invoice.
        /// </summary>
        /// <param name="updateInvoiceInput">
        /// The update Invoice Input.
        /// </param>
        /// <returns>
        /// The <see cref="T:System.Threading.Tasks.Task" />.
        /// </returns>
        public async Task <ApiResponse> UpdateInvoice(UpdateInvoiceInput updateInvoiceInput)
        {
            var invoice = await this.invoiceRepository.FindById(updateInvoiceInput.InvoiceNo);

            if (invoice == null)
            {
                return(new ApiResponse
                {
                    IsSuccessful = false,
                    Message = "Invoice cannot be found"
                });
            }

            invoice.Recipient.Name    = updateInvoiceInput.Name;
            invoice.Recipient.Address = updateInvoiceInput.Address;

            invoice.UpdatedBy   = updateInvoiceInput.UpdatedBy;
            invoice.LastUpdated = DateTime.Now;
            invoice.Title       = updateInvoiceInput.Title;

            var authoritiesUpdateList = updateInvoiceInput.Authorities.Select(x => new Authority
            {
                Name       = x.Name,
                Department = x.Department,
                Approved   = false
            }).ToList();

            var removedAuthorities = new List <Authority>();

            foreach (var authority in invoice.Authorities)
            {
                if (!authoritiesUpdateList.Any(x => x.Name == authority.Name && x.Department == authority.Department))
                {
                    removedAuthorities.Add(authority);
                }
            }

            await this.authorityRepository.BulkRemove(removedAuthorities);

            foreach (var updateAuthority in authoritiesUpdateList)
            {
                if (!invoice.Authorities.Any(x => x.Name == updateAuthority.Name && x.Department == updateAuthority.Department))
                {
                    invoice.Authorities.Add(updateAuthority);
                }
            }

            var removedInvoiceItems = new List <InvoiceItem>();

            var invoiceItems = updateInvoiceInput.InvoiceItems.Select(x => new InvoiceItem
            {
                Name        = x.Name,
                Amount      = x.Amount,
                Description = x.Description
            }).ToList();

            foreach (var item in invoice.InvoiceItems)
            {
                if (!invoiceItems.Any(x => x.Name == item.Name && x.Description == item.Description && x.Amount == item.Amount))
                {
                    removedInvoiceItems.Add(item);
                }
            }

            await this.invoiceItemRepository.BulkRemove(removedInvoiceItems);

            foreach (var invoiceItem in invoiceItems)
            {
                if (!invoice.InvoiceItems.Any(x => x.Name == invoiceItem.Name && x.Description == invoiceItem.Description && x.Amount == invoiceItem.Amount))
                {
                    invoice.InvoiceItems.Add(invoiceItem);
                }
            }

            this.invoiceRepository.Update(invoice);
            await this.invoiceRepository.SaveChanges();

            return(new ApiResponse
            {
                IsSuccessful = true,
                Message = "Invoice Updated"
            });
        }