You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
import logging
|
|
from datetime import timedelta
|
|
from django.utils import timezone
|
|
from celery import task
|
|
|
|
from payments.models import Payment
|
|
from .models import Payment, Subscription, ACTIVE_BACKENDS
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
@task
|
|
def check_subscriptions():
|
|
logger.debug("checking subscriptions")
|
|
subs = Subscription.objects.filter(status='active', backend_id='stripe').all()
|
|
for sub in subs:
|
|
logger.debug("checking subscription #%s on %s", sub.id, sub.backend_id)
|
|
sub.refresh_from_db()
|
|
ACTIVE_BACKENDS['stripe'].refresh_subscription(sub)
|
|
sub.save()
|
|
|
|
@task
|
|
def cancel_old_payments():
|
|
expdate = timezone.now() - timedelta(days=3)
|
|
|
|
expired = Payment.objects.filter(created__lte=expdate, status='new',
|
|
paid_amount=0)
|
|
|
|
logger.info("cancelling %d pending payments older than 3 days (%s)", len(expired), expdate.isoformat())
|
|
|
|
for p in expired:
|
|
logger.debug("cancelling payment #%d (%s): created on %s", p.id, p.user.username, p.created)
|
|
p.status = 'cancelled'
|
|
p.save()
|