Skip to content

Commit 44a08c8

Browse files
Change submission pending_status to work like grants (#4461)
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> Co-authored-by: Marco Acierno <marcoacierno@users.noreply.github.com>
1 parent 6da82fc commit 44a08c8

File tree

7 files changed

+60
-32
lines changed

7 files changed

+60
-32
lines changed

backend/api/tests/fixtures.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,11 @@ def create_languages(db):
101101
from languages.languages import LANGUAGES
102102

103103
for language in LANGUAGES:
104-
Language.objects.create(name=language["English"], code=language["alpha2"])
104+
Language.objects.get_or_create(
105+
name=language["English"], code=language["alpha2"]
106+
)
105107

106-
Locale.objects.create(
108+
Locale.objects.get_or_create(
107109
language_code=get_supported_content_language_variant(settings.LANGUAGE_CODE),
108110
)
109111

backend/reviews/templates/proposals-recap.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -394,14 +394,14 @@ <h3>Show proposals with pending status:</h3>
394394
<script>
395395
submissionsById[{{ item.id }}] = {
396396
id: {{ item.id }},
397-
status: "{{ item.pending_status }}",
398-
originalStatus: "{{ item.pending_status }}",
397+
status: "{{ item.current_or_pending_status }}",
398+
originalStatus: "{{ item.current_or_pending_status }}",
399399
audienceLevel: {{ item.audience_level.id }},
400400
languages: [{% for language in item.languages.all %}"{{language.code}}",{% endfor %}],
401401
numOfVotes: {{item.userreview_set.count}},
402402
};
403403
</script>
404-
<tr class="proposal-item" id="submission-{{item.id}}" data-original-status="{{ item.pending_status }}">
404+
<tr class="proposal-item" id="submission-{{item.id}}" data-original-status="{{ item.current_or_pending_status }}">
405405
<td>{{forloop.counter}}</td>
406406
<td class="results-title">
407407
<a

backend/submissions/admin.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from import_export.resources import ModelResource
1010

1111
from django import forms
12-
from django.db.models import F
1312
from django.db import transaction
1413
from django.contrib import admin, messages
1514
from django.utils.html import mark_safe
@@ -356,6 +355,7 @@ def apply_and_notify_status_change(modeladmin, request, queryset):
356355

357356
for submission in objs:
358357
submission.status = submission.pending_status
358+
submission.pending_status = None
359359
placeholders = {
360360
"conference_name": conference.name.localize("en"),
361361
"proposal_title": submission.title.localize("en"),
@@ -374,7 +374,7 @@ def apply_and_notify_status_change(modeladmin, request, queryset):
374374

375375
Submission.objects.bulk_update(
376376
objs,
377-
["status"],
377+
["status", "pending_status"],
378378
)
379379

380380
messages.add_message(
@@ -425,7 +425,7 @@ def get_queryset(self, request):
425425
super()
426426
.get_queryset(request)
427427
.exclude(
428-
pending_status=F("status"),
428+
pending_status__isnull=True,
429429
)
430430
)
431431

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.1.4 on 2025-11-01 18:50
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('submissions', '0027_submissionconfirmpendingstatusproxy'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='submission',
15+
name='pending_status',
16+
field=models.CharField(blank=True, choices=[('proposed', 'Proposed'), ('accepted', 'Accepted'), ('waiting_list', 'Waiting list'), ('rejected', 'Rejected'), ('cancelled', 'Cancelled')], max_length=20, null=True, verbose_name='pending status'),
17+
),
18+
]

backend/submissions/models.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,15 +104,11 @@ class Submission(TimeStampedModel):
104104
_("status"), choices=STATUS, max_length=20, default=STATUS.proposed
105105
)
106106
pending_status = models.CharField(
107-
_("pending status"), choices=STATUS, max_length=20, default="", blank=True
107+
_("pending status"), choices=STATUS, max_length=20, null=True, blank=True
108108
)
109109

110110
objects = SubmissionQuerySet().as_manager()
111111

112-
def __init__(self, *args, **kwargs):
113-
super().__init__(*args, **kwargs)
114-
self._original_status = self.status
115-
116112
@property
117113
def hashid(self):
118114
return encode_hashid(self.pk)
@@ -197,13 +193,11 @@ def save(self, *args, **kwargs):
197193
if update_fields:
198194
update_fields.append("slug")
199195

200-
if self.pending_status == self._original_status:
201-
self.pending_status = self.status
202-
203-
if update_fields:
204-
update_fields.append("pending_status")
196+
super().save(*args, **kwargs)
205197

206-
return super().save(*args, **kwargs)
198+
@property
199+
def current_or_pending_status(self):
200+
return self.pending_status or self.status
207201

208202
def __str__(self):
209203
return (

backend/submissions/tests/test_admin.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,17 @@ def test_apply_and_notify_status_change(rf, mocker):
109109
queryset=Submission.objects.filter(status=Submission.STATUS.proposed),
110110
)
111111

112+
accepted_submission.refresh_from_db()
113+
rejected_submission.refresh_from_db()
114+
waiting_list_proposal.refresh_from_db()
115+
116+
assert accepted_submission.status == Submission.STATUS.accepted
117+
assert accepted_submission.pending_status is None
118+
assert rejected_submission.status == Submission.STATUS.rejected
119+
assert rejected_submission.pending_status is None
120+
assert waiting_list_proposal.status == Submission.STATUS.waiting_list
121+
assert waiting_list_proposal.pending_status is None
122+
112123
assert SentEmail.objects.filter(
113124
recipient=accepted_submission.speaker,
114125
email_template=proposal_accepted_template,

backend/submissions/tests/test_models.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,31 +26,34 @@ def test_slug_is_not_regenerated_when_changing_title():
2626
assert submission.slug == "ciao"
2727

2828

29-
def test_syncs_pending_status_when_changing_status():
29+
def test_current_or_pending_status_returns_pending_if_set():
3030
submission = SubmissionFactory(
31-
status=Submission.STATUS.accepted,
31+
status=Submission.STATUS.proposed,
3232
pending_status=Submission.STATUS.accepted,
3333
)
3434

35-
submission.status = Submission.STATUS.rejected
36-
submission.save(update_fields=["status"])
35+
assert submission.current_or_pending_status == Submission.STATUS.accepted
3736

38-
submission.refresh_from_db()
3937

40-
assert submission.status == Submission.STATUS.rejected
41-
assert submission.pending_status == Submission.STATUS.rejected
38+
def test_current_or_pending_status_returns_current_if_pending_none():
39+
submission = SubmissionFactory(
40+
status=Submission.STATUS.rejected,
41+
pending_status=None,
42+
)
4243

44+
assert submission.current_or_pending_status == Submission.STATUS.rejected
4345

44-
def test_leaves_pending_status_unchanged_if_different():
46+
47+
def test_pending_status_not_automatically_synced():
4548
submission = SubmissionFactory(
4649
status=Submission.STATUS.proposed,
47-
pending_status=Submission.STATUS.rejected,
50+
pending_status=Submission.STATUS.accepted,
4851
)
4952

50-
submission.status = Submission.STATUS.waiting_list
51-
submission.save()
53+
submission.status = Submission.STATUS.rejected
54+
submission.save(update_fields=["status"])
5255

5356
submission.refresh_from_db()
5457

55-
assert submission.status == Submission.STATUS.waiting_list
56-
assert submission.pending_status == Submission.STATUS.rejected
58+
assert submission.status == Submission.STATUS.rejected
59+
assert submission.pending_status == Submission.STATUS.accepted # Should remain unchanged

0 commit comments

Comments
 (0)