示例#1
0
        public async Task <ServiceResponse <GetWarehouseTransactionItemDto> > AddItemToTransactionAsync(int warehouseTransactionId, AddWarehouseItemDto dto)
        {
            var response = new ServiceResponse <GetWarehouseTransactionItemDto>();

            try
            {
                var dbWarehouseTransaction = await _context.WarehouseTransactions
                                             .FirstOrDefaultAsync(x => x.Id == warehouseTransactionId);

                if (dbWarehouseTransaction == null)
                {
                    throw new WarehouseTransactionNotFoundException();
                }

                if (!dbWarehouseTransaction.CanModify())
                {
                    throw new WarehouseTransactionModifiedException();
                }

                var dbProduct = await _context.Products
                                .Include(x => x.Category)
                                .FirstOrDefaultAsync(x => x.Id == dto.ProductId);

                if (dbProduct == null)
                {
                    throw new ProductNotFoundException();
                }

                var existedWarehouseTransactionItem = await _context.WarehouseTransactionItems
                                                      .Include(x => x.WarehouseTransaction)
                                                      .Include(x => x.Product)
                                                      .ThenInclude(x => x.Category)
                                                      .FirstOrDefaultAsync(x => x.ProductId == dto.ProductId &&
                                                                           x.WarehouseTransaction.Id == warehouseTransactionId);

                if (existedWarehouseTransactionItem != null)
                {
                    existedWarehouseTransactionItem.Quantity = dto.Quantity;

                    _context.WarehouseTransactionItems.Update(existedWarehouseTransactionItem);
                    await _context.SaveChangeWithValidationAsync();

                    response.Data = _mapper.Map <GetWarehouseTransactionItemDto>(existedWarehouseTransactionItem);
                }
                else
                {
                    var newWarehouseTransactionItem = new WarehouseTransactionItem()
                    {
                        WarehouseTransaction = dbWarehouseTransaction,
                        ProductId            = dbProduct.Id,
                        Product  = dbProduct,
                        Quantity = dto.Quantity,
                    };

                    await _context.WarehouseTransactionItems.AddAsync(newWarehouseTransactionItem);

                    await _context.SaveChangeWithValidationAsync();

                    response.Data = _mapper.Map <GetWarehouseTransactionItemDto>(newWarehouseTransactionItem);
                }


                return(response);
            }
            catch (BaseServiceException ex)
            {
                response.Success = false;
                response.Code    = ex.Code;
                response.Message = ex.ErrorMessage;


                _logger.LogError(ex.Message, ex.StackTrace);
                return(response);
            }
            catch (Exception ex)
            {
                response.Success = false;
                response.Code    = ErrorCode.WAREHOUSE_TRANSACTION_ITEM_UNEXPECTED_ERROR;
                response.Message = ex.Message;

                _logger.LogError(ex.Message, ex.StackTrace);
                return(response);
            }
        }
示例#2
0
        public async Task <IActionResult> AddItemToTransaction([FromRoute] int warehouseTransactionId, [FromBody] AddWarehouseItemDto dto)
        {
            var res = await _service.AddItemToTransactionAsync(warehouseTransactionId, dto);

            if (res.Success)
            {
                return(Ok(res));
            }

            return(BadRequest(res));
        }