45 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from app import billing
 | |
| from collections import defaultdict
 | |
| 
 | |
| offset = 0
 | |
| 
 | |
| def empty_tuple():
 | |
|   return (0, 0)
 | |
| 
 | |
| plan_revenue = defaultdict(empty_tuple)
 | |
| 
 | |
| batch = billing.Customer.all(count=100, offset=offset)
 | |
| while batch.data:
 | |
|   for cust in batch.data:
 | |
|     if cust.subscription:
 | |
|       sub = cust.subscription
 | |
|       total_customer_revenue = sub.plan.amount * sub.quantity
 | |
| 
 | |
|       if cust.discount and cust.discount.coupon:
 | |
|         coupon = cust.discount.coupon
 | |
| 
 | |
|         if coupon.percent_off:
 | |
|           total_customer_revenue *= (1 - coupon.percent_off/100.0)
 | |
| 
 | |
|         if coupon.amount_off:
 | |
|           total_customer_revenue -= coupon.amount_off
 | |
| 
 | |
|       subscribers, revenue = plan_revenue[sub.plan.id]
 | |
|       plan_revenue[sub.plan.id] = (subscribers + 1,
 | |
|                                    revenue + total_customer_revenue)
 | |
|   offset += len(batch.data)
 | |
|   batch = billing.Customer.all(count=100, offset=offset)
 | |
| 
 | |
| def format_money(total_cents):
 | |
|   dollars = total_cents / 100
 | |
|   cents = total_cents % 100
 | |
|   return dollars, cents
 | |
| 
 | |
| total_monthly_revenue = 0
 | |
| for plan_id, (subs, rev) in plan_revenue.items():
 | |
|   total_monthly_revenue += rev
 | |
|   d, c = format_money(rev)
 | |
|   print '%s: $%d.%02d(%s)' % (plan_id, d, c, subs)
 | |
| 
 | |
| d, c = format_money(total_monthly_revenue)
 | |
| print 'Monthly revenue: $%d.%02d' % (d, c)
 |