Esempio n. 1
0
        public async Task <IActionResult> Post([FromBody] InvoiceDetailRequestDTO invoiceDetailRequestDTO)
        {
            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));
            }

            var invoiceOnDB = await _context.Invoices
                              .FirstOrDefaultAsync(x => x.Id == invoiceDetailRequestDTO.Invoice.Id);

            if (invoiceOnDB == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的發票);
                return(NotFound(apiResult));
            }

            InvoiceDetail fooInvoiceDetail = new InvoiceDetail()
            {
                Cnt         = invoiceDetailRequestDTO.Cnt,
                Flag        = invoiceDetailRequestDTO.Flag,
                Memo        = invoiceDetailRequestDTO.Memo,
                PictureName = invoiceDetailRequestDTO.PictureName,
                Price       = invoiceDetailRequestDTO.Price,
                Qty         = invoiceDetailRequestDTO.Qty,
                SubTotal    = invoiceDetailRequestDTO.SubTotal,
                TDate       = invoiceDetailRequestDTO.TDate,
                Invoice     = invoiceOnDB
            };

            _context.InvoiceDetails.Add(fooInvoiceDetail);
            await _context.SaveChangesAsync();

            apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted,
                                               ErrorMessageEnum.None, payload: invoiceDetailRequestDTO);
            return(Accepted(apiResult));
        }
Esempio n. 2
0
        public async Task <IActionResult> Put([FromRoute] int id, [FromBody] InvoiceDetailRequestDTO invoiceDetailRequestDTO)
        {
            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 (invoiceDetailRequestDTO.Id != id)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.紀錄更新所指定ID不一致);
                return(BadRequest(apiResult));
            }

            var invoiceOnDB = await _context.Invoices
                              .FirstOrDefaultAsync(x => x.Id == invoiceDetailRequestDTO.Invoice.Id);

            if (invoiceOnDB == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的發票);
                return(NotFound(apiResult));
            }

            var invoiceDetailOnDB = await _context.InvoiceDetails
                                    .Include(x => x.Invoice)
                                    .FirstOrDefaultAsync(x => x.Id == invoiceDetailRequestDTO.Id);

            if (invoiceDetailOnDB == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的發票明細項目);
                return(NotFound(apiResult));
            }

            invoiceDetailOnDB.Cnt             = invoiceDetailRequestDTO.Cnt;
            invoiceDetailOnDB.Flag            = invoiceDetailRequestDTO.Flag;
            invoiceDetailOnDB.Memo            = invoiceDetailRequestDTO.Memo;
            invoiceDetailOnDB.PictureName     = invoiceDetailRequestDTO.PictureName;
            invoiceDetailOnDB.Price           = invoiceDetailRequestDTO.Price;
            invoiceDetailOnDB.Qty             = invoiceDetailRequestDTO.Qty;
            invoiceDetailOnDB.SubTotal        = invoiceDetailRequestDTO.SubTotal;
            invoiceDetailOnDB.TDate           = invoiceDetailRequestDTO.TDate;
            _context.Entry(invoiceOnDB).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!await InvoiceDetailExists(invoiceDetailRequestDTO.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));
            }

            apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted,
                                               ErrorMessageEnum.None, payload: invoiceDetailRequestDTO);
            return(Accepted(apiResult));
        }