BOC-3: use relay_integration.load_card_from_erpnext() for proper card matching

This commit is contained in:
justin 2026-05-30 22:46:52 -05:00
parent 6ca835b1b4
commit ad41de817c

View file

@ -64,20 +64,13 @@ PW_CARD_EXP_YEAR = os.environ.get("PW_CARD_EXP_YEAR", "")
def _load_matching_card(order_number: str) -> dict:
"""Load PW company card matching the customer's payment method.
We have 3 company cards tied to payment processors:
- PW-STRIPE used when customer paid via card or Klarna
- PW-PAYPAL used when customer paid via PayPal
- PW-CRYPTO used when customer paid via crypto
Uses relay_integration.load_card_from_erpnext() which maps:
- card/ach/klarna Stripe Issuing virtual card (SID-0002)
- paypal PayPal Mastercard (SID-0001)
- crypto crypto filing card
Cards stored in ERPNext Sensitive ID documents.
Falls back to env vars if ERPNext lookup fails.
"""
card = {
"first_name": PW_CARD_FIRST, "last_name": PW_CARD_LAST,
"number": PW_CARD_NUMBER, "cvc": PW_CARD_CVC,
"exp_month": PW_CARD_EXP_MONTH, "exp_year": PW_CARD_EXP_YEAR,
}
try:
import psycopg2
conn = psycopg2.connect(os.environ.get("DATABASE_URL", ""))
@ -90,35 +83,27 @@ def _load_matching_card(order_number: str) -> dict:
conn.close()
payment_method = (row[0] or "card") if row else "card"
# Map customer payment method → our company card
card_map = {
"card": "PW-STRIPE",
"klarna": "PW-STRIPE",
"ach": "PW-STRIPE",
"paypal": "PW-PAYPAL",
"crypto": "PW-CRYPTO",
}
card_name = card_map.get(payment_method, "PW-STRIPE")
from scripts.workers.erpnext_client import ERPNextClient
erp = ERPNextClient()
doc = erp.get_resource("Sensitive ID", card_name)
card = {
"first_name": doc.get("custom_first_name", PW_CARD_FIRST),
"last_name": doc.get("custom_last_name", PW_CARD_LAST),
"number": doc.get("custom_card_number", ""),
"cvc": doc.get("custom_cvc", ""),
"exp_month": doc.get("custom_exp_month", ""),
"exp_year": doc.get("custom_exp_year", ""),
}
LOG.info("[boc3] Using %s for order %s (customer paid via %s)",
card_name, order_number, payment_method)
from scripts.workers.relay_integration import load_card_from_erpnext
card_details = load_card_from_erpnext(payment_method)
if card_details:
LOG.info("[boc3] Using %s card for order %s (customer paid via %s)",
card_details.masked(), order_number, payment_method)
return {
"first_name": card_details.cardholder_name.split()[0] if card_details.cardholder_name else PW_CARD_FIRST,
"last_name": " ".join(card_details.cardholder_name.split()[1:]) if card_details.cardholder_name else PW_CARD_LAST,
"number": card_details.card_number,
"cvc": card_details.cvv,
"exp_month": card_details.exp_month,
"exp_year": card_details.exp_year,
}
except Exception as exc:
LOG.warning("[boc3] Card lookup failed for %s: %s (using env fallback)", order_number, exc)
return card
return {
"first_name": PW_CARD_FIRST, "last_name": PW_CARD_LAST,
"number": PW_CARD_NUMBER, "cvc": PW_CARD_CVC,
"exp_month": PW_CARD_EXP_MONTH, "exp_year": PW_CARD_EXP_YEAR,
}
# Account password for carriers on processagent.com
# We create a unique account per carrier with a standard password