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,7 +8,7 @@ class RegisterRandomizerError(Exception):
8
8
  pass
9
9
 
10
10
 
11
- def register(site=None, **kwargs) -> Any: # noqa
11
+ def register(site=None, **kwargs) -> Any:
12
12
  """Registers a randomizer class."""
13
13
  site = site or site_randomizers
14
14
 
@@ -12,6 +12,7 @@ import django_revision.revision_field
12
12
  from django.db import migrations, models
13
13
 
14
14
  import edc_sites.models
15
+ import django.utils.timezone
15
16
 
16
17
 
17
18
  class Migration(migrations.Migration):
@@ -38,14 +39,14 @@ class Migration(migrations.Migration):
38
39
  "created",
39
40
  models.DateTimeField(
40
41
  blank=True,
41
- default=django_audit_fields.models.audit_model_mixin.utcnow,
42
+ default=django.utils.timezone.now,
42
43
  ),
43
44
  ),
44
45
  (
45
46
  "modified",
46
47
  models.DateTimeField(
47
48
  blank=True,
48
- default=django_audit_fields.models.audit_model_mixin.utcnow,
49
+ default=django.utils.timezone.now,
49
50
  ),
50
51
  ),
51
52
  (
@@ -13,6 +13,7 @@ import django_revision.revision_field
13
13
  import simple_history.models
14
14
  from django.conf import settings
15
15
  from django.db import migrations, models
16
+ import django.utils.timezone
16
17
 
17
18
 
18
19
  class Migration(migrations.Migration):
@@ -41,14 +42,14 @@ class Migration(migrations.Migration):
41
42
  "created",
42
43
  models.DateTimeField(
43
44
  blank=True,
44
- default=django_audit_fields.models.audit_model_mixin.utcnow,
45
+ default=django.utils.timezone.now,
45
46
  ),
46
47
  ),
47
48
  (
48
49
  "modified",
49
50
  models.DateTimeField(
50
51
  blank=True,
51
- default=django_audit_fields.models.audit_model_mixin.utcnow,
52
+ default=django.utils.timezone.now,
52
53
  ),
53
54
  ),
54
55
  (
@@ -7,6 +7,7 @@ import django_audit_fields.fields.uuid_auto_field
7
7
  import django_audit_fields.models.audit_model_mixin
8
8
  import django_revision.revision_field
9
9
  from django.db import migrations, models
10
+ import django.utils.timezone
10
11
 
11
12
 
12
13
  class Migration(migrations.Migration):
@@ -33,14 +34,14 @@ class Migration(migrations.Migration):
33
34
  "created",
34
35
  models.DateTimeField(
35
36
  blank=True,
36
- default=django_audit_fields.models.audit_model_mixin.utcnow,
37
+ default=django.utils.timezone.now,
37
38
  ),
38
39
  ),
39
40
  (
40
41
  "modified",
41
42
  models.DateTimeField(
42
43
  blank=True,
43
- default=django_audit_fields.models.audit_model_mixin.utcnow,
44
+ default=django.utils.timezone.now,
44
45
  ),
45
46
  ),
46
47
  (
@@ -0,0 +1,141 @@
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_randomization", "0013_alter_edcpermissions_revision_and_more"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="edcpermissions",
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="edcpermissions",
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="edcpermissions",
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="edcpermissions",
40
+ name="locale_modified",
41
+ field=models.CharField(
42
+ blank=True,
43
+ default="",
44
+ help_text="Auto-updated by Modeladmin",
45
+ max_length=10,
46
+ verbose_name="Locale modified",
47
+ ),
48
+ ),
49
+ migrations.AlterField(
50
+ model_name="historicalrandomizationlist",
51
+ name="allocated_user",
52
+ field=models.CharField(default="", max_length=50),
53
+ ),
54
+ migrations.AlterField(
55
+ model_name="historicalrandomizationlist",
56
+ name="device_created",
57
+ field=models.CharField(
58
+ blank=True, default="", max_length=10, verbose_name="Device created"
59
+ ),
60
+ ),
61
+ migrations.AlterField(
62
+ model_name="historicalrandomizationlist",
63
+ name="device_modified",
64
+ field=models.CharField(
65
+ blank=True, default="", max_length=10, verbose_name="Device modified"
66
+ ),
67
+ ),
68
+ migrations.AlterField(
69
+ model_name="historicalrandomizationlist",
70
+ name="locale_created",
71
+ field=models.CharField(
72
+ blank=True,
73
+ default="",
74
+ help_text="Auto-updated by Modeladmin",
75
+ max_length=10,
76
+ verbose_name="Locale created",
77
+ ),
78
+ ),
79
+ migrations.AlterField(
80
+ model_name="historicalrandomizationlist",
81
+ name="locale_modified",
82
+ field=models.CharField(
83
+ blank=True,
84
+ default="",
85
+ help_text="Auto-updated by Modeladmin",
86
+ max_length=10,
87
+ verbose_name="Locale modified",
88
+ ),
89
+ ),
90
+ migrations.AlterField(
91
+ model_name="historicalrandomizationlist",
92
+ name="verified_user",
93
+ field=models.CharField(default="", max_length=50),
94
+ ),
95
+ migrations.AlterField(
96
+ model_name="randomizationlist",
97
+ name="allocated_user",
98
+ field=models.CharField(default="", max_length=50),
99
+ ),
100
+ migrations.AlterField(
101
+ model_name="randomizationlist",
102
+ name="device_created",
103
+ field=models.CharField(
104
+ blank=True, default="", max_length=10, verbose_name="Device created"
105
+ ),
106
+ ),
107
+ migrations.AlterField(
108
+ model_name="randomizationlist",
109
+ name="device_modified",
110
+ field=models.CharField(
111
+ blank=True, default="", max_length=10, verbose_name="Device modified"
112
+ ),
113
+ ),
114
+ migrations.AlterField(
115
+ model_name="randomizationlist",
116
+ name="locale_created",
117
+ field=models.CharField(
118
+ blank=True,
119
+ default="",
120
+ help_text="Auto-updated by Modeladmin",
121
+ max_length=10,
122
+ verbose_name="Locale created",
123
+ ),
124
+ ),
125
+ migrations.AlterField(
126
+ model_name="randomizationlist",
127
+ name="locale_modified",
128
+ field=models.CharField(
129
+ blank=True,
130
+ default="",
131
+ help_text="Auto-updated by Modeladmin",
132
+ max_length=10,
133
+ verbose_name="Locale modified",
134
+ ),
135
+ ),
136
+ migrations.AlterField(
137
+ model_name="randomizationlist",
138
+ name="verified_user",
139
+ field=models.CharField(default="", max_length=50),
140
+ ),
141
+ ]
@@ -34,7 +34,7 @@ class RandomizationListModelMixin(models.Model):
34
34
 
35
35
  randomizer_name = models.CharField(max_length=50, default="default")
36
36
 
37
- subject_identifier = models.CharField(
37
+ subject_identifier = models.CharField( # noqa: DJ001
38
38
  verbose_name="Subject Identifier", max_length=50, null=True, unique=True
39
39
  )
40
40
 
@@ -48,7 +48,7 @@ class RandomizationListModelMixin(models.Model):
48
48
 
49
49
  allocated_datetime = models.DateTimeField(null=True)
50
50
 
51
- allocated_user = models.CharField(max_length=50, null=True)
51
+ allocated_user = models.CharField(max_length=50, default="")
52
52
 
53
53
  allocated_site = models.ForeignKey(
54
54
  Site, null=True, on_delete=models.PROTECT, related_name="+"
@@ -58,7 +58,7 @@ class RandomizationListModelMixin(models.Model):
58
58
 
59
59
  verified_datetime = models.DateTimeField(null=True)
60
60
 
61
- verified_user = models.CharField(max_length=50, null=True)
61
+ verified_user = models.CharField(max_length=50, default="")
62
62
 
63
63
  objects = RandomizationListManager()
64
64
 
@@ -74,14 +74,14 @@ class RandomizationListModelMixin(models.Model):
74
74
  try:
75
75
  self.assignment_description
76
76
  except RandomizationError as e:
77
- raise RandomizationListModelError(e)
77
+ raise RandomizationListModelError(e) from e
78
78
  try:
79
79
  Site.objects.get(name=self.site_name)
80
- except ObjectDoesNotExist:
80
+ except ObjectDoesNotExist as e:
81
81
  site_names = [obj.name for obj in Site.objects.all()]
82
82
  raise RandomizationListModelError(
83
83
  f"Invalid site name. Got {self.site_name}. Expected one of {site_names}."
84
- )
84
+ ) from e
85
85
  super().save(*args, **kwargs)
86
86
 
87
87
  @property
@@ -109,10 +109,10 @@ class RandomizationListModelMixin(models.Model):
109
109
 
110
110
  class Meta:
111
111
  abstract = True
112
- constraints = [
112
+ constraints = (
113
113
  UniqueConstraint(
114
114
  fields=["site_name", "sid"],
115
115
  name="%(app_label)s_%(class)s_site_sid_uniq",
116
- )
117
- ]
116
+ ),
117
+ )
118
118
  permissions = (("display_assignment", "Can display assignment"),)
@@ -7,11 +7,11 @@ from typing import Any
7
7
  from django.conf import settings
8
8
  from django.contrib.auth import get_user_model
9
9
  from django.core.exceptions import ObjectDoesNotExist
10
+ from django.utils import timezone
10
11
  from django_pandas.io import read_frame
11
12
 
12
13
  from edc_pdutils.constants import SYSTEM_COLUMNS
13
14
  from edc_sites.site import sites
14
- from edc_utils import get_utcnow
15
15
 
16
16
  from .site_randomizers import site_randomizers
17
17
 
@@ -151,7 +151,7 @@ def export_randomization_list(
151
151
  f"permission to view '{randomizer_cls.model_cls()._meta.label_lower}'"
152
152
  )
153
153
  path = path or settings.EXPORT_FOLDER
154
- timestamp = get_utcnow().strftime("%Y%m%d%H%M")
154
+ timestamp = timezone.now().strftime("%Y%m%d%H%M")
155
155
  filename = os.path.expanduser(
156
156
  f"~/{settings.APP_NAME}_{randomizer_cls.name}_"
157
157
  f"randomizationlist_exported_{timestamp}.csv"
@@ -11,7 +11,7 @@ from django.db import migrations, models
11
11
 
12
12
  import edc_model.models.fields.other_charfield
13
13
  import edc_sites.models
14
- import edc_utils.date
14
+ import django.utils.timezone
15
15
 
16
16
 
17
17
  class Migration(migrations.Migration):
@@ -103,14 +103,14 @@ class Migration(migrations.Migration):
103
103
  "created",
104
104
  models.DateTimeField(
105
105
  blank=True,
106
- default=django_audit_fields.models.audit_model_mixin.utcnow,
106
+ default=django.utils.timezone.now,
107
107
  ),
108
108
  ),
109
109
  (
110
110
  "modified",
111
111
  models.DateTimeField(
112
112
  blank=True,
113
- default=django_audit_fields.models.audit_model_mixin.utcnow,
113
+ default=django.utils.timezone.now,
114
114
  ),
115
115
  ),
116
116
  (
@@ -164,7 +164,7 @@ class Migration(migrations.Migration):
164
164
  (
165
165
  "report_datetime",
166
166
  models.DateTimeField(
167
- default=edc_utils.date.get_utcnow,
167
+ default=django.utils.timezone.now,
168
168
  verbose_name="Report Date and Time",
169
169
  ),
170
170
  ),
@@ -14,7 +14,7 @@ from django.conf import settings
14
14
  from django.db import migrations, models
15
15
 
16
16
  import edc_model.models.fields.other_charfield
17
- import edc_utils.date
17
+ import django.utils.timezone
18
18
 
19
19
 
20
20
  class Migration(migrations.Migration):
@@ -43,14 +43,14 @@ class Migration(migrations.Migration):
43
43
  "created",
44
44
  models.DateTimeField(
45
45
  blank=True,
46
- default=django_audit_fields.models.audit_model_mixin.utcnow,
46
+ default=django.utils.timezone.now,
47
47
  ),
48
48
  ),
49
49
  (
50
50
  "modified",
51
51
  models.DateTimeField(
52
52
  blank=True,
53
- default=django_audit_fields.models.audit_model_mixin.utcnow,
53
+ default=django.utils.timezone.now,
54
54
  ),
55
55
  ),
56
56
  (
@@ -106,7 +106,7 @@ class Migration(migrations.Migration):
106
106
  (
107
107
  "report_datetime",
108
108
  models.DateTimeField(
109
- default=edc_utils.date.get_utcnow,
109
+ default=django.utils.timezone.now,
110
110
  verbose_name="Report Date and Time",
111
111
  ),
112
112
  ),
@@ -0,0 +1,122 @@
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_refusal", "0011_alter_historicalsubjectrefusal_revision_and_more"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="historicalsubjectrefusal",
15
+ name="comment",
16
+ field=models.TextField(
17
+ blank=True, default="", verbose_name="Additional Comments"
18
+ ),
19
+ ),
20
+ migrations.AlterField(
21
+ model_name="historicalsubjectrefusal",
22
+ name="device_created",
23
+ field=models.CharField(
24
+ blank=True, default="", max_length=10, verbose_name="Device created"
25
+ ),
26
+ ),
27
+ migrations.AlterField(
28
+ model_name="historicalsubjectrefusal",
29
+ name="device_modified",
30
+ field=models.CharField(
31
+ blank=True, default="", max_length=10, verbose_name="Device modified"
32
+ ),
33
+ ),
34
+ migrations.AlterField(
35
+ model_name="historicalsubjectrefusal",
36
+ name="locale_created",
37
+ field=models.CharField(
38
+ blank=True,
39
+ default="",
40
+ help_text="Auto-updated by Modeladmin",
41
+ max_length=10,
42
+ verbose_name="Locale created",
43
+ ),
44
+ ),
45
+ migrations.AlterField(
46
+ model_name="historicalsubjectrefusal",
47
+ name="locale_modified",
48
+ field=models.CharField(
49
+ blank=True,
50
+ default="",
51
+ help_text="Auto-updated by Modeladmin",
52
+ max_length=10,
53
+ verbose_name="Locale modified",
54
+ ),
55
+ ),
56
+ migrations.AlterField(
57
+ model_name="refusalreasons",
58
+ name="extra_value",
59
+ field=models.CharField(default="", max_length=250),
60
+ ),
61
+ migrations.AlterField(
62
+ model_name="refusalreasons",
63
+ name="field_name",
64
+ field=models.CharField(
65
+ blank=True,
66
+ default="",
67
+ editable=False,
68
+ help_text="Not required",
69
+ max_length=25,
70
+ ),
71
+ ),
72
+ migrations.AlterField(
73
+ model_name="refusalreasons",
74
+ name="plural_name",
75
+ field=models.CharField(
76
+ default="", max_length=250, verbose_name="Plural name"
77
+ ),
78
+ ),
79
+ migrations.AlterField(
80
+ model_name="subjectrefusal",
81
+ name="comment",
82
+ field=models.TextField(
83
+ blank=True, default="", verbose_name="Additional Comments"
84
+ ),
85
+ ),
86
+ migrations.AlterField(
87
+ model_name="subjectrefusal",
88
+ name="device_created",
89
+ field=models.CharField(
90
+ blank=True, default="", max_length=10, verbose_name="Device created"
91
+ ),
92
+ ),
93
+ migrations.AlterField(
94
+ model_name="subjectrefusal",
95
+ name="device_modified",
96
+ field=models.CharField(
97
+ blank=True, default="", max_length=10, verbose_name="Device modified"
98
+ ),
99
+ ),
100
+ migrations.AlterField(
101
+ model_name="subjectrefusal",
102
+ name="locale_created",
103
+ field=models.CharField(
104
+ blank=True,
105
+ default="",
106
+ help_text="Auto-updated by Modeladmin",
107
+ max_length=10,
108
+ verbose_name="Locale created",
109
+ ),
110
+ ),
111
+ migrations.AlterField(
112
+ model_name="subjectrefusal",
113
+ name="locale_modified",
114
+ field=models.CharField(
115
+ blank=True,
116
+ default="",
117
+ help_text="Auto-updated by Modeladmin",
118
+ max_length=10,
119
+ verbose_name="Locale modified",
120
+ ),
121
+ ),
122
+ ]
@@ -0,0 +1,28 @@
1
+ # Generated by Django 5.2.6 on 2025-09-18 00:24
2
+
3
+ import django.utils.timezone
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("edc_refusal", "0012_alter_historicalsubjectrefusal_comment_and_more"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="historicalsubjectrefusal",
16
+ name="report_datetime",
17
+ field=models.DateTimeField(
18
+ default=django.utils.timezone.now, verbose_name="Report Date and Time"
19
+ ),
20
+ ),
21
+ migrations.AlterField(
22
+ model_name="subjectrefusal",
23
+ name="report_datetime",
24
+ field=models.DateTimeField(
25
+ default=django.utils.timezone.now, verbose_name="Report Date and Time"
26
+ ),
27
+ ),
28
+ ]
@@ -1,14 +1,14 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
 
3
4
  from edc_model.models import OtherCharField
4
- from edc_utils import get_utcnow
5
5
 
6
6
 
7
7
  class SubjectRefusalModelMixin(models.Model):
8
8
  screening_identifier = models.CharField(max_length=50, unique=True)
9
9
 
10
10
  report_datetime = models.DateTimeField(
11
- verbose_name="Report Date and Time", default=get_utcnow
11
+ verbose_name="Report Date and Time", default=timezone.now
12
12
  )
13
13
 
14
14
  reason = models.ForeignKey(
@@ -21,7 +21,7 @@ class SubjectRefusalModelMixin(models.Model):
21
21
 
22
22
  comment = models.TextField(
23
23
  verbose_name="Additional Comments",
24
- null=True,
24
+ default="",
25
25
  blank=True,
26
26
  )
27
27
 
@@ -3,8 +3,7 @@
3
3
  from __future__ import unicode_literals
4
4
 
5
5
  from django.db import migrations, models
6
-
7
- import edc_utils
6
+ import django.utils.timezone
8
7
 
9
8
 
10
9
  class Migration(migrations.Migration):
@@ -14,11 +13,11 @@ class Migration(migrations.Migration):
14
13
  migrations.AlterField(
15
14
  model_name="registeredsubject",
16
15
  name="created",
17
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
16
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
18
17
  ),
19
18
  migrations.AlterField(
20
19
  model_name="registeredsubject",
21
20
  name="modified",
22
- field=models.DateTimeField(default=edc_utils.date.get_utcnow, editable=False),
21
+ field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
23
22
  ),
24
23
  ]
@@ -6,6 +6,8 @@ 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 django.utils.timezone
10
+
9
11
  import edc_utils
10
12
 
11
13
 
@@ -16,7 +18,7 @@ class Migration(migrations.Migration):
16
18
  migrations.AlterField(
17
19
  model_name="registeredsubject",
18
20
  name="created",
19
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
21
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
20
22
  ),
21
23
  migrations.AlterField(
22
24
  model_name="registeredsubject",
@@ -51,7 +53,7 @@ class Migration(migrations.Migration):
51
53
  migrations.AlterField(
52
54
  model_name="registeredsubject",
53
55
  name="modified",
54
- field=models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
56
+ field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
55
57
  ),
56
58
  migrations.AlterField(
57
59
  model_name="registeredsubject",
@@ -20,6 +20,7 @@ import edc_model_fields.fields.hostname_modification_field
20
20
  import edc_model_fields.fields.identity_type_field
21
21
  import edc_model_fields.fields.userfield
22
22
  import edc_utils
23
+ import django.utils.timezone
23
24
 
24
25
 
25
26
  class Migration(migrations.Migration):
@@ -35,11 +36,11 @@ class Migration(migrations.Migration):
35
36
  fields=[
36
37
  (
37
38
  "created",
38
- models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
39
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
39
40
  ),
40
41
  (
41
42
  "modified",
42
- models.DateTimeField(blank=True, default=edc_utils.date.get_utcnow),
43
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
43
44
  ),
44
45
  (
45
46
  "user_created",