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
@@ -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
  (
@@ -154,14 +155,14 @@ class Migration(migrations.Migration):
154
155
  "created",
155
156
  models.DateTimeField(
156
157
  blank=True,
157
- default=django_audit_fields.models.audit_model_mixin.utcnow,
158
+ default=django.utils.timezone.now,
158
159
  ),
159
160
  ),
160
161
  (
161
162
  "modified",
162
163
  models.DateTimeField(
163
164
  blank=True,
164
- default=django_audit_fields.models.audit_model_mixin.utcnow,
165
+ default=django.utils.timezone.now,
165
166
  ),
166
167
  ),
167
168
  (
@@ -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):
@@ -31,14 +32,14 @@ class Migration(migrations.Migration):
31
32
  "created",
32
33
  models.DateTimeField(
33
34
  blank=True,
34
- default=django_audit_fields.models.audit_model_mixin.utcnow,
35
+ default=django.utils.timezone.now,
35
36
  ),
36
37
  ),
37
38
  (
38
39
  "modified",
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
  (
@@ -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):
@@ -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
  (
@@ -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,285 @@
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_adverse_event", "0015_alter_aeactionclassification_revision_and_more"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="aeactionclassification",
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="aeactionclassification",
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="aeactionclassification",
29
+ name="extra_value",
30
+ field=models.CharField(default="", max_length=250),
31
+ ),
32
+ migrations.AlterField(
33
+ model_name="aeactionclassification",
34
+ name="field_name",
35
+ field=models.CharField(
36
+ blank=True,
37
+ default="",
38
+ editable=False,
39
+ help_text="Not required",
40
+ max_length=25,
41
+ ),
42
+ ),
43
+ migrations.AlterField(
44
+ model_name="aeactionclassification",
45
+ name="locale_created",
46
+ field=models.CharField(
47
+ blank=True,
48
+ default="",
49
+ help_text="Auto-updated by Modeladmin",
50
+ max_length=10,
51
+ verbose_name="Locale created",
52
+ ),
53
+ ),
54
+ migrations.AlterField(
55
+ model_name="aeactionclassification",
56
+ name="locale_modified",
57
+ field=models.CharField(
58
+ blank=True,
59
+ default="",
60
+ help_text="Auto-updated by Modeladmin",
61
+ max_length=10,
62
+ verbose_name="Locale modified",
63
+ ),
64
+ ),
65
+ migrations.AlterField(
66
+ model_name="aeactionclassification",
67
+ name="plural_name",
68
+ field=models.CharField(
69
+ default="", max_length=250, verbose_name="Plural name"
70
+ ),
71
+ ),
72
+ migrations.AlterField(
73
+ model_name="aeclassification",
74
+ name="device_created",
75
+ field=models.CharField(
76
+ blank=True, default="", max_length=10, verbose_name="Device created"
77
+ ),
78
+ ),
79
+ migrations.AlterField(
80
+ model_name="aeclassification",
81
+ name="device_modified",
82
+ field=models.CharField(
83
+ blank=True, default="", max_length=10, verbose_name="Device modified"
84
+ ),
85
+ ),
86
+ migrations.AlterField(
87
+ model_name="aeclassification",
88
+ name="extra_value",
89
+ field=models.CharField(default="", max_length=250),
90
+ ),
91
+ migrations.AlterField(
92
+ model_name="aeclassification",
93
+ name="field_name",
94
+ field=models.CharField(
95
+ blank=True,
96
+ default="",
97
+ editable=False,
98
+ help_text="Not required",
99
+ max_length=25,
100
+ ),
101
+ ),
102
+ migrations.AlterField(
103
+ model_name="aeclassification",
104
+ name="locale_created",
105
+ field=models.CharField(
106
+ blank=True,
107
+ default="",
108
+ help_text="Auto-updated by Modeladmin",
109
+ max_length=10,
110
+ verbose_name="Locale created",
111
+ ),
112
+ ),
113
+ migrations.AlterField(
114
+ model_name="aeclassification",
115
+ name="locale_modified",
116
+ field=models.CharField(
117
+ blank=True,
118
+ default="",
119
+ help_text="Auto-updated by Modeladmin",
120
+ max_length=10,
121
+ verbose_name="Locale modified",
122
+ ),
123
+ ),
124
+ migrations.AlterField(
125
+ model_name="aeclassification",
126
+ name="plural_name",
127
+ field=models.CharField(
128
+ default="", max_length=250, verbose_name="Plural name"
129
+ ),
130
+ ),
131
+ migrations.AlterField(
132
+ model_name="causeofdeath",
133
+ name="device_created",
134
+ field=models.CharField(
135
+ blank=True, default="", max_length=10, verbose_name="Device created"
136
+ ),
137
+ ),
138
+ migrations.AlterField(
139
+ model_name="causeofdeath",
140
+ name="device_modified",
141
+ field=models.CharField(
142
+ blank=True, default="", max_length=10, verbose_name="Device modified"
143
+ ),
144
+ ),
145
+ migrations.AlterField(
146
+ model_name="causeofdeath",
147
+ name="extra_value",
148
+ field=models.CharField(default="", max_length=250),
149
+ ),
150
+ migrations.AlterField(
151
+ model_name="causeofdeath",
152
+ name="field_name",
153
+ field=models.CharField(
154
+ blank=True,
155
+ default="",
156
+ editable=False,
157
+ help_text="Not required",
158
+ max_length=25,
159
+ ),
160
+ ),
161
+ migrations.AlterField(
162
+ model_name="causeofdeath",
163
+ name="locale_created",
164
+ field=models.CharField(
165
+ blank=True,
166
+ default="",
167
+ help_text="Auto-updated by Modeladmin",
168
+ max_length=10,
169
+ verbose_name="Locale created",
170
+ ),
171
+ ),
172
+ migrations.AlterField(
173
+ model_name="causeofdeath",
174
+ name="locale_modified",
175
+ field=models.CharField(
176
+ blank=True,
177
+ default="",
178
+ help_text="Auto-updated by Modeladmin",
179
+ max_length=10,
180
+ verbose_name="Locale modified",
181
+ ),
182
+ ),
183
+ migrations.AlterField(
184
+ model_name="causeofdeath",
185
+ name="plural_name",
186
+ field=models.CharField(
187
+ default="", max_length=250, verbose_name="Plural name"
188
+ ),
189
+ ),
190
+ migrations.AlterField(
191
+ model_name="edcpermissions",
192
+ name="device_created",
193
+ field=models.CharField(
194
+ blank=True, default="", max_length=10, verbose_name="Device created"
195
+ ),
196
+ ),
197
+ migrations.AlterField(
198
+ model_name="edcpermissions",
199
+ name="device_modified",
200
+ field=models.CharField(
201
+ blank=True, default="", max_length=10, verbose_name="Device modified"
202
+ ),
203
+ ),
204
+ migrations.AlterField(
205
+ model_name="edcpermissions",
206
+ name="locale_created",
207
+ field=models.CharField(
208
+ blank=True,
209
+ default="",
210
+ help_text="Auto-updated by Modeladmin",
211
+ max_length=10,
212
+ verbose_name="Locale created",
213
+ ),
214
+ ),
215
+ migrations.AlterField(
216
+ model_name="edcpermissions",
217
+ name="locale_modified",
218
+ field=models.CharField(
219
+ blank=True,
220
+ default="",
221
+ help_text="Auto-updated by Modeladmin",
222
+ max_length=10,
223
+ verbose_name="Locale modified",
224
+ ),
225
+ ),
226
+ migrations.AlterField(
227
+ model_name="saereason",
228
+ name="device_created",
229
+ field=models.CharField(
230
+ blank=True, default="", max_length=10, verbose_name="Device created"
231
+ ),
232
+ ),
233
+ migrations.AlterField(
234
+ model_name="saereason",
235
+ name="device_modified",
236
+ field=models.CharField(
237
+ blank=True, default="", max_length=10, verbose_name="Device modified"
238
+ ),
239
+ ),
240
+ migrations.AlterField(
241
+ model_name="saereason",
242
+ name="extra_value",
243
+ field=models.CharField(default="", max_length=250),
244
+ ),
245
+ migrations.AlterField(
246
+ model_name="saereason",
247
+ name="field_name",
248
+ field=models.CharField(
249
+ blank=True,
250
+ default="",
251
+ editable=False,
252
+ help_text="Not required",
253
+ max_length=25,
254
+ ),
255
+ ),
256
+ migrations.AlterField(
257
+ model_name="saereason",
258
+ name="locale_created",
259
+ field=models.CharField(
260
+ blank=True,
261
+ default="",
262
+ help_text="Auto-updated by Modeladmin",
263
+ max_length=10,
264
+ verbose_name="Locale created",
265
+ ),
266
+ ),
267
+ migrations.AlterField(
268
+ model_name="saereason",
269
+ name="locale_modified",
270
+ field=models.CharField(
271
+ blank=True,
272
+ default="",
273
+ help_text="Auto-updated by Modeladmin",
274
+ max_length=10,
275
+ verbose_name="Locale modified",
276
+ ),
277
+ ),
278
+ migrations.AlterField(
279
+ model_name="saereason",
280
+ name="plural_name",
281
+ field=models.CharField(
282
+ default="", max_length=250, verbose_name="Plural name"
283
+ ),
284
+ ),
285
+ ]
@@ -1,9 +1,9 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
 
3
4
  from edc_constants.choices import YES_NO
4
5
  from edc_constants.constants import NOT_APPLICABLE, YES
5
6
  from edc_model.validators import date_not_future
6
- from edc_utils import get_utcnow
7
7
 
8
8
  from ...choices import AE_GRADE_SIMPLE, AE_OUTCOME
9
9
  from ...utils import get_adverse_event_app_label
@@ -15,7 +15,7 @@ class AeFollowupFieldsModelMixin(models.Model):
15
15
  )
16
16
 
17
17
  report_datetime = models.DateTimeField(
18
- verbose_name="Report date and time", default=get_utcnow
18
+ verbose_name="Report date and time", default=timezone.now
19
19
  )
20
20
 
21
21
  outcome = models.CharField(blank=False, null=False, max_length=25, choices=AE_OUTCOME)
@@ -1,9 +1,9 @@
1
+ import django.utils.timezone
1
2
  from django.db import models
2
3
 
3
4
  from edc_constants.constants import NOT_APPLICABLE
4
5
  from edc_model.validators import date_not_future
5
6
  from edc_model_fields.fields.other_charfield import OtherCharField
6
- from edc_utils.date import get_utcnow
7
7
 
8
8
  from ...choices import AE_GRADE, STUDY_DRUG_RELATIONSHIP
9
9
  from ...models import AeClassification
@@ -17,7 +17,7 @@ class AeInitialFieldsModelMixin(models.Model):
17
17
  )
18
18
 
19
19
  report_datetime = models.DateTimeField(
20
- verbose_name="Report Date and Time", default=get_utcnow
20
+ verbose_name="Report Date and Time", default=django.utils.timezone.now
21
21
  )
22
22
 
23
23
  ae_classification = models.ForeignKey(
@@ -34,22 +34,23 @@ class AeInitialFieldsModelMixin(models.Model):
34
34
 
35
35
  ae_awareness_date = models.DateField(
36
36
  verbose_name="AE Awareness date",
37
- default=get_utcnow,
37
+ default=django.utils.timezone.now,
38
38
  validators=[date_not_future],
39
39
  )
40
40
 
41
41
  ae_start_date = models.DateField(
42
42
  verbose_name="Actual Start Date of AE",
43
- default=get_utcnow,
43
+ default=django.utils.timezone.now,
44
44
  validators=[date_not_future],
45
45
  )
46
46
 
47
47
  ae_grade = models.CharField(verbose_name="Severity of AE", max_length=25, choices=AE_GRADE)
48
48
 
49
- study_drug_relation = models.CharField(
49
+ study_drug_relation = models.CharField( # noqa: DJ001
50
50
  verbose_name="Relation to study drug:",
51
51
  max_length=25,
52
52
  choices=STUDY_DRUG_RELATIONSHIP,
53
+ null=True,
53
54
  )
54
55
 
55
56
  class Meta:
@@ -1,7 +1,7 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
 
3
4
  from edc_model.validators import datetime_not_future
4
- from edc_utils import get_utcnow
5
5
 
6
6
  from ...utils import get_adverse_event_app_label
7
7
 
@@ -14,7 +14,7 @@ class AesiFieldsModelMixin(models.Model):
14
14
  report_datetime = models.DateTimeField(
15
15
  verbose_name="Report date and time",
16
16
  validators=[datetime_not_future],
17
- default=get_utcnow,
17
+ default=timezone.now,
18
18
  )
19
19
 
20
20
  submitted_datetime = models.DateTimeField(
@@ -1,7 +1,7 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
 
3
4
  from edc_model.validators import datetime_not_future
4
- from edc_utils import get_utcnow
5
5
 
6
6
  from ...utils import get_adverse_event_app_label
7
7
 
@@ -14,7 +14,7 @@ class AeSusarFieldsModelMixin(models.Model):
14
14
  report_datetime = models.DateTimeField(
15
15
  verbose_name="Report date and time",
16
16
  validators=[datetime_not_future],
17
- default=get_utcnow,
17
+ default=timezone.now,
18
18
  )
19
19
 
20
20
  submitted_datetime = models.DateTimeField(
@@ -1,10 +1,10 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
 
3
4
  from edc_constants.choices import YES_NO, YES_NO_NA
4
5
  from edc_constants.constants import NOT_APPLICABLE
5
6
  from edc_model.validators import datetime_not_future
6
7
  from edc_model_fields.fields import OtherCharField
7
- from edc_utils import get_utcnow
8
8
 
9
9
  from ...models import AeClassification
10
10
  from ...utils import get_adverse_event_app_label
@@ -24,7 +24,7 @@ class AeTmgFieldsModelMixin(models.Model):
24
24
  report_datetime = models.DateTimeField(
25
25
  verbose_name="Report date and time",
26
26
  validators=[datetime_not_future],
27
- default=get_utcnow,
27
+ default=timezone.now,
28
28
  )
29
29
 
30
30
  ae_received_datetime = models.DateTimeField(
@@ -41,25 +41,31 @@ class AeTmgFieldsModelMixin(models.Model):
41
41
  verbose_name="Date and time of clinical review: ",
42
42
  )
43
43
 
44
- ae_description = models.TextField(blank=True, verbose_name="Description of AE:")
44
+ ae_description = models.TextField(
45
+ verbose_name="Description of AE:",
46
+ default="",
47
+ blank=True,
48
+ )
45
49
 
46
50
  investigator_comments = models.TextField(
47
- blank=True, verbose_name="This investigator's comments:"
51
+ verbose_name="This investigator's comments:",
52
+ default="",
53
+ blank=True,
48
54
  )
49
55
 
50
- ae_classification = models.CharField(max_length=150, blank=True)
56
+ ae_classification = models.CharField(max_length=150, blank=True, default="")
51
57
 
52
- ae_classification_other = OtherCharField(max_length=250, blank=True, null=True)
58
+ ae_classification_other = OtherCharField(max_length=250, blank=True, default="")
53
59
 
54
60
  original_report_agreed = models.CharField(
55
61
  verbose_name="Does this investigator agree with the original AE report?",
56
62
  max_length=15,
57
63
  choices=YES_NO,
58
- blank=False,
64
+ default="",
59
65
  help_text="If No, explain in the narrative below",
60
66
  )
61
67
 
62
- investigator_narrative = models.TextField(verbose_name="Narrative", blank=True)
68
+ investigator_narrative = models.TextField(verbose_name="Narrative", blank=True, default="")
63
69
 
64
70
  investigator_ae_classification_agreed = models.CharField(
65
71
  verbose_name=(
@@ -68,7 +74,6 @@ class AeTmgFieldsModelMixin(models.Model):
68
74
  ),
69
75
  max_length=15,
70
76
  choices=YES_NO_NA,
71
- blank=False,
72
77
  default=NOT_APPLICABLE,
73
78
  help_text="If No, select a classification below",
74
79
  )
@@ -78,14 +83,13 @@ class AeTmgFieldsModelMixin(models.Model):
78
83
  on_delete=models.PROTECT,
79
84
  verbose_name="Adverse Event (AE) Classification",
80
85
  null=True,
81
- blank=False,
82
86
  help_text=(
83
87
  "Only applicable if this investigator does not agree with the original AE report"
84
88
  ),
85
89
  )
86
90
 
87
91
  investigator_ae_classification_other = OtherCharField(
88
- max_length=250, blank=True, null=True
92
+ max_length=250, blank=True, default=""
89
93
  )
90
94
 
91
95
  officials_notified = models.DateTimeField(
@@ -1,6 +1,7 @@
1
1
  from django.core.validators import MinValueValidator
2
2
  from django.db import models
3
3
  from django.db.models.deletion import PROTECT
4
+ from django.utils import timezone
4
5
 
5
6
  from edc_action_item.managers import (
6
7
  ActionIdentifierModelManager,
@@ -18,7 +19,6 @@ from edc_protocol.validators import (
18
19
  datetime_not_before_study_start,
19
20
  )
20
21
  from edc_sites.model_mixins import SiteModelMixin
21
- from edc_utils import get_utcnow
22
22
 
23
23
  from ...constants import DEATH_REPORT_ACTION
24
24
  from ...models import CauseOfDeath
@@ -41,7 +41,7 @@ class DeathReportModelMixin(
41
41
  report_datetime = models.DateTimeField(
42
42
  verbose_name="Report Date",
43
43
  validators=[datetime_not_before_study_start, datetime_not_future],
44
- default=get_utcnow,
44
+ default=timezone.now,
45
45
  )
46
46
 
47
47
  death_datetime = models.DateTimeField(
@@ -70,6 +70,7 @@ class DeathReportModelMixin(
70
70
  max_length=5,
71
71
  verbose_name="Death as inpatient",
72
72
  blank=False,
73
+ default="",
73
74
  )
74
75
 
75
76
  cause_of_death = models.ForeignKey(
@@ -83,9 +84,9 @@ class DeathReportModelMixin(
83
84
  blank=False,
84
85
  )
85
86
 
86
- cause_of_death_other = OtherCharField(max_length=100, blank=True, null=True)
87
+ cause_of_death_other = OtherCharField(max_length=100, blank=True, default="")
87
88
 
88
- narrative = models.TextField(verbose_name="Narrative", blank=False)
89
+ narrative = models.TextField(verbose_name="Narrative", default="")
89
90
 
90
91
  objects = ActionIdentifierModelManager()
91
92
 
@@ -1,5 +1,6 @@
1
1
  from django.db import models
2
2
  from django.db.models.deletion import PROTECT
3
+ from django.utils import timezone
3
4
 
4
5
  from edc_action_item.managers import (
5
6
  ActionIdentifierModelManager,
@@ -12,7 +13,6 @@ from edc_model.models import ReportStatusModelMixin
12
13
  from edc_model.validators import datetime_not_future
13
14
  from edc_protocol.validators import datetime_not_before_study_start
14
15
  from edc_sites.model_mixins import SiteModelMixin
15
- from edc_utils import get_utcnow
16
16
 
17
17
  from ...constants import DEATH_REPORT_TMG_ACTION, DEATH_REPORT_TMG_SECOND_ACTION
18
18
  from ...models import CauseOfDeath
@@ -51,7 +51,7 @@ class DeathReportTmgFieldsModelMixin(models.Model):
51
51
  report_datetime = models.DateTimeField(
52
52
  verbose_name="Report Date",
53
53
  validators=[datetime_not_before_study_start, datetime_not_future],
54
- default=get_utcnow,
54
+ default=timezone.now,
55
55
  )
56
56
 
57
57
  cause_of_death = models.ForeignKey(
@@ -62,22 +62,25 @@ class DeathReportTmgFieldsModelMixin(models.Model):
62
62
  "Main cause of death in the opinion of the local study doctor and local PI"
63
63
  ),
64
64
  null=True,
65
+ default="",
65
66
  )
66
67
 
67
68
  cause_of_death_other = models.CharField(
68
69
  verbose_name='If "Other" above, please specify',
69
70
  max_length=100,
70
71
  blank=True,
72
+ default="",
71
73
  )
72
74
 
73
75
  cause_of_death_agreed = models.CharField(
74
76
  verbose_name="Is the cause of death agreed between study doctor and TMG member?",
75
77
  max_length=15,
76
78
  choices=YES_NO,
79
+ default="",
77
80
  help_text="If No, explain in the narrative below",
78
81
  )
79
82
 
80
- narrative = models.TextField(verbose_name="Narrative", blank=True)
83
+ narrative = models.TextField(verbose_name="Narrative", blank=True, default="")
81
84
 
82
85
  class Meta:
83
86
  abstract = True