Files
2026-01-13 18:07:01 -08:00

150 lines
6.1 KiB
Python

import datetime
class DataUI:
# Filter for selections that allow
def selectionChooser(self, fullList):
print("Please make a selection")
print(" [1]: Show all ")
print(" [2]: Show per truck")
print(" [3]: Show package")
SubMenuTreeSelection = input("")
selection = []
if "1" in SubMenuTreeSelection:
selection = fullList
if "2" in SubMenuTreeSelection:
print("Choose a truck ID [1,2,3]")
choice = input("")
for pkg in fullList:
if choice in pkg.truckId:
selection.append(pkg)
if "3" in SubMenuTreeSelection:
print("Choose a package ID [0..39]")
choice = input("")
for pkg in fullList:
if choice == str(pkg.id):
selection.append(pkg)
return selection
# Shows information about trucks
def Trucks(self, truck1, truck2, truck3):
trucks = [truck1, truck2, truck3]
print("")
for i,v in enumerate(trucks):
startTime = "Pending"
endTime = "Pending"
if v.startTime != None:
startTime = v.startTime.strftime('%H:%M')
if len(v.packages) == 0:
endTime = v.getTimeOfDay().strftime('%H:%M')
print(f"Truck [{v.id}] | "
f"Mileage: {v.mileage:.2f} | "
f"Departure: {startTime} | "
f"Arrival: {endTime} | "
f"DriveTime: {v.getDriveTime()} mintes")
print("")
# Shows information about packages
def Packages(self, package_hash):
selection = self.selectionChooser(package_hash)
print("")
for i,v in enumerate(selection):
truckID = v.truckId
if truckID == -1:
truckID = "None"
print(f"[{v.id:2}] | "
f"[DeliveryNumber]: {v.deliveryNumber:2} | "
f"[onTruck]: {truckID:4} | "
f"[Address]: {v.address[:20]:20} | "
f"[Status]: {v.status:10} | "
f"[Note]: {v.notes:10}")
print("")
# Shows information about delivery times and deadlines
def DeliveryTime(self, package_hash):
selection = self.selectionChooser(package_hash)
print("")
for i,v in enumerate(selection):
deadline = v.deadline
metDeadline = "False"
if isinstance(v.deadline, datetime.time):
deadline = v.deadline.strftime('%H:%M')
if v.timeStart != None and v.timeEnd != None:
if v.timeEnd <= v.deadline:
metDeadline = "True"
if v.deadline == datetime.time(23,59):
deadline = "EOD"
startTime = "Pending"
if v.timeStart != None:
startTime = v.timeStart.strftime('%H:%M')
endTime = "Pending"
if v.timeEnd != None:
endTime = v.timeEnd.strftime('%H:%M')
print(f"[{v.id:2}] | "
f"[StartTime]: {startTime:8} | "
f"[DelivedTime]: {endTime:8} | "
f"[Deadline]: {deadline:8} | "
f"[MetDeadline]: {metDeadline:5} | "
f"[Note]: {v.notes:10}")
print("")
# Main prompt for the UI
def MainSelectionPrompt(self, truck1, truck2, truck3, package_hash):
while True:
print("Please make a selection")
print(" [1]: Show stats for trucks")
print(" [2]: Show stats for packages")
print(" [3]: Check delivery times")
print(" [4]: Total Mileage for trucks")
print(" [5]: Cancel")
MenuTreeSelection = input("")
if "1" in MenuTreeSelection:
self.Trucks(truck1, truck2, truck3)
elif "2" in MenuTreeSelection:
self.Packages(package_hash)
elif "3" in MenuTreeSelection:
self.DeliveryTime(package_hash)
elif "4" in MenuTreeSelection:
totalDistance = truck1.mileage + truck2.mileage + truck3.mileage
print(f"\nTotal Mileage for all trucks: {totalDistance:.2f} miles\n")
elif "5" in MenuTreeSelection:
break
# Prompt for pausing the simulation and opening the menu for stats at specific times
def TimePrompt(self, currentTime: datetime.time, truck1, truck2, truck3, package_hash) -> datetime.time:
while True:
print(" [1]: Pause the simulation at a point in time")
print(" [2]: Run the simulation to the end")
print(" [3]: View stats for this moment in time")
selectionInput = input("")
if "1" in selectionInput:
while True:
print("Please input a time in format of [hh:mm] or type 'back' to return to menu")
timeInput = input("")
if timeInput.lower() == 'back':
break
try:
time = timeInput.split(":")
hour = int(time[0])
minute = int(time[1])
chosenTime = datetime.time(hour, minute)
if chosenTime > currentTime:
print(f"Simulation set to pause at {hour:02}:{minute:02}")
return chosenTime
else:
print(f"Error: Time must be later than {currentTime.strftime('%H:%M')}.")
except ValueError:
print(f"Invalid format '{timeInput}'. Use HH:MM (e.g., 10:30).")
elif "2" in selectionInput:
print("Running simulation until the end of the day.")
return datetime.time(23, 59)
elif "3" in selectionInput:
self.MainSelectionPrompt(truck1, truck2, truck3, package_hash)
else:
print("Invalid selection. Please choose 1, 2, or 3.")