Skip to content

Commit e7f9d9e

Browse files
committed
Add fieldsets for document and account
1 parent 59919f6 commit e7f9d9e

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

src/country_workspace/contrib/hope/constants.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@
66
HOUSEHOLD_CHECKER_NAME: Final[str] = "HOPE Household core"
77
INDIVIDUAL_CHECKER_NAME: Final[str] = "HOPE Individual core"
88
PEOPLE_CHECKER_NAME: Final[str] = "HOPE People core"
9+
10+
DOCUMENT_FIELDSET_NAME = "HOPE Document"
11+
ACCOUNT_FIELDSET_NAME = "HOPE Account"
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# Generated by HCW 0.1.0 on 2025 06 23 11:12:31
2+
from django.db import transaction
3+
from hope_flex_fields.models import Fieldset, DataChecker, DataCheckerFieldset, FieldDefinition
4+
from packaging.version import Version
5+
6+
from django import forms
7+
8+
from country_workspace.contrib.hope.constants import (
9+
INDIVIDUAL_CHECKER_NAME,
10+
DOCUMENT_FIELDSET_NAME,
11+
ACCOUNT_FIELDSET_NAME,
12+
)
13+
from country_workspace.utils.flex_fields import Base64ImageField
14+
15+
_script_for_version = Version("0.1.0")
16+
17+
18+
fields_to_remove = [
19+
("national_id_issuer", {"field_type": forms.CharField}, {}),
20+
("national_id_no", {"field_type": forms.CharField}, {}),
21+
("national_id_photo", {"field_type": forms.CharField}, {}),
22+
("phone_no", {"field_type": forms.CharField}, {}),
23+
]
24+
25+
document_fields = [
26+
("document_number", {"field_type": forms.CharField}, {}),
27+
("photo", {"field_type": Base64ImageField}, {}),
28+
("issuance_date", {"field_type": forms.DateField}, {}),
29+
("expiry_date", {"field_type": forms.DateField}, {}),
30+
]
31+
32+
account_fields = [
33+
("number", {"field_type": forms.CharField}, {}),
34+
("data", {"field_type": forms.JSONField}, {}),
35+
]
36+
37+
38+
def remove_fields_from_individual_fieldset() -> None:
39+
fieldset = Fieldset.objects.get(name=INDIVIDUAL_CHECKER_NAME)
40+
for field_name, _, _ in fields_to_remove:
41+
fieldset.fields.get(name=field_name).delete()
42+
43+
44+
def create_and_add_fieldsets_to_datachecker() -> tuple[Fieldset, Fieldset]:
45+
ind_datachecker = DataChecker.objects.get(name=INDIVIDUAL_CHECKER_NAME)
46+
47+
document_fieldset, _ = Fieldset.objects.get_or_create(name=DOCUMENT_FIELDSET_NAME)
48+
account_fieldset, _ = Fieldset.objects.get_or_create(name=ACCOUNT_FIELDSET_NAME)
49+
for fieldset, prefixes in (
50+
(document_fieldset, ("national_id__", "national_passport__")),
51+
(account_fieldset, ("photo__", "bank__")),
52+
):
53+
for prefix in prefixes:
54+
DataCheckerFieldset.objects.get_or_create(checker=ind_datachecker, fieldset=fieldset, prefix=prefix)
55+
return document_fieldset, account_fieldset
56+
57+
58+
def add_fields_to_fieldsets(fieldset: Fieldset, fields: list) -> None:
59+
for field_name, field_def, field_attrs in fields:
60+
fieldset.fields.get_or_create(
61+
name=field_name, definition=FieldDefinition.objects.get(**field_def), defaults={"attrs": field_attrs or {}}
62+
)
63+
64+
65+
def forward() -> None:
66+
with transaction.atomic():
67+
remove_fields_from_individual_fieldset()
68+
69+
document_fieldset, account_fieldset = create_and_add_fieldsets_to_datachecker()
70+
71+
for fieldset, fields in ((document_fieldset, document_fields), (account_fieldset, account_fields)):
72+
add_fields_to_fieldsets(fieldset, fields)
73+
74+
75+
def backward() -> None:
76+
with transaction.atomic():
77+
Fieldset.objects.filter(name__in=[DOCUMENT_FIELDSET_NAME, ACCOUNT_FIELDSET_NAME]).delete()
78+
79+
individual_fieldset, _ = Fieldset.objects.get_or_create(name=INDIVIDUAL_CHECKER_NAME)
80+
for field_name, field_def, field_attrs in fields_to_remove:
81+
individual_fieldset.fields.get_or_create(
82+
name=field_name,
83+
definition=FieldDefinition.objects.get(**field_def),
84+
defaults={"attrs": field_attrs or {}},
85+
)
86+
87+
88+
class Scripts:
89+
requires = []
90+
operations = [(forward, backward)]

0 commit comments

Comments
 (0)