clinicedc 2.0.6__py3-none-any.whl → 2.0.8__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 (495) hide show
  1. {clinicedc-2.0.6.dist-info → clinicedc-2.0.8.dist-info}/METADATA +2 -2
  2. {clinicedc-2.0.6.dist-info → clinicedc-2.0.8.dist-info}/RECORD +489 -441
  3. {clinicedc-2.0.6.dist-info → clinicedc-2.0.8.dist-info}/WHEEL +1 -1
  4. edc_action_item/action.py +1 -1
  5. edc_action_item/action_item_notification.py +2 -2
  6. edc_action_item/auths.py +37 -32
  7. edc_action_item/create_action_item.py +1 -1
  8. edc_action_item/decorators.py +1 -1
  9. edc_action_item/migrations/0001_initial.py +21 -22
  10. edc_action_item/migrations/0006_auto_20180707_1659.py +4 -4
  11. edc_action_item/migrations/0008_auto_20180809_0303.py +4 -4
  12. edc_action_item/migrations/0015_auto_20190114_0250.py +4 -4
  13. edc_action_item/migrations/0017_auto_20190305_0123.py +11 -30
  14. edc_action_item/migrations/0030_edcpermissions.py +3 -2
  15. edc_action_item/migrations/0039_alter_actionitem_auto_created_comment_and_more.py +398 -0
  16. edc_action_item/migrations/0040_alter_actionitem_report_datetime_and_more.py +34 -0
  17. edc_action_item/models/action_item.py +9 -4
  18. edc_action_item/models/action_model_mixin.py +5 -6
  19. edc_action_item/models/reference.py +2 -2
  20. edc_action_item/models/signals.py +22 -23
  21. edc_action_item/post_migrate_signals.py +1 -1
  22. edc_action_item/send_email.py +0 -85
  23. edc_action_item/site_action_items.py +5 -9
  24. edc_action_item/utils.py +3 -3
  25. edc_adherence/migrations/0005_alter_nonadherencereasons_extra_value_and_more.py +36 -0
  26. edc_adherence/model_mixins.py +1 -1
  27. edc_adverse_event/auths.py +55 -51
  28. edc_adverse_event/migrations/0001_initial.py +5 -4
  29. edc_adverse_event/migrations/0002_auto_20190802_0059.py +3 -2
  30. edc_adverse_event/migrations/0008_auto_20220825_0451.py +3 -2
  31. edc_adverse_event/migrations/0009_auto_20220907_0157.py +3 -2
  32. edc_adverse_event/migrations/0016_alter_aeactionclassification_device_created_and_more.py +285 -0
  33. edc_adverse_event/model_mixins/ae_followup/ae_followup_fields_model_mixin.py +2 -2
  34. edc_adverse_event/model_mixins/ae_initial/ae_initial_fields_model_mixin.py +6 -5
  35. edc_adverse_event/model_mixins/ae_special_interest/aesi_fields_model_mixin.py +2 -2
  36. edc_adverse_event/model_mixins/ae_susar/ae_susar_fields_model_mixin.py +2 -2
  37. edc_adverse_event/model_mixins/ae_tmg/ae_tmg_fields_model_mixin.py +15 -11
  38. edc_adverse_event/model_mixins/ae_tmg/ae_tmg_methods_model_mixin.py +2 -4
  39. edc_adverse_event/model_mixins/death_report/death_report_model_mixin.py +5 -4
  40. edc_adverse_event/model_mixins/death_report/death_report_tmg_model_mixin.py +6 -3
  41. edc_adverse_event/model_mixins/death_report/simple_death_report_model_mixin.py +2 -2
  42. edc_adverse_event/model_mixins/hospitaization/hospitalization_model_mixin.py +4 -3
  43. edc_adverse_event/modeladmin_mixins/death_report_admin_mixin.py +3 -3
  44. edc_adverse_event/models/signals.py +7 -7
  45. edc_adverse_event/templatetags/edc_adverse_event_extras.py +5 -4
  46. edc_adverse_event/view_mixins/ae/ae_listboard_view_mixin.py +3 -5
  47. edc_adverse_event/view_mixins/ae/death_report_listboard_view_mixin.py +6 -8
  48. edc_adverse_event/view_mixins/tmg/tmg_ae_listboard_view_mixin.py +2 -2
  49. edc_adverse_event/views/tmg/summary_listboard_view.py +3 -2
  50. edc_appointment/admin/appointment_admin.py +2 -2
  51. edc_appointment/admin/list_filters.py +2 -2
  52. edc_appointment/auths.py +14 -10
  53. edc_appointment/creators/appointment_creator.py +1 -1
  54. edc_appointment/creators/appointments_creator.py +1 -1
  55. edc_appointment/form_validators/appointment_form_validator.py +108 -82
  56. edc_appointment/migrations/0003_auto_20161127_2226.py +5 -6
  57. edc_appointment/migrations/0006_auto_20170106_2118.py +5 -5
  58. edc_appointment/migrations/0018_auto_20190305_0123.py +5 -12
  59. edc_appointment/migrations/0050_alter_appointment_appt_type_and_more.py +220 -0
  60. edc_appointment/model_mixins/appointment_fields_model_mixin.py +1 -2
  61. edc_appointment/model_mixins/appointment_methods_model_mixin.py +2 -3
  62. edc_appointment/model_mixins/appointment_model_mixin.py +31 -28
  63. edc_appointment/model_mixins/window_period_model_mixin.py +6 -7
  64. edc_appointment/models/appointment.py +1 -1
  65. edc_appointment/models/signals.py +44 -35
  66. edc_appointment/utils.py +19 -24
  67. edc_appointment/view_utils/appointment_button.py +2 -2
  68. edc_auth/admin/user_admin.py +1 -1
  69. edc_auth/auth_objects/__init__.py +2 -20
  70. edc_auth/auth_objects/default_groups.py +13 -11
  71. edc_auth/auth_objects/default_roles.py +26 -24
  72. edc_auth/auth_updater/auth_updater.py +13 -2
  73. edc_auth/auth_updater/group_updater.py +12 -10
  74. edc_auth/auth_updater/role_updater.py +2 -2
  75. edc_auth/constants.py +10 -0
  76. edc_auth/import_users.py +3 -3
  77. edc_auth/migrations/0001_squashed_0033_alter_userprofile_is_multisite_viewer.py +5 -5
  78. edc_auth/migrations/0012_auto_20191026_0034.py +3 -2
  79. edc_auth/migrations/0013_auto_20191026_0055.py +3 -2
  80. edc_auth/migrations/0025_permissions.py +3 -2
  81. edc_auth/migrations/0035_alter_edcpermissions_device_created_and_more.py +85 -0
  82. edc_auth/models/user_profile.py +14 -11
  83. edc_auth/post_migrate_signals.py +1 -1
  84. edc_auth/site_auths.py +80 -67
  85. edc_consent/actions.py +4 -5
  86. edc_consent/auths.py +18 -12
  87. edc_consent/migrations/0001_initial.py +3 -2
  88. edc_consent/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
  89. edc_consent/model_mixins/consent_extension_model_mixin.py +4 -5
  90. edc_consent/model_mixins/requires_consent_fields_model_mixin.py +2 -2
  91. edc_consent/utils.py +1 -1
  92. edc_constants/constants.py +1 -0
  93. edc_crf/auths.py +5 -0
  94. edc_crf/migrations/0001_initial.py +3 -2
  95. edc_crf/migrations/0009_alter_crfstatus_device_created_and_more.py +54 -0
  96. edc_dashboard/auths.py +10 -6
  97. edc_dashboard/migrations/0001_initial.py +3 -2
  98. edc_dashboard/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
  99. edc_dashboard/templatetags/edc_dashboard_extras.py +3 -2
  100. edc_dashboard/url_config.py +92 -83
  101. edc_dashboard/url_names.py +4 -4
  102. edc_dashboard/view_mixins/url_request_context_mixin.py +6 -5
  103. edc_data_manager/action_items.py +4 -6
  104. edc_data_manager/admin/actions.py +5 -5
  105. edc_data_manager/admin/data_query_admin.py +12 -11
  106. edc_data_manager/auths.py +37 -34
  107. edc_data_manager/handlers/handlers.py +6 -7
  108. edc_data_manager/migrations/0001_initial.py +19 -19
  109. edc_data_manager/migrations/0025_edcpermissions.py +3 -2
  110. edc_data_manager/migrations/0040_alter_datadictionary_device_created_and_more.py +327 -0
  111. edc_data_manager/migrations/0041_alter_dataquery_dm_user_and_more.py +164 -0
  112. edc_data_manager/models/data_query.py +5 -5
  113. edc_data_manager/models/model_mixins.py +8 -8
  114. edc_data_manager/rule/query_rule_wrapper.py +7 -7
  115. edc_data_manager/rule/rule_runner.py +4 -3
  116. edc_document_status/model_mixins.py +1 -1
  117. edc_egfr/egfr.py +11 -7
  118. edc_egfr/model_mixins/egfr_model_mixin.py +3 -7
  119. edc_export/admin/data_request_admin.py +2 -2
  120. edc_export/archive_exporter.py +7 -5
  121. edc_export/auths.py +32 -28
  122. edc_export/files_archiver.py +3 -2
  123. edc_export/migrations/0001_initial.py +26 -26
  124. edc_export/migrations/0004_auto_20190305_0123.py +25 -72
  125. edc_export/migrations/0013_edcpermissions.py +3 -2
  126. edc_export/migrations/0022_alter_datarequest_description_and_more.py +611 -0
  127. edc_export/migrations/0023_alter_datarequesthistory_archive_filename_and_more.py +29 -0
  128. edc_export/model_exporter/file_history_updater.py +10 -10
  129. edc_export/model_exporter/model_exporter.py +17 -15
  130. edc_export/model_exporter/object_history_helpers.py +2 -2
  131. edc_export/models/data_request_history.py +4 -4
  132. edc_export/utils.py +10 -15
  133. edc_facility/auths.py +8 -3
  134. edc_facility/facility.py +16 -22
  135. edc_facility/import_holidays.py +13 -13
  136. edc_facility/migrations/0005_healthfacility_healthfacilitytypes_and_more.py +8 -7
  137. edc_facility/migrations/0016_alter_healthfacility_device_created_and_more.py +139 -0
  138. edc_facility/migrations/0017_alter_healthfacility_gps_and_more.py +54 -0
  139. edc_facility/model_mixins.py +5 -5
  140. edc_form_label/custom_label_condition.py +11 -8
  141. edc_form_label/form_label.py +1 -1
  142. edc_form_runners/auths.py +11 -6
  143. edc_form_runners/form_runner.py +3 -5
  144. edc_form_runners/migrations/0001_initial.py +3 -2
  145. edc_form_runners/migrations/0005_alter_issue_device_created_and_more.py +49 -0
  146. edc_form_validators/applicable_field_validator.py +7 -6
  147. edc_form_validators/base_form_validator.py +8 -9
  148. edc_form_validators/other_specify_field_validator.py +2 -8
  149. edc_form_validators/required_field_validator.py +19 -16
  150. edc_identifier/migrations/0001_squashed_0018_auto_20180128_1054.py +3 -3
  151. edc_identifier/migrations/0002_auto_20190305_0123.py +3 -6
  152. edc_identifier/migrations/0006_auto_20161127_2226.py +15 -15
  153. edc_identifier/migrations/0007_auto_20161204_2227.py +3 -3
  154. edc_identifier/migrations/0009_auto_20161221_2323.py +3 -5
  155. edc_identifier/migrations/0010_auto_20170112_0602.py +17 -17
  156. edc_identifier/migrations/0011_alter_identifiermodel_device_created_and_more.py +79 -0
  157. edc_identifier/model_mixins.py +1 -1
  158. edc_identifier/models.py +9 -9
  159. edc_identifier/research_identifier.py +11 -10
  160. edc_identifier/simple_identifier.py +9 -5
  161. edc_identifier/subject_identifier.py +3 -2
  162. edc_lab/auths.py +26 -23
  163. edc_lab/lab/aliquot_creator.py +5 -8
  164. edc_lab/lab/primary_aliquot.py +14 -5
  165. edc_lab/migrations/0001_initial.py +29 -29
  166. edc_lab/migrations/0008_auto_20170921_0719.py +3 -3
  167. edc_lab/migrations/0010_auto_20171127_1541.py +15 -15
  168. edc_lab/migrations/0012_auto_20180114_1438.py +3 -3
  169. edc_lab/migrations/0019_auto_20190305_0123.py +43 -127
  170. edc_lab/migrations/0036_alter_aliquot_comment_alter_aliquot_device_created_and_more.py +1139 -0
  171. edc_lab/migrations/0037_alter_historicalorder_order_datetime_and_more.py +31 -0
  172. edc_lab/model_mixins/aliquot/aliquot_identifier_model_mixin.py +2 -2
  173. edc_lab/model_mixins/aliquot/aliquot_model_mixin.py +2 -2
  174. edc_lab/model_mixins/panel_model_mixin.py +18 -7
  175. edc_lab/model_mixins/requisition/crf_with_requisition_model_mixin.py +2 -4
  176. edc_lab/model_mixins/requisition/requisition_model_mixin.py +13 -16
  177. edc_lab/model_mixins/requisition/requisition_verify_model_mixin.py +1 -1
  178. edc_lab/model_mixins/result/result_item_model_mixin.py +4 -4
  179. edc_lab/model_mixins/shipping/manifest_model_mixin.py +4 -5
  180. edc_lab/model_mixins/shipping/verify_model_mixin.py +4 -6
  181. edc_lab/models/aliquot.py +2 -2
  182. edc_lab/models/box.py +1 -1
  183. edc_lab/models/box_item.py +6 -7
  184. edc_lab/models/manifest/manifest.py +3 -3
  185. edc_lab/models/manifest/manifest_item.py +7 -7
  186. edc_lab/models/manifest/shipper.py +3 -4
  187. edc_lab/models/order.py +6 -4
  188. edc_lab/models/panel.py +4 -4
  189. edc_lab/models/result.py +2 -2
  190. edc_lab/models/result_item.py +2 -2
  191. edc_lab_dashboard/auths.py +16 -11
  192. edc_lab_dashboard/migrations/0001_initial.py +3 -2
  193. edc_lab_dashboard/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
  194. edc_lab_dashboard/views/action_views/receive_view.py +2 -2
  195. edc_lab_dashboard/views/action_views/verify_box_item_view.py +2 -2
  196. edc_lab_results/calculate_missing.py +8 -8
  197. edc_lab_results/form_validator_mixins/blood_results_form_validator_mixin.py +2 -2
  198. edc_lab_results/get_summary.py +26 -25
  199. edc_lab_results/model_mixins/blood_result_model_mixin.py +9 -7
  200. edc_lab_results/model_mixins/fbg_model_mixin.py +3 -3
  201. edc_lab_results/model_mixins/glucose_model_mixin.py +3 -3
  202. edc_lab_results/model_mixins/hba1c_model_mixin.py +3 -3
  203. edc_label/auths.py +6 -1
  204. edc_label/label_template.py +8 -8
  205. edc_label/migrations/0001_initial.py +3 -2
  206. edc_label/migrations/0007_alter_zpllabeltemplates_device_created_and_more.py +49 -0
  207. edc_list_data/list_model_maker.py +2 -2
  208. edc_list_data/load_list_data.py +11 -14
  209. edc_list_data/load_model_data.py +3 -3
  210. edc_list_data/model_mixins.py +12 -4
  211. edc_list_data/post_migrate_signals.py +1 -1
  212. edc_list_data/preload_data.py +4 -4
  213. edc_list_data/row.py +1 -1
  214. edc_list_data/site_list_data.py +6 -5
  215. edc_listboard/migrations/0001_initial.py +3 -2
  216. edc_listboard/migrations/0007_alter_listboard_device_created_and_more.py +49 -0
  217. edc_locator/auths.py +18 -13
  218. edc_locator/migrations/0001_initial.py +7 -7
  219. edc_locator/migrations/0018_auto_20190305_0123.py +5 -12
  220. edc_locator/migrations/0040_alter_historicalsubjectlocator_action_identifier_and_more.py +187 -0
  221. edc_locator/migrations/0041_alter_historicalsubjectlocator_report_datetime_and_more.py +27 -0
  222. edc_locator/model_mixins/locator_model_mixin.py +2 -2
  223. edc_locator/model_mixins/subject_contact_fields_mixin.py +1 -1
  224. edc_locator/modeladmin_mixins.py +5 -4
  225. edc_ltfu/model_mixins.py +7 -5
  226. edc_metadata/auths.py +11 -7
  227. edc_metadata/metadata/metadata.py +1 -1
  228. edc_metadata/metadata_rules/crf/crf_rule.py +1 -1
  229. edc_metadata/metadata_rules/decorators.py +1 -1
  230. edc_metadata/metadata_rules/metadata_rule_evaluator.py +5 -3
  231. edc_metadata/metadata_rules/rule.py +2 -3
  232. edc_metadata/metadata_rules/rule_evaluator.py +1 -1
  233. edc_metadata/migrations/0002_auto_20161127_2226.py +5 -5
  234. edc_metadata/migrations/0005_auto_20170112_0602.py +5 -5
  235. edc_metadata/migrations/0011_auto_20190305_0123.py +5 -12
  236. edc_metadata/migrations/0031_alter_crfmetadata_device_created_and_more.py +120 -0
  237. edc_metadata/model_mixins/updates/updates_crf_metadata_model_mixin.py +7 -4
  238. edc_metadata/model_mixins/updates/updates_requisition_metadata_model_mixin.py +5 -2
  239. edc_metadata/models/crf_metadata.py +5 -5
  240. edc_metadata/models/crf_metadata_model_mixin.py +4 -5
  241. edc_metadata/models/requisition_metadata.py +6 -6
  242. edc_metadata/models/signals.py +10 -11
  243. edc_metadata/views/refresh_metadata_actions_view.py +3 -3
  244. edc_model/models/address_mixin.py +6 -6
  245. edc_model/models/fields/initials_field.py +2 -1
  246. edc_model/models/historical_records.py +2 -9
  247. edc_model/models/url_model_mixin.py +2 -2
  248. edc_model/validators/date.py +7 -8
  249. edc_model_admin/list_filters/future_date_list_filter.py +3 -3
  250. edc_model_admin/list_filters/past_date_list_filter.py +3 -3
  251. edc_model_admin/mixins/model_admin_protect_pii_mixin.py +4 -5
  252. edc_model_fields/fields/other_charfield.py +2 -2
  253. edc_navbar/auths.py +18 -13
  254. edc_navbar/migrations/0004_auto_20220825_0451.py +3 -2
  255. edc_navbar/migrations/0009_alter_edcpermissions_device_created_and_more.py +49 -0
  256. edc_notification/auths.py +9 -4
  257. edc_notification/migrations/0001_initial.py +3 -3
  258. edc_notification/migrations/0004_auto_20190305_0123.py +3 -6
  259. edc_notification/migrations/0011_alter_notification_device_created_and_more.py +59 -0
  260. edc_notification/models/notification.py +1 -1
  261. edc_notification/notification/graded_event_notification.py +2 -2
  262. edc_notification/notification/model_notification.py +3 -30
  263. edc_notification/notification/new_model_notification.py +1 -1
  264. edc_notification/notification/notification.py +12 -12
  265. edc_notification/notification/updated_model_notification.py +2 -2
  266. edc_offstudy/auths.py +12 -7
  267. edc_offstudy/migrations/0001_initial.py +4 -4
  268. edc_offstudy/migrations/0002_auto_20180921_0434.py +4 -4
  269. edc_offstudy/migrations/0005_auto_20190305_0123.py +5 -12
  270. edc_offstudy/migrations/0023_alter_historicalsubjectoffstudy_action_identifier_and_more.py +188 -0
  271. edc_offstudy/migrations/0024_alter_historicalsubjectoffstudy_offstudy_datetime_and_more.py +43 -0
  272. edc_offstudy/model_mixins/offstudy_model_mixin.py +3 -2
  273. edc_pdutils/df_exporters/csv_exporter.py +33 -37
  274. edc_pdutils/df_exporters/csv_model_exporter.py +7 -3
  275. edc_pdutils/migrations/0001_initial.py +8 -8
  276. edc_pharmacy/admin/prescription/rx_refill_admin.py +4 -3
  277. edc_pharmacy/admin/reports/stock_availability_admin.py +5 -6
  278. edc_pharmacy/auths.py +19 -15
  279. edc_pharmacy/migrations/0001_initial.py +64 -63
  280. edc_pharmacy/migrations/0015_auto_20220913_2139.py +26 -26
  281. edc_pharmacy/migrations/0024_allocation_assignment_containerunits_dispense_and_more.py +81 -86
  282. edc_pharmacy/migrations/0037_remove_historicalstock_confirmed_at_site_by_and_more.py +5 -5
  283. edc_pharmacy/migrations/0039_remove_dispense_registered_subject_and_more.py +7 -8
  284. edc_pharmacy/migrations/0049_remove_stocktransferconfirmation_stock_and_more.py +12 -12
  285. edc_pharmacy/migrations/0050_remove_stocktransferconfirmation2_location_and_more.py +5 -5
  286. edc_pharmacy/migrations/0051_alter_historicalstocktransferconfirmationitem_options_and_more.py +3 -4
  287. edc_pharmacy/migrations/0053_alter_location_managers_alter_historicalstock_lot_and_more.py +3 -3
  288. edc_pharmacy/migrations/0057_scanduplicates.py +3 -3
  289. edc_pharmacy/migrations/0060_alter_container_max_per_subject_and_more.py +13 -15
  290. edc_pharmacy/migrations/0068_stockout.py +2 -3
  291. edc_pharmacy/migrations/0076_historicalstockadjustment_stockadjustment.py +5 -5
  292. edc_pharmacy/migrations/0077_historicalstockadjustment_adjustment_datetime_and_more.py +3 -4
  293. edc_pharmacy/migrations/0081_historicalconfirmation_confirmation.py +8 -8
  294. edc_pharmacy/migrations/0084_confirmationatsiteitem_and_more.py +0 -2
  295. edc_pharmacy/migrations/0089_alter_allocation_allocated_by_and_more.py +3284 -0
  296. edc_pharmacy/migrations/0090_alter_allocation_allocation_datetime_and_more.py +227 -0
  297. edc_pharmacy/model_mixins/study_medication_refill_model_mixin.py +2 -2
  298. edc_pharmacy/models/medication/formulation.py +5 -7
  299. edc_pharmacy/models/medication/medication.py +3 -3
  300. edc_pharmacy/models/model_mixins.py +10 -11
  301. edc_pharmacy/models/prescription/rx.py +13 -12
  302. edc_pharmacy/models/prescription/rx_refill.py +0 -1
  303. edc_pharmacy/models/stock/allocation.py +3 -3
  304. edc_pharmacy/models/stock/confirmation.py +3 -3
  305. edc_pharmacy/models/stock/confirmation_at_site.py +3 -2
  306. edc_pharmacy/models/stock/confirmation_at_site_item.py +3 -4
  307. edc_pharmacy/models/stock/dispense.py +5 -6
  308. edc_pharmacy/models/stock/dispense_item.py +2 -2
  309. edc_pharmacy/models/stock/location.py +3 -4
  310. edc_pharmacy/models/stock/lot.py +6 -7
  311. edc_pharmacy/models/stock/order.py +1 -1
  312. edc_pharmacy/models/stock/receive.py +3 -3
  313. edc_pharmacy/models/stock/receive_item.py +4 -4
  314. edc_pharmacy/models/stock/repack_request.py +2 -2
  315. edc_pharmacy/models/stock/stock.py +12 -18
  316. edc_pharmacy/models/stock/stock_adjustment.py +4 -4
  317. edc_pharmacy/models/stock/stock_request.py +2 -2
  318. edc_pharmacy/models/stock/stock_request_item.py +2 -2
  319. edc_pharmacy/models/stock/stock_transfer.py +3 -3
  320. edc_pharmacy/models/stock/stock_transfer_item.py +2 -2
  321. edc_pharmacy/models/stock/storage_bin.py +3 -4
  322. edc_pharmacy/models/stock/storage_bin_item.py +2 -2
  323. edc_pharmacy/models/stock/supplier.py +3 -4
  324. edc_pharmacy/models/storage/box.py +2 -2
  325. edc_pharmacy/models/storage/items/container_model_mixin.py +3 -4
  326. edc_pharmacy/models/storage/items/pill_bottle_model_mixin.py +2 -2
  327. edc_pharmacy/models/storage/items/subject_pill_bottle.py +1 -1
  328. edc_pharmacy/models/storage/room.py +2 -2
  329. edc_pharmacy/models/storage/shelf.py +2 -2
  330. edc_pharmacy/models/storage/utils.py +1 -1
  331. edc_pharmacy/prescribe/create_prescription.py +3 -3
  332. edc_pharmacy/utils/allocate_stock.py +2 -3
  333. edc_pharmacy/utils/confirm_stock.py +3 -4
  334. edc_pharmacy/utils/confirm_stock_at_site.py +4 -5
  335. edc_pharmacy/utils/dispense.py +3 -4
  336. edc_pharmacy/utils/process_repack_request.py +4 -5
  337. edc_pharmacy/utils/stock_request/bulk_create_stock_request_items.py +2 -3
  338. edc_pharmacy/utils/transfer_stock.py +2 -3
  339. edc_pharmacy/views/add_to_storage_bin_view.py +2 -2
  340. edc_pharmacy/views/allocate_to_subject_view.py +2 -2
  341. edc_pharmacy/views/confirmation_at_site_view.py +6 -9
  342. edc_pharmacy/views/dispense_view.py +2 -2
  343. edc_pharmacy/views/move_to_storage_bin_view.py +2 -3
  344. edc_pharmacy/views/print_labels_view.py +2 -2
  345. edc_prn/admin_site.py +5 -0
  346. edc_prn/prn.py +10 -11
  347. edc_prn/urls.py +11 -0
  348. edc_protocol/research_protocol_config.py +2 -3
  349. edc_protocol_incident/action_items.py +4 -4
  350. edc_protocol_incident/auths.py +27 -20
  351. edc_protocol_incident/migrations/0001_initial.py +7 -7
  352. edc_protocol_incident/migrations/0001_squashed_0015_auto_20220927_0401.py +13 -13
  353. edc_protocol_incident/migrations/0005_protocolincident_historicalprotocolincident_and_more.py +7 -7
  354. edc_protocol_incident/migrations/0024_alter_actionsrequired_extra_value_and_more.py +625 -0
  355. edc_protocol_incident/migrations/0025_alter_historicalprotocoldeviationviolation_report_datetime_and_more.py +42 -0
  356. edc_protocol_incident/model_mixins/protocol_deviation_violation_model_mixin.py +18 -11
  357. edc_protocol_incident/model_mixins/protocol_incident_model_mixin.py +26 -11
  358. edc_pylabels/actions.py +3 -5
  359. edc_pylabels/auths.py +6 -1
  360. edc_pylabels/migrations/0002_alter_label_options_label_created_and_more.py +3 -7
  361. edc_pylabels/migrations/0005_labelconfiguration_delete_label_and_more.py +3 -3
  362. edc_pylabels/migrations/0013_alter_labelconfiguration_device_created_and_more.py +49 -0
  363. edc_qareports/auths.py +11 -7
  364. edc_qareports/migrations/0001_initial.py +4 -5
  365. edc_qareports/migrations/0005_edcpermissions.py +3 -3
  366. edc_qareports/migrations/0006_qareportlog.py +2 -3
  367. edc_qareports/migrations/0019_alter_edcpermissions_device_created_and_more.py +102 -0
  368. edc_qareports/migrations/0020_alter_note_report_datetime_and_more.py +24 -0
  369. edc_qareports/model_mixins/note_model_mixin.py +7 -4
  370. edc_qareports/model_mixins/on_study_missing_values_model_mixin.py +4 -4
  371. edc_qareports/model_mixins/qa_report_model_mixin.py +2 -3
  372. edc_qareports/models/note.py +4 -4
  373. edc_qareports/models/qa_reports_log.py +2 -3
  374. edc_randomization/admin.py +30 -24
  375. edc_randomization/auths.py +12 -7
  376. edc_randomization/decorators.py +1 -1
  377. edc_randomization/migrations/0001_initial.py +3 -2
  378. edc_randomization/migrations/0002_historicalrandomizationlist.py +3 -2
  379. edc_randomization/migrations/0009_edcpermissions.py +3 -2
  380. edc_randomization/migrations/0014_alter_edcpermissions_device_created_and_more.py +141 -0
  381. edc_randomization/model_mixins.py +9 -9
  382. edc_randomization/randomizer.py +22 -20
  383. edc_randomization/utils.py +19 -18
  384. edc_refusal/auths.py +7 -2
  385. edc_refusal/migrations/0001_initial.py +4 -4
  386. edc_refusal/migrations/0002_historicalsubjectrefusal.py +4 -4
  387. edc_refusal/migrations/0012_alter_historicalsubjectrefusal_comment_and_more.py +122 -0
  388. edc_refusal/migrations/0013_alter_historicalsubjectrefusal_report_datetime_and_more.py +28 -0
  389. edc_refusal/model_mixins.py +4 -4
  390. edc_registration/auths.py +28 -23
  391. edc_registration/migrations/0002_auto_20161127_2226.py +3 -4
  392. edc_registration/migrations/0005_auto_20170111_1809.py +4 -2
  393. edc_registration/migrations/0016_historicalregisteredsubject.py +3 -2
  394. edc_registration/migrations/0017_auto_20190305_0123.py +5 -12
  395. edc_registration/migrations/0033_alter_historicalregisteredsubject_additional_key_and_more.py +302 -0
  396. edc_registration/model_mixins/updates_or_creates_registered_subject_model_mixin.py +15 -7
  397. edc_registration/models/registered_subject.py +28 -27
  398. edc_reportable/age_evaluator.py +4 -2
  399. edc_reportable/formula.py +5 -5
  400. edc_reportable/migrations/0001_initial.py +7 -7
  401. edc_reportable/migrations/0003_referencerangecollection_grade1_and_more.py +3 -3
  402. edc_reportable/migrations/0004_alter_referencerangecollection_grade3_and_more.py +5 -5
  403. edc_reportable/migrations/0006_alter_gradingdata_revision_and_more.py +5 -6
  404. edc_reportable/migrations/0007_alter_gradingdata_age_phrase_and_more.py +509 -0
  405. edc_reportable/models/normal_data.py +4 -5
  406. edc_reportable/models/reference_model_mixins.py +10 -11
  407. edc_reportable/models/reference_range_collection.py +12 -13
  408. edc_reportable/post_migrate_signals.py +1 -1
  409. edc_reportable/utils/convert_units.py +11 -45
  410. edc_reportable/utils/get_normal_data_or_raise.py +2 -2
  411. edc_reportable/utils/get_reference_range_collection.py +2 -3
  412. edc_reportable/utils/load_data.py +4 -4
  413. edc_reportable/utils/update_grading_data.py +5 -5
  414. edc_review_dashboard/auths.py +23 -18
  415. edc_review_dashboard/migrations/0001_initial.py +3 -2
  416. edc_review_dashboard/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
  417. edc_screening/age_evaluator.py +6 -6
  418. edc_screening/auths.py +35 -30
  419. edc_screening/eligibility.py +1 -1
  420. edc_screening/gender_evaluator.py +1 -1
  421. edc_screening/migrations/0001_initial.py +3 -2
  422. edc_screening/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
  423. edc_screening/model_mixins/eligibility_model_mixin.py +3 -6
  424. edc_screening/model_mixins/screening_fields_model_mixin.py +6 -8
  425. edc_screening/model_mixins/screening_methods_model_mixin.py +1 -1
  426. edc_screening/screening_eligibility.py +2 -4
  427. edc_screening/utils.py +9 -9
  428. edc_search/generate_slug.py +26 -0
  429. edc_search/model_mixins.py +10 -22
  430. edc_sites/auths.py +8 -3
  431. edc_sites/migrations/0007_edcpermissions.py +3 -2
  432. edc_sites/migrations/0010_alter_edcpermissions_device_created_and_more.py +69 -0
  433. edc_sites/model_mixins/site_model_mixin.py +2 -2
  434. edc_sites/site.py +5 -5
  435. edc_sites/system_checks.py +1 -1
  436. edc_subject_dashboard/auths.py +27 -22
  437. edc_subject_dashboard/migrations/0001_initial.py +3 -2
  438. edc_subject_dashboard/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
  439. edc_subject_dashboard/requisition_report.py +6 -4
  440. edc_subject_dashboard/requisition_verifier.py +6 -6
  441. edc_subject_dashboard/templatetags/edc_subject_dashboard_extras.py +2 -2
  442. edc_subject_dashboard/view_mixins/subject_visit_view_mixin.py +7 -8
  443. edc_subject_dashboard/view_utils/subject_consent_listboard_button.py +3 -2
  444. edc_subject_dashboard/view_utils/timepoint_status_button.py +2 -2
  445. edc_timepoint/apps.py +0 -21
  446. edc_timepoint/model_mixins.py +22 -20
  447. edc_transfer/model_mixins.py +4 -4
  448. edc_transfer/modeladmin_mixins.py +1 -1
  449. edc_unblinding/auths.py +9 -4
  450. edc_unblinding/migrations/0001_initial.py +13 -13
  451. edc_unblinding/migrations/0014_alter_historicalunblindingrequest_action_identifier_and_more.py +291 -0
  452. edc_unblinding/migrations/0015_alter_historicalunblindingrequest_report_datetime_and_more.py +45 -0
  453. edc_unblinding/models/unblinding_request.py +2 -2
  454. edc_unblinding/models/unblinding_review.py +3 -3
  455. edc_utils/__init__.py +3 -1
  456. edc_utils/age.py +10 -16
  457. edc_utils/show_urls.py +29 -2
  458. edc_visit_schedule/auths.py +6 -1
  459. edc_visit_schedule/migrations/0001_initial.py +3 -3
  460. edc_visit_schedule/migrations/0002_auto_20190305_0123.py +3 -6
  461. edc_visit_schedule/migrations/0003_historicalvisitschedule_visitschedule.py +5 -4
  462. edc_visit_schedule/migrations/0015_historicalonschedule_offschedule_onschedule.py +10 -10
  463. edc_visit_schedule/migrations/0019_alter_historicalonschedule_device_created_and_more.py +229 -0
  464. edc_visit_schedule/migrations/0020_alter_historicalonschedule_onschedule_datetime_and_more.py +65 -0
  465. edc_visit_schedule/model_mixins/off_schedule_model_mixin.py +5 -4
  466. edc_visit_schedule/model_mixins/on_schedule_model_mixin.py +5 -4
  467. edc_visit_schedule/model_mixins/visit_schedule/visit_code_fields_model_mixin.py +1 -1
  468. edc_visit_schedule/models/subject_schedule_history.py +6 -6
  469. edc_visit_schedule/schedule/visit_collection.py +1 -1
  470. edc_visit_schedule/site_visit_schedules.py +2 -2
  471. edc_visit_schedule/subject_schedule.py +5 -4
  472. edc_visit_schedule/view_mixins.py +2 -3
  473. edc_visit_schedule/visit/visit.py +3 -2
  474. edc_visit_tracking/migrations/0004_subjectvisit_subjectvisitmissedreasons_extra_value_and_more.py +13 -13
  475. edc_visit_tracking/migrations/0009_alter_historicalsubjectvisit_comments_and_more.py +450 -0
  476. edc_visit_tracking/migrations/0010_alter_historicalsubjectvisit_report_datetime_and_more.py +68 -0
  477. edc_visit_tracking/model_mixins/base/visit_methods_model_mixin.py +3 -3
  478. edc_visit_tracking/model_mixins/crfs/visit_tracking_crf_model_mixin.py +2 -2
  479. edc_visit_tracking/model_mixins/requisitions/visit_tracking_requisition_model_mixin.py +2 -2
  480. edc_visit_tracking/model_mixins/subject_visit_missed_model_mixin.py +2 -2
  481. edc_visit_tracking/model_mixins/visit_model_mixin/caretaker_fields_mixin.py +2 -3
  482. edc_visit_tracking/model_mixins/visit_model_mixin/previous_visit_model_mixin.py +1 -1
  483. edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_fields_mixin.py +8 -11
  484. edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_mixin.py +1 -1
  485. edc_visit_tracking/models/signals.py +3 -3
  486. edc_visit_tracking/models/subject_visit.py +1 -1
  487. edc_vitals/calculators/bmi.py +7 -5
  488. edc_vitals/utils.py +1 -1
  489. edc_form_label/models.py +0 -0
  490. edc_search/constants.py +0 -1
  491. edc_search/models.py +0 -0
  492. edc_search/search_slug.py +0 -50
  493. edc_search/updater.py +0 -30
  494. edc_search/wsgi.py +0 -7
  495. {clinicedc-2.0.6.dist-info → clinicedc-2.0.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,45 @@
1
+ # Generated by Django 5.2.6 on 2025-09-18 00:24
2
+
3
+ import django.utils.timezone
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ (
11
+ "edc_unblinding",
12
+ "0014_alter_historicalunblindingrequest_action_identifier_and_more",
13
+ ),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.AlterField(
18
+ model_name="historicalunblindingrequest",
19
+ name="report_datetime",
20
+ field=models.DateTimeField(
21
+ default=django.utils.timezone.now, verbose_name="Report Date and Time"
22
+ ),
23
+ ),
24
+ migrations.AlterField(
25
+ model_name="historicalunblindingreview",
26
+ name="report_datetime",
27
+ field=models.DateTimeField(
28
+ default=django.utils.timezone.now, verbose_name="Report Date and Time"
29
+ ),
30
+ ),
31
+ migrations.AlterField(
32
+ model_name="unblindingrequest",
33
+ name="report_datetime",
34
+ field=models.DateTimeField(
35
+ default=django.utils.timezone.now, verbose_name="Report Date and Time"
36
+ ),
37
+ ),
38
+ migrations.AlterField(
39
+ model_name="unblindingreview",
40
+ name="report_datetime",
41
+ field=models.DateTimeField(
42
+ default=django.utils.timezone.now, verbose_name="Report Date and Time"
43
+ ),
44
+ ),
45
+ ]
@@ -4,6 +4,7 @@ from django.core.validators import (
4
4
  RegexValidator,
5
5
  )
6
6
  from django.db import models
7
+ from django.utils import timezone
7
8
 
8
9
  from edc_action_item.models.action_model_mixin import ActionModelMixin
9
10
  from edc_constants.choices import YES_NO_TBD
@@ -13,7 +14,6 @@ from edc_identifier.model_mixins import NonUniqueSubjectIdentifierFieldMixin
13
14
  from edc_model.models.base_uuid_model import BaseUuidModel
14
15
  from edc_sites.managers import CurrentSiteManager
15
16
  from edc_sites.model_mixins import SiteModelMixin
16
- from edc_utils.date import get_utcnow
17
17
 
18
18
  from ..constants import UNBLINDING_REQUEST_ACTION
19
19
  from .unblinding_user import UnblindingRequestorUser
@@ -28,7 +28,7 @@ class UnblindingRequest(
28
28
  action_name = UNBLINDING_REQUEST_ACTION
29
29
 
30
30
  report_datetime = models.DateTimeField(
31
- verbose_name="Report Date and Time", default=get_utcnow
31
+ verbose_name="Report Date and Time", default=timezone.now
32
32
  )
33
33
 
34
34
  initials = models.CharField(
@@ -1,4 +1,5 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
 
3
4
  from edc_action_item.models.action_model_mixin import ActionModelMixin
4
5
  from edc_constants.choices import YES_NO_TBD
@@ -8,7 +9,6 @@ from edc_identifier.model_mixins import NonUniqueSubjectIdentifierFieldMixin
8
9
  from edc_model.models.base_uuid_model import BaseUuidModel
9
10
  from edc_sites.managers import CurrentSiteManager
10
11
  from edc_sites.model_mixins import SiteModelMixin
11
- from edc_utils.date import get_utcnow
12
12
 
13
13
  from ..constants import UNBLINDING_REVIEW_ACTION
14
14
  from .unblinding_user import UnblindingReviewerUser
@@ -23,7 +23,7 @@ class UnblindingReview(
23
23
  action_name = UNBLINDING_REVIEW_ACTION
24
24
 
25
25
  report_datetime = models.DateTimeField(
26
- verbose_name="Report Date and Time", default=get_utcnow
26
+ verbose_name="Report Date and Time", default=timezone.now
27
27
  )
28
28
 
29
29
  reviewer = models.ForeignKey(
@@ -36,7 +36,7 @@ class UnblindingReview(
36
36
 
37
37
  approved = models.CharField(max_length=15, default=TBD, choices=YES_NO_TBD)
38
38
 
39
- comment = models.TextField(verbose_name="Comment", null=True)
39
+ comment = models.TextField(verbose_name="Comment", default="")
40
40
 
41
41
  objects = SubjectIdentifierManager()
42
42
 
edc_utils/__init__.py CHANGED
@@ -8,7 +8,7 @@ from .get_static_file import get_static_file
8
8
  from .get_uuid import get_uuid
9
9
  from .message_in_queue import message_in_queue
10
10
  from .round_up import round_half_away_from_zero, round_half_up, round_up
11
- from .show_urls import show_url_names, show_urls
11
+ from .show_urls import show_namespaces, show_url_names, show_urls, show_urls_from_patterns
12
12
  from .text import (
13
13
  convert_from_camel,
14
14
  convert_php_dateformat,
@@ -48,8 +48,10 @@ __all__ = [
48
48
  "round_half_up",
49
49
  "round_up",
50
50
  "safe_allowed_chars",
51
+ "show_namespaces",
51
52
  "show_url_names",
52
53
  "show_urls",
54
+ "show_urls_from_patterns",
53
55
  "to_local",
54
56
  "to_utc",
55
57
  "truncate_string",
edc_utils/age.py CHANGED
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import contextlib
3
4
  from datetime import date, datetime
4
5
  from zoneinfo import ZoneInfo
5
6
 
6
7
  from dateutil.relativedelta import relativedelta
7
8
  from django.conf import settings
8
-
9
- from .date import get_utcnow
9
+ from django.utils import timezone
10
10
 
11
11
 
12
12
  class AgeValueError(Exception):
@@ -22,19 +22,13 @@ def get_dob(age_in_years: int, now: date | datetime | None = None) -> date:
22
22
 
23
23
  Used in tests.
24
24
  """
25
- now = now or get_utcnow()
26
- try:
25
+ now = now or timezone.now()
26
+ with contextlib.suppress(AttributeError):
27
27
  now = now.date()
28
- except AttributeError:
29
- pass
30
28
  return now - relativedelta(years=age_in_years)
31
29
 
32
30
 
33
- def age(
34
- born: date | datetime,
35
- reference_dt: date | datetime,
36
- timezone: str | None = None,
37
- ) -> relativedelta:
31
+ def age(born: date | datetime, reference_dt: date | datetime) -> relativedelta:
38
32
  """Returns a relative delta.
39
33
 
40
34
  Convert dates or datetimes to UTC datetimes.
@@ -61,14 +55,14 @@ def age(
61
55
  def formatted_age(
62
56
  born: date | datetime | None,
63
57
  reference_dt: date | datetime,
64
- timezone: str | None = None,
58
+ tz: str | None = None,
65
59
  ) -> str:
66
60
  age_as_str = "?"
67
61
  if born:
68
- timezone = timezone or getattr(settings, "TIME_ZONE", "UTC")
69
- born = datetime(*[*born.timetuple()][0:6], tzinfo=ZoneInfo(timezone))
70
- reference_dt = reference_dt or get_utcnow()
71
- age_delta = age(born, reference_dt or get_utcnow())
62
+ tz = tz or getattr(settings, "TIME_ZONE", "UTC")
63
+ born = datetime(*[*born.timetuple()][0:6], tzinfo=ZoneInfo(tz))
64
+ reference_dt = reference_dt or timezone.now()
65
+ age_delta = age(born, reference_dt or timezone.now())
72
66
  if age_delta.years == 0 and age_delta.months <= 0:
73
67
  age_as_str = f"{age_delta.days}d"
74
68
  elif age_delta.years == 0 and 0 < age_delta.months <= 2:
edc_utils/show_urls.py CHANGED
@@ -2,7 +2,7 @@
2
2
  # https://github.com/django-extensions/django-extensions/blob/master/django_extensions/management/commands/show_urls.py
3
3
 
4
4
  from django.core.exceptions import ViewDoesNotExist
5
- from django.urls import URLPattern, URLResolver
5
+ from django.urls import URLPattern, URLResolver, get_resolver
6
6
 
7
7
 
8
8
  class RegexURLPattern:
@@ -21,7 +21,26 @@ def describe_pattern(p):
21
21
  return str(p.pattern)
22
22
 
23
23
 
24
- def show_urls(urlpatterns, base="", namespace=None, search=None):
24
+ def show_namespaces():
25
+ """Returns a list of all registered URL namespaces."""
26
+ resolver = get_resolver()
27
+ return list(resolver.namespace_dict.keys())
28
+
29
+
30
+ def show_urls():
31
+ """Return a list of all URL patterns in the project."""
32
+ urls = []
33
+ resolver = get_resolver()
34
+ url_patterns = resolver.url_patterns
35
+ for pattern in url_patterns:
36
+ try:
37
+ urls.append(f"URL: {pattern.pattern} -> View: {pattern.callback.__name__}")
38
+ except AttributeError:
39
+ urls.append(f"URL: {pattern.pattern}")
40
+ return urls
41
+
42
+
43
+ def show_urls_from_patterns(urlpatterns, base="", namespace=None, search=None):
25
44
  urls = extract_views_from_urlpatterns(urlpatterns, base=base, namespace=namespace)
26
45
  if search:
27
46
  return [url[1] for url in urls if search in url[1]]
@@ -29,6 +48,14 @@ def show_urls(urlpatterns, base="", namespace=None, search=None):
29
48
 
30
49
 
31
50
  def show_url_names(urlpatterns, base="", namespace=None, search=None):
51
+ """Returns a list of url names.
52
+
53
+ For example:
54
+ resolver = get_resolver()
55
+ url_patterns = resolver.url_patterns
56
+ pprint(show_url_names(url_patterns))
57
+ """
58
+
32
59
  urls = extract_views_from_urlpatterns(urlpatterns, base=base, namespace=namespace)
33
60
  if search:
34
61
  return [url[2] for url in urls if search in url[2]]
@@ -1,4 +1,9 @@
1
1
  from edc_auth.constants import EVERYONE
2
2
  from edc_auth.site_auths import site_auths
3
3
 
4
- site_auths.update_group("edc_visit_schedule.view_subjectschedulehistory", name=EVERYONE)
4
+
5
+ def update_site_auths() -> None:
6
+ site_auths.update_group("edc_visit_schedule.view_subjectschedulehistory", name=EVERYONE)
7
+
8
+
9
+ update_site_auths()
@@ -8,7 +8,7 @@ import edc_model.models
8
8
  import edc_model_fields.fields.hostname_modification_field
9
9
  import edc_model_fields.fields.userfield
10
10
  import edc_protocol.validators
11
- import edc_utils
11
+ import django.utils.timezone
12
12
 
13
13
 
14
14
  class Migration(migrations.Migration):
@@ -22,11 +22,11 @@ class Migration(migrations.Migration):
22
22
  fields=[
23
23
  (
24
24
  "created",
25
- models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
25
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
26
26
  ),
27
27
  (
28
28
  "modified",
29
- models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
29
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
30
30
  ),
31
31
  (
32
32
  "user_created",
@@ -4,6 +4,7 @@ import django_audit_fields.fields.hostname_modification_field
4
4
  import django_audit_fields.fields.userfield
5
5
  import django_audit_fields.models.audit_model_mixin
6
6
  from django.db import migrations, models
7
+ import django.utils.timezone
7
8
 
8
9
 
9
10
  class Migration(migrations.Migration):
@@ -13,9 +14,7 @@ class Migration(migrations.Migration):
13
14
  migrations.AlterField(
14
15
  model_name="subjectschedulehistory",
15
16
  name="created",
16
- field=models.DateTimeField(
17
- blank=True, default=django_audit_fields.models.audit_model_mixin.utcnow
18
- ),
17
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
19
18
  ),
20
19
  migrations.AlterField(
21
20
  model_name="subjectschedulehistory",
@@ -29,9 +28,7 @@ class Migration(migrations.Migration):
29
28
  migrations.AlterField(
30
29
  model_name="subjectschedulehistory",
31
30
  name="modified",
32
- field=models.DateTimeField(
33
- blank=True, default=django_audit_fields.models.audit_model_mixin.utcnow
34
- ),
31
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
35
32
  ),
36
33
  migrations.AlterField(
37
34
  model_name="subjectschedulehistory",
@@ -12,6 +12,7 @@ import django_revision.revision_field
12
12
  import simple_history.models
13
13
  from django.conf import settings
14
14
  from django.db import migrations, models
15
+ import django.utils.timezone
15
16
 
16
17
 
17
18
  class Migration(migrations.Migration):
@@ -39,14 +40,14 @@ class Migration(migrations.Migration):
39
40
  "created",
40
41
  models.DateTimeField(
41
42
  blank=True,
42
- default=django_audit_fields.models.audit_model_mixin.utcnow,
43
+ default=django.utils.timezone.now,
43
44
  ),
44
45
  ),
45
46
  (
46
47
  "modified",
47
48
  models.DateTimeField(
48
49
  blank=True,
49
- default=django_audit_fields.models.audit_model_mixin.utcnow,
50
+ default=django.utils.timezone.now,
50
51
  ),
51
52
  ),
52
53
  (
@@ -124,14 +125,14 @@ class Migration(migrations.Migration):
124
125
  "created",
125
126
  models.DateTimeField(
126
127
  blank=True,
127
- default=django_audit_fields.models.audit_model_mixin.utcnow,
128
+ default=django.utils.timezone.now,
128
129
  ),
129
130
  ),
130
131
  (
131
132
  "modified",
132
133
  models.DateTimeField(
133
134
  blank=True,
134
- default=django_audit_fields.models.audit_model_mixin.utcnow,
135
+ default=django.utils.timezone.now,
135
136
  ),
136
137
  ),
137
138
  (
@@ -17,7 +17,7 @@ import edc_identifier.managers
17
17
  import edc_model.validators.date
18
18
  import edc_protocol.validators
19
19
  import edc_sites.managers
20
- import edc_utils.date
20
+ import django.utils.timezone
21
21
 
22
22
 
23
23
  class Migration(migrations.Migration):
@@ -46,14 +46,14 @@ class Migration(migrations.Migration):
46
46
  "created",
47
47
  models.DateTimeField(
48
48
  blank=True,
49
- default=django_audit_fields.models.audit_model_mixin.utcnow,
49
+ default=django.utils.timezone.now,
50
50
  ),
51
51
  ),
52
52
  (
53
53
  "modified",
54
54
  models.DateTimeField(
55
55
  blank=True,
56
- default=django_audit_fields.models.audit_model_mixin.utcnow,
56
+ default=django.utils.timezone.now,
57
57
  ),
58
58
  ),
59
59
  (
@@ -136,7 +136,7 @@ class Migration(migrations.Migration):
136
136
  (
137
137
  "onschedule_datetime",
138
138
  models.DateTimeField(
139
- default=edc_utils.date.get_utcnow,
139
+ default=django.utils.timezone.now,
140
140
  validators=[
141
141
  edc_protocol.validators.datetime_not_before_study_start,
142
142
  edc_model.validators.date.datetime_not_future,
@@ -210,14 +210,14 @@ class Migration(migrations.Migration):
210
210
  "created",
211
211
  models.DateTimeField(
212
212
  blank=True,
213
- default=django_audit_fields.models.audit_model_mixin.utcnow,
213
+ default=django.utils.timezone.now,
214
214
  ),
215
215
  ),
216
216
  (
217
217
  "modified",
218
218
  models.DateTimeField(
219
219
  blank=True,
220
- default=django_audit_fields.models.audit_model_mixin.utcnow,
220
+ default=django.utils.timezone.now,
221
221
  ),
222
222
  ),
223
223
  (
@@ -301,7 +301,7 @@ class Migration(migrations.Migration):
301
301
  (
302
302
  "offschedule_datetime",
303
303
  models.DateTimeField(
304
- default=edc_utils.date.get_utcnow,
304
+ default=django.utils.timezone.now,
305
305
  validators=[
306
306
  edc_protocol.validators.datetime_not_before_study_start,
307
307
  edc_model.validators.date.datetime_not_future,
@@ -362,14 +362,14 @@ class Migration(migrations.Migration):
362
362
  "created",
363
363
  models.DateTimeField(
364
364
  blank=True,
365
- default=django_audit_fields.models.audit_model_mixin.utcnow,
365
+ default=django.utils.timezone.now,
366
366
  ),
367
367
  ),
368
368
  (
369
369
  "modified",
370
370
  models.DateTimeField(
371
371
  blank=True,
372
- default=django_audit_fields.models.audit_model_mixin.utcnow,
372
+ default=django.utils.timezone.now,
373
373
  ),
374
374
  ),
375
375
  (
@@ -453,7 +453,7 @@ class Migration(migrations.Migration):
453
453
  (
454
454
  "onschedule_datetime",
455
455
  models.DateTimeField(
456
- default=edc_utils.date.get_utcnow,
456
+ default=django.utils.timezone.now,
457
457
  validators=[
458
458
  edc_protocol.validators.datetime_not_before_study_start,
459
459
  edc_model.validators.date.datetime_not_future,
@@ -0,0 +1,229 @@
1
+ # Generated by Django 5.2.6 on 2025-09-17 16:53
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("edc_visit_schedule", "0018_alter_historicalonschedule_revision_and_more"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="historicalonschedule",
15
+ name="device_created",
16
+ field=models.CharField(
17
+ blank=True, default="", max_length=10, verbose_name="Device created"
18
+ ),
19
+ ),
20
+ migrations.AlterField(
21
+ model_name="historicalonschedule",
22
+ name="device_modified",
23
+ field=models.CharField(
24
+ blank=True, default="", max_length=10, verbose_name="Device modified"
25
+ ),
26
+ ),
27
+ migrations.AlterField(
28
+ model_name="historicalonschedule",
29
+ name="locale_created",
30
+ field=models.CharField(
31
+ blank=True,
32
+ default="",
33
+ help_text="Auto-updated by Modeladmin",
34
+ max_length=10,
35
+ verbose_name="Locale created",
36
+ ),
37
+ ),
38
+ migrations.AlterField(
39
+ model_name="historicalonschedule",
40
+ name="locale_modified",
41
+ field=models.CharField(
42
+ blank=True,
43
+ default="",
44
+ help_text="Auto-updated by Modeladmin",
45
+ max_length=10,
46
+ verbose_name="Locale modified",
47
+ ),
48
+ ),
49
+ migrations.AlterField(
50
+ model_name="historicalvisitschedule",
51
+ name="device_created",
52
+ field=models.CharField(
53
+ blank=True, default="", max_length=10, verbose_name="Device created"
54
+ ),
55
+ ),
56
+ migrations.AlterField(
57
+ model_name="historicalvisitschedule",
58
+ name="device_modified",
59
+ field=models.CharField(
60
+ blank=True, default="", max_length=10, verbose_name="Device modified"
61
+ ),
62
+ ),
63
+ migrations.AlterField(
64
+ model_name="historicalvisitschedule",
65
+ name="locale_created",
66
+ field=models.CharField(
67
+ blank=True,
68
+ default="",
69
+ help_text="Auto-updated by Modeladmin",
70
+ max_length=10,
71
+ verbose_name="Locale created",
72
+ ),
73
+ ),
74
+ migrations.AlterField(
75
+ model_name="historicalvisitschedule",
76
+ name="locale_modified",
77
+ field=models.CharField(
78
+ blank=True,
79
+ default="",
80
+ help_text="Auto-updated by Modeladmin",
81
+ max_length=10,
82
+ verbose_name="Locale modified",
83
+ ),
84
+ ),
85
+ migrations.AlterField(
86
+ model_name="offschedule",
87
+ name="device_created",
88
+ field=models.CharField(
89
+ blank=True, default="", max_length=10, verbose_name="Device created"
90
+ ),
91
+ ),
92
+ migrations.AlterField(
93
+ model_name="offschedule",
94
+ name="device_modified",
95
+ field=models.CharField(
96
+ blank=True, default="", max_length=10, verbose_name="Device modified"
97
+ ),
98
+ ),
99
+ migrations.AlterField(
100
+ model_name="offschedule",
101
+ name="locale_created",
102
+ field=models.CharField(
103
+ blank=True,
104
+ default="",
105
+ help_text="Auto-updated by Modeladmin",
106
+ max_length=10,
107
+ verbose_name="Locale created",
108
+ ),
109
+ ),
110
+ migrations.AlterField(
111
+ model_name="offschedule",
112
+ name="locale_modified",
113
+ field=models.CharField(
114
+ blank=True,
115
+ default="",
116
+ help_text="Auto-updated by Modeladmin",
117
+ max_length=10,
118
+ verbose_name="Locale modified",
119
+ ),
120
+ ),
121
+ migrations.AlterField(
122
+ model_name="onschedule",
123
+ name="device_created",
124
+ field=models.CharField(
125
+ blank=True, default="", max_length=10, verbose_name="Device created"
126
+ ),
127
+ ),
128
+ migrations.AlterField(
129
+ model_name="onschedule",
130
+ name="device_modified",
131
+ field=models.CharField(
132
+ blank=True, default="", max_length=10, verbose_name="Device modified"
133
+ ),
134
+ ),
135
+ migrations.AlterField(
136
+ model_name="onschedule",
137
+ name="locale_created",
138
+ field=models.CharField(
139
+ blank=True,
140
+ default="",
141
+ help_text="Auto-updated by Modeladmin",
142
+ max_length=10,
143
+ verbose_name="Locale created",
144
+ ),
145
+ ),
146
+ migrations.AlterField(
147
+ model_name="onschedule",
148
+ name="locale_modified",
149
+ field=models.CharField(
150
+ blank=True,
151
+ default="",
152
+ help_text="Auto-updated by Modeladmin",
153
+ max_length=10,
154
+ verbose_name="Locale modified",
155
+ ),
156
+ ),
157
+ migrations.AlterField(
158
+ model_name="subjectschedulehistory",
159
+ name="device_created",
160
+ field=models.CharField(
161
+ blank=True, default="", max_length=10, verbose_name="Device created"
162
+ ),
163
+ ),
164
+ migrations.AlterField(
165
+ model_name="subjectschedulehistory",
166
+ name="device_modified",
167
+ field=models.CharField(
168
+ blank=True, default="", max_length=10, verbose_name="Device modified"
169
+ ),
170
+ ),
171
+ migrations.AlterField(
172
+ model_name="subjectschedulehistory",
173
+ name="locale_created",
174
+ field=models.CharField(
175
+ blank=True,
176
+ default="",
177
+ help_text="Auto-updated by Modeladmin",
178
+ max_length=10,
179
+ verbose_name="Locale created",
180
+ ),
181
+ ),
182
+ migrations.AlterField(
183
+ model_name="subjectschedulehistory",
184
+ name="locale_modified",
185
+ field=models.CharField(
186
+ blank=True,
187
+ default="",
188
+ help_text="Auto-updated by Modeladmin",
189
+ max_length=10,
190
+ verbose_name="Locale modified",
191
+ ),
192
+ ),
193
+ migrations.AlterField(
194
+ model_name="visitschedule",
195
+ name="device_created",
196
+ field=models.CharField(
197
+ blank=True, default="", max_length=10, verbose_name="Device created"
198
+ ),
199
+ ),
200
+ migrations.AlterField(
201
+ model_name="visitschedule",
202
+ name="device_modified",
203
+ field=models.CharField(
204
+ blank=True, default="", max_length=10, verbose_name="Device modified"
205
+ ),
206
+ ),
207
+ migrations.AlterField(
208
+ model_name="visitschedule",
209
+ name="locale_created",
210
+ field=models.CharField(
211
+ blank=True,
212
+ default="",
213
+ help_text="Auto-updated by Modeladmin",
214
+ max_length=10,
215
+ verbose_name="Locale created",
216
+ ),
217
+ ),
218
+ migrations.AlterField(
219
+ model_name="visitschedule",
220
+ name="locale_modified",
221
+ field=models.CharField(
222
+ blank=True,
223
+ default="",
224
+ help_text="Auto-updated by Modeladmin",
225
+ max_length=10,
226
+ verbose_name="Locale modified",
227
+ ),
228
+ ),
229
+ ]