public override ITransaction ToTransaction(IBarcodeSystemManager barcodeSystemManager)
        {
            IUser    user    = barcodeSystemManager.GetUserByUsername(Username);
            IProduct product = barcodeSystemManager.GetProductById(productId);

            return(new BuyTransaction(Id, user, product, Date, count));
        }
        private void BuyProduct(string username, string productIdString, uint count)
        {
            if (!uint.TryParse(productIdString, out uint productId))
            {
                systemUI.DisplayProductNotFound(productIdString);
                return;
            }

            if (count < 1)
            {
                systemUI.DisplayError($"Invalid product count: {count}.");
                return;
            }

            try
            {
                IUser    user    = systemManager.GetUserByUsername(username);
                IProduct product = systemManager.GetProductById(productId);

                systemManager.BuyProduct(user, product, count);
                systemUI.DisplayUserBuysProduct(user, product, count);
            }
            catch (Exception e)
            {
                systemUI.DisplayError(e.Message);
            };
        }
        protected IProduct GetProduct(string productIdString, IBarcodeSystemUI systemUI, IBarcodeSystemManager systemManager)
        {
            if (!uint.TryParse(productIdString, out uint productId))
            {
                systemUI.DisplayProductNotFound(productIdString);
                return(null);
            }

            return(systemManager.GetProductById(productId));
        }
        public void Execute(string[] args, IBarcodeSystemUI systemUI, IBarcodeSystemManager systemManager)
        {
            uint productId = uint.Parse(args[0]);

            product = systemManager.GetProductById(productId);

            if (canBeBoughtOnCredit == product.CanBeBoughtOnCredit)
            {
                output = canBeBoughtOnCredit
                    ? $"Product {product.Name} can already be bought on credit!"
                    : $"Product {product.Name} already cannot be bought on credit!";
            }
            else
            {
                output = canBeBoughtOnCredit
                    ? $"Product {product.Name} can now be bought on credit."
                    : $"Product {product.Name} can no longer be bought on credit.";

                product.CanBeBoughtOnCredit = canBeBoughtOnCredit;
            }
        }