BOC-3: load matching PW card from ERPNext (stripe/paypal/crypto per payment method)
EIN: add handler with IRS hours check (Mon-Fri 7am-10pm ET), dev mode guard
This commit is contained in:
parent
cf270e9f5b
commit
6ca835b1b4
2 changed files with 242 additions and 1 deletions
|
|
@ -52,7 +52,7 @@ SCREENSHOTS_DIR = Path(os.getenv("SCREENSHOTS_DIR", "/tmp/boc3-screenshots"))
|
|||
SCREENSHOTS_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Performance West company card for $25 BOC-3 payments
|
||||
# Loaded from env — never hardcoded
|
||||
# Loaded from ERPNext Sensitive ID at runtime, fallback to env vars
|
||||
PW_CARD_FIRST = os.environ.get("PW_CARD_FIRST_NAME", "Justin")
|
||||
PW_CARD_LAST = os.environ.get("PW_CARD_LAST_NAME", "Hannah")
|
||||
PW_CARD_NUMBER = os.environ.get("PW_CARD_NUMBER", "")
|
||||
|
|
@ -60,6 +60,66 @@ PW_CARD_CVC = os.environ.get("PW_CARD_CVC", "")
|
|||
PW_CARD_EXP_MONTH = os.environ.get("PW_CARD_EXP_MONTH", "")
|
||||
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
|
||||
|
||||
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", ""))
|
||||
cur = conn.cursor()
|
||||
cur.execute(
|
||||
"SELECT payment_method FROM compliance_orders WHERE order_number = %s",
|
||||
(order_number,),
|
||||
)
|
||||
row = cur.fetchone()
|
||||
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)
|
||||
|
||||
except Exception as exc:
|
||||
LOG.warning("[boc3] Card lookup failed for %s: %s (using env fallback)", order_number, exc)
|
||||
|
||||
return card
|
||||
|
||||
# Account password for carriers on processagent.com
|
||||
# We create a unique account per carrier with a standard password
|
||||
BOC3_ACCOUNT_PASSWORD = os.environ.get("BOC3_ACCOUNT_PASSWORD", "")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue