private void _addOrUpdateProductProductionDateWithAmount(ProductStorageEntity productStorage, ProductForBillCreationDto newProduct, ProductForBillCreationDto oldProduct)
        {
            if (newProduct.DetailAmountList != null && newProduct.DetailAmountList.Count > 0)
            {
                var oldProductProductionDateList = JsonConvert.DeserializeObject <List <ProductProductionDateDto> >(productStorage.ProductProductionDateList);

                foreach (var newProductDetailAmount in newProduct.DetailAmountList)
                {
                    if (newProductDetailAmount.Amount <= 0)
                    {
                        continue;
                    }

                    var oldProductProductionDate = oldProductProductionDateList.SingleOrDefault(p => p.ProductionWeekYear == newProductDetailAmount.ProductionWeekYear);
                    if (oldProductProductionDate == null)
                    {
                        // add new product production date
                        var newProductProductionDate = new ProductProductionDateDto()
                        {
                            ProductionWeekYear = newProductDetailAmount.ProductionWeekYear,
                            ProductionDate     = DateTimeHelper.ConvertWeekYearToDateTime(newProductDetailAmount.ProductionWeekYear),
                            Inventory          = 0 - newProductDetailAmount.Amount
                        };
                        oldProductProductionDateList.Add(newProductProductionDate);
                    }
                    else
                    {
                        double oldAmount = 0;
                        if (oldProduct != null)
                        {
                            var oldDetailAmount = oldProduct.DetailAmountList.SingleOrDefault(d => d.ProductionWeekYear == newProductDetailAmount.ProductionWeekYear);
                            oldAmount = oldDetailAmount.Amount;
                        }

                        oldProductProductionDate.Inventory += oldAmount - newProductDetailAmount.Amount;
                    }

                    productStorage.ProductProductionDateList = JsonConvert.SerializeObject(oldProductProductionDateList);
                }
                _context.ProductStorages.Update(productStorage);
            }
        }
        private void _addOrUpdateProductProductionDate(ProductStorageEntity productStorage, ProductForBillCreationDto product, bool isDecreaseInventory)
        {
            if (product.DetailAmountList != null && product.DetailAmountList.Count > 0)
            {
                var productProductionDateList = JsonConvert.DeserializeObject <List <ProductProductionDateDto> >(productStorage.ProductProductionDateList);

                foreach (var detailAmount in product.DetailAmountList)
                {
                    var productProductionDate = productProductionDateList.SingleOrDefault(p => p.ProductionWeekYear == detailAmount.ProductionWeekYear);
                    if (productProductionDate == null)
                    {
                        // add new product production date
                        var newProductProductionDate = new ProductProductionDateDto()
                        {
                            ProductionWeekYear = detailAmount.ProductionWeekYear,
                            ProductionDate     = DateTimeHelper.ConvertWeekYearToDateTime(detailAmount.ProductionWeekYear),
                            Inventory          = 0 - detailAmount.Amount
                        };
                        productProductionDateList.Add(newProductProductionDate);
                    }
                    else
                    {
                        if (isDecreaseInventory)
                        {
                            productProductionDate.Inventory -= detailAmount.Amount;
                        }
                        else
                        {
                            productProductionDate.Inventory += detailAmount.Amount;
                        }
                    }


                    productStorage.ProductProductionDateList = JsonConvert.SerializeObject(productProductionDateList);
                }
                _context.ProductStorages.Update(productStorage);
            }
        }