clinicedc 2.0.41__py3-none-any.whl → 2.0.43__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.41.dist-info → clinicedc-2.0.43.dist-info}/METADATA +4 -2
- {clinicedc-2.0.41.dist-info → clinicedc-2.0.43.dist-info}/RECORD +337 -344
- {clinicedc-2.0.41.dist-info → clinicedc-2.0.43.dist-info}/WHEEL +1 -1
- edc_action_item/action.py +1 -1
- edc_action_item/action_item_notification.py +1 -1
- edc_action_item/choices.py +1 -1
- edc_action_item/data_fixers.py +1 -2
- edc_action_item/delete_action_item.py +1 -2
- edc_action_item/forms/action_item_form.py +1 -1
- edc_action_item/models/action_item.py +1 -1
- edc_action_item/models/action_type.py +1 -1
- edc_action_item/models/signals.py +1 -1
- edc_action_item/templatetags/action_item_extras.py +1 -1
- edc_action_item/utils.py +1 -2
- edc_action_item/view_mixins/action_item_view_mixin.py +1 -1
- edc_adherence/choices.py +1 -1
- edc_adherence/form_validator_mixin.py +1 -2
- edc_adherence/list_data.py +1 -1
- edc_adherence/model_mixins.py +1 -1
- edc_adverse_event/action_items/ae_followup_action.py +9 -9
- edc_adverse_event/action_items/ae_initial_action.py +12 -16
- edc_adverse_event/action_items/ae_susar_action.py +2 -1
- edc_adverse_event/action_items/ae_tmg_action.py +6 -4
- edc_adverse_event/action_items/death_report_action.py +7 -7
- edc_adverse_event/action_items/death_report_tmg_action.py +2 -1
- edc_adverse_event/action_items/death_report_tmg_second_action.py +2 -1
- edc_adverse_event/action_items/hospitalization_action.py +2 -1
- edc_adverse_event/auths.py +3 -1
- edc_adverse_event/choices.py +13 -6
- edc_adverse_event/constants.py +1 -23
- edc_adverse_event/form_validator_mixins/death_report_form_validator.py +1 -1
- edc_adverse_event/form_validator_mixins/requires_death_report_form_validator_mixin.py +1 -2
- edc_adverse_event/form_validators/ae_followup.py +2 -3
- edc_adverse_event/form_validators/ae_initial.py +2 -1
- edc_adverse_event/form_validators/ae_tmg.py +2 -1
- edc_adverse_event/form_validators/death_report_tmg.py +1 -1
- edc_adverse_event/form_validators/hospitalization.py +2 -1
- edc_adverse_event/list_data.py +1 -1
- edc_adverse_event/model_mixins/ae_followup/ae_followup_fields_model_mixin.py +1 -1
- edc_adverse_event/model_mixins/ae_followup/ae_followup_methods_model_mixin.py +1 -2
- edc_adverse_event/model_mixins/ae_initial/ae_initial_fields_model_mixin.py +1 -1
- edc_adverse_event/model_mixins/ae_initial/ae_initial_susar_model_mixin.py +2 -2
- edc_adverse_event/model_mixins/ae_susar/ae_susar_methods_model_mixin.py +1 -2
- edc_adverse_event/model_mixins/ae_tmg/ae_tmg_fields_model_mixin.py +1 -1
- edc_adverse_event/model_mixins/hospitaization/hospitalization_model_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/ae_initial_admin_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/ae_tmg_admin_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/death_report_admin_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/death_report_tmg_admin_mixin.py +1 -1
- edc_adverse_event/modelform_mixins/ae_followup_modelform_mixin.py +1 -2
- edc_adverse_event/modelform_mixins/ae_initial_modelform_mixin.py +1 -2
- edc_adverse_event/models/signals.py +2 -2
- edc_adverse_event/pdf_reports/ae_pdf_report.py +3 -2
- edc_adverse_event/pdf_reports/death_pdf_report.py +3 -2
- edc_adverse_event/templatetags/edc_adverse_event_extras.py +2 -3
- edc_adverse_event/urls.py +1 -0
- edc_adverse_event/utils.py +11 -14
- edc_adverse_event/view_mixins/ae/ae_listboard_view_mixin.py +3 -3
- edc_adverse_event/view_mixins/ae/death_report_listboard_view_mixin.py +1 -1
- edc_adverse_event/view_mixins/tmg/tmg_ae_listboard_view_mixin.py +2 -1
- edc_adverse_event/views/home_view.py +1 -0
- edc_adverse_event/views/tmg/home_view.py +1 -1
- edc_adverse_event/views/tmg/status_listboards.py +1 -1
- edc_analytics/custom_tables/age.py +1 -2
- edc_analytics/custom_tables/art.py +1 -2
- edc_analytics/custom_tables/bmi.py +1 -3
- edc_analytics/custom_tables/bp.py +1 -3
- edc_analytics/custom_tables/fasting.py +1 -2
- edc_analytics/custom_tables/fbg.py +1 -2
- edc_analytics/custom_tables/fbg_ogtt.py +1 -2
- edc_analytics/custom_tables/hba1c.py +1 -2
- edc_analytics/custom_tables/ogtt.py +1 -2
- edc_analytics/custom_tables/waist.py +1 -2
- edc_analytics/row/row_statistics_with_gender.py +1 -2
- edc_analytics/table.py +1 -2
- edc_appointment/admin/actions.py +1 -1
- edc_appointment/admin/appointment_admin.py +1 -1
- edc_appointment/appointment_reason_updater.py +1 -1
- edc_appointment/choices.py +1 -2
- edc_appointment/form_validator_mixins/next_appointment_crf_form_validator_mixin.py +1 -1
- edc_appointment/list_data.py +2 -3
- edc_appointment/model_mixins/missed_appointment_model_mixin.py +1 -1
- edc_appointment/model_mixins/next_appointment_crf_model_mixin.py +1 -2
- edc_appointment/modeladmin_mixins/next_appointment_crf_modeladmin_mixin.py +1 -1
- edc_appointment/models/signals.py +1 -1
- edc_appointment/utils.py +4 -2
- edc_auth/constants.py +3 -0
- edc_consent/choices.py +1 -1
- edc_consent/consent_definition.py +1 -1
- edc_consent/consent_definition_extension.py +1 -1
- edc_consent/field_mixins/citizen_fields_mixin.py +3 -3
- edc_consent/model_mixins/consent_model_mixin.py +1 -1
- edc_consent/modelform_mixins/consent_modelform_mixin/consent_modelform_validation_mixin.py +1 -1
- edc_consent/modelform_mixins/consent_modelform_mixin/review_fields_modelform_mixin.py +1 -2
- edc_consent/validators.py +5 -10
- edc_constants/__init__.py +0 -3
- edc_constants/choices.py +2 -3
- edc_constants/context_processor.py +2 -3
- edc_constants/utils.py +2 -3
- edc_crf/model_mixins/crf_status_model_mixin.py +1 -1
- edc_crf/model_mixins/singleton_crf_model_mixin.py +0 -1
- edc_crf/update_crf_status_command.py +1 -2
- edc_crf/update_crf_status_for_instance.py +1 -2
- edc_dashboard/url_config.py +1 -2
- edc_dashboard/views/administration_view.py +1 -0
- edc_data_manager/action_items.py +7 -7
- edc_data_manager/admin/actions.py +1 -1
- edc_data_manager/admin/data_query_admin.py +10 -10
- edc_data_manager/choices.py +1 -1
- edc_data_manager/forms/data_query.py +1 -1
- edc_data_manager/handlers/handlers.py +1 -1
- edc_data_manager/models/data_query.py +1 -1
- edc_data_manager/models/model_mixins.py +1 -2
- edc_data_manager/models/query_rule.py +1 -1
- edc_data_manager/view_mixins/data_manager_view_mixin.py +1 -1
- edc_document_status/model_mixins.py +1 -1
- edc_document_status/models/signals.py +1 -2
- edc_dx/diagnoses.py +2 -3
- edc_dx/form_validators/diagnosis_form_validator_mixin.py +1 -2
- edc_dx_review/choices.py +1 -1
- edc_dx_review/form_validator_mixins/clinical_review_followup_form_validator_mixin.py +2 -1
- edc_dx_review/list_data.py +1 -1
- edc_dx_review/medical_date.py +1 -1
- edc_dx_review/model_mixins/clinical_review_baseline_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_chol_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_dm_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_hiv_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_htn_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_model_mixin.py +1 -1
- edc_dx_review/model_mixins/factory/baseline_review_model_mixin_factory.py +1 -1
- edc_dx_review/model_mixins/factory/calculate_date.py +1 -1
- edc_dx_review/model_mixins/factory/dx_initial_review_model_mixin_factory.py +1 -1
- edc_dx_review/model_mixins/factory/followup_review_model_mixin_factory.py +1 -1
- edc_dx_review/model_mixins/factory/rx_initial_review_model_mixin_factory.py +1 -1
- edc_dx_review/model_mixins/followup_review/followup_review_model_mixin.py +1 -1
- edc_dx_review/model_mixins/followup_review/hiv_followup_review_model_mixin.py +1 -1
- edc_dx_review/model_mixins/initial_review/chol_initial_review_model_mixin.py +1 -1
- edc_dx_review/model_mixins/initial_review/hiv_initial_model_mixins.py +2 -3
- edc_dx_review/model_mixins/initial_review/ncd_initial_review_model_mixin.py +1 -1
- edc_dx_review/utils.py +1 -1
- edc_egfr/__init__.py +0 -1
- edc_egfr/egfr.py +23 -15
- edc_egfr/form_validator_mixins/egfr_form_validator_mixins.py +30 -25
- edc_egfr/model_mixins/egfr_drop_notification_model_mixin.py +8 -2
- edc_egfr/model_mixins/egfr_model_mixin.py +2 -2
- edc_export/management/commands/import_receipts.py +1 -2
- edc_export/model_exporter/object_history_helpers.py +1 -2
- edc_export/models/object_history.py +1 -1
- edc_export/models/upload_export_receipt_file.py +1 -1
- edc_facility/list_data.py +1 -1
- edc_fieldsets/fieldsets_modeladmin_mixin.py +1 -2
- edc_form_validators/applicable_field_validator.py +1 -1
- edc_form_validators/date_validator.py +1 -1
- edc_form_validators/many_to_many_field_validator.py +1 -2
- edc_form_validators/other_specify_field_validator.py +1 -2
- edc_form_validators/required_field_validator.py +1 -2
- edc_glucose/form_validators/fasting_form_validator.py +1 -1
- edc_glucose/form_validators/glucose_form_validator.py +3 -3
- edc_glucose/form_validators/glucose_form_validator_mixin.py +1 -2
- edc_glucose/form_validators/ogtt_form_validator_mixin.py +1 -2
- edc_glucose/model_mixin_factories/fasting_model_mixin_factory.py +1 -1
- edc_glucose/model_mixin_factories/fbg_model_mixin_factory.py +1 -2
- edc_glucose/model_mixin_factories/glucose_model_mixin_factory.py +1 -1
- edc_glucose/model_mixin_factories/ogtt_model_mixin_factory.py +1 -2
- edc_glucose/model_mixins/hba1c_model_mixin.py +1 -3
- edc_glucose/utils.py +2 -2
- edc_identifier/model_mixins.py +1 -2
- edc_identifier/models.py +1 -1
- edc_identifier/simple_identifier.py +1 -2
- edc_lab/admin/modeladmin_mixins.py +1 -1
- edc_lab/choices.py +7 -10
- edc_lab/constants.py +0 -2
- edc_lab/form_validators/crf_requisition_form_validator_mixin.py +1 -0
- edc_lab/form_validators/requisition_form_validator_mixin.py +1 -1
- edc_lab/lab/specimen.py +1 -2
- edc_lab/model_mixins/requisition/requisition_identifier_mixin.py +1 -1
- edc_lab/model_mixins/requisition/requisition_model_mixin.py +1 -1
- edc_lab/model_mixins/shipping/manifest_model_mixin.py +1 -1
- edc_lab/model_mixins/shipping/verify_model_mixin.py +1 -2
- edc_lab/models/box.py +1 -1
- edc_lab_dashboard/middleware.py +1 -0
- edc_lab_dashboard/urls.py +1 -0
- edc_lab_dashboard/view_mixins/form_action_view_mixin.py +1 -0
- edc_lab_dashboard/view_mixins/process_requisition_view_mixin.py +1 -1
- edc_lab_dashboard/views/action_views/manage_box_item_view.py +1 -0
- edc_lab_dashboard/views/action_views/receive_view.py +1 -1
- edc_lab_dashboard/views/listboard_views/manage_box_listboard_view.py +1 -0
- edc_lab_dashboard/views/listboard_views/pack_listboard_view.py +1 -1
- edc_lab_dashboard/views/listboard_views/process_listboard_view.py +2 -1
- edc_lab_dashboard/views/listboard_views/receive_listboard_view.py +2 -1
- edc_lab_dashboard/views/listboard_views/requisition_listboard_view.py +1 -2
- edc_lab_dashboard/views/listboard_views/verify_box_listboard_view.py +1 -0
- edc_lab_results/action_items.py +1 -1
- edc_lab_results/form_validator_mixins/blood_results_fbg_form_validator_mixin.py +1 -1
- edc_lab_results/form_validator_mixins/blood_results_form_validator_mixin.py +2 -1
- edc_lab_results/model_mixin_factories/field_attrs.py +1 -1
- edc_lab_results/model_mixins/electrolytes_model_mixins.py +2 -2
- edc_lab_results/model_mixins/fbc_model_mixins.py +9 -8
- edc_lab_results/model_mixins/fbg_model_mixin.py +2 -7
- edc_lab_results/model_mixins/glucose_model_mixin.py +2 -7
- edc_lab_results/model_mixins/insulin_model_mixin.py +2 -1
- edc_lab_results/model_mixins/lft_model_mixins.py +7 -6
- edc_lab_results/model_mixins/lipid_model_mixins.py +1 -2
- edc_lab_results/model_mixins/proteinuria_model_mixin.py +1 -2
- edc_lab_results/model_mixins/rft_model_mixins.py +5 -3
- edc_listboard/views/screen/screening_listboard_view.py +1 -1
- edc_locator/action_items.py +2 -1
- edc_locator/forms/subject_locator_form_validator.py +1 -1
- edc_locator/modeladmin_mixins.py +1 -1
- edc_ltfu/action_items.py +2 -1
- edc_ltfu/choices.py +1 -1
- edc_ltfu/constants.py +0 -2
- edc_ltfu/forms/ltfu_form_validator.py +2 -1
- edc_ltfu/forms/ltfu_form_validator_mixin.py +1 -1
- edc_ltfu/modelform_mixins.py +2 -5
- edc_metadata/admin/modeladmin_mixins.py +4 -4
- edc_model/choices.py +1 -1
- edc_model/models/fields/date_estimated.py +1 -1
- edc_model_admin/context_processors.py +1 -1
- edc_model_admin/list_filters/future_date_list_filter.py +6 -7
- edc_model_admin/list_filters/list_field_with_other_list_filter.py +1 -1
- edc_model_admin/list_filters/past_date_list_filter.py +6 -7
- edc_model_admin/mixins/model_admin_redirect_on_delete_mixin.py +1 -0
- edc_model_admin/templatetags/edc_admin_modify.py +1 -1
- edc_model_fields/fields/date_estimated.py +1 -1
- edc_model_to_dataframe/model_to_dataframe.py +1 -1
- edc_navbar/navbar_item.py +1 -0
- edc_navbar/system_checks.py +3 -0
- edc_offstudy/action_items.py +2 -1
- edc_offstudy/choices.py +2 -1
- edc_pdf_reports/crf_pdf_report.py +9 -7
- edc_pdutils/dataframes/get_subject_consent.py +1 -2
- edc_pdutils/dataframes/get_subject_visit.py +1 -11
- edc_pdutils/helper.py +1 -2
- edc_pdutils/mappings.py +1 -1
- edc_pdutils/tables/crf.py +1 -2
- edc_pdutils/tables/requisition.py +1 -2
- edc_pdutils/utils/__init__.py +1 -0
- edc_pdutils/utils/convert_visit_code_to_float.py +8 -0
- edc_pdutils/utils/decrypt.py +5 -4
- edc_pdutils/utils/missing_subject_identifiers.py +5 -4
- edc_pharmacy/action_items.py +2 -1
- edc_pharmacy/admin/list_filters.py +1 -1
- edc_pharmacy/admin/stock/allocation_admin.py +1 -1
- edc_pharmacy/admin/stock/order_item_admin.py +1 -1
- edc_pharmacy/admin/stock/stock_request_admin.py +1 -1
- edc_pharmacy/admin/stock/stock_transfer_admin.py +1 -1
- edc_pharmacy/admin/stock/stock_transfer_item_admin.py +1 -1
- edc_pharmacy/choices.py +1 -2
- edc_pharmacy/form_validators/crf/study_medication_form_validator.py +1 -1
- edc_pharmacy/list_data.py +1 -1
- edc_pharmacy/model_mixins/study_medication_crf_model_mixin.py +1 -1
- edc_pharmacy/model_mixins/study_medication_refill_model_mixin.py +1 -1
- edc_pharmacy/models/model_mixins.py +1 -2
- edc_pharmacy/models/prescription/rx.py +1 -1
- edc_pharmacy/models/signals.py +1 -1
- edc_pharmacy/models/stock/order.py +1 -1
- edc_pharmacy/models/stock/order_item.py +1 -2
- edc_pharmacy/models/stock/stock_request.py +1 -1
- edc_pharmacy/views/confirm_stock_from_queryset_view.py +2 -1
- edc_pharmacy/views/confirmation_at_site_view.py +1 -1
- edc_prn/models.py +1 -2
- edc_protocol_incident/action_items.py +2 -1
- edc_protocol_incident/choices.py +1 -1
- edc_protocol_incident/form_validators/mixins.py +2 -1
- edc_protocol_incident/form_validators/protocol_deviation_violation_form_validator.py +2 -1
- edc_protocol_incident/form_validators/protocol_incident_form_validator.py +2 -1
- edc_protocol_incident/list_data.py +1 -1
- edc_protocol_incident/model_mixins/protocol_deviation_violation_model_mixin.py +1 -1
- edc_protocol_incident/modeladmin_mixins.py +1 -1
- edc_qareports/choices.py +1 -1
- edc_qareports/migrations/0017_auto_20240816_0256.py +1 -2
- edc_qareports/modeladmin_mixins/list_filters.py +1 -2
- edc_qareports/modeladmin_mixins/qa_report_modeladmin_mixin.py +1 -1
- edc_qareports/sql_generator/requisition_subquery.py +1 -1
- edc_refusal/forms.py +2 -1
- edc_refusal/list_data.py +1 -1
- edc_registration/model_mixins/updates_or_creates_registered_subject_model_mixin.py +1 -1
- edc_registration/models/registered_subject.py +1 -1
- edc_reportable/__init__.py +0 -35
- edc_reportable/choices.py +8 -3
- edc_reportable/constants.py +0 -7
- edc_reportable/data/__init__.py +0 -1
- edc_reportable/data/grading_data/ctcae_v5.py +1 -2
- edc_reportable/data/grading_data/daids_july_2017.py +7 -6
- edc_reportable/data/normal_data/africa.py +6 -5
- edc_reportable/exceptions.py +0 -4
- edc_reportable/forms/reportables_form_validator_mixin.py +2 -1
- edc_reportable/formula.py +1 -1
- edc_reportable/post_migrate_signals.py +1 -1
- edc_reportable/reference_range_evaluator.py +8 -2
- edc_reportable/units.py +2 -23
- edc_reportable/utils/__init__.py +1 -1
- edc_reportable/utils/get_mw.py +20 -0
- edc_reportable/utils/get_normal_data_or_raise.py +1 -1
- edc_review_dashboard/auths.py +1 -1
- edc_review_dashboard/middleware.py +1 -0
- edc_review_dashboard/urls.py +1 -0
- edc_review_dashboard/views/subject_review_listboard_view.py +1 -0
- edc_screening/choices.py +1 -1
- edc_screening/gender_evaluator.py +1 -1
- edc_screening/model_mixins/screening_fields_model_mixin.py +1 -1
- edc_screening/modelform_mixins.py +1 -1
- edc_screening/screening_eligibility.py +1 -2
- edc_sites/models/site_profile.py +1 -2
- edc_sites/site.py +1 -1
- edc_subject_dashboard/requisition_labels.py +1 -1
- edc_subject_dashboard/requisition_report.py +1 -1
- edc_subject_dashboard/requisition_verifier.py +1 -1
- edc_subject_dashboard/urls.py +1 -0
- edc_subject_dashboard/view_utils/go_to_forms_button.py +1 -1
- edc_subject_dashboard/views/requisition_print_actions_view.py +1 -1
- edc_subject_dashboard/views/subject_dashboard_view.py +1 -0
- edc_transfer/action_items.py +2 -1
- edc_transfer/choices.py +1 -1
- edc_transfer/form_validators.py +1 -1
- edc_transfer/list_data.py +1 -1
- edc_unblinding/action_items.py +2 -1
- edc_unblinding/models/unblinding_request.py +1 -1
- edc_unblinding/models/unblinding_review.py +1 -1
- edc_visit_schedule/action_items.py +2 -1
- edc_visit_schedule/admin/subject_schedule_history_admin.py +1 -0
- edc_visit_tracking/action_items.py +2 -1
- edc_visit_tracking/choices.py +1 -1
- edc_visit_tracking/form_validators/visit_form_validator.py +1 -1
- edc_visit_tracking/form_validators/visit_missed_form_validator.py +2 -1
- edc_visit_tracking/managers.py +1 -2
- edc_visit_tracking/model_mixins/subject_visit_missed_model_mixin.py +1 -1
- edc_visit_tracking/model_mixins/visit_model_mixin/caretaker_fields_mixin.py +1 -1
- edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_fields_mixin.py +1 -1
- edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_mixin.py +1 -1
- edc_visit_tracking/modeladmin_mixins/crf_model_admin_mixin.py +2 -1
- edc_visit_tracking/modeladmin_mixins/visit_model_admin_mixin.py +1 -1
- edc_visit_tracking/models/signals.py +1 -1
- edc_visit_tracking/view_utils/related_visit_button.py +1 -1
- edc_vitals/form_validators/blood_pressure_form_validator_mixin.py +1 -2
- edc_constants/constants.py +0 -250
- edc_constants/disease_constants.py +0 -22
- edc_egfr/calculators/__init__.py +0 -4
- edc_egfr/calculators/base_egrfr.py +0 -56
- edc_egfr/calculators/egfr_ckd_epi.py +0 -68
- edc_egfr/calculators/egfr_cockcroft_gault.py +0 -62
- edc_egfr/calculators/percent_change.py +0 -7
- edc_reportable/data/molecular_weights.py +0 -11
- edc_reportable/utils/convert_units.py +0 -163
- {clinicedc-2.0.41.dist-info → clinicedc-2.0.43.dist-info}/licenses/LICENSE +0 -0
edc_navbar/system_checks.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from django.apps import apps as django_apps
|
|
2
2
|
from django.core.checks import CheckMessage, Error
|
|
3
3
|
from django.urls import NoReverseMatch
|
|
4
|
+
from edc_dashboard.url_names import InvalidDashboardUrlName
|
|
4
5
|
|
|
5
6
|
from edc_navbar import site_navbars
|
|
6
7
|
|
|
@@ -32,4 +33,6 @@ def edc_navbar_checks(app_configs, **kwargs) -> list[CheckMessage]:
|
|
|
32
33
|
navbar_item.get_url(raise_exception=True)
|
|
33
34
|
except NoReverseMatch as e:
|
|
34
35
|
errors.append(Error(str(e), id="edc_navbar.E003"))
|
|
36
|
+
except InvalidDashboardUrlName as e:
|
|
37
|
+
errors.append(Error(str(e), id="edc_navbar.E004"))
|
|
35
38
|
return errors
|
edc_offstudy/action_items.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import HIGH_PRIORITY
|
|
2
|
+
|
|
1
3
|
from edc_action_item.action_with_notification import ActionWithNotification
|
|
2
4
|
from edc_adverse_event.constants import DEATH_REPORT_ACTION
|
|
3
|
-
from edc_constants.constants import HIGH_PRIORITY
|
|
4
5
|
from edc_ltfu.constants import LTFU_ACTION
|
|
5
6
|
from edc_unblinding.constants import UNBLINDING_REVIEW_ACTION
|
|
6
7
|
|
edc_offstudy/choices.py
CHANGED
|
@@ -9,6 +9,14 @@ from django.apps import apps as django_apps
|
|
|
9
9
|
from django.contrib.auth import get_user_model
|
|
10
10
|
from django.core.exceptions import ObjectDoesNotExist
|
|
11
11
|
from django.utils.text import slugify
|
|
12
|
+
from reportlab.lib import colors
|
|
13
|
+
from reportlab.lib.pagesizes import A4
|
|
14
|
+
from reportlab.lib.units import cm
|
|
15
|
+
from reportlab.lib.utils import ImageReader
|
|
16
|
+
from reportlab.platypus import Paragraph, TableStyle
|
|
17
|
+
from reportlab.platypus.flowables import KeepTogether, Spacer
|
|
18
|
+
from reportlab.platypus.tables import Table
|
|
19
|
+
|
|
12
20
|
from edc_data_manager.get_longitudinal_value import (
|
|
13
21
|
DataDictionaryError,
|
|
14
22
|
get_longitudinal_value,
|
|
@@ -18,19 +26,13 @@ from edc_randomization.auth_objects import RANDO_UNBLINDED
|
|
|
18
26
|
from edc_utils.age import formatted_age
|
|
19
27
|
from edc_utils.date import to_local
|
|
20
28
|
from edc_utils.get_static_file import get_static_file
|
|
21
|
-
from reportlab.lib import colors
|
|
22
|
-
from reportlab.lib.pagesizes import A4
|
|
23
|
-
from reportlab.lib.units import cm
|
|
24
|
-
from reportlab.lib.utils import ImageReader
|
|
25
|
-
from reportlab.platypus import Paragraph, TableStyle
|
|
26
|
-
from reportlab.platypus.flowables import KeepTogether, Spacer
|
|
27
|
-
from reportlab.platypus.tables import Table
|
|
28
29
|
|
|
29
30
|
from .report import Report
|
|
30
31
|
|
|
31
32
|
if TYPE_CHECKING:
|
|
32
33
|
from django.contrib.auth.models import User
|
|
33
34
|
from django.core.handlers.wsgi import WSGIRequest
|
|
35
|
+
|
|
34
36
|
from edc_crf.model_mixins import CrfModelMixin
|
|
35
37
|
from edc_identifier.model_mixins import UniqueSubjectIdentifierModelMixin
|
|
36
38
|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import numpy as np
|
|
2
2
|
import pandas as pd
|
|
3
|
+
from clinicedc_constants import FEMALE, MALE
|
|
3
4
|
from django.apps import apps as django_apps
|
|
4
5
|
from django.db.models import Model
|
|
5
6
|
from django_pandas.io import read_frame
|
|
6
7
|
|
|
7
|
-
from edc_constants.constants import FEMALE, MALE
|
|
8
|
-
|
|
9
8
|
from ..utils import convert_dates_from_model
|
|
10
9
|
|
|
11
10
|
|
|
@@ -4,17 +4,7 @@ from django_pandas.io import read_frame
|
|
|
4
4
|
|
|
5
5
|
from edc_appointment.models import AppointmentType
|
|
6
6
|
|
|
7
|
-
from ..utils import convert_dates_from_model
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def convert_visit_code_to_float(df):
|
|
11
|
-
"""Convert visit_code to float using visit_code_sequence"""
|
|
12
|
-
df["visit_code"] = df["visit_code"].astype(float)
|
|
13
|
-
df["visit_code_sequence"] = df["visit_code_sequence"].astype(float)
|
|
14
|
-
df["visit_code_sequence"] = df["visit_code_sequence"].apply(
|
|
15
|
-
lambda x: x / 10.0 if x > 0.0 else 0.0
|
|
16
|
-
)
|
|
17
|
-
df["visit_code"] = df["visit_code"] + df["visit_code_sequence"]
|
|
7
|
+
from ..utils import convert_dates_from_model, convert_visit_code_to_float
|
|
18
8
|
|
|
19
9
|
|
|
20
10
|
def get_subject_visit(
|
edc_pdutils/helper.py
CHANGED
edc_pdutils/mappings.py
CHANGED
edc_pdutils/tables/crf.py
CHANGED
edc_pdutils/utils/__init__.py
CHANGED
|
@@ -3,6 +3,7 @@ from .convert_numbers_to_float64_int64 import convert_numbers_to_float64_int64
|
|
|
3
3
|
from .convert_numbers_to_nullable_dtype import convert_numbers_to_nullable_dtype
|
|
4
4
|
from .convert_numerics_from_model import convert_numerics_from_model
|
|
5
5
|
from .convert_timedelta_from_model import convert_timedelta_from_model
|
|
6
|
+
from .convert_visit_code_to_float import convert_visit_code_to_float
|
|
6
7
|
from .datetime_to_date import datetime_to_date
|
|
7
8
|
from .decrypt import DecryptError, decrypt
|
|
8
9
|
from .get_export_folder import get_export_folder
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
def convert_visit_code_to_float(df):
|
|
2
|
+
"""Convert visit_code to float using visit_code_sequence"""
|
|
3
|
+
df["visit_code"] = df["visit_code"].astype(float)
|
|
4
|
+
df["visit_code_sequence"] = df["visit_code_sequence"].astype(float)
|
|
5
|
+
df["visit_code_sequence"] = df["visit_code_sequence"].apply(
|
|
6
|
+
lambda x: x / 10.0 if x > 0.0 else 0.0
|
|
7
|
+
)
|
|
8
|
+
df["visit_code"] = df["visit_code"] + df["visit_code_sequence"]
|
edc_pdutils/utils/decrypt.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
|
|
1
3
|
import numpy as np
|
|
2
4
|
import pandas as pd
|
|
5
|
+
from django.core.exceptions import ImproperlyConfigured
|
|
3
6
|
|
|
4
|
-
|
|
7
|
+
with contextlib.suppress(ModuleNotFoundError, ImproperlyConfigured):
|
|
5
8
|
from django_crypto_fields.field_cryptor import FieldCryptor
|
|
6
|
-
except ModuleNotFoundError:
|
|
7
|
-
pass
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class DecryptError(Exception):
|
|
@@ -13,7 +14,7 @@ class DecryptError(Exception):
|
|
|
13
14
|
|
|
14
15
|
def decrypt(row, column_name, algorithm, access_mode):
|
|
15
16
|
value = np.nan
|
|
16
|
-
if pd.
|
|
17
|
+
if pd.notna(row[column_name]):
|
|
17
18
|
field_cryptor = FieldCryptor(algorithm, access_mode)
|
|
18
19
|
value = field_cryptor.decrypt(row[column_name])
|
|
19
20
|
if value.startswith("enc1::"):
|
|
@@ -3,11 +3,9 @@ from warnings import warn
|
|
|
3
3
|
import pandas as pd
|
|
4
4
|
from django.apps import apps as django_apps
|
|
5
5
|
|
|
6
|
-
from edc_model_to_dataframe.model_to_dataframe import ModelToDataframe
|
|
7
|
-
|
|
8
6
|
|
|
9
7
|
def missing_subject_identifiers(
|
|
10
|
-
|
|
8
|
+
model=None, subject_identifiers=None, remove_uuids=None, verbose=None
|
|
11
9
|
):
|
|
12
10
|
"""Returns a series of subject_identifiers not in model.
|
|
13
11
|
|
|
@@ -16,6 +14,8 @@ def missing_subject_identifiers(
|
|
|
16
14
|
model='edc_registration.registeredsubject',
|
|
17
15
|
subject_identifiers=[a list of subject identifiers])
|
|
18
16
|
"""
|
|
17
|
+
from edc_model_to_dataframe.model_to_dataframe import ModelToDataframe # noqa: PLC0415
|
|
18
|
+
|
|
19
19
|
# convert list of subject identifiers to a dataframe
|
|
20
20
|
df_subject_identifiers = pd.DataFrame(subject_identifiers, columns=["subject_identifier"])
|
|
21
21
|
df_subject_identifiers["identifier"] = df_subject_identifiers["subject_identifier"]
|
|
@@ -43,6 +43,7 @@ def missing_subject_identifiers(
|
|
|
43
43
|
if len(df_missing.index) > 0 and verbose:
|
|
44
44
|
warn(
|
|
45
45
|
f"There are {len(df_missing['identifier'])} subject identifiers "
|
|
46
|
-
f"missing from {model}."
|
|
46
|
+
f"missing from {model}.",
|
|
47
|
+
stacklevel=2,
|
|
47
48
|
)
|
|
48
49
|
return df_missing["identifier"]
|
edc_pharmacy/action_items.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
from clinicedc_constants import NEW, NO, NOT_APPLICABLE, PARTIAL, RECEIVED, YES
|
|
1
2
|
from django.contrib.admin import SimpleListFilter
|
|
2
3
|
from django.contrib.sites.shortcuts import get_current_site
|
|
3
4
|
from django.db.models import Count, F, Q
|
|
4
5
|
from django.utils.translation import gettext as _
|
|
5
6
|
|
|
6
7
|
from edc_constants.choices import YES_NO, YES_NO_NA
|
|
7
|
-
from edc_constants.constants import NEW, NO, NOT_APPLICABLE, PARTIAL, RECEIVED, YES
|
|
8
8
|
|
|
9
9
|
from ..models import Medication, Rx
|
|
10
10
|
from ..utils import blinded_user
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from clinicedc_constants import NO, YES
|
|
1
2
|
from django.contrib import admin
|
|
2
3
|
from django.contrib.admin import SimpleListFilter
|
|
3
4
|
from django.template.loader import render_to_string
|
|
@@ -6,7 +7,6 @@ from django.utils.translation import gettext
|
|
|
6
7
|
from django_audit_fields import audit_fieldset_tuple
|
|
7
8
|
from rangefilter.filters import DateRangeFilterBuilder
|
|
8
9
|
|
|
9
|
-
from edc_constants.constants import NO, YES
|
|
10
10
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
11
11
|
from edc_utils.date import to_local
|
|
12
12
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from decimal import Decimal
|
|
2
2
|
|
|
3
|
+
from clinicedc_constants import NEW, PARTIAL, RECEIVED
|
|
3
4
|
from django.contrib import admin, messages
|
|
4
5
|
from django.template.loader import render_to_string
|
|
5
6
|
from django.urls import reverse
|
|
@@ -7,7 +8,6 @@ from django.utils.safestring import mark_safe
|
|
|
7
8
|
from django.utils.translation import gettext as _
|
|
8
9
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
9
10
|
|
|
10
|
-
from edc_constants.constants import NEW, PARTIAL, RECEIVED
|
|
11
11
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
12
12
|
from edc_utils import message_in_queue
|
|
13
13
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from celery.result import AsyncResult
|
|
2
2
|
from celery.states import SUCCESS
|
|
3
|
+
from clinicedc_constants import CANCELLED, COMPLETE, PENDING
|
|
3
4
|
from django.contrib import admin
|
|
4
5
|
from django.template.loader import render_to_string
|
|
5
6
|
from django.urls import reverse
|
|
@@ -8,7 +9,6 @@ from django.utils.translation import gettext as _
|
|
|
8
9
|
from django_audit_fields import audit_fieldset_tuple
|
|
9
10
|
from rangefilter.filters import DateRangeFilterBuilder
|
|
10
11
|
|
|
11
|
-
from edc_constants.constants import CANCELLED, COMPLETE, PENDING
|
|
12
12
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
13
13
|
from edc_utils.date import to_local
|
|
14
14
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from clinicedc_constants import NO, PARTIAL, YES
|
|
1
2
|
from django.contrib import admin
|
|
2
3
|
from django.contrib.admin import SimpleListFilter
|
|
3
4
|
from django.db.models import Count
|
|
@@ -6,7 +7,6 @@ from django.urls import reverse
|
|
|
6
7
|
from django_audit_fields import audit_fieldset_tuple
|
|
7
8
|
from rangefilter.filters import DateRangeFilterBuilder
|
|
8
9
|
|
|
9
|
-
from edc_constants.constants import NO, PARTIAL, YES
|
|
10
10
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
11
11
|
from edc_utils.date import to_local
|
|
12
12
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from clinicedc_constants import NO, YES
|
|
1
2
|
from django.contrib import admin
|
|
2
3
|
from django.contrib.admin import SimpleListFilter
|
|
3
4
|
from django.core.exceptions import ObjectDoesNotExist
|
|
@@ -6,7 +7,6 @@ from django.urls import reverse
|
|
|
6
7
|
from django_audit_fields import audit_fieldset_tuple
|
|
7
8
|
from rangefilter.filters import DateRangeFilterBuilder
|
|
8
9
|
|
|
9
|
-
from edc_constants.constants import NO, YES
|
|
10
10
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
11
11
|
from edc_utils.date import to_local
|
|
12
12
|
|
edc_pharmacy/choices.py
CHANGED
|
@@ -3,9 +3,9 @@ from __future__ import annotations
|
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from typing import TYPE_CHECKING
|
|
5
5
|
|
|
6
|
+
from clinicedc_constants import NO, YES
|
|
6
7
|
from django.core.exceptions import ObjectDoesNotExist
|
|
7
8
|
|
|
8
|
-
from edc_constants.constants import NO, YES
|
|
9
9
|
from edc_crf.crf_form_validator import CrfFormValidator
|
|
10
10
|
from edc_form_validators import INVALID_ERROR
|
|
11
11
|
from edc_utils.text import formatted_datetime
|
edc_pharmacy/list_data.py
CHANGED
|
@@ -2,11 +2,11 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
|
|
5
|
+
from clinicedc_constants import YES
|
|
5
6
|
from django.apps import apps as django_apps
|
|
6
7
|
from django.core.exceptions import ObjectDoesNotExist
|
|
7
8
|
|
|
8
9
|
from edc_appointment.utils import get_next_appointment
|
|
9
|
-
from edc_constants.constants import YES
|
|
10
10
|
from edc_utils.text import formatted_datetime
|
|
11
11
|
from edc_visit_tracking.utils import get_next_related_visit
|
|
12
12
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from uuid import uuid4
|
|
2
2
|
|
|
3
|
+
from clinicedc_constants import YES
|
|
3
4
|
from django.core.validators import RegexValidator
|
|
4
5
|
from django.db import models
|
|
5
6
|
from django.db.models import PROTECT
|
|
6
7
|
|
|
7
8
|
from edc_constants.choices import YES_NO
|
|
8
|
-
from edc_constants.constants import YES
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class StudyMedicationRefillModelMixin(models.Model):
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from uuid import uuid4
|
|
2
2
|
|
|
3
|
+
from clinicedc_constants import NEW
|
|
3
4
|
from django.core.exceptions import ObjectDoesNotExist
|
|
4
5
|
from django.db import models
|
|
5
6
|
from django.db.models import PROTECT, Index
|
|
6
7
|
from django.utils import timezone
|
|
7
8
|
|
|
8
9
|
from edc_action_item.models import ActionModelMixin
|
|
9
|
-
from edc_constants.constants import NEW
|
|
10
10
|
from edc_identifier.model_mixins import NonUniqueSubjectIdentifierFieldMixin
|
|
11
11
|
from edc_model.models import BaseUuidModel
|
|
12
12
|
from edc_randomization.site_randomizers import site_randomizers
|
edc_pharmacy/models/signals.py
CHANGED
|
@@ -3,11 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
from decimal import Decimal
|
|
4
4
|
|
|
5
5
|
from celery.states import PENDING
|
|
6
|
+
from clinicedc_constants import COMPLETE, PARTIAL
|
|
6
7
|
from django.db.models import Sum
|
|
7
8
|
from django.db.models.signals import post_delete, post_save
|
|
8
9
|
from django.dispatch import receiver
|
|
9
10
|
|
|
10
|
-
from edc_constants.constants import COMPLETE, PARTIAL
|
|
11
11
|
from edc_utils.celery import get_task_result, run_task_sync_or_async
|
|
12
12
|
|
|
13
13
|
from ..exceptions import InsufficientStockError
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import NEW
|
|
1
2
|
from django.db import models
|
|
2
3
|
from sequences import get_next_value
|
|
3
4
|
|
|
4
|
-
from edc_constants.constants import NEW
|
|
5
5
|
from edc_model.models import BaseUuidModel, HistoricalRecords
|
|
6
6
|
|
|
7
7
|
from ...choices import ORDER_CHOICES
|
|
@@ -16,7 +16,6 @@ class Manager(models.Manager):
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class OrderItem(BaseUuidModel):
|
|
19
|
-
|
|
20
19
|
order_item_identifier = models.CharField(
|
|
21
20
|
max_length=36,
|
|
22
21
|
unique=True,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import CANCELLED, CLOSED, OPEN
|
|
1
2
|
from django.db import models
|
|
2
3
|
from django.utils import timezone
|
|
3
4
|
from sequences import get_next_value
|
|
4
5
|
|
|
5
|
-
from edc_constants.constants import CANCELLED, CLOSED, OPEN
|
|
6
6
|
from edc_model.models import BaseUuidModel, HistoricalRecords
|
|
7
7
|
from edc_registration.models import RegisteredSubject
|
|
8
8
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from clinicedc_constants import CONFIRMED
|
|
3
4
|
from django.apps import apps as django_apps
|
|
4
5
|
from django.conf import settings
|
|
5
6
|
from django.contrib import messages
|
|
@@ -9,7 +10,7 @@ from django.urls import reverse
|
|
|
9
10
|
from django.utils.decorators import method_decorator
|
|
10
11
|
from django.utils.translation import gettext as _
|
|
11
12
|
from django.views.generic.base import TemplateView
|
|
12
|
-
|
|
13
|
+
|
|
13
14
|
from edc_dashboard.view_mixins import EdcViewMixin
|
|
14
15
|
from edc_navbar import NavbarViewMixin
|
|
15
16
|
from edc_protocol.view_mixins import EdcProtocolViewMixin
|
|
@@ -4,6 +4,7 @@ import contextlib
|
|
|
4
4
|
import uuid
|
|
5
5
|
from uuid import uuid4
|
|
6
6
|
|
|
7
|
+
from clinicedc_constants import CONFIRMED
|
|
7
8
|
from django.conf import settings
|
|
8
9
|
from django.contrib import messages
|
|
9
10
|
from django.contrib.auth.decorators import login_required
|
|
@@ -15,7 +16,6 @@ from django.urls import reverse
|
|
|
15
16
|
from django.utils.decorators import method_decorator
|
|
16
17
|
from django.views.generic.base import TemplateView
|
|
17
18
|
|
|
18
|
-
from edc_constants.constants import CONFIRMED
|
|
19
19
|
from edc_dashboard.view_mixins import EdcViewMixin
|
|
20
20
|
from edc_navbar import NavbarViewMixin
|
|
21
21
|
from edc_protocol.view_mixins import EdcProtocolViewMixin
|
edc_prn/models.py
CHANGED
edc_protocol_incident/choices.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
from django.utils import timezone
|
|
3
4
|
|
|
4
5
|
from edc_constants.choices import YES_NO_NA
|
|
5
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
6
6
|
from edc_model import REPORT_STATUS
|
|
7
7
|
from edc_model.validators import datetime_not_future
|
|
8
8
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import CLOSED, OPEN
|
|
1
2
|
from django.contrib import admin
|
|
2
3
|
from django.utils.html import format_html
|
|
3
4
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
4
5
|
|
|
5
|
-
from edc_constants.constants import CLOSED, OPEN
|
|
6
6
|
from edc_protocol_incident.constants import WITHDRAWN
|
|
7
7
|
|
|
8
8
|
|
edc_qareports/choices.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from django.db import migrations
|
|
4
4
|
from django.db.migrations import RunPython
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from clinicedc_constants import FEEDBACK, PENDING
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def update_status(apps, schema_editor):
|
|
@@ -17,7 +17,6 @@ def update_status(apps, schema_editor):
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class Migration(migrations.Migration):
|
|
20
|
-
|
|
21
20
|
dependencies = [
|
|
22
21
|
("edc_qareports", "0016_alter_note_options_alter_qareportlog_options"),
|
|
23
22
|
]
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from clinicedc_constants import NEW
|
|
1
2
|
from django.apps import apps as django_apps
|
|
2
3
|
from django.contrib import admin
|
|
3
4
|
from django.core.exceptions import ObjectDoesNotExist
|
|
@@ -5,7 +6,6 @@ from django.template.loader import render_to_string
|
|
|
5
6
|
from django.urls import reverse
|
|
6
7
|
from django.utils.translation import gettext as _
|
|
7
8
|
|
|
8
|
-
from edc_constants.constants import NEW
|
|
9
9
|
from edc_utils import truncate_string
|
|
10
10
|
|
|
11
11
|
from ..models import QaReportLog
|
edc_refusal/forms.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
from clinicedc_constants import OTHER
|
|
1
2
|
from django import forms
|
|
2
3
|
from django.core.exceptions import ObjectDoesNotExist
|
|
3
4
|
from django.urls.base import reverse
|
|
4
5
|
from django.utils.html import format_html
|
|
5
|
-
|
|
6
|
+
|
|
6
7
|
from edc_dashboard.url_names import url_names
|
|
7
8
|
from edc_form_validators import FormValidator, FormValidatorMixin
|
|
8
9
|
from edc_registration.models import RegisteredSubject
|
edc_refusal/list_data.py
CHANGED