meta-edc 0.3.33__py3-none-any.whl → 0.3.34__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- meta_auth/auth_objects.py +15 -0
- meta_auth/auths.py +5 -2
- meta_edc/settings/debug.py +2 -2
- meta_edc/settings/defaults.py +4 -0
- meta_edc/urls.py +1 -0
- {meta_edc-0.3.33.dist-info → meta_edc-0.3.34.dist-info}/METADATA +6 -3
- {meta_edc-0.3.33.dist-info → meta_edc-0.3.34.dist-info}/RECORD +40 -29
- {meta_edc-0.3.33.dist-info → meta_edc-0.3.34.dist-info}/WHEEL +1 -1
- meta_pharmacy/admin.py +128 -0
- meta_pharmacy/admin_site.py +5 -0
- meta_pharmacy/apps.py +3 -0
- meta_pharmacy/constants.py +10 -0
- meta_pharmacy/forms.py +65 -0
- meta_pharmacy/migrations/0002_initial.py +693 -0
- meta_pharmacy/migrations/0003_auto_20240909_2335.py +64 -0
- meta_pharmacy/models.py +102 -0
- meta_pharmacy/urls.py +8 -0
- meta_prn/action_items.py +9 -1
- meta_reports/admin/__init__.py +1 -0
- meta_reports/admin/dbviews/__init__.py +1 -0
- meta_reports/admin/dbviews/imp_substitutions_admin.py +88 -0
- meta_reports/migrations/0017_auto_20240819_1711.py +1 -0
- meta_reports/migrations/0047_impsubstitutions.py +56 -0
- meta_reports/migrations/0048_auto_20240909_2338.py +48 -0
- meta_reports/models/__init__.py +1 -0
- meta_reports/models/dbviews/__init__.py +1 -0
- meta_reports/models/dbviews/imp_substitutions/__init__.py +1 -0
- meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +37 -0
- meta_reports/models/dbviews/imp_substitutions/view_definition.py +20 -0
- meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +0 -1
- meta_sites/tests/test_sites.py +1 -1
- meta_subject/migrations/0107_auto_20220415_0043.py +28 -22
- meta_subject/migrations/0126_auto_20220719_2142.py +4 -4
- meta_subject/migrations/0131_auto_20220722_0411.py +28 -23
- meta_subject/migrations/0132_auto_20220722_1825.py +10 -6
- meta_subject/migrations/0135_auto_20220722_2212.py +39 -35
- meta_subject/migrations/0150_auto_20220914_0039.py +15 -11
- meta_analytics/notebooks/meta_endpoints.ipynb +0 -286
- {meta_edc-0.3.33.dist-info → meta_edc-0.3.34.dist-info}/AUTHORS +0 -0
- {meta_edc-0.3.33.dist-info → meta_edc-0.3.34.dist-info}/LICENSE +0 -0
- {meta_edc-0.3.33.dist-info → meta_edc-0.3.34.dist-info}/top_level.txt +0 -0
meta_auth/auth_objects.py
CHANGED
@@ -3,6 +3,7 @@ from edc_auth.get_app_codenames import get_app_codenames
|
|
3
3
|
|
4
4
|
META_REPORTS = "META_REPORTS"
|
5
5
|
META_REPORTS_AUDIT = "META_REPORTS_AUDIT"
|
6
|
+
META_PHARMACIST = "META_PHARMACIST"
|
6
7
|
|
7
8
|
|
8
9
|
clinic_codenames = get_app_codenames(
|
@@ -10,6 +11,20 @@ clinic_codenames = get_app_codenames(
|
|
10
11
|
)
|
11
12
|
|
12
13
|
reports_codenames = get_app_codenames("meta_reports")
|
14
|
+
reports_codenames.remove("meta_reports.view_impsubstitutions")
|
15
|
+
|
16
|
+
meta_pharmacy_codenames = get_app_codenames("meta_pharmacy")
|
17
|
+
meta_pharmacy_codenames.append("meta_reports.view_impsubstitutions")
|
18
|
+
meta_pharmacy_codenames.append("meta_reports.viewallsites_impsubstitutions")
|
19
|
+
excluded_meta_pharmacy_codenames = [
|
20
|
+
"meta_pharmacy.add_rx",
|
21
|
+
"meta_pharmacy.change_rx",
|
22
|
+
"meta_pharmacy.delete_rx",
|
23
|
+
]
|
24
|
+
|
25
|
+
meta_pharmacy_codenames = [
|
26
|
+
c for c in meta_pharmacy_codenames if c not in excluded_meta_pharmacy_codenames
|
27
|
+
]
|
13
28
|
|
14
29
|
add_perms = []
|
15
30
|
if not settings.LIVE_SYSTEM:
|
meta_auth/auths.py
CHANGED
@@ -28,15 +28,18 @@ from edc_subject_dashboard.auths import SUBJECT_VIEW
|
|
28
28
|
from edc_unblinding.auth_objects import UNBLINDING_REQUESTORS
|
29
29
|
|
30
30
|
from .auth_objects import (
|
31
|
+
META_PHARMACIST,
|
31
32
|
META_REPORTS,
|
32
33
|
META_REPORTS_AUDIT,
|
33
34
|
clinic_codenames,
|
35
|
+
meta_pharmacy_codenames,
|
34
36
|
reports_codenames,
|
35
37
|
screening_codenames,
|
36
38
|
)
|
37
39
|
|
38
40
|
site_auths.add_group(*reports_codenames, name=META_REPORTS)
|
39
41
|
site_auths.add_group(*reports_codenames, name=META_REPORTS_AUDIT, view_only=True)
|
42
|
+
site_auths.add_group(*meta_pharmacy_codenames, name=META_PHARMACIST)
|
40
43
|
|
41
44
|
# update edc_auth default groups
|
42
45
|
site_auths.update_group(*clinic_codenames, name=AUDITOR, view_only=True)
|
@@ -69,8 +72,8 @@ site_auths.update_role(
|
|
69
72
|
DATA_MANAGER_EXPORT,
|
70
73
|
name=DATA_EXPORTER_ROLE,
|
71
74
|
)
|
72
|
-
site_auths.update_role(RANDO_UNBLINDED, PII, name=PHARMACIST_ROLE)
|
73
|
-
site_auths.update_role(RANDO_BLINDED, PII, name=SITE_PHARMACIST_ROLE)
|
75
|
+
site_auths.update_role(RANDO_UNBLINDED, PII, META_PHARMACIST, name=PHARMACIST_ROLE)
|
76
|
+
site_auths.update_role(RANDO_BLINDED, PII, META_PHARMACIST, name=SITE_PHARMACIST_ROLE)
|
74
77
|
site_auths.update_role(SUBJECT_VIEW, SCREENING_VIEW, name=DATA_MANAGER_ROLE)
|
75
78
|
site_auths.update_role(
|
76
79
|
SUBJECT_VIEW, SCREENING_VIEW, ACTION_ITEM, UNBLINDING_REQUESTORS, name=TMG_ROLE
|
meta_edc/settings/debug.py
CHANGED
@@ -7,8 +7,8 @@ from .defaults import * # noqa
|
|
7
7
|
print(f"Settings file {__file__}")
|
8
8
|
|
9
9
|
# TZ Sites:
|
10
|
-
SITE_ID = SiteID(default=20) # Amana
|
11
|
-
|
10
|
+
# SITE_ID = SiteID(default=20) # Amana
|
11
|
+
SITE_ID = SiteID(default=10) # Hindu Mandal
|
12
12
|
# SITE_ID = SiteID(default=40) # Mwananyamala
|
13
13
|
# SITE_ID = SiteID(default=50) # Mbagala
|
14
14
|
# SITE_ID = SiteID(default=60) # Mnazi-Moja
|
meta_edc/settings/defaults.py
CHANGED
@@ -188,6 +188,7 @@ MIDDLEWARE = [
|
|
188
188
|
"django.contrib.sites.middleware.CurrentSiteMiddleware",
|
189
189
|
"django.middleware.csrf.CsrfViewMiddleware",
|
190
190
|
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
191
|
+
"django.contrib.auth.middleware.LoginRequiredMiddleware",
|
191
192
|
"defender.middleware.FailedLoginMiddleware",
|
192
193
|
"django.contrib.messages.middleware.MessageMiddleware",
|
193
194
|
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
@@ -413,6 +414,9 @@ EDC_RANDOMIZATION_SKIP_VERIFY_CHECKS = True
|
|
413
414
|
# edc-sites
|
414
415
|
EDC_SITES_MODULE_NAME = env.str("EDC_SITES_MODULE_NAME")
|
415
416
|
|
417
|
+
# meta_pharmacy
|
418
|
+
META_PHARMACY_RX_SUBSTITUTION_FILE = env.str("META_PHARMACY_RX_SUBSTITUTION_FILE")
|
419
|
+
|
416
420
|
# django-multisite
|
417
421
|
CACHE_MULTISITE_KEY_PREFIX = "meta4"
|
418
422
|
SILENCED_SYSTEM_CHECKS = ["sites.E101"]
|
meta_edc/urls.py
CHANGED
@@ -62,6 +62,7 @@ urlpatterns = [
|
|
62
62
|
*paths_for_urlpatterns("meta_consent"),
|
63
63
|
*paths_for_urlpatterns("meta_export"),
|
64
64
|
*paths_for_urlpatterns("meta_lists"),
|
65
|
+
*paths_for_urlpatterns("meta_pharmacy"),
|
65
66
|
*paths_for_urlpatterns("meta_prn"),
|
66
67
|
*paths_for_urlpatterns("meta_screening"),
|
67
68
|
*paths_for_urlpatterns("meta_subject"),
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: meta-edc
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.34
|
4
4
|
Summary: META Trial EDC (http://www.isrctn.com/ISRCTN76157257)
|
5
5
|
Home-page: https://github.com/meta-trial/meta-edc
|
6
6
|
Author: Erik van Widenfelt
|
@@ -20,7 +20,7 @@ Requires-Python: >=3.12
|
|
20
20
|
Description-Content-Type: text/x-rst
|
21
21
|
License-File: LICENSE
|
22
22
|
License-File: AUTHORS
|
23
|
-
Requires-Dist: edc ==0.6.
|
23
|
+
Requires-Dist: edc ==0.6.11
|
24
24
|
Requires-Dist: edc-microscopy
|
25
25
|
Requires-Dist: beautifulsoup4
|
26
26
|
Requires-Dist: edc-analytics
|
@@ -35,7 +35,10 @@ META Edc
|
|
35
35
|
|
36
36
|
Metformin treatment in Africa- META
|
37
37
|
|
38
|
-
https://www.
|
38
|
+
* https://www.ucl.ac.uk/global-health/research/z-research/respond-africa/metformin-treatment-africa-meta
|
39
|
+
* https://www.inteafrica.org/related-projects/meta-trial/
|
40
|
+
* https://www.lstmed.ac.uk/research/departments/international-public-health/respond-africa/meta
|
41
|
+
* http://www.isrctn.com/ISRCTN76157257
|
39
42
|
|
40
43
|
py 3.12 / DJ 5.1 / edc 0.6.0 (META3)
|
41
44
|
|
@@ -96,7 +96,6 @@ meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py,sha256=
|
|
96
96
|
meta_analytics/dataframes/screening/__init__.py,sha256=onGpmB4474gu_JcyRGdRy09YQyP2Np-mX-rYZTFdJoA,114
|
97
97
|
meta_analytics/dataframes/screening/get_glucose_tested_only_df.py,sha256=0oMJIsIJRjurfpPONuJ4Aoab1UJikezGe3lQNWRoOo4,660
|
98
98
|
meta_analytics/dataframes/screening/get_screening_df.py,sha256=_6AmaHvH06ubFGiQB6XbVRkVGE5kvtbVbDfs7k5TPX8,4854
|
99
|
-
meta_analytics/notebooks/meta_endpoints.ipynb,sha256=cmdGX_sKa32AfwWzOXmSS-9oB3Lxhuy5c-FbQdSgMFs,7118
|
100
99
|
meta_analytics/tables/__init__.py,sha256=mhESCt0Lq4RJU-lbQ5fVfIbXzrEsootGYp7EzQIqDBI,70
|
101
100
|
meta_analytics/tables/eligible.py,sha256=2q-SMbAsrBgOVc4Ttq5P3bpjsUKwP5hYhJBMgyH6GGI,3389
|
102
101
|
meta_analytics/tables/has_dm.py,sha256=W6pObFI7k2hpL46Q7t2QIfYDVfo7-PHJMdCv6Q5EUQk,1739
|
@@ -106,8 +105,8 @@ meta_analytics/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
106
105
|
meta_analytics/tests/test_endpoints_by_date.py,sha256=43uBO5VTcF5zq9I5ow9f6Isn-xs7Km_qOrXELJjaew4,3034
|
107
106
|
meta_auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
107
|
meta_auth/apps.py,sha256=AcVJmdM3EuebpqB7A1vXRfYBcovgsqPvE71lnGuM-qo,298
|
109
|
-
meta_auth/auth_objects.py,sha256=
|
110
|
-
meta_auth/auths.py,sha256=
|
108
|
+
meta_auth/auth_objects.py,sha256=C9ANQTiqML8oH8DharMc8JQYYKV0At9kGCysehcrTfU,2539
|
109
|
+
meta_auth/auths.py,sha256=EBdK6b5b2yduDvqYmnmJFRvuJ0fLDQ_q226iuwHA_QU,3008
|
111
110
|
meta_auth/urls.py,sha256=_sVCnQeiAFRYKhxga3_DjoKj_4bgs1s2gjcynDiapvA,111
|
112
111
|
meta_consent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
113
112
|
meta_consent/action_items.py,sha256=JIU5DCNeenaOk0PVTsDkAvFmHCquXBeFZf4Vw7JONl0,756
|
@@ -219,7 +218,7 @@ meta_edc/meta_version.py,sha256=8IASYGnr43t18oDhNAPNnQoKvFYVAUnPILl6a05HAoc,211
|
|
219
218
|
meta_edc/model_callers.py,sha256=PjQEW7Kp5HHcUMdmz7dvxg53HvGJHXUKr6QTd-4hsyE,1339
|
220
219
|
meta_edc/models.py,sha256=DLA-hDdFszAVNCe1sZqVoLmIXifFW0HeZsipP9D1Ic4,46
|
221
220
|
meta_edc/navbars.py,sha256=1E7JzjI9NUGKwOVvyMGE2Gs2FM40vImMcuB_01t5FTs,1099
|
222
|
-
meta_edc/urls.py,sha256=
|
221
|
+
meta_edc/urls.py,sha256=BpDuV2XX7Qe8xkSgjhT7ehiZ7QCVtQwzQiY2YPhta_I,3534
|
223
222
|
meta_edc/utils.py,sha256=FdGGHT0zCUM9FLovLanH_ultcxbVitCvvPAwq0U3yYc,342
|
224
223
|
meta_edc/wsgi.py,sha256=Ns9vu_jcEqpOLM5tb-hwVUh3ciInocrG3kUPAxh7nJg,165
|
225
224
|
meta_edc/wsgi_live.py,sha256=EprgdsDiEvNN033w6lUQHaS8Y3ntpPrWHDTOgZcjaCQ,164
|
@@ -232,8 +231,8 @@ meta_edc/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
232
231
|
meta_edc/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
233
232
|
meta_edc/management/commands/update_forms_reference.py,sha256=_DiCqhHUk8lGhDGlsjOA069EE-g7UBDlZQCH6L1xiHo,1003
|
234
233
|
meta_edc/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
235
|
-
meta_edc/settings/debug.py,sha256
|
236
|
-
meta_edc/settings/defaults.py,sha256=
|
234
|
+
meta_edc/settings/debug.py,sha256=PUUzyXtMyiKYCyqHeD-mT6PjEKJS8ASDcSxtiG84E1Y,947
|
235
|
+
meta_edc/settings/defaults.py,sha256=Q1WJEfWQF5A-IvFoMeyQi0n5BaPmXSgpfAkJ011B_SY,18764
|
237
236
|
meta_edc/settings/live.py,sha256=uLTlsIc3H6gdE_7pkL6vyOVa6V_74hnXFkiojqGFAYY,264
|
238
237
|
meta_edc/settings/logging.py,sha256=6qVUE37OMkf5rzwTmMq4krFsZ2jcyCpWdFtGih_Cs4U,1938
|
239
238
|
meta_edc/settings/minimal.py,sha256=3z-7GBluflnUkuSotKZlYvpL34NZ6tfFNuQNJLCyflo,592
|
@@ -290,14 +289,20 @@ meta_lists/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
290
289
|
meta_lists/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
291
290
|
meta_lists/tests/test_lists.py,sha256=qcp2emRyd5-cP2oLluy8MpUucBDQ8_GdUxjh2KbZPv4,212
|
292
291
|
meta_pharmacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
293
|
-
meta_pharmacy/
|
294
|
-
meta_pharmacy/
|
295
|
-
meta_pharmacy/
|
292
|
+
meta_pharmacy/admin.py,sha256=xFFC-xROXqcWBsS1QYSFYJYdUzcTQMkzFHzEMniasNk,3255
|
293
|
+
meta_pharmacy/admin_site.py,sha256=Ekq8Z13f1w4Llm6exO5w4Jk4Bvt-5WN1ydy_BS2rbdI,171
|
294
|
+
meta_pharmacy/apps.py,sha256=VNiKT23F5d5nkXxzu1L-kAqovNOdfxzp-cUC6qcioVQ,732
|
295
|
+
meta_pharmacy/constants.py,sha256=d3NAZwpxCDm9LLQ_QGKBG2txooYg748Ajh8a2deF0kw,263
|
296
|
+
meta_pharmacy/forms.py,sha256=b02OM7TbMyQ12qrZ8WptmhIuGj87fgkQQkc0qVxMopw,2104
|
297
|
+
meta_pharmacy/models.py,sha256=stj6HnurPlnLKZi0tZKTzy3m24t26TsDMzydJklMQxg,3373
|
296
298
|
meta_pharmacy/prepare_meta_pharmacy.py,sha256=5gNiPkmOzWwCW-_q6hgIzj_0tnPuN4Tl1lVI6FygNgs,2945
|
299
|
+
meta_pharmacy/urls.py,sha256=jncXssL_SeRhb_OJVXLdGFvPT3BqtrkSPdq-eyJnGfY,207
|
297
300
|
meta_pharmacy/migrations/0001_initial.py,sha256=2uyWhZ-Qkjum1gJJA5v-BWUdpmKhkf8BcuDQMl8895s,1115
|
301
|
+
meta_pharmacy/migrations/0002_initial.py,sha256=zkPXmGhdEi-EM0HJRBaTUAltdiLRjW1BhU4GEydoBM8,27355
|
302
|
+
meta_pharmacy/migrations/0003_auto_20240909_2335.py,sha256=_hbzV6HaBm-VS_jQMhl3w5srvyaYOQclLBvr_8f79uk,2227
|
298
303
|
meta_pharmacy/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
299
304
|
meta_prn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
300
|
-
meta_prn/action_items.py,sha256=
|
305
|
+
meta_prn/action_items.py,sha256=wz6X7Ve8ibqPBO5kB6S9rYYkWfx8JxsoYRVppzIGAzk,9110
|
301
306
|
meta_prn/admin_site.py,sha256=E4dJ6ofu9Kp-1SIWIuY3PraVPbEJSWBBqhorJPGUNqU,161
|
302
307
|
meta_prn/apps.py,sha256=NEqrwzEW277BAPGeL1H1KdK9e74FqXfYHK6o46BtaJA,280
|
303
308
|
meta_prn/baker_recipes.py,sha256=jDGg3btxjtvnsph_AnKoZBDUeTfokMs5iQWnQBJD-jw,660
|
@@ -434,13 +439,14 @@ meta_reports/pdf_report.py,sha256=9lWnRc_BNieDFXC4VgA0QHK6g_ct58u8tupPRsbRvV0,23
|
|
434
439
|
meta_reports/tasks.py,sha256=wPzfm99Hox1AIvt1KxYg1r6g9v8ta2AHOHesoN6AxEk,370
|
435
440
|
meta_reports/urls.py,sha256=_c6AMrK4U5MsyFSU2JSPNfiZlbhuw24C7CyPNYpqGd0,206
|
436
441
|
meta_reports/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
437
|
-
meta_reports/admin/__init__.py,sha256=
|
442
|
+
meta_reports/admin/__init__.py,sha256=3GDQM-HA1h8FdsmGSAiPaCd1paMGGJHTq6Ivd4Ob9bA,434
|
438
443
|
meta_reports/admin/endpoints_admin.py,sha256=L4mDLNIkR6203RI3ImBYel2kevaH_Nwa6KMYuoDwyNU,518
|
439
444
|
meta_reports/admin/endpoints_all_admin.py,sha256=_czdezZf9fSjwZJmO-3HbmdXrXP6nk8-HdiweqUzPRE,476
|
440
445
|
meta_reports/admin/list_filters.py,sha256=pByBzz9-qGwqBfdZFlByxJUZDTJQXOTWfNLjmK8KF00,870
|
441
446
|
meta_reports/admin/modeladmin_mixins.py,sha256=RhdkF5W9ccuwaX5NTMF4b9shQJgDFaOlj7ENOTBAG0g,3669
|
442
|
-
meta_reports/admin/dbviews/__init__.py,sha256=
|
447
|
+
meta_reports/admin/dbviews/__init__.py,sha256=2yPu0SO7ZX9yjan0OS9izzws14YYoXcGXmZhwJhax1I,675
|
443
448
|
meta_reports/admin/dbviews/glucose_summary_admin.py,sha256=NqnDKx5l0Q-2xxRGdnf50DaRX1Sn8-DC0jHSk96LkRo,4005
|
449
|
+
meta_reports/admin/dbviews/imp_substitutions_admin.py,sha256=um7UEmwQH7V3PH5NASG3lYHqsrIux0mkVgVcU7m7rAI,3257
|
444
450
|
meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py,sha256=XyroEqxlX816xrdi0IVSelNPxPBWi96niKa-MQVGkck,2058
|
445
451
|
meta_reports/admin/dbviews/unattended_three_in_row2_admin.py,sha256=0r13KRr0gsH2osmSlffRV11SpSBpWM612AYl-GOoYm0,1347
|
446
452
|
meta_reports/admin/dbviews/unattended_three_in_row_admin.py,sha256=i_-H3pMXRjssf8jFw8gJ8_b0FaM4tX2AI4xfHQDyssU,1121
|
@@ -473,7 +479,7 @@ meta_reports/migrations/0013_auto_20240813_1516.py,sha256=6m7f0kzDjmQ1WuvTe2YmYc
|
|
473
479
|
meta_reports/migrations/0014_auto_20240813_1517.py,sha256=73gFSbkF_1Ujj-ynf6kzpVw7-iJjyxBhwTQwek0gbM0,5506
|
474
480
|
meta_reports/migrations/0015_alter_endpoints_site.py,sha256=j3SqxCkI6MO3-SdDkmYPtRJ8tidcXL5RJ_IK42R6soQ,551
|
475
481
|
meta_reports/migrations/0016_missingscreeningogtt.py,sha256=Dmgh4Hmzrye_GHGXNksBCt6p-cI4U5qakj3RHYi4sOw,1962
|
476
|
-
meta_reports/migrations/0017_auto_20240819_1711.py,sha256=
|
482
|
+
meta_reports/migrations/0017_auto_20240819_1711.py,sha256=OJmsJFp7eMoBOphCNaJEDvwnHzab6Q8tl92Uxdqir20,36773
|
477
483
|
meta_reports/migrations/0018_auto_20240819_1713.py,sha256=BaYwu6TA-wNzKqR-1GJ3fzrZ9b9Oj6C7M5f32QFyPGU,5309
|
478
484
|
meta_reports/migrations/0019_auto_20240819_1721.py,sha256=oxpy4mTbvJoBC2AqDg5FXkjOhTKmr6LiF4x74-yUr_k,5594
|
479
485
|
meta_reports/migrations/0020_auto_20240819_1811.py,sha256=CgjDxYzefPLngSZ8l4XSm3K086-2SCbK6S_8tuMgS6w,6038
|
@@ -503,15 +509,20 @@ meta_reports/migrations/0043_auto_20240828_2309.py,sha256=ZQUFjpWb6Jl2__ghkXL_gv
|
|
503
509
|
meta_reports/migrations/0044_auto_20240828_2323.py,sha256=oOuxdpmk3NjdkljjqtSHOPv-C2cFNgHquTz-qjPwff4,143236
|
504
510
|
meta_reports/migrations/0045_auto_20240829_0248.py,sha256=V9F3yLQsbvUL40Fei3FrhBB4t7eReGGW4tnkx2lAjrw,33850
|
505
511
|
meta_reports/migrations/0046_auto_20240829_0250.py,sha256=lKVlj7LrkOJ49LJxccYvQdYEZhnSKTcZEcZMYj7h9q8,30676
|
512
|
+
meta_reports/migrations/0047_impsubstitutions.py,sha256=VPTb5j2t9IvwR-Bq0lnVBGLAVKdL7IbY8DD-cjl_m5o,2088
|
513
|
+
meta_reports/migrations/0048_auto_20240909_2338.py,sha256=mYAOUzJohv9eW9y93fpZTmlgmx_eOBRhUBMr0F3_-_M,3169
|
506
514
|
meta_reports/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
507
|
-
meta_reports/models/__init__.py,sha256=
|
515
|
+
meta_reports/models/__init__.py,sha256=8JnKMG9devIPboCCGj423x77Ylry2ROdGOnDSk5Xo4w,380
|
508
516
|
meta_reports/models/endpoints.py,sha256=HfxQuKkzu883xbTeVfIEktN-ARoGe1qC6KgEAzRtV5E,925
|
509
517
|
meta_reports/models/endpoints_proxy.py,sha256=3h3JGaPmnJedFPVWGrk4idV4YtdihqiCI5W7QomwG4E,318
|
510
518
|
meta_reports/models/dbviews/README,sha256=GdeboB7Xqb-Qo_rE1ondcxP8Ps93MIjLzCePQCePig0,686
|
511
|
-
meta_reports/models/dbviews/__init__.py,sha256=
|
519
|
+
meta_reports/models/dbviews/__init__.py,sha256=C5YGOKwVAexjWxLh5vl0m561TBMWDM_yAvIrwqG_M70,559
|
512
520
|
meta_reports/models/dbviews/glucose_summary/__init__.py,sha256=Tfgjso4TpxMCidAdRJp8g1Ykqqa43yWlQSotzAaORAo,93
|
513
521
|
meta_reports/models/dbviews/glucose_summary/unmanaged_model.py,sha256=uqhD5JLXtyQ94zpG5Puxodjzli3quE4GgiFi7en6EeM,1055
|
514
522
|
meta_reports/models/dbviews/glucose_summary/view_definition.py,sha256=Fc5KN-It9dcBvRta-b26kUl8uQEHA19vrYIhNRqe2Xo,1512
|
523
|
+
meta_reports/models/dbviews/imp_substitutions/__init__.py,sha256=N0507JzoVRtNA9W9_RoiAQYEQZGdvP2U8P83ZJMeZxQ,46
|
524
|
+
meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py,sha256=KxynevJevXVj0zVHf7_DIjw_EZzDt3BszEcfEHygPGc,1168
|
525
|
+
meta_reports/models/dbviews/imp_substitutions/view_definition.py,sha256=FRAssQC9e48ZoBEScGuiRV61ZX3KvuW29l-XqPNsTbg,870
|
515
526
|
meta_reports/models/dbviews/missing_screening_ogtt/__init__.py,sha256=7uX_2HfVU-3G1O_xecfGnE5_pcX5eceiRaapeDQtzIw,105
|
516
527
|
meta_reports/models/dbviews/missing_screening_ogtt/note_model.py,sha256=JHItVS11WDFg3lTe7ayH9T7Epd-VvXXD_79FssrmAwc,1813
|
517
528
|
meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py,sha256=_XFzpOiMoxr-F0ebKNEnyXqS6dnb3P5tBRnZlbrQ2x8,1346
|
@@ -521,7 +532,7 @@ meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py,sha256=QBptc
|
|
521
532
|
meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py,sha256=QI9T3K35pAAUMCiIbtwU_cf9kPodBfG9jwNeahPzTMQ,647
|
522
533
|
meta_reports/models/dbviews/on_study_missing_lab_values/view_definition.py,sha256=Z0dnJZZT7EokC0M2TVSCjcLU0SyFfjxydjYmHqZcNag,568
|
523
534
|
meta_reports/models/dbviews/on_study_missing_values/__init__.py,sha256=bxRAXRocUIdUCg9jARlztOE2co9LqgHbBOkU1Bykz9M,49
|
524
|
-
meta_reports/models/dbviews/on_study_missing_values/qa_cases.py,sha256=
|
535
|
+
meta_reports/models/dbviews/on_study_missing_values/qa_cases.py,sha256=NiqcSU5ZQD6zSgn08yPY0TEFqmeHSpH6DHFX8ns_XaI,1920
|
525
536
|
meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py,sha256=TQptzrx1Xv-sE_3ioO9BZ1ZE7CKZG8JWXsFD6-ZxI8k,632
|
526
537
|
meta_reports/models/dbviews/on_study_missing_values/view_definition.py,sha256=W7MgZo51Y3nzQ7lUDtmZquRnC5ELdKGnpsscaCC9ouM,564
|
527
538
|
meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py,sha256=eIyKY9mdIE3-J2vtQtY7MOg_RQkwKj7aserwO5PBNQQ,62
|
@@ -686,7 +697,7 @@ meta_sites/models.py,sha256=DLA-hDdFszAVNCe1sZqVoLmIXifFW0HeZsipP9D1Ic4,46
|
|
686
697
|
meta_sites/sites.py,sha256=H26Erar3_fLVl5wf2ILDM5C6wGEoi0dQbiSPmzb9OGw,1625
|
687
698
|
meta_sites/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
688
699
|
meta_sites/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
689
|
-
meta_sites/tests/test_sites.py,sha256=
|
700
|
+
meta_sites/tests/test_sites.py,sha256=WkI87TUqTsVxbIPh4wQdJ15FOoGE6R5oGPXqUpO0ntE,426
|
690
701
|
meta_sites/tests/urls.py,sha256=_sVCnQeiAFRYKhxga3_DjoKj_4bgs1s2gjcynDiapvA,111
|
691
702
|
meta_stats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
692
703
|
meta_stats/incidence.py,sha256=59-BOn4nw-U79Ku4SxiPkJIse2pi467dOMTnLGmZvgI,540
|
@@ -912,7 +923,7 @@ meta_subject/migrations/0103_auto_20220324_0326.py,sha256=gBiNh4-CElPRQcGqb04t4Y
|
|
912
923
|
meta_subject/migrations/0104_auto_20220412_2151.py,sha256=lruwZFW9lyRzAJ-13bJZh19ZhFYMKX6k-TUjuXWIZAY,966
|
913
924
|
meta_subject/migrations/0105_auto_20220412_2310.py,sha256=wEJsJDk_cwh-JW8ZPxg9HGE3YKKtOPRQJTo6xywX5nk,1290
|
914
925
|
meta_subject/migrations/0106_auto_20220414_1741.py,sha256=tUQQG1JgKa_XrTL2Paz83YaEs8LhIl9gph5OyiV22nk,772
|
915
|
-
meta_subject/migrations/0107_auto_20220415_0043.py,sha256=
|
926
|
+
meta_subject/migrations/0107_auto_20220415_0043.py,sha256=PWxsJHxonC9L0nTWJnNF-oc3dcZfzkJPNvI38DYDbD8,1718
|
916
927
|
meta_subject/migrations/0108_auto_20220415_1747.py,sha256=4HHVMatXiqavoutbzbZY7TlTHxg32uQYP7gHWg27DX8,688
|
917
928
|
meta_subject/migrations/0109_auto_20220415_1758.py,sha256=FNBIWr0sCmXCvzI0yNVeMSrPup7vMQJhnYxrzHu9DSA,556
|
918
929
|
meta_subject/migrations/0110_auto_20220512_1811.py,sha256=iKRSR0qkKbgOGQUT3zyz7SWN7kyrfJtFH98c1QTu8gM,2516
|
@@ -931,16 +942,16 @@ meta_subject/migrations/0122_auto_20220708_2144.py,sha256=qEaeHaf0Ab3SwvlENZxP4H
|
|
931
942
|
meta_subject/migrations/0123_auto_20220714_2136.py,sha256=4ZOX8z0-GjWDTNu9DkZNxZtKIyFcMaEHMdzL4zf_pwA,8262
|
932
943
|
meta_subject/migrations/0124_auto_20220714_2303.py,sha256=M_QpUhj8K-LD5HLytzYH7n59bqlruHzCGpozKjPaCY0,1206
|
933
944
|
meta_subject/migrations/0125_auto_20220719_2134.py,sha256=ijk0rLwlXCxft3tPptVpqfDrtuk6ud5Cxh_EFTZ8FW8,1568
|
934
|
-
meta_subject/migrations/0126_auto_20220719_2142.py,sha256=
|
945
|
+
meta_subject/migrations/0126_auto_20220719_2142.py,sha256=etZtba3l2cN_QQqEKEIrKpKOsotCifX85Y8P6ge2if4,784
|
935
946
|
meta_subject/migrations/0127_auto_20220720_0053.py,sha256=YAJ2xlCKC-0oin-XxnfzyZcsAF9ozNx_a_5cP8WJ1i4,5488
|
936
947
|
meta_subject/migrations/0128_auto_20220720_0055.py,sha256=voqWxaEfSrFSCzXglIfZLRdQpAx_MZ6GZIJmjMr9j50,778
|
937
948
|
meta_subject/migrations/0129_auto_20220720_0108.py,sha256=XBant365dtOEYMtVcbs0yKgbCGP_GIg3azqvX2TGGc8,490
|
938
949
|
meta_subject/migrations/0130_auto_20220720_0216.py,sha256=S7Q7TAl97ZCVpum2zmOtHqeeV4kmo4tbLa-hOKtO-rs,683
|
939
|
-
meta_subject/migrations/0131_auto_20220722_0411.py,sha256=
|
940
|
-
meta_subject/migrations/0132_auto_20220722_1825.py,sha256=
|
950
|
+
meta_subject/migrations/0131_auto_20220722_0411.py,sha256=h0fzn1OsT_tvx5LMDyrh9t3HUsXzcpGwA19regX_jO4,2153
|
951
|
+
meta_subject/migrations/0132_auto_20220722_1825.py,sha256=TmWCNPi8rdNvA7qfWZ-iVAzlXBrN_FE5uATEzVNFxXY,979
|
941
952
|
meta_subject/migrations/0133_auto_20220722_2140.py,sha256=Un8wWZeac9RdJ3cUUo43bAHsOAm489wyhXcaeTBeve4,28130
|
942
953
|
meta_subject/migrations/0134_auto_20220722_2211.py,sha256=Ez2ur6gngrz2y82Hsgx-Ag3HJXr8htcsGS4BxnjX-eU,1806
|
943
|
-
meta_subject/migrations/0135_auto_20220722_2212.py,sha256=
|
954
|
+
meta_subject/migrations/0135_auto_20220722_2212.py,sha256=34qNpdc0c-LkK0MhSh9ofJP50Ckut4c9yWwVyfU5fvY,2463
|
944
955
|
meta_subject/migrations/0136_egfrdropnotification_creatinine_quantifier_and_more.py,sha256=4vWNQUmziJFlktyOekNqC_lx0ybywCx0FMaIE5_9oRE,8660
|
945
956
|
meta_subject/migrations/0137_alter_egfrdropnotification_egfr_percent_change_and_more.py,sha256=OQA1uVxwReY4osMsbhT_MGVfOBaopBI4s7GW56ba3vU,1138
|
946
957
|
meta_subject/migrations/0138_alter_glucose_fbg_datetime_and_more.py,sha256=JdZ1KW-PnapQm81_THgm-ty3_AeOmbujZoxfRE1cjY8,3531
|
@@ -955,7 +966,7 @@ meta_subject/migrations/0146_auto_20220907_0207.py,sha256=1va3UjUI5bD3yey08Fk3rp
|
|
955
966
|
meta_subject/migrations/0147_auto_20220907_1505.py,sha256=kRJWQ81XsX_poQBS_u0tuiQBfRhnP4lQeNzfDTOeOmw,1906
|
956
967
|
meta_subject/migrations/0148_auto_20220908_1826.py,sha256=iHN59ZuFFYQCbLYZAebF_kaiP8m-twUnwUAzrgtFOXU,1814
|
957
968
|
meta_subject/migrations/0149_auto_20220913_2139.py,sha256=V27KGY9t6IV8Xzf0wgcLQseM1DBcXGXY3ReNC_iRUe0,1000
|
958
|
-
meta_subject/migrations/0150_auto_20220914_0039.py,sha256=
|
969
|
+
meta_subject/migrations/0150_auto_20220914_0039.py,sha256=qB-6YVz3lloQf6JbbwZACGyf68n2LtlGcFX8v_NY9Qc,1322
|
959
970
|
meta_subject/migrations/0151_auto_20220918_0508.py,sha256=tcQ-eyK-2cIqTLDtL9QsfDi4F9fu8UGHVye6QSBDYLA,52998
|
960
971
|
meta_subject/migrations/0152_auto_20220925_0509.py,sha256=Zd_1TRIXLzw323ccrwHT_k76HgEqVCEBqvqbjlNYCto,738
|
961
972
|
meta_subject/migrations/0153_auto_20220928_0250.py,sha256=nmYfG7zYmrRW4JQXoZQlE3aQQBBehDJrtVRIb4AWtK0,1172
|
@@ -1123,9 +1134,9 @@ tests/etc/user-rsa-restricted-private.pem,sha256=CUcHW9bznWdmmASN00hCzvxFPAFl4N2
|
|
1123
1134
|
tests/etc/user-rsa-restricted-public.pem,sha256=mt84djoL-uHw6Wc5SJh0zml6VzXulnf8eQSFg7-fheg,450
|
1124
1135
|
tests/etc/user-salt-local.key,sha256=x5anBw9fvbHurczouT3CjrkWb_xs7Ypm1htIJsgiuiw,256
|
1125
1136
|
tests/etc/user-salt-restricted.key,sha256=pxmpcfBRNB-4C6wTvHXz-9fOfJgKIFOjaAF8ZFfa4q4,256
|
1126
|
-
meta_edc-0.3.
|
1127
|
-
meta_edc-0.3.
|
1128
|
-
meta_edc-0.3.
|
1129
|
-
meta_edc-0.3.
|
1130
|
-
meta_edc-0.3.
|
1131
|
-
meta_edc-0.3.
|
1137
|
+
meta_edc-0.3.34.dist-info/AUTHORS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1138
|
+
meta_edc-0.3.34.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
1139
|
+
meta_edc-0.3.34.dist-info/METADATA,sha256=cIWKUxcvH6QDWYsXm16RB4_qh4XxjQwGUPxSNLSp4nM,3015
|
1140
|
+
meta_edc-0.3.34.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
|
1141
|
+
meta_edc-0.3.34.dist-info/top_level.txt,sha256=RkzjNXwRq2kg_uZ_1bDwPUntijSXoY2YBqtByDwvvrc,244
|
1142
|
+
meta_edc-0.3.34.dist-info/RECORD,,
|
meta_pharmacy/admin.py
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
from django.contrib import admin
|
2
|
+
from django_audit_fields.admin import audit_fieldset_tuple
|
3
|
+
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
4
|
+
from edc_model_admin.history import SimpleHistoryAdmin
|
5
|
+
from edc_pharmacy.admin.list_filters import MedicationsListFilter
|
6
|
+
from edc_sites.admin import SiteModelAdminMixin
|
7
|
+
|
8
|
+
from .admin_site import meta_pharmacy_admin
|
9
|
+
from .forms import RxForm, SubstitutionsForm
|
10
|
+
from .models import Rx, Substitutions
|
11
|
+
|
12
|
+
|
13
|
+
@admin.register(Substitutions, site=meta_pharmacy_admin)
|
14
|
+
class SubstitutionsAdmin(
|
15
|
+
SiteModelAdminMixin,
|
16
|
+
ModelAdminSubjectDashboardMixin,
|
17
|
+
SimpleHistoryAdmin,
|
18
|
+
):
|
19
|
+
"""Admin class for meta_pharmacy.Substitutions"""
|
20
|
+
|
21
|
+
form = SubstitutionsForm
|
22
|
+
|
23
|
+
autocomplete_fields = ["rx"]
|
24
|
+
|
25
|
+
add_instructions = "This form is used to record any substitions made for IMP refills"
|
26
|
+
|
27
|
+
fieldsets = (
|
28
|
+
(
|
29
|
+
None,
|
30
|
+
{"fields": ("report_datetime",)},
|
31
|
+
),
|
32
|
+
("Original label on bottle", {"fields": ("sid", "visit_no")}),
|
33
|
+
(
|
34
|
+
"Substitution / Changed label",
|
35
|
+
{
|
36
|
+
"description": "The label on this bottle has been changed to the following",
|
37
|
+
"fields": ("dispensed_sid", "updated_visit_no"),
|
38
|
+
},
|
39
|
+
),
|
40
|
+
(
|
41
|
+
"Subject",
|
42
|
+
{
|
43
|
+
"fields": ("rx",),
|
44
|
+
},
|
45
|
+
),
|
46
|
+
audit_fieldset_tuple,
|
47
|
+
)
|
48
|
+
|
49
|
+
list_display = (
|
50
|
+
"sid",
|
51
|
+
"dispensed_sid",
|
52
|
+
"arm_match",
|
53
|
+
"subject_identifier",
|
54
|
+
"report_datetime",
|
55
|
+
)
|
56
|
+
|
57
|
+
radio_fields = {"arm_match": admin.VERTICAL}
|
58
|
+
|
59
|
+
list_filter = ("arm_match", "report_datetime")
|
60
|
+
|
61
|
+
search_fields = ["subject_identifier", "sid", "dispensed_sid"]
|
62
|
+
|
63
|
+
|
64
|
+
@admin.register(Rx, site=meta_pharmacy_admin)
|
65
|
+
class RxAdmin(ModelAdminSubjectDashboardMixin, admin.ModelAdmin):
|
66
|
+
"""Admin class for proxy model of edc_pharmacy.Rx"""
|
67
|
+
|
68
|
+
show_object_tools = True
|
69
|
+
|
70
|
+
form = RxForm
|
71
|
+
|
72
|
+
fieldsets = (
|
73
|
+
(
|
74
|
+
None,
|
75
|
+
{
|
76
|
+
"fields": (
|
77
|
+
"subject_identifier",
|
78
|
+
"report_datetime",
|
79
|
+
"rx_name",
|
80
|
+
"rx_date",
|
81
|
+
"medications",
|
82
|
+
"clinician_initials",
|
83
|
+
"notes",
|
84
|
+
)
|
85
|
+
},
|
86
|
+
),
|
87
|
+
(
|
88
|
+
"Randomization",
|
89
|
+
{
|
90
|
+
"fields": ("rando_sid", "randomizer_name", "weight_in_kgs"),
|
91
|
+
},
|
92
|
+
),
|
93
|
+
audit_fieldset_tuple,
|
94
|
+
)
|
95
|
+
|
96
|
+
filter_horizontal = ("medications",)
|
97
|
+
|
98
|
+
list_display = (
|
99
|
+
"subject_identifier",
|
100
|
+
"dashboard",
|
101
|
+
"rx_medications",
|
102
|
+
"rando_sid",
|
103
|
+
"rx_date",
|
104
|
+
"weight_in_kgs",
|
105
|
+
"rx_name",
|
106
|
+
)
|
107
|
+
|
108
|
+
list_filter = ("report_datetime", MedicationsListFilter, "site")
|
109
|
+
|
110
|
+
search_fields = (
|
111
|
+
"id",
|
112
|
+
"subject_identifier",
|
113
|
+
"rando_sid",
|
114
|
+
"registered_subject__initials",
|
115
|
+
"medications__name",
|
116
|
+
"site__id",
|
117
|
+
"rx_name",
|
118
|
+
)
|
119
|
+
|
120
|
+
readonly_fields = (
|
121
|
+
"rando_sid",
|
122
|
+
"weight_in_kgs",
|
123
|
+
"rx_name",
|
124
|
+
)
|
125
|
+
|
126
|
+
@admin.display
|
127
|
+
def rx_medications(self, obj):
|
128
|
+
return ", ".join([obj.display_name for obj in obj.medications.all()])
|
meta_pharmacy/apps.py
CHANGED
@@ -15,6 +15,9 @@ def post_migrate_populate_pharmacy_models(sender=None, **kwargs): # noqa
|
|
15
15
|
class AppConfig(DjangoAppConfig):
|
16
16
|
name = "meta_pharmacy"
|
17
17
|
verbose_name = "META Pharmacy"
|
18
|
+
include_in_administration_section = True
|
19
|
+
has_exportable_data = True
|
20
|
+
default_auto_field = "django.db.models.BigAutoField"
|
18
21
|
|
19
22
|
def ready(self):
|
20
23
|
post_migrate.connect(post_migrate_populate_pharmacy_models, sender=self)
|
meta_pharmacy/constants.py
CHANGED
@@ -1 +1,11 @@
|
|
1
|
+
from edc_constants.constants import OK
|
2
|
+
|
1
3
|
METFORMIN = "metformin"
|
4
|
+
REVIEW = "REVIEW"
|
5
|
+
MISSING_SUBJECT_IDENTIFIER = "MISSING_SUBJECT_IDENTIFIER"
|
6
|
+
|
7
|
+
SUBSTITUTION_STATUS = (
|
8
|
+
(OK, "ok"),
|
9
|
+
(MISSING_SUBJECT_IDENTIFIER, "Missing Subject ID"),
|
10
|
+
(REVIEW, "review"),
|
11
|
+
)
|
meta_pharmacy/forms.py
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
from django import forms
|
2
|
+
from django.core.exceptions import ObjectDoesNotExist
|
3
|
+
from edc_form_validators.form_validator import FormValidator
|
4
|
+
from edc_form_validators.form_validator_mixins import FormValidatorMixin
|
5
|
+
from edc_model_form.mixins import BaseModelFormMixin
|
6
|
+
from edc_offstudy.modelform_mixins import OffstudyNonCrfModelFormMixin
|
7
|
+
from edc_prn.modelform_mixins import PrnFormValidatorMixin
|
8
|
+
from edc_sites.forms import SiteModelFormMixin
|
9
|
+
|
10
|
+
from .models import Rx, Substitutions
|
11
|
+
|
12
|
+
|
13
|
+
class SubstitutionsFormValidator(PrnFormValidatorMixin, FormValidator):
|
14
|
+
pass
|
15
|
+
|
16
|
+
|
17
|
+
class SubstitutionsForm(
|
18
|
+
SiteModelFormMixin,
|
19
|
+
OffstudyNonCrfModelFormMixin,
|
20
|
+
BaseModelFormMixin,
|
21
|
+
FormValidatorMixin,
|
22
|
+
forms.ModelForm,
|
23
|
+
):
|
24
|
+
form_validator_cls = SubstitutionsFormValidator
|
25
|
+
|
26
|
+
def clean(self):
|
27
|
+
if self.cleaned_data.get("sid"):
|
28
|
+
try:
|
29
|
+
obj = Rx.objects.get(rando_sid=self.cleaned_data.get("sid"))
|
30
|
+
except ObjectDoesNotExist:
|
31
|
+
raise forms.ValidationError({"sid": "Unknown SID for this trial"})
|
32
|
+
else:
|
33
|
+
if obj.site.id != self.site.id:
|
34
|
+
raise forms.ValidationError(
|
35
|
+
{
|
36
|
+
"sid": (
|
37
|
+
"Unknown SID for this trial site. "
|
38
|
+
f"Expected SITE {obj.site.id}."
|
39
|
+
)
|
40
|
+
}
|
41
|
+
)
|
42
|
+
if self.cleaned_data.get("dispensed_sid"):
|
43
|
+
try:
|
44
|
+
Rx.objects.get(
|
45
|
+
rando_sid=self.cleaned_data.get("dispensed_sid"),
|
46
|
+
)
|
47
|
+
except ObjectDoesNotExist:
|
48
|
+
raise forms.ValidationError({"dispensed_sid": "Unknown SID for this trial"})
|
49
|
+
|
50
|
+
class Meta:
|
51
|
+
model = Substitutions
|
52
|
+
fields = "__all__"
|
53
|
+
|
54
|
+
|
55
|
+
class RxForm(forms.ModelForm):
|
56
|
+
|
57
|
+
subject_identifier = forms.CharField(
|
58
|
+
label="Subject Identifier",
|
59
|
+
required=False,
|
60
|
+
widget=forms.TextInput(attrs={"readonly": "readonly"}),
|
61
|
+
)
|
62
|
+
|
63
|
+
class Meta:
|
64
|
+
model = Rx
|
65
|
+
fields = "__all__"
|