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,65 @@
1
+ # Generated by Django 5.2.6 on 2025-09-18 00:24
2
+
3
+ import django.utils.timezone
4
+ import edc_model.validators.date
5
+ import edc_protocol.validators
6
+ from django.db import migrations, models
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+
11
+ dependencies = [
12
+ (
13
+ "edc_visit_schedule",
14
+ "0019_alter_historicalonschedule_device_created_and_more",
15
+ ),
16
+ ]
17
+
18
+ operations = [
19
+ migrations.AlterField(
20
+ model_name="historicalonschedule",
21
+ name="onschedule_datetime",
22
+ field=models.DateTimeField(
23
+ default=django.utils.timezone.now,
24
+ validators=[
25
+ edc_protocol.validators.datetime_not_before_study_start,
26
+ edc_model.validators.date.datetime_not_future,
27
+ ],
28
+ ),
29
+ ),
30
+ migrations.AlterField(
31
+ model_name="offschedule",
32
+ name="offschedule_datetime",
33
+ field=models.DateTimeField(
34
+ default=django.utils.timezone.now,
35
+ validators=[
36
+ edc_protocol.validators.datetime_not_before_study_start,
37
+ edc_model.validators.date.datetime_not_future,
38
+ ],
39
+ verbose_name="Date and time subject taken off schedule",
40
+ ),
41
+ ),
42
+ migrations.AlterField(
43
+ model_name="onschedule",
44
+ name="onschedule_datetime",
45
+ field=models.DateTimeField(
46
+ default=django.utils.timezone.now,
47
+ validators=[
48
+ edc_protocol.validators.datetime_not_before_study_start,
49
+ edc_model.validators.date.datetime_not_future,
50
+ ],
51
+ ),
52
+ ),
53
+ migrations.AlterField(
54
+ model_name="subjectschedulehistory",
55
+ name="schedule_status",
56
+ field=models.CharField(
57
+ choices=[
58
+ ("onschedule", "On schedule"),
59
+ ("offschedule", "Off schedule"),
60
+ ],
61
+ default="",
62
+ max_length=15,
63
+ ),
64
+ ),
65
+ ]
@@ -6,13 +6,14 @@ from zoneinfo import ZoneInfo
6
6
  from django.conf import settings
7
7
  from django.core.exceptions import ImproperlyConfigured
8
8
  from django.db import models
9
+ from django.utils import timezone
9
10
 
10
11
  from edc_identifier.managers import SubjectIdentifierManager
11
12
  from edc_identifier.model_mixins import UniqueSubjectIdentifierFieldMixin
12
13
  from edc_model.validators import datetime_not_future
13
14
  from edc_protocol.validators import datetime_not_before_study_start
14
15
  from edc_sites.managers import CurrentSiteManager as BaseCurrentSiteManager
15
- from edc_utils import convert_php_dateformat, get_utcnow
16
+ from edc_utils import convert_php_dateformat
16
17
 
17
18
  from ..site_visit_schedules import site_visit_schedules
18
19
 
@@ -36,7 +37,7 @@ class OffScheduleModelMixin(UniqueSubjectIdentifierFieldMixin, models.Model):
36
37
  offschedule_datetime = models.DateTimeField(
37
38
  verbose_name="Date and time subject taken off schedule",
38
39
  validators=[datetime_not_before_study_start, datetime_not_future],
39
- default=get_utcnow,
40
+ default=timezone.now,
40
41
  )
41
42
 
42
43
  report_datetime = models.DateTimeField(editable=False)
@@ -62,11 +63,11 @@ class OffScheduleModelMixin(UniqueSubjectIdentifierFieldMixin, models.Model):
62
63
  self.offschedule_datetime = getattr(self, self.offschedule_datetime_field_attr)
63
64
  try:
64
65
  self.offschedule_datetime.date()
65
- except AttributeError:
66
+ except AttributeError as e:
66
67
  raise ImproperlyConfigured(
67
68
  f"Field class must be DateTimeField. See {self.__class__}."
68
69
  f"{self.offschedule_datetime_field_attr}."
69
- )
70
+ ) from e
70
71
 
71
72
  datetime_not_before_study_start(self.offschedule_datetime)
72
73
  datetime_not_future(self.offschedule_datetime)
@@ -5,13 +5,14 @@ from zoneinfo import ZoneInfo
5
5
 
6
6
  from django.conf import settings
7
7
  from django.db import models
8
+ from django.utils import timezone
8
9
 
9
10
  from edc_identifier.managers import SubjectIdentifierManager
10
11
  from edc_identifier.model_mixins import UniqueSubjectIdentifierFieldMixin
11
12
  from edc_model.models import HistoricalRecords
12
13
  from edc_model.validators import datetime_not_future
13
14
  from edc_protocol.validators import datetime_not_before_study_start
14
- from edc_utils import convert_php_dateformat, get_utcnow
15
+ from edc_utils import convert_php_dateformat
15
16
 
16
17
  from ..site_visit_schedules import site_visit_schedules
17
18
 
@@ -25,8 +26,8 @@ if TYPE_CHECKING:
25
26
  class OnScheduleManager(SubjectIdentifierManager):
26
27
  def put_on_schedule(
27
28
  self,
28
- subject_identifier: str = None,
29
- onschedule_datetime: datetime = None,
29
+ subject_identifier: str,
30
+ onschedule_datetime: datetime,
30
31
  skip_get_current_site: bool | None = None,
31
32
  ) -> None:
32
33
  """Puts a subject on the schedule associated with this
@@ -51,7 +52,7 @@ class OnScheduleModelMixin(UniqueSubjectIdentifierFieldMixin, models.Model):
51
52
 
52
53
  onschedule_datetime = models.DateTimeField(
53
54
  validators=[datetime_not_before_study_start, datetime_not_future],
54
- default=get_utcnow,
55
+ default=timezone.now,
55
56
  )
56
57
 
57
58
  report_datetime = models.DateTimeField(editable=False)
@@ -2,7 +2,7 @@ from django.db import models
2
2
 
3
3
 
4
4
  class VisitCodeFieldsModelMixin(models.Model):
5
- visit_code = models.CharField(max_length=25, null=True, editable=False)
5
+ visit_code = models.CharField(max_length=25, default="", editable=False)
6
6
 
7
7
  visit_code_sequence = models.IntegerField(
8
8
  verbose_name="Sequence",
@@ -1,6 +1,7 @@
1
1
  from django.apps import apps as django_apps
2
2
  from django.db import models
3
3
  from django.db.models import Q, UniqueConstraint
4
+ from django.utils import timezone
4
5
 
5
6
  from edc_identifier.model_mixins import NonUniqueSubjectIdentifierFieldMixin
6
7
  from edc_model.models import BaseUuidModel
@@ -8,7 +9,6 @@ from edc_model.validators import datetime_not_future
8
9
  from edc_protocol.validators import datetime_not_before_study_start
9
10
  from edc_sites.managers import CurrentSiteManager
10
11
  from edc_sites.model_mixins import SiteModelMixin
11
- from edc_utils import get_utcnow
12
12
 
13
13
  from ..choices import SCHEDULE_STATUS
14
14
  from ..model_mixins import VisitScheduleFieldsModelMixin
@@ -32,7 +32,7 @@ class SubjectScheduleModelManager(models.Manager):
32
32
  relative to the report_datetime.
33
33
  """
34
34
  onschedules = []
35
- report_datetime = report_datetime or get_utcnow()
35
+ report_datetime = report_datetime or timezone.now()
36
36
  qs = self.filter(
37
37
  Q(subject_identifier=subject_identifier),
38
38
  Q(onschedule_datetime__lte=report_datetime),
@@ -67,7 +67,7 @@ class SubjectScheduleHistory(
67
67
  validators=[datetime_not_before_study_start, datetime_not_future], null=True
68
68
  )
69
69
 
70
- schedule_status = models.CharField(max_length=15, choices=SCHEDULE_STATUS, null=True)
70
+ schedule_status = models.CharField(max_length=15, choices=SCHEDULE_STATUS, default="")
71
71
 
72
72
  objects = SubjectScheduleModelManager()
73
73
 
@@ -101,12 +101,12 @@ class SubjectScheduleHistory(
101
101
  return django_apps.get_model(self.offschedule_model)
102
102
 
103
103
  class Meta(BaseUuidModel.Meta, NonUniqueSubjectIdentifierFieldMixin.Meta):
104
- constraints = [
104
+ constraints = (
105
105
  UniqueConstraint(
106
106
  fields=["subject_identifier", "visit_schedule_name", "schedule_name"],
107
107
  name="%(app_label)s_%(class)s_subject_uniq",
108
- )
109
- ]
108
+ ),
109
+ )
110
110
  indexes = (
111
111
  *BaseUuidModel.Meta.indexes,
112
112
  *NonUniqueSubjectIdentifierFieldMixin.Meta.indexes,
@@ -39,7 +39,7 @@ class VisitCollection(OrderedCollection):
39
39
  except TypeError as e:
40
40
  raise VisitCollectionError(
41
41
  f"Invalid visit.rbase. visit.rbase={visit.rbase}. See {visit!r}. Got {e}."
42
- )
42
+ ) from e
43
43
  else:
44
44
  visit.timepoint_datetime = timepoint_datetime
45
45
  timepoint_dates.update({visit: visit.timepoint_datetime})
@@ -163,10 +163,10 @@ class SiteVisitSchedules:
163
163
  for schedule in visit_schedule.schedules.values():
164
164
  try:
165
165
  model_name = getattr(schedule, attr)
166
- except (AttributeError, TypeError):
166
+ except (AttributeError, TypeError) as e:
167
167
  raise SiteVisitScheduleError(
168
168
  f"Invalid attr for Schedule. See {schedule}. Got {attr}."
169
- )
169
+ ) from e
170
170
  if model_name and model_name == model:
171
171
  ret.append([visit_schedule, schedule])
172
172
  if not ret:
@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING
6
6
  from django.apps import apps as django_apps
7
7
  from django.conf import settings
8
8
  from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
9
+ from django.utils import timezone
9
10
 
10
11
  from edc_appointment.constants import COMPLETE_APPT, IN_PROGRESS_APPT
11
12
  from edc_appointment.creators import AppointmentsCreator
@@ -14,7 +15,7 @@ from edc_consent.exceptions import ConsentDefinitionError
14
15
  from edc_consent.site_consents import site_consents
15
16
  from edc_sites.site import sites as site_sites
16
17
  from edc_sites.utils import valid_site_for_subject_or_raise
17
- from edc_utils import convert_php_dateformat, formatted_datetime, get_utcnow
18
+ from edc_utils import convert_php_dateformat, formatted_datetime
18
19
  from edc_utils.date import to_local
19
20
 
20
21
  from .constants import OFF_SCHEDULE, ON_SCHEDULE
@@ -112,7 +113,7 @@ class SubjectSchedule:
112
113
  Appointment are created here by calling the
113
114
  appointments_creator_cls.
114
115
  """
115
- onschedule_datetime = onschedule_datetime or get_utcnow()
116
+ onschedule_datetime = onschedule_datetime or timezone.now()
116
117
  if not consent_definition and len(self.schedule.consent_definitions) == 1:
117
118
  consent_definition = self.schedule.consent_definitions[0]
118
119
  elif not consent_definition:
@@ -375,13 +376,13 @@ class SubjectSchedule:
375
376
  in_date_range = (
376
377
  onschedule_obj.onschedule_datetime
377
378
  <= report_datetime
378
- <= (offschedule_datetime or get_utcnow())
379
+ <= (offschedule_datetime or timezone.now())
379
380
  )
380
381
  else:
381
382
  in_date_range = (
382
383
  onschedule_obj.onschedule_datetime.date()
383
384
  <= report_datetime.date()
384
- <= (offschedule_datetime or get_utcnow()).date()
385
+ <= (offschedule_datetime or timezone.now()).date()
385
386
  )
386
387
 
387
388
  if offschedule_datetime and not in_date_range:
@@ -3,8 +3,7 @@ from __future__ import annotations
3
3
  from typing import TYPE_CHECKING, Any
4
4
 
5
5
  from django.core.exceptions import ObjectDoesNotExist
6
-
7
- from edc_utils import get_utcnow
6
+ from django.utils import timezone
8
7
 
9
8
  from .site_visit_schedules import site_visit_schedules
10
9
 
@@ -39,7 +38,7 @@ class VisitScheduleViewMixin:
39
38
  else:
40
39
  self.onschedule_models.append(onschedule_model_obj)
41
40
  self.visit_schedules.update({visit_schedule.name: visit_schedule})
42
- if schedule.is_onschedule(self.subject_identifier, get_utcnow()):
41
+ if schedule.is_onschedule(self.subject_identifier, timezone.now()):
43
42
  self.current_schedule = schedule
44
43
  self.current_visit_schedule = visit_schedule
45
44
  self.current_onschedule_model = onschedule_model_obj
@@ -5,9 +5,10 @@ from decimal import Decimal
5
5
  from typing import TYPE_CHECKING
6
6
 
7
7
  from django.apps import apps as django_apps
8
+ from django.utils import timezone
8
9
 
9
10
  from edc_facility.utils import get_default_facility_name, get_facility
10
- from edc_utils import get_utcnow, to_local
11
+ from edc_utils import to_local
11
12
 
12
13
  from .crf_collection import CrfCollection
13
14
  from .forms_collection import FormsCollection
@@ -172,7 +173,7 @@ class Visit:
172
173
  timepoint=self.timepoint,
173
174
  base_timepoint=self.base_timepoint,
174
175
  )
175
- utcnow = get_utcnow()
176
+ utcnow = timezone.now()
176
177
  self.validate_rlower_late(utcnow)
177
178
  self.validate_rupper_late(utcnow)
178
179
  self.title = title or f"Visit {self.code}"
@@ -21,8 +21,8 @@ import edc_model.validators.date
21
21
  import edc_model_fields.fields.other_charfield
22
22
  import edc_protocol.validators
23
23
  import edc_sites.models
24
- import edc_utils.date
25
24
  import edc_visit_tracking.managers
25
+ import django.utils.timezone
26
26
 
27
27
 
28
28
  class Migration(migrations.Migration):
@@ -52,14 +52,14 @@ class Migration(migrations.Migration):
52
52
  "created",
53
53
  models.DateTimeField(
54
54
  blank=True,
55
- default=django_audit_fields.models.audit_model_mixin.utcnow,
55
+ default=django.utils.timezone.now,
56
56
  ),
57
57
  ),
58
58
  (
59
59
  "modified",
60
60
  models.DateTimeField(
61
61
  blank=True,
62
- default=django_audit_fields.models.audit_model_mixin.utcnow,
62
+ default=django.utils.timezone.now,
63
63
  ),
64
64
  ),
65
65
  (
@@ -146,7 +146,7 @@ class Migration(migrations.Migration):
146
146
  (
147
147
  "report_datetime",
148
148
  models.DateTimeField(
149
- default=edc_utils.date.get_utcnow,
149
+ default=django.utils.timezone.now,
150
150
  help_text="Date and time of this report",
151
151
  validators=[
152
152
  edc_protocol.validators.datetime_not_before_study_start,
@@ -414,14 +414,14 @@ class Migration(migrations.Migration):
414
414
  "created",
415
415
  models.DateTimeField(
416
416
  blank=True,
417
- default=django_audit_fields.models.audit_model_mixin.utcnow,
417
+ default=django.utils.timezone.now,
418
418
  ),
419
419
  ),
420
420
  (
421
421
  "modified",
422
422
  models.DateTimeField(
423
423
  blank=True,
424
- default=django_audit_fields.models.audit_model_mixin.utcnow,
424
+ default=django.utils.timezone.now,
425
425
  ),
426
426
  ),
427
427
  (
@@ -483,7 +483,7 @@ class Migration(migrations.Migration):
483
483
  (
484
484
  "report_datetime",
485
485
  models.DateTimeField(
486
- default=edc_utils.date.get_utcnow,
486
+ default=django.utils.timezone.now,
487
487
  help_text="If reporting today, use today's date/time, otherwise use the date/time this information was reported.",
488
488
  validators=[
489
489
  edc_protocol.validators.datetime_not_before_study_start,
@@ -673,14 +673,14 @@ class Migration(migrations.Migration):
673
673
  "created",
674
674
  models.DateTimeField(
675
675
  blank=True,
676
- default=django_audit_fields.models.audit_model_mixin.utcnow,
676
+ default=django.utils.timezone.now,
677
677
  ),
678
678
  ),
679
679
  (
680
680
  "modified",
681
681
  models.DateTimeField(
682
682
  blank=True,
683
- default=django_audit_fields.models.audit_model_mixin.utcnow,
683
+ default=django.utils.timezone.now,
684
684
  ),
685
685
  ),
686
686
  (
@@ -766,7 +766,7 @@ class Migration(migrations.Migration):
766
766
  (
767
767
  "report_datetime",
768
768
  models.DateTimeField(
769
- default=edc_utils.date.get_utcnow,
769
+ default=django.utils.timezone.now,
770
770
  help_text="Date and time of this report",
771
771
  validators=[
772
772
  edc_protocol.validators.datetime_not_before_study_start,
@@ -1033,14 +1033,14 @@ class Migration(migrations.Migration):
1033
1033
  "created",
1034
1034
  models.DateTimeField(
1035
1035
  blank=True,
1036
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1036
+ default=django.utils.timezone.now,
1037
1037
  ),
1038
1038
  ),
1039
1039
  (
1040
1040
  "modified",
1041
1041
  models.DateTimeField(
1042
1042
  blank=True,
1043
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1043
+ default=django.utils.timezone.now,
1044
1044
  ),
1045
1045
  ),
1046
1046
  (
@@ -1103,7 +1103,7 @@ class Migration(migrations.Migration):
1103
1103
  (
1104
1104
  "report_datetime",
1105
1105
  models.DateTimeField(
1106
- default=edc_utils.date.get_utcnow,
1106
+ default=django.utils.timezone.now,
1107
1107
  help_text="If reporting today, use today's date/time, otherwise use the date/time this information was reported.",
1108
1108
  validators=[
1109
1109
  edc_protocol.validators.datetime_not_before_study_start,