public async Task <ServiceResponse <StockEditLogDTO_ToReturn> > AddStockEditLog(StockEditLogDTO_ToAdd input)
        {
            var errMsg = "";

            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    //validate exsist product
                    var product = await GetActiveProductById(input.ProductId);

                    if (product is null)
                    {
                        errMsg = $"Product id:{input.ProductId} not found";
                        _logger.LogError(errMsg);
                        return(ResponseResult.Failure <StockEditLogDTO_ToReturn>(errMsg));
                    }

                    //validate stock number
                    var stockAfter = product.Stock + input.AmountNumber;
                    if (stockAfter < 0)
                    {
                        errMsg = $"Invalid amount number input";
                        _logger.LogError(errMsg);
                        return(ResponseResult.Failure <StockEditLogDTO_ToReturn>(errMsg));
                    }

                    //create stock edit
                    var stockEditToAdd = new StockEditLog();
                    stockEditToAdd.ProductId    = input.ProductId;
                    stockEditToAdd.AmountNumber = input.AmountNumber;
                    stockEditToAdd.AmountBefore = product.Stock;
                    stockEditToAdd.AmountAfter  = stockAfter;
                    stockEditToAdd.Remark       = input.Remark;
                    stockEditToAdd.CreatedBy    = GetUsername();
                    stockEditToAdd.CreatedDate  = Now();

                    //update product stock
                    product.Stock = stockAfter;
                    _context.Update(product);
                    await _context.StockEditLogs.AddAsync(stockEditToAdd);

                    await _context.SaveChangesAsync();

                    transaction.Commit();

                    var dto = _mapper.Map <StockEditLogDTO_ToReturn>(stockEditToAdd);

                    return(ResponseResult.Success <StockEditLogDTO_ToReturn>(dto));
                }
                catch (System.Exception ex)
                {
                    transaction.Rollback();
                    _logger.LogError(ex.Message);
                    return(ResponseResult.Failure <StockEditLogDTO_ToReturn>(ex.Message));
                }
            }
        }
Exemple #2
0
 public async Task <IActionResult> Post(StockEditLogDTO_ToAdd input)
 {
     return(Ok(await service.AddStockEditLog(input)));
 }