meta-edc 0.3.36__py3-none-any.whl → 0.3.38__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_analytics/__init__.py +1 -1
- meta_analytics/dataframes/__init__.py +1 -0
- meta_analytics/dataframes/constants.py +1 -1
- meta_analytics/dataframes/get_eos_df.py +26 -0
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +102 -79
- meta_analytics/dataframes/screening/get_screening_df.py +42 -6
- meta_analytics/get_tables.py +4 -28
- meta_edc/settings/debug.py +2 -2
- meta_edc-0.3.38.dist-info/METADATA +766 -0
- {meta_edc-0.3.36.dist-info → meta_edc-0.3.38.dist-info}/RECORD +36 -20
- {meta_edc-0.3.36.dist-info → meta_edc-0.3.38.dist-info}/WHEEL +1 -1
- meta_pharmacy/admin/__init__.py +3 -0
- meta_pharmacy/admin/label_admin.py +0 -0
- meta_pharmacy/admin/lot_number_admin.py +43 -0
- meta_pharmacy/admin/rx_admin.py +75 -0
- meta_pharmacy/{admin.py → admin/substitutions_admin.py} +3 -71
- meta_pharmacy/labels/__init__.py +2 -0
- meta_pharmacy/labels/get_label_data.py +30 -0
- meta_pharmacy/labels/print_sheets.py +86 -0
- meta_pharmacy/migrations/0006_lotnumber_label.py +289 -0
- meta_pharmacy/migrations/0007_lotnumber_medication.py +24 -0
- meta_pharmacy/models/__init__.py +4 -0
- meta_pharmacy/models/label.py +50 -0
- meta_pharmacy/models/lot_number.py +25 -0
- meta_pharmacy/models/rx.py +18 -0
- meta_pharmacy/{models.py → models/substitutions.py} +2 -16
- meta_reports/admin/endpoints_admin.py +1 -1
- meta_reports/admin/modeladmin_mixins.py +5 -5
- meta_reports/migrations/0050_alter_endpoints_created.py +19 -0
- meta_reports/migrations/0051_remove_endpoints_baseline_datetime_and_more.py +40 -0
- meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +3 -1
- meta_reports/models/endpoints.py +3 -3
- meta_visit_schedule/visit_schedules/phase_three/crfs.py +1 -0
- meta_edc-0.3.36.dist-info/METADATA +0 -94
- {meta_edc-0.3.36.dist-info → meta_edc-0.3.38.dist-info}/AUTHORS +0 -0
- {meta_edc-0.3.36.dist-info → meta_edc-0.3.38.dist-info}/LICENSE +0 -0
- {meta_edc-0.3.36.dist-info → meta_edc-0.3.38.dist-info}/top_level.txt +0 -0
@@ -82,20 +82,21 @@ meta_ae/tests/urls.py,sha256=BKiCB7JZCxtZFh6Ym-Y-Hdq92NECIt-GqMDyt6_B7o0,260
|
|
82
82
|
meta_ae/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
83
|
meta_ae/tests/tests/test_actions.py,sha256=W4UglCSs4GLU0_I5grpCz3xprk2OQso2Q6c_9aYWiu8,4915
|
84
84
|
meta_analytics/README.rst,sha256=x5KDks1P2bSPdyq3f9CNkynAAgJaXl7AX_3rnmC16HU,357
|
85
|
-
meta_analytics/__init__.py,sha256=
|
85
|
+
meta_analytics/__init__.py,sha256=O4Fkrtyo15GEfghFcb5u_5MRt5J0BvKvtU_mqUX5_yU,116
|
86
86
|
meta_analytics/constants.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
|
-
meta_analytics/get_tables.py,sha256=
|
88
|
-
meta_analytics/dataframes/__init__.py,sha256=
|
89
|
-
meta_analytics/dataframes/constants.py,sha256=
|
87
|
+
meta_analytics/get_tables.py,sha256=3jFmvLXWHY3FPd1u5OPVpAKWUcruCH0-A0KdKiiFGpc,2219
|
88
|
+
meta_analytics/dataframes/__init__.py,sha256=lTRGk8ctu02SFDTVLoLOUHja2_bzvTQyRgqqUuvCWfg,488
|
89
|
+
meta_analytics/dataframes/constants.py,sha256=Wcub_3U5xHa027ykotySiUxMECjmswGIADVeT0iJXXs,792
|
90
|
+
meta_analytics/dataframes/get_eos_df.py,sha256=YJ0YB93FkqwpNfWDphzFbX6B7BannbvfScc0WEgtn2w,778
|
90
91
|
meta_analytics/dataframes/utils.py,sha256=2V3nFFnaysuJvNrcHUOLqOk8e_3aP71079kB_YBXcQw,2014
|
91
92
|
meta_analytics/dataframes/enrolled/__init__.py,sha256=uKniE7L86umlSmGOjAFuwwsbyZj31mELGUpY3hByo4s,43
|
92
93
|
meta_analytics/dataframes/enrolled/get_glucose_df.py,sha256=L4gzszNjYzu-QmYu4gs1c7_Edcv7FgAjucihxHtANSY,5004
|
93
94
|
meta_analytics/dataframes/glucose_endpoints/__init__.py,sha256=a9RlAnFM0Z4AKw-WztBvnGMo3tLLe1dx3292A2n_CnA,107
|
94
95
|
meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py,sha256=aOadsfeclOEGFo5agSZUbY2NdM8iZDsOLdg-5j8aelg,7011
|
95
|
-
meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py,sha256=
|
96
|
+
meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py,sha256=052BpLJoJezjr2tMXI5-GBRk_e6gT0bZZsjhx_Uhlm8,21550
|
96
97
|
meta_analytics/dataframes/screening/__init__.py,sha256=onGpmB4474gu_JcyRGdRy09YQyP2Np-mX-rYZTFdJoA,114
|
97
98
|
meta_analytics/dataframes/screening/get_glucose_tested_only_df.py,sha256=0oMJIsIJRjurfpPONuJ4Aoab1UJikezGe3lQNWRoOo4,660
|
98
|
-
meta_analytics/dataframes/screening/get_screening_df.py,sha256=
|
99
|
+
meta_analytics/dataframes/screening/get_screening_df.py,sha256=esR15RRNhgCaZzZpYEv3LzIkz5S4ly1bmGOJbpqwKeU,6144
|
99
100
|
meta_analytics/tables/__init__.py,sha256=mhESCt0Lq4RJU-lbQ5fVfIbXzrEsootGYp7EzQIqDBI,70
|
100
101
|
meta_analytics/tables/eligible.py,sha256=2q-SMbAsrBgOVc4Ttq5P3bpjsUKwP5hYhJBMgyH6GGI,3389
|
101
102
|
meta_analytics/tables/has_dm.py,sha256=W6pObFI7k2hpL46Q7t2QIfYDVfo7-PHJMdCv6Q5EUQk,1739
|
@@ -231,7 +232,7 @@ meta_edc/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
231
232
|
meta_edc/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
232
233
|
meta_edc/management/commands/update_forms_reference.py,sha256=_DiCqhHUk8lGhDGlsjOA069EE-g7UBDlZQCH6L1xiHo,1003
|
233
234
|
meta_edc/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
234
|
-
meta_edc/settings/debug.py,sha256
|
235
|
+
meta_edc/settings/debug.py,sha256=-PvZN-nPpEBr49ndpBHFcV71SDu1tAXmVfKESDFIr4Q,947
|
235
236
|
meta_edc/settings/defaults.py,sha256=Q1WJEfWQF5A-IvFoMeyQi0n5BaPmXSgpfAkJ011B_SY,18764
|
236
237
|
meta_edc/settings/live.py,sha256=uLTlsIc3H6gdE_7pkL6vyOVa6V_74hnXFkiojqGFAYY,264
|
237
238
|
meta_edc/settings/logging.py,sha256=6qVUE37OMkf5rzwTmMq4krFsZ2jcyCpWdFtGih_Cs4U,1938
|
@@ -289,20 +290,33 @@ meta_lists/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
289
290
|
meta_lists/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
290
291
|
meta_lists/tests/test_lists.py,sha256=qcp2emRyd5-cP2oLluy8MpUucBDQ8_GdUxjh2KbZPv4,212
|
291
292
|
meta_pharmacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
292
|
-
meta_pharmacy/admin.py,sha256=-HCVaaDFtt_uHzdaSQfM5yDfP44_VgIl-s-IcrPQqzg,3535
|
293
293
|
meta_pharmacy/admin_site.py,sha256=Ekq8Z13f1w4Llm6exO5w4Jk4Bvt-5WN1ydy_BS2rbdI,171
|
294
294
|
meta_pharmacy/apps.py,sha256=VNiKT23F5d5nkXxzu1L-kAqovNOdfxzp-cUC6qcioVQ,732
|
295
295
|
meta_pharmacy/constants.py,sha256=d3NAZwpxCDm9LLQ_QGKBG2txooYg748Ajh8a2deF0kw,263
|
296
296
|
meta_pharmacy/forms.py,sha256=4BX6rB7FWBWYlOB2BX4hh3scz5eeKaxt2OCyQBCBO-E,2162
|
297
|
-
meta_pharmacy/models.py,sha256=qwjsvsCr7ryb8DRn1aYD1_wOpAQR6ffumLuYNGxeNEs,3395
|
298
297
|
meta_pharmacy/prepare_meta_pharmacy.py,sha256=5gNiPkmOzWwCW-_q6hgIzj_0tnPuN4Tl1lVI6FygNgs,2945
|
299
298
|
meta_pharmacy/urls.py,sha256=jncXssL_SeRhb_OJVXLdGFvPT3BqtrkSPdq-eyJnGfY,207
|
299
|
+
meta_pharmacy/admin/__init__.py,sha256=64RWTeC6qO1G800qe2V7vgeQQ5qo5yEKXTnvviKUBQ4,127
|
300
|
+
meta_pharmacy/admin/label_admin.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
301
|
+
meta_pharmacy/admin/lot_number_admin.py,sha256=q35jVWzqyqup_NtLUa0b_c3_3H3S30U5DroCdbGkyy0,981
|
302
|
+
meta_pharmacy/admin/rx_admin.py,sha256=SQGsugSnhbU3YUk_ssSTMmCH6no8ZkHoqLLkbZbBbk0,1851
|
303
|
+
meta_pharmacy/admin/substitutions_admin.py,sha256=N2WcuC4REAEX0zrNqQHsPbZI82I4T5UM7EP-ohDOSSI,1934
|
304
|
+
meta_pharmacy/labels/__init__.py,sha256=fT7pVRKOJGbW4RLqfTP1UsdmZpI1k2tG1G53XVKQZHw,82
|
305
|
+
meta_pharmacy/labels/get_label_data.py,sha256=QsveAPMlb_LKnltP5Hxsk1mdCkSGhn-cQ_nDkHE3QD0,1088
|
306
|
+
meta_pharmacy/labels/print_sheets.py,sha256=Z72s2Uu-nWSk2ETlkc6TA59XHgrloIh4t5F9jihoCuU,2540
|
300
307
|
meta_pharmacy/migrations/0001_initial.py,sha256=2uyWhZ-Qkjum1gJJA5v-BWUdpmKhkf8BcuDQMl8895s,1115
|
301
308
|
meta_pharmacy/migrations/0002_initial.py,sha256=zkPXmGhdEi-EM0HJRBaTUAltdiLRjW1BhU4GEydoBM8,27355
|
302
309
|
meta_pharmacy/migrations/0003_auto_20240909_2335.py,sha256=_hbzV6HaBm-VS_jQMhl3w5srvyaYOQclLBvr_8f79uk,2227
|
303
310
|
meta_pharmacy/migrations/0004_alter_historicalsubstitutions_report_datetime_and_more.py,sha256=33SpQ4UtFs3gblj4WG3KtKtalo8Wynv3uyUOqBe7_Zo,585
|
304
311
|
meta_pharmacy/migrations/0005_auto_20240911_0352.py,sha256=ZwjFlBX_ubNDbTnDny7cvgCb4aSiqhVKhTYDWd6oQmg,534
|
312
|
+
meta_pharmacy/migrations/0006_lotnumber_label.py,sha256=hdxvRC-v6appuLFzBJg-PAY30qgkdA_XdAZP6mwq7Mo,11279
|
313
|
+
meta_pharmacy/migrations/0007_lotnumber_medication.py,sha256=uTR_ZYm22n8C1uiWJGfWgtEcYBQ8DdEGvNhQAH_PqNA,646
|
305
314
|
meta_pharmacy/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
315
|
+
meta_pharmacy/models/__init__.py,sha256=lMchriYF--D3oW_nFVd9n6VuFNRdDbrlWQj8ARyyVuA,130
|
316
|
+
meta_pharmacy/models/label.py,sha256=FlnBQyXZmPUrT_Ibg0L-FQ6oPwBGxFWvf_pMSKDxs-s,1546
|
317
|
+
meta_pharmacy/models/lot_number.py,sha256=JUT-TXsM_2U3UO6VDz7D10WTNupIjYYAlBVBlzi2VmU,693
|
318
|
+
meta_pharmacy/models/rx.py,sha256=cx0T9j2Vb-6tEotWA7ohsn2OGHnQpxiFQnu7__hx7Ts,379
|
319
|
+
meta_pharmacy/models/substitutions.py,sha256=9FjjD4x66B8SxABZR5atan2S5uE4nJH0tn0ujB4xEbA,3071
|
306
320
|
meta_prn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
307
321
|
meta_prn/action_items.py,sha256=wz6X7Ve8ibqPBO5kB6S9rYYkWfx8JxsoYRVppzIGAzk,9110
|
308
322
|
meta_prn/admin_site.py,sha256=E4dJ6ofu9Kp-1SIWIuY3PraVPbEJSWBBqhorJPGUNqU,161
|
@@ -442,10 +456,10 @@ meta_reports/tasks.py,sha256=wPzfm99Hox1AIvt1KxYg1r6g9v8ta2AHOHesoN6AxEk,370
|
|
442
456
|
meta_reports/urls.py,sha256=_c6AMrK4U5MsyFSU2JSPNfiZlbhuw24C7CyPNYpqGd0,206
|
443
457
|
meta_reports/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
444
458
|
meta_reports/admin/__init__.py,sha256=3GDQM-HA1h8FdsmGSAiPaCd1paMGGJHTq6Ivd4Ob9bA,434
|
445
|
-
meta_reports/admin/endpoints_admin.py,sha256=
|
459
|
+
meta_reports/admin/endpoints_admin.py,sha256=7wZCdC-D-QHI1bb_ucgyDZYlnYD7mWtcZpcH_LftkLs,514
|
446
460
|
meta_reports/admin/endpoints_all_admin.py,sha256=_czdezZf9fSjwZJmO-3HbmdXrXP6nk8-HdiweqUzPRE,476
|
447
461
|
meta_reports/admin/list_filters.py,sha256=pByBzz9-qGwqBfdZFlByxJUZDTJQXOTWfNLjmK8KF00,870
|
448
|
-
meta_reports/admin/modeladmin_mixins.py,sha256=
|
462
|
+
meta_reports/admin/modeladmin_mixins.py,sha256=tEZYw0xNMfBvo2RLDrYfi_S9lbZU02dwtLxdRDZob4Q,3663
|
449
463
|
meta_reports/admin/dbviews/__init__.py,sha256=2yPu0SO7ZX9yjan0OS9izzws14YYoXcGXmZhwJhax1I,675
|
450
464
|
meta_reports/admin/dbviews/glucose_summary_admin.py,sha256=NqnDKx5l0Q-2xxRGdnf50DaRX1Sn8-DC0jHSk96LkRo,4005
|
451
465
|
meta_reports/admin/dbviews/imp_substitutions_admin.py,sha256=-poOw3fJK7jQERB1PNXNDrWNthwEQpiwmrxoWOsDtjI,3622
|
@@ -514,9 +528,11 @@ meta_reports/migrations/0046_auto_20240829_0250.py,sha256=lKVlj7LrkOJ49LJxccYvQd
|
|
514
528
|
meta_reports/migrations/0047_impsubstitutions.py,sha256=VPTb5j2t9IvwR-Bq0lnVBGLAVKdL7IbY8DD-cjl_m5o,2088
|
515
529
|
meta_reports/migrations/0048_auto_20240909_2338.py,sha256=mYAOUzJohv9eW9y93fpZTmlgmx_eOBRhUBMr0F3_-_M,3169
|
516
530
|
meta_reports/migrations/0049_auto_20240911_0327.py,sha256=APBkFY9kwzEmhTXkK2-bu6csikh_dVEMH6t2dv_Iz9M,4760
|
531
|
+
meta_reports/migrations/0050_alter_endpoints_created.py,sha256=nqNIgK_cek2gtEhopdy0Sm1HuIjL3-PscYPN16ma474,439
|
532
|
+
meta_reports/migrations/0051_remove_endpoints_baseline_datetime_and_more.py,sha256=jq5N4un7QTCLe54WKJjfCL32X_QnyCiDRV3spwgseJI,1053
|
517
533
|
meta_reports/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
518
534
|
meta_reports/models/__init__.py,sha256=8JnKMG9devIPboCCGj423x77Ylry2ROdGOnDSk5Xo4w,380
|
519
|
-
meta_reports/models/endpoints.py,sha256=
|
535
|
+
meta_reports/models/endpoints.py,sha256=iMx8QIi_hLANIwZmAw1OJ_jPuDdml8s181Skh8UF9bM,901
|
520
536
|
meta_reports/models/endpoints_proxy.py,sha256=3h3JGaPmnJedFPVWGrk4idV4YtdihqiCI5W7QomwG4E,318
|
521
537
|
meta_reports/models/dbviews/README,sha256=GdeboB7Xqb-Qo_rE1ondcxP8Ps93MIjLzCePQCePig0,686
|
522
538
|
meta_reports/models/dbviews/__init__.py,sha256=C5YGOKwVAexjWxLh5vl0m561TBMWDM_yAvIrwqG_M70,559
|
@@ -524,7 +540,7 @@ meta_reports/models/dbviews/glucose_summary/__init__.py,sha256=Tfgjso4TpxMCidAdR
|
|
524
540
|
meta_reports/models/dbviews/glucose_summary/unmanaged_model.py,sha256=uqhD5JLXtyQ94zpG5Puxodjzli3quE4GgiFi7en6EeM,1055
|
525
541
|
meta_reports/models/dbviews/glucose_summary/view_definition.py,sha256=Fc5KN-It9dcBvRta-b26kUl8uQEHA19vrYIhNRqe2Xo,1512
|
526
542
|
meta_reports/models/dbviews/imp_substitutions/__init__.py,sha256=N0507JzoVRtNA9W9_RoiAQYEQZGdvP2U8P83ZJMeZxQ,46
|
527
|
-
meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py,sha256=
|
543
|
+
meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py,sha256=U3ZIggcWAokmeCFV6w-0TOwZQ6tjzH4ZGYwoqVPrd7M,1240
|
528
544
|
meta_reports/models/dbviews/imp_substitutions/view_definition.py,sha256=1t6znTYQJxM_-nTRjMgEY3T2L_ZDFvh2tw-zT8fmxQU,897
|
529
545
|
meta_reports/models/dbviews/missing_screening_ogtt/__init__.py,sha256=7uX_2HfVU-3G1O_xecfGnE5_pcX5eceiRaapeDQtzIw,105
|
530
546
|
meta_reports/models/dbviews/missing_screening_ogtt/note_model.py,sha256=JHItVS11WDFg3lTe7ayH9T7Epd-VvXXD_79FssrmAwc,1813
|
@@ -1117,7 +1133,7 @@ meta_visit_schedule/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
1117
1133
|
meta_visit_schedule/tests/tests/test_schedule.py,sha256=858fXo-PvbppgIsCAGll05fqnuWW6f-vMIwnvRLZgnc,7351
|
1118
1134
|
meta_visit_schedule/visit_schedules/__init__.py,sha256=j0Q8tAGhHHbFBd3R-iLRy4QB47WgtucWG7xCLLfVvFU,339
|
1119
1135
|
meta_visit_schedule/visit_schedules/phase_three/__init__.py,sha256=18ken4S10X0dkEFHj1EFO2M4xblXD04cjfhzIEkhYUQ,74
|
1120
|
-
meta_visit_schedule/visit_schedules/phase_three/crfs.py,sha256=
|
1136
|
+
meta_visit_schedule/visit_schedules/phase_three/crfs.py,sha256=Gi9H3RmgNbrtgNCkDwkV3EXnE0Drct8dpsVA5AQhoFs,15402
|
1121
1137
|
meta_visit_schedule/visit_schedules/phase_three/crfs_pregnancy.py,sha256=_I6IVLMC3-KlpI86eii790mlx-p2vxWxvNRKD927rXo,169
|
1122
1138
|
meta_visit_schedule/visit_schedules/phase_three/requisitions.py,sha256=Noeki8zX2MCwQVmCCWfuOyh_aN4YC-cyhUmrAZP8d5g,4579
|
1123
1139
|
meta_visit_schedule/visit_schedules/phase_three/schedule.py,sha256=J91AMawOdKWLJz_WAH897PJYr8264_Q_b8pZhI0Pj38,8228
|
@@ -1137,9 +1153,9 @@ tests/etc/user-rsa-restricted-private.pem,sha256=CUcHW9bznWdmmASN00hCzvxFPAFl4N2
|
|
1137
1153
|
tests/etc/user-rsa-restricted-public.pem,sha256=mt84djoL-uHw6Wc5SJh0zml6VzXulnf8eQSFg7-fheg,450
|
1138
1154
|
tests/etc/user-salt-local.key,sha256=x5anBw9fvbHurczouT3CjrkWb_xs7Ypm1htIJsgiuiw,256
|
1139
1155
|
tests/etc/user-salt-restricted.key,sha256=pxmpcfBRNB-4C6wTvHXz-9fOfJgKIFOjaAF8ZFfa4q4,256
|
1140
|
-
meta_edc-0.3.
|
1141
|
-
meta_edc-0.3.
|
1142
|
-
meta_edc-0.3.
|
1143
|
-
meta_edc-0.3.
|
1144
|
-
meta_edc-0.3.
|
1145
|
-
meta_edc-0.3.
|
1156
|
+
meta_edc-0.3.38.dist-info/AUTHORS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1157
|
+
meta_edc-0.3.38.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
1158
|
+
meta_edc-0.3.38.dist-info/METADATA,sha256=7pQ_LETLSQ6O_1bbVxu21m_GUXdMm4Ef251Z1Fd_d7g,43436
|
1159
|
+
meta_edc-0.3.38.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
1160
|
+
meta_edc-0.3.38.dist-info/top_level.txt,sha256=RkzjNXwRq2kg_uZ_1bDwPUntijSXoY2YBqtByDwvvrc,244
|
1161
|
+
meta_edc-0.3.38.dist-info/RECORD,,
|
File without changes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
from django.contrib import admin
|
2
|
+
from django_audit_fields import audit_fieldset_tuple
|
3
|
+
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
4
|
+
|
5
|
+
from ..admin_site import meta_pharmacy_admin
|
6
|
+
from ..models import LotNumber
|
7
|
+
|
8
|
+
|
9
|
+
@admin.register(LotNumber, site=meta_pharmacy_admin)
|
10
|
+
class LotNumberAdmin(ModelAdminSubjectDashboardMixin, admin.ModelAdmin):
|
11
|
+
"""Admin class for proxy model of edc_pharmacy.Rx"""
|
12
|
+
|
13
|
+
show_object_tools = True
|
14
|
+
|
15
|
+
# form = LotNumberForm
|
16
|
+
|
17
|
+
fieldsets = (
|
18
|
+
(
|
19
|
+
None,
|
20
|
+
{
|
21
|
+
"fields": (
|
22
|
+
"lot_no",
|
23
|
+
"expiration_date",
|
24
|
+
"allocation",
|
25
|
+
"qty",
|
26
|
+
)
|
27
|
+
},
|
28
|
+
),
|
29
|
+
audit_fieldset_tuple,
|
30
|
+
)
|
31
|
+
|
32
|
+
list_display = (
|
33
|
+
"lot_no",
|
34
|
+
"expiration_date",
|
35
|
+
)
|
36
|
+
|
37
|
+
radio_fields = {"allocation": admin.VERTICAL}
|
38
|
+
|
39
|
+
list_filter = ("allocation",)
|
40
|
+
|
41
|
+
search_fields = [
|
42
|
+
"lot_no",
|
43
|
+
]
|
@@ -0,0 +1,75 @@
|
|
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_pharmacy.admin.list_filters import MedicationsListFilter
|
5
|
+
|
6
|
+
from ..admin_site import meta_pharmacy_admin
|
7
|
+
from ..forms import RxForm
|
8
|
+
from ..models import Rx
|
9
|
+
|
10
|
+
|
11
|
+
@admin.register(Rx, site=meta_pharmacy_admin)
|
12
|
+
class RxAdmin(ModelAdminSubjectDashboardMixin, admin.ModelAdmin):
|
13
|
+
"""Admin class for proxy model of edc_pharmacy.Rx"""
|
14
|
+
|
15
|
+
show_object_tools = True
|
16
|
+
|
17
|
+
form = RxForm
|
18
|
+
|
19
|
+
fieldsets = (
|
20
|
+
(
|
21
|
+
None,
|
22
|
+
{
|
23
|
+
"fields": (
|
24
|
+
"subject_identifier",
|
25
|
+
"report_datetime",
|
26
|
+
"rx_name",
|
27
|
+
"rx_date",
|
28
|
+
"medications",
|
29
|
+
"clinician_initials",
|
30
|
+
"notes",
|
31
|
+
)
|
32
|
+
},
|
33
|
+
),
|
34
|
+
(
|
35
|
+
"Randomization",
|
36
|
+
{
|
37
|
+
"fields": ("rando_sid", "randomizer_name", "weight_in_kgs"),
|
38
|
+
},
|
39
|
+
),
|
40
|
+
audit_fieldset_tuple,
|
41
|
+
)
|
42
|
+
|
43
|
+
filter_horizontal = ("medications",)
|
44
|
+
|
45
|
+
list_display = (
|
46
|
+
"subject_identifier",
|
47
|
+
"dashboard",
|
48
|
+
"rx_medications",
|
49
|
+
"rando_sid",
|
50
|
+
"rx_date",
|
51
|
+
"weight_in_kgs",
|
52
|
+
"rx_name",
|
53
|
+
)
|
54
|
+
|
55
|
+
list_filter = ("report_datetime", MedicationsListFilter, "site")
|
56
|
+
|
57
|
+
search_fields = (
|
58
|
+
"id",
|
59
|
+
"subject_identifier",
|
60
|
+
"rando_sid",
|
61
|
+
"registered_subject__initials",
|
62
|
+
"medications__name",
|
63
|
+
"site__id",
|
64
|
+
"rx_name",
|
65
|
+
)
|
66
|
+
|
67
|
+
readonly_fields = (
|
68
|
+
"rando_sid",
|
69
|
+
"weight_in_kgs",
|
70
|
+
"rx_name",
|
71
|
+
)
|
72
|
+
|
73
|
+
@admin.display
|
74
|
+
def rx_medications(self, obj):
|
75
|
+
return ", ".join([obj.display_name for obj in obj.medications.all()])
|
@@ -3,12 +3,11 @@ from django_audit_fields.admin import audit_fieldset_tuple
|
|
3
3
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
4
4
|
from edc_model_admin.history import SimpleHistoryAdmin
|
5
5
|
from edc_model_admin.list_filters import ReportDateListFilter
|
6
|
-
from edc_pharmacy.admin.list_filters import MedicationsListFilter
|
7
6
|
from edc_sites.admin import SiteModelAdminMixin
|
8
7
|
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from
|
8
|
+
from ..admin_site import meta_pharmacy_admin
|
9
|
+
from ..forms import SubstitutionsForm
|
10
|
+
from ..models import Substitutions
|
12
11
|
|
13
12
|
|
14
13
|
@admin.register(Substitutions, site=meta_pharmacy_admin)
|
@@ -66,70 +65,3 @@ class SubstitutionsAdmin(
|
|
66
65
|
if obj.report_datetime:
|
67
66
|
return obj.report_datetime.date()
|
68
67
|
return None
|
69
|
-
|
70
|
-
|
71
|
-
@admin.register(Rx, site=meta_pharmacy_admin)
|
72
|
-
class RxAdmin(ModelAdminSubjectDashboardMixin, admin.ModelAdmin):
|
73
|
-
"""Admin class for proxy model of edc_pharmacy.Rx"""
|
74
|
-
|
75
|
-
show_object_tools = True
|
76
|
-
|
77
|
-
form = RxForm
|
78
|
-
|
79
|
-
fieldsets = (
|
80
|
-
(
|
81
|
-
None,
|
82
|
-
{
|
83
|
-
"fields": (
|
84
|
-
"subject_identifier",
|
85
|
-
"report_datetime",
|
86
|
-
"rx_name",
|
87
|
-
"rx_date",
|
88
|
-
"medications",
|
89
|
-
"clinician_initials",
|
90
|
-
"notes",
|
91
|
-
)
|
92
|
-
},
|
93
|
-
),
|
94
|
-
(
|
95
|
-
"Randomization",
|
96
|
-
{
|
97
|
-
"fields": ("rando_sid", "randomizer_name", "weight_in_kgs"),
|
98
|
-
},
|
99
|
-
),
|
100
|
-
audit_fieldset_tuple,
|
101
|
-
)
|
102
|
-
|
103
|
-
filter_horizontal = ("medications",)
|
104
|
-
|
105
|
-
list_display = (
|
106
|
-
"subject_identifier",
|
107
|
-
"dashboard",
|
108
|
-
"rx_medications",
|
109
|
-
"rando_sid",
|
110
|
-
"rx_date",
|
111
|
-
"weight_in_kgs",
|
112
|
-
"rx_name",
|
113
|
-
)
|
114
|
-
|
115
|
-
list_filter = ("report_datetime", MedicationsListFilter, "site")
|
116
|
-
|
117
|
-
search_fields = (
|
118
|
-
"id",
|
119
|
-
"subject_identifier",
|
120
|
-
"rando_sid",
|
121
|
-
"registered_subject__initials",
|
122
|
-
"medications__name",
|
123
|
-
"site__id",
|
124
|
-
"rx_name",
|
125
|
-
)
|
126
|
-
|
127
|
-
readonly_fields = (
|
128
|
-
"rando_sid",
|
129
|
-
"weight_in_kgs",
|
130
|
-
"rx_name",
|
131
|
-
)
|
132
|
-
|
133
|
-
@admin.display
|
134
|
-
def rx_medications(self, obj):
|
135
|
-
return ", ".join([obj.display_name for obj in obj.medications.all()])
|
@@ -0,0 +1,30 @@
|
|
1
|
+
from django.core.exceptions import ObjectDoesNotExist
|
2
|
+
from tqdm import tqdm
|
3
|
+
|
4
|
+
from meta_consent.models import SubjectConsent
|
5
|
+
from meta_rando.models import RandomizationList
|
6
|
+
|
7
|
+
from ..models import Label, LotNumber, Rx
|
8
|
+
|
9
|
+
|
10
|
+
class InvalidLotNumber(Exception):
|
11
|
+
pass
|
12
|
+
|
13
|
+
|
14
|
+
def get_label_data(lot_no, max_labels: int | None = None) -> list[Label]:
|
15
|
+
try:
|
16
|
+
lot_no = LotNumber.objects.get(lot_no=lot_no)
|
17
|
+
except ObjectDoesNotExist:
|
18
|
+
raise ObjectDoesNotExist("The lot number given is invalid")
|
19
|
+
else:
|
20
|
+
labels = []
|
21
|
+
qs = SubjectConsent.objects.values("subject_identifier", "site_id", "gender").all()
|
22
|
+
for obj in tqdm(qs, total=qs.count()):
|
23
|
+
if max_labels and len(labels) >= max_labels:
|
24
|
+
break
|
25
|
+
rando = RandomizationList.objects.get(subject_identifier=obj["subject_identifier"])
|
26
|
+
if rando.assignment != lot_no.allocation:
|
27
|
+
continue
|
28
|
+
rx = Rx.objects.get(subject_identifier=obj["subject_identifier"])
|
29
|
+
labels.append(Label.objects.create(rx=rx, lot_no=lot_no))
|
30
|
+
return labels
|
@@ -0,0 +1,86 @@
|
|
1
|
+
import os.path
|
2
|
+
from pathlib import Path
|
3
|
+
|
4
|
+
from edc_sites.site import sites
|
5
|
+
from pylabels import Sheet, Specification
|
6
|
+
from reportlab.graphics.barcode.widgets import BarcodeStandard39
|
7
|
+
from reportlab.graphics.charts.textlabels import Label as RlLabel
|
8
|
+
from reportlab.graphics.shapes import String
|
9
|
+
|
10
|
+
from meta_pharmacy.models import Label
|
11
|
+
|
12
|
+
|
13
|
+
class LabelData:
|
14
|
+
|
15
|
+
def __init__(self, label: Label):
|
16
|
+
self.label = label
|
17
|
+
self.gender = label.rx.registered_subject.gender
|
18
|
+
self.site_id = label.rx.site_id
|
19
|
+
self.subject_identifier = label.rx.subject_identifier
|
20
|
+
self.reference = label.rx_label_reference
|
21
|
+
self.sid = label.rx.rando_sid
|
22
|
+
self.site_name = sites.get(self.site_id).title
|
23
|
+
|
24
|
+
|
25
|
+
def draw_label(label, width, height, data: Label):
|
26
|
+
data = LabelData(data)
|
27
|
+
br = BarcodeStandard39(
|
28
|
+
humanReadable=True, checksum=False, barHeight=30, barWidth=0.7, gap=1.7
|
29
|
+
)
|
30
|
+
br.value = data.reference
|
31
|
+
br.x = width - 140
|
32
|
+
br.y = 25
|
33
|
+
label.add(br)
|
34
|
+
label.add(String(15, height - 20, f"META III Study - {data.site_name}", fontSize=10))
|
35
|
+
label.add(
|
36
|
+
String(
|
37
|
+
width - 120, height - 40, f"{data.subject_identifier}{data.gender}", fontSize=12
|
38
|
+
)
|
39
|
+
)
|
40
|
+
label.add(String(15, height - 40, "Dawa kwa ajili ya utafiti", fontSize=10))
|
41
|
+
label.add(String(15, height - 50, "wa META III.", fontSize=10))
|
42
|
+
label.add(String(15, height - 70, "Meza vidonge vinne usiku tu.", fontSize=10))
|
43
|
+
label.add(String(15, 20, "128 tabs", fontSize=10))
|
44
|
+
lab = RlLabel(x=width - 20, y=40, fontSize=10, angle=90)
|
45
|
+
# lab.boxAnchor = "ne"
|
46
|
+
# lab.dx = 0
|
47
|
+
# lab.dy = -20
|
48
|
+
lab.setText(data.sid)
|
49
|
+
label.add(lab)
|
50
|
+
return label
|
51
|
+
|
52
|
+
|
53
|
+
def print_sheets(labels: list[Label], path: Path | None = None, verbose: bool | None = None):
|
54
|
+
specs = Specification(
|
55
|
+
210,
|
56
|
+
297,
|
57
|
+
2,
|
58
|
+
6,
|
59
|
+
96,
|
60
|
+
42,
|
61
|
+
corner_radius=0,
|
62
|
+
top_margin=21,
|
63
|
+
left_margin=8,
|
64
|
+
right_margin=8,
|
65
|
+
bottom_margin=22,
|
66
|
+
left_padding=2,
|
67
|
+
right_padding=2,
|
68
|
+
top_padding=2,
|
69
|
+
bottom_padding=2,
|
70
|
+
)
|
71
|
+
|
72
|
+
if not path:
|
73
|
+
path = Path(os.path.dirname(__file__))
|
74
|
+
path = str(path / "meta_labels.pdf")
|
75
|
+
sheet = Sheet(specs, draw_label, border=True)
|
76
|
+
|
77
|
+
sheet.add_labels(labels)
|
78
|
+
|
79
|
+
# Save the file and we are done.
|
80
|
+
sheet.save(path)
|
81
|
+
msg = "{0:d} label(s) output on {1:d} page(s) to {2}.".format(
|
82
|
+
sheet.label_count, sheet.page_count, path
|
83
|
+
)
|
84
|
+
if verbose:
|
85
|
+
print(msg)
|
86
|
+
return msg
|