public async Task <ServiceResponse <GetProductDto> > AddProduct(AddProductDto newProduct) { try { //validate product var prodGrp = _dBContext.ProductGroups.FirstOrDefault(x => x.Id == newProduct.ProductGroupId); if (prodGrp is null) { return(ResponseResult.Failure <GetProductDto>($"ProductGroup Id '{newProduct.ProductGroupId}' not found")); } //Validate duplicate var prodDb = await _dBContext.Products.FirstOrDefaultAsync(x => x.Name == newProduct.Name); if (prodDb != null) { return(ResponseResult.Failure <GetProductDto>($"Product name '{newProduct.Name}' is duplicate")); } Product prod = new Product(); prod.Name = newProduct.Name; prod.Price = newProduct.Price; prod.ProductGroupId = newProduct.ProductGroupId; prod.StockCount = newProduct.StockCount; prod.IsActive = newProduct.IsActive; prod.CreateById = Guid.Parse(GetUserId()); prod.CreatedDate = Now(); //var prodDB = _mapper.Map<Product>(newProduct); _dBContext.Products.Add(prod); await _dBContext.SaveChangesAsync(); var dto = _mapper.Map <GetProductDto>(prod); //Update movement stock Models.MovementStock stockDb = new Models.MovementStock(); stockDb.ProductId = dto.Id; stockDb.MovementTypeId = 1; stockDb.Quantity = newProduct.StockCount; stockDb.QuantityOld = prod.StockCount; stockDb.CreateById = Guid.Parse(GetUserId()); stockDb.CreateDate = Now(); stockDb.ExpiredDate = Now(); stockDb.Remark = "Add new product with add StockCount"; _dBContext.MovementStocks.Add(stockDb); await _dBContext.SaveChangesAsync(); Product saveProd = await _dBContext.Products.Include(x => x.ProductGroup).FirstOrDefaultAsync(x => x.Name == prod.Name); GetProductDto prodDto = _mapper.Map <GetProductDto>(saveProd); return(ResponseResult.Success(prodDto)); } catch (System.Exception ex) { //Write log _log.LogError($"AddProduct is error detail: {ex.Message}"); //Return return(ResponseResult.Failure <GetProductDto>($"AddProduct error detail: {ex.Message}")); } }
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}")); } }