def add_opportunity(contact=None, form=None, customer=None, quarantine=False): """ This will add a single donation to Salesforce. """ logging.info("----Adding opportunity...") opportunity = Opportunity(contact=contact) 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 Membership" opportunity.agreed_to_pay_fees = form["pay_fees_value"] opportunity.encouraged_by = form["reason"] opportunity.lead_source = "Stripe" opportunity.quarantined = quarantine customer = stripe.Customer.retrieve(customer["id"]) card = customer.sources.retrieve(customer.sources.data[0].id) year = card.exp_year month = card.exp_month day = calendar.monthrange(year, month)[1] opportunity.stripe_card_expiration = f"{year}-{month:02d}-{day:02d}" opportunity.stripe_card_brand = card.brand opportunity.stripe_card_last_4 = card.last4 opportunity.save() return opportunity
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 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)