def check_backpack(self): """Will display the cans contained in purchased_cans list in backpack""" if len(self.backpack.purchased_cans) == 0: user_interface.output_text("You have no cans in your backpack") else: for can in self.backpack.purchased_cans: user_interface.output_text(can.name)
def gather_change_from_register(self, change_value): change_list = [] while change_value > 0: if change_value >= 0.25 and self.register_has_coin("quarter"): change_list.append(self.get_coin_from_register("quarter")) change_value -= 0.25 elif change_value >= 0.10 and self.register_has_coin("dime"): change_list.append(self.get_coin_from_register("dime")) change_value -= 0.10 elif change_value >= 0.05 and self.register_has_coin("nickel"): change_list.append(self.get_coin_from_register("nickel")) change_value -= 0.05 elif change_value >= 0.01 and self.register_has_coin("penny"): change_list.append(self.get_coin_from_register("penny")) change_value -= 0.01 elif change_value == 0: break else: user_interface.output_text( "Error: Machine does not have enough change to complete transaction" ) self.deposit_coins_into_register(change_list) change_list = None break change_value = round(change_value, 2) return change_list
def calculate_transaction(self, customer_payment, selected_soda, customer): total_payment_value = self.calculate_coin_value(customer_payment) if total_payment_value < selected_soda.price: change_value = self.determine_change_value(total_payment_value, selected_soda.price) customer_change = self.gather_change_from_register(change_value) if customer_change is None: user_interface.output_text( 'Dispensing ${total_payment_value} back to customer') customer.add_coins_to_wallet(customer_payment) self.return_inventory(selected_soda) else: self.deposit_coins_into_register(customer_payment) customer.add_coins_to_wallet(customer_change) customer.add_can_to_backpack(selected_soda) user_interface.end_message(selected_soda, change_value) elif total_payment_value == selected_soda.price: self.deposit_coins_into_register(customer_payment) customer.add_can_to_backpack(selected_soda) user_interface.end_message(selected_soda, 0) else: user_interface.output_text( "You do not have enough money to purchase this item, returning payment" ) customer.add_coins_to_wallet(customer_payment) self.return_inventory(selected_soda)
def run_transaction(self, customer): selected_soda_name = user_interface.soda_selection(self.inventory) selected_soda = self.get_inventory_soda(selected_soda_name) customer_payment = customer.gather_coins_from_wallet(selected_soda) self.calculate_transaction(customer_payment, selected_soda, customer) user_interface.output_text("Transaction complete")
def gather_coins_from_wallet(self, selected_soda): """Method allowing user to choose coins from wallet for payment""" will_proceed = True customer_payment = [] user_interface.output_text("Continue to add coins until you are ready to insert them into the machine") while will_proceed: user_interface.display_can_cost(selected_soda) user_interface.display_payment_value(customer_payment) coin_name = user_interface.coin_selection() if coin_name == "Done": break payment_coin = self.get_wallet_coin(coin_name) if payment_coin is not None: customer_payment.append(payment_coin) else: user_interface.output_text("You do not have any of those coins, try again") return customer_payment