Skip to content

Commit 4e4e741

Browse files
Merge pull request #2672 from IFRCGo/feature/event-to-fr-action
Add action: Event to FieldReport on Admin
2 parents 43fbce9 + 0c34a29 commit 4e4e741

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

api/admin.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ def level_updated_at(self, obj):
245245
"auto_generated_source",
246246
)
247247
list_filter = [IsFeaturedFilter, EventSourceFilter]
248+
actions = ["create_field_reports"]
248249
search_fields = (
249250
"name",
250251
"countries__name",
@@ -510,6 +511,72 @@ def changelist_view(self, request, extra_context=None):
510511

511512
return response
512513

514+
def create_field_reports(self, request, queryset):
515+
created_count = 0
516+
skipped_existing = []
517+
skipped_missing_dtype = []
518+
skipped_missing_countries = []
519+
520+
for event in queryset:
521+
if getattr(event, "field_reports").exists():
522+
skipped_existing.append(event)
523+
continue
524+
if event.dtype is None:
525+
skipped_missing_dtype.append(event)
526+
continue
527+
if not event.countries.exists():
528+
skipped_missing_countries.append(event)
529+
continue
530+
531+
report = models.FieldReport.objects.create(
532+
event=event,
533+
dtype=event.dtype,
534+
title=event.name,
535+
summary=event.name,
536+
visibility=event.visibility,
537+
)
538+
report.countries.set(event.countries.all())
539+
if event.regions.exists():
540+
report.regions.set(event.regions.all())
541+
if event.districts.exists():
542+
report.districts.set(event.districts.all())
543+
created_count += 1
544+
545+
if created_count:
546+
report_label = "field report" if created_count == 1 else "field reports"
547+
self.message_user(
548+
request,
549+
format_html(
550+
'{} <a href="/admin/api/fieldreport/">{}</a> created.',
551+
created_count,
552+
report_label,
553+
),
554+
)
555+
if skipped_existing:
556+
self.message_user(
557+
request,
558+
(
559+
"Action skipped because the event already has a field report."
560+
if len(skipped_existing) == 1
561+
else f"Action skipped for {len(skipped_existing)} events because they already have field reports."
562+
),
563+
level=messages.WARNING,
564+
)
565+
if skipped_missing_dtype:
566+
self.message_user(
567+
request,
568+
f"Action skipped for {len(skipped_missing_dtype)} event(s) because disaster type is missing.",
569+
level=messages.WARNING,
570+
)
571+
if skipped_missing_countries:
572+
self.message_user(
573+
request,
574+
f"Action skipped for {len(skipped_missing_countries)} event(s) because no countries are set.",
575+
level=messages.WARNING,
576+
)
577+
578+
create_field_reports.short_description = "Create field reports from selected events"
579+
513580
class Media:
514581
js = ("js/event_severity_help.js",)
515582

0 commit comments

Comments
 (0)