diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 950f75f..cd00605 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 5cd178a..8462839 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/management/commands/cleanup_requests.py b/core/management/commands/cleanup_requests.py index b307ced..3221ec5 100644 --- a/core/management/commands/cleanup_requests.py +++ b/core/management/commands/cleanup_requests.py @@ -1,5 +1,6 @@ from django.core.management.base import BaseCommand from django.utils import timezone +from django.db.models import Q from core.models import BloodRequest from datetime import timedelta @@ -31,15 +32,29 @@ class Command(BaseCommand): self.stdout.write(self.style.SUCCESS(f'Deleted {count} {urgency} requests older than {days} days.')) deleted_count += count - # 2. Delete non-Active requests older than 7 days + # 2. Delete non-Active and non-Accepted requests older than 7 days cutoff_inactive = now - timedelta(days=7) - inactive_requests = BloodRequest.objects.exclude(status='Active').filter(created_at__lt=cutoff_inactive) + inactive_requests = BloodRequest.objects.exclude( + Q(status='Active') | Q(status='Accepted') + ).filter(created_at__lt=cutoff_inactive) count_inactive = inactive_requests.count() if count_inactive > 0: inactive_requests.delete() - self.stdout.write(self.style.SUCCESS(f'Deleted {count_inactive} non-active requests older than 7 days.')) + self.stdout.write(self.style.SUCCESS(f'Deleted {count_inactive} non-active/non-accepted requests older than 7 days.')) deleted_count += count_inactive + # 3. For Accepted requests, we keep them for 30 days after acceptance for history + cutoff_accepted = now - timedelta(days=30) + old_accepted = BloodRequest.objects.filter( + status='Accepted', + accepted_at__lt=cutoff_accepted + ) + count_accepted = old_accepted.count() + if count_accepted > 0: + old_accepted.delete() + self.stdout.write(self.style.SUCCESS(f'Deleted {count_accepted} accepted requests older than 30 days.')) + deleted_count += count_accepted + if deleted_count == 0: self.stdout.write(self.style.SUCCESS('No old requests to delete.')) else: diff --git a/core/migrations/0021_bloodrequest_accepted_at.py b/core/migrations/0021_bloodrequest_accepted_at.py new file mode 100644 index 0000000..9d522e4 --- /dev/null +++ b/core/migrations/0021_bloodrequest_accepted_at.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.7 on 2026-02-27 13:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0020_vaccinerecord_photo'), + ] + + operations = [ + migrations.AddField( + model_name='bloodrequest', + name='accepted_at', + field=models.DateTimeField(blank=True, null=True), + ), + ] diff --git a/core/migrations/__pycache__/0021_bloodrequest_accepted_at.cpython-311.pyc b/core/migrations/__pycache__/0021_bloodrequest_accepted_at.cpython-311.pyc new file mode 100644 index 0000000..f83dd3d Binary files /dev/null and b/core/migrations/__pycache__/0021_bloodrequest_accepted_at.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index 2f76e18..d03c633 100644 --- a/core/models.py +++ b/core/models.py @@ -137,6 +137,7 @@ class BloodRequest(models.Model): image = models.ImageField(upload_to='blood_requests/', null=True, blank=True) required_date = models.DateField(default=timezone.now) status = models.CharField(max_length=20, default='Active') + accepted_at = models.DateTimeField(null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): diff --git a/core/templates/core/profile.html b/core/templates/core/profile.html index 5888c72..1ee9c72 100644 --- a/core/templates/core/profile.html +++ b/core/templates/core/profile.html @@ -80,6 +80,94 @@ +
You haven't volunteered for any requests yet.
+Volunteers:
+ {% with br.donations.all as donations %} + {% if donations %} +You haven't made any blood requests yet.
+