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)
示例#2
0
 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 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
     ]
示例#4
0
 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)        
示例#5
0
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)