aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuppie2026-09-25 11:02:52 -0600
committerstuppie2026-09-25 11:02:52 -0600
commit08643310a783d4da5212ef419ee8d909f683f8e2 (patch)
tree230882f495bc71b967408da5962b9eeffd83ca37
parent194aebecde05fed28e8d964d58bdf3d6a95d072b (diff)
downloadamt-jb-08643310a783d4da5212ef419ee8d909f683f8e2.tar.gz
amt-jb-08643310a783d4da5212ef419ee8d909f683f8e2.zip
format_cashout_status_email_tokens
-rw-r--r--jb/managers/email_manager.py55
1 files changed, 49 insertions, 6 deletions
diff --git a/jb/managers/email_manager.py b/jb/managers/email_manager.py
index 08ac0cf..fa4d38a 100644
--- a/jb/managers/email_manager.py
+++ b/jb/managers/email_manager.py
@@ -1,3 +1,6 @@
+from html import escape
+from typing import Any
+
import requests
from generalresearch.config import is_debug
from generalresearch.currency import USDCent
@@ -94,15 +97,55 @@ def send_cashout_confirmation_email(
send_email_with_tokens(email_tokens, mautic_url)
-def send_cashout_status_email(email: str, cashout: CashoutRequestInfo) -> None:
+def format_cashout_status_email_tokens(
+ cashout: CashoutRequestInfo,
+) -> dict[str, str]:
+ tx = cashout.transaction_info or {}
+ assert cashout.id is not None
assert cashout.status is not None
- email_tokens = {
- "cashout_id": str(cashout.id),
+ tokens = {
+ "cashout_id": cashout.id,
"cashout_status": cashout.status.value,
+ "cashout_description": cashout.description,
+ # From tango
+ "credentials": format_tango_credentials(tx),
+ # Tango supplies formatted HTML instructions intended for the recipient
+ "redemption_instructions": tx.get("redemption_instructions") or "",
+ # From paypal
+ "transaction_id": tx.get("transaction_id") or "",
}
- # todo: (if tango) format credentials and redemption instructions
- # "credentials": "",
- # "redemption_instructions": "",
+
+ # Cash-in-mail details are flat values in transaction_info.
+ for field in (
+ "tracking_number",
+ "shipping_method",
+ "carrier",
+ "ship_date",
+ "estimated_delivery_date",
+ "delivery_status",
+ ):
+ tokens[field] = str(tx.get(field) or "")
+
+ return tokens
+
+
+def format_tango_credentials(transaction: dict[str, Any]) -> str:
+ if not transaction.get("credential_list"):
+ return ""
+
+ rows = []
+ for credential in transaction["credential_list"]:
+ label = escape(credential["label"])
+ value = escape(credential["value"], quote=True)
+ rendered_value = (
+ f'<a href="{value}">{value}</a>' if credential["type"] == "url" else value
+ )
+ rows.append(f"<p><strong>{label}:</strong> {rendered_value}</p>")
+ return "".join(rows)
+
+
+def send_cashout_status_email(email: str, cashout: CashoutRequestInfo) -> None:
+ email_tokens = format_cashout_status_email_tokens(cashout)
if is_debug():
print("CASHOUT_STATUS_EMAIL: ", email_tokens)