2020-02-28 07:59:32 +00:00
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from uncloud_auth.models import User
|
2020-03-10 08:14:52 +00:00
|
|
|
from uncloud_pay.models import Order, Bill, PaymentMethod, get_balance_for_user
|
2020-02-28 07:59:32 +00:00
|
|
|
|
|
|
|
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:
|
2020-03-10 08:14:52 +00:00
|
|
|
balance = get_balance_for_user(user)
|
2020-02-28 07:59:32 +00:00
|
|
|
if balance < 0:
|
|
|
|
print("User {} has negative balance ({}), charging.".format(user.username, balance))
|
2020-03-04 08:39:18 +00:00
|
|
|
payment_method = PaymentMethod.get_primary_for(user)
|
2020-02-28 08:10:36 +00:00
|
|
|
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))
|
2020-02-28 07:59:32 +00:00
|
|
|
print("=> Done.")
|