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 })); } }
/// <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" }); }