/// <summary>
        /// Adds or updates <see cref="IProductVariantDetachedContent"/>.
        /// </summary>
        /// <param name="destination">
        /// The destination.
        /// </param>
        /// <param name="display">
        /// The display.
        /// </param>
        internal static void AddOrUpdateDetachedContent(this IProductBase destination, ProductDisplayBase display)
        {
            if (destination.DetachedContents.Any())
            {
                // detached content
                var removedLanguages =
                    destination.DetachedContents.Where(
                        x => !display.DetachedContents.Select(y => y.CultureName).Contains(x.CultureName));

                foreach (var lang in removedLanguages)
                {
                    destination.DetachedContents.RemoveItem(lang.CultureName);
                }
            }


            foreach (var detachedContent in display.DetachedContents.ToArray())
            {
                if (destination.DetachedContents.Contains(detachedContent.CultureName))
                {
                    var destContent = destination.DetachedContents[detachedContent.CultureName];
                    detachedContent.ToProductVariantDetachedContent(destContent);
                }
                else
                {
                    var variant = display.GetType().IsAssignableFrom(typeof(ProductDisplay))
                                      ? ((ProductDisplay)display).AsMasterVariantDisplay()
                                      : (ProductVariantDisplay)display;
                    destination.DetachedContents.Add(detachedContent.ToProductVariantDetachedContent(variant.Key));
                }
            }
        }
Example #2
0
        public void UserBuysProduct(string username, string productId)
        {
            IUser        user    = stregsystem.GetUserByUsername(username);
            IProductBase product = stregsystem.GetProductById(int.Parse(productId));
            decimal      cost    = product.Price;

            ui.DisplayUserBuysProduct(user, product);
            stregsystem.BuyProduct(user, product, cost);
        }
Example #3
0
        public BuyTransaction BuyProduct(IUser user, IProductBase product, decimal amount)
        {
            BuyTransaction buyTransaction = new BuyTransaction(user, DateTime.Now, product);


            ExecuteTransaction(buyTransaction);

            return(buyTransaction);
        }
Example #4
0
        public void ChangeProductStatus(string[] args, bool status)
        {
            if (args[0] != null)
            {
                IProductBase product = stregsystem.GetProductById(int.Parse(args[1]));

                product.IsActive = status;
            }
        }
Example #5
0
        public void ChangeProductCreditStatus(string[] args, bool status)
        {
            if (args[0] != null)
            {
                IProductBase product = stregsystem.GetProductById(int.Parse(args[1]));

                product.CanBeBoughtOnCredit = status;
                Console.WriteLine($"{product.MyId} buy on credit status is now {status}");
            }
        }
Example #6
0
        private void AssertDetachedContentValues(IProductBase original, IProductBase clone)
        {
            // product contents match
            foreach (var dc in original.DetachedContents.ToArray())
            {
                // this also checks the culture
                var cloneDc = clone.DetachedContents.FirstOrDefault(x => x.CultureName == dc.CultureName);
                Assert.NotNull(cloneDc);

                foreach (var value in dc.DetachedDataValues)
                {
                    var value1     = value;
                    var cloneValue = cloneDc.DetachedDataValues.FirstOrDefault(x => x.Key == value1.Key);
                    Assert.NotNull(cloneValue);
                    Assert.AreEqual(value.Value, cloneValue.Value);
                }
            }
        }
Example #7
0
        private void AssertProductBaseData(IProductBase original, IProductBase clone)
        {
            Assert.AreEqual(original.Price, clone.Price);
            Assert.AreEqual(original.Barcode, clone.Barcode);
            Assert.AreEqual(original.Manufacturer, clone.Manufacturer);
            Assert.AreEqual(original.ManufacturerModelNumber, clone.ManufacturerModelNumber);
            Assert.AreEqual(original.CostOfGoods, clone.CostOfGoods);
            Assert.AreEqual(original.OnSale, clone.OnSale);
            Assert.AreEqual(original.Taxable, clone.Taxable);
            Assert.AreEqual(original.Shippable, clone.Shippable);
            Assert.AreEqual(original.Height, clone.Height);
            Assert.AreEqual(original.Weight, clone.Weight);
            Assert.AreEqual(original.Width, clone.Width);
            Assert.AreEqual(original.Length, clone.Length);

            Assert.AreEqual(original.CatalogInventories.Count(), clone.CatalogInventories.Count(), "Inventory counts do not match");

            Assert.AreEqual(original.Download, clone.Download);
            Assert.AreEqual(original.OutOfStockPurchase, clone.OutOfStockPurchase);
        }
        private void AssertProductBaseData(IProductBase original, IProductBase clone)
        {
            Assert.AreEqual(original.Price, clone.Price);
            Assert.AreEqual(original.Barcode, clone.Barcode);
            Assert.AreEqual(original.Manufacturer, clone.Manufacturer);
            Assert.AreEqual(original.ManufacturerModelNumber, clone.ManufacturerModelNumber);
            Assert.AreEqual(original.CostOfGoods, clone.CostOfGoods);
            Assert.AreEqual(original.OnSale, clone.OnSale);
            Assert.AreEqual(original.Taxable, clone.Taxable);
            Assert.AreEqual(original.Shippable, clone.Shippable);
            Assert.AreEqual(original.Height, clone.Height);
            Assert.AreEqual(original.Weight, clone.Weight);
            Assert.AreEqual(original.Width, clone.Width);
            Assert.AreEqual(original.Length, clone.Length);

            Assert.AreEqual(original.CatalogInventories.Count(), clone.CatalogInventories.Count(), "Inventory counts do not match");

            Assert.AreEqual(original.Download, clone.Download);
            Assert.AreEqual(original.OutOfStockPurchase, clone.OutOfStockPurchase);
        }
        private void AssertDetachedContentValues(IProductBase original, IProductBase clone)
        {
            // product contents match
            foreach (var dc in original.DetachedContents.ToArray())
            {
                // this also checks the culture
                var cloneDc = clone.DetachedContents.FirstOrDefault(x => x.CultureName == dc.CultureName);
                Assert.NotNull(cloneDc);

                foreach (var value in dc.DetachedDataValues)
                {
                    var value1 = value;
                    var cloneValue = cloneDc.DetachedDataValues.FirstOrDefault(x => x.Key == value1.Key);
                    Assert.NotNull(cloneValue);
                    Assert.AreEqual(value.Value, cloneValue.Value);
                }
            }
        }
 /// <summary>
 /// Adds product base values
 /// </summary>
 /// <param name="extendedData">
 /// The extended data
 /// </param>
 /// <param name="productBase">
 /// The base product
 /// </param>
 private static void AddBaseProductValues(ExtendedDataCollection extendedData, IProductBase productBase)
 {
     extendedData.SetValue(Constants.ExtendedDataKeys.CostOfGoods, productBase.CostOfGoods == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productBase.CostOfGoods).ToString(CultureInfo.InvariantCulture));
     extendedData.SetValue(Constants.ExtendedDataKeys.Weight, productBase.Weight == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productBase.Weight).ToString(CultureInfo.InvariantCulture));
     extendedData.SetValue(Constants.ExtendedDataKeys.Width, productBase.Width == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productBase.Width).ToString(CultureInfo.InvariantCulture));
     extendedData.SetValue(Constants.ExtendedDataKeys.Height, productBase.Height == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productBase.Height).ToString(CultureInfo.InvariantCulture));
     extendedData.SetValue(Constants.ExtendedDataKeys.Length, productBase.Length == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productBase.Length).ToString(CultureInfo.InvariantCulture));
     extendedData.SetValue(Constants.ExtendedDataKeys.Barcode, productBase.Barcode);
     extendedData.SetValue(Constants.ExtendedDataKeys.Price, productBase.Price.ToString(CultureInfo.InvariantCulture));
     extendedData.SetValue(Constants.ExtendedDataKeys.OnSale, productBase.OnSale.ToString());
     extendedData.SetValue(Constants.ExtendedDataKeys.Manufacturer, productBase.Manufacturer);
     extendedData.SetValue(Constants.ExtendedDataKeys.ManufacturerModelNumber, productBase.ManufacturerModelNumber);
     extendedData.SetValue(Constants.ExtendedDataKeys.SalePrice, productBase.SalePrice == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productBase.SalePrice).ToString(CultureInfo.InvariantCulture));
     extendedData.SetValue(Constants.ExtendedDataKeys.TrackInventory, productBase.TrackInventory.ToString());
     extendedData.SetValue(Constants.ExtendedDataKeys.OutOfStockPurchase, productBase.OutOfStockPurchase.ToString());
     extendedData.SetValue(Constants.ExtendedDataKeys.Taxable, productBase.Taxable.ToString());
     extendedData.SetValue(Constants.ExtendedDataKeys.Shippable, productBase.Shippable.ToString());
     extendedData.SetValue(Constants.ExtendedDataKeys.Download, productBase.Download.ToString());
     extendedData.SetValue(Constants.ExtendedDataKeys.DownloadMediaId, productBase.DownloadMediaId.ToString());
     extendedData.SetValue(Constants.ExtendedDataKeys.VersionKey, productBase.VersionKey.ToString());
 }
Example #11
0
        public IProductBase GetProductById(int id)
        {
            IProductBase product = Products.Find(x => x.MyId == id);

            return(product ?? throw new ProductDoesNotExistException("The product does not exist"));
        }
Example #12
0
 public BuyTransaction(IUser user, DateTime date, IProductBase product) : base(user, date, product.Price)
 {
     Product = product;
 }
 public void DisplayInsufficientCash(IUser user, IProductBase product)
 {
     Console.WriteLine($"You've tried to purchase {product.Name}. You do not have the funds");
 }
 public void DisplayUserBuysProduct(IUser user, IProductBase product)
 {
     Console.WriteLine($"{user.UserName}: You have purchased {product.Name}");
 }