from django.core.management.base import BaseCommand from uncloud_auth.models import User from uncloud_pay.models import Order, Bill, PaymentMethod, get_balance_for 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 def handle(self, *args, **options): users = User.objects.all() print("Processing {} users.".format(users.count())) for user in users: balance = get_balance_for(user) if balance < 0: print("User {} has negative balance ({}), charging.".format(user.username, balance)) payment_method = PaymentMethod.get_primary_for(user) if payment_method != None: amount_to_be_charged = abs(balance) charge_ok = payment_method.charge(amount_to_be_charged) if not charge_ok: print("ERR: charging {} with method {} failed" .format(user.username, payment_method.uuid) ) else: print("ERR: no payment method registered for {}".format(user.username)) print("=> Done.")