clinicedc 2.0.6__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 (386) hide show
  1. {clinicedc-2.0.6.dist-info → clinicedc-2.0.7.dist-info}/METADATA +2 -2
  2. {clinicedc-2.0.6.dist-info → clinicedc-2.0.7.dist-info}/RECORD +386 -335
  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/utils.py +1 -1
  385. {clinicedc-2.0.6.dist-info → clinicedc-2.0.7.dist-info}/WHEEL +0 -0
  386. {clinicedc-2.0.6.dist-info → clinicedc-2.0.7.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,227 @@
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_pharmacy", "0089_alter_allocation_allocated_by_and_more"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="allocation",
16
+ name="allocation_datetime",
17
+ field=models.DateTimeField(default=django.utils.timezone.now),
18
+ ),
19
+ migrations.AlterField(
20
+ model_name="confirmation",
21
+ name="confirmed_datetime",
22
+ field=models.DateTimeField(default=django.utils.timezone.now),
23
+ ),
24
+ migrations.AlterField(
25
+ model_name="confirmationatsite",
26
+ name="transfer_confirmation_datetime",
27
+ field=models.DateTimeField(default=django.utils.timezone.now),
28
+ ),
29
+ migrations.AlterField(
30
+ model_name="confirmationatsiteitem",
31
+ name="transfer_confirmation_item_datetime",
32
+ field=models.DateTimeField(default=django.utils.timezone.now),
33
+ ),
34
+ migrations.AlterField(
35
+ model_name="dispense",
36
+ name="dispense_datetime",
37
+ field=models.DateTimeField(default=django.utils.timezone.now),
38
+ ),
39
+ migrations.AlterField(
40
+ model_name="dispenseitem",
41
+ name="dispense_item_datetime",
42
+ field=models.DateTimeField(default=django.utils.timezone.now),
43
+ ),
44
+ migrations.AlterField(
45
+ model_name="historicalallocation",
46
+ name="allocation_datetime",
47
+ field=models.DateTimeField(default=django.utils.timezone.now),
48
+ ),
49
+ migrations.AlterField(
50
+ model_name="historicalconfirmation",
51
+ name="confirmed_datetime",
52
+ field=models.DateTimeField(default=django.utils.timezone.now),
53
+ ),
54
+ migrations.AlterField(
55
+ model_name="historicalconfirmationatsite",
56
+ name="transfer_confirmation_datetime",
57
+ field=models.DateTimeField(default=django.utils.timezone.now),
58
+ ),
59
+ migrations.AlterField(
60
+ model_name="historicalconfirmationatsiteitem",
61
+ name="transfer_confirmation_item_datetime",
62
+ field=models.DateTimeField(default=django.utils.timezone.now),
63
+ ),
64
+ migrations.AlterField(
65
+ model_name="historicaldispense",
66
+ name="dispense_datetime",
67
+ field=models.DateTimeField(default=django.utils.timezone.now),
68
+ ),
69
+ migrations.AlterField(
70
+ model_name="historicaldispenseitem",
71
+ name="dispense_item_datetime",
72
+ field=models.DateTimeField(default=django.utils.timezone.now),
73
+ ),
74
+ migrations.AlterField(
75
+ model_name="historicalreceive",
76
+ name="receive_datetime",
77
+ field=models.DateTimeField(default=django.utils.timezone.now),
78
+ ),
79
+ migrations.AlterField(
80
+ model_name="historicalreceiveitem",
81
+ name="receive_item_datetime",
82
+ field=models.DateTimeField(default=django.utils.timezone.now),
83
+ ),
84
+ migrations.AlterField(
85
+ model_name="historicalrepackrequest",
86
+ name="repack_datetime",
87
+ field=models.DateTimeField(default=django.utils.timezone.now),
88
+ ),
89
+ migrations.AlterField(
90
+ model_name="historicalrx",
91
+ name="report_datetime",
92
+ field=models.DateTimeField(default=django.utils.timezone.now),
93
+ ),
94
+ migrations.AlterField(
95
+ model_name="historicalrx",
96
+ name="rx_date",
97
+ field=models.DateField(
98
+ default=django.utils.timezone.now, verbose_name="Date RX written"
99
+ ),
100
+ ),
101
+ migrations.AlterField(
102
+ model_name="historicalstock",
103
+ name="stock_datetime",
104
+ field=models.DateTimeField(
105
+ default=django.utils.timezone.now, help_text="date stock record created"
106
+ ),
107
+ ),
108
+ migrations.AlterField(
109
+ model_name="historicalstockadjustment",
110
+ name="adjustment_datetime",
111
+ field=models.DateTimeField(default=django.utils.timezone.now),
112
+ ),
113
+ migrations.AlterField(
114
+ model_name="historicalstockrequest",
115
+ name="request_datetime",
116
+ field=models.DateTimeField(default=django.utils.timezone.now),
117
+ ),
118
+ migrations.AlterField(
119
+ model_name="historicalstockrequestitem",
120
+ name="request_item_datetime",
121
+ field=models.DateTimeField(default=django.utils.timezone.now),
122
+ ),
123
+ migrations.AlterField(
124
+ model_name="historicalstocktransfer",
125
+ name="transfer_datetime",
126
+ field=models.DateTimeField(default=django.utils.timezone.now),
127
+ ),
128
+ migrations.AlterField(
129
+ model_name="historicalstocktransferitem",
130
+ name="transfer_item_datetime",
131
+ field=models.DateTimeField(default=django.utils.timezone.now),
132
+ ),
133
+ migrations.AlterField(
134
+ model_name="historicalstoragebin",
135
+ name="bin_datetime",
136
+ field=models.DateTimeField(default=django.utils.timezone.now),
137
+ ),
138
+ migrations.AlterField(
139
+ model_name="historicalstoragebinitem",
140
+ name="item_datetime",
141
+ field=models.DateTimeField(default=django.utils.timezone.now),
142
+ ),
143
+ migrations.AlterField(
144
+ model_name="historicalsupplier",
145
+ name="supplier_datetime",
146
+ field=models.DateTimeField(default=django.utils.timezone.now),
147
+ ),
148
+ migrations.AlterField(
149
+ model_name="receive",
150
+ name="receive_datetime",
151
+ field=models.DateTimeField(default=django.utils.timezone.now),
152
+ ),
153
+ migrations.AlterField(
154
+ model_name="receiveitem",
155
+ name="receive_item_datetime",
156
+ field=models.DateTimeField(default=django.utils.timezone.now),
157
+ ),
158
+ migrations.AlterField(
159
+ model_name="repackrequest",
160
+ name="repack_datetime",
161
+ field=models.DateTimeField(default=django.utils.timezone.now),
162
+ ),
163
+ migrations.AlterField(
164
+ model_name="rx",
165
+ name="report_datetime",
166
+ field=models.DateTimeField(default=django.utils.timezone.now),
167
+ ),
168
+ migrations.AlterField(
169
+ model_name="rx",
170
+ name="rx_date",
171
+ field=models.DateField(
172
+ default=django.utils.timezone.now, verbose_name="Date RX written"
173
+ ),
174
+ ),
175
+ migrations.AlterField(
176
+ model_name="stock",
177
+ name="stock_datetime",
178
+ field=models.DateTimeField(
179
+ default=django.utils.timezone.now, help_text="date stock record created"
180
+ ),
181
+ ),
182
+ migrations.AlterField(
183
+ model_name="stockadjustment",
184
+ name="adjustment_datetime",
185
+ field=models.DateTimeField(default=django.utils.timezone.now),
186
+ ),
187
+ migrations.AlterField(
188
+ model_name="stockavailability",
189
+ name="created",
190
+ field=models.DateTimeField(default=django.utils.timezone.now),
191
+ ),
192
+ migrations.AlterField(
193
+ model_name="stockrequest",
194
+ name="request_datetime",
195
+ field=models.DateTimeField(default=django.utils.timezone.now),
196
+ ),
197
+ migrations.AlterField(
198
+ model_name="stockrequestitem",
199
+ name="request_item_datetime",
200
+ field=models.DateTimeField(default=django.utils.timezone.now),
201
+ ),
202
+ migrations.AlterField(
203
+ model_name="stocktransfer",
204
+ name="transfer_datetime",
205
+ field=models.DateTimeField(default=django.utils.timezone.now),
206
+ ),
207
+ migrations.AlterField(
208
+ model_name="stocktransferitem",
209
+ name="transfer_item_datetime",
210
+ field=models.DateTimeField(default=django.utils.timezone.now),
211
+ ),
212
+ migrations.AlterField(
213
+ model_name="storagebin",
214
+ name="bin_datetime",
215
+ field=models.DateTimeField(default=django.utils.timezone.now),
216
+ ),
217
+ migrations.AlterField(
218
+ model_name="storagebinitem",
219
+ name="item_datetime",
220
+ field=models.DateTimeField(default=django.utils.timezone.now),
221
+ ),
222
+ migrations.AlterField(
223
+ model_name="supplier",
224
+ name="supplier_datetime",
225
+ field=models.DateTimeField(default=django.utils.timezone.now),
226
+ ),
227
+ ]
@@ -53,7 +53,7 @@ class StudyMedicationRefillModelMixin(models.Model):
53
53
 
54
54
  stock_codes = models.TextField(
55
55
  max_length=30,
56
- null=True,
56
+ default="",
57
57
  blank=True,
58
58
  validators=[
59
59
  RegexValidator(
@@ -65,7 +65,7 @@ class StudyMedicationRefillModelMixin(models.Model):
65
65
  help_text="Enter the medication bottle barcode or barcodes. Type one code per line",
66
66
  )
67
67
 
68
- special_instructions = models.TextField(null=True, blank=True)
68
+ special_instructions = models.TextField(blank=True, default="")
69
69
 
70
70
  class Meta:
71
71
  verbose_name = "Study Medication"
@@ -37,9 +37,9 @@ class Medication(BaseUuidModel):
37
37
  class Meta(BaseUuidModel.Meta):
38
38
  verbose_name = "Medication"
39
39
  verbose_name_plural = "Medications"
40
- constraints = [
40
+ constraints = (
41
41
  UniqueConstraint(
42
42
  fields=["name", "display_name"],
43
43
  name="%(app_label)s_%(class)s_name_uniq",
44
- )
45
- ]
44
+ ),
45
+ )
@@ -2,31 +2,30 @@ from django.db import models
2
2
 
3
3
 
4
4
  class AddressModelMixin(models.Model):
5
+ address_one = models.CharField(max_length=255, default="", blank=True)
5
6
 
6
- address_one = models.CharField(max_length=255, null=True, blank=True)
7
+ address_two = models.CharField(max_length=255, default="", blank=True)
7
8
 
8
- address_two = models.CharField(max_length=255, null=True, blank=True)
9
+ city = models.CharField(max_length=255, default="", blank=True)
9
10
 
10
- city = models.CharField(max_length=255, null=True, blank=True)
11
+ postal_code = models.CharField(max_length=255, default="", blank=True)
11
12
 
12
- postal_code = models.CharField(max_length=255, null=True, blank=True)
13
+ state = models.CharField(max_length=255, default="", blank=True)
13
14
 
14
- state = models.CharField(max_length=255, null=True, blank=True)
15
-
16
- country = models.CharField(max_length=255, null=True, blank=True)
15
+ country = models.CharField(max_length=255, default="", blank=True)
17
16
 
18
17
  class Meta:
19
18
  abstract = True
20
19
 
21
20
 
22
21
  class ContactModelMixin(models.Model):
23
- email = models.EmailField(null=True, blank=True)
22
+ email = models.EmailField(default="", blank=True)
24
23
 
25
- email_alternative = models.EmailField(null=True, blank=True)
24
+ email_alternative = models.EmailField(default="", blank=True)
26
25
 
27
- telephone = models.CharField(max_length=15, null=True, blank=True)
26
+ telephone = models.CharField(max_length=15, default="", blank=True)
28
27
 
29
- telephone_alternative = models.CharField(max_length=15, null=True, blank=True)
28
+ telephone_alternative = models.CharField(max_length=15, default="", blank=True)
30
29
 
31
30
  class Meta:
32
31
  abstract = True
@@ -3,6 +3,7 @@ from uuid import uuid4
3
3
  from django.core.exceptions import ObjectDoesNotExist
4
4
  from django.db import models
5
5
  from django.db.models import PROTECT, Index
6
+ from django.utils import timezone
6
7
 
7
8
  from edc_action_item.models import ActionModelMixin
8
9
  from edc_constants.constants import NEW
@@ -12,7 +13,7 @@ from edc_randomization.site_randomizers import site_randomizers
12
13
  from edc_registration.models import RegisteredSubject
13
14
  from edc_sites.managers import CurrentSiteManager
14
15
  from edc_sites.model_mixins import SiteModelMixin
15
- from edc_utils import formatted_age, get_utcnow
16
+ from edc_utils import formatted_age
16
17
 
17
18
  from ...choices import PRESCRIPTION_STATUS
18
19
  from ...constants import PRESCRIPTION_ACTION
@@ -54,9 +55,9 @@ class Rx(
54
55
  blank=False,
55
56
  )
56
57
 
57
- report_datetime = models.DateTimeField(default=get_utcnow)
58
+ report_datetime = models.DateTimeField(default=timezone.now)
58
59
 
59
- rx_date = models.DateField(verbose_name="Date RX written", default=get_utcnow)
60
+ rx_date = models.DateField(verbose_name="Date RX written", default=timezone.now)
60
61
 
61
62
  rx_expiration_date = models.DateField(
62
63
  verbose_name="Date RX expires",
@@ -75,17 +76,17 @@ class Rx(
75
76
  help_text="Number of times this prescription may be refilled",
76
77
  )
77
78
 
78
- rando_sid = models.CharField(max_length=25, null=True, blank=True)
79
+ rando_sid = models.CharField(max_length=25, default="", blank=True)
79
80
 
80
- randomizer_name = models.CharField(max_length=25, null=True, blank=True)
81
+ randomizer_name = models.CharField(max_length=25, default="", blank=True)
81
82
 
82
83
  weight_in_kgs = models.DecimalField(max_digits=6, decimal_places=1, null=True, blank=True)
83
84
 
84
- clinician_initials = models.CharField(max_length=3, null=True)
85
+ clinician_initials = models.CharField(max_length=3, default="")
85
86
 
86
87
  notes = models.TextField(
87
88
  max_length=250,
88
- null=True,
89
+ default="",
89
90
  blank=True,
90
91
  help_text="Private notes for pharmacist only",
91
92
  )
@@ -112,18 +113,18 @@ class Rx(
112
113
  .objects.get(subject_identifier=self.subject_identifier)
113
114
  .sid
114
115
  )
115
- except ObjectDoesNotExist:
116
+ except ObjectDoesNotExist as e:
116
117
  raise PrescriptionError(
117
118
  "Unable to create prescription. Subject has not been "
118
119
  f"randomized (randomizer={self.randomizer_name}"
119
- )
120
+ ) from e
120
121
  super().save(*args, **kwargs)
121
122
 
122
123
  def description(self):
123
124
  return (
124
125
  f"{','.join([o.display_name for o in self.medications.all()])} "
125
126
  f"{self.registered_subject.subject_identifier} {self.registered_subject.initials} "
126
- f"{formatted_age(born=self.registered_subject.dob, reference_dt=get_utcnow())} "
127
+ f"{formatted_age(born=self.registered_subject.dob, reference_dt=timezone.now())} "
127
128
  f"{self.registered_subject.gender} "
128
129
  f"Written: {self.rx_date}"
129
130
  )
@@ -134,11 +135,11 @@ class Rx(
134
135
  obj = randomizer.model_cls().objects.get(
135
136
  subject_identifier=self.subject_identifier
136
137
  )
137
- except ObjectDoesNotExist:
138
+ except ObjectDoesNotExist as e:
138
139
  raise PrescriptionError(
139
140
  "Unable to create prescription. Subject has not been "
140
141
  f"randomized (randomizer={self.randomizer_name}"
141
- )
142
+ ) from e
142
143
  return Assignment.objects.get(name=obj.assignment)
143
144
 
144
145
  class Meta(BaseUuidModel.Meta):
@@ -57,7 +57,6 @@ class RxRefill(
57
57
 
58
58
  refill_start_datetime = models.DateTimeField(
59
59
  verbose_name="Refill start date/time",
60
- # default=get_utcnow,
61
60
  help_text="Starting date for this refill",
62
61
  )
63
62
 
@@ -1,10 +1,10 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
  from sequences import get_next_value
3
4
 
4
5
  from edc_model.models import BaseUuidModel, HistoricalRecords
5
6
  from edc_randomization.site_randomizers import site_randomizers
6
7
  from edc_registration.models import RegisteredSubject
7
- from edc_utils import get_utcnow
8
8
 
9
9
  from ...exceptions import AllocationError
10
10
  from .. import Assignment, Rx
@@ -28,7 +28,7 @@ class Allocation(BaseUuidModel):
28
28
  help_text="A sequential unique identifier set by the EDC",
29
29
  )
30
30
 
31
- allocation_datetime = models.DateTimeField(default=get_utcnow)
31
+ allocation_datetime = models.DateTimeField(default=timezone.now)
32
32
 
33
33
  registered_subject = models.ForeignKey(
34
34
  RegisteredSubject,
@@ -48,7 +48,7 @@ class Allocation(BaseUuidModel):
48
48
  blank=False,
49
49
  )
50
50
 
51
- allocated_by = models.CharField(max_length=50, null=True, blank=True)
51
+ allocated_by = models.CharField(max_length=50, default="", blank=True)
52
52
 
53
53
  objects = Manager()
54
54
 
@@ -1,8 +1,8 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
  from sequences import get_next_value
3
4
 
4
5
  from edc_model.models import BaseUuidModel, HistoricalRecords
5
- from edc_utils import get_utcnow
6
6
 
7
7
 
8
8
  class Manager(models.Manager):
@@ -32,9 +32,9 @@ class Confirmation(BaseUuidModel):
32
32
  null=True,
33
33
  )
34
34
 
35
- confirmed_datetime = models.DateTimeField(default=get_utcnow)
35
+ confirmed_datetime = models.DateTimeField(default=timezone.now)
36
36
 
37
- confirmed_by = models.CharField(max_length=100, null=True, blank=True)
37
+ confirmed_by = models.CharField(max_length=100, default="", blank=True)
38
38
 
39
39
  objects = Manager()
40
40
 
@@ -1,9 +1,9 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
  from sequences import get_next_value
3
4
 
4
5
  from edc_model.models import BaseUuidModel, HistoricalRecords
5
6
  from edc_sites.model_mixins import SiteModelMixin
6
- from edc_utils import get_utcnow
7
7
 
8
8
  from ...exceptions import StockTransferConfirmationError
9
9
  from .location import Location
@@ -19,10 +19,11 @@ class ConfirmationAtSite(SiteModelMixin, BaseUuidModel):
19
19
  max_length=36,
20
20
  unique=True,
21
21
  blank=True,
22
+ null=True,
22
23
  help_text="A sequential unique identifier set by the EDC",
23
24
  )
24
25
 
25
- transfer_confirmation_datetime = models.DateTimeField(default=get_utcnow)
26
+ transfer_confirmation_datetime = models.DateTimeField(default=timezone.now)
26
27
 
27
28
  stock_transfer = models.OneToOneField(StockTransfer, on_delete=models.PROTECT)
28
29
 
@@ -1,9 +1,9 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
  from sequences import get_next_value
3
4
 
4
5
  from edc_model.models import BaseUuidModel, HistoricalRecords
5
6
  from edc_sites.model_mixins import SiteModelMixin
6
- from edc_utils import get_utcnow
7
7
 
8
8
  from ...exceptions import ConfirmAtSiteError
9
9
  from .confirmation_at_site import ConfirmationAtSite
@@ -15,7 +15,6 @@ class Manager(models.Manager):
15
15
 
16
16
 
17
17
  class ConfirmationAtSiteItem(SiteModelMixin, BaseUuidModel):
18
-
19
18
  confirmation_at_site = models.ForeignKey(ConfirmationAtSite, on_delete=models.PROTECT)
20
19
 
21
20
  transfer_confirmation_item_identifier = models.CharField(
@@ -26,13 +25,13 @@ class ConfirmationAtSiteItem(SiteModelMixin, BaseUuidModel):
26
25
  help_text="A sequential unique identifier set by the EDC",
27
26
  )
28
27
 
29
- transfer_confirmation_item_datetime = models.DateTimeField(default=get_utcnow)
28
+ transfer_confirmation_item_datetime = models.DateTimeField(default=timezone.now)
30
29
 
31
30
  stock = models.OneToOneField(Stock, on_delete=models.PROTECT)
32
31
 
33
32
  confirmed_datetime = models.DateTimeField(null=True, blank=True)
34
33
 
35
- confirmed_by = models.CharField(max_length=150, null=True, blank=True)
34
+ confirmed_by = models.CharField(max_length=150, default="", blank=True)
36
35
 
37
36
  objects = Manager()
38
37
 
@@ -1,9 +1,9 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
  from sequences import get_next_value
3
4
 
4
5
  from edc_model.models import BaseUuidModel, HistoricalRecords
5
6
  from edc_sites.model_mixins import SiteModelMixin
6
- from edc_utils import get_utcnow
7
7
 
8
8
  from ..prescription import Rx
9
9
  from .location import Location
@@ -14,7 +14,6 @@ class Manager(models.Manager):
14
14
 
15
15
 
16
16
  class Dispense(SiteModelMixin, BaseUuidModel):
17
-
18
17
  dispense_identifier = models.CharField(
19
18
  max_length=36,
20
19
  unique=True,
@@ -23,9 +22,9 @@ class Dispense(SiteModelMixin, BaseUuidModel):
23
22
  help_text="A sequential unique identifier set by the EDC",
24
23
  )
25
24
 
26
- dispense_datetime = models.DateTimeField(default=get_utcnow)
25
+ dispense_datetime = models.DateTimeField(default=timezone.now)
27
26
 
28
- dispensed_by = models.CharField(max_length=100, null=True, blank=True)
27
+ dispensed_by = models.CharField(max_length=100, default="", blank=True)
29
28
 
30
29
  rx = models.ForeignKey(Rx, on_delete=models.PROTECT, null=True, blank=False)
31
30
 
@@ -36,8 +35,8 @@ class Dispense(SiteModelMixin, BaseUuidModel):
36
35
 
37
36
  to_subject = models.BooleanField(default=False)
38
37
  to_subject_datetime = models.DateTimeField(null=True, blank=True)
39
- crf_label_lower = models.CharField(max_length=100, null=True, blank=True)
40
- crf_field_name = models.CharField(max_length=100, null=True, blank=True)
38
+ crf_label_lower = models.CharField(max_length=100, default="", blank=True)
39
+ crf_field_name = models.CharField(max_length=100, default="", blank=True)
41
40
  crf_id = models.UUIDField(null=True, blank=True)
42
41
 
43
42
  objects = Manager()
@@ -1,9 +1,9 @@
1
+ import django.utils.timezone
1
2
  from django.db import models
2
3
  from sequences import get_next_value
3
4
 
4
5
  from edc_model.models import BaseUuidModel, HistoricalRecords
5
6
  from edc_sites.model_mixins import SiteModelMixin
6
- from edc_utils import get_utcnow
7
7
  from edc_visit_schedule.model_mixins import VisitCodeFieldsModelMixin
8
8
 
9
9
  from .dispense import Dispense
@@ -25,7 +25,7 @@ class DispenseItem(SiteModelMixin, VisitCodeFieldsModelMixin, BaseUuidModel):
25
25
  help_text="A sequential unique identifier set by the EDC",
26
26
  )
27
27
 
28
- dispense_item_datetime = models.DateTimeField(default=get_utcnow)
28
+ dispense_item_datetime = models.DateTimeField(default=django.utils.timezone.now)
29
29
 
30
30
  dispense = models.ForeignKey(
31
31
  Dispense,
@@ -11,7 +11,6 @@ class Manager(models.Manager):
11
11
 
12
12
 
13
13
  class Location(ListModelMixin, BaseUuidModel):
14
-
15
14
  display_name = models.CharField(
16
15
  verbose_name="Name",
17
16
  max_length=250,
@@ -23,14 +22,14 @@ class Location(ListModelMixin, BaseUuidModel):
23
22
 
24
23
  site = models.ForeignKey(Site, on_delete=models.PROTECT, null=True, blank=True)
25
24
 
26
- contact_name = models.CharField(max_length=150, null=True, blank=True)
25
+ contact_name = models.CharField(max_length=150, default="", blank=True)
27
26
  contact_tel = models.CharField(
28
27
  max_length=150,
29
28
  validators=[RegexValidator("[0-9]{1,15}")],
30
- null=True,
29
+ default="",
31
30
  blank=True,
32
31
  )
33
- contact_email = models.EmailField(max_length=150, null=True, blank=True)
32
+ contact_email = models.EmailField(max_length=150, default="", blank=True)
34
33
 
35
34
  objects = Manager()
36
35
 
@@ -14,8 +14,7 @@ class Manager(models.Manager):
14
14
 
15
15
 
16
16
  class Lot(BaseUuidModel):
17
-
18
- lot_identifier = models.CharField(
17
+ lot_identifier = models.CharField( # noqa: DJ001
19
18
  max_length=25,
20
19
  unique=True,
21
20
  null=True,
@@ -35,15 +34,15 @@ class Lot(BaseUuidModel):
35
34
 
36
35
  expiration_date = models.DateField()
37
36
 
38
- manufactured_by = models.CharField(max_length=50, null=True, blank=True)
37
+ manufactured_by = models.CharField(max_length=50, default="", blank=True)
39
38
 
40
- country_of_origin = models.CharField(max_length=50, null=True, blank=True)
39
+ country_of_origin = models.CharField(max_length=50, default="", blank=True)
41
40
 
42
- storage_conditions = models.CharField(max_length=50, null=True, blank=True)
41
+ storage_conditions = models.CharField(max_length=50, default="", blank=True)
43
42
 
44
- reference = models.CharField(max_length=50, null=True, blank=True)
43
+ reference = models.CharField(max_length=50, default="", blank=True)
45
44
 
46
- comment = models.CharField(max_length=250, null=True, blank=True)
45
+ comment = models.CharField(max_length=250, default="", blank=True)
47
46
 
48
47
  objects = Manager()
49
48
 
@@ -27,7 +27,7 @@ class Order(BaseUuidModel):
27
27
 
28
28
  title = models.CharField(
29
29
  max_length=50,
30
- null=True,
30
+ default="",
31
31
  blank=False,
32
32
  help_text="A short description of this order",
33
33
  )
@@ -1,8 +1,8 @@
1
1
  from django.db import models
2
+ from django.utils import timezone
2
3
  from sequences import get_next_value
3
4
 
4
5
  from edc_model.models import BaseUuidModel, HistoricalRecords
5
- from edc_utils import get_utcnow
6
6
 
7
7
  from ...exceptions import ReceiveError
8
8
  from .location import Location
@@ -18,12 +18,12 @@ class Receive(BaseUuidModel):
18
18
  receive_identifier = models.CharField(
19
19
  max_length=36,
20
20
  unique=True,
21
- default="",
21
+ null=True,
22
22
  blank=True,
23
23
  help_text="A sequential unique identifier set by the EDC",
24
24
  )
25
25
 
26
- receive_datetime = models.DateTimeField(default=get_utcnow)
26
+ receive_datetime = models.DateTimeField(default=timezone.now)
27
27
 
28
28
  item_count = models.IntegerField(verbose_name="Item count", null=True)
29
29