From 0ae476db02c982eecb5ba3f128981bc023501978 Mon Sep 17 00:00:00 2001 From: Edwin Eames Date: Thu, 18 Sep 2025 13:02:52 -0400 Subject: [PATCH] added more data to create customer --- app/routers/main.py | 46 +++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/app/routers/main.py b/app/routers/main.py index 539c99d..27a75e1 100644 --- a/app/routers/main.py +++ b/app/routers/main.py @@ -19,9 +19,8 @@ from authorizenet import apicontractsv1 from authorizenet.constants import constants from authorizenet.apicontrollers import ( createCustomerProfileController, - createCustomerPaymentProfileController, - getCustomerProfileIdsController, - getCustomerProfileController + createCustomerPaymentProfileController + ) # --- ROUTER DEFINITION --- @@ -36,7 +35,7 @@ TRANSACTION_KEY = '94s6Qy458mMNJr7G' constants.show_url_on_request = True constants.environment = constants.SANDBOX - +state_abbrevs = ['MA', 'RI', 'NH', 'ME', 'VT', 'CT', 'NY'] @router.post("/maintenance/migrate-cards-now") def run_card_migration_synchronously(): @@ -78,8 +77,12 @@ def run_card_migration_synchronously(): cardCode = str(card_obj.security_number).strip() if len(cardCode) < 3 or len(cardCode) > 4 or not cardCode.isdigit(): raise ValueError(f"Invalid CVV length {len(cardCode)} or non-numeric for card ID {card_obj.id}") + # Get dynamic state + the_state = state_abbrevs[customer_obj.customer_state] if 0 <= customer_obj.customer_state < len(state_abbrevs) else 'MA' + # Debug print - print(f"DEBUG SEND CREATE: cardNumber='{sanitized_card_number}', expirationDate='{expiration_date_str}', cardCode='{cardCode}', customerID={customer_obj.id}, name='{customer_obj.customer_first_name} {customer_obj.customer_last_name}', address='{customer_obj.customer_address}', city='{customer_obj.customer_town}', zip='{customer_obj.customer_zip}', email='{customer_obj.customer_email}'") + print(f"DEBUG SEND CREATE: cardNumber='{sanitized_card_number}', expirationDate='{expiration_date_str}', cardCode='{cardCode}', customerID={customer_obj.id}, name='{customer_obj.customer_first_name} {customer_obj.customer_last_name}', address='{customer_obj.customer_address}', city='{customer_obj.customer_town}', state='{the_state}', zip='{customer_obj.customer_zip}', country='USA', phone='{customer_obj.customer_phone_number}', email='{customer_obj.customer_email}'") + creditCard = apicontractsv1.creditCardType( cardNumber=sanitized_card_number, expirationDate=expiration_date_str, @@ -90,11 +93,15 @@ def run_card_migration_synchronously(): lastName=customer_obj.customer_last_name, address=customer_obj.customer_address, city=customer_obj.customer_town, - zip=customer_obj.customer_zip + state=the_state, + zip=customer_obj.customer_zip, + country="USA", + phoneNumber=customer_obj.customer_phone_number ) paymentProfile = apicontractsv1.customerPaymentProfileType( billTo=billTo, - payment=apicontractsv1.paymentType(creditCard=creditCard) + payment=apicontractsv1.paymentType(creditCard=creditCard), + defaultPaymentProfile=True ) customerProfile = apicontractsv1.customerProfileType( merchantCustomerId=str(customer_obj.id), @@ -133,7 +140,8 @@ def run_card_migration_synchronously(): """Helper to add a new Payment Profile to an existing Customer Profile.""" merchantAuth = apicontractsv1.merchantAuthenticationType(name=API_LOGIN_ID, transactionKey=TRANSACTION_KEY) expiration_date_str = f"{card_obj.expiration_year}-{str(card_obj.expiration_month).zfill(2)}" - + # State abbreviations list + # // FIX 1 (Applied here as well): Sanitize card number sanitized_card_number = ''.join(filter(str.isdigit, str(card_obj.card_number))) @@ -142,9 +150,23 @@ def run_card_migration_synchronously(): expirationDate=expiration_date_str, cardCode=str(card_obj.security_number).strip() ) + # Get dynamic state + the_state = state_abbrevs[customer_obj.customer_state] if 0 <= customer_obj.customer_state < len(state_abbrevs) else 'MA' + + billTo = apicontractsv1.customerAddressType( + firstName=customer_obj.customer_first_name, + lastName=customer_obj.customer_last_name, + address=customer_obj.customer_address, + city=customer_obj.customer_town, + state=the_state, + zip=customer_obj.customer_zip, + country="USA", + phoneNumber=customer_obj.customer_phone_number + ) paymentProfile = apicontractsv1.customerPaymentProfileType( - billTo=apicontractsv1.customerAddressType(firstName=customer_obj.customer_first_name, lastName=customer_obj.customer_last_name), - payment=apicontractsv1.paymentType(creditCard=creditCard) + billTo=billTo, + payment=apicontractsv1.paymentType(creditCard=creditCard), + defaultPaymentProfile=False ) request = apicontractsv1.createCustomerPaymentProfileRequest( merchantAuthentication=merchantAuth, @@ -167,6 +189,8 @@ def run_card_migration_synchronously(): print(f" AUTH.NET ERROR: {error_msg}") return None + + # --- MIGRATION SCRIPT LOGIC --- print("="*60) print("MIGRATION STARTED: Migrating all customer cards to Authorize.Net CIM.") @@ -181,8 +205,6 @@ def run_card_migration_synchronously(): customers_to_migrate = (session .query(Customer_Customer) .filter(Customer_Customer.auth_net_profile_id == None) - .order_by(func.random()) - .limit(1) .all()) total_customers = len(customers_to_migrate)