wgu_repo/Data Structures and Algorithms II — C950/Task 2 - Python files + Screenshots/package.py

80 lines
2.3 KiB
Python

# Student ID: 012498637
# Student Name: Zakaria Benmoulay
# Course: C950 - Data Structures and Algorithms II
class Package:
def __init__(
self,
package_id,
address,
city,
state,
zip_code,
deadline,
weight,
notes="",
):
# Let's store the core delivery data from the Package File
self.package_id = int(package_id)
self.address = address.strip()
self.city = city.strip()
self.state = state.strip()
self.zip_code = str(zip_code).strip()
self.deadline = deadline.strip()
self.weight = weight
self.notes = notes.strip()
# Let's initialize the status tracking fields for the simulation
self.status = "At Hub"
self.departure_time = None
self.delivery_time = None
self.truck_id = None
# STATUS UPDATES
def mark_en_route(self, departure_time, truck_id):
# Called when a truck departs the hub carrying this package.
self.status = "En Route"
self.departure_time = departure_time
self.truck_id = truck_id
def mark_delivered(self, delivery_time):
# Called when the truck arrives at this package's delivery address.
self.status = "Delivered"
self.delivery_time = delivery_time
# TIME-BASED STATUS QUERY
def status_at(self, query_time):
# Return the status this package had at a specific point in time.
# Package is still at the hub if no truck has departed with it yet,
# or if the query time is before the truck's departure.
if self.departure_time is None or query_time < self.departure_time:
return "At Hub"
# Package is en route if the truck has left but delivery hasn't happened yet
if self.delivery_time is None or query_time < self.delivery_time:
return "En Route"
# Otherwise the package was already delivered by query_time
return "Delivered"
# DISPLAY
def __repr__(self):
return (
f"Package({self.package_id:>2}, "
f"{self.address:<38} "
f"Deadline: {self.deadline:<8} "
f"Wt: {self.weight:<4} "
f"Status: {self.status})"
)