protected Transaction(Transaction transaction)
        {
            this.customer = transaction.customer;
            this.film = transaction.film;
            this.days = transaction.days;
            this.price = transaction.price;
            this.bonusPoints = transaction.bonusPoints;
            this.bonusable = transaction.bonusable;

            if (transaction.useBonus != null) this.useBonus = transaction.useBonus;
            else this.useBonus = false;
        }
        public ConfirmedTransaction(Transaction transaction)
            : base(transaction)
        {
            if (this.useBonus && this.bonusable)
            {
                this.price = 0;
                this.customer.DischargeBonus(this.bonusPoints);
            }
            else
            {
                this.bonusPoints = 0;
                this.customer.ChargeBonus(this.film.FilmType);
            }

            this.timeOfTransaction = DateTime.Now;
            this.film.Status = false;
        }
        public string CreateTransaction(int customerId, int filmId, int numberOfDays)
        {
            this.currentTransaction = null;
            if (this.customersList.customers.ContainsKey(customerId) && this.storeInventory.GetAvailableFilms().Find(s => s.FilmId == filmId) != null && numberOfDays > 0)
            {
                currentTransaction = new Transaction(this.customersList.customers[customerId], this.storeInventory.GetAvailableFilms().Find(s => s.FilmId == filmId), numberOfDays);
                return currentTransaction.GetPriceString();
            }

            throw new ArgumentException(string.Format("invalid values {0} {1} {2}", customerId, filmId, numberOfDays), "customerId, filmId, numberOfDays");
        }