uncloud-mravi/uncloud/uncloud_pay/management/commands/generate-bills.py

48 lines
1.6 KiB
Python

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.")