clinicedc 2.0.6__py3-none-any.whl → 2.0.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of clinicedc might be problematic. Click here for more details.
- {clinicedc-2.0.6.dist-info → clinicedc-2.0.8.dist-info}/METADATA +2 -2
- {clinicedc-2.0.6.dist-info → clinicedc-2.0.8.dist-info}/RECORD +489 -441
- {clinicedc-2.0.6.dist-info → clinicedc-2.0.8.dist-info}/WHEEL +1 -1
- edc_action_item/action.py +1 -1
- edc_action_item/action_item_notification.py +2 -2
- edc_action_item/auths.py +37 -32
- edc_action_item/create_action_item.py +1 -1
- edc_action_item/decorators.py +1 -1
- edc_action_item/migrations/0001_initial.py +21 -22
- edc_action_item/migrations/0006_auto_20180707_1659.py +4 -4
- edc_action_item/migrations/0008_auto_20180809_0303.py +4 -4
- edc_action_item/migrations/0015_auto_20190114_0250.py +4 -4
- edc_action_item/migrations/0017_auto_20190305_0123.py +11 -30
- edc_action_item/migrations/0030_edcpermissions.py +3 -2
- edc_action_item/migrations/0039_alter_actionitem_auto_created_comment_and_more.py +398 -0
- edc_action_item/migrations/0040_alter_actionitem_report_datetime_and_more.py +34 -0
- edc_action_item/models/action_item.py +9 -4
- edc_action_item/models/action_model_mixin.py +5 -6
- edc_action_item/models/reference.py +2 -2
- edc_action_item/models/signals.py +22 -23
- edc_action_item/post_migrate_signals.py +1 -1
- edc_action_item/send_email.py +0 -85
- edc_action_item/site_action_items.py +5 -9
- edc_action_item/utils.py +3 -3
- edc_adherence/migrations/0005_alter_nonadherencereasons_extra_value_and_more.py +36 -0
- edc_adherence/model_mixins.py +1 -1
- edc_adverse_event/auths.py +55 -51
- edc_adverse_event/migrations/0001_initial.py +5 -4
- edc_adverse_event/migrations/0002_auto_20190802_0059.py +3 -2
- edc_adverse_event/migrations/0008_auto_20220825_0451.py +3 -2
- edc_adverse_event/migrations/0009_auto_20220907_0157.py +3 -2
- edc_adverse_event/migrations/0016_alter_aeactionclassification_device_created_and_more.py +285 -0
- edc_adverse_event/model_mixins/ae_followup/ae_followup_fields_model_mixin.py +2 -2
- edc_adverse_event/model_mixins/ae_initial/ae_initial_fields_model_mixin.py +6 -5
- edc_adverse_event/model_mixins/ae_special_interest/aesi_fields_model_mixin.py +2 -2
- edc_adverse_event/model_mixins/ae_susar/ae_susar_fields_model_mixin.py +2 -2
- edc_adverse_event/model_mixins/ae_tmg/ae_tmg_fields_model_mixin.py +15 -11
- edc_adverse_event/model_mixins/ae_tmg/ae_tmg_methods_model_mixin.py +2 -4
- edc_adverse_event/model_mixins/death_report/death_report_model_mixin.py +5 -4
- edc_adverse_event/model_mixins/death_report/death_report_tmg_model_mixin.py +6 -3
- edc_adverse_event/model_mixins/death_report/simple_death_report_model_mixin.py +2 -2
- edc_adverse_event/model_mixins/hospitaization/hospitalization_model_mixin.py +4 -3
- edc_adverse_event/modeladmin_mixins/death_report_admin_mixin.py +3 -3
- edc_adverse_event/models/signals.py +7 -7
- edc_adverse_event/templatetags/edc_adverse_event_extras.py +5 -4
- edc_adverse_event/view_mixins/ae/ae_listboard_view_mixin.py +3 -5
- edc_adverse_event/view_mixins/ae/death_report_listboard_view_mixin.py +6 -8
- edc_adverse_event/view_mixins/tmg/tmg_ae_listboard_view_mixin.py +2 -2
- edc_adverse_event/views/tmg/summary_listboard_view.py +3 -2
- edc_appointment/admin/appointment_admin.py +2 -2
- edc_appointment/admin/list_filters.py +2 -2
- edc_appointment/auths.py +14 -10
- edc_appointment/creators/appointment_creator.py +1 -1
- edc_appointment/creators/appointments_creator.py +1 -1
- edc_appointment/form_validators/appointment_form_validator.py +108 -82
- edc_appointment/migrations/0003_auto_20161127_2226.py +5 -6
- edc_appointment/migrations/0006_auto_20170106_2118.py +5 -5
- edc_appointment/migrations/0018_auto_20190305_0123.py +5 -12
- edc_appointment/migrations/0050_alter_appointment_appt_type_and_more.py +220 -0
- edc_appointment/model_mixins/appointment_fields_model_mixin.py +1 -2
- edc_appointment/model_mixins/appointment_methods_model_mixin.py +2 -3
- edc_appointment/model_mixins/appointment_model_mixin.py +31 -28
- edc_appointment/model_mixins/window_period_model_mixin.py +6 -7
- edc_appointment/models/appointment.py +1 -1
- edc_appointment/models/signals.py +44 -35
- edc_appointment/utils.py +19 -24
- edc_appointment/view_utils/appointment_button.py +2 -2
- edc_auth/admin/user_admin.py +1 -1
- edc_auth/auth_objects/__init__.py +2 -20
- edc_auth/auth_objects/default_groups.py +13 -11
- edc_auth/auth_objects/default_roles.py +26 -24
- edc_auth/auth_updater/auth_updater.py +13 -2
- edc_auth/auth_updater/group_updater.py +12 -10
- edc_auth/auth_updater/role_updater.py +2 -2
- edc_auth/constants.py +10 -0
- edc_auth/import_users.py +3 -3
- edc_auth/migrations/0001_squashed_0033_alter_userprofile_is_multisite_viewer.py +5 -5
- edc_auth/migrations/0012_auto_20191026_0034.py +3 -2
- edc_auth/migrations/0013_auto_20191026_0055.py +3 -2
- edc_auth/migrations/0025_permissions.py +3 -2
- edc_auth/migrations/0035_alter_edcpermissions_device_created_and_more.py +85 -0
- edc_auth/models/user_profile.py +14 -11
- edc_auth/post_migrate_signals.py +1 -1
- edc_auth/site_auths.py +80 -67
- edc_consent/actions.py +4 -5
- edc_consent/auths.py +18 -12
- edc_consent/migrations/0001_initial.py +3 -2
- edc_consent/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
- edc_consent/model_mixins/consent_extension_model_mixin.py +4 -5
- edc_consent/model_mixins/requires_consent_fields_model_mixin.py +2 -2
- edc_consent/utils.py +1 -1
- edc_constants/constants.py +1 -0
- edc_crf/auths.py +5 -0
- edc_crf/migrations/0001_initial.py +3 -2
- edc_crf/migrations/0009_alter_crfstatus_device_created_and_more.py +54 -0
- edc_dashboard/auths.py +10 -6
- edc_dashboard/migrations/0001_initial.py +3 -2
- edc_dashboard/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
- edc_dashboard/templatetags/edc_dashboard_extras.py +3 -2
- edc_dashboard/url_config.py +92 -83
- edc_dashboard/url_names.py +4 -4
- edc_dashboard/view_mixins/url_request_context_mixin.py +6 -5
- edc_data_manager/action_items.py +4 -6
- edc_data_manager/admin/actions.py +5 -5
- edc_data_manager/admin/data_query_admin.py +12 -11
- edc_data_manager/auths.py +37 -34
- edc_data_manager/handlers/handlers.py +6 -7
- edc_data_manager/migrations/0001_initial.py +19 -19
- edc_data_manager/migrations/0025_edcpermissions.py +3 -2
- edc_data_manager/migrations/0040_alter_datadictionary_device_created_and_more.py +327 -0
- edc_data_manager/migrations/0041_alter_dataquery_dm_user_and_more.py +164 -0
- edc_data_manager/models/data_query.py +5 -5
- edc_data_manager/models/model_mixins.py +8 -8
- edc_data_manager/rule/query_rule_wrapper.py +7 -7
- edc_data_manager/rule/rule_runner.py +4 -3
- edc_document_status/model_mixins.py +1 -1
- edc_egfr/egfr.py +11 -7
- edc_egfr/model_mixins/egfr_model_mixin.py +3 -7
- edc_export/admin/data_request_admin.py +2 -2
- edc_export/archive_exporter.py +7 -5
- edc_export/auths.py +32 -28
- edc_export/files_archiver.py +3 -2
- edc_export/migrations/0001_initial.py +26 -26
- edc_export/migrations/0004_auto_20190305_0123.py +25 -72
- edc_export/migrations/0013_edcpermissions.py +3 -2
- edc_export/migrations/0022_alter_datarequest_description_and_more.py +611 -0
- edc_export/migrations/0023_alter_datarequesthistory_archive_filename_and_more.py +29 -0
- edc_export/model_exporter/file_history_updater.py +10 -10
- edc_export/model_exporter/model_exporter.py +17 -15
- edc_export/model_exporter/object_history_helpers.py +2 -2
- edc_export/models/data_request_history.py +4 -4
- edc_export/utils.py +10 -15
- edc_facility/auths.py +8 -3
- edc_facility/facility.py +16 -22
- edc_facility/import_holidays.py +13 -13
- edc_facility/migrations/0005_healthfacility_healthfacilitytypes_and_more.py +8 -7
- edc_facility/migrations/0016_alter_healthfacility_device_created_and_more.py +139 -0
- edc_facility/migrations/0017_alter_healthfacility_gps_and_more.py +54 -0
- edc_facility/model_mixins.py +5 -5
- edc_form_label/custom_label_condition.py +11 -8
- edc_form_label/form_label.py +1 -1
- edc_form_runners/auths.py +11 -6
- edc_form_runners/form_runner.py +3 -5
- edc_form_runners/migrations/0001_initial.py +3 -2
- edc_form_runners/migrations/0005_alter_issue_device_created_and_more.py +49 -0
- edc_form_validators/applicable_field_validator.py +7 -6
- edc_form_validators/base_form_validator.py +8 -9
- edc_form_validators/other_specify_field_validator.py +2 -8
- edc_form_validators/required_field_validator.py +19 -16
- edc_identifier/migrations/0001_squashed_0018_auto_20180128_1054.py +3 -3
- edc_identifier/migrations/0002_auto_20190305_0123.py +3 -6
- edc_identifier/migrations/0006_auto_20161127_2226.py +15 -15
- edc_identifier/migrations/0007_auto_20161204_2227.py +3 -3
- edc_identifier/migrations/0009_auto_20161221_2323.py +3 -5
- edc_identifier/migrations/0010_auto_20170112_0602.py +17 -17
- edc_identifier/migrations/0011_alter_identifiermodel_device_created_and_more.py +79 -0
- edc_identifier/model_mixins.py +1 -1
- edc_identifier/models.py +9 -9
- edc_identifier/research_identifier.py +11 -10
- edc_identifier/simple_identifier.py +9 -5
- edc_identifier/subject_identifier.py +3 -2
- edc_lab/auths.py +26 -23
- edc_lab/lab/aliquot_creator.py +5 -8
- edc_lab/lab/primary_aliquot.py +14 -5
- edc_lab/migrations/0001_initial.py +29 -29
- edc_lab/migrations/0008_auto_20170921_0719.py +3 -3
- edc_lab/migrations/0010_auto_20171127_1541.py +15 -15
- edc_lab/migrations/0012_auto_20180114_1438.py +3 -3
- edc_lab/migrations/0019_auto_20190305_0123.py +43 -127
- edc_lab/migrations/0036_alter_aliquot_comment_alter_aliquot_device_created_and_more.py +1139 -0
- edc_lab/migrations/0037_alter_historicalorder_order_datetime_and_more.py +31 -0
- edc_lab/model_mixins/aliquot/aliquot_identifier_model_mixin.py +2 -2
- edc_lab/model_mixins/aliquot/aliquot_model_mixin.py +2 -2
- edc_lab/model_mixins/panel_model_mixin.py +18 -7
- edc_lab/model_mixins/requisition/crf_with_requisition_model_mixin.py +2 -4
- edc_lab/model_mixins/requisition/requisition_model_mixin.py +13 -16
- edc_lab/model_mixins/requisition/requisition_verify_model_mixin.py +1 -1
- edc_lab/model_mixins/result/result_item_model_mixin.py +4 -4
- edc_lab/model_mixins/shipping/manifest_model_mixin.py +4 -5
- edc_lab/model_mixins/shipping/verify_model_mixin.py +4 -6
- edc_lab/models/aliquot.py +2 -2
- edc_lab/models/box.py +1 -1
- edc_lab/models/box_item.py +6 -7
- edc_lab/models/manifest/manifest.py +3 -3
- edc_lab/models/manifest/manifest_item.py +7 -7
- edc_lab/models/manifest/shipper.py +3 -4
- edc_lab/models/order.py +6 -4
- edc_lab/models/panel.py +4 -4
- edc_lab/models/result.py +2 -2
- edc_lab/models/result_item.py +2 -2
- edc_lab_dashboard/auths.py +16 -11
- edc_lab_dashboard/migrations/0001_initial.py +3 -2
- edc_lab_dashboard/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
- edc_lab_dashboard/views/action_views/receive_view.py +2 -2
- edc_lab_dashboard/views/action_views/verify_box_item_view.py +2 -2
- edc_lab_results/calculate_missing.py +8 -8
- edc_lab_results/form_validator_mixins/blood_results_form_validator_mixin.py +2 -2
- edc_lab_results/get_summary.py +26 -25
- edc_lab_results/model_mixins/blood_result_model_mixin.py +9 -7
- edc_lab_results/model_mixins/fbg_model_mixin.py +3 -3
- edc_lab_results/model_mixins/glucose_model_mixin.py +3 -3
- edc_lab_results/model_mixins/hba1c_model_mixin.py +3 -3
- edc_label/auths.py +6 -1
- edc_label/label_template.py +8 -8
- edc_label/migrations/0001_initial.py +3 -2
- edc_label/migrations/0007_alter_zpllabeltemplates_device_created_and_more.py +49 -0
- edc_list_data/list_model_maker.py +2 -2
- edc_list_data/load_list_data.py +11 -14
- edc_list_data/load_model_data.py +3 -3
- edc_list_data/model_mixins.py +12 -4
- edc_list_data/post_migrate_signals.py +1 -1
- edc_list_data/preload_data.py +4 -4
- edc_list_data/row.py +1 -1
- edc_list_data/site_list_data.py +6 -5
- edc_listboard/migrations/0001_initial.py +3 -2
- edc_listboard/migrations/0007_alter_listboard_device_created_and_more.py +49 -0
- edc_locator/auths.py +18 -13
- edc_locator/migrations/0001_initial.py +7 -7
- edc_locator/migrations/0018_auto_20190305_0123.py +5 -12
- edc_locator/migrations/0040_alter_historicalsubjectlocator_action_identifier_and_more.py +187 -0
- edc_locator/migrations/0041_alter_historicalsubjectlocator_report_datetime_and_more.py +27 -0
- edc_locator/model_mixins/locator_model_mixin.py +2 -2
- edc_locator/model_mixins/subject_contact_fields_mixin.py +1 -1
- edc_locator/modeladmin_mixins.py +5 -4
- edc_ltfu/model_mixins.py +7 -5
- edc_metadata/auths.py +11 -7
- edc_metadata/metadata/metadata.py +1 -1
- edc_metadata/metadata_rules/crf/crf_rule.py +1 -1
- edc_metadata/metadata_rules/decorators.py +1 -1
- edc_metadata/metadata_rules/metadata_rule_evaluator.py +5 -3
- edc_metadata/metadata_rules/rule.py +2 -3
- edc_metadata/metadata_rules/rule_evaluator.py +1 -1
- edc_metadata/migrations/0002_auto_20161127_2226.py +5 -5
- edc_metadata/migrations/0005_auto_20170112_0602.py +5 -5
- edc_metadata/migrations/0011_auto_20190305_0123.py +5 -12
- edc_metadata/migrations/0031_alter_crfmetadata_device_created_and_more.py +120 -0
- edc_metadata/model_mixins/updates/updates_crf_metadata_model_mixin.py +7 -4
- edc_metadata/model_mixins/updates/updates_requisition_metadata_model_mixin.py +5 -2
- edc_metadata/models/crf_metadata.py +5 -5
- edc_metadata/models/crf_metadata_model_mixin.py +4 -5
- edc_metadata/models/requisition_metadata.py +6 -6
- edc_metadata/models/signals.py +10 -11
- edc_metadata/views/refresh_metadata_actions_view.py +3 -3
- edc_model/models/address_mixin.py +6 -6
- edc_model/models/fields/initials_field.py +2 -1
- edc_model/models/historical_records.py +2 -9
- edc_model/models/url_model_mixin.py +2 -2
- edc_model/validators/date.py +7 -8
- edc_model_admin/list_filters/future_date_list_filter.py +3 -3
- edc_model_admin/list_filters/past_date_list_filter.py +3 -3
- edc_model_admin/mixins/model_admin_protect_pii_mixin.py +4 -5
- edc_model_fields/fields/other_charfield.py +2 -2
- edc_navbar/auths.py +18 -13
- edc_navbar/migrations/0004_auto_20220825_0451.py +3 -2
- edc_navbar/migrations/0009_alter_edcpermissions_device_created_and_more.py +49 -0
- edc_notification/auths.py +9 -4
- edc_notification/migrations/0001_initial.py +3 -3
- edc_notification/migrations/0004_auto_20190305_0123.py +3 -6
- edc_notification/migrations/0011_alter_notification_device_created_and_more.py +59 -0
- edc_notification/models/notification.py +1 -1
- edc_notification/notification/graded_event_notification.py +2 -2
- edc_notification/notification/model_notification.py +3 -30
- edc_notification/notification/new_model_notification.py +1 -1
- edc_notification/notification/notification.py +12 -12
- edc_notification/notification/updated_model_notification.py +2 -2
- edc_offstudy/auths.py +12 -7
- edc_offstudy/migrations/0001_initial.py +4 -4
- edc_offstudy/migrations/0002_auto_20180921_0434.py +4 -4
- edc_offstudy/migrations/0005_auto_20190305_0123.py +5 -12
- edc_offstudy/migrations/0023_alter_historicalsubjectoffstudy_action_identifier_and_more.py +188 -0
- edc_offstudy/migrations/0024_alter_historicalsubjectoffstudy_offstudy_datetime_and_more.py +43 -0
- edc_offstudy/model_mixins/offstudy_model_mixin.py +3 -2
- edc_pdutils/df_exporters/csv_exporter.py +33 -37
- edc_pdutils/df_exporters/csv_model_exporter.py +7 -3
- edc_pdutils/migrations/0001_initial.py +8 -8
- edc_pharmacy/admin/prescription/rx_refill_admin.py +4 -3
- edc_pharmacy/admin/reports/stock_availability_admin.py +5 -6
- edc_pharmacy/auths.py +19 -15
- edc_pharmacy/migrations/0001_initial.py +64 -63
- edc_pharmacy/migrations/0015_auto_20220913_2139.py +26 -26
- edc_pharmacy/migrations/0024_allocation_assignment_containerunits_dispense_and_more.py +81 -86
- edc_pharmacy/migrations/0037_remove_historicalstock_confirmed_at_site_by_and_more.py +5 -5
- edc_pharmacy/migrations/0039_remove_dispense_registered_subject_and_more.py +7 -8
- edc_pharmacy/migrations/0049_remove_stocktransferconfirmation_stock_and_more.py +12 -12
- edc_pharmacy/migrations/0050_remove_stocktransferconfirmation2_location_and_more.py +5 -5
- edc_pharmacy/migrations/0051_alter_historicalstocktransferconfirmationitem_options_and_more.py +3 -4
- edc_pharmacy/migrations/0053_alter_location_managers_alter_historicalstock_lot_and_more.py +3 -3
- edc_pharmacy/migrations/0057_scanduplicates.py +3 -3
- edc_pharmacy/migrations/0060_alter_container_max_per_subject_and_more.py +13 -15
- edc_pharmacy/migrations/0068_stockout.py +2 -3
- edc_pharmacy/migrations/0076_historicalstockadjustment_stockadjustment.py +5 -5
- edc_pharmacy/migrations/0077_historicalstockadjustment_adjustment_datetime_and_more.py +3 -4
- edc_pharmacy/migrations/0081_historicalconfirmation_confirmation.py +8 -8
- edc_pharmacy/migrations/0084_confirmationatsiteitem_and_more.py +0 -2
- edc_pharmacy/migrations/0089_alter_allocation_allocated_by_and_more.py +3284 -0
- edc_pharmacy/migrations/0090_alter_allocation_allocation_datetime_and_more.py +227 -0
- edc_pharmacy/model_mixins/study_medication_refill_model_mixin.py +2 -2
- edc_pharmacy/models/medication/formulation.py +5 -7
- edc_pharmacy/models/medication/medication.py +3 -3
- edc_pharmacy/models/model_mixins.py +10 -11
- edc_pharmacy/models/prescription/rx.py +13 -12
- edc_pharmacy/models/prescription/rx_refill.py +0 -1
- edc_pharmacy/models/stock/allocation.py +3 -3
- edc_pharmacy/models/stock/confirmation.py +3 -3
- edc_pharmacy/models/stock/confirmation_at_site.py +3 -2
- edc_pharmacy/models/stock/confirmation_at_site_item.py +3 -4
- edc_pharmacy/models/stock/dispense.py +5 -6
- edc_pharmacy/models/stock/dispense_item.py +2 -2
- edc_pharmacy/models/stock/location.py +3 -4
- edc_pharmacy/models/stock/lot.py +6 -7
- edc_pharmacy/models/stock/order.py +1 -1
- edc_pharmacy/models/stock/receive.py +3 -3
- edc_pharmacy/models/stock/receive_item.py +4 -4
- edc_pharmacy/models/stock/repack_request.py +2 -2
- edc_pharmacy/models/stock/stock.py +12 -18
- edc_pharmacy/models/stock/stock_adjustment.py +4 -4
- edc_pharmacy/models/stock/stock_request.py +2 -2
- edc_pharmacy/models/stock/stock_request_item.py +2 -2
- edc_pharmacy/models/stock/stock_transfer.py +3 -3
- edc_pharmacy/models/stock/stock_transfer_item.py +2 -2
- edc_pharmacy/models/stock/storage_bin.py +3 -4
- edc_pharmacy/models/stock/storage_bin_item.py +2 -2
- edc_pharmacy/models/stock/supplier.py +3 -4
- edc_pharmacy/models/storage/box.py +2 -2
- edc_pharmacy/models/storage/items/container_model_mixin.py +3 -4
- edc_pharmacy/models/storage/items/pill_bottle_model_mixin.py +2 -2
- edc_pharmacy/models/storage/items/subject_pill_bottle.py +1 -1
- edc_pharmacy/models/storage/room.py +2 -2
- edc_pharmacy/models/storage/shelf.py +2 -2
- edc_pharmacy/models/storage/utils.py +1 -1
- edc_pharmacy/prescribe/create_prescription.py +3 -3
- edc_pharmacy/utils/allocate_stock.py +2 -3
- edc_pharmacy/utils/confirm_stock.py +3 -4
- edc_pharmacy/utils/confirm_stock_at_site.py +4 -5
- edc_pharmacy/utils/dispense.py +3 -4
- edc_pharmacy/utils/process_repack_request.py +4 -5
- edc_pharmacy/utils/stock_request/bulk_create_stock_request_items.py +2 -3
- edc_pharmacy/utils/transfer_stock.py +2 -3
- edc_pharmacy/views/add_to_storage_bin_view.py +2 -2
- edc_pharmacy/views/allocate_to_subject_view.py +2 -2
- edc_pharmacy/views/confirmation_at_site_view.py +6 -9
- edc_pharmacy/views/dispense_view.py +2 -2
- edc_pharmacy/views/move_to_storage_bin_view.py +2 -3
- edc_pharmacy/views/print_labels_view.py +2 -2
- edc_prn/admin_site.py +5 -0
- edc_prn/prn.py +10 -11
- edc_prn/urls.py +11 -0
- edc_protocol/research_protocol_config.py +2 -3
- edc_protocol_incident/action_items.py +4 -4
- edc_protocol_incident/auths.py +27 -20
- edc_protocol_incident/migrations/0001_initial.py +7 -7
- edc_protocol_incident/migrations/0001_squashed_0015_auto_20220927_0401.py +13 -13
- edc_protocol_incident/migrations/0005_protocolincident_historicalprotocolincident_and_more.py +7 -7
- edc_protocol_incident/migrations/0024_alter_actionsrequired_extra_value_and_more.py +625 -0
- edc_protocol_incident/migrations/0025_alter_historicalprotocoldeviationviolation_report_datetime_and_more.py +42 -0
- edc_protocol_incident/model_mixins/protocol_deviation_violation_model_mixin.py +18 -11
- edc_protocol_incident/model_mixins/protocol_incident_model_mixin.py +26 -11
- edc_pylabels/actions.py +3 -5
- edc_pylabels/auths.py +6 -1
- edc_pylabels/migrations/0002_alter_label_options_label_created_and_more.py +3 -7
- edc_pylabels/migrations/0005_labelconfiguration_delete_label_and_more.py +3 -3
- edc_pylabels/migrations/0013_alter_labelconfiguration_device_created_and_more.py +49 -0
- edc_qareports/auths.py +11 -7
- edc_qareports/migrations/0001_initial.py +4 -5
- edc_qareports/migrations/0005_edcpermissions.py +3 -3
- edc_qareports/migrations/0006_qareportlog.py +2 -3
- edc_qareports/migrations/0019_alter_edcpermissions_device_created_and_more.py +102 -0
- edc_qareports/migrations/0020_alter_note_report_datetime_and_more.py +24 -0
- edc_qareports/model_mixins/note_model_mixin.py +7 -4
- edc_qareports/model_mixins/on_study_missing_values_model_mixin.py +4 -4
- edc_qareports/model_mixins/qa_report_model_mixin.py +2 -3
- edc_qareports/models/note.py +4 -4
- edc_qareports/models/qa_reports_log.py +2 -3
- edc_randomization/admin.py +30 -24
- edc_randomization/auths.py +12 -7
- edc_randomization/decorators.py +1 -1
- edc_randomization/migrations/0001_initial.py +3 -2
- edc_randomization/migrations/0002_historicalrandomizationlist.py +3 -2
- edc_randomization/migrations/0009_edcpermissions.py +3 -2
- edc_randomization/migrations/0014_alter_edcpermissions_device_created_and_more.py +141 -0
- edc_randomization/model_mixins.py +9 -9
- edc_randomization/randomizer.py +22 -20
- edc_randomization/utils.py +19 -18
- edc_refusal/auths.py +7 -2
- edc_refusal/migrations/0001_initial.py +4 -4
- edc_refusal/migrations/0002_historicalsubjectrefusal.py +4 -4
- edc_refusal/migrations/0012_alter_historicalsubjectrefusal_comment_and_more.py +122 -0
- edc_refusal/migrations/0013_alter_historicalsubjectrefusal_report_datetime_and_more.py +28 -0
- edc_refusal/model_mixins.py +4 -4
- edc_registration/auths.py +28 -23
- edc_registration/migrations/0002_auto_20161127_2226.py +3 -4
- edc_registration/migrations/0005_auto_20170111_1809.py +4 -2
- edc_registration/migrations/0016_historicalregisteredsubject.py +3 -2
- edc_registration/migrations/0017_auto_20190305_0123.py +5 -12
- edc_registration/migrations/0033_alter_historicalregisteredsubject_additional_key_and_more.py +302 -0
- edc_registration/model_mixins/updates_or_creates_registered_subject_model_mixin.py +15 -7
- edc_registration/models/registered_subject.py +28 -27
- edc_reportable/age_evaluator.py +4 -2
- edc_reportable/formula.py +5 -5
- edc_reportable/migrations/0001_initial.py +7 -7
- edc_reportable/migrations/0003_referencerangecollection_grade1_and_more.py +3 -3
- edc_reportable/migrations/0004_alter_referencerangecollection_grade3_and_more.py +5 -5
- edc_reportable/migrations/0006_alter_gradingdata_revision_and_more.py +5 -6
- edc_reportable/migrations/0007_alter_gradingdata_age_phrase_and_more.py +509 -0
- edc_reportable/models/normal_data.py +4 -5
- edc_reportable/models/reference_model_mixins.py +10 -11
- edc_reportable/models/reference_range_collection.py +12 -13
- edc_reportable/post_migrate_signals.py +1 -1
- edc_reportable/utils/convert_units.py +11 -45
- edc_reportable/utils/get_normal_data_or_raise.py +2 -2
- edc_reportable/utils/get_reference_range_collection.py +2 -3
- edc_reportable/utils/load_data.py +4 -4
- edc_reportable/utils/update_grading_data.py +5 -5
- edc_review_dashboard/auths.py +23 -18
- edc_review_dashboard/migrations/0001_initial.py +3 -2
- edc_review_dashboard/migrations/0006_alter_edcpermissions_device_created_and_more.py +49 -0
- edc_screening/age_evaluator.py +6 -6
- edc_screening/auths.py +35 -30
- edc_screening/eligibility.py +1 -1
- edc_screening/gender_evaluator.py +1 -1
- edc_screening/migrations/0001_initial.py +3 -2
- edc_screening/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
- edc_screening/model_mixins/eligibility_model_mixin.py +3 -6
- edc_screening/model_mixins/screening_fields_model_mixin.py +6 -8
- edc_screening/model_mixins/screening_methods_model_mixin.py +1 -1
- edc_screening/screening_eligibility.py +2 -4
- edc_screening/utils.py +9 -9
- edc_search/generate_slug.py +26 -0
- edc_search/model_mixins.py +10 -22
- edc_sites/auths.py +8 -3
- edc_sites/migrations/0007_edcpermissions.py +3 -2
- edc_sites/migrations/0010_alter_edcpermissions_device_created_and_more.py +69 -0
- edc_sites/model_mixins/site_model_mixin.py +2 -2
- edc_sites/site.py +5 -5
- edc_sites/system_checks.py +1 -1
- edc_subject_dashboard/auths.py +27 -22
- edc_subject_dashboard/migrations/0001_initial.py +3 -2
- edc_subject_dashboard/migrations/0005_alter_edcpermissions_device_created_and_more.py +49 -0
- edc_subject_dashboard/requisition_report.py +6 -4
- edc_subject_dashboard/requisition_verifier.py +6 -6
- edc_subject_dashboard/templatetags/edc_subject_dashboard_extras.py +2 -2
- edc_subject_dashboard/view_mixins/subject_visit_view_mixin.py +7 -8
- edc_subject_dashboard/view_utils/subject_consent_listboard_button.py +3 -2
- edc_subject_dashboard/view_utils/timepoint_status_button.py +2 -2
- edc_timepoint/apps.py +0 -21
- edc_timepoint/model_mixins.py +22 -20
- edc_transfer/model_mixins.py +4 -4
- edc_transfer/modeladmin_mixins.py +1 -1
- edc_unblinding/auths.py +9 -4
- edc_unblinding/migrations/0001_initial.py +13 -13
- edc_unblinding/migrations/0014_alter_historicalunblindingrequest_action_identifier_and_more.py +291 -0
- edc_unblinding/migrations/0015_alter_historicalunblindingrequest_report_datetime_and_more.py +45 -0
- edc_unblinding/models/unblinding_request.py +2 -2
- edc_unblinding/models/unblinding_review.py +3 -3
- edc_utils/__init__.py +3 -1
- edc_utils/age.py +10 -16
- edc_utils/show_urls.py +29 -2
- edc_visit_schedule/auths.py +6 -1
- edc_visit_schedule/migrations/0001_initial.py +3 -3
- edc_visit_schedule/migrations/0002_auto_20190305_0123.py +3 -6
- edc_visit_schedule/migrations/0003_historicalvisitschedule_visitschedule.py +5 -4
- edc_visit_schedule/migrations/0015_historicalonschedule_offschedule_onschedule.py +10 -10
- edc_visit_schedule/migrations/0019_alter_historicalonschedule_device_created_and_more.py +229 -0
- edc_visit_schedule/migrations/0020_alter_historicalonschedule_onschedule_datetime_and_more.py +65 -0
- edc_visit_schedule/model_mixins/off_schedule_model_mixin.py +5 -4
- edc_visit_schedule/model_mixins/on_schedule_model_mixin.py +5 -4
- edc_visit_schedule/model_mixins/visit_schedule/visit_code_fields_model_mixin.py +1 -1
- edc_visit_schedule/models/subject_schedule_history.py +6 -6
- edc_visit_schedule/schedule/visit_collection.py +1 -1
- edc_visit_schedule/site_visit_schedules.py +2 -2
- edc_visit_schedule/subject_schedule.py +5 -4
- edc_visit_schedule/view_mixins.py +2 -3
- edc_visit_schedule/visit/visit.py +3 -2
- edc_visit_tracking/migrations/0004_subjectvisit_subjectvisitmissedreasons_extra_value_and_more.py +13 -13
- edc_visit_tracking/migrations/0009_alter_historicalsubjectvisit_comments_and_more.py +450 -0
- edc_visit_tracking/migrations/0010_alter_historicalsubjectvisit_report_datetime_and_more.py +68 -0
- edc_visit_tracking/model_mixins/base/visit_methods_model_mixin.py +3 -3
- edc_visit_tracking/model_mixins/crfs/visit_tracking_crf_model_mixin.py +2 -2
- edc_visit_tracking/model_mixins/requisitions/visit_tracking_requisition_model_mixin.py +2 -2
- edc_visit_tracking/model_mixins/subject_visit_missed_model_mixin.py +2 -2
- edc_visit_tracking/model_mixins/visit_model_mixin/caretaker_fields_mixin.py +2 -3
- edc_visit_tracking/model_mixins/visit_model_mixin/previous_visit_model_mixin.py +1 -1
- edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_fields_mixin.py +8 -11
- edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_mixin.py +1 -1
- edc_visit_tracking/models/signals.py +3 -3
- edc_visit_tracking/models/subject_visit.py +1 -1
- edc_vitals/calculators/bmi.py +7 -5
- edc_vitals/utils.py +1 -1
- edc_form_label/models.py +0 -0
- edc_search/constants.py +0 -1
- edc_search/models.py +0 -0
- edc_search/search_slug.py +0 -50
- edc_search/updater.py +0 -30
- edc_search/wsgi.py +0 -7
- {clinicedc-2.0.6.dist-info → clinicedc-2.0.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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(
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
92
|
+
max_length=250, blank=True, default=""
|
|
89
93
|
)
|
|
90
94
|
|
|
91
95
|
officials_notified = models.DateTimeField(
|
|
@@ -18,8 +18,6 @@ class AeTmgMethodsModelMixin(models.Model):
|
|
|
18
18
|
def get_action_item_reason(self):
|
|
19
19
|
return self.ae_initial.ae_description
|
|
20
20
|
|
|
21
|
-
def get_search_slug_fields(self):
|
|
21
|
+
def get_search_slug_fields(self) -> tuple[str]:
|
|
22
22
|
fields = super().get_search_slug_fields()
|
|
23
|
-
fields
|
|
24
|
-
fields.append("report_status")
|
|
25
|
-
return fields
|
|
23
|
+
return *fields, "subject_identifier", "report_status"
|
|
@@ -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=
|
|
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,
|
|
87
|
+
cause_of_death_other = OtherCharField(max_length=100, blank=True, default="")
|
|
87
88
|
|
|
88
|
-
narrative = models.TextField(verbose_name="Narrative",
|
|
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=
|
|
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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from django.db import models
|
|
2
|
+
from django.utils import timezone
|
|
2
3
|
|
|
3
4
|
from edc_action_item.managers import (
|
|
4
5
|
ActionIdentifierModelManager,
|
|
@@ -9,7 +10,6 @@ from edc_identifier.model_mixins import UniqueSubjectIdentifierFieldMixin
|
|
|
9
10
|
from edc_model.validators import date_not_future, datetime_not_future
|
|
10
11
|
from edc_protocol.validators import datetime_not_before_study_start
|
|
11
12
|
from edc_sites.model_mixins import SiteModelMixin
|
|
12
|
-
from edc_utils import get_utcnow
|
|
13
13
|
|
|
14
14
|
from ...constants import DEATH_REPORT_ACTION
|
|
15
15
|
|
|
@@ -27,7 +27,7 @@ class SimpleDeathReportModelMixin(
|
|
|
27
27
|
report_datetime = models.DateTimeField(
|
|
28
28
|
verbose_name="Report Date",
|
|
29
29
|
validators=[datetime_not_before_study_start, datetime_not_future],
|
|
30
|
-
default=
|
|
30
|
+
default=timezone.now,
|
|
31
31
|
)
|
|
32
32
|
|
|
33
33
|
death_datetime = models.DateTimeField(
|
|
@@ -1,22 +1,23 @@
|
|
|
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_UNKNOWN
|
|
4
5
|
from edc_constants.constants import NOT_APPLICABLE
|
|
5
6
|
from edc_identifier.model_mixins import NonUniqueSubjectIdentifierFieldMixin
|
|
6
7
|
from edc_model import models as edc_models
|
|
7
8
|
from edc_model.validators import date_not_future, datetime_not_future
|
|
9
|
+
from edc_model_fields.fields import IsDateEstimatedField
|
|
8
10
|
from edc_protocol.validators import (
|
|
9
11
|
date_not_before_study_start,
|
|
10
12
|
datetime_not_before_study_start,
|
|
11
13
|
)
|
|
12
|
-
from edc_utils import get_utcnow
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class HospitalizationModelMixin(NonUniqueSubjectIdentifierFieldMixin, models.Model):
|
|
16
17
|
report_datetime = models.DateTimeField(
|
|
17
18
|
verbose_name="Report Date",
|
|
18
19
|
validators=[datetime_not_before_study_start, datetime_not_future],
|
|
19
|
-
default=
|
|
20
|
+
default=timezone.now,
|
|
20
21
|
)
|
|
21
22
|
|
|
22
23
|
have_details = models.CharField(
|
|
@@ -30,7 +31,7 @@ class HospitalizationModelMixin(NonUniqueSubjectIdentifierFieldMixin, models.Mod
|
|
|
30
31
|
validators=[date_not_future, date_not_before_study_start],
|
|
31
32
|
)
|
|
32
33
|
|
|
33
|
-
admitted_date_estimated =
|
|
34
|
+
admitted_date_estimated = IsDateEstimatedField(
|
|
34
35
|
verbose_name="Is this date estimated?",
|
|
35
36
|
)
|
|
36
37
|
|
|
@@ -4,6 +4,7 @@ from django.contrib import admin
|
|
|
4
4
|
from django.contrib.admin import display
|
|
5
5
|
from django.template.loader import render_to_string
|
|
6
6
|
from django.urls import NoReverseMatch, reverse
|
|
7
|
+
from django.utils import timezone
|
|
7
8
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
8
9
|
|
|
9
10
|
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
@@ -12,7 +13,6 @@ from edc_constants.constants import CANCELLED, OTHER
|
|
|
12
13
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
13
14
|
from edc_model_admin.list_filters import ReportDateListFilter
|
|
14
15
|
from edc_pdf_reports.admin import PdfButtonModelAdminMixin, print_selected_to_pdf_action
|
|
15
|
-
from edc_utils import get_utcnow
|
|
16
16
|
|
|
17
17
|
from ..utils import get_adverse_event_app_label
|
|
18
18
|
from .list_filters import CauseOfDeathListFilter, DeathDateListFilter
|
|
@@ -111,14 +111,14 @@ class DeathReportModelAdminMixin(
|
|
|
111
111
|
def report_datetime_with_ago(self, obj=None):
|
|
112
112
|
return render_to_string(
|
|
113
113
|
"edc_adverse_event/datetime_with_ago.html",
|
|
114
|
-
dict(utc_date=
|
|
114
|
+
dict(utc_date=timezone.now().date, report_datetime=obj.report_datetime),
|
|
115
115
|
)
|
|
116
116
|
|
|
117
117
|
@display(description="Death date", ordering="death_datetime")
|
|
118
118
|
def death_datetime_with_ago(self, obj=None):
|
|
119
119
|
return render_to_string(
|
|
120
120
|
"edc_adverse_event/datetime_with_ago.html",
|
|
121
|
-
dict(utc_date=
|
|
121
|
+
dict(utc_date=timezone.now().date, report_datetime=obj.death_datetime),
|
|
122
122
|
)
|
|
123
123
|
|
|
124
124
|
@display(description="Action item", ordering="action_identifier")
|