meta-edc 0.3.34__py3-none-any.whl → 0.3.35__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meta-edc
3
- Version: 0.3.34
3
+ Version: 0.3.35
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
@@ -289,17 +289,19 @@ meta_lists/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
289
289
  meta_lists/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
290
290
  meta_lists/tests/test_lists.py,sha256=qcp2emRyd5-cP2oLluy8MpUucBDQ8_GdUxjh2KbZPv4,212
291
291
  meta_pharmacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
292
- meta_pharmacy/admin.py,sha256=xFFC-xROXqcWBsS1QYSFYJYdUzcTQMkzFHzEMniasNk,3255
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=b02OM7TbMyQ12qrZ8WptmhIuGj87fgkQQkc0qVxMopw,2104
297
- meta_pharmacy/models.py,sha256=stj6HnurPlnLKZi0tZKTzy3m24t26TsDMzydJklMQxg,3373
297
+ meta_pharmacy/models.py,sha256=qwjsvsCr7ryb8DRn1aYD1_wOpAQR6ffumLuYNGxeNEs,3395
298
298
  meta_pharmacy/prepare_meta_pharmacy.py,sha256=5gNiPkmOzWwCW-_q6hgIzj_0tnPuN4Tl1lVI6FygNgs,2945
299
299
  meta_pharmacy/urls.py,sha256=jncXssL_SeRhb_OJVXLdGFvPT3BqtrkSPdq-eyJnGfY,207
300
300
  meta_pharmacy/migrations/0001_initial.py,sha256=2uyWhZ-Qkjum1gJJA5v-BWUdpmKhkf8BcuDQMl8895s,1115
301
301
  meta_pharmacy/migrations/0002_initial.py,sha256=zkPXmGhdEi-EM0HJRBaTUAltdiLRjW1BhU4GEydoBM8,27355
302
302
  meta_pharmacy/migrations/0003_auto_20240909_2335.py,sha256=_hbzV6HaBm-VS_jQMhl3w5srvyaYOQclLBvr_8f79uk,2227
303
+ meta_pharmacy/migrations/0004_alter_historicalsubstitutions_report_datetime_and_more.py,sha256=33SpQ4UtFs3gblj4WG3KtKtalo8Wynv3uyUOqBe7_Zo,585
304
+ meta_pharmacy/migrations/0005_auto_20240911_0352.py,sha256=ZwjFlBX_ubNDbTnDny7cvgCb4aSiqhVKhTYDWd6oQmg,534
303
305
  meta_pharmacy/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
304
306
  meta_prn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
305
307
  meta_prn/action_items.py,sha256=wz6X7Ve8ibqPBO5kB6S9rYYkWfx8JxsoYRVppzIGAzk,9110
@@ -446,7 +448,7 @@ meta_reports/admin/list_filters.py,sha256=pByBzz9-qGwqBfdZFlByxJUZDTJQXOTWfNLjmK
446
448
  meta_reports/admin/modeladmin_mixins.py,sha256=RhdkF5W9ccuwaX5NTMF4b9shQJgDFaOlj7ENOTBAG0g,3669
447
449
  meta_reports/admin/dbviews/__init__.py,sha256=2yPu0SO7ZX9yjan0OS9izzws14YYoXcGXmZhwJhax1I,675
448
450
  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
451
+ meta_reports/admin/dbviews/imp_substitutions_admin.py,sha256=-poOw3fJK7jQERB1PNXNDrWNthwEQpiwmrxoWOsDtjI,3622
450
452
  meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py,sha256=XyroEqxlX816xrdi0IVSelNPxPBWi96niKa-MQVGkck,2058
451
453
  meta_reports/admin/dbviews/unattended_three_in_row2_admin.py,sha256=0r13KRr0gsH2osmSlffRV11SpSBpWM612AYl-GOoYm0,1347
452
454
  meta_reports/admin/dbviews/unattended_three_in_row_admin.py,sha256=i_-H3pMXRjssf8jFw8gJ8_b0FaM4tX2AI4xfHQDyssU,1121
@@ -511,6 +513,7 @@ meta_reports/migrations/0045_auto_20240829_0248.py,sha256=V9F3yLQsbvUL40Fei3FrhB
511
513
  meta_reports/migrations/0046_auto_20240829_0250.py,sha256=lKVlj7LrkOJ49LJxccYvQdYEZhnSKTcZEcZMYj7h9q8,30676
512
514
  meta_reports/migrations/0047_impsubstitutions.py,sha256=VPTb5j2t9IvwR-Bq0lnVBGLAVKdL7IbY8DD-cjl_m5o,2088
513
515
  meta_reports/migrations/0048_auto_20240909_2338.py,sha256=mYAOUzJohv9eW9y93fpZTmlgmx_eOBRhUBMr0F3_-_M,3169
516
+ meta_reports/migrations/0049_auto_20240911_0327.py,sha256=APBkFY9kwzEmhTXkK2-bu6csikh_dVEMH6t2dv_Iz9M,4760
514
517
  meta_reports/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
515
518
  meta_reports/models/__init__.py,sha256=8JnKMG9devIPboCCGj423x77Ylry2ROdGOnDSk5Xo4w,380
516
519
  meta_reports/models/endpoints.py,sha256=HfxQuKkzu883xbTeVfIEktN-ARoGe1qC6KgEAzRtV5E,925
@@ -521,8 +524,8 @@ meta_reports/models/dbviews/glucose_summary/__init__.py,sha256=Tfgjso4TpxMCidAdR
521
524
  meta_reports/models/dbviews/glucose_summary/unmanaged_model.py,sha256=uqhD5JLXtyQ94zpG5Puxodjzli3quE4GgiFi7en6EeM,1055
522
525
  meta_reports/models/dbviews/glucose_summary/view_definition.py,sha256=Fc5KN-It9dcBvRta-b26kUl8uQEHA19vrYIhNRqe2Xo,1512
523
526
  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
527
+ meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py,sha256=ozrkfZFBHAnBBlEY19gRVj6eFiZrVfAnAV6E8OBwnP8,1223
528
+ meta_reports/models/dbviews/imp_substitutions/view_definition.py,sha256=1t6znTYQJxM_-nTRjMgEY3T2L_ZDFvh2tw-zT8fmxQU,897
526
529
  meta_reports/models/dbviews/missing_screening_ogtt/__init__.py,sha256=7uX_2HfVU-3G1O_xecfGnE5_pcX5eceiRaapeDQtzIw,105
527
530
  meta_reports/models/dbviews/missing_screening_ogtt/note_model.py,sha256=JHItVS11WDFg3lTe7ayH9T7Epd-VvXXD_79FssrmAwc,1813
528
531
  meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py,sha256=_XFzpOiMoxr-F0ebKNEnyXqS6dnb3P5tBRnZlbrQ2x8,1346
@@ -1134,9 +1137,9 @@ tests/etc/user-rsa-restricted-private.pem,sha256=CUcHW9bznWdmmASN00hCzvxFPAFl4N2
1134
1137
  tests/etc/user-rsa-restricted-public.pem,sha256=mt84djoL-uHw6Wc5SJh0zml6VzXulnf8eQSFg7-fheg,450
1135
1138
  tests/etc/user-salt-local.key,sha256=x5anBw9fvbHurczouT3CjrkWb_xs7Ypm1htIJsgiuiw,256
1136
1139
  tests/etc/user-salt-restricted.key,sha256=pxmpcfBRNB-4C6wTvHXz-9fOfJgKIFOjaAF8ZFfa4q4,256
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,,
1140
+ meta_edc-0.3.35.dist-info/AUTHORS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1141
+ meta_edc-0.3.35.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1142
+ meta_edc-0.3.35.dist-info/METADATA,sha256=dDq2QH8-IJSAsrP9CH2CeRwlGMpaxNTgjYpVEu2pi3A,3015
1143
+ meta_edc-0.3.35.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
1144
+ meta_edc-0.3.35.dist-info/top_level.txt,sha256=RkzjNXwRq2kg_uZ_1bDwPUntijSXoY2YBqtByDwvvrc,244
1145
+ meta_edc-0.3.35.dist-info/RECORD,,
meta_pharmacy/admin.py CHANGED
@@ -2,6 +2,7 @@ from django.contrib import admin
2
2
  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
+ from edc_model_admin.list_filters import ReportDateListFilter
5
6
  from edc_pharmacy.admin.list_filters import MedicationsListFilter
6
7
  from edc_sites.admin import SiteModelAdminMixin
7
8
 
@@ -51,15 +52,21 @@ class SubstitutionsAdmin(
51
52
  "dispensed_sid",
52
53
  "arm_match",
53
54
  "subject_identifier",
54
- "report_datetime",
55
+ "report_date",
55
56
  )
56
57
 
57
58
  radio_fields = {"arm_match": admin.VERTICAL}
58
59
 
59
- list_filter = ("arm_match", "report_datetime")
60
+ list_filter = ("arm_match", ReportDateListFilter)
60
61
 
61
62
  search_fields = ["subject_identifier", "sid", "dispensed_sid"]
62
63
 
64
+ @admin.display(description="Report date", ordering="report_datetime")
65
+ def report_date(self, obj) -> str | None:
66
+ if obj.report_datetime:
67
+ return obj.report_datetime.date()
68
+ return None
69
+
63
70
 
64
71
  @admin.register(Rx, site=meta_pharmacy_admin)
65
72
  class RxAdmin(ModelAdminSubjectDashboardMixin, admin.ModelAdmin):
@@ -0,0 +1,23 @@
1
+ # Generated by Django 5.1 on 2024-09-11 00:30
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("meta_pharmacy", "0003_auto_20240909_2335"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="historicalsubstitutions",
15
+ name="report_datetime",
16
+ field=models.DateTimeField(null=True),
17
+ ),
18
+ migrations.AlterField(
19
+ model_name="substitutions",
20
+ name="report_datetime",
21
+ field=models.DateTimeField(null=True),
22
+ ),
23
+ ]
@@ -0,0 +1,17 @@
1
+ # Generated by Django 5.1 on 2024-09-11 00:52
2
+ from django.apps import apps as django_apps
3
+ from django.db import migrations
4
+
5
+
6
+ def update_report_datetime_as_none(apps, schema_editor):
7
+ model_cls = django_apps.get_model("meta_pharmacy.substitutions")
8
+ model_cls.objects.update(report_datetime=None)
9
+
10
+
11
+ class Migration(migrations.Migration):
12
+
13
+ dependencies = [
14
+ ("meta_pharmacy", "0004_alter_historicalsubstitutions_report_datetime_and_more"),
15
+ ]
16
+
17
+ operations = [migrations.RunPython(update_report_datetime_as_none)]
meta_pharmacy/models.py CHANGED
@@ -41,7 +41,7 @@ class Substitutions(NonUniqueSubjectIdentifierFieldMixin, SiteModelMixin, BaseUu
41
41
  values are sequential and not designed for human transcription.
42
42
  """
43
43
 
44
- report_datetime = models.DateTimeField()
44
+ report_datetime = models.DateTimeField(null=True, blank=False)
45
45
 
46
46
  row_index = models.IntegerField(null=True)
47
47
 
@@ -6,6 +6,7 @@ from django.urls import reverse
6
6
  from django.utils.translation import gettext_lazy as _
7
7
  from edc_appointment.models import Appointment
8
8
  from edc_model_admin.dashboard import ModelAdminDashboardMixin
9
+ from edc_model_admin.list_filters import ReportDateListFilter
9
10
  from edc_model_admin.mixins import TemplatesModelAdminMixin
10
11
  from edc_qareports.modeladmin_mixins import QaReportModelAdminMixin
11
12
  from edc_sites.admin import SiteModelAdminMixin
@@ -31,6 +32,7 @@ class ImpSubstitutionsAdmin(
31
32
  "subject",
32
33
  "sid",
33
34
  "dispensed_sid",
35
+ "report_date",
34
36
  "arm_match",
35
37
  "allocated_date",
36
38
  "user_created",
@@ -38,7 +40,12 @@ class ImpSubstitutionsAdmin(
38
40
  "modified",
39
41
  ]
40
42
 
41
- list_filter = ["arm_match", ScheduleStatusListFilter, "allocated_datetime"]
43
+ list_filter = [
44
+ "arm_match",
45
+ ScheduleStatusListFilter,
46
+ ReportDateListFilter,
47
+ "allocated_datetime",
48
+ ]
42
49
 
43
50
  search_fields = ["subject_identifier", "sid", "dispensed_sid"]
44
51
 
@@ -86,3 +93,9 @@ class ImpSubstitutionsAdmin(
86
93
  context=dict(title=title, url=url, label=label),
87
94
  )
88
95
  return crf_button
96
+
97
+ @admin.display(description="Report date", ordering="report_datetime")
98
+ def report_date(self, obj) -> str | None:
99
+ if obj.report_datetime:
100
+ return obj.report_datetime.date()
101
+ return None
@@ -0,0 +1,54 @@
1
+ # Generated by Django 5.1 on 2024-09-11 00:27
2
+
3
+ import django_db_views.migration_functions
4
+ import django_db_views.operations
5
+ from django.db import migrations
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ("meta_reports", "0048_auto_20240909_2338"),
12
+ ]
13
+
14
+ operations = [
15
+ django_db_views.operations.ViewRunPython(
16
+ code=django_db_views.migration_functions.ForwardViewMigration(
17
+ "select *, uuid() as id, now() as `created`, 'meta_reports.imp_subjectitutions_view' as `report_model` from (SELECT s.subject_identifier, s.sid, s.dispensed_sid, arm_match, s.report_datetime, r.allocated_datetime, s.site_id, s.user_created, s.user_modified, s.modified, s.id AS original_id FROM meta_pharmacy_substitutions AS s LEFT JOIN meta_rando_randomizationlist AS r ON r.subject_identifier = s.subject_identifier ORDER BY s.subject_identifier) as A ORDER BY subject_identifier, site_id",
18
+ "imp_subjectitutions_view",
19
+ engine="django.db.backends.mysql",
20
+ ),
21
+ reverse_code=django_db_views.migration_functions.BackwardViewMigration(
22
+ "select *, uuid() as id, now() as `created`, 'meta_reports.imp_subjectitutions_view' as `report_model` from (SELECT s.subject_identifier, s.sid, s.dispensed_sid, arm_match, r.allocated_datetime, s.site_id, s.user_created, s.user_modified, s.modified, s.id AS original_id FROM meta_pharmacy_substitutions AS s LEFT JOIN meta_rando_randomizationlist AS r ON r.subject_identifier = s.subject_identifier ORDER BY s.subject_identifier) as A ORDER BY subject_identifier, site_id",
23
+ "imp_subjectitutions_view",
24
+ engine="django.db.backends.mysql",
25
+ ),
26
+ atomic=False,
27
+ ),
28
+ django_db_views.operations.ViewRunPython(
29
+ code=django_db_views.migration_functions.ForwardViewMigration(
30
+ "select *, get_random_uuid() as id, now() as created, 'meta_reports.imp_subjectitutions_view' as report_model from (SELECT s.subject_identifier, s.sid, s.dispensed_sid, arm_match, s.report_datetime, r.allocated_datetime, s.site_id, s.user_created, s.user_modified, s.modified, s.id AS original_id FROM meta_pharmacy_substitutions AS s LEFT JOIN meta_rando_randomizationlist AS r ON r.subject_identifier = s.subject_identifier ORDER BY s.subject_identifier NULLS FIRST) as A ORDER BY subject_identifier, site_id",
31
+ "imp_subjectitutions_view",
32
+ engine="django.db.backends.postgresql",
33
+ ),
34
+ reverse_code=django_db_views.migration_functions.BackwardViewMigration(
35
+ "select *, get_random_uuid() as id, now() as created, 'meta_reports.imp_subjectitutions_view' as report_model from (SELECT s.subject_identifier, s.sid, s.dispensed_sid, arm_match, r.allocated_datetime, s.site_id, s.user_created, s.user_modified, s.modified, s.id AS original_id FROM meta_pharmacy_substitutions AS s LEFT JOIN meta_rando_randomizationlist AS r ON r.subject_identifier = s.subject_identifier ORDER BY s.subject_identifier NULLS FIRST) as A ORDER BY subject_identifier, site_id",
36
+ "imp_subjectitutions_view",
37
+ engine="django.db.backends.postgresql",
38
+ ),
39
+ atomic=False,
40
+ ),
41
+ django_db_views.operations.ViewRunPython(
42
+ code=django_db_views.migration_functions.ForwardViewMigration(
43
+ "select *, uuid() as id, datetime() as created, 'meta_reports.imp_subjectitutions_view' as report_model from (SELECT s.subject_identifier, s.sid, s.dispensed_sid, arm_match, s.report_datetime, r.allocated_datetime, s.site_id, s.user_created, s.user_modified, s.modified, s.id AS original_id FROM meta_pharmacy_substitutions AS s LEFT JOIN meta_rando_randomizationlist AS r ON r.subject_identifier = s.subject_identifier ORDER BY s.subject_identifier) as A ORDER BY subject_identifier, site_id",
44
+ "imp_subjectitutions_view",
45
+ engine="django.db.backends.sqlite3",
46
+ ),
47
+ reverse_code=django_db_views.migration_functions.BackwardViewMigration(
48
+ "select *, uuid() as id, datetime() as created, 'meta_reports.imp_subjectitutions_view' as report_model from (SELECT s.subject_identifier, s.sid, s.dispensed_sid, arm_match, r.allocated_datetime, s.site_id, s.user_created, s.user_modified, s.modified, s.id AS original_id FROM meta_pharmacy_substitutions AS s LEFT JOIN meta_rando_randomizationlist AS r ON r.subject_identifier = s.subject_identifier ORDER BY s.subject_identifier) as A ORDER BY subject_identifier, site_id",
49
+ "imp_subjectitutions_view",
50
+ engine="django.db.backends.sqlite3",
51
+ ),
52
+ atomic=False,
53
+ ),
54
+ ]
@@ -19,6 +19,8 @@ class ImpSubstitutions(QaReportModelMixin, DBView):
19
19
  max_length=15, choices=YES_NO_NOT_EVALUATED, default=NOT_EVALUATED
20
20
  )
21
21
 
22
+ report_datetime = models.DateTimeField(null=True)
23
+
22
24
  allocated_datetime = models.DateTimeField(null=True)
23
25
 
24
26
  user_created = models.CharField(max_length=25)
@@ -3,7 +3,8 @@ from edc_qareports.sql_generator import SqlViewGenerator
3
3
 
4
4
  def get_view_definition() -> dict:
5
5
  subquery = """
6
- select s.subject_identifier, s.sid, s.dispensed_sid, arm_match, r.allocated_datetime,
6
+ select s.subject_identifier, s.sid, s.dispensed_sid, arm_match,
7
+ s.report_datetime, r.allocated_datetime,
7
8
  s.site_id, s.user_created, s.user_modified, s.modified, s.id as original_id
8
9
  from meta_pharmacy_substitutions as s left join meta_rando_randomizationlist as r
9
10
  on r.subject_identifier=s.subject_identifier