Guest User

deliveries.py

a guest
Feb 12th, 2025
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.30 KB | None | 0 0
  1. import datetime
  2. from typing import Any
  3. from ansi import BRIGHT_YELLOW, BRIGHT_GREEN, BRIGHT_RED, UNDERLINE, RESET
  4. from footer import get_user_choice, invalid_choice
  5. from game_engine import game_engine
  6.  
  7. def remove_ordinal(date_str: str) -> str:
  8.     """
  9.    Remove ordinal suffix from a day; e.g. "4th January 1950" becomes "4 January 1950".
  10.    """
  11.     parts = date_str.split()
  12.     if len(parts) == 3:
  13.         day = ''.join(filter(str.isdigit, parts[0]))
  14.         return f"{day} {parts[1]} {parts[2]}"
  15.     return date_str
  16.  
  17. def process_deliveries() -> None:
  18.     """
  19.    Check each mule – if its delivery date has passed, move the drugs to inventory.
  20.    """
  21.     # Use the calendar's current_date attribute directly.
  22.     current_date = game_engine.calendar.current_date
  23.     for member in game_engine.gang_members.gang_members_data.values():
  24.         if member.get("role") == "Mule" and member.get("delivery_date_numeric"):
  25.             try:
  26.                 delivery_date = datetime.datetime.strptime(member["delivery_date_numeric"], "%d%m%Y").date()
  27.             except ValueError as e:
  28.                 print(f"{BRIGHT_RED}Error parsing delivery date for {member.get('name', 'Unknown')}: {e}{RESET}")
  29.                 continue
  30.  
  31.             if current_date >= delivery_date:
  32.                 drug: Any = member.get("in_transit")
  33.                 qty: int = member.get("quantity", 0)
  34.                 if drug and qty > 0:
  35.                     game_engine.inventory.add_to_inventory(drug, qty)
  36.                     print(f"{BRIGHT_GREEN}Drugs Delivered: {member.get('name', 'Unknown')} delivered {qty} units of {drug} to inventory.{RESET}")
  37.                 member["in_transit"] = None
  38.                 member["quantity"] = 0
  39.                 member["delivery_date"] = None
  40.                 member["delivery_date_numeric"] = None
  41.  
  42. def print_deliveries_header() -> None:
  43.     """
  44.    Print the header for the in-transit deliveries screen.
  45.    """
  46.     from header import game_stats
  47.     print(f"\n{UNDERLINE}IN-TRANSIT DELIVERIES{RESET}")
  48.     game_stats.display_header()
  49.  
  50. def display_deliveries_list() -> None:
  51.     """
  52.    Display the list of all gang members with mule role.
  53.    """
  54.     header = f"{'ID':<4} {'COURIER':<25} {'IN-TRANSIT':<15} {'QUANTITY':<15} {'DELIVERY DATE':<15}"
  55.     print(f"{BRIGHT_YELLOW}{header}{RESET}")
  56.     print("-" * 80)
  57.     # Filter to only gang members with role "Mule"
  58.     mules = [m for m in game_engine.gang_members.gang_members_data.values() if m.get("role") == "Mule"]
  59.     if not mules:
  60.         print(f"{BRIGHT_RED}No gang members have been assigned the mule role.{RESET}")
  61.     else:
  62.         for idx, member in enumerate(mules, start=1):
  63.             name = member.get("name", "N/A")
  64.             in_transit = member.get("in_transit") or "N/A"
  65.             qty = member.get("quantity") if member.get("quantity") and member.get("quantity") > 0 else "N/A"
  66.             delivery_date = member.get("delivery_date") or "N/A"
  67.             print(f"{idx:<4} {name:<25} {in_transit:<15} {qty:<15} {delivery_date:<15}")
  68. def display_menu() -> None:
  69.     """
  70.    Display menu options for the deliveries screen.
  71.    """
  72.     print(f"\n{BRIGHT_YELLOW}B{RESET} - Backlog")
  73.     print(f"{BRIGHT_YELLOW}H{RESET} - Help")
  74.     print(f"{BRIGHT_YELLOW}X{RESET} - Back")
  75.  
  76. def deliveries_menu() -> None:
  77.     """
  78.    Display and handle the deliveries menu.
  79.    """
  80.     while True:
  81.         print_deliveries_header()
  82.         display_deliveries_list()
  83.         display_menu()
  84.  
  85.         choice = get_user_choice()
  86.         if choice.isdigit():
  87.             # Gather the mules list (must match the displayed ordering)
  88.             mules = [m for m in game_engine.gang_members.gang_members_data.values() if m.get("role") == "Mule"]
  89.             index = int(choice) - 1
  90.             if 0 <= index < len(mules):
  91.                 from mule_assignment import assign_mule_delivery
  92.                 assign_mule_delivery(mules[index])
  93.             else:
  94.                 print(f"{BRIGHT_RED}Invalid mule selection.{RESET}")
  95.         elif choice.upper() == "B":
  96.             from backlog import backlog_menu
  97.             backlog_menu()
  98.         elif choice.upper() == "H":
  99.             from help_menus import show_help
  100.             show_help("DELIVERIES")
  101.         elif choice.upper() == "X":
  102.             break
  103.         else:
  104.             invalid_choice()
Add Comment
Please, Sign In to add comment