public async Task <IActionResult> AddMovementStock([FromQuery] AddMovementStockDto newmovementstock)
 {
     return(Ok(await _stock.AddMovementStock(newmovementstock)));
 }
        public async Task <ServiceResponse <List <GetMovementStockDto> > > AddMovementStock(AddMovementStockDto newMovementStock)
        {
            try
            {
                //validate product
                var prod = _dBContext.Products.FirstOrDefault(x => x.Id == newMovementStock.ProductId);
                if (prod is null)
                {
                    return(ResponseResult.Failure <List <GetMovementStockDto> >($"Product Id {newMovementStock.ProductId} not found"));
                }


                //validate movement type
                var moveType = _dBContext.MovementTypes.FirstOrDefault(x => x.Id == newMovementStock.MovementTypeId);
                if (moveType is null)
                {
                    return(ResponseResult.Failure <List <GetMovementStockDto> >($"Movement Type {newMovementStock.MovementTypeId} not found"));
                }

                //Validate product StockCount <= new quantity
                if (moveType.Id == 2)
                {
                    if (newMovementStock.Quantity > prod.StockCount)
                    {
                        return(ResponseResult.Failure <List <GetMovementStockDto> >($"New quantity product less than quantity in stock."));
                    }
                }

                Models.MovementStock stockDb = new Models.MovementStock();
                stockDb.ProductId      = newMovementStock.ProductId;
                stockDb.MovementTypeId = newMovementStock.MovementTypeId;
                stockDb.Quantity       = newMovementStock.Quantity;
                stockDb.QuantityOld    = prod.StockCount;
                stockDb.CreateById     = Guid.Parse(GetUserId());
                stockDb.CreateDate     = Now();
                stockDb.ExpiredDate    = Now();
                stockDb.Remark         = newMovementStock.Remark;
                _dBContext.MovementStocks.Add(stockDb);
                await _dBContext.SaveChangesAsync();

                //Update on Product Table
                prod.StockCount = GetTotalQuantity(moveType.Id, prod.StockCount, newMovementStock.Quantity);
                _dBContext.Products.Update(prod);
                await _dBContext.SaveChangesAsync();



                //_dBContext.SaveChanges();


                // var gStock = await _dBContext.MovementStocks.Include(x => x.Product).
                //                                              Include(x => x.MovementType).
                //                                              AsNoTracking().ToListAsync();

                // List<GetMovementStockDto> stockDto = _mapper.Map<List<GetMovementStockDto>>(gStock);
                return(ResponseResult.Success(await GetMovementStockDtosList()));
            }
            catch (System.Exception ex)
            {
                //Write log
                _log.LogError($"AddMovementStock is error detail: {ex.Message}");
                //Return
                return(ResponseResult.Failure <List <GetMovementStockDto> >($"AddMovementStock error detail: {ex.Message}"));
            }
        }