From 6413669c62f4d374b7abfc5a46b261f765987315 Mon Sep 17 00:00:00 2001 From: Daniel Ursache Dogariu Date: Mon, 16 Mar 2026 15:50:48 +0200 Subject: [PATCH 1/6] Modify the NGO model for ANAF Cult Registry checks --- ...nowledge_missing_cult_registry_and_more.py | 33 +++++++++++++++++++ backend/donations/models/ngos.py | 5 +++ 2 files changed, 38 insertions(+) create mode 100644 backend/donations/migrations/0042_ngo_acknowledge_missing_cult_registry_and_more.py diff --git a/backend/donations/migrations/0042_ngo_acknowledge_missing_cult_registry_and_more.py b/backend/donations/migrations/0042_ngo_acknowledge_missing_cult_registry_and_more.py new file mode 100644 index 00000000..2813f4ba --- /dev/null +++ b/backend/donations/migrations/0042_ngo_acknowledge_missing_cult_registry_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.2.12 on 2026-03-16 13:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('donations', '0041_donor_personal_data_removal_started_at_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='ngo', + name='acknowledge_missing_cult_registry', + field=models.BooleanField(default=False, verbose_name='acknowledge missing ANAF Cult Registry info'), + ), + migrations.AddField( + model_name='ngo', + name='cult_registry_check_date', + field=models.DateTimeField(blank=True, editable=False, null=True, verbose_name='last check in the ANAF Cult Registry'), + ), + migrations.AddField( + model_name='ngo', + name='is_in_cult_registry', + field=models.BooleanField(blank=True, editable=False, null=True, verbose_name='presence in the ANAF Cult Registry'), + ), + migrations.AddField( + model_name='ngo', + name='pause_cult_registry_check', + field=models.BooleanField(default=False, verbose_name='pause checking the ANAF Cult Registry'), + ), + ] diff --git a/backend/donations/models/ngos.py b/backend/donations/models/ngos.py index 5d871b24..55e2a8ac 100644 --- a/backend/donations/models/ngos.py +++ b/backend/donations/models/ngos.py @@ -252,6 +252,11 @@ class Ngo(CommonFilenameCacheModel): # originally: active — the user cannot modify this property, it is set by the admin/by the NGO Hub settings is_active = models.BooleanField(verbose_name=_("is active"), db_index=True, default=True) + is_in_cult_registry = models.BooleanField(verbose_name=_("presence in the ANAF Cult Registry"), null=True, blank=True, editable=False) + cult_registry_check_date = models.DateTimeField(verbose_name=_("last check in the ANAF Cult Registry"), null=True, blank=True, editable=False) + pause_cult_registry_check = models.BooleanField(verbose_name=_("pause checking the ANAF Cult Registry"), default=False) + acknowledge_missing_cult_registry = models.BooleanField(verbose_name=_("acknowledge missing ANAF Cult Registry info"), default=False) + date_created = models.DateTimeField(verbose_name=_("date created"), db_index=True, auto_now_add=True) date_updated = models.DateTimeField(verbose_name=_("date updated"), db_index=True, auto_now=True) From 7ee4c6cf39deb42cbe7322543632bc220bb4f7d5 Mon Sep 17 00:00:00 2001 From: Daniel Ursache Dogariu Date: Mon, 16 Mar 2026 22:18:06 +0200 Subject: [PATCH 2/6] Code format --- backend/donations/models/ngos.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/donations/models/ngos.py b/backend/donations/models/ngos.py index 55e2a8ac..56b55819 100644 --- a/backend/donations/models/ngos.py +++ b/backend/donations/models/ngos.py @@ -252,10 +252,18 @@ class Ngo(CommonFilenameCacheModel): # originally: active — the user cannot modify this property, it is set by the admin/by the NGO Hub settings is_active = models.BooleanField(verbose_name=_("is active"), db_index=True, default=True) - is_in_cult_registry = models.BooleanField(verbose_name=_("presence in the ANAF Cult Registry"), null=True, blank=True, editable=False) - cult_registry_check_date = models.DateTimeField(verbose_name=_("last check in the ANAF Cult Registry"), null=True, blank=True, editable=False) - pause_cult_registry_check = models.BooleanField(verbose_name=_("pause checking the ANAF Cult Registry"), default=False) - acknowledge_missing_cult_registry = models.BooleanField(verbose_name=_("acknowledge missing ANAF Cult Registry info"), default=False) + is_in_cult_registry = models.BooleanField( + verbose_name=_("presence in the ANAF Cult Registry"), null=True, blank=True, editable=False + ) + cult_registry_check_date = models.DateTimeField( + verbose_name=_("last check in the ANAF Cult Registry"), null=True, blank=True, editable=False + ) + pause_cult_registry_check = models.BooleanField( + verbose_name=_("pause checking the ANAF Cult Registry"), default=False + ) + acknowledge_missing_cult_registry = models.BooleanField( + verbose_name=_("acknowledge missing ANAF Cult Registry info"), default=False + ) date_created = models.DateTimeField(verbose_name=_("date created"), db_index=True, auto_now_add=True) date_updated = models.DateTimeField(verbose_name=_("date updated"), db_index=True, auto_now=True) From 759a40ccf2f7e8fa298057e0e774b6e737628d43 Mon Sep 17 00:00:00 2001 From: Daniel Ursache Dogariu Date: Mon, 16 Mar 2026 22:29:50 +0200 Subject: [PATCH 3/6] Display registry presence in the admin panel --- backend/donations/admin/ngos.py | 19 ++++- backend/locale/en/LC_MESSAGES/django.po | 106 ++++++++++++++---------- backend/locale/hy/LC_MESSAGES/django.po | 106 ++++++++++++++---------- backend/locale/ro/LC_MESSAGES/django.po | 106 ++++++++++++++---------- 4 files changed, 207 insertions(+), 130 deletions(-) diff --git a/backend/donations/admin/ngos.py b/backend/donations/admin/ngos.py index a1286fee..845e5a26 100644 --- a/backend/donations/admin/ngos.py +++ b/backend/donations/admin/ngos.py @@ -188,7 +188,13 @@ class NgoAdmin(ModelAdmin): inlines = (NgoCauseInline, NgoPartnerInline, NgoUserInline) - readonly_fields = ("date_created", "date_updated", "get_donations_link") + readonly_fields = ( + "date_created", + "date_updated", + "get_donations_link", + "is_in_cult_registry", + "cult_registry_check_date", + ) actions_detail = ("change_owner",) @@ -226,6 +232,17 @@ class NgoAdmin(ModelAdmin): ) }, ), + ( + _("ANAF Cult Registry"), + { + "fields": ( + "is_in_cult_registry", + "cult_registry_check_date", + "pause_cult_registry_check", + "acknowledge_missing_cult_registry", + ) + }, + ), ( _("Contact"), { diff --git a/backend/locale/en/LC_MESSAGES/django.po b/backend/locale/en/LC_MESSAGES/django.po index 9b95cde6..ce60c8b4 100644 --- a/backend/locale/en/LC_MESSAGES/django.po +++ b/backend/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-11 08:05+0200\n" +"POT-Creation-Date: 2026-03-16 22:23+0200\n" "PO-Revision-Date: 2025-03-27 14:48+0000\n" "Last-Translator: Andrei Ioniță \n" "Language-Team: English \n" "Language-Team: Armenian \n" "Language-Team: Romanian Date: Mon, 16 Mar 2026 22:47:38 +0200 Subject: [PATCH 4/6] Add the settings for the Cult registry checks --- backend/redirectioneaza/settings/__init__.py | 1 + backend/redirectioneaza/settings/integrations.py | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 backend/redirectioneaza/settings/integrations.py diff --git a/backend/redirectioneaza/settings/__init__.py b/backend/redirectioneaza/settings/__init__.py index 90d93b6a..e1c966f1 100644 --- a/backend/redirectioneaza/settings/__init__.py +++ b/backend/redirectioneaza/settings/__init__.py @@ -22,6 +22,7 @@ from .environment import * from .feature_flags import * from .i18n import * +from .integrations import * from .locations import * from .logging import * from .path_constants import * diff --git a/backend/redirectioneaza/settings/integrations.py b/backend/redirectioneaza/settings/integrations.py new file mode 100644 index 00000000..f2ddbe2d --- /dev/null +++ b/backend/redirectioneaza/settings/integrations.py @@ -0,0 +1,8 @@ +from .environment import env + +ANAF_CULT_REGISTRY_BATCH_SIZE = 100 +ANAF_CULT_REGISTRY_ENDPOINT = "https://webservicesp.anaf.ro/RegCult/api/v2/ws/cult" +ANAF_CULT_REGISTRY_EXISTING_RECHECK_DAYS = 120 +ANAF_CULT_REGISTRY_MISSING_RECHECK_DAYS = 30 +ANAF_CULT_REGISTRY_SCHEDULE_SECONDS = 180 +ENABLE_ANAF_CULT_REGISTRY = env.bool("ENABLE_CULT_REGISTRY_CHECK", True) From 05d5c3e41a507bbd9961e35e69484ecb05d8072b Mon Sep 17 00:00:00 2001 From: Daniel Ursache Dogariu Date: Mon, 16 Mar 2026 22:58:24 +0200 Subject: [PATCH 5/6] Add a filter in the admin NGO listing --- backend/donations/admin/ngos.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/donations/admin/ngos.py b/backend/donations/admin/ngos.py index 845e5a26..730b6ecb 100644 --- a/backend/donations/admin/ngos.py +++ b/backend/donations/admin/ngos.py @@ -177,6 +177,7 @@ class NgoAdmin(ModelAdmin): "is_verified", "is_active", "has_online_tax_account", + "is_in_cult_registry", "partners", HasOwnerFilter, "county", From 9f8e3411507be1a6eb63b71a68db059acf31054c Mon Sep 17 00:00:00 2001 From: Daniel Ursache Dogariu Date: Tue, 17 Mar 2026 15:02:16 +0200 Subject: [PATCH 6/6] Update the NGO model to store the check start date and end date --- backend/donations/admin/ngos.py | 6 +- ...ck_date_ngo_cult_registry_check_started.py | 18 +++ ..._ngo_cult_registry_check_ended_and_more.py | 23 ++++ backend/donations/models/ngos.py | 12 +- .../donations/workers/check_organization.py | 1 + backend/locale/en/LC_MESSAGES/django.po | 102 +++++++++-------- backend/locale/hy/LC_MESSAGES/django.po | 102 +++++++++-------- backend/locale/ro/LC_MESSAGES/django.po | 106 +++++++++--------- 8 files changed, 214 insertions(+), 156 deletions(-) create mode 100644 backend/donations/migrations/0043_rename_cult_registry_check_date_ngo_cult_registry_check_started.py create mode 100644 backend/donations/migrations/0044_ngo_cult_registry_check_ended_and_more.py create mode 100644 backend/donations/workers/check_organization.py diff --git a/backend/donations/admin/ngos.py b/backend/donations/admin/ngos.py index 730b6ecb..868ce907 100644 --- a/backend/donations/admin/ngos.py +++ b/backend/donations/admin/ngos.py @@ -194,7 +194,7 @@ class NgoAdmin(ModelAdmin): "date_updated", "get_donations_link", "is_in_cult_registry", - "cult_registry_check_date", + "cult_registry_check_ended", ) actions_detail = ("change_owner",) @@ -238,9 +238,9 @@ class NgoAdmin(ModelAdmin): { "fields": ( "is_in_cult_registry", - "cult_registry_check_date", - "pause_cult_registry_check", "acknowledge_missing_cult_registry", + "cult_registry_check_ended", + "pause_cult_registry_check", ) }, ), diff --git a/backend/donations/migrations/0043_rename_cult_registry_check_date_ngo_cult_registry_check_started.py b/backend/donations/migrations/0043_rename_cult_registry_check_date_ngo_cult_registry_check_started.py new file mode 100644 index 00000000..04f8a18c --- /dev/null +++ b/backend/donations/migrations/0043_rename_cult_registry_check_date_ngo_cult_registry_check_started.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.12 on 2026-03-17 12:33 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('donations', '0042_ngo_acknowledge_missing_cult_registry_and_more'), + ] + + operations = [ + migrations.RenameField( + model_name='ngo', + old_name='cult_registry_check_date', + new_name='cult_registry_check_started', + ), + ] diff --git a/backend/donations/migrations/0044_ngo_cult_registry_check_ended_and_more.py b/backend/donations/migrations/0044_ngo_cult_registry_check_ended_and_more.py new file mode 100644 index 00000000..8cf7ea4c --- /dev/null +++ b/backend/donations/migrations/0044_ngo_cult_registry_check_ended_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.12 on 2026-03-17 12:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('donations', '0043_rename_cult_registry_check_date_ngo_cult_registry_check_started'), + ] + + operations = [ + migrations.AddField( + model_name='ngo', + name='cult_registry_check_ended', + field=models.DateTimeField(blank=True, editable=False, null=True, verbose_name='last completed check in the ANAF Cult Registry'), + ), + migrations.AlterField( + model_name='ngo', + name='cult_registry_check_started', + field=models.DateTimeField(blank=True, editable=False, null=True, verbose_name='last started check in the ANAF Cult Registry'), + ), + ] diff --git a/backend/donations/models/ngos.py b/backend/donations/models/ngos.py index 56b55819..ad71bc1f 100644 --- a/backend/donations/models/ngos.py +++ b/backend/donations/models/ngos.py @@ -252,15 +252,19 @@ class Ngo(CommonFilenameCacheModel): # originally: active — the user cannot modify this property, it is set by the admin/by the NGO Hub settings is_active = models.BooleanField(verbose_name=_("is active"), db_index=True, default=True) - is_in_cult_registry = models.BooleanField( - verbose_name=_("presence in the ANAF Cult Registry"), null=True, blank=True, editable=False + # ANAF Cult Registry + cult_registry_check_started = models.DateTimeField( + verbose_name=_("last started check in the ANAF Cult Registry"), null=True, blank=True, editable=False ) - cult_registry_check_date = models.DateTimeField( - verbose_name=_("last check in the ANAF Cult Registry"), null=True, blank=True, editable=False + cult_registry_check_ended = models.DateTimeField( + verbose_name=_("last completed check in the ANAF Cult Registry"), null=True, blank=True, editable=False ) pause_cult_registry_check = models.BooleanField( verbose_name=_("pause checking the ANAF Cult Registry"), default=False ) + is_in_cult_registry = models.BooleanField( + verbose_name=_("presence in the ANAF Cult Registry"), null=True, blank=True, editable=False + ) acknowledge_missing_cult_registry = models.BooleanField( verbose_name=_("acknowledge missing ANAF Cult Registry info"), default=False ) diff --git a/backend/donations/workers/check_organization.py b/backend/donations/workers/check_organization.py new file mode 100644 index 00000000..46409041 --- /dev/null +++ b/backend/donations/workers/check_organization.py @@ -0,0 +1 @@ +# TODO diff --git a/backend/locale/en/LC_MESSAGES/django.po b/backend/locale/en/LC_MESSAGES/django.po index ce60c8b4..122090c6 100644 --- a/backend/locale/en/LC_MESSAGES/django.po +++ b/backend/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-16 22:23+0200\n" +"POT-Creation-Date: 2026-03-17 14:39+0200\n" "PO-Revision-Date: 2025-03-27 14:48+0000\n" "Last-Translator: Andrei Ioniță \n" "Language-Team: English \n" "Language-Team: Armenian \n" "Language-Team: Romanian