public async Task <IActionResult> Post([FromBody] InvoiceRequestDTO invoiceRequestDTO) { var claimSID = User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value; if (claimSID == null) { apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest, ErrorMessageEnum.杖中沒有發現指定使用者ID); return(BadRequest(apiResult)); } UserID = Convert.ToInt32(claimSID); var fooUser = await _context.LobUsers.Include(x => x.Department).FirstOrDefaultAsync(x => x.Id == UserID); if (fooUser == null) { apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound, ErrorMessageEnum.沒有發現指定的該使用者資料); return(NotFound(apiResult)); } if (!ModelState.IsValid) { apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest, ErrorMessageEnum.傳送過來的資料有問題, exceptionMessage: $"傳送過來的資料有問題 {ModelState}"); return(BadRequest(apiResult)); } Invoice fooInvoice = new Invoice() { InvoiceNo = invoiceRequestDTO.InvoiceNo, Date = invoiceRequestDTO.Date, Memo = invoiceRequestDTO.Memo, User = fooUser }; _context.Invoices.Add(fooInvoice); await _context.SaveChangesAsync(); var fooItem = await _context.Invoices.FirstOrDefaultAsync(x => x.InvoiceNo == invoiceRequestDTO.InvoiceNo); InvoiceResponseDTO invoiceResponseDTO = new InvoiceResponseDTO() { Id = fooItem.Id, InvoiceNo = fooItem.InvoiceNo, Date = fooItem.Date, Memo = fooItem.Memo, user = new UserDTO() { Id = fooUser.Id } }; apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted, ErrorMessageEnum.None, payload: invoiceResponseDTO); return(Accepted(apiResult)); }
public async Task <IActionResult> Create([FromBody] InvoiceRequest invoiceRequest) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var result = new InvoiceResponse() { ResponseResult = new ResponseResult(invoiceRequest.RequestHeader.RequestId) }; try { InvoiceRequestDTO dto = GetInvoiceRequestDtoFromRequest(invoiceRequest); result.Reference = new InvoiceReferenceResponse { InvoiceNumber = dto.Id, InvoiceDate = dto.InvoiceDate }; var command = new SubmitInvoiceCommand(dto, JsonConvert.SerializeObject(invoiceRequest), invoiceRequest.GetType().Name); try { var confirmationCode = await _mediator.Send(command); } catch (Exception ex) { throw new Exception(ex.Message); } } catch (Exception e) { result.ResponseResult.Errors = new List <ErrorDetail>() { new ErrorDetail() { ErrorCode = "-1", ErrorMessage = e.Message } }; return(BadRequest(result)); } return(Ok(result)); }
private async Task test() { InvoiceService invoiceService = new InvoiceService(); LoginService loginService = new LoginService(); // 測試使用者登入 await loginService.LoginAsync("user50", "password50"); // 測試發票查詢 List <InvoiceResponseDTO> invoiceResponseDTOs = await invoiceService.RetriveInvoiceAsync(loginService.item); // 測試發票新增 InvoiceRequestDTO invoiceRequestDTO = new InvoiceRequestDTO() { InvoiceNo = "Vulcan123", Date = DateTime.Now, Memo = "測試用", user = new UserDTO() { Id = loginService.item.Id } }; InvoiceResponseDTO invoiceResponseDTO = await invoiceService.CreateInvoiceAsync(loginService.item, invoiceRequestDTO); // 測試發票查詢 invoiceResponseDTOs = await invoiceService.RetriveInvoiceAsync(loginService.item); // 測試發票修改 invoiceRequestDTO = new InvoiceRequestDTO() { Id = invoiceResponseDTO.Id, InvoiceNo = invoiceResponseDTO.InvoiceNo, Date = invoiceResponseDTO.Date, Memo = "已經有修改了", user = invoiceResponseDTO.user, }; invoiceResponseDTO = await invoiceService.UpdateInvoiceAsync(loginService.item, invoiceRequestDTO); // 測試發票查詢 invoiceResponseDTOs = await invoiceService.RetriveInvoiceAsync(loginService.item); // 測試發票刪除 foreach (var item in invoiceResponseDTOs) { await invoiceService.DeleteInvoiceAsync(loginService.item, item.Id); } // 測試發票查詢 invoiceResponseDTOs = await invoiceService.RetriveInvoiceAsync(loginService.item); }
private InvoiceRequestDTO GetInvoiceRequestDtoFromRequest(InvoiceRequest request) { InvoiceRequestDTO dto = new InvoiceRequestDTO { Serials = request.Serials, Id = request.Id, InvoiceDate = request.InvoiceDate, Price = request.Price, Currency = request.Currency, BuyerEU = request.BuyerEU, BuyerID = request.BuyerID, BuyerName = request.BuyerName, BuyerCountry = request.BuyerCountry, BuyerAddress = request.BuyerAddress, BuyerCity = request.BuyerCity, BuyerZipCode = request.BuyerZipCode }; return(dto); }
public async Task <InvoiceResponseDTO> UpdateInvoiceAsync(LoginResponseDTO loginResponseDTO, InvoiceRequestDTO invoiceRequestDTO) { InvoiceResponseDTO invoiceResponseDTO = new InvoiceResponseDTO(); string url = $"{Constants.InvoiceAPI}/{invoiceRequestDTO.Id}"; var httpJsonPayload = JsonConvert.SerializeObject(invoiceRequestDTO); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginResponseDTO.Token); HttpResponseMessage response = await client.PutAsync(url, new StringContent(httpJsonPayload, System.Text.Encoding.UTF8, "application/json")); String strResult = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { APIResult apiResult = JsonConvert.DeserializeObject <APIResult>(strResult, new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore }); if (apiResult.Status == true) { string itemJsonContent = apiResult.Payload.ToString(); invoiceResponseDTO = JsonConvert.DeserializeObject <InvoiceResponseDTO>(itemJsonContent, new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore }); } } return(invoiceResponseDTO); }
public async Task <IActionResult> Put([FromRoute] int id, [FromBody] InvoiceRequestDTO invoiceRequestDTO) { var claimSID = User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value; if (claimSID == null) { apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest, ErrorMessageEnum.杖中沒有發現指定使用者ID); return(BadRequest(apiResult)); } UserID = Convert.ToInt32(claimSID); var fooUser = await _context.LobUsers.Include(x => x.Department).FirstOrDefaultAsync(x => x.Id == UserID); if (fooUser == null) { apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound, ErrorMessageEnum.沒有發現指定的該使用者資料); return(NotFound(apiResult)); } if (!ModelState.IsValid) { apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest, ErrorMessageEnum.傳送過來的資料有問題, exceptionMessage: $"傳送過來的資料有問題 {ModelState}"); return(BadRequest(apiResult)); } if (invoiceRequestDTO.Id != id) { apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest, ErrorMessageEnum.紀錄更新所指定ID不一致); return(BadRequest(apiResult)); } var invoiceOnDB = await _context.Invoices .Include(x => x.User).ThenInclude(x => x.Department) .FirstOrDefaultAsync(x => x.Id == invoiceRequestDTO.Id); if (invoiceOnDB == null) { apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound, ErrorMessageEnum.沒有發現指定的發票); return(NotFound(apiResult)); } else if (invoiceOnDB.User.Id != UserID) { apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest, ErrorMessageEnum.杖Token上標示的使用者與傳送過來的使用者不一致); return(BadRequest(apiResult)); } invoiceOnDB.InvoiceNo = invoiceRequestDTO.InvoiceNo; invoiceOnDB.Date = invoiceRequestDTO.Date; invoiceOnDB.Memo = invoiceRequestDTO.Memo; _context.Entry(invoiceOnDB).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!await InvoiceExists(invoiceRequestDTO.Id)) { apiResult = APIResultFactory.Build(false, StatusCodes.Status409Conflict, ErrorMessageEnum.要更新的紀錄_發生同時存取衝突_已經不存在資料庫上); return(Conflict(apiResult)); } else { apiResult = APIResultFactory.Build(false, StatusCodes.Status409Conflict, ErrorMessageEnum.紀錄更新時_發生同時存取衝突); return(Conflict(apiResult)); } } catch (Exception ex) { apiResult = APIResultFactory.Build(false, StatusCodes.Status500InternalServerError, Helpers.ErrorMessageEnum.Exception, exceptionMessage: $"({ex.GetType().Name}), {ex.Message}{Environment.NewLine}{ex.StackTrace}"); return(StatusCode(StatusCodes.Status500InternalServerError, apiResult)); } var fooItem = await _context.Invoices.FirstOrDefaultAsync(x => x.Id == invoiceRequestDTO.Id); InvoiceResponseDTO invoiceResponseDTO = new InvoiceResponseDTO() { Id = fooItem.Id, InvoiceNo = fooItem.InvoiceNo, Date = fooItem.Date, Memo = fooItem.Memo, user = new UserDTO() { Id = fooUser.Id } }; apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted, ErrorMessageEnum.None, payload: invoiceResponseDTO); return(Accepted(apiResult)); }
public IActionResult CreateNewInvoice([FromBody] string invoiceRequestJson) { try { //Deserialize the request InvoiceRequestDTO request = JsonConvert.DeserializeObject <InvoiceRequestDTO>(invoiceRequestJson); //Get the id of the currently authorized user string id = User.FindFirstValue(ClaimTypes.NameIdentifier); //Create new invoice model object Invoice invoice = new Invoice() { TransactionId = request.TransactionId, TotalPaid = request.TotalPaid, UserId = id, InvoiceDate = DateTime.Now, ShippingName = request.BuyerName, ShippingStreet = request.BuyerStreet, ShippingCity = request.BuyerCity, ShippingPostcode = request.BuyerPostcode }; //Loop through products in cart and add to InvoiceProduct table foreach (CartProductResponse cartProduct in request.CartProducts) { invoice.InvoiceProduct.Add(new InvoiceProduct() { PriceAtTime = cartProduct.Product.CurrentPrice, ProductId = cartProduct.Product.ProductId, Quantity = cartProduct.Quantity }); //If product is a physical item, adjust the stock level if (cartProduct.Product.IsPhysical) { //Find product associated with this line item Product product = _context.Product .Where(p => p.ProductId == cartProduct.Product.ProductId) .FirstOrDefault(); //If product is not null... if (product != null) { //Adjust stock level product.StockLevel -= cartProduct.Quantity; //Just a check to ensure stock level doesn't go below zero, this shouldn't happen if (product.StockLevel < 0) { product.StockLevel = 0; } //Update product in database _context.Product.Update(product); } } } //Get saved cart data, if any, from database UserCart cart = _context.UserCart .Where(c => c.UserId.Equals(id)) .FirstOrDefault(); //If cart data is not null remove the entry from the database if (cart != null) { _context.Remove(cart); } //Add invoice to database _context.Invoice.Add(invoice); _context.SaveChanges(); return(Ok()); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("ERROR: An error occurred in InvoiceController.cs\n" + e.Message); return(BadRequest()); } }