def test__format_opportunity(): opportunity = Opportunity(sf_connection=sf) opportunity.account_id = "0011700000BpR8PAAV" opportunity.amount = 9 opportunity.net_amount = 8 opportunity.encouraged_by = "Because I love the Trib!" opportunity.name = "D C ([email protected])" opportunity.stripe_id = "cus_78MqJSBejMN9gn" opportunity.agreed_to_pay_fees = True opportunity.referral_id = "1234" opportunity.lead_source = "Stripe" opportunity.description = "The Texas Tribune Membership" opportunity.stripe_customer = "cus_78MqJSBejMN9gn" response = opportunity._format() expected = { "AccountId": "0011700000BpR8PAAV", "CampaignId": None, "Amount": "9.00", "CloseDate": today, "Encouraged_to_contribute_by__c": "Because I love the Trib!", "LeadSource": "Stripe", "Name": "D C ([email protected])", "RecordType": { "Name": "Membership" }, "StageName": "Pledged", "Stripe_Customer_ID__c": "cus_78MqJSBejMN9gn", "Referral_ID__c": "1234", "Description": "The Texas Tribune Membership", "Stripe_Agreed_to_pay_fees__c": True, "Type": "Single", "Stripe_Card__c": None, "Stripe_Transaction_ID__c": None, "npsp__Closed_Lost_Reason__c": None, "Stripe_Card_Brand__c": None, "Stripe_Card_Expiration__c": None, "Stripe_Card_Last_4__c": None, "Amazon_Order_Id__c": None, "Net_Amount__c": "8.00", "Donor_Selected_Amount__c": 0, "Quarantined__c": False, } assert response == expected
def add_business_opportunity(account=None, form=None, customer=None): """ Adds a single business membership to Salesforce. """ year = datetime.now(tz=ZONE).strftime("%Y") opportunity = Opportunity(account=account) opportunity.record_type_name = "Business Membership" opportunity.name = f"{year} Business {account.name} One time" opportunity.amount = form.get("amount", 0) opportunity.stripe_customer = customer["id"] opportunity.campaign_id = form["campaign_id"] opportunity.referral_id = form["referral_id"] opportunity.description = "Texas Tribune Business Membership" opportunity.agreed_to_pay_fees = form["pay_fees_value"] opportunity.encouraged_by = form["reason"] opportunity.lead_source = "Stripe" opportunity.save() return opportunity
def test__format_slack(): opportunity = Opportunity(sf_connection=sf) opportunity.account_id = "0011700000BpR8PAAV" opportunity.amount = 9 opportunity.encouraged_by = "Because I love the Trib!" opportunity.name = "D C ([email protected])" opportunity.stripe_id = "cus_78MqJSBejMN9gn" opportunity.agreed_to_pay_fees = True opportunity.referral_id = "1234" opportunity.lead_source = "Stripe" opportunity.description = "The Texas Tribune Membership" opportunity.stripe_customer = "cus_78MqJSBejMN9gn" rdo = RDO(sf_connection=sf) rdo.referral_id = "1234" rdo.encouraged_by = "Because I love the Trib!" rdo.lead_source = "Stripe" rdo.contact_id = "0031700000BHQzBAAX" rdo.installment_period = "yearly" rdo.stripe_customer = "cus_78MqJSBejMN9gn" rdo.amount = 100 rdo.name = "foo" rdo.installments = 3 rdo.open_ended_status = None rdo.description = "Texas Tribune Circle Membership" rdo.agreed_to_pay_fees = True rdo.type = "Giving Circle" contact = Contact(sf_connection=sf) contact.email = "*****@*****.**" contact.first_name = "D" contact.last_name = "C" contact.lead_source = "Stripe" contact.work_email = "*****@*****.**" account = Account(sf_connection=sf) account.name = "Acme Inc." account.website = "http://acme.com" account.shipping_street = "Street" account.shipping_city = "Austin" account.shipping_postalcode = "78701" account.shipping_state = "TX" account.record_type_name = "Household" actual = construct_slack_message(account=account, rdo=rdo, opportunity=None, contact=None) expected = "Acme Inc. pledged $100 [yearly] (Because I love the Trib!)" assert actual == expected actual = construct_slack_message(account=None, rdo=rdo, opportunity=None, contact=contact) expected = "D C pledged $100 [yearly] (Because I love the Trib!)" assert actual == expected actual = construct_slack_message(account=None, rdo=None, opportunity=opportunity, contact=contact) expected = "D C pledged $9 [one-time] (Because I love the Trib!)" assert actual == expected
def authorization_notification(payload): amzn_id = payload["AuthorizationNotification"]["AuthorizationDetails"][ "AmazonAuthorizationId"] # trim everything after the last dash - seems like there should be a more # straightforward way to do this match = re.search("^(.*)[-]", amzn_id) amzn_id = match.group(1) logging.info(amzn_id) client = AmazonPayClient( mws_access_key=MWS_ACCESS_KEY, mws_secret_key=MWS_SECRET_KEY, merchant_id=AMAZON_MERCHANT_ID, region="na", currency_code="USD", sandbox=AMAZON_SANDBOX, ) response = client.get_order_reference_details( amazon_order_reference_id=amzn_id) response = response.to_dict() logging.info(json.dumps(response, indent=4)) details = response["GetOrderReferenceDetailsResponse"][ "GetOrderReferenceDetailsResult"]["OrderReferenceDetails"] amount = details["OrderTotal"]["Amount"] logging.info(amount) name = HumanName(details["Buyer"]["Name"]) first_name = name.first last_name = name.last email = details["Buyer"]["Email"] zipcode = get_zip(details=details) description = details["SellerOrderAttributes"]["StoreName"] logging.info("----Getting contact....") contact = Contact.get_or_create(email=email, first_name=first_name, last_name=last_name, zipcode=zipcode) logging.info(contact) if contact.first_name == "Subscriber" and contact.last_name == "Subscriber": logging.info(f"Changing name of contact to {first_name} {last_name}") contact.first_name = first_name contact.last_name = last_name contact.save() if contact.first_name != first_name or contact.last_name != last_name: logging.info( f"Contact name doesn't match: {contact.first_name} {contact.last_name}" ) if zipcode and not contact.created and contact.mailing_postal_code != zipcode: contact.mailing_postal_code = zipcode contact.save() logging.info("----Adding opportunity...") opportunity = Opportunity(contact=contact, stage_name="Closed Won") opportunity.amount = amount opportunity.description = description opportunity.lead_source = "Amazon Alexa" opportunity.amazon_order_id = amzn_id opportunity.campaign_id = AMAZON_CAMPAIGN_ID opportunity.name = ( f"[Alexa] {contact.first_name} {contact.last_name} ({contact.email})") opportunity.save() logging.info(opportunity) notify_slack(contact=contact, opportunity=opportunity) if contact.duplicate_found: send_multiple_account_warning(contact)