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)); } } }
public async Task <IActionResult> Post(StockEditLogDTO_ToAdd input) { return(Ok(await service.AddStockEditLog(input))); }