from django.core.management.base import BaseCommand from uncloud_auth.models import User from uncloud_pay.models import Order, Bill from datetime import timedelta from django.utils import timezone class Command(BaseCommand): help = 'Generate bills and charge customers if necessary.' def add_arguments(self, parser): pass # TODO: check for existing bills def handle(self, *args, **options): customers = User.objects.all() print("Processing {} users.".format(customers.count())) for customer in customers: orders = Order.objects.filter(owner=customer) # Pay all non-billed usage untill now. bill_starting_date = timezone.now() bill_ending_date = timezone.now() billed_orders = [] for order in orders: print(order) if True: # FIXME billed_orders.append(order) # Update starting date if need be. if order.starting_date < bill_starting_date: bill_starting_date = order.starting_date if len(billed_orders) > 0: bill = Bill(owner=customer, starting_date=bill_starting_date, ending_date=bill_starting_date, due_date=timezone.now() + timedelta(days=10)) bill.save() for order in billed_orders: print(order) order.bill.add(bill) print("Created bill {} for user {}".format(bill.uuid, customer.username)) print("=> Done.")