Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import datetime
- from typing import Any
- from ansi import BRIGHT_YELLOW, BRIGHT_GREEN, BRIGHT_RED, UNDERLINE, RESET
- from footer import get_user_choice, invalid_choice
- from game_engine import game_engine
- def remove_ordinal(date_str: str) -> str:
- """
- Remove ordinal suffix from a day; e.g. "4th January 1950" becomes "4 January 1950".
- """
- parts = date_str.split()
- if len(parts) == 3:
- day = ''.join(filter(str.isdigit, parts[0]))
- return f"{day} {parts[1]} {parts[2]}"
- return date_str
- def process_deliveries() -> None:
- """
- Check each mule – if its delivery date has passed, move the drugs to inventory.
- """
- # Use the calendar's current_date attribute directly.
- current_date = game_engine.calendar.current_date
- for member in game_engine.gang_members.gang_members_data.values():
- if member.get("role") == "Mule" and member.get("delivery_date_numeric"):
- try:
- delivery_date = datetime.datetime.strptime(member["delivery_date_numeric"], "%d%m%Y").date()
- except ValueError as e:
- print(f"{BRIGHT_RED}Error parsing delivery date for {member.get('name', 'Unknown')}: {e}{RESET}")
- continue
- if current_date >= delivery_date:
- drug: Any = member.get("in_transit")
- qty: int = member.get("quantity", 0)
- if drug and qty > 0:
- game_engine.inventory.add_to_inventory(drug, qty)
- print(f"{BRIGHT_GREEN}Drugs Delivered: {member.get('name', 'Unknown')} delivered {qty} units of {drug} to inventory.{RESET}")
- member["in_transit"] = None
- member["quantity"] = 0
- member["delivery_date"] = None
- member["delivery_date_numeric"] = None
- def print_deliveries_header() -> None:
- """
- Print the header for the in-transit deliveries screen.
- """
- from header import game_stats
- print(f"\n{UNDERLINE}IN-TRANSIT DELIVERIES{RESET}")
- game_stats.display_header()
- def display_deliveries_list() -> None:
- """
- Display the list of all gang members with mule role.
- """
- header = f"{'ID':<4} {'COURIER':<25} {'IN-TRANSIT':<15} {'QUANTITY':<15} {'DELIVERY DATE':<15}"
- print(f"{BRIGHT_YELLOW}{header}{RESET}")
- print("-" * 80)
- # Filter to only gang members with role "Mule"
- mules = [m for m in game_engine.gang_members.gang_members_data.values() if m.get("role") == "Mule"]
- if not mules:
- print(f"{BRIGHT_RED}No gang members have been assigned the mule role.{RESET}")
- else:
- for idx, member in enumerate(mules, start=1):
- name = member.get("name", "N/A")
- in_transit = member.get("in_transit") or "N/A"
- qty = member.get("quantity") if member.get("quantity") and member.get("quantity") > 0 else "N/A"
- delivery_date = member.get("delivery_date") or "N/A"
- print(f"{idx:<4} {name:<25} {in_transit:<15} {qty:<15} {delivery_date:<15}")
- def display_menu() -> None:
- """
- Display menu options for the deliveries screen.
- """
- print(f"\n{BRIGHT_YELLOW}B{RESET} - Backlog")
- print(f"{BRIGHT_YELLOW}H{RESET} - Help")
- print(f"{BRIGHT_YELLOW}X{RESET} - Back")
- def deliveries_menu() -> None:
- """
- Display and handle the deliveries menu.
- """
- while True:
- print_deliveries_header()
- display_deliveries_list()
- display_menu()
- choice = get_user_choice()
- if choice.isdigit():
- # Gather the mules list (must match the displayed ordering)
- mules = [m for m in game_engine.gang_members.gang_members_data.values() if m.get("role") == "Mule"]
- index = int(choice) - 1
- if 0 <= index < len(mules):
- from mule_assignment import assign_mule_delivery
- assign_mule_delivery(mules[index])
- else:
- print(f"{BRIGHT_RED}Invalid mule selection.{RESET}")
- elif choice.upper() == "B":
- from backlog import backlog_menu
- backlog_menu()
- elif choice.upper() == "H":
- from help_menus import show_help
- show_help("DELIVERIES")
- elif choice.upper() == "X":
- break
- else:
- invalid_choice()
Add Comment
Please, Sign In to add comment