From 08643310a783d4da5212ef419ee8d909f683f8e2 Mon Sep 17 00:00:00 2001 From: stuppie Date: Fri, 25 Sep 2026 11:02:52 -0600 Subject: format_cashout_status_email_tokens --- jb/managers/email_manager.py | 55 +++++++++++++++++++++++++++++++++++++++----- 1 file 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'{value}' if credential["type"] == "url" else value + ) + rows.append(f"
{label}: {rendered_value}
") + 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) -- cgit v1.2.3