# tasks.py from celery import shared_task from django.utils import timezone from datetime import timedelta from .models import * @shared_task def create_charges_for_recurring_services(): today = timezone.now().date() active_recurring_services = Service.objects.filter(active=True, recurring=True) for service in active_recurring_services: # Get the last charge for the service last_charge = service.charge_set.order_by('-due_date').first() if last_charge and last_charge.due_date <= today: # Calculate the new due date for the charge based on the recurring cycle new_due_date = today + timedelta(days=service.recurring_cycle.months * 30) # Create a new charge for the service Charge.objects.create( service=service, amount=service.amount, due_date=new_due_date )