Commit 932c03ea authored by Staś Kycia's avatar Staś Kycia
Browse files

admins can now check if last sent email has is up to date

parent ac90c2ef
Loading
Loading
Loading
Loading
+1 −1
Changes for Procfile: 1 added line, 1 removed line.
Original line number Diff line number Diff line
web: uv run manage.py runserver
worker: uv run manage.py rqworker default email_batch --job-class django_tasks_rq.Job
 No newline at end of file
worker: uv run manage.py rqworker default email email_batch --job-class django_tasks_rq.Job
 No newline at end of file
+6 −3
Changes for mails/admin.py: 6 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -3,15 +3,18 @@ from django.contrib import admin
from .models import Mail

class MailAdmin(admin.ModelAdmin):
    list_display = ['voter', 'status', 'error_message', 'created_at']
    list_display = ['voter', 'status', 'error_message', 'created_at', 'last_try_date']
    ordering = ['-created_at']
    
    list_filter = ['status']
    
    # def has_add_permission(self, request):
        # return False
    def has_add_permission(self, request):
        return False
    
    def has_change_permission(self, request, obj=None):
        return False
    
    def has_add_permission(self, request):
        return False

admin.site.register(Mail, MailAdmin)
 No newline at end of file
+18 −0
Changes for mails/migrations/0006_mail_number_of_trials.py: 18 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Generated by Django 6.0.3 on 2026-03-21 16:18

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('mails', '0005_remove_mail_errot_message_mail_error_message'),
    ]

    operations = [
        migrations.AddField(
            model_name='mail',
            name='number_of_trials',
            field=models.IntegerField(default=0),
        ),
    ]
+17 −0
Changes for mails/migrations/0007_remove_mail_number_of_trials.py: 17 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Generated by Django 6.0.3 on 2026-03-21 16:19

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('mails', '0006_mail_number_of_trials'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='mail',
            name='number_of_trials',
        ),
    ]
+8 −7
Changes for mails/tasks.py: 8 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ from django.core import mail
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.utils import timezone

from voters.models import Voter
from mails.models import Mail
@@ -14,7 +15,7 @@ from functools import partial
import time

@task(queue_name='email_batch')
def send_mail_batch():
def send_mail_batch_task():
    with transaction.atomic():
        ids_to_update = list(
            Mail.objects.filter(status='PENDING')
@@ -26,7 +27,7 @@ def send_mail_batch():
        if not ids_to_update:
            return None
        
        Mail.objects.filter(pk__in=ids_to_update).update(status='PROCESSING')
        Mail.objects.filter(pk__in=ids_to_update).update(status='PROCESSING', last_try_date=timezone.now())
    
    batch = Mail.objects.filter(pk__in=ids_to_update)[:settings.EMAIL_BATCH_SIZE]
    
@@ -37,7 +38,7 @@ def send_mail_batch():
    except:
        Mail.objects.filter(pk__in=ids_to_update).update(status='ERROR', error_message='Nie udało się nawiązać połączenia z serwerem SMTP')
        if Mail.objects.filter(status='PENDING').exists():
            send_mail_batch.enqueue()
            send_mail_batch_task.enqueue()
        return
    
    emails_to_send = []
@@ -73,6 +74,8 @@ def send_mail_batch():
            if sending_status:
                queued_email.status = 'SENT'
                queued_email.error_message = None
                queued_email.voter.last_email_date = timezone.now()
                queued_email.voter.save()
            else:
                queued_email.status = 'ERROR'
        except Exception as e:
@@ -85,7 +88,7 @@ def send_mail_batch():
        
    
    if Mail.objects.filter(status='PENDING').exists():
        send_mail_batch.enqueue()
        send_mail_batch_task.enqueue()
    

@task
@@ -96,6 +99,4 @@ def queue_mails_task(voter_ids):
    
    with transaction.atomic():
        Mail.objects.bulk_create(mail_objects)
        transaction.on_commit(partial(send_mail_batch.enqueue))
        
        
        transaction.on_commit(partial(send_mail_batch_task.enqueue))
 No newline at end of file
Loading