Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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());
            }
        }