clinicedc 2.0.0__py3-none-any.whl → 2.0.2__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.

Potentially problematic release.


This version of clinicedc might be problematic. Click here for more details.

Files changed (896) hide show
  1. {clinicedc-2.0.0.dist-info → clinicedc-2.0.2.dist-info}/METADATA +15 -22
  2. {clinicedc-2.0.0.dist-info → clinicedc-2.0.2.dist-info}/RECORD +895 -792
  3. {clinicedc-2.0.0.dist-info → clinicedc-2.0.2.dist-info}/WHEEL +1 -1
  4. edc_action_item/action.py +13 -32
  5. edc_action_item/action_with_notification.py +1 -2
  6. edc_action_item/admin/action_item_admin.py +2 -6
  7. edc_action_item/admin_site.py +1 -3
  8. edc_action_item/auths.py +1 -3
  9. edc_action_item/create_or_update_action_type.py +1 -3
  10. edc_action_item/data_fixers.py +7 -20
  11. edc_action_item/forms/action_item_form.py +1 -3
  12. edc_action_item/management/commands/inspect_action_items.py +3 -9
  13. edc_action_item/migrations/0001_initial.py +4 -5
  14. edc_action_item/migrations/0003_auto_20180116_1528.py +2 -1
  15. edc_action_item/migrations/0006_auto_20180707_1659.py +3 -4
  16. edc_action_item/migrations/0007_auto_20180707_1715.py +1 -3
  17. edc_action_item/migrations/0008_auto_20180809_0303.py +2 -1
  18. edc_action_item/migrations/0014_auto_20181121_1738.py +2 -6
  19. edc_action_item/migrations/0015_auto_20190114_0250.py +4 -3
  20. edc_action_item/migrations/0021_auto_20190628_2113.py +1 -3
  21. edc_action_item/migrations/0022_auto_20190628_2136.py +2 -6
  22. edc_action_item/migrations/0030_edcpermissions.py +1 -1
  23. edc_action_item/migrations/0033_alter_actionitem_managers.py +1 -0
  24. edc_action_item/migrations/0034_alter_actionitem_device_created_and_more.py +13 -37
  25. edc_action_item/migrations/0038_alter_actionitem_revision_alter_actiontype_revision_and_more.py +86 -0
  26. edc_action_item/models/action_item.py +2 -6
  27. edc_action_item/models/action_model_mixin.py +5 -16
  28. edc_action_item/models/action_type.py +1 -3
  29. edc_action_item/models/reference.py +1 -2
  30. edc_action_item/models/signals.py +3 -9
  31. edc_action_item/site_action_items.py +4 -12
  32. edc_action_item/templatetags/action_item_extras.py +1 -3
  33. edc_action_item/view_utils/action_item_button.py +1 -3
  34. edc_action_item/view_utils/action_item_popover_list_item.py +1 -2
  35. edc_adherence/migrations/0002_nonadherencereasons_plural_name.py +1 -3
  36. edc_adherence/model_admin_mixin.py +1 -3
  37. edc_adverse_event/action_items/ae_followup_action.py +2 -6
  38. edc_adverse_event/action_items/ae_initial_action.py +3 -7
  39. edc_adverse_event/auth_objects.py +2 -6
  40. edc_adverse_event/constants.py +1 -3
  41. edc_adverse_event/form_validator_mixins/death_report_form_validator.py +1 -3
  42. edc_adverse_event/form_validator_mixins/requires_death_report_form_validator_mixin.py +2 -7
  43. edc_adverse_event/form_validators/hospitalization.py +1 -3
  44. edc_adverse_event/migrations/0003_auto_20191026_2231.py +3 -9
  45. edc_adverse_event/migrations/0008_auto_20220825_0451.py +1 -1
  46. edc_adverse_event/migrations/0009_auto_20220907_0157.py +1 -1
  47. edc_adverse_event/migrations/0010_auto_20220913_2139.py +4 -12
  48. edc_adverse_event/migrations/0013_alter_aeactionclassification_device_created_and_more.py +11 -31
  49. edc_adverse_event/migrations/0015_alter_aeactionclassification_revision_and_more.py +74 -0
  50. edc_adverse_event/model_mixins/ae_followup/ae_followup_fields_model_mixin.py +1 -3
  51. edc_adverse_event/model_mixins/ae_followup/ae_followup_model_mixin.py +1 -5
  52. edc_adverse_event/model_mixins/ae_initial/ae_initial_ae_model_mixin.py +1 -3
  53. edc_adverse_event/model_mixins/ae_initial/ae_initial_fields_model_mixin.py +1 -3
  54. edc_adverse_event/model_mixins/ae_initial/ae_initial_susar_model_mixin.py +1 -2
  55. edc_adverse_event/model_mixins/ae_special_interest/aesi_model_mixin.py +1 -5
  56. edc_adverse_event/model_mixins/ae_susar/ae_susar_model_mixin.py +1 -5
  57. edc_adverse_event/model_mixins/ae_tmg/ae_tmg_fields_model_mixin.py +2 -6
  58. edc_adverse_event/model_mixins/ae_tmg/ae_tmg_model_mixin.py +1 -5
  59. edc_adverse_event/model_mixins/death_report/death_report_extra_fields_model_mixin.py +1 -2
  60. edc_adverse_event/model_mixins/death_report/death_report_model_mixin.py +2 -5
  61. edc_adverse_event/model_mixins/death_report/death_report_tmg_model_mixin.py +2 -7
  62. edc_adverse_event/model_mixins/death_report/simple_death_report_model_mixin.py +1 -3
  63. edc_adverse_event/modeladmin_mixins/ae_tmg_admin_mixin.py +1 -3
  64. edc_adverse_event/modeladmin_mixins/death_report_admin_mixin.py +6 -10
  65. edc_adverse_event/modelform_mixins/ae_tmg_modelform_mixin.py +1 -3
  66. edc_adverse_event/models/signals.py +3 -9
  67. edc_adverse_event/pdf_reports/ae_pdf_report.py +6 -18
  68. edc_adverse_event/pdf_reports/death_pdf_report.py +3 -9
  69. edc_adverse_event/templatetags/edc_adverse_event_extras.py +5 -15
  70. edc_adverse_event/utils.py +2 -6
  71. edc_adverse_event/view_mixins/ae/ae_listboard_view_mixin.py +1 -3
  72. edc_adverse_event/view_mixins/ae/death_report_listboard_view_mixin.py +1 -3
  73. edc_adverse_event/view_mixins/tmg/tmg_ae_listboard_view_mixin.py +2 -6
  74. edc_adverse_event/view_utils/tmg_button.py +2 -6
  75. edc_adverse_event/views/home_view.py +1 -3
  76. edc_adverse_event/views/tmg/death_listboard_view.py +1 -3
  77. edc_adverse_event/views/tmg/home_view.py +2 -6
  78. edc_adverse_event/views/tmg/summary_listboard_view.py +1 -3
  79. edc_appconfig/apps.py +3 -2
  80. edc_appointment/admin/appointment_admin.py +1 -3
  81. edc_appointment/admin/list_filters.py +1 -3
  82. edc_appointment/admin_site.py +1 -3
  83. edc_appointment/analytics/dataframes/get_appointment_df.py +2 -6
  84. edc_appointment/appointment_reason_updater.py +2 -5
  85. edc_appointment/appointment_status_updater.py +1 -4
  86. edc_appointment/constants.py +1 -3
  87. edc_appointment/creators/appointment_creator.py +4 -10
  88. edc_appointment/creators/appointments_creator.py +3 -2
  89. edc_appointment/creators/unscheduled_appointment_creator.py +3 -7
  90. edc_appointment/creators/utils.py +4 -0
  91. edc_appointment/form_validator_mixins/next_appointment_crf_form_validator_mixin.py +3 -10
  92. edc_appointment/form_validator_mixins/window_period_form_validator_mixin.py +3 -9
  93. edc_appointment/form_validators/appointment_form_validator.py +11 -37
  94. edc_appointment/form_validators/next_appointment_crf_form_validator.py +1 -3
  95. edc_appointment/form_validators/utils.py +1 -3
  96. edc_appointment/managers.py +2 -6
  97. edc_appointment/migrations/0002_auto_20161126_1156.py +5 -8
  98. edc_appointment/migrations/0003_auto_20161127_2226.py +7 -16
  99. edc_appointment/migrations/0006_auto_20170106_2118.py +2 -1
  100. edc_appointment/migrations/0008_auto_20171115_1601.py +3 -4
  101. edc_appointment/migrations/0014_auto_20180116_1411.py +2 -1
  102. edc_appointment/migrations/0024_auto_20200911_0425.py +1 -1
  103. edc_appointment/migrations/0034_appointmenttype_alter_appointment_appt_type_and_more.py +2 -4
  104. edc_appointment/migrations/0036_auto_20230124_1822.py +2 -6
  105. edc_appointment/migrations/0040_appointment_appt_type_other_and_more.py +1 -0
  106. edc_appointment/migrations/0042_alter_appointment_device_created_and_more.py +5 -13
  107. edc_appointment/migrations/0046_infosources.py +1 -3
  108. edc_appointment/migrations/0047_alter_appointment_options_and_more.py +1 -3
  109. edc_appointment/migrations/0049_alter_appointment_revision_and_more.py +38 -0
  110. edc_appointment/model_mixins/appointment_methods_model_mixin.py +1 -5
  111. edc_appointment/model_mixins/appointment_model_mixin.py +7 -12
  112. edc_appointment/model_mixins/next_appointment_crf_model_mixin.py +1 -3
  113. edc_appointment/modeladmin_mixins/next_appointment_crf_modeladmin_mixin.py +1 -3
  114. edc_appointment/modelform_mixins/next_appointment_crf_modelform_mixins.py +1 -5
  115. edc_appointment/models/signals.py +5 -17
  116. edc_appointment/utils.py +11 -33
  117. edc_appointment/view_mixins/appointment_view_mixin.py +2 -6
  118. edc_auth/admin/list_filters.py +2 -6
  119. edc_auth/admin/role_admin.py +1 -3
  120. edc_auth/admin/user_admin.py +4 -12
  121. edc_auth/admin/user_profile_admin.py +2 -5
  122. edc_auth/auth_updater/auth_updater.py +1 -3
  123. edc_auth/forms.py +1 -3
  124. edc_auth/get_app_codenames.py +1 -3
  125. edc_auth/import_users.py +3 -9
  126. edc_auth/management/commands/export_users.py +1 -3
  127. edc_auth/management/commands/reset_password.py +1 -3
  128. edc_auth/migrations/0001_squashed_0033_alter_userprofile_is_multisite_viewer.py +4 -12
  129. edc_auth/migrations/0015_auto_20191026_2149.py +1 -3
  130. edc_auth/migrations/0016_auto_20191026_2153.py +1 -3
  131. edc_auth/migrations/0025_permissions.py +1 -1
  132. edc_auth/migrations/0029_alter_edcpermissions_device_created_and_more.py +5 -13
  133. edc_auth/migrations/0034_alter_edcpermissions_revision_alter_role_revision.py +38 -0
  134. edc_auth/models/__init__.py +1 -3
  135. edc_auth/models/signals.py +2 -6
  136. edc_auth/models/user_profile.py +1 -3
  137. edc_auth/password_setter.py +1 -3
  138. edc_auth/system_checks.py +1 -5
  139. edc_auth/urls_for_accounts.py +1 -3
  140. edc_auth/utils.py +3 -9
  141. edc_consent/actions.py +3 -9
  142. edc_consent/consent_definition.py +5 -8
  143. edc_consent/consent_definition_extension.py +4 -12
  144. edc_consent/field_mixins/citizen_fields_mixin.py +2 -4
  145. edc_consent/field_mixins/identity_fields_mixin.py +1 -2
  146. edc_consent/field_mixins/personal_fields_mixin.py +8 -3
  147. edc_consent/field_mixins/site_fields_mixin.py +1 -2
  148. edc_consent/form_validators/subject_consent_form_validator.py +4 -8
  149. edc_consent/migrations/0001_initial.py +1 -1
  150. edc_consent/migrations/0002_alter_edcpermissions_device_created_and_more.py +3 -7
  151. edc_consent/migrations/0005_alter_edcpermissions_revision.py +26 -0
  152. edc_consent/model_mixins/consent_extension_model_mixin.py +2 -3
  153. edc_consent/model_mixins/consent_model_mixin.py +3 -9
  154. edc_consent/modeladmin_mixins/consent_model_admin_mixin.py +7 -17
  155. edc_consent/modelform_mixins/consent_modelform_mixin/consent_modelform_validation_mixin.py +6 -10
  156. edc_consent/modelform_mixins/requires_consent_modelform_mixin.py +1 -3
  157. edc_consent/models/signals.py +3 -6
  158. edc_consent/site_consents.py +6 -17
  159. edc_consent/system_checks.py +3 -9
  160. edc_consent/validators.py +1 -2
  161. edc_consent/view_mixins/consent_view_mixins.py +3 -5
  162. edc_crf/crf_form_validator.py +4 -7
  163. edc_crf/crf_form_validator_mixins.py +2 -6
  164. edc_crf/migrations/0004_alter_crfstatus_device_created_and_more.py +3 -7
  165. edc_crf/migrations/0008_alter_crfstatus_revision.py +26 -0
  166. edc_crf/utils.py +1 -3
  167. edc_dashboard/management/commands/update_search_slugs.py +1 -3
  168. edc_dashboard/migrations/0001_initial.py +1 -1
  169. edc_dashboard/migrations/0003_alter_edcpermissions_device_created_and_more.py +3 -7
  170. edc_dashboard/migrations/0005_alter_edcpermissions_revision.py +26 -0
  171. edc_dashboard/templatetags/edc_dashboard_extras.py +2 -6
  172. edc_dashboard/view_mixins/administration_view_mixin.py +1 -3
  173. edc_dashboard/view_mixins/edc_view_mixin.py +1 -3
  174. edc_dashboard/views/administration_view.py +1 -3
  175. edc_data_manager/action_items.py +1 -3
  176. edc_data_manager/admin/actions.py +3 -9
  177. edc_data_manager/admin/data_query_admin.py +4 -12
  178. edc_data_manager/admin/query_rule_admin.py +4 -13
  179. edc_data_manager/auths.py +1 -3
  180. edc_data_manager/forms/data_query.py +2 -6
  181. edc_data_manager/forms/query_rule.py +1 -3
  182. edc_data_manager/get_longitudinal_value.py +2 -5
  183. edc_data_manager/handlers/handlers.py +2 -6
  184. edc_data_manager/migrations/0001_initial.py +4 -3
  185. edc_data_manager/migrations/0003_auto_20190806_1749.py +2 -6
  186. edc_data_manager/migrations/0004_auto_20190806_1750.py +1 -3
  187. edc_data_manager/migrations/0025_edcpermissions.py +1 -1
  188. edc_data_manager/migrations/0027_alter_dataquery_dm_user.py +1 -1
  189. edc_data_manager/migrations/0028_alter_dataquery_options_alter_queryrule_options_and_more.py +2 -1
  190. edc_data_manager/migrations/0029_alter_dataquery_managers.py +2 -1
  191. edc_data_manager/migrations/0030_alter_datadictionary_device_created_and_more.py +15 -43
  192. edc_data_manager/migrations/0039_alter_datadictionary_revision_and_more.py +101 -0
  193. edc_data_manager/models/model_mixins.py +1 -3
  194. edc_data_manager/populate_data_dictionary.py +1 -2
  195. edc_data_manager/post_migrate_signals.py +1 -3
  196. edc_data_manager/site_data_manager.py +1 -3
  197. edc_document_status/model_mixins.py +1 -3
  198. edc_egfr/__init__.py +1 -0
  199. edc_egfr/admin/__init__.py +1 -0
  200. edc_egfr/admin/egfr_drop_notification_admin_mixin.py +73 -0
  201. edc_egfr/apps.py +5 -0
  202. edc_egfr/calculators/__init__.py +4 -0
  203. edc_egfr/calculators/base_egrfr.py +56 -0
  204. edc_egfr/calculators/egfr_ckd_epi.py +68 -0
  205. edc_egfr/calculators/egfr_cockcroft_gault.py +63 -0
  206. edc_egfr/calculators/percent_change.py +7 -0
  207. edc_egfr/constants.py +1 -0
  208. edc_egfr/egfr.py +237 -0
  209. edc_egfr/form_validator_mixins/__init__.py +4 -0
  210. edc_egfr/form_validator_mixins/egfr_form_validator_mixins.py +55 -0
  211. edc_egfr/get_drop_notification_model.py +10 -0
  212. edc_egfr/get_egfr_for_subject.py +31 -0
  213. edc_egfr/model_mixins/__init__.py +2 -0
  214. edc_egfr/model_mixins/egfr_drop_notification_model_mixin.py +63 -0
  215. edc_egfr/model_mixins/egfr_model_mixin.py +120 -0
  216. edc_export/archive_exporter.py +2 -6
  217. edc_export/exportables.py +2 -6
  218. edc_export/files_emailer.py +1 -3
  219. edc_export/management/commands/import_receipts.py +1 -3
  220. edc_export/managers.py +3 -9
  221. edc_export/migrations/0001_initial.py +15 -36
  222. edc_export/migrations/0005_exportdata_importdata.py +1 -3
  223. edc_export/migrations/0006_auto_20200512_0208.py +2 -6
  224. edc_export/migrations/0010_auto_20210910_1636.py +2 -6
  225. edc_export/migrations/0013_edcpermissions.py +1 -1
  226. edc_export/migrations/0015_alter_datarequest_managers_and_more.py +2 -1
  227. edc_export/migrations/0016_alter_datarequest_device_created_and_more.py +27 -79
  228. edc_export/migrations/0017_alter_datarequest_options_and_more.py +2 -6
  229. edc_export/migrations/0020_remove_datarequesthistory_edc_export__exporte_ba8050_idx_and_more.py +2 -6
  230. edc_export/migrations/0021_alter_datarequest_revision_and_more.py +173 -0
  231. edc_export/model_exporter/model_exporter.py +4 -15
  232. edc_export/model_exporter/object_history_helpers.py +1 -3
  233. edc_export/model_exporter/value_getter.py +5 -14
  234. edc_export/models/signals.py +1 -3
  235. edc_export/models/upload_export_receipt_file.py +1 -3
  236. edc_export/utils.py +1 -4
  237. edc_export/views/export_selected_models_view.py +6 -17
  238. edc_facility/default_definitions.py +1 -3
  239. edc_facility/facility.py +4 -14
  240. edc_facility/import_holidays.py +1 -3
  241. edc_facility/migrations/0005_healthfacility_healthfacilitytypes_and_more.py +4 -6
  242. edc_facility/migrations/0006_alter_healthfacility_health_facility_type.py +1 -1
  243. edc_facility/migrations/0008_alter_healthfacility_device_created_and_more.py +5 -13
  244. edc_facility/migrations/0015_alter_healthfacility_revision_and_more.py +38 -0
  245. edc_facility/models/holiday.py +1 -3
  246. edc_facility/utils.py +1 -3
  247. edc_fieldsets/fieldsets_modeladmin_mixin.py +1 -3
  248. edc_form_describer/form_describer.py +3 -9
  249. edc_form_describer/make_forms_reference.py +1 -3
  250. edc_form_describer/management/commands/make_forms_reference.py +1 -3
  251. edc_form_runners/admin/issue_admin.py +2 -6
  252. edc_form_runners/form_runner.py +4 -13
  253. edc_form_runners/form_runner_by_scr_id.py +1 -3
  254. edc_form_runners/get_form_runner.py +1 -3
  255. edc_form_runners/get_form_runner_by_src_id.py +3 -3
  256. edc_form_runners/management/commands/run_form_runners.py +1 -3
  257. edc_form_runners/migrations/0001_initial.py +2 -4
  258. edc_form_runners/migrations/0004_alter_issue_revision.py +26 -0
  259. edc_form_runners/run_form_runners.py +1 -3
  260. edc_form_runners/utils.py +1 -3
  261. edc_form_validators/applicable_field_validator.py +6 -17
  262. edc_form_validators/base_form_validator.py +1 -3
  263. edc_form_validators/date_range_validator.py +4 -12
  264. edc_form_validators/date_validator.py +3 -9
  265. edc_form_validators/many_to_many_field_validator.py +1 -3
  266. edc_form_validators/other_specify_field_validator.py +3 -7
  267. edc_form_validators/range_field_validator.py +1 -3
  268. edc_form_validators/required_field_validator.py +5 -18
  269. edc_glucose/__init__.py +0 -0
  270. edc_glucose/apps.py +6 -0
  271. edc_glucose/constants.py +3 -0
  272. edc_glucose/fieldsets.py +14 -0
  273. edc_glucose/form_validators/__init__.py +6 -0
  274. edc_glucose/form_validators/fasting_form_validator.py +12 -0
  275. edc_glucose/form_validators/fbg_form_validator_mixin.py +32 -0
  276. edc_glucose/form_validators/fbg_ogtt_form_validator_mixin.py +47 -0
  277. edc_glucose/form_validators/glucose_form_validator.py +44 -0
  278. edc_glucose/form_validators/glucose_form_validator_mixin.py +53 -0
  279. edc_glucose/form_validators/ogtt_form_validator_mixin.py +91 -0
  280. edc_glucose/list_filters.py +42 -0
  281. edc_glucose/migrations/__init__.py +0 -0
  282. edc_glucose/model_mixin_factories/__init__.py +4 -0
  283. edc_glucose/model_mixin_factories/fasting_model_mixin_factory.py +63 -0
  284. edc_glucose/model_mixin_factories/fbg_model_mixin_factory.py +48 -0
  285. edc_glucose/model_mixin_factories/glucose_model_mixin_factory.py +49 -0
  286. edc_glucose/model_mixin_factories/ogtt_model_mixin_factory.py +71 -0
  287. edc_glucose/model_mixins/__init__.py +5 -0
  288. edc_glucose/model_mixins/fasting_model_mixin.py +15 -0
  289. edc_glucose/model_mixins/fbg_model_mixin.py +10 -0
  290. edc_glucose/model_mixins/glucose_model_mixin.py +17 -0
  291. edc_glucose/model_mixins/hba1c_model_mixin.py +42 -0
  292. edc_glucose/model_mixins/ogtt_model_mixin.py +10 -0
  293. edc_glucose/models.py +0 -0
  294. edc_glucose/utils.py +42 -0
  295. edc_identifier/admin_site.py +1 -3
  296. edc_identifier/identifier.py +1 -3
  297. edc_identifier/migrations/0001_initial.py +3 -4
  298. edc_identifier/migrations/0001_squashed_0018_auto_20180128_1054.py +3 -2
  299. edc_identifier/migrations/0005_alter_identifiermodel_managers.py +2 -1
  300. edc_identifier/migrations/0005_historicalidentifierhistory_historicalidentifiertracker_historicalsubjectidentifier.py +4 -5
  301. edc_identifier/migrations/0006_auto_20161127_2226.py +16 -43
  302. edc_identifier/migrations/0007_alter_identifiermodel_device_created_and_more.py +3 -7
  303. edc_identifier/migrations/0007_auto_20161204_2227.py +4 -7
  304. edc_identifier/migrations/0009_auto_20161221_2323.py +1 -0
  305. edc_identifier/migrations/0010_alter_identifiermodel_revision.py +26 -0
  306. edc_identifier/migrations/0010_auto_20170112_0602.py +2 -1
  307. edc_identifier/migrations/0012_auto_20171116_1606.py +2 -1
  308. edc_identifier/migrations/0013_auto_20171230_1316.py +3 -9
  309. edc_identifier/research_identifier.py +3 -11
  310. edc_identifier/short_identifier.py +5 -9
  311. edc_identifier/utils.py +1 -3
  312. edc_lab/admin/modeladmin_mixins.py +2 -8
  313. edc_lab/aliquot_types.py +1 -3
  314. edc_lab/form_validators/requisition_form_validator_mixin.py +1 -3
  315. edc_lab/forms/box_type_form.py +4 -6
  316. edc_lab/lab/aliquot_type.py +2 -6
  317. edc_lab/lab/manifest.py +2 -6
  318. edc_lab/lab/primary_aliquot.py +1 -3
  319. edc_lab/lab/requisition_panel.py +1 -3
  320. edc_lab/lab/requisition_panel_group.py +2 -6
  321. edc_lab/lab/specimen.py +1 -3
  322. edc_lab/labels/aliquot_label.py +4 -6
  323. edc_lab/labels/manifest_label.py +1 -3
  324. edc_lab/migrations/0001_initial.py +12 -29
  325. edc_lab/migrations/0002_auto_20170305_1939.py +4 -12
  326. edc_lab/migrations/0007_auto_20170321_1119.py +2 -6
  327. edc_lab/migrations/0008_auto_20170921_0719.py +2 -1
  328. edc_lab/migrations/0010_auto_20171127_1541.py +3 -2
  329. edc_lab/migrations/0012_auto_20180114_1438.py +2 -1
  330. edc_lab/migrations/0013_auto_20180117_1438.py +2 -1
  331. edc_lab/migrations/0022_auto_20211210_1839.py +1 -0
  332. edc_lab/migrations/0024_alter_manifestitem_managers.py +2 -1
  333. edc_lab/migrations/0027_alter_aliquot_managers_alter_box_managers_and_more.py +1 -1
  334. edc_lab/migrations/0028_alter_aliquot_device_created_and_more.py +43 -127
  335. edc_lab/migrations/0035_alter_aliquot_revision_alter_box_revision_and_more.py +266 -0
  336. edc_lab/model_mixins/aliquot/aliquot_label_mixin.py +1 -3
  337. edc_lab/model_mixins/aliquot/aliquot_model_mixin.py +4 -12
  338. edc_lab/model_mixins/requisition/requisition_identifier_mixin.py +1 -3
  339. edc_lab/model_mixins/shipping/manifest_model_mixin.py +1 -3
  340. edc_lab/models/box_item.py +1 -3
  341. edc_lab/models/box_type.py +1 -3
  342. edc_lab/models/manifest/manifest.py +3 -9
  343. edc_lab/models/manifest/manifest_item.py +1 -3
  344. edc_lab/models/order.py +1 -3
  345. edc_lab/models/signals.py +1 -3
  346. edc_lab/patterns.py +1 -3
  347. edc_lab/pdf_reports/manifest_pdf_report.py +9 -27
  348. edc_lab/post_migrate_signals.py +1 -3
  349. edc_lab/site_labs.py +4 -10
  350. edc_lab_dashboard/migrations/0001_initial.py +1 -1
  351. edc_lab_dashboard/migrations/0002_alter_edcpermissions_device_created_and_more.py +3 -7
  352. edc_lab_dashboard/migrations/0004_alter_edcpermissions_revision.py +26 -0
  353. edc_lab_dashboard/view_mixins/box_view_mixin.py +1 -3
  354. edc_lab_dashboard/view_mixins/manifest_view_mixin.py +4 -12
  355. edc_lab_dashboard/views/action_views/receive_view.py +1 -3
  356. edc_lab_dashboard/views/action_views/verify_box_item_view.py +1 -3
  357. edc_lab_dashboard/views/listboard_filters/aliquot_listboard_view_filters.py +2 -6
  358. edc_lab_dashboard/views/listboard_filters/manifest_listboard_filters.py +1 -3
  359. edc_lab_dashboard/views/listboard_views/base_box_item_listboard_view.py +1 -3
  360. edc_lab_dashboard/views/listboard_views/manifest_listboard_view.py +1 -3
  361. edc_lab_dashboard/views/listboard_views/process_listboard_view.py +2 -6
  362. edc_lab_dashboard/views/listboard_views/receive_listboard_view.py +2 -6
  363. edc_lab_dashboard/views/listboard_views/requisition_listboard_view.py +2 -6
  364. edc_lab_results/action_items.py +1 -3
  365. edc_lab_results/form_validator_mixins/blood_results_fbg_form_validator_mixin.py +2 -4
  366. edc_lab_results/form_validator_mixins/blood_results_form_validator_mixin.py +1 -3
  367. edc_lab_results/get_summary.py +3 -5
  368. edc_lab_results/model_mixin_factories/__init__.py +10 -0
  369. edc_lab_results/{model_mixin_factory → model_mixin_factories}/field_attrs.py +8 -8
  370. edc_lab_results/{model_mixin_factory → model_mixin_factories}/reportable_result_model_mixin_factory.py +2 -0
  371. edc_lab_results/{model_mixin_factory → model_mixin_factories}/result_model_mixin_factory.py +2 -0
  372. edc_lab_results/model_mixins/blood_result_model_mixin.py +2 -5
  373. edc_lab_results/model_mixins/electrolytes_model_mixins.py +1 -1
  374. edc_lab_results/model_mixins/fbc_model_mixins.py +1 -1
  375. edc_lab_results/model_mixins/fbg_model_mixin.py +6 -3
  376. edc_lab_results/model_mixins/glucose_model_mixin.py +2 -2
  377. edc_lab_results/model_mixins/hba1c_model_mixin.py +2 -28
  378. edc_lab_results/model_mixins/insulin_model_mixin.py +5 -11
  379. edc_lab_results/model_mixins/lft_model_mixins.py +1 -1
  380. edc_lab_results/model_mixins/lipid_model_mixins.py +1 -1
  381. edc_lab_results/model_mixins/proteinuria_model_mixin.py +1 -1
  382. edc_lab_results/model_mixins/rft_model_mixins.py +1 -1
  383. edc_label/apps.py +1 -2
  384. edc_label/migrations/0001_initial.py +1 -1
  385. edc_label/migrations/0003_alter_zpllabeltemplates_device_created_and_more.py +3 -7
  386. edc_label/migrations/0006_alter_zpllabeltemplates_revision.py +29 -0
  387. edc_label/printer.py +2 -6
  388. edc_label/printers_mixin.py +1 -3
  389. edc_label/urls.py +1 -3
  390. edc_label/view_mixins.py +1 -3
  391. edc_label/views/print_label_view.py +1 -3
  392. edc_list_data/model_mixins.py +1 -3
  393. edc_list_data/preload_data.py +2 -6
  394. edc_list_data/site_list_data.py +1 -3
  395. edc_listboard/migrations/0001_initial.py +1 -1
  396. edc_listboard/migrations/0003_alter_listboard_device_created_and_more.py +3 -7
  397. edc_listboard/migrations/0006_alter_listboard_revision.py +29 -0
  398. edc_listboard/view_mixins/listboard_filter_view_mixin.py +5 -15
  399. edc_listboard/view_mixins/search_listboard_view_mixin.py +2 -6
  400. edc_listboard/views/listboard_view.py +2 -6
  401. edc_listboard/views/screen/screening_listboard_view.py +1 -3
  402. edc_listboard/views/subject/subject_listboard_view.py +1 -3
  403. edc_locator/forms/subject_locator_form_validator.py +4 -12
  404. edc_locator/migrations/0001_initial.py +3 -2
  405. edc_locator/migrations/0003_auto_20180103_1351.py +2 -1
  406. edc_locator/migrations/0004_auto_20180106_2148.py +2 -1
  407. edc_locator/migrations/0007_auto_20180117_1819.py +2 -1
  408. edc_locator/migrations/0011_auto_20181007_0053.py +1 -1
  409. edc_locator/migrations/0013_auto_20181007_0054.py +2 -3
  410. edc_locator/migrations/0014_auto_20181009_0545.py +1 -0
  411. edc_locator/migrations/0032_alter_subjectlocator_managers.py +1 -1
  412. edc_locator/migrations/0034_alter_historicalsubjectlocator_device_created_and_more.py +5 -13
  413. edc_locator/migrations/0039_alter_historicalsubjectlocator_revision_and_more.py +38 -0
  414. edc_locator/modeladmin_mixins.py +1 -3
  415. edc_locator/view_mixins/subject_locator_view_mixins.py +1 -3
  416. edc_ltfu/admin.py +1 -3
  417. edc_ltfu/forms/ltfu_form.py +1 -3
  418. edc_ltfu/forms/ltfu_form_validator_mixin.py +1 -2
  419. edc_ltfu/modelform_mixins.py +3 -8
  420. edc_metadata/admin/modeladmin_mixins.py +2 -8
  421. edc_metadata/management/commands/validate_entry_status.py +1 -3
  422. edc_metadata/metadata/metadata.py +12 -41
  423. edc_metadata/metadata/metadata_getter.py +2 -9
  424. edc_metadata/metadata/requisition_metadata_getter.py +1 -3
  425. edc_metadata/metadata_handler.py +3 -9
  426. edc_metadata/metadata_helper/metadata_helper_mixin.py +1 -3
  427. edc_metadata/metadata_mixins/source_model_metadata_mixin.py +3 -9
  428. edc_metadata/metadata_refresher.py +3 -9
  429. edc_metadata/metadata_rules/crf/crf_rule_group.py +2 -5
  430. edc_metadata/metadata_rules/persistant_singleton_mixin.py +3 -3
  431. edc_metadata/metadata_rules/requisition/requisition_rule_group.py +1 -2
  432. edc_metadata/metadata_rules/rule_evaluator.py +1 -3
  433. edc_metadata/metadata_rules/rule_group.py +2 -6
  434. edc_metadata/metadata_rules/rule_group_meta_options.py +1 -3
  435. edc_metadata/metadata_updater.py +1 -3
  436. edc_metadata/metadata_wrappers/metadata_wrapper.py +1 -3
  437. edc_metadata/migrations/0001_initial.py +2 -1
  438. edc_metadata/migrations/0002_auto_20161127_2226.py +6 -13
  439. edc_metadata/migrations/0005_auto_20170112_0602.py +2 -1
  440. edc_metadata/migrations/0007_auto_20170810_1032.py +2 -1
  441. edc_metadata/migrations/0009_auto_20180116_1528.py +2 -1
  442. edc_metadata/migrations/0014_auto_20190707_0002.py +1 -1
  443. edc_metadata/migrations/0015_auto_20190709_0009.py +3 -5
  444. edc_metadata/migrations/0021_alter_crfmetadata_managers_and_more.py +1 -1
  445. edc_metadata/migrations/0023_alter_crfmetadata_device_created_and_more.py +5 -13
  446. edc_metadata/migrations/0030_alter_crfmetadata_revision_and_more.py +38 -0
  447. edc_metadata/model_mixins/creates/creates_metadata_model_mixin.py +1 -3
  448. edc_metadata/model_mixins/updates/updates_metadata_model_mixin.py +1 -3
  449. edc_metadata/models/crf_metadata_model_mixin.py +2 -6
  450. edc_metadata/next_form_getter.py +1 -3
  451. edc_metadata/requisition/requisition_metadata_handler.py +3 -2
  452. edc_metadata/requisition/requisition_metadata_updater.py +1 -3
  453. edc_metadata/update_metadata_on_schedule_change.py +7 -14
  454. edc_model/models/fields/initials_field.py +1 -3
  455. edc_model/models/signals.py +1 -3
  456. edc_model/system_checks.py +1 -3
  457. edc_model/validators/duration.py +1 -3
  458. edc_model_admin/admin_site.py +1 -3
  459. edc_model_admin/changelist_buttons/model_admin_changelist_button_mixin.py +4 -12
  460. edc_model_admin/changelist_buttons/model_admin_changelist_model_button_mixin.py +1 -3
  461. edc_model_admin/dashboard/model_admin_crf_dashboard_mixin.py +1 -3
  462. edc_model_admin/dashboard/model_admin_dashboard_mixin.py +1 -3
  463. edc_model_admin/mixins/base_model_admin_redirect_mixin.py +2 -6
  464. edc_model_admin/mixins/inlines/limited_admin_inline_mixin.py +1 -3
  465. edc_model_admin/mixins/model_admin_bypass_default_form_cls_mixin.py +4 -12
  466. edc_model_admin/mixins/model_admin_form_auto_number_mixin.py +2 -6
  467. edc_model_admin/mixins/model_admin_form_instructions_mixin.py +2 -6
  468. edc_model_admin/mixins/model_admin_next_url_redirect_mixin.py +3 -9
  469. edc_model_admin/mixins/model_admin_protect_pii_mixin.py +1 -3
  470. edc_model_admin/mixins/model_admin_redirect_all_to_changelist_mixin.py +2 -6
  471. edc_model_admin/mixins/model_admin_redirect_on_delete_mixin.py +1 -3
  472. edc_model_admin/templatetags/edc_admin_modify.py +3 -9
  473. edc_model_fields/fields/initials_field.py +1 -3
  474. edc_model_form/mixins/inline_model_form_mixin.py +5 -9
  475. edc_model_to_dataframe/model_to_dataframe.py +15 -46
  476. edc_navbar/get_default_navbar.py +1 -3
  477. edc_navbar/migrations/0004_auto_20220825_0451.py +1 -1
  478. edc_navbar/migrations/0006_alter_edcpermissions_device_created_and_more.py +3 -7
  479. edc_navbar/migrations/0008_alter_edcpermissions_revision.py +26 -0
  480. edc_navbar/navbar.py +1 -3
  481. edc_navbar/navbar_item.py +1 -3
  482. edc_navbar/site_navbars.py +2 -6
  483. edc_navbar/templatetags/edc_navbar_extras.py +1 -3
  484. edc_notification/admin_site.py +1 -3
  485. edc_notification/mailing_list_manager.py +5 -15
  486. edc_notification/migrations/0001_initial.py +2 -1
  487. edc_notification/migrations/0008_alter_notification_device_created_and_more.py +3 -7
  488. edc_notification/migrations/0010_alter_notification_revision.py +26 -0
  489. edc_notification/modeladmin_mixins.py +1 -3
  490. edc_notification/models/notification.py +1 -3
  491. edc_notification/models/signals.py +3 -10
  492. edc_notification/notification/model_notification.py +3 -9
  493. edc_notification/notification/notification.py +4 -12
  494. edc_notification/site_notifications.py +5 -14
  495. edc_offstudy/migrations/0001_initial.py +2 -1
  496. edc_offstudy/migrations/0002_auto_20180921_0434.py +4 -3
  497. edc_offstudy/migrations/0008_auto_20191102_0033.py +2 -1
  498. edc_offstudy/migrations/0015_auto_20220925_0032.py +1 -1
  499. edc_offstudy/migrations/0016_auto_20220929_1742.py +1 -0
  500. edc_offstudy/migrations/0018_alter_subjectoffstudy_managers.py +2 -1
  501. edc_offstudy/migrations/0019_alter_historicalsubjectoffstudy_device_created_and_more.py +5 -13
  502. edc_offstudy/migrations/0022_alter_historicalsubjectoffstudy_revision_and_more.py +41 -0
  503. edc_offstudy/model_mixins/offstudy_model_mixin.py +3 -3
  504. edc_offstudy/modelform_mixins/crf/offstudy_crf_modelform_mixin.py +2 -6
  505. edc_offstudy/templatetags/edc_offstudy_extras.py +2 -6
  506. edc_offstudy/utils.py +1 -3
  507. edc_pdf_reports/admin/modeladmin_mixins.py +1 -3
  508. edc_pdf_reports/crf_pdf_report.py +3 -9
  509. edc_pdf_reports/flowables/textbox.py +1 -3
  510. edc_pdf_reports/report.py +6 -18
  511. edc_pdf_reports/utils.py +1 -3
  512. edc_pdf_reports/views/pdf_intermediate_view.py +1 -3
  513. edc_pdf_reports/views/print_pdf_report_view.py +2 -6
  514. edc_pdutils/actions.py +4 -12
  515. edc_pdutils/choices.py +1 -4
  516. edc_pdutils/database.py +1 -3
  517. edc_pdutils/df_exporters/csv_crf_inline_tables_exporter.py +4 -12
  518. edc_pdutils/df_exporters/csv_exporter.py +7 -22
  519. edc_pdutils/df_handlers/crf_df_handler.py +3 -9
  520. edc_pdutils/df_handlers/df_handler.py +1 -3
  521. edc_pdutils/df_handlers/registered_subject_df_handler.py +1 -3
  522. edc_pdutils/management/commands/export_models.py +2 -6
  523. edc_pdutils/migrations/0001_initial.py +6 -9
  524. edc_pdutils/site.py +2 -6
  525. edc_pdutils/site_values_mappings.py +3 -9
  526. edc_pdutils/tables/aliquot.py +2 -9
  527. edc_pdutils/tables/consent.py +2 -6
  528. edc_pdutils/tables/crf.py +4 -12
  529. edc_pdutils/tables/requisition.py +4 -12
  530. edc_pdutils/tables/visit.py +1 -3
  531. edc_pdutils/utils/convert_dates_from_model.py +3 -9
  532. edc_pdutils/utils/convert_numerics_from_model.py +1 -3
  533. edc_pdutils/utils/convert_timedelta_from_model.py +1 -3
  534. edc_pdutils/utils/missing_subject_identifiers.py +1 -3
  535. edc_pharmacy/admin/actions/confirm_stock.py +2 -6
  536. edc_pharmacy/admin/actions/delete_order_items.py +1 -3
  537. edc_pharmacy/admin/actions/delete_receive_items.py +1 -3
  538. edc_pharmacy/admin/actions/print_stock_report.py +1 -3
  539. edc_pharmacy/admin/list_filters.py +5 -17
  540. edc_pharmacy/admin/model_admin_mixin.py +1 -3
  541. edc_pharmacy/admin/prescription/rx_admin.py +2 -6
  542. edc_pharmacy/admin/prescription/rx_refill_admin.py +1 -3
  543. edc_pharmacy/admin/reports/stock_availability_admin.py +1 -5
  544. edc_pharmacy/admin/stock/allocation_admin.py +5 -15
  545. edc_pharmacy/admin/stock/allocation_proxy_admin.py +1 -3
  546. edc_pharmacy/admin/stock/confirmation_admin.py +1 -3
  547. edc_pharmacy/admin/stock/confirmation_at_site_admin.py +4 -12
  548. edc_pharmacy/admin/stock/confirmation_at_site_item_admin.py +5 -17
  549. edc_pharmacy/admin/stock/dispense_admin.py +3 -11
  550. edc_pharmacy/admin/stock/dispense_item_admin.py +4 -14
  551. edc_pharmacy/admin/stock/order_admin.py +1 -3
  552. edc_pharmacy/admin/stock/order_item_admin.py +5 -15
  553. edc_pharmacy/admin/stock/receive_admin.py +4 -12
  554. edc_pharmacy/admin/stock/receive_item_admin.py +4 -12
  555. edc_pharmacy/admin/stock/repack_request_admin.py +2 -6
  556. edc_pharmacy/admin/stock/stock_adjustment_admin.py +1 -3
  557. edc_pharmacy/admin/stock/stock_admin.py +8 -24
  558. edc_pharmacy/admin/stock/stock_proxy_admin.py +1 -5
  559. edc_pharmacy/admin/stock/stock_request_admin.py +5 -4
  560. edc_pharmacy/admin/stock/stock_request_item_admin.py +10 -19
  561. edc_pharmacy/admin/stock/stock_transfer_admin.py +4 -12
  562. edc_pharmacy/admin/stock/stock_transfer_item_admin.py +6 -18
  563. edc_pharmacy/admin/stock/storage_bin_admin.py +3 -11
  564. edc_pharmacy/admin/stock/storage_bin_item_admin.py +4 -14
  565. edc_pharmacy/analytics/dataframes/get_next_scheduled_visit_for_subjects_df.py +1 -1
  566. edc_pharmacy/analytics/dataframes/in_stock_for_subjects_df.py +2 -6
  567. edc_pharmacy/analytics/dataframes/stock_for_subjects.py +1 -3
  568. edc_pharmacy/form_validators/crf/study_medication_form_validator.py +9 -27
  569. edc_pharmacy/forms/stock/container_form.py +2 -6
  570. edc_pharmacy/forms/stock/receive_item_form.py +2 -6
  571. edc_pharmacy/forms/stock/repack_request_form.py +4 -11
  572. edc_pharmacy/forms/stock/stock_request_form.py +1 -0
  573. edc_pharmacy/forms/stock/stock_request_item_form.py +1 -3
  574. edc_pharmacy/labels/draw_bulk_stock_label_code128.py +1 -3
  575. edc_pharmacy/labels/draw_bulk_stock_label_code39.py +3 -9
  576. edc_pharmacy/labels/draw_patient_stock_label_code128.py +1 -3
  577. edc_pharmacy/migrations/0001_initial.py +7 -15
  578. edc_pharmacy/migrations/0005_alter_rx_managers.py +2 -1
  579. edc_pharmacy/migrations/0015_auto_20220913_2139.py +9 -22
  580. edc_pharmacy/migrations/0016_auto_20220929_1742.py +2 -1
  581. edc_pharmacy/migrations/0018_alter_rxrefill_managers.py +1 -1
  582. edc_pharmacy/migrations/0020_alter_box_device_created_alter_box_device_modified_and_more.py +71 -211
  583. edc_pharmacy/migrations/0021_alter_box_options_alter_container_options_and_more.py +1 -1
  584. edc_pharmacy/migrations/0023_remove_rx_edc_pharmac_modifie_986021_idx_and_more.py +1 -3
  585. edc_pharmacy/migrations/0024_allocation_assignment_containerunits_dispense_and_more.py +40 -104
  586. edc_pharmacy/migrations/0031_historicalrepackrequest_task_id_and_more.py +2 -1
  587. edc_pharmacy/migrations/0033_container_display_name_and_more.py +1 -3
  588. edc_pharmacy/migrations/0035_container_max_per_subject_and_more.py +2 -6
  589. edc_pharmacy/migrations/0037_remove_historicalstock_confirmed_at_site_by_and_more.py +2 -6
  590. edc_pharmacy/migrations/0039_remove_dispense_registered_subject_and_more.py +7 -9
  591. edc_pharmacy/migrations/0043_stockproxy_alter_historicallot_lot_no_and_more.py +2 -1
  592. edc_pharmacy/migrations/0049_remove_stocktransferconfirmation_stock_and_more.py +5 -13
  593. edc_pharmacy/migrations/0050_remove_stocktransferconfirmation2_location_and_more.py +2 -6
  594. edc_pharmacy/migrations/0051_alter_historicalstocktransferconfirmationitem_options_and_more.py +2 -1
  595. edc_pharmacy/migrations/0053_alter_location_managers_alter_historicalstock_lot_and_more.py +7 -11
  596. edc_pharmacy/migrations/0057_scanduplicates.py +3 -4
  597. edc_pharmacy/migrations/0058_stockrequestproxy_alter_stockproxy_options.py +2 -1
  598. edc_pharmacy/migrations/0060_alter_container_max_per_subject_and_more.py +8 -14
  599. edc_pharmacy/migrations/0061_alter_historicalstocktransferconfirmation_options_and_more.py +1 -1
  600. edc_pharmacy/migrations/0062_auto_20250312_1433.py +2 -6
  601. edc_pharmacy/migrations/0063_alter_allocation_managers_remove_allocation_site_and_more.py +2 -1
  602. edc_pharmacy/migrations/0065_allocationproxy.py +2 -1
  603. edc_pharmacy/migrations/0068_stockout.py +2 -1
  604. edc_pharmacy/migrations/0076_historicalstockadjustment_stockadjustment.py +5 -8
  605. edc_pharmacy/migrations/0077_historicalstockadjustment_adjustment_datetime_and_more.py +2 -1
  606. edc_pharmacy/migrations/0078_alter_historicalstock_qty_and_more.py +2 -1
  607. edc_pharmacy/migrations/0081_historicalconfirmation_confirmation.py +8 -10
  608. edc_pharmacy/migrations/0084_confirmationatsiteitem_and_more.py +2 -2
  609. edc_pharmacy/migrations/0088_alter_allocation_revision_alter_assignment_revision_and_more.py +794 -0
  610. edc_pharmacy/model_mixins/study_medication_crf_model_mixin.py +3 -9
  611. edc_pharmacy/models/medication/dosage_guideline.py +1 -3
  612. edc_pharmacy/models/medication/formulation.py +1 -3
  613. edc_pharmacy/models/prescription/rx.py +1 -3
  614. edc_pharmacy/models/prescription/rx_refill.py +2 -6
  615. edc_pharmacy/models/signals.py +11 -21
  616. edc_pharmacy/models/stock/allocation.py +3 -9
  617. edc_pharmacy/models/stock/confirmation.py +1 -3
  618. edc_pharmacy/models/stock/confirmation_at_site_item.py +1 -3
  619. edc_pharmacy/models/stock/container.py +1 -3
  620. edc_pharmacy/models/stock/dispense.py +1 -3
  621. edc_pharmacy/models/stock/dispense_item.py +1 -3
  622. edc_pharmacy/models/stock/lot.py +1 -3
  623. edc_pharmacy/models/stock/order_item.py +2 -6
  624. edc_pharmacy/models/stock/product.py +2 -6
  625. edc_pharmacy/models/stock/receive_item.py +4 -12
  626. edc_pharmacy/models/stock/repack_request.py +1 -3
  627. edc_pharmacy/models/stock/stock.py +3 -8
  628. edc_pharmacy/models/stock/stock_request_item.py +4 -4
  629. edc_pharmacy/models/stock/stock_transfer_item.py +1 -3
  630. edc_pharmacy/models/stock/supplier.py +1 -3
  631. edc_pharmacy/models/storage/utils.py +1 -4
  632. edc_pharmacy/pdf_reports/manifest_pdf_report.py +3 -9
  633. edc_pharmacy/pdf_reports/stock_pdf_report.py +6 -11
  634. edc_pharmacy/refill/adjust_previous_end_datetime.py +2 -6
  635. edc_pharmacy/refill/create_next_refill.py +1 -3
  636. edc_pharmacy/refill/create_refill.py +1 -3
  637. edc_pharmacy/refill/refill_creator.py +2 -6
  638. edc_pharmacy/sample_usb_printing/network_printers.py +1 -3
  639. edc_pharmacy/settings.py +3 -9
  640. edc_pharmacy/urls.py +1 -3
  641. edc_pharmacy/utils/allocate_stock.py +1 -3
  642. edc_pharmacy/utils/confirm_stock_at_site.py +3 -5
  643. edc_pharmacy/utils/dispense.py +1 -4
  644. edc_pharmacy/utils/get_unit_qty_out.py +1 -3
  645. edc_pharmacy/utils/process_repack_request.py +1 -3
  646. edc_pharmacy/utils/process_repack_request_queryset.py +1 -3
  647. edc_pharmacy/utils/stock_request/bulk_create_stock_request_items.py +2 -6
  648. edc_pharmacy/utils/stock_request/get_instock_and_nostock_data.py +3 -8
  649. edc_pharmacy/utils/transfer_stock.py +1 -3
  650. edc_pharmacy/utils/update_previous_refill_end_datetime.py +1 -3
  651. edc_pharmacy/views/add_to_storage_bin_view.py +2 -6
  652. edc_pharmacy/views/allocate_to_subject_view.py +7 -21
  653. edc_pharmacy/views/confirm_stock_from_instance_view.py +2 -6
  654. edc_pharmacy/views/confirm_stock_from_queryset_view.py +2 -7
  655. edc_pharmacy/views/confirmation_at_site_view.py +10 -31
  656. edc_pharmacy/views/dispense_view.py +2 -6
  657. edc_pharmacy/views/move_to_storage_bin_view.py +2 -6
  658. edc_pharmacy/views/prepare_and_review_stock_request_view.py +3 -9
  659. edc_pharmacy/views/print_labels_view.py +1 -3
  660. edc_pharmacy/views/print_stock_transfer_manifest_view.py +1 -3
  661. edc_pharmacy/views/transfer_stock_view.py +1 -3
  662. edc_prn/modelform_mixins.py +1 -3
  663. edc_prn/prn.py +2 -6
  664. edc_prn/templatetags/edc_prn_extras.py +4 -8
  665. edc_protocol/research_protocol_config.py +2 -5
  666. edc_protocol_incident/admin/protocol_deviation_violation_admin.py +1 -3
  667. edc_protocol_incident/auth_objects.py +1 -3
  668. edc_protocol_incident/auths.py +1 -3
  669. edc_protocol_incident/form_validators/mixins.py +3 -9
  670. edc_protocol_incident/form_validators/protocol_deviation_violation_form_validator.py +6 -18
  671. edc_protocol_incident/form_validators/protocol_incident_form_validator.py +3 -8
  672. edc_protocol_incident/migrations/0001_initial.py +4 -3
  673. edc_protocol_incident/migrations/0001_squashed_0015_auto_20220927_0401.py +7 -12
  674. edc_protocol_incident/migrations/0005_protocolincident_historicalprotocolincident_and_more.py +4 -3
  675. edc_protocol_incident/migrations/0012_auto_20220913_2139.py +3 -9
  676. edc_protocol_incident/migrations/0020_alter_historicalprotocoldeviationviolation_device_created_and_more.py +9 -25
  677. edc_protocol_incident/migrations/0023_alter_historicalprotocoldeviationviolation_revision_and_more.py +65 -0
  678. edc_protocol_incident/model_mixins/protocol_deviation_violation_model_mixin.py +3 -7
  679. edc_protocol_incident/model_mixins/protocol_incident_model_mixin.py +1 -3
  680. edc_protocol_incident/urls.py +1 -3
  681. edc_pylabels/actions.py +2 -6
  682. edc_pylabels/admin/label_configuration_admin.py +4 -4
  683. edc_pylabels/drawing_callable_example.py +1 -3
  684. edc_pylabels/migrations/0001_initial.py +1 -3
  685. edc_pylabels/migrations/0002_alter_label_options_label_created_and_more.py +2 -6
  686. edc_pylabels/migrations/0005_labelconfiguration_delete_label_and_more.py +1 -3
  687. edc_pylabels/migrations/0012_alter_labelconfiguration_revision.py +26 -0
  688. edc_pylabels/models/label_configuration.py +1 -3
  689. edc_qareports/migrations/0001_initial.py +3 -4
  690. edc_qareports/migrations/0005_edcpermissions.py +2 -4
  691. edc_qareports/migrations/0006_qareportlog.py +2 -1
  692. edc_qareports/migrations/0007_qareportlog_edc_qarepor_accesse_738ffe_idx.py +1 -3
  693. edc_qareports/migrations/0017_auto_20240816_0256.py +1 -0
  694. edc_qareports/migrations/0018_alter_edcpermissions_revision_alter_note_revision.py +38 -0
  695. edc_qareports/model_mixins/note_model_mixin.py +1 -3
  696. edc_qareports/modeladmin_mixins/list_filters.py +8 -12
  697. edc_qareports/modeladmin_mixins/note_modeladmin_mixin.py +1 -3
  698. edc_qareports/modeladmin_mixins/on_study_missing_values_modeladmin_mixin.py +2 -6
  699. edc_qareports/modeladmin_mixins/qa_report_modeladmin_mixin.py +1 -3
  700. edc_qareports/sql_generator/crf_case.py +1 -5
  701. edc_qareports/sql_generator/sql_view_generator.py +1 -3
  702. edc_qareports/utils.py +4 -7
  703. edc_randomization/admin.py +1 -3
  704. edc_randomization/auths.py +2 -6
  705. edc_randomization/blinding.py +1 -3
  706. edc_randomization/migrations/0001_initial.py +3 -4
  707. edc_randomization/migrations/0009_edcpermissions.py +1 -1
  708. edc_randomization/migrations/0011_alter_edcpermissions_device_created_and_more.py +7 -19
  709. edc_randomization/migrations/0013_alter_edcpermissions_revision_and_more.py +50 -0
  710. edc_randomization/model_mixins.py +2 -5
  711. edc_randomization/randomization_list_importer.py +3 -7
  712. edc_randomization/randomization_list_verifier.py +2 -7
  713. edc_randomization/randomizer.py +4 -7
  714. edc_randomization/site_randomizers.py +1 -3
  715. edc_randomization/system_checks.py +1 -3
  716. edc_randomization/utils.py +2 -6
  717. edc_refusal/admin.py +1 -3
  718. edc_refusal/forms.py +1 -2
  719. edc_refusal/migrations/0001_initial.py +2 -1
  720. edc_refusal/migrations/0002_historicalsubjectrefusal.py +6 -4
  721. edc_refusal/migrations/0004_refusalreasons_plural_name.py +1 -3
  722. edc_refusal/migrations/0005_alter_subjectrefusal_options_and_more.py +2 -1
  723. edc_refusal/migrations/0006_alter_subjectrefusal_managers.py +2 -1
  724. edc_refusal/migrations/0008_alter_historicalsubjectrefusal_device_created_and_more.py +5 -13
  725. edc_refusal/migrations/0011_alter_historicalsubjectrefusal_revision_and_more.py +38 -0
  726. edc_registration/admin_site.py +1 -3
  727. edc_registration/migrations/0001_initial.py +3 -4
  728. edc_registration/migrations/0002_auto_20161127_2226.py +4 -7
  729. edc_registration/migrations/0004_auto_20161221_0018.py +2 -1
  730. edc_registration/migrations/0005_auto_20170111_1809.py +2 -1
  731. edc_registration/migrations/0008_auto_20170810_1032.py +2 -1
  732. edc_registration/migrations/0012_auto_20180116_1528.py +2 -1
  733. edc_registration/migrations/0015_auto_20181006_2257.py +1 -1
  734. edc_registration/migrations/0016_historicalregisteredsubject.py +5 -6
  735. edc_registration/migrations/0026_historicalregisteredsubject_familiar_name_and_more.py +1 -1
  736. edc_registration/migrations/0028_alter_registeredsubject_managers.py +1 -1
  737. edc_registration/migrations/0029_alter_historicalregisteredsubject_device_created_and_more.py +5 -13
  738. edc_registration/migrations/0032_alter_historicalregisteredsubject_revision_and_more.py +38 -0
  739. edc_registration/modeladmin_mixins.py +1 -3
  740. edc_registration/models/registered_subject.py +4 -11
  741. edc_registration/utils.py +1 -3
  742. edc_reportable/admin_site.py +1 -3
  743. edc_reportable/data/normal_data/africa.py +4 -14
  744. edc_reportable/evaluator.py +2 -6
  745. edc_reportable/forms/reportables_form_validator_mixin.py +5 -4
  746. edc_reportable/formula.py +2 -6
  747. edc_reportable/management/commands/export_reportables.py +1 -3
  748. edc_reportable/migrations/0001_initial.py +3 -9
  749. edc_reportable/migrations/0003_referencerangecollection_grade1_and_more.py +3 -9
  750. edc_reportable/migrations/0004_alter_referencerangecollection_grade3_and_more.py +4 -7
  751. edc_reportable/migrations/0006_alter_gradingdata_revision_and_more.py +370 -0
  752. edc_reportable/models/mw.py +1 -3
  753. edc_reportable/models/reference_model_mixins.py +1 -3
  754. edc_reportable/models/reference_range_collection.py +3 -9
  755. edc_reportable/post_migrate_signals.py +1 -3
  756. edc_reportable/reference_range_evaluator.py +4 -11
  757. edc_reportable/utils/convert_units.py +3 -4
  758. edc_reportable/utils/get_grade_for_value.py +3 -1
  759. edc_reportable/utils/get_reference_range_collection.py +2 -2
  760. edc_reportable/utils/load_data.py +1 -3
  761. edc_reportable/utils/molecular_weight_model_cls.py +1 -1
  762. edc_reportable/utils/update_grading_data.py +2 -6
  763. edc_review_dashboard/migrations/0001_initial.py +1 -1
  764. edc_review_dashboard/migrations/0003_alter_edcpermissions_device_created_and_more.py +3 -7
  765. edc_review_dashboard/migrations/0005_alter_edcpermissions_revision.py +26 -0
  766. edc_review_dashboard/views/subject_review_listboard_view.py +1 -3
  767. edc_screening/eligibility.py +1 -3
  768. edc_screening/fc.py +1 -3
  769. edc_screening/migrations/0001_initial.py +1 -1
  770. edc_screening/migrations/0002_alter_edcpermissions_device_created_and_more.py +3 -7
  771. edc_screening/migrations/0004_alter_edcpermissions_revision.py +26 -0
  772. edc_screening/model_mixins/eligibility_model_mixin.py +1 -3
  773. edc_screening/model_mixins/screening_fields_model_mixin.py +2 -0
  774. edc_screening/modelform_mixins.py +1 -3
  775. edc_screening/screening_eligibility.py +1 -0
  776. edc_search/search_slug.py +2 -6
  777. edc_search/updater.py +2 -5
  778. edc_sites/admin/site_model_admin_mixin.py +4 -12
  779. edc_sites/management/commands/sync_sites.py +1 -3
  780. edc_sites/migrations/0007_edcpermissions.py +2 -4
  781. edc_sites/migrations/0009_alter_edcpermissions_revision.py +26 -0
  782. edc_sites/single_site/get_languages.py +1 -3
  783. edc_sites/single_site/single_site.py +1 -1
  784. edc_sites/site.py +6 -12
  785. edc_sites/system_checks.py +1 -4
  786. edc_sites/utils/add_or_update_django_sites.py +2 -4
  787. edc_subject_dashboard/migrations/0001_initial.py +1 -1
  788. edc_subject_dashboard/migrations/0002_alter_edcpermissions_device_created_and_more.py +3 -7
  789. edc_subject_dashboard/migrations/0004_alter_edcpermissions_revision.py +26 -0
  790. edc_subject_dashboard/requisition_labels.py +1 -3
  791. edc_subject_dashboard/requisition_report.py +5 -15
  792. edc_subject_dashboard/requisition_verifier.py +2 -7
  793. edc_subject_dashboard/templatetags/edc_subject_dashboard_extras.py +2 -6
  794. edc_subject_dashboard/view_mixins/subject_visit_view_mixin.py +1 -2
  795. edc_subject_dashboard/view_utils/crf_button.py +1 -3
  796. edc_subject_dashboard/view_utils/subject_consent_listboard_button.py +1 -3
  797. edc_subject_dashboard/view_utils/timepoint_status_button.py +1 -3
  798. edc_subject_dashboard/views/requisition_print_actions_view.py +4 -12
  799. edc_subject_dashboard/views/requisition_verify_actions_view.py +1 -3
  800. edc_subject_dashboard/views/subject_dashboard_view.py +1 -3
  801. edc_timepoint/apps.py +1 -3
  802. edc_timepoint/timepoint.py +1 -3
  803. edc_timepoint/timepoint_lookup.py +1 -3
  804. edc_transfer/form_validators.py +4 -6
  805. edc_transfer/model_mixins.py +1 -3
  806. edc_transfer/modelform_mixins.py +1 -3
  807. edc_unblinding/action_items.py +1 -3
  808. edc_unblinding/admin_site.py +1 -3
  809. edc_unblinding/migrations/0001_initial.py +6 -4
  810. edc_unblinding/migrations/0002_auto_20210908_2318.py +1 -1
  811. edc_unblinding/migrations/0009_alter_unblindingrequest_managers_and_more.py +2 -1
  812. edc_unblinding/migrations/0010_alter_historicalunblindingrequest_device_created_and_more.py +9 -25
  813. edc_unblinding/migrations/0013_alter_historicalunblindingrequest_revision_and_more.py +62 -0
  814. edc_unblinding/models/unblinding_request.py +1 -3
  815. edc_unblinding/models/unblinding_review.py +1 -3
  816. edc_utils/age.py +1 -3
  817. edc_utils/date.py +1 -3
  818. edc_utils/paths_for_urlpatterns.py +1 -3
  819. edc_utils/show_urls.py +1 -3
  820. edc_utils/text.py +1 -2
  821. edc_view_utils/model_button.py +5 -13
  822. edc_view_utils/query_button.py +1 -3
  823. edc_visit_schedule/admin/subject_schedule_history_admin.py +1 -3
  824. edc_visit_schedule/baseline.py +1 -3
  825. edc_visit_schedule/migrations/0001_initial.py +3 -4
  826. edc_visit_schedule/migrations/0003_historicalvisitschedule_visitschedule.py +1 -3
  827. edc_visit_schedule/migrations/0004_auto_20190629_1800.py +1 -3
  828. edc_visit_schedule/migrations/0011_alter_historicalvisitschedule_device_created_and_more.py +7 -19
  829. edc_visit_schedule/migrations/0012_alter_subjectschedulehistory_managers_and_more.py +2 -1
  830. edc_visit_schedule/migrations/0015_historicalonschedule_offschedule_onschedule.py +9 -13
  831. edc_visit_schedule/migrations/0017_alter_onschedule_managers.py +2 -1
  832. edc_visit_schedule/migrations/0018_alter_historicalonschedule_revision_and_more.py +86 -0
  833. edc_visit_schedule/model_mixins/crf/crf_schedule_model_mixin.py +1 -1
  834. edc_visit_schedule/model_mixins/off_schedule_model_mixin.py +2 -6
  835. edc_visit_schedule/model_mixins/on_schedule_model_mixin.py +1 -3
  836. edc_visit_schedule/modelform_mixins/off_schedule_modelform_mixin.py +1 -3
  837. edc_visit_schedule/models/subject_schedule_history.py +3 -8
  838. edc_visit_schedule/ordered_collection.py +1 -3
  839. edc_visit_schedule/schedule/schedule.py +10 -20
  840. edc_visit_schedule/simple_model_validator.py +3 -8
  841. edc_visit_schedule/site_visit_schedules.py +6 -16
  842. edc_visit_schedule/subject_schedule.py +6 -17
  843. edc_visit_schedule/system_checks.py +1 -3
  844. edc_visit_schedule/utils.py +8 -17
  845. edc_visit_schedule/view_mixins.py +4 -10
  846. edc_visit_schedule/visit/crf.py +1 -2
  847. edc_visit_schedule/visit/requisition.py +1 -3
  848. edc_visit_schedule/visit/visit.py +6 -16
  849. edc_visit_schedule/visit/window_period.py +3 -3
  850. edc_visit_schedule/visit_schedule/visit_schedule.py +2 -5
  851. edc_visit_tracking/crf_date_validator.py +1 -2
  852. edc_visit_tracking/form_validators/visit_form_validator.py +2 -8
  853. edc_visit_tracking/form_validators/visit_missed_form_validator.py +3 -9
  854. edc_visit_tracking/migrations/0003_auto_20220913_2139.py +2 -6
  855. edc_visit_tracking/migrations/0004_subjectvisit_subjectvisitmissedreasons_extra_value_and_more.py +8 -16
  856. edc_visit_tracking/migrations/0008_alter_historicalsubjectvisit_revision_and_more.py +65 -0
  857. edc_visit_tracking/model_mixins/base/visit_methods_model_mixin.py +2 -6
  858. edc_visit_tracking/model_mixins/crfs/visit_tracking_crf_model_mixin.py +1 -3
  859. edc_visit_tracking/model_mixins/requisitions/visit_tracking_requisition_model_mixin.py +1 -3
  860. edc_visit_tracking/model_mixins/subject_visit_missed_model_mixin.py +1 -3
  861. edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_fields_mixin.py +1 -2
  862. edc_visit_tracking/modeladmin_mixins/crf_model_admin_mixin.py +4 -8
  863. edc_visit_tracking/modeladmin_mixins/visit_model_admin_mixin.py +4 -6
  864. edc_visit_tracking/modelform_mixins/crf/visit_tracking_crf_modelform_mixin.py +2 -6
  865. edc_visit_tracking/modelform_mixins/utils.py +1 -3
  866. edc_visit_tracking/modelform_mixins/visit_tracking_modelform_mixin.py +1 -2
  867. edc_visit_tracking/models/signals.py +1 -3
  868. edc_visit_tracking/stubs.py +1 -3
  869. edc_visit_tracking/utils.py +1 -2
  870. edc_visit_tracking/view_utils/related_visit_button.py +1 -3
  871. edc_visit_tracking/visit_sequence.py +1 -3
  872. edc_vitals/__init__.py +2 -0
  873. edc_vitals/apps.py +6 -0
  874. edc_vitals/calculators/__init__.py +1 -0
  875. edc_vitals/calculators/bmi.py +70 -0
  876. edc_vitals/form_validators/__init__.py +5 -0
  877. edc_vitals/form_validators/blood_pressure_form_validator_mixin.py +40 -0
  878. edc_vitals/form_validators/bmi_form_validator_mixin.py +19 -0
  879. edc_vitals/form_validators/weight_height_with_bmi_form_validator_mixin.py +13 -0
  880. edc_vitals/migrations/__init__.py +0 -0
  881. edc_vitals/model_mixins/__init__.py +5 -0
  882. edc_vitals/model_mixins/blood_pressure_model_mixin.py +80 -0
  883. edc_vitals/model_mixins/weight_height_bmi_model_mixin.py +42 -0
  884. edc_vitals/models/__init__.py +10 -0
  885. edc_vitals/models/fields/__init__.py +7 -0
  886. edc_vitals/models/fields/blood_pressure.py +36 -0
  887. edc_vitals/models/fields/heart_rate.py +22 -0
  888. edc_vitals/models/fields/height.py +26 -0
  889. edc_vitals/models/fields/respiratory_rate.py +22 -0
  890. edc_vitals/models/fields/temperature.py +26 -0
  891. edc_vitals/models/fields/waist_circumference.py +23 -0
  892. edc_vitals/models/fields/weight.py +26 -0
  893. edc_vitals/utils.py +51 -0
  894. edc_vitals/validators.py +5 -0
  895. edc_lab_results/model_mixin_factory/__init__.py +0 -2
  896. {clinicedc-2.0.0.dist-info → clinicedc-2.0.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,266 @@
1
+ # Generated by Django 5.2.4 on 2025-09-10 03:24
2
+
3
+ import django_revision.revision_field
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("edc_lab", "0034_alter_aliquot_site_alter_box_site_and_more"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="aliquot",
16
+ name="revision",
17
+ field=django_revision.revision_field.RevisionField(
18
+ blank=True,
19
+ editable=False,
20
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
21
+ max_length=75,
22
+ null=True,
23
+ verbose_name="Revision",
24
+ ),
25
+ ),
26
+ migrations.AlterField(
27
+ model_name="box",
28
+ name="revision",
29
+ field=django_revision.revision_field.RevisionField(
30
+ blank=True,
31
+ editable=False,
32
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
33
+ max_length=75,
34
+ null=True,
35
+ verbose_name="Revision",
36
+ ),
37
+ ),
38
+ migrations.AlterField(
39
+ model_name="boxitem",
40
+ name="revision",
41
+ field=django_revision.revision_field.RevisionField(
42
+ blank=True,
43
+ editable=False,
44
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
45
+ max_length=75,
46
+ null=True,
47
+ verbose_name="Revision",
48
+ ),
49
+ ),
50
+ migrations.AlterField(
51
+ model_name="boxtype",
52
+ name="revision",
53
+ field=django_revision.revision_field.RevisionField(
54
+ blank=True,
55
+ editable=False,
56
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
57
+ max_length=75,
58
+ null=True,
59
+ verbose_name="Revision",
60
+ ),
61
+ ),
62
+ migrations.AlterField(
63
+ model_name="consignee",
64
+ name="revision",
65
+ field=django_revision.revision_field.RevisionField(
66
+ blank=True,
67
+ editable=False,
68
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
69
+ max_length=75,
70
+ null=True,
71
+ verbose_name="Revision",
72
+ ),
73
+ ),
74
+ migrations.AlterField(
75
+ model_name="historicalaliquot",
76
+ name="revision",
77
+ field=django_revision.revision_field.RevisionField(
78
+ blank=True,
79
+ editable=False,
80
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
81
+ max_length=75,
82
+ null=True,
83
+ verbose_name="Revision",
84
+ ),
85
+ ),
86
+ migrations.AlterField(
87
+ model_name="historicalbox",
88
+ name="revision",
89
+ field=django_revision.revision_field.RevisionField(
90
+ blank=True,
91
+ editable=False,
92
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
93
+ max_length=75,
94
+ null=True,
95
+ verbose_name="Revision",
96
+ ),
97
+ ),
98
+ migrations.AlterField(
99
+ model_name="historicalboxitem",
100
+ name="revision",
101
+ field=django_revision.revision_field.RevisionField(
102
+ blank=True,
103
+ editable=False,
104
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
105
+ max_length=75,
106
+ null=True,
107
+ verbose_name="Revision",
108
+ ),
109
+ ),
110
+ migrations.AlterField(
111
+ model_name="historicalconsignee",
112
+ name="revision",
113
+ field=django_revision.revision_field.RevisionField(
114
+ blank=True,
115
+ editable=False,
116
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
117
+ max_length=75,
118
+ null=True,
119
+ verbose_name="Revision",
120
+ ),
121
+ ),
122
+ migrations.AlterField(
123
+ model_name="historicalmanifest",
124
+ name="revision",
125
+ field=django_revision.revision_field.RevisionField(
126
+ blank=True,
127
+ editable=False,
128
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
129
+ max_length=75,
130
+ null=True,
131
+ verbose_name="Revision",
132
+ ),
133
+ ),
134
+ migrations.AlterField(
135
+ model_name="historicalorder",
136
+ name="revision",
137
+ field=django_revision.revision_field.RevisionField(
138
+ blank=True,
139
+ editable=False,
140
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
141
+ max_length=75,
142
+ null=True,
143
+ verbose_name="Revision",
144
+ ),
145
+ ),
146
+ migrations.AlterField(
147
+ model_name="historicalresult",
148
+ name="revision",
149
+ field=django_revision.revision_field.RevisionField(
150
+ blank=True,
151
+ editable=False,
152
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
153
+ max_length=75,
154
+ null=True,
155
+ verbose_name="Revision",
156
+ ),
157
+ ),
158
+ migrations.AlterField(
159
+ model_name="historicalresultitem",
160
+ name="revision",
161
+ field=django_revision.revision_field.RevisionField(
162
+ blank=True,
163
+ editable=False,
164
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
165
+ max_length=75,
166
+ null=True,
167
+ verbose_name="Revision",
168
+ ),
169
+ ),
170
+ migrations.AlterField(
171
+ model_name="historicalshipper",
172
+ name="revision",
173
+ field=django_revision.revision_field.RevisionField(
174
+ blank=True,
175
+ editable=False,
176
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
177
+ max_length=75,
178
+ null=True,
179
+ verbose_name="Revision",
180
+ ),
181
+ ),
182
+ migrations.AlterField(
183
+ model_name="manifest",
184
+ name="revision",
185
+ field=django_revision.revision_field.RevisionField(
186
+ blank=True,
187
+ editable=False,
188
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
189
+ max_length=75,
190
+ null=True,
191
+ verbose_name="Revision",
192
+ ),
193
+ ),
194
+ migrations.AlterField(
195
+ model_name="manifestitem",
196
+ name="revision",
197
+ field=django_revision.revision_field.RevisionField(
198
+ blank=True,
199
+ editable=False,
200
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
201
+ max_length=75,
202
+ null=True,
203
+ verbose_name="Revision",
204
+ ),
205
+ ),
206
+ migrations.AlterField(
207
+ model_name="order",
208
+ name="revision",
209
+ field=django_revision.revision_field.RevisionField(
210
+ blank=True,
211
+ editable=False,
212
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
213
+ max_length=75,
214
+ null=True,
215
+ verbose_name="Revision",
216
+ ),
217
+ ),
218
+ migrations.AlterField(
219
+ model_name="panel",
220
+ name="revision",
221
+ field=django_revision.revision_field.RevisionField(
222
+ blank=True,
223
+ editable=False,
224
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
225
+ max_length=75,
226
+ null=True,
227
+ verbose_name="Revision",
228
+ ),
229
+ ),
230
+ migrations.AlterField(
231
+ model_name="result",
232
+ name="revision",
233
+ field=django_revision.revision_field.RevisionField(
234
+ blank=True,
235
+ editable=False,
236
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
237
+ max_length=75,
238
+ null=True,
239
+ verbose_name="Revision",
240
+ ),
241
+ ),
242
+ migrations.AlterField(
243
+ model_name="resultitem",
244
+ name="revision",
245
+ field=django_revision.revision_field.RevisionField(
246
+ blank=True,
247
+ editable=False,
248
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
249
+ max_length=75,
250
+ null=True,
251
+ verbose_name="Revision",
252
+ ),
253
+ ),
254
+ migrations.AlterField(
255
+ model_name="shipper",
256
+ name="revision",
257
+ field=django_revision.revision_field.RevisionField(
258
+ blank=True,
259
+ editable=False,
260
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
261
+ max_length=75,
262
+ null=True,
263
+ verbose_name="Revision",
264
+ ),
265
+ ),
266
+ ]
@@ -7,9 +7,7 @@ class AliquotLabelMixin:
7
7
  @property
8
8
  def requisition(self: Any):
9
9
  model = django_apps.get_model(*self.receive.requisition_model_name)
10
- return model.objects.get(
11
- requisition_identifier=self.receive.requisition_identifier
12
- )
10
+ return model.objects.get(requisition_identifier=self.receive.requisition_identifier)
13
11
 
14
12
  def label_context(self: Any, extra_context=None):
15
13
  label_context = {}
@@ -34,25 +34,17 @@ class AliquotModelMixin(SiteModelMixin, models.Model):
34
34
  editable=False, default=1, help_text="e.g. number of tubes"
35
35
  )
36
36
 
37
- original_measure = models.DecimalField(
38
- max_digits=10, decimal_places=2, default="5.00"
39
- )
37
+ original_measure = models.DecimalField(max_digits=10, decimal_places=2, default="5.00")
40
38
 
41
- current_measure = models.DecimalField(
42
- max_digits=10, decimal_places=2, default="5.00"
43
- )
39
+ current_measure = models.DecimalField(max_digits=10, decimal_places=2, default="5.00")
44
40
 
45
41
  measure_units = models.CharField(
46
42
  max_length=25, choices=SPECIMEN_MEASURE_UNITS, default="mL"
47
43
  )
48
44
 
49
- status = models.CharField(
50
- max_length=25, choices=ALIQUOT_STATUS, default="available"
51
- )
45
+ status = models.CharField(max_length=25, choices=ALIQUOT_STATUS, default="available")
52
46
 
53
- condition = models.CharField(
54
- max_length=25, choices=ALIQUOT_CONDITIONS, default="10"
55
- )
47
+ condition = models.CharField(max_length=25, choices=ALIQUOT_CONDITIONS, default="10")
56
48
 
57
49
  comment = models.CharField(max_length=50, null=True, blank=True)
58
50
 
@@ -16,9 +16,7 @@ class RequisitionIdentifierMixin(models.Model):
16
16
  verbose_name="Requisition Id", max_length=50, unique=True
17
17
  )
18
18
 
19
- identifier_prefix = models.CharField(
20
- max_length=50, null=True, editable=False, unique=True
21
- )
19
+ identifier_prefix = models.CharField(max_length=50, null=True, editable=False, unique=True)
22
20
 
23
21
  primary_aliquot_identifier = models.CharField(
24
22
  max_length=18, null=True, editable=False, unique=True
@@ -32,9 +32,7 @@ class ManifestModelMixin(SiteModelMixin, models.Model):
32
32
 
33
33
  status = models.CharField(max_length=15, default=OPEN, choices=STATUS)
34
34
 
35
- category = models.CharField(
36
- max_length=25, default=TESTING, choices=MANIFEST_CATEGORY
37
- )
35
+ category = models.CharField(max_length=25, default=TESTING, choices=MANIFEST_CATEGORY)
38
36
 
39
37
  category_other = models.CharField(max_length=25, null=True, blank=True)
40
38
 
@@ -45,9 +45,7 @@ class BoxItem(SearchSlugModelMixin, VerifyModelMixin, BaseUuidModel):
45
45
  if self.identifier:
46
46
  x = self.identifier
47
47
  if re.match(aliquot_pattern, self.identifier):
48
- return "{}-{}-{}-{}-{}".format(
49
- x[0:3], x[3:6], x[6:10], x[10:14], x[14:18]
50
- )
48
+ return "{}-{}-{}-{}-{}".format(x[0:3], x[3:6], x[6:10], x[10:14], x[14:18])
51
49
  return self.identifier
52
50
 
53
51
  def get_slugs(self):
@@ -28,9 +28,7 @@ class BoxType(BaseUuidModel):
28
28
 
29
29
  total = models.IntegerField(help_text="total number of cells in this box type")
30
30
 
31
- fill_order = models.CharField(
32
- max_length=15, default=FILL_ACROSS, choices=FILL_ORDER
33
- )
31
+ fill_order = models.CharField(max_length=15, default=FILL_ACROSS, choices=FILL_ORDER)
34
32
 
35
33
  objects = BoxTypeManager()
36
34
 
@@ -17,9 +17,7 @@ class Manager(ManifestManager, SearchSlugManager):
17
17
  pass
18
18
 
19
19
 
20
- class Manifest(
21
- ManifestModelMixin, PdfReportModelMixin, SearchSlugModelMixin, BaseUuidModel
22
- ):
20
+ class Manifest(ManifestModelMixin, PdfReportModelMixin, SearchSlugModelMixin, BaseUuidModel):
23
21
  pdf_report_cls = ManifestPdfReport
24
22
 
25
23
  def get_search_slug_fields(self):
@@ -30,13 +28,9 @@ class Manifest(
30
28
  "consignee.name",
31
29
  ]
32
30
 
33
- consignee = models.ForeignKey(
34
- Consignee, verbose_name="Consignee", on_delete=PROTECT
35
- )
31
+ consignee = models.ForeignKey(Consignee, verbose_name="Consignee", on_delete=PROTECT)
36
32
 
37
- shipper = models.ForeignKey(
38
- Shipper, verbose_name="Shipper/Exporter", on_delete=PROTECT
39
- )
33
+ shipper = models.ForeignKey(Shipper, verbose_name="Shipper/Exporter", on_delete=PROTECT)
40
34
 
41
35
  objects = Manager()
42
36
 
@@ -15,9 +15,7 @@ class ManifestItemManager(SearchSlugManager, models.Manager):
15
15
  return self.get(identifier=identifier, manifest_identifier=manifest_identifier)
16
16
 
17
17
 
18
- class ManifestItem(
19
- SiteModelMixin, SearchSlugModelMixin, VerifyModelMixin, BaseUuidModel
20
- ):
18
+ class ManifestItem(SiteModelMixin, SearchSlugModelMixin, VerifyModelMixin, BaseUuidModel):
21
19
  def get_search_slug_fields(self):
22
20
  return ["identifier", "human_readable_identifier"]
23
21
 
edc_lab/models/order.py CHANGED
@@ -25,9 +25,7 @@ class Order(SiteModelMixin, BaseUuidModel):
25
25
 
26
26
  order_identifier = models.CharField(max_length=25, editable=False, unique=True)
27
27
 
28
- order_datetime = models.DateTimeField(
29
- default=get_utcnow, validators=[datetime_not_future]
30
- )
28
+ order_datetime = models.DateTimeField(default=get_utcnow, validators=[datetime_not_future])
31
29
 
32
30
  panel_name = models.CharField(max_length=25)
33
31
 
edc_lab/models/signals.py CHANGED
@@ -24,8 +24,6 @@ def manifest_item_on_post_delete(sender, instance, using, **kwargs):
24
24
  box.save()
25
25
 
26
26
 
27
- @receiver(
28
- post_delete, weak=False, sender=BoxItem, dispatch_uid="box_item_on_post_delete"
29
- )
27
+ @receiver(post_delete, weak=False, sender=BoxItem, dispatch_uid="box_item_on_post_delete")
30
28
  def box_item_on_post_delete(sender, instance, using, **kwargs):
31
29
  instance.box.save()
edc_lab/patterns.py CHANGED
@@ -1,4 +1,2 @@
1
- aliquot_human_readable_pattern = (
2
- r"^[0-9]{3}\-[0-9A-Z]{3}\-[0-9A-Z]{4}\-[0-9]{4}\-[0-9]{4}$"
3
- )
1
+ aliquot_human_readable_pattern = r"^[0-9]{3}\-[0-9A-Z]{3}\-[0-9A-Z]{4}\-[0-9]{4}\-[0-9]{4}$"
4
2
  aliquot_pattern = r"^[0-9]{3}[0-9A-Z]{3}[0-9A-Z]{4}[0-9]{4}[0-9]{4}$"
@@ -83,9 +83,7 @@ class ManifestPdfReport(Report):
83
83
 
84
84
  story.append(
85
85
  Paragraph(
86
- "SPECIMEN MANIFEST{}".format(
87
- " (reprint)" if self.manifest.printed else ""
88
- ),
86
+ "SPECIMEN MANIFEST{}".format(" (reprint)" if self.manifest.printed else ""),
89
87
  self.styles["line_label_center"],
90
88
  )
91
89
  )
@@ -159,9 +157,7 @@ class ManifestPdfReport(Report):
159
157
  "SHIPPER/EXPORTER (complete name and address)",
160
158
  self.styles["line_label"],
161
159
  ),
162
- Paragraph(
163
- "CONSIGNEE (complete name and address)", self.styles["line_label"]
164
- ),
160
+ Paragraph("CONSIGNEE (complete name and address)", self.styles["line_label"]),
165
161
  ],
166
162
  [
167
163
  Paragraph(
@@ -197,16 +193,12 @@ class ManifestPdfReport(Report):
197
193
  ),
198
194
  ],
199
195
  [
200
- Paragraph(
201
- self.manifest.shipper.country, self.styles["line_data_largest"]
202
- ),
196
+ Paragraph(self.manifest.shipper.country, self.styles["line_data_largest"]),
203
197
  Paragraph(self.description, self.styles["line_data_large"]),
204
198
  ],
205
199
  [Paragraph("COUNTRY OF ORIGIN", self.styles["line_label"]), ""],
206
200
  [
207
- Paragraph(
208
- self.manifest.shipper.country, self.styles["line_data_largest"]
209
- ),
201
+ Paragraph(self.manifest.shipper.country, self.styles["line_data_largest"]),
210
202
  "",
211
203
  ],
212
204
  [
@@ -214,9 +206,7 @@ class ManifestPdfReport(Report):
214
206
  "",
215
207
  ],
216
208
  [
217
- Paragraph(
218
- self.manifest.consignee.country, self.styles["line_data_largest"]
219
- ),
209
+ Paragraph(self.manifest.consignee.country, self.styles["line_data_largest"]),
220
210
  "",
221
211
  ],
222
212
  ]
@@ -355,9 +345,7 @@ class ManifestPdfReport(Report):
355
345
  @property
356
346
  def description(self):
357
347
  boxes = self.box_model.objects.filter(
358
- box_identifier__in=[
359
- obj.identifier for obj in self.manifest.manifestitem_set.all()
360
- ]
348
+ box_identifier__in=[obj.identifier for obj in self.manifest.manifestitem_set.all()]
361
349
  )
362
350
  box_items = self.box_item_model.objects.filter(box__in=boxes)
363
351
  aliquots = self.aliquot_model.objects.filter(
@@ -399,9 +387,7 @@ class ManifestPdfReport(Report):
399
387
  data1 = []
400
388
  data1.append(box_header)
401
389
  try:
402
- box = self.box_model.objects.get(
403
- box_identifier=manifest_item.identifier
404
- )
390
+ box = self.box_model.objects.get(box_identifier=manifest_item.identifier)
405
391
  except ObjectDoesNotExist as e:
406
392
  raise ManifestPdfReportError(
407
393
  f"{e} Got Manifest item '{manifest_item.identifier}'.",
@@ -461,9 +447,7 @@ class ManifestPdfReport(Report):
461
447
  [
462
448
  barcode,
463
449
  Paragraph(str(box_item.position), self.styles["row_data"]),
464
- Paragraph(
465
- aliquot.human_readable_identifier, self.styles["row_data"]
466
- ),
450
+ Paragraph(aliquot.human_readable_identifier, self.styles["row_data"]),
467
451
  Paragraph(aliquot.subject_identifier, self.styles["row_data"]),
468
452
  Paragraph(
469
453
  "{} ({}) {}".format(
@@ -495,9 +479,7 @@ class ManifestPdfReport(Report):
495
479
  def get_aliquot(self, box_item_identifier=None):
496
480
  """Returns the aliquot instance for this box item."""
497
481
  try:
498
- aliquot = self.aliquot_model.objects.get(
499
- aliquot_identifier=box_item_identifier
500
- )
482
+ aliquot = self.aliquot_model.objects.get(aliquot_identifier=box_item_identifier)
501
483
  except ObjectDoesNotExist as e:
502
484
  raise ManifestPdfReportError(
503
485
  f"{e} Got Box item '{box_item_identifier}'",
@@ -9,6 +9,4 @@ def update_panels_on_post_migrate(sender, **kwargs):
9
9
 
10
10
  site_labs.migrated = True
11
11
  if site_labs.loaded:
12
- site_labs.update_panel_model(
13
- panel_model_cls=django_apps.get_model("edc_lab.panel")
14
- )
12
+ site_labs.update_panel_model(panel_model_cls=django_apps.get_model("edc_lab.panel"))
edc_lab/site_labs.py CHANGED
@@ -53,8 +53,7 @@ class SiteLabs:
53
53
  def registry(self):
54
54
  if not self.loaded:
55
55
  raise RegistryNotLoaded(
56
- "Registry not loaded. Is AppConfig for 'edc_lab' "
57
- "declared in settings?."
56
+ "Registry not loaded. Is AppConfig for 'edc_lab' " "declared in settings?."
58
57
  )
59
58
  return self._registry
60
59
 
@@ -84,15 +83,11 @@ class SiteLabs:
84
83
  self.update_panel_model(panel_model_cls=panel_model_cls)
85
84
  self.verify_reference_range_collections(lab_profile)
86
85
  else:
87
- raise AlreadyRegistered(
88
- f"Lab profile {lab_profile} is already registered."
89
- )
86
+ raise AlreadyRegistered(f"Lab profile {lab_profile} is already registered.")
90
87
 
91
88
  @property
92
89
  def lab_profiles(self):
93
- return {
94
- lab_profile.name: lab_profile for lab_profile in self._registry.values()
95
- }
90
+ return {lab_profile.name: lab_profile for lab_profile in self._registry.values()}
96
91
 
97
92
  @property
98
93
  def panel_model_cls(self):
@@ -164,8 +159,7 @@ class SiteLabs:
164
159
  .exists()
165
160
  ):
166
161
  names = [
167
- obj.name
168
- for obj in reference_range_colllection_model_cls().objects.all()
162
+ obj.name for obj in reference_range_colllection_model_cls().objects.all()
169
163
  ]
170
164
  raise SiteLabsLabProfileError(
171
165
  "Unknown reference range collection. "
@@ -1,12 +1,12 @@
1
1
  # Generated by Django 3.2.13 on 2022-08-25 01:51
2
2
 
3
3
  import _socket
4
- from django.db import migrations, models
5
4
  import django_audit_fields.fields.hostname_modification_field
6
5
  import django_audit_fields.fields.userfield
7
6
  import django_audit_fields.fields.uuid_auto_field
8
7
  import django_audit_fields.models.audit_model_mixin
9
8
  import django_revision.revision_field
9
+ from django.db import migrations, models
10
10
 
11
11
 
12
12
  class Migration(migrations.Migration):
@@ -1,8 +1,8 @@
1
1
  # Generated by Django 4.2.4 on 2023-08-23 01:13
2
2
 
3
3
  import _socket
4
- from django.db import migrations, models
5
4
  import django_audit_fields.fields.hostname_modification_field
5
+ from django.db import migrations, models
6
6
 
7
7
 
8
8
  class Migration(migrations.Migration):
@@ -14,16 +14,12 @@ class Migration(migrations.Migration):
14
14
  migrations.AlterField(
15
15
  model_name="edcpermissions",
16
16
  name="device_created",
17
- field=models.CharField(
18
- blank=True, max_length=10, verbose_name="Device created"
19
- ),
17
+ field=models.CharField(blank=True, max_length=10, verbose_name="Device created"),
20
18
  ),
21
19
  migrations.AlterField(
22
20
  model_name="edcpermissions",
23
21
  name="device_modified",
24
- field=models.CharField(
25
- blank=True, max_length=10, verbose_name="Device modified"
26
- ),
22
+ field=models.CharField(blank=True, max_length=10, verbose_name="Device modified"),
27
23
  ),
28
24
  migrations.AlterField(
29
25
  model_name="edcpermissions",
@@ -0,0 +1,26 @@
1
+ # Generated by Django 5.2.4 on 2025-09-10 03:24
2
+
3
+ import django_revision.revision_field
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("edc_lab_dashboard", "0003_edcpermissions_locale_created_and_more"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="edcpermissions",
16
+ name="revision",
17
+ field=django_revision.revision_field.RevisionField(
18
+ blank=True,
19
+ editable=False,
20
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
21
+ max_length=75,
22
+ null=True,
23
+ verbose_name="Revision",
24
+ ),
25
+ ),
26
+ ]
@@ -39,9 +39,7 @@ class BoxViewMixin(ContextMixin):
39
39
  def box_identifier(self):
40
40
  """Returns a cleaned box identifier."""
41
41
  if not self._box_identifier:
42
- self.original_box_identifier = escape(
43
- self.kwargs.get("box_identifier")
44
- ).strip()
42
+ self.original_box_identifier = escape(self.kwargs.get("box_identifier")).strip()
45
43
  self._box_identifier = "".join(self.original_box_identifier.split("-"))
46
44
  return self._box_identifier
47
45