clinicedc 2.0.5__py3-none-any.whl → 2.0.7__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 (387) hide show
  1. {clinicedc-2.0.5.dist-info → clinicedc-2.0.7.dist-info}/METADATA +2 -2
  2. {clinicedc-2.0.5.dist-info → clinicedc-2.0.7.dist-info}/RECORD +387 -336
  3. edc_action_item/action.py +1 -1
  4. edc_action_item/action_item_notification.py +2 -2
  5. edc_action_item/create_action_item.py +1 -1
  6. edc_action_item/decorators.py +1 -1
  7. edc_action_item/migrations/0001_initial.py +21 -22
  8. edc_action_item/migrations/0006_auto_20180707_1659.py +4 -4
  9. edc_action_item/migrations/0008_auto_20180809_0303.py +4 -4
  10. edc_action_item/migrations/0015_auto_20190114_0250.py +4 -4
  11. edc_action_item/migrations/0017_auto_20190305_0123.py +11 -30
  12. edc_action_item/migrations/0030_edcpermissions.py +3 -2
  13. edc_action_item/migrations/0039_alter_actionitem_auto_created_comment_and_more.py +398 -0
  14. edc_action_item/migrations/0040_alter_actionitem_report_datetime_and_more.py +34 -0
  15. edc_action_item/models/action_item.py +9 -4
  16. edc_action_item/models/action_model_mixin.py +4 -4
  17. edc_action_item/models/reference.py +2 -2
  18. edc_action_item/post_migrate_signals.py +1 -1
  19. edc_action_item/send_email.py +0 -85
  20. edc_adherence/migrations/0005_alter_nonadherencereasons_extra_value_and_more.py +36 -0
  21. edc_adherence/model_mixins.py +1 -1
  22. edc_adverse_event/migrations/0001_initial.py +5 -4
  23. edc_adverse_event/migrations/0002_auto_20190802_0059.py +3 -2
  24. edc_adverse_event/migrations/0008_auto_20220825_0451.py +3 -2
  25. edc_adverse_event/migrations/0009_auto_20220907_0157.py +3 -2
  26. edc_adverse_event/migrations/0016_alter_aeactionclassification_device_created_and_more.py +285 -0
  27. edc_adverse_event/model_mixins/ae_followup/ae_followup_fields_model_mixin.py +2 -2
  28. edc_adverse_event/model_mixins/ae_initial/ae_initial_fields_model_mixin.py +6 -5
  29. edc_adverse_event/model_mixins/ae_special_interest/aesi_fields_model_mixin.py +2 -2
  30. edc_adverse_event/model_mixins/ae_susar/ae_susar_fields_model_mixin.py +2 -2
  31. edc_adverse_event/model_mixins/ae_tmg/ae_tmg_fields_model_mixin.py +15 -11
  32. edc_adverse_event/model_mixins/death_report/death_report_model_mixin.py +5 -4
  33. edc_adverse_event/model_mixins/death_report/death_report_tmg_model_mixin.py +6 -3
  34. edc_adverse_event/model_mixins/death_report/simple_death_report_model_mixin.py +2 -2
  35. edc_adverse_event/model_mixins/hospitaization/hospitalization_model_mixin.py +4 -3
  36. edc_adverse_event/modeladmin_mixins/death_report_admin_mixin.py +3 -3
  37. edc_adverse_event/models/signals.py +7 -7
  38. edc_adverse_event/templatetags/edc_adverse_event_extras.py +5 -4
  39. edc_adverse_event/view_mixins/ae/ae_listboard_view_mixin.py +3 -5
  40. edc_adverse_event/view_mixins/ae/death_report_listboard_view_mixin.py +6 -8
  41. edc_adverse_event/view_mixins/tmg/tmg_ae_listboard_view_mixin.py +2 -2
  42. edc_adverse_event/views/tmg/summary_listboard_view.py +3 -2
  43. edc_appointment/admin/appointment_admin.py +2 -2
  44. edc_appointment/admin/list_filters.py +2 -2
  45. edc_appointment/form_validators/appointment_form_validator.py +108 -82
  46. edc_appointment/migrations/0003_auto_20161127_2226.py +5 -6
  47. edc_appointment/migrations/0006_auto_20170106_2118.py +5 -5
  48. edc_appointment/migrations/0018_auto_20190305_0123.py +5 -12
  49. edc_appointment/migrations/0050_alter_appointment_appt_type_and_more.py +220 -0
  50. edc_appointment/model_mixins/appointment_fields_model_mixin.py +1 -2
  51. edc_appointment/model_mixins/window_period_model_mixin.py +6 -7
  52. edc_appointment/models/signals.py +44 -35
  53. edc_appointment/view_utils/appointment_button.py +2 -2
  54. edc_auth/admin/user_admin.py +1 -1
  55. edc_auth/migrations/0001_squashed_0033_alter_userprofile_is_multisite_viewer.py +5 -5
  56. edc_auth/migrations/0012_auto_20191026_0034.py +3 -2
  57. edc_auth/migrations/0013_auto_20191026_0055.py +3 -2
  58. edc_auth/migrations/0025_permissions.py +3 -2
  59. edc_auth/migrations/0035_alter_edcpermissions_device_created_and_more.py +85 -0
  60. edc_auth/post_migrate_signals.py +1 -1
  61. edc_consent/actions.py +4 -5
  62. edc_consent/migrations/0001_initial.py +3 -2
  63. edc_consent/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
  64. edc_consent/model_mixins/consent_extension_model_mixin.py +4 -5
  65. edc_consent/model_mixins/requires_consent_fields_model_mixin.py +2 -2
  66. edc_consent/utils.py +1 -1
  67. edc_crf/migrations/0001_initial.py +3 -2
  68. edc_crf/migrations/0009_alter_crfstatus_device_created_and_more.py +54 -0
  69. edc_dashboard/migrations/0001_initial.py +3 -2
  70. edc_dashboard/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
  71. edc_dashboard/templatetags/edc_dashboard_extras.py +3 -2
  72. edc_data_manager/action_items.py +4 -6
  73. edc_data_manager/admin/actions.py +5 -5
  74. edc_data_manager/handlers/handlers.py +6 -7
  75. edc_data_manager/migrations/0001_initial.py +19 -19
  76. edc_data_manager/migrations/0025_edcpermissions.py +3 -2
  77. edc_data_manager/migrations/0040_alter_datadictionary_device_created_and_more.py +327 -0
  78. edc_data_manager/migrations/0041_alter_dataquery_dm_user_and_more.py +164 -0
  79. edc_data_manager/models/data_query.py +5 -5
  80. edc_data_manager/models/model_mixins.py +8 -8
  81. edc_data_manager/rule/rule_runner.py +4 -3
  82. edc_document_status/model_mixins.py +1 -1
  83. edc_egfr/egfr.py +11 -7
  84. edc_egfr/model_mixins/egfr_model_mixin.py +3 -7
  85. edc_export/admin/data_request_admin.py +2 -2
  86. edc_export/archive_exporter.py +4 -3
  87. edc_export/files_archiver.py +3 -2
  88. edc_export/migrations/0001_initial.py +26 -26
  89. edc_export/migrations/0004_auto_20190305_0123.py +25 -72
  90. edc_export/migrations/0013_edcpermissions.py +3 -2
  91. edc_export/migrations/0022_alter_datarequest_description_and_more.py +611 -0
  92. edc_export/migrations/0023_alter_datarequesthistory_archive_filename_and_more.py +29 -0
  93. edc_export/model_exporter/file_history_updater.py +10 -10
  94. edc_export/model_exporter/model_exporter.py +13 -14
  95. edc_export/model_exporter/object_history_helpers.py +2 -2
  96. edc_export/models/data_request_history.py +4 -4
  97. edc_export/utils.py +10 -15
  98. edc_facility/facility.py +10 -15
  99. edc_facility/import_holidays.py +13 -13
  100. edc_facility/migrations/0005_healthfacility_healthfacilitytypes_and_more.py +8 -7
  101. edc_facility/migrations/0016_alter_healthfacility_device_created_and_more.py +139 -0
  102. edc_facility/migrations/0017_alter_healthfacility_gps_and_more.py +54 -0
  103. edc_facility/model_mixins.py +5 -5
  104. edc_form_runners/form_runner.py +3 -5
  105. edc_form_runners/migrations/0001_initial.py +3 -2
  106. edc_form_runners/migrations/0005_alter_issue_device_created_and_more.py +49 -0
  107. edc_identifier/migrations/0001_squashed_0018_auto_20180128_1054.py +3 -3
  108. edc_identifier/migrations/0002_auto_20190305_0123.py +3 -6
  109. edc_identifier/migrations/0006_auto_20161127_2226.py +15 -15
  110. edc_identifier/migrations/0007_auto_20161204_2227.py +3 -3
  111. edc_identifier/migrations/0009_auto_20161221_2323.py +3 -5
  112. edc_identifier/migrations/0010_auto_20170112_0602.py +17 -17
  113. edc_identifier/migrations/0011_alter_identifiermodel_device_created_and_more.py +79 -0
  114. edc_identifier/model_mixins.py +1 -1
  115. edc_identifier/models.py +9 -9
  116. edc_identifier/simple_identifier.py +1 -3
  117. edc_identifier/subject_identifier.py +3 -2
  118. edc_lab/migrations/0001_initial.py +29 -29
  119. edc_lab/migrations/0008_auto_20170921_0719.py +3 -3
  120. edc_lab/migrations/0010_auto_20171127_1541.py +15 -15
  121. edc_lab/migrations/0012_auto_20180114_1438.py +3 -3
  122. edc_lab/migrations/0019_auto_20190305_0123.py +43 -127
  123. edc_lab/migrations/0036_alter_aliquot_comment_alter_aliquot_device_created_and_more.py +1139 -0
  124. edc_lab/migrations/0037_alter_historicalorder_order_datetime_and_more.py +31 -0
  125. edc_lab/model_mixins/aliquot/aliquot_identifier_model_mixin.py +2 -2
  126. edc_lab/model_mixins/aliquot/aliquot_model_mixin.py +2 -2
  127. edc_lab/model_mixins/panel_model_mixin.py +18 -7
  128. edc_lab/model_mixins/requisition/crf_with_requisition_model_mixin.py +2 -4
  129. edc_lab/model_mixins/requisition/requisition_model_mixin.py +7 -8
  130. edc_lab/model_mixins/requisition/requisition_verify_model_mixin.py +1 -1
  131. edc_lab/model_mixins/result/result_item_model_mixin.py +4 -4
  132. edc_lab/model_mixins/shipping/manifest_model_mixin.py +4 -5
  133. edc_lab/model_mixins/shipping/verify_model_mixin.py +4 -6
  134. edc_lab/models/box.py +1 -1
  135. edc_lab/models/box_item.py +6 -7
  136. edc_lab/models/manifest/manifest.py +1 -1
  137. edc_lab/models/manifest/manifest_item.py +6 -6
  138. edc_lab/models/manifest/shipper.py +3 -4
  139. edc_lab/models/order.py +6 -4
  140. edc_lab/models/panel.py +4 -4
  141. edc_lab/models/result.py +2 -2
  142. edc_lab/models/result_item.py +2 -2
  143. edc_lab_dashboard/migrations/0001_initial.py +3 -2
  144. edc_lab_dashboard/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
  145. edc_lab_dashboard/views/action_views/receive_view.py +2 -2
  146. edc_lab_dashboard/views/action_views/verify_box_item_view.py +2 -2
  147. edc_lab_results/model_mixins/blood_result_model_mixin.py +7 -7
  148. edc_lab_results/model_mixins/fbg_model_mixin.py +3 -3
  149. edc_lab_results/model_mixins/glucose_model_mixin.py +3 -3
  150. edc_lab_results/model_mixins/hba1c_model_mixin.py +3 -3
  151. edc_label/migrations/0001_initial.py +3 -2
  152. edc_label/migrations/0007_alter_zpllabeltemplates_device_created_and_more.py +49 -0
  153. edc_list_data/list_model_maker.py +2 -2
  154. edc_list_data/load_list_data.py +11 -14
  155. edc_list_data/model_mixins.py +12 -4
  156. edc_list_data/preload_data.py +3 -3
  157. edc_listboard/migrations/0001_initial.py +3 -2
  158. edc_listboard/migrations/0007_alter_listboard_device_created_and_more.py +49 -0
  159. edc_locator/migrations/0001_initial.py +7 -7
  160. edc_locator/migrations/0018_auto_20190305_0123.py +5 -12
  161. edc_locator/migrations/0040_alter_historicalsubjectlocator_action_identifier_and_more.py +187 -0
  162. edc_locator/migrations/0041_alter_historicalsubjectlocator_report_datetime_and_more.py +27 -0
  163. edc_locator/model_mixins/locator_model_mixin.py +2 -2
  164. edc_locator/model_mixins/subject_contact_fields_mixin.py +1 -1
  165. edc_locator/modeladmin_mixins.py +5 -4
  166. edc_ltfu/model_mixins.py +7 -5
  167. edc_metadata/metadata_rules/decorators.py +1 -1
  168. edc_metadata/migrations/0002_auto_20161127_2226.py +5 -5
  169. edc_metadata/migrations/0005_auto_20170112_0602.py +5 -5
  170. edc_metadata/migrations/0011_auto_20190305_0123.py +5 -12
  171. edc_metadata/migrations/0031_alter_crfmetadata_device_created_and_more.py +120 -0
  172. edc_metadata/model_mixins/updates/updates_crf_metadata_model_mixin.py +1 -1
  173. edc_metadata/model_mixins/updates/updates_requisition_metadata_model_mixin.py +1 -1
  174. edc_metadata/models/crf_metadata.py +5 -5
  175. edc_metadata/models/crf_metadata_model_mixin.py +4 -5
  176. edc_metadata/models/requisition_metadata.py +6 -6
  177. edc_metadata/views/refresh_metadata_actions_view.py +3 -3
  178. edc_model/models/address_mixin.py +6 -6
  179. edc_model/models/fields/initials_field.py +2 -1
  180. edc_model/models/historical_records.py +2 -9
  181. edc_model/models/url_model_mixin.py +2 -2
  182. edc_model/validators/date.py +7 -8
  183. edc_model_admin/list_filters/future_date_list_filter.py +3 -3
  184. edc_model_admin/list_filters/past_date_list_filter.py +3 -3
  185. edc_model_admin/mixins/model_admin_protect_pii_mixin.py +4 -5
  186. edc_model_fields/fields/other_charfield.py +2 -2
  187. edc_navbar/migrations/0004_auto_20220825_0451.py +3 -2
  188. edc_navbar/migrations/0009_alter_edcpermissions_device_created_and_more.py +49 -0
  189. edc_notification/migrations/0001_initial.py +3 -3
  190. edc_notification/migrations/0004_auto_20190305_0123.py +3 -6
  191. edc_notification/migrations/0011_alter_notification_device_created_and_more.py +59 -0
  192. edc_notification/models/notification.py +1 -1
  193. edc_notification/notification/notification.py +12 -12
  194. edc_offstudy/migrations/0001_initial.py +4 -4
  195. edc_offstudy/migrations/0002_auto_20180921_0434.py +4 -4
  196. edc_offstudy/migrations/0005_auto_20190305_0123.py +5 -12
  197. edc_offstudy/migrations/0023_alter_historicalsubjectoffstudy_action_identifier_and_more.py +188 -0
  198. edc_offstudy/migrations/0024_alter_historicalsubjectoffstudy_offstudy_datetime_and_more.py +43 -0
  199. edc_offstudy/model_mixins/offstudy_model_mixin.py +3 -2
  200. edc_pdutils/df_exporters/csv_exporter.py +33 -37
  201. edc_pdutils/df_exporters/csv_model_exporter.py +2 -1
  202. edc_pdutils/migrations/0001_initial.py +8 -8
  203. edc_pharmacy/admin/prescription/rx_refill_admin.py +4 -3
  204. edc_pharmacy/admin/reports/stock_availability_admin.py +5 -6
  205. edc_pharmacy/migrations/0001_initial.py +64 -63
  206. edc_pharmacy/migrations/0015_auto_20220913_2139.py +26 -26
  207. edc_pharmacy/migrations/0024_allocation_assignment_containerunits_dispense_and_more.py +81 -86
  208. edc_pharmacy/migrations/0037_remove_historicalstock_confirmed_at_site_by_and_more.py +5 -5
  209. edc_pharmacy/migrations/0039_remove_dispense_registered_subject_and_more.py +7 -8
  210. edc_pharmacy/migrations/0049_remove_stocktransferconfirmation_stock_and_more.py +12 -12
  211. edc_pharmacy/migrations/0050_remove_stocktransferconfirmation2_location_and_more.py +5 -5
  212. edc_pharmacy/migrations/0051_alter_historicalstocktransferconfirmationitem_options_and_more.py +3 -4
  213. edc_pharmacy/migrations/0053_alter_location_managers_alter_historicalstock_lot_and_more.py +3 -3
  214. edc_pharmacy/migrations/0057_scanduplicates.py +3 -3
  215. edc_pharmacy/migrations/0060_alter_container_max_per_subject_and_more.py +13 -15
  216. edc_pharmacy/migrations/0068_stockout.py +2 -3
  217. edc_pharmacy/migrations/0076_historicalstockadjustment_stockadjustment.py +5 -5
  218. edc_pharmacy/migrations/0077_historicalstockadjustment_adjustment_datetime_and_more.py +3 -4
  219. edc_pharmacy/migrations/0081_historicalconfirmation_confirmation.py +8 -8
  220. edc_pharmacy/migrations/0084_confirmationatsiteitem_and_more.py +0 -2
  221. edc_pharmacy/migrations/0089_alter_allocation_allocated_by_and_more.py +3284 -0
  222. edc_pharmacy/migrations/0090_alter_allocation_allocation_datetime_and_more.py +227 -0
  223. edc_pharmacy/model_mixins/study_medication_refill_model_mixin.py +2 -2
  224. edc_pharmacy/models/medication/medication.py +3 -3
  225. edc_pharmacy/models/model_mixins.py +10 -11
  226. edc_pharmacy/models/prescription/rx.py +13 -12
  227. edc_pharmacy/models/prescription/rx_refill.py +0 -1
  228. edc_pharmacy/models/stock/allocation.py +3 -3
  229. edc_pharmacy/models/stock/confirmation.py +3 -3
  230. edc_pharmacy/models/stock/confirmation_at_site.py +3 -2
  231. edc_pharmacy/models/stock/confirmation_at_site_item.py +3 -4
  232. edc_pharmacy/models/stock/dispense.py +5 -6
  233. edc_pharmacy/models/stock/dispense_item.py +2 -2
  234. edc_pharmacy/models/stock/location.py +3 -4
  235. edc_pharmacy/models/stock/lot.py +6 -7
  236. edc_pharmacy/models/stock/order.py +1 -1
  237. edc_pharmacy/models/stock/receive.py +3 -3
  238. edc_pharmacy/models/stock/receive_item.py +4 -4
  239. edc_pharmacy/models/stock/repack_request.py +2 -2
  240. edc_pharmacy/models/stock/stock.py +12 -18
  241. edc_pharmacy/models/stock/stock_adjustment.py +4 -4
  242. edc_pharmacy/models/stock/stock_request.py +2 -2
  243. edc_pharmacy/models/stock/stock_request_item.py +2 -2
  244. edc_pharmacy/models/stock/stock_transfer.py +3 -3
  245. edc_pharmacy/models/stock/stock_transfer_item.py +2 -2
  246. edc_pharmacy/models/stock/storage_bin.py +3 -4
  247. edc_pharmacy/models/stock/storage_bin_item.py +2 -2
  248. edc_pharmacy/models/stock/supplier.py +3 -4
  249. edc_pharmacy/models/storage/box.py +2 -2
  250. edc_pharmacy/models/storage/items/container_model_mixin.py +3 -4
  251. edc_pharmacy/models/storage/items/pill_bottle_model_mixin.py +2 -2
  252. edc_pharmacy/models/storage/items/subject_pill_bottle.py +1 -1
  253. edc_pharmacy/models/storage/room.py +2 -2
  254. edc_pharmacy/models/storage/shelf.py +2 -2
  255. edc_pharmacy/models/storage/utils.py +1 -1
  256. edc_pharmacy/utils/allocate_stock.py +2 -3
  257. edc_pharmacy/utils/confirm_stock.py +2 -3
  258. edc_pharmacy/utils/confirm_stock_at_site.py +3 -4
  259. edc_pharmacy/utils/dispense.py +3 -4
  260. edc_pharmacy/utils/process_repack_request.py +4 -5
  261. edc_pharmacy/utils/stock_request/bulk_create_stock_request_items.py +2 -3
  262. edc_pharmacy/utils/transfer_stock.py +2 -3
  263. edc_pharmacy/views/add_to_storage_bin_view.py +2 -2
  264. edc_pharmacy/views/allocate_to_subject_view.py +2 -2
  265. edc_pharmacy/views/dispense_view.py +2 -2
  266. edc_pharmacy/views/move_to_storage_bin_view.py +2 -3
  267. edc_pharmacy/views/print_labels_view.py +2 -2
  268. edc_protocol/research_protocol_config.py +2 -3
  269. edc_protocol_incident/migrations/0001_initial.py +7 -7
  270. edc_protocol_incident/migrations/0001_squashed_0015_auto_20220927_0401.py +13 -13
  271. edc_protocol_incident/migrations/0005_protocolincident_historicalprotocolincident_and_more.py +7 -7
  272. edc_protocol_incident/migrations/0024_alter_actionsrequired_extra_value_and_more.py +625 -0
  273. edc_protocol_incident/migrations/0025_alter_historicalprotocoldeviationviolation_report_datetime_and_more.py +42 -0
  274. edc_protocol_incident/model_mixins/protocol_deviation_violation_model_mixin.py +18 -11
  275. edc_protocol_incident/model_mixins/protocol_incident_model_mixin.py +26 -11
  276. edc_pylabels/actions.py +3 -5
  277. edc_pylabels/migrations/0002_alter_label_options_label_created_and_more.py +3 -7
  278. edc_pylabels/migrations/0005_labelconfiguration_delete_label_and_more.py +3 -3
  279. edc_pylabels/migrations/0013_alter_labelconfiguration_device_created_and_more.py +49 -0
  280. edc_qareports/migrations/0001_initial.py +4 -5
  281. edc_qareports/migrations/0005_edcpermissions.py +3 -3
  282. edc_qareports/migrations/0006_qareportlog.py +2 -3
  283. edc_qareports/migrations/0019_alter_edcpermissions_device_created_and_more.py +102 -0
  284. edc_qareports/migrations/0020_alter_note_report_datetime_and_more.py +24 -0
  285. edc_qareports/model_mixins/note_model_mixin.py +7 -4
  286. edc_qareports/model_mixins/on_study_missing_values_model_mixin.py +4 -4
  287. edc_qareports/model_mixins/qa_report_model_mixin.py +2 -3
  288. edc_qareports/models/note.py +4 -4
  289. edc_qareports/models/qa_reports_log.py +2 -3
  290. edc_randomization/decorators.py +1 -1
  291. edc_randomization/migrations/0001_initial.py +3 -2
  292. edc_randomization/migrations/0002_historicalrandomizationlist.py +3 -2
  293. edc_randomization/migrations/0009_edcpermissions.py +3 -2
  294. edc_randomization/migrations/0014_alter_edcpermissions_device_created_and_more.py +141 -0
  295. edc_randomization/model_mixins.py +9 -9
  296. edc_randomization/utils.py +2 -2
  297. edc_refusal/migrations/0001_initial.py +4 -4
  298. edc_refusal/migrations/0002_historicalsubjectrefusal.py +4 -4
  299. edc_refusal/migrations/0012_alter_historicalsubjectrefusal_comment_and_more.py +122 -0
  300. edc_refusal/migrations/0013_alter_historicalsubjectrefusal_report_datetime_and_more.py +28 -0
  301. edc_refusal/model_mixins.py +3 -3
  302. edc_registration/migrations/0002_auto_20161127_2226.py +3 -4
  303. edc_registration/migrations/0005_auto_20170111_1809.py +4 -2
  304. edc_registration/migrations/0016_historicalregisteredsubject.py +3 -2
  305. edc_registration/migrations/0017_auto_20190305_0123.py +5 -12
  306. edc_registration/migrations/0033_alter_historicalregisteredsubject_additional_key_and_more.py +302 -0
  307. edc_registration/model_mixins/updates_or_creates_registered_subject_model_mixin.py +2 -3
  308. edc_registration/models/registered_subject.py +27 -26
  309. edc_reportable/age_evaluator.py +4 -2
  310. edc_reportable/formula.py +5 -5
  311. edc_reportable/migrations/0001_initial.py +7 -7
  312. edc_reportable/migrations/0003_referencerangecollection_grade1_and_more.py +3 -3
  313. edc_reportable/migrations/0004_alter_referencerangecollection_grade3_and_more.py +5 -5
  314. edc_reportable/migrations/0006_alter_gradingdata_revision_and_more.py +5 -6
  315. edc_reportable/migrations/0007_alter_gradingdata_age_phrase_and_more.py +509 -0
  316. edc_reportable/models/normal_data.py +4 -5
  317. edc_reportable/models/reference_model_mixins.py +10 -11
  318. edc_reportable/models/reference_range_collection.py +12 -13
  319. edc_reportable/post_migrate_signals.py +1 -1
  320. edc_reportable/utils/convert_units.py +11 -45
  321. edc_reportable/utils/get_normal_data_or_raise.py +2 -2
  322. edc_reportable/utils/load_data.py +4 -4
  323. edc_reportable/utils/update_grading_data.py +5 -5
  324. edc_review_dashboard/migrations/0001_initial.py +3 -2
  325. edc_review_dashboard/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
  326. edc_screening/age_evaluator.py +3 -3
  327. edc_screening/migrations/0001_initial.py +3 -2
  328. edc_screening/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
  329. edc_screening/model_mixins/eligibility_model_mixin.py +3 -4
  330. edc_screening/model_mixins/screening_fields_model_mixin.py +6 -8
  331. edc_search/model_mixins.py +2 -3
  332. edc_search/search_slug.py +9 -8
  333. edc_search/updater.py +2 -2
  334. edc_sites/migrations/0007_edcpermissions.py +3 -2
  335. edc_sites/migrations/0010_alter_edcpermissions_device_created_and_more.py +69 -0
  336. edc_sites/model_mixins/site_model_mixin.py +2 -2
  337. edc_sites/site.py +5 -5
  338. edc_sites/system_checks.py +1 -1
  339. edc_subject_dashboard/migrations/0001_initial.py +3 -2
  340. edc_subject_dashboard/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
  341. edc_subject_dashboard/requisition_report.py +6 -4
  342. edc_subject_dashboard/requisition_verifier.py +6 -6
  343. edc_subject_dashboard/templatetags/edc_subject_dashboard_extras.py +2 -2
  344. edc_subject_dashboard/view_mixins/subject_visit_view_mixin.py +7 -8
  345. edc_subject_dashboard/view_utils/subject_consent_listboard_button.py +3 -2
  346. edc_subject_dashboard/view_utils/timepoint_status_button.py +2 -2
  347. edc_timepoint/model_mixins.py +22 -20
  348. edc_transfer/model_mixins.py +4 -4
  349. edc_transfer/modeladmin_mixins.py +1 -1
  350. edc_unblinding/migrations/0001_initial.py +13 -13
  351. edc_unblinding/migrations/0014_alter_historicalunblindingrequest_action_identifier_and_more.py +291 -0
  352. edc_unblinding/migrations/0015_alter_historicalunblindingrequest_report_datetime_and_more.py +45 -0
  353. edc_unblinding/models/unblinding_request.py +2 -2
  354. edc_unblinding/models/unblinding_review.py +3 -3
  355. edc_utils/age.py +10 -16
  356. edc_visit_schedule/migrations/0001_initial.py +3 -3
  357. edc_visit_schedule/migrations/0002_auto_20190305_0123.py +3 -6
  358. edc_visit_schedule/migrations/0003_historicalvisitschedule_visitschedule.py +5 -4
  359. edc_visit_schedule/migrations/0015_historicalonschedule_offschedule_onschedule.py +10 -10
  360. edc_visit_schedule/migrations/0019_alter_historicalonschedule_device_created_and_more.py +229 -0
  361. edc_visit_schedule/migrations/0020_alter_historicalonschedule_onschedule_datetime_and_more.py +65 -0
  362. edc_visit_schedule/model_mixins/off_schedule_model_mixin.py +5 -4
  363. edc_visit_schedule/model_mixins/on_schedule_model_mixin.py +5 -4
  364. edc_visit_schedule/model_mixins/visit_schedule/visit_code_fields_model_mixin.py +1 -1
  365. edc_visit_schedule/models/subject_schedule_history.py +6 -6
  366. edc_visit_schedule/schedule/visit_collection.py +1 -1
  367. edc_visit_schedule/subject_schedule.py +5 -4
  368. edc_visit_schedule/view_mixins.py +2 -3
  369. edc_visit_schedule/visit/visit.py +3 -2
  370. edc_visit_tracking/migrations/0004_subjectvisit_subjectvisitmissedreasons_extra_value_and_more.py +13 -13
  371. edc_visit_tracking/migrations/0009_alter_historicalsubjectvisit_comments_and_more.py +450 -0
  372. edc_visit_tracking/migrations/0010_alter_historicalsubjectvisit_report_datetime_and_more.py +68 -0
  373. edc_visit_tracking/model_mixins/base/visit_methods_model_mixin.py +3 -3
  374. edc_visit_tracking/model_mixins/crfs/visit_tracking_crf_model_mixin.py +2 -2
  375. edc_visit_tracking/model_mixins/requisitions/visit_tracking_requisition_model_mixin.py +2 -2
  376. edc_visit_tracking/model_mixins/subject_visit_missed_model_mixin.py +2 -2
  377. edc_visit_tracking/model_mixins/visit_model_mixin/caretaker_fields_mixin.py +2 -3
  378. edc_visit_tracking/model_mixins/visit_model_mixin/previous_visit_model_mixin.py +1 -1
  379. edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_fields_mixin.py +8 -11
  380. edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_mixin.py +1 -1
  381. edc_visit_tracking/models/signals.py +1 -1
  382. edc_visit_tracking/models/subject_visit.py +1 -1
  383. edc_vitals/calculators/bmi.py +7 -5
  384. edc_vitals/form_validators/blood_pressure_form_validator_mixin.py +3 -1
  385. edc_vitals/utils.py +1 -1
  386. {clinicedc-2.0.5.dist-info → clinicedc-2.0.7.dist-info}/WHEEL +0 -0
  387. {clinicedc-2.0.5.dist-info → clinicedc-2.0.7.dist-info}/licenses/LICENSE +0 -0
@@ -8,6 +8,7 @@ import django_audit_fields.fields.uuid_auto_field
8
8
  import django_audit_fields.models.audit_model_mixin
9
9
  import django_revision.revision_field
10
10
  from django.db import migrations, models
11
+ import django.utils.timezone
11
12
 
12
13
 
13
14
  class Migration(migrations.Migration):
@@ -36,14 +37,14 @@ class Migration(migrations.Migration):
36
37
  "created",
37
38
  models.DateTimeField(
38
39
  blank=True,
39
- default=django_audit_fields.models.audit_model_mixin.utcnow,
40
+ default=django.utils.timezone.now,
40
41
  ),
41
42
  ),
42
43
  (
43
44
  "modified",
44
45
  models.DateTimeField(
45
46
  blank=True,
46
- default=django_audit_fields.models.audit_model_mixin.utcnow,
47
+ default=django.utils.timezone.now,
47
48
  ),
48
49
  ),
49
50
  (
@@ -0,0 +1,49 @@
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_form_runners", "0004_alter_issue_revision"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="issue",
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="issue",
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="issue",
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="issue",
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
+ ]
@@ -11,7 +11,7 @@ from django.db import migrations, models
11
11
 
12
12
  import edc_model_fields.fields.hostname_modification_field
13
13
  import edc_model_fields.fields.userfield
14
- import edc_utils
14
+ import django.utils.timezone
15
15
 
16
16
 
17
17
  class Migration(migrations.Migration):
@@ -52,11 +52,11 @@ class Migration(migrations.Migration):
52
52
  fields=[
53
53
  (
54
54
  "created",
55
- models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
55
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
56
56
  ),
57
57
  (
58
58
  "modified",
59
- models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
59
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
60
60
  ),
61
61
  (
62
62
  "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="identifiermodel",
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="identifiermodel",
@@ -29,9 +28,7 @@ class Migration(migrations.Migration):
29
28
  migrations.AlterField(
30
29
  model_name="identifiermodel",
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="identifiermodel",
@@ -8,7 +8,7 @@ from django.db import migrations, models
8
8
 
9
9
  import edc_model_fields.fields.hostname_modification_field
10
10
  import edc_model_fields.fields.userfield
11
- import edc_utils
11
+ import django.utils.timezone
12
12
 
13
13
 
14
14
  class Migration(migrations.Migration):
@@ -23,7 +23,7 @@ class Migration(migrations.Migration):
23
23
  migrations.AddField(
24
24
  model_name="historicalidentifierhistory",
25
25
  name="created",
26
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
26
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
27
27
  ),
28
28
  migrations.AddField(
29
29
  model_name="historicalidentifierhistory",
@@ -48,7 +48,7 @@ class Migration(migrations.Migration):
48
48
  migrations.AddField(
49
49
  model_name="historicalidentifierhistory",
50
50
  name="modified",
51
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
51
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
52
52
  ),
53
53
  migrations.AddField(
54
54
  model_name="historicalidentifierhistory",
@@ -79,7 +79,7 @@ class Migration(migrations.Migration):
79
79
  migrations.AddField(
80
80
  model_name="identifierhistory",
81
81
  name="created",
82
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
82
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
83
83
  ),
84
84
  migrations.AddField(
85
85
  model_name="identifierhistory",
@@ -104,7 +104,7 @@ class Migration(migrations.Migration):
104
104
  migrations.AddField(
105
105
  model_name="identifierhistory",
106
106
  name="modified",
107
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
107
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
108
108
  ),
109
109
  migrations.AddField(
110
110
  model_name="identifierhistory",
@@ -152,22 +152,22 @@ class Migration(migrations.Migration):
152
152
  migrations.AlterField(
153
153
  model_name="historicalidentifiertracker",
154
154
  name="created",
155
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
155
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
156
156
  ),
157
157
  migrations.AlterField(
158
158
  model_name="historicalidentifiertracker",
159
159
  name="modified",
160
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
160
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
161
161
  ),
162
162
  migrations.AlterField(
163
163
  model_name="historicalsubjectidentifier",
164
164
  name="created",
165
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
165
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
166
166
  ),
167
167
  migrations.AlterField(
168
168
  model_name="historicalsubjectidentifier",
169
169
  name="modified",
170
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
170
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
171
171
  ),
172
172
  migrations.AlterField(
173
173
  model_name="identifierhistory",
@@ -183,31 +183,31 @@ class Migration(migrations.Migration):
183
183
  migrations.AlterField(
184
184
  model_name="identifiertracker",
185
185
  name="created",
186
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
186
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
187
187
  ),
188
188
  migrations.AlterField(
189
189
  model_name="identifiertracker",
190
190
  name="modified",
191
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
191
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
192
192
  ),
193
193
  migrations.AlterField(
194
194
  model_name="sequence",
195
195
  name="created",
196
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
196
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
197
197
  ),
198
198
  migrations.AlterField(
199
199
  model_name="sequence",
200
200
  name="modified",
201
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
201
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
202
202
  ),
203
203
  migrations.AlterField(
204
204
  model_name="subjectidentifier",
205
205
  name="created",
206
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
206
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
207
207
  ),
208
208
  migrations.AlterField(
209
209
  model_name="subjectidentifier",
210
210
  name="modified",
211
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
211
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
212
212
  ),
213
213
  ]
@@ -8,7 +8,7 @@ from django.db import migrations, models
8
8
 
9
9
  import edc_model_fields.fields.hostname_modification_field
10
10
  import edc_model_fields.fields.userfield
11
- import edc_utils
11
+ import django.utils.timezone
12
12
 
13
13
 
14
14
  class Migration(migrations.Migration):
@@ -20,11 +20,11 @@ class Migration(migrations.Migration):
20
20
  fields=[
21
21
  (
22
22
  "created",
23
- models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
23
+ models.DateTimeField(default=django.utils.timezone.now, editable=False),
24
24
  ),
25
25
  (
26
26
  "modified",
27
- models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
27
+ models.DateTimeField(default=django.utils.timezone.now, editable=False),
28
28
  ),
29
29
  (
30
30
  "user_created",
@@ -1,11 +1,9 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by Django 1.10.4 on 2016-12-21 23:23
3
3
  from __future__ import unicode_literals
4
-
4
+ import django.utils.timezone
5
5
  from django.db import migrations, models
6
6
 
7
- from edc_utils import get_utcnow
8
-
9
7
 
10
8
  class Migration(migrations.Migration):
11
9
  dependencies = [("edc_identifier", "0008_identifiermodel_linked_identifier")]
@@ -14,11 +12,11 @@ class Migration(migrations.Migration):
14
12
  migrations.AlterField(
15
13
  model_name="historicalidentifierhistory",
16
14
  name="created_datetime",
17
- field=models.DateTimeField(default=get_utcnow),
15
+ field=models.DateTimeField(default=django.utils.timezone.now),
18
16
  ),
19
17
  migrations.AlterField(
20
18
  model_name="identifierhistory",
21
19
  name="created_datetime",
22
- field=models.DateTimeField(default=get_utcnow),
20
+ field=models.DateTimeField(default=django.utils.timezone.now),
23
21
  ),
24
22
  ]
@@ -6,7 +6,7 @@ from django.db import migrations, models
6
6
 
7
7
  import edc_model_fields.fields.hostname_modification_field
8
8
  import edc_model_fields.fields.userfield
9
- import edc_utils
9
+ import django.utils.timezone
10
10
 
11
11
 
12
12
  class Migration(migrations.Migration):
@@ -16,7 +16,7 @@ class Migration(migrations.Migration):
16
16
  migrations.AlterField(
17
17
  model_name="historicalidentifierhistory",
18
18
  name="created",
19
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
19
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
20
20
  ),
21
21
  migrations.AlterField(
22
22
  model_name="historicalidentifierhistory",
@@ -40,7 +40,7 @@ class Migration(migrations.Migration):
40
40
  migrations.AlterField(
41
41
  model_name="historicalidentifierhistory",
42
42
  name="modified",
43
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
43
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
44
44
  ),
45
45
  migrations.AlterField(
46
46
  model_name="historicalidentifierhistory",
@@ -59,7 +59,7 @@ class Migration(migrations.Migration):
59
59
  migrations.AlterField(
60
60
  model_name="historicalidentifiertracker",
61
61
  name="created",
62
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
62
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
63
63
  ),
64
64
  migrations.AlterField(
65
65
  model_name="historicalidentifiertracker",
@@ -83,7 +83,7 @@ class Migration(migrations.Migration):
83
83
  migrations.AlterField(
84
84
  model_name="historicalidentifiertracker",
85
85
  name="modified",
86
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
86
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
87
87
  ),
88
88
  migrations.AlterField(
89
89
  model_name="historicalidentifiertracker",
@@ -102,7 +102,7 @@ class Migration(migrations.Migration):
102
102
  migrations.AlterField(
103
103
  model_name="historicalsubjectidentifier",
104
104
  name="created",
105
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
105
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
106
106
  ),
107
107
  migrations.AlterField(
108
108
  model_name="historicalsubjectidentifier",
@@ -126,7 +126,7 @@ class Migration(migrations.Migration):
126
126
  migrations.AlterField(
127
127
  model_name="historicalsubjectidentifier",
128
128
  name="modified",
129
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
129
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
130
130
  ),
131
131
  migrations.AlterField(
132
132
  model_name="historicalsubjectidentifier",
@@ -145,7 +145,7 @@ class Migration(migrations.Migration):
145
145
  migrations.AlterField(
146
146
  model_name="identifierhistory",
147
147
  name="created",
148
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
148
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
149
149
  ),
150
150
  migrations.AlterField(
151
151
  model_name="identifierhistory",
@@ -169,7 +169,7 @@ class Migration(migrations.Migration):
169
169
  migrations.AlterField(
170
170
  model_name="identifierhistory",
171
171
  name="modified",
172
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
172
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
173
173
  ),
174
174
  migrations.AlterField(
175
175
  model_name="identifierhistory",
@@ -188,7 +188,7 @@ class Migration(migrations.Migration):
188
188
  migrations.AlterField(
189
189
  model_name="identifiermodel",
190
190
  name="created",
191
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
191
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
192
192
  ),
193
193
  migrations.AlterField(
194
194
  model_name="identifiermodel",
@@ -212,7 +212,7 @@ class Migration(migrations.Migration):
212
212
  migrations.AlterField(
213
213
  model_name="identifiermodel",
214
214
  name="modified",
215
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
215
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
216
216
  ),
217
217
  migrations.AlterField(
218
218
  model_name="identifiermodel",
@@ -231,7 +231,7 @@ class Migration(migrations.Migration):
231
231
  migrations.AlterField(
232
232
  model_name="identifiertracker",
233
233
  name="created",
234
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
234
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
235
235
  ),
236
236
  migrations.AlterField(
237
237
  model_name="identifiertracker",
@@ -255,7 +255,7 @@ class Migration(migrations.Migration):
255
255
  migrations.AlterField(
256
256
  model_name="identifiertracker",
257
257
  name="modified",
258
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
258
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
259
259
  ),
260
260
  migrations.AlterField(
261
261
  model_name="identifiertracker",
@@ -274,7 +274,7 @@ class Migration(migrations.Migration):
274
274
  migrations.AlterField(
275
275
  model_name="sequence",
276
276
  name="created",
277
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
277
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
278
278
  ),
279
279
  migrations.AlterField(
280
280
  model_name="sequence",
@@ -298,7 +298,7 @@ class Migration(migrations.Migration):
298
298
  migrations.AlterField(
299
299
  model_name="sequence",
300
300
  name="modified",
301
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
301
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
302
302
  ),
303
303
  migrations.AlterField(
304
304
  model_name="sequence",
@@ -317,7 +317,7 @@ class Migration(migrations.Migration):
317
317
  migrations.AlterField(
318
318
  model_name="subjectidentifier",
319
319
  name="created",
320
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
320
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
321
321
  ),
322
322
  migrations.AlterField(
323
323
  model_name="subjectidentifier",
@@ -341,7 +341,7 @@ class Migration(migrations.Migration):
341
341
  migrations.AlterField(
342
342
  model_name="subjectidentifier",
343
343
  name="modified",
344
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
344
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
345
345
  ),
346
346
  migrations.AlterField(
347
347
  model_name="subjectidentifier",
@@ -0,0 +1,79 @@
1
+ # Generated by Django 5.2.6 on 2025-09-17 15:50
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("edc_identifier", "0010_alter_identifiermodel_revision"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="identifiermodel",
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="identifiermodel",
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="identifiermodel",
29
+ name="identifier_prefix",
30
+ field=models.CharField(default="", max_length=25),
31
+ ),
32
+ migrations.AlterField(
33
+ model_name="identifiermodel",
34
+ name="identifier_type",
35
+ field=models.CharField(default="", max_length=100),
36
+ ),
37
+ migrations.AlterField(
38
+ model_name="identifiermodel",
39
+ name="linked_identifier",
40
+ field=models.CharField(default="", max_length=50),
41
+ ),
42
+ migrations.AlterField(
43
+ model_name="identifiermodel",
44
+ name="locale_created",
45
+ field=models.CharField(
46
+ blank=True,
47
+ default="",
48
+ help_text="Auto-updated by Modeladmin",
49
+ max_length=10,
50
+ verbose_name="Locale created",
51
+ ),
52
+ ),
53
+ migrations.AlterField(
54
+ model_name="identifiermodel",
55
+ name="locale_modified",
56
+ field=models.CharField(
57
+ blank=True,
58
+ default="",
59
+ help_text="Auto-updated by Modeladmin",
60
+ max_length=10,
61
+ verbose_name="Locale modified",
62
+ ),
63
+ ),
64
+ migrations.AlterField(
65
+ model_name="identifiermodel",
66
+ name="model",
67
+ field=models.CharField(default="", max_length=100),
68
+ ),
69
+ migrations.AlterField(
70
+ model_name="identifiermodel",
71
+ name="protocol_number",
72
+ field=models.CharField(default="", max_length=25),
73
+ ),
74
+ migrations.AlterField(
75
+ model_name="identifiermodel",
76
+ name="subject_identifier",
77
+ field=models.CharField(default="", max_length=50),
78
+ ),
79
+ ]
@@ -44,7 +44,7 @@ class SubjectIdentifierAdditionalFieldsModelMixin(models.Model):
44
44
  subject_identifier_aka = models.CharField(
45
45
  verbose_name="Subject Identifier a.k.a",
46
46
  max_length=50,
47
- null=True,
47
+ default="",
48
48
  editable=False,
49
49
  help_text="track a previously allocated identifier.",
50
50
  )
edc_identifier/models.py CHANGED
@@ -25,21 +25,21 @@ class IdentifierModel(SiteModelMixin, BaseUuidModel):
25
25
 
26
26
  name = models.CharField(max_length=100)
27
27
 
28
- subject_identifier = models.CharField(max_length=50, null=True)
28
+ subject_identifier = models.CharField(max_length=50, default="")
29
29
 
30
30
  sequence_number = models.IntegerField(default=1)
31
31
 
32
- linked_identifier = models.CharField(max_length=50, null=True)
32
+ linked_identifier = models.CharField(max_length=50, default="")
33
33
 
34
34
  device_id = models.IntegerField()
35
35
 
36
- protocol_number = models.CharField(max_length=25, null=True)
36
+ protocol_number = models.CharField(max_length=25, default="")
37
37
 
38
- model = models.CharField(max_length=100, null=True)
38
+ model = models.CharField(max_length=100, default="")
39
39
 
40
- identifier_type = models.CharField(max_length=100, null=True)
40
+ identifier_type = models.CharField(max_length=100, default="")
41
41
 
42
- identifier_prefix = models.CharField(max_length=25, null=True)
42
+ identifier_prefix = models.CharField(max_length=25, default="")
43
43
 
44
44
  objects = IdentifierModelManager()
45
45
 
@@ -51,9 +51,9 @@ class IdentifierModel(SiteModelMixin, BaseUuidModel):
51
51
 
52
52
  class Meta(BaseUuidModel.Meta):
53
53
  app_label = "edc_identifier"
54
- constraints = [
54
+ constraints = (
55
55
  UniqueConstraint(
56
56
  fields=["name", "identifier"], name="%(app_label)s_%(class)s_name_uniq"
57
- )
58
- ]
57
+ ),
58
+ )
59
59
  indexes = BaseUuidModel.Meta.indexes
@@ -6,8 +6,6 @@ from django.core.exceptions import ObjectDoesNotExist
6
6
  from django.db import models
7
7
  from django.utils import timezone
8
8
 
9
- from edc_utils import get_utcnow
10
-
11
9
  from .utils import convert_to_human_readable
12
10
 
13
11
 
@@ -83,7 +81,7 @@ class SimpleSequentialIdentifier:
83
81
  prefix: str | None = None
84
82
 
85
83
  def __init__(self):
86
- sequence: int = int(get_utcnow().timestamp())
84
+ sequence: int = int(timezone.now().timestamp())
87
85
  random_number: int = choice(range(1000, 9999)) # nosec B311
88
86
  sequence: str = f"{sequence}{random_number}"
89
87
  chk: int = int(sequence) % 11
@@ -1,5 +1,6 @@
1
+ from django.utils import timezone
2
+
1
3
  from edc_registration import get_registered_subject_model_cls
2
- from edc_utils import get_utcnow
3
4
 
4
5
  from .research_identifier import ResearchIdentifier
5
6
 
@@ -26,5 +27,5 @@ class SubjectIdentifier(ResearchIdentifier):
26
27
  site=self.site,
27
28
  subject_type=self.identifier_type,
28
29
  last_name=self.last_name,
29
- registration_datetime=get_utcnow(),
30
+ registration_datetime=timezone.now(),
30
31
  )