def deliver_package(self, package, address_street, address_distance, packages): """ Deliver package, adjust the truck's time and mileage, and record package statuses Check package delivery status attribute to make sure it is 'In Transit" Remove package from truck's 'packages_on_truck' list and Decrement 'number_of_packages' on truck by 1 Calculate the distance needed to travel to deliver package - calculate_travel_distance() Add distance needed to travel to truck's total mileage Calculate the time needed to travel distance - calculate_travel_time() Record deliver time by setting package.actual_delivery_time to current time Display package id, destination address, distance, travel time and truck num to console Change truck's location to the destination addresses's location code Update package's status to show its been delivered (3 = "Delivered") Add snapshot of the status of all packages to status_log - Helper.add_to_status_log() """ # ensure package is not at the hub if package.delivery_status == "In transit": # remove package from truck self.packages_on_truck.remove(package) # decrease truck's package count self.num_of_packages -= 1 # calculate travel distance distance = self.calculate_travel_distance(package.address, address_street, address_distance) # updates truck's total mileage self.miles_traveled = float('%.1f' % (self.miles_traveled + distance)) # calculate travel time travel_time = self.calculate_travel_time(distance) # update trucks time to delivery time self.clock += timedelta(minutes=travel_time) # set package's delivery time package.actual_delivery_time = self.clock.strftime("%-I:%M:%S") print("\n\n DESTINATION: " + package.address + " DISTANCE: " + str(distance) + " miles " + " TRAVEL TIME: " + str(travel_time) + " minutes") print("Package " + package.ID + " delivered and unloaded from [ TRUCK " + str(self.truck_number) + " ] at " + str(package.actual_delivery_time)) # Change truck's current location self.current_location = address_street[package.address] # change package's delivery status to 'delivered' package.set_delivery_status(3) # set Helper.clock time Helper.clock = self.clock Helper.add_to_status_log(self.clock, packages) else: print("\n Package " + package.ID + " is not on truck " + str(self.truck_number))