def send_daily_invoice_notification(): today = datetime.datetime.today() #today = datetime.datetime(2010, 7, 15) gw = BraintreeGateway(settings.MERCHANT_ID, settings.PUBLIC_KEY, settings.PRIVATE_KEY) transactions = gw.get_daily_transactions(today) logging.info("%s transactions were found today %s" % (len(transactions), today)) for transaction in transactions: if transaction.subscription_id is not None: invoice = Invoice() invoice.cc_mask = '*'*12 + transaction.credit_card_details.masked_number[12:] invoice.cc_type = transaction.credit_card_details.card_type invoice.charge = decimal.Decimal(transaction.amount) invoice.currency = transaction.currency_iso_code invoice.transaction_status_response = transaction.processor_response_text invoice.transaction_type = transaction.type.lower() invoice.transaction_id = transaction.id invoice.customer_name = "%s %s" % (transaction.customer_details.first_name, transaction.customer_details.last_name) invoice.customer_email = transaction.customer_details.email invoice.customer_id = transaction.customer_details.id invoice.shop_dns = "<Unspecified Shop>" if transaction.customer_details.website is None else transaction.customer_details.website try: shop_id = None if transaction.vault_customer.custom_fields is '' else transaction.vault_customer.custom_fields.get("shop_id", None) if shop_id is not None: try: shop = Shop.objects.get(id=shop_id) invoice.shop = shop invoice.market_place = shop.marketplace.name except Shop.DoesNotExist: logging.error("Shop ID = %s not exist for user %s" % (shop_id, invoice.customer_name)) pass else: logging.error("User %s has not setted shop_id property in braintree" % invoice.customer_name) except Exception, e: logging.error(e) pass invoice.subscription_id = transaction.subscription_id subscription = gw.get_subscription_details(invoice.subscription_id) invoice.plan_id = subscription.plan_id invoice.valid_from = subscription.billing_period_start_date invoice.valid_up_to = subscription.billing_period_end_date invoice.next_billing_date = subscription.next_billing_date invoice.save() msg = invoice.to_text() logging.info("Sending email to %s. tx=%s, charge=%s, " % (invoice.customer_name, invoice.transaction_id, invoice.charge)) mail = EmailMessage(subject='%s | Notification Invoice' % invoice.market_place, body=msg, from_email=settings.EMAIL_FROM, to=[invoice.customer_email]+[mail for name, mail in settings.STAFF], headers={'X-SMTPAPI': '{\"category\": \"Notification Invoice\"}'}) mail.send(fail_silently=True)
def extra_data(self): """ This function uses the gateway to get additional information stored in braintree servers Subscription object --------------------- add_ons balance billing_day_of_month billing_period_end_date billing_period_start_date price cancel create create_signature days_past_due discounts trial_duration failure_count find first_billing_date gateway id merchant_account_id number_of_billing_cycles next_billing_date paid_through_date payment_method_token plan_id price status retryCharge transactions trial_duration_unit trial_period trial_duration update_signature verify_keys @return: [billing_period_start_date, billing_period_end_date, next_billing_date, price, transactions] """ from django.conf import settings from payments.gateways.braintreegw import BraintreeGateway gw = BraintreeGateway(settings.MERCHANT_ID, settings.PUBLIC_KEY, settings.PRIVATE_KEY) subscription = gw.get_subscription_details(self.subscription_id) return [ subscription.billing_period_start_date, #0 subscription.billing_period_end_date, #1 subscription.next_billing_date, #2 subscription.price, #3 subscription.transactions, #4 subscription.status, #5 subscription.balance, #6 subscription.payment_method_token, #7 subscription.transactions, #8 ]
def update_customer_id(self): gw = BraintreeGateway(settings.MERCHANT_ID, settings.PUBLIC_KEY, settings.PRIVATE_KEY) try: subscription_id = self.shop.subscription().subscription_id except: logging.critical("Could not update Customer ID for shop %s" % self.shop) return subs = gw.get_subscription_details(subscription_id) cid = subs.transactions[0].customer_details.id self.customer_id = cid self.save() logging.critical("Billing info Customer ID for shop %s updated" % self.shop)
def send_daily_invoice_notification(): today = datetime.datetime.today() #today = datetime.datetime(2010, 7, 15) gw = BraintreeGateway(settings.MERCHANT_ID, settings.PUBLIC_KEY, settings.PRIVATE_KEY) transactions = gw.get_daily_transactions(today) logging.info("%s transactions were found today %s" % (len(transactions), today)) for transaction in transactions: if transaction.subscription_id is not None: invoice = Invoice() invoice.cc_mask = '*' * 12 + transaction.credit_card_details.masked_number[ 12:] invoice.cc_type = transaction.credit_card_details.card_type invoice.charge = decimal.Decimal(transaction.amount) invoice.currency = transaction.currency_iso_code invoice.transaction_status_response = transaction.processor_response_text invoice.transaction_type = transaction.type.lower() invoice.transaction_id = transaction.id invoice.customer_name = "%s %s" % ( transaction.customer_details.first_name, transaction.customer_details.last_name) invoice.customer_email = transaction.customer_details.email invoice.customer_id = transaction.customer_details.id invoice.shop_dns = "<Unspecified Shop>" if transaction.customer_details.website is None else transaction.customer_details.website try: shop_id = None if transaction.vault_customer.custom_fields is '' else transaction.vault_customer.custom_fields.get( "shop_id", None) if shop_id is not None: try: shop = Shop.objects.get(id=shop_id) invoice.shop = shop invoice.market_place = shop.marketplace.name except Shop.DoesNotExist: logging.error("Shop ID = %s not exist for user %s" % (shop_id, invoice.customer_name)) pass else: logging.error( "User %s has not setted shop_id property in braintree" % invoice.customer_name) except Exception, e: logging.error(e) pass invoice.subscription_id = transaction.subscription_id subscription = gw.get_subscription_details(invoice.subscription_id) invoice.plan_id = subscription.plan_id invoice.valid_from = subscription.billing_period_start_date invoice.valid_up_to = subscription.billing_period_end_date invoice.next_billing_date = subscription.next_billing_date invoice.save() msg = invoice.to_text() logging.info("Sending email to %s. tx=%s, charge=%s, " % (invoice.customer_name, invoice.transaction_id, invoice.charge)) mail = EmailMessage(subject='%s | Notification Invoice' % invoice.market_place, body=msg, from_email=settings.EMAIL_FROM, to=[invoice.customer_email] + [mail for name, mail in settings.STAFF], headers={ 'X-SMTPAPI': '{\"category\": \"Notification Invoice\"}' }) mail.send(fail_silently=True)