meta-edc 0.3.39__py3-none-any.whl → 1.4.0__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.
- meta_ae/action_items.py +38 -27
- meta_ae/admin/__init__.py +11 -0
- meta_ae/admin/ae_initial_admin.py +5 -2
- meta_ae/admin/ae_susar_admin.py +1 -1
- meta_ae/admin/death_report_admin.py +1 -1
- meta_ae/admin/modeladmin_mixins.py +14 -15
- meta_ae/baker_recipes.py +4 -6
- meta_ae/choices.py +1 -1
- meta_ae/forms/__init__.py +13 -0
- meta_ae/forms/death_report_form.py +1 -1
- meta_ae/forms/modelform_mixins.py +2 -2
- meta_ae/list_data.py +1 -1
- meta_ae/migrations/0001_initial.py +27 -27
- meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
- meta_ae/migrations/0017_auto_20221130_2257.py +1 -1
- meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
- meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
- meta_ae/model_mixins/__init__.py +2 -0
- meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
- meta_ae/model_mixins/death_report_model_mixin.py +3 -3
- meta_ae/models/__init__.py +13 -0
- meta_ae/models/hospitalization.py +3 -3
- meta_ae/pdf_reports/__init__.py +2 -0
- meta_ae/templatetags/meta_ae_extras.py +4 -6
- meta_analytics/.DS_Store +0 -0
- meta_analytics/README.rst +1 -2
- meta_analytics/dataframes/__init__.py +27 -0
- meta_analytics/dataframes/constants.py +5 -2
- meta_analytics/dataframes/get_eos_df.py +16 -4
- meta_analytics/dataframes/get_glucose_df.py +166 -0
- meta_analytics/dataframes/get_glucose_fbg_df.py +26 -0
- meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +21 -0
- meta_analytics/dataframes/get_last_imp_visits_df.py +12 -10
- meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
- meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +125 -124
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +111 -235
- meta_analytics/dataframes/screening/__init__.py +2 -0
- meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
- meta_analytics/dataframes/screening/get_screening_df.py +9 -15
- meta_analytics/dataframes/utils.py +21 -12
- meta_analytics/get_tables.py +1 -2
- meta_analytics/tables/__init__.py +2 -0
- meta_analytics/tables/enrolled/glucose.py +2 -1
- meta_analytics/utils.py +81 -0
- meta_auth/auths.py +1 -1
- meta_consent/action_items.py +22 -3
- meta_consent/admin/__init__.py +7 -0
- meta_consent/admin/actions/__init__.py +2 -0
- meta_consent/admin/actions/create_missing_prescriptions.py +2 -2
- meta_consent/admin/list_filters.py +22 -0
- meta_consent/admin/modeladmin_mixins.py +4 -5
- meta_consent/admin/subject_consent_v1_ext_admin.py +93 -0
- meta_consent/baker_recipes.py +7 -7
- meta_consent/consents.py +15 -2
- meta_consent/constants.py +1 -0
- meta_consent/form_validators/__init__.py +2 -0
- meta_consent/forms/__init__.py +8 -0
- meta_consent/forms/subject_consent_v1_ext_form.py +47 -0
- meta_consent/forms/subject_reconsent_form.py +4 -4
- meta_consent/management/commands/create_missing_prescriptions.py +5 -3
- meta_consent/migrations/0001_initial.py +9 -9
- meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
- meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +535 -0
- meta_consent/migrations/0027_auto_20250111_0344.py +30 -0
- meta_consent/migrations/0028_historicalsubjectconsentv1ext_assessment_score_and_more.py +162 -0
- meta_consent/migrations/0029_alter_historicalsubjectconsentv1ext_agrees_to_extension_and_more.py +33 -0
- meta_consent/migrations/0030_auto_20250120_2114.py +40 -0
- meta_consent/migrations/0031_alter_historicalsubjectconsent_guardian_name_and_more.py +124 -0
- meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
- meta_consent/migrations/0033_historicalsubjectconsentspfq_subjectconsentspfq.py +615 -0
- meta_consent/migrations/0034_remove_subjectconsentspfq_site_and_more.py +23 -0
- meta_consent/migrations/0035_alter_historicalsubjectconsent_consent_definition_name_and_more.py +43 -0
- meta_consent/models/__init__.py +10 -0
- meta_consent/models/model_mixins.py +1 -2
- meta_consent/models/signals.py +25 -11
- meta_consent/models/subject_consent.py +2 -2
- meta_consent/models/subject_consent_v1.py +0 -1
- meta_consent/models/subject_consent_v1_ext.py +34 -0
- meta_consent/models/subject_reconsent.py +4 -4
- meta_dashboard/navbars.py +2 -6
- meta_dashboard/patterns.py +1 -1
- meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/eligibility_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/screening_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/subject/dashboard/sidebar.html +24 -0
- meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/top_bar.html +1 -1
- meta_dashboard/templates/meta_dashboard/subject/dashboard.html +14 -0
- meta_dashboard/templatetags/meta_dashboard_extras.py +9 -14
- meta_dashboard/urls.py +5 -5
- meta_dashboard/view_utils/__init__.py +13 -0
- meta_dashboard/view_utils/subject_screening_button.py +13 -20
- meta_dashboard/views/__init__.py +8 -0
- meta_dashboard/views/ae/__init__.py +2 -0
- meta_dashboard/views/ae/ae_listboard_view.py +1 -1
- meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
- meta_dashboard/views/screening/__init__.py +2 -0
- meta_dashboard/views/screening/listboard_view.py +2 -3
- meta_dashboard/views/subject/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/dashboard_view.py +19 -8
- meta_dashboard/views/subject/listboard/__init__.py +2 -0
- meta_dashboard/views/subject/listboard/listboard_view.py +2 -3
- meta_edc/__init__.py +5 -9
- meta_edc/admin.py +3 -4
- meta_edc/celery.py +2 -2
- meta_edc/celery_live.py +19 -0
- meta_edc/celery_uat.py +25 -0
- meta_edc/management/commands/update_forms_reference.py +16 -14
- meta_edc/meta_version.py +2 -2
- meta_edc/navbars.py +7 -5
- meta_edc/settings/debug.py +13 -4
- meta_edc/settings/defaults.py +55 -18
- meta_edc/settings/live.py +4 -1
- meta_edc/settings/logging.py +9 -4
- meta_edc/settings/minimal.py +4 -5
- meta_edc/settings/uat.py +3 -1
- meta_edc/templates/meta_edc/{bootstrap3/base.html → base.html} +1 -1
- meta_edc/templates/meta_edc/{bootstrap3/home.html → home.html} +2 -2
- meta_edc/urls.py +3 -1
- meta_edc/utils.py +3 -1
- meta_edc/views/__init__.py +2 -0
- meta_edc/views/home_view.py +1 -2
- meta_edc-1.4.0.dist-info/METADATA +174 -0
- {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info}/RECORD +578 -586
- meta_edc-1.4.0.dist-info/WHEEL +4 -0
- meta_labs/list_data.py +2 -2
- meta_labs/reportables.py +80 -11
- meta_lists/list_data.py +13 -4
- meta_lists/migrations/0008_auto_20200528_1517.py +2 -2
- meta_lists/migrations/0019_auto_20250128_0143.py +48 -0
- meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
- meta_pharmacy/admin/__init__.py +5 -0
- meta_pharmacy/admin/rx_admin.py +1 -0
- meta_pharmacy/admin/substitutions_admin.py +3 -3
- meta_pharmacy/constants.py +1 -1
- meta_pharmacy/forms/__init__.py +2 -0
- meta_pharmacy/forms/rx_form.py +0 -1
- meta_pharmacy/forms/substitutions_form.py +6 -4
- meta_pharmacy/labels/__init__.py +5 -2
- meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +4 -1
- meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
- meta_pharmacy/labels/label_data.py +1 -2
- meta_pharmacy/labels/print_sheets.py +4 -6
- meta_pharmacy/management/commands/update_initial_pharmacy_data.py +4 -3
- meta_pharmacy/migrations/0002_initial.py +7 -20
- meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
- meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
- meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
- meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
- meta_pharmacy/models/__init__.py +7 -0
- meta_pharmacy/models/label_data.py +4 -5
- meta_pharmacy/models/rx_label.py +0 -1
- meta_pharmacy/models/substitutions.py +4 -4
- meta_pharmacy/prepare_meta_pharmacy.py +1 -1
- meta_pharmacy/utils/__init__.py +2 -0
- meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
- meta_prn/action_items.py +44 -45
- meta_prn/admin/__init__.py +16 -0
- meta_prn/admin/dm_referral_admin.py +2 -1
- meta_prn/admin/end_of_study_admin.py +26 -15
- meta_prn/admin/loss_to_followup_admin.py +3 -2
- meta_prn/admin/off_study_medication_admin.py +5 -6
- meta_prn/admin/offschedule_admin.py +12 -11
- meta_prn/admin/offschedule_dm_referral_admin.py +11 -10
- meta_prn/admin/offschedule_postnatal_admin.py +15 -7
- meta_prn/admin/offschedule_pregnancy_admin.py +18 -9
- meta_prn/admin/onschedule_admin.py +7 -8
- meta_prn/admin/onschedule_dm_referral_admin.py +11 -12
- meta_prn/admin/pregnancy_notification_admin.py +5 -6
- meta_prn/admin/protocol_incident_admin.py +1 -1
- meta_prn/admin/subject_transfer_admin.py +1 -1
- meta_prn/baker_recipes.py +10 -10
- meta_prn/choices.py +11 -7
- meta_prn/constants.py +1 -0
- meta_prn/form_validators/__init__.py +5 -0
- meta_prn/form_validators/end_of_study.py +65 -20
- meta_prn/form_validators/protocol_incident.py +1 -1
- meta_prn/forms/__init__.py +13 -0
- meta_prn/forms/dm_referral_form.py +2 -8
- meta_prn/forms/end_of_study_form.py +1 -1
- meta_prn/forms/loss_to_followup_form.py +1 -1
- meta_prn/forms/off_study_medication_form.py +2 -2
- meta_prn/forms/offschedule_form.py +25 -0
- meta_prn/forms/pregnancy_notification_form.py +15 -17
- meta_prn/list_data.py +3 -3
- meta_prn/migrations/0001_initial.py +25 -25
- meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
- meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
- meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
- meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
- meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
- meta_prn/migrations/0034_auto_20220630_1110.py +1 -1
- meta_prn/migrations/0035_auto_20220630_1140.py +1 -1
- meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
- meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
- meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
- meta_prn/migrations/0060_alter_onschedule_managers_and_more.py +55 -0
- meta_prn/migrations/0061_auto_20250115_2025.py +56 -0
- meta_prn/migrations/0062_alter_endofstudy_offstudy_reason_and_more.py +72 -0
- meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/migrations/0064_auto_20250602_2143.py +18 -0
- meta_prn/migrations/0065_alter_historicaloffstudymedication_subject_identifier_and_more.py +23 -0
- meta_prn/migrations/0066_alter_historicallosstofollowup_subject_identifier_and_more.py +23 -0
- meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
- meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
- meta_prn/migrations/0069_alter_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/models/__init__.py +20 -0
- meta_prn/models/dm_referral.py +2 -2
- meta_prn/models/end_of_study.py +28 -23
- meta_prn/models/loss_to_followup.py +8 -10
- meta_prn/models/off_study_medication.py +7 -4
- meta_prn/models/offschedule.py +4 -4
- meta_prn/models/pregnancy_notification.py +3 -5
- meta_prn/models/protocol_incident.py +5 -2
- meta_prn/models/signals.py +16 -14
- meta_prn/models/subject_transfer.py +7 -0
- meta_prn/templates/meta_prn/eos/additional_instructions.html +3 -0
- meta_prn/templates/meta_prn/offschedule/additional_instructions.html +2 -0
- meta_rando/migrations/0001_initial.py +5 -5
- meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
- meta_rando/migrations/0007_spfqlist.py +197 -0
- meta_rando/migrations/0008_delete_spfqlist.py +16 -0
- meta_rando/models/__init__.py +1 -0
- meta_rando/{models.py → models/randomization_list.py} +3 -3
- meta_rando/randomizers.py +2 -2
- meta_reports/__init__.py +2 -0
- meta_reports/admin/__init__.py +16 -0
- meta_reports/admin/dbviews/__init__.py +13 -0
- meta_reports/admin/dbviews/glucose_summary_admin.py +7 -7
- meta_reports/admin/dbviews/imp_substitutions_admin.py +14 -13
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +7 -7
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
- meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/on_study_missing_values_admin/unmanaged_model_admin.py +0 -1
- meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +9 -9
- meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
- meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
- meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
- meta_reports/admin/endpoints_admin.py +1 -1
- meta_reports/admin/endpoints_all_admin.py +0 -1
- meta_reports/admin/last_imp_refill_admin.py +33 -36
- meta_reports/admin/list_filters.py +3 -3
- meta_reports/admin/modeladmin_mixins.py +10 -17
- meta_reports/death_report.py +2 -2
- meta_reports/forms/__init__.py +2 -0
- meta_reports/forms/missing_ogtt_note_form.py +3 -4
- meta_reports/management/commands/generate_endpoints.py +5 -4
- meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
- meta_reports/migrations/0054_auto_20250422_2003.py +81 -0
- meta_reports/migrations/0055_alter_glucosesummary_table.py +17 -0
- meta_reports/migrations/0056_auto_20250422_2214.py +54 -0
- meta_reports/migrations/0057_auto_20250422_2224.py +54 -0
- meta_reports/migrations/0058_auto_20250422_2232.py +54 -0
- meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
- meta_reports/migrations/0060_auto_20250926_0242.py +366 -0
- meta_reports/migrations/0061_auto_20251004_0043.py +21 -0
- meta_reports/migrations/0062_auto_20251004_0106.py +21 -0
- meta_reports/models/__init__.py +17 -0
- meta_reports/models/dbviews/__init__.py +14 -0
- meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
- meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +15 -3
- meta_reports/models/dbviews/glucose_summary/view_definition.py +8 -5
- meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
- meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +1 -2
- meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
- meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
- meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +2 -2
- meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
- meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
- meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +19 -1
- meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +0 -1
- meta_reports/models/endpoints.py +8 -4
- meta_reports/models/last_imp_refill.py +2 -3
- meta_reports/pdf_report.py +2 -2
- meta_reports/tasks.py +4 -3
- meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -1
- meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/endpoints_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/last_imp_refill/changelist_note.html +13 -0
- meta_screening/admin/__init__.py +8 -0
- meta_screening/admin/fieldsets.py +13 -15
- meta_screening/admin/list_filters.py +7 -5
- meta_screening/admin/screening_part_one_admin.py +1 -3
- meta_screening/admin/screening_part_three_admin.py +2 -3
- meta_screening/admin/screening_part_two_admin.py +7 -10
- meta_screening/admin/subject_refusal_admin.py +5 -3
- meta_screening/admin/subject_screening_admin.py +21 -10
- meta_screening/baker_recipes.py +18 -10
- meta_screening/calculators.py +1 -1
- meta_screening/choices.py +1 -1
- meta_screening/constants.py +1 -1
- meta_screening/eligibility/__init__.py +9 -0
- meta_screening/eligibility/eligibility.py +21 -14
- meta_screening/eligibility/eligibility_part_one.py +1 -1
- meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
- meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +68 -49
- meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +14 -15
- meta_screening/eligibility/eligibility_part_two.py +1 -1
- meta_screening/form_validators/__init__.py +8 -0
- meta_screening/form_validators/screening_part_one.py +1 -1
- meta_screening/form_validators/screening_part_three.py +6 -2
- meta_screening/form_validators/screening_part_two.py +1 -1
- meta_screening/form_validators/subject_refusal.py +1 -1
- meta_screening/forms/__init__.py +20 -0
- meta_screening/forms/field_lists.py +16 -18
- meta_screening/forms/screening_part_one_form.py +2 -2
- meta_screening/forms/screening_part_three_form.py +5 -3
- meta_screening/forms/screening_part_two_form.py +1 -5
- meta_screening/forms/subject_refusal_form.py +0 -4
- meta_screening/forms/subject_screening_form.py +0 -4
- meta_screening/migrations/0001_initial.py +15 -15
- meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
- meta_screening/migrations/0012_auto_20191107_0427.py +1 -1
- meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
- meta_screening/model_mixins/__init__.py +8 -0
- meta_screening/model_mixins/calculated_model_mixin.py +2 -2
- meta_screening/model_mixins/creatinine_fields_model_mixin.py +1 -1
- meta_screening/model_mixins/eligibility_model_mixin.py +6 -4
- meta_screening/model_mixins/part_one_fields_model_mixin.py +16 -19
- meta_screening/model_mixins/part_three_fields_model_mixin.py +6 -7
- meta_screening/model_mixins/part_two_fields_model_mixin.py +19 -17
- meta_screening/models/__init__.py +9 -0
- meta_screening/models/icp_referral.py +5 -5
- meta_screening/models/proxy_models.py +1 -1
- meta_screening/models/signals.py +10 -11
- meta_screening/models/subject_refusal.py +1 -1
- meta_screening/models/subject_screening.py +2 -4
- meta_subject/action_items.py +18 -14
- meta_subject/admin/__init__.py +42 -0
- meta_subject/admin/birth_outcome_admin.py +7 -9
- meta_subject/admin/blood_results/__init__.py +9 -0
- meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
- meta_subject/admin/complications_glycemia_admin.py +1 -1
- meta_subject/admin/delivery_admin.py +8 -11
- meta_subject/admin/diabetes/__init__.py +2 -0
- meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
- meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
- meta_subject/admin/egfr_drop_notification_admin.py +1 -1
- meta_subject/admin/fields.py +5 -5
- meta_subject/admin/fieldsets.py +5 -5
- meta_subject/admin/followup_examination_admin.py +11 -9
- meta_subject/admin/followup_vitals_admin.py +31 -6
- meta_subject/admin/glucose_admin.py +4 -8
- meta_subject/admin/glucose_fbg_admin.py +18 -11
- meta_subject/admin/health_economics/__init__.py +2 -0
- meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
- meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
- meta_subject/admin/hepatitis_test_admin.py +1 -1
- meta_subject/admin/hiv_exit_review_admin.py +55 -0
- meta_subject/admin/list_filters.py +5 -5
- meta_subject/admin/mnsi_admin.py +7 -5
- meta_subject/admin/next_appointment_admin.py +19 -0
- meta_subject/admin/other_arv_regimens_admin.py +3 -3
- meta_subject/admin/patient_history_admin.py +4 -4
- meta_subject/admin/physical_exam_admin.py +1 -1
- meta_subject/admin/pregnancy_update_admin.py +1 -1
- meta_subject/admin/study_medication_admin.py +8 -15
- meta_subject/admin/subject_requisition_admin.py +2 -2
- meta_subject/admin/subject_visit_admin.py +1 -1
- meta_subject/admin/subject_visit_missed_admin.py +1 -1
- meta_subject/admin/urine_dipstick_test_admin.py +1 -1
- meta_subject/admin/urine_pregnancy_admin.py +1 -1
- meta_subject/baker_recipes.py +15 -15
- meta_subject/choices.py +4 -3
- meta_subject/form_validators/__init__.py +15 -0
- meta_subject/form_validators/delivery_form_validator.py +3 -3
- meta_subject/form_validators/dm_endpoint_form_validator.py +3 -1
- meta_subject/form_validators/dm_followup_form_validator.py +8 -7
- meta_subject/form_validators/egfr_drop_notification_form_validator.py +1 -1
- meta_subject/form_validators/followup_examination_form_validator.py +1 -1
- meta_subject/form_validators/glucose_fbg_form_validator.py +76 -0
- meta_subject/form_validators/glucose_form_validator.py +10 -67
- meta_subject/form_validators/hiv_exit_review_form_validator.py +18 -0
- meta_subject/form_validators/mixins.py +95 -0
- meta_subject/forms/__init__.py +44 -0
- meta_subject/forms/blood_results/__init__.py +9 -0
- meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -1
- meta_subject/forms/blood_results/blood_results_rft_form.py +60 -4
- meta_subject/forms/delivery_form.py +2 -0
- meta_subject/forms/diabetes/__init__.py +2 -0
- meta_subject/forms/diabetes/dm_followup_form.py +2 -2
- meta_subject/forms/followup_vitals_form.py +27 -1
- meta_subject/forms/glucose_fbg_form.py +1 -46
- meta_subject/forms/health_economics/__init__.py +2 -0
- meta_subject/forms/hepatitis_test_form.py +1 -1
- meta_subject/forms/hiv_exit_review_form.py +13 -0
- meta_subject/forms/mixins.py +1 -1
- meta_subject/forms/next_appointment_form.py +36 -0
- meta_subject/forms/other_arv_regimens_form.py +1 -1
- meta_subject/forms/patient_history_form.py +1 -1
- meta_subject/forms/physical_exam_form.py +1 -1
- meta_subject/forms/pregnancy_update_form.py +1 -1
- meta_subject/forms/slider_widget.py +1 -1
- meta_subject/forms/study_medication_form.py +18 -12
- meta_subject/forms/subject_requisition_form.py +1 -1
- meta_subject/forms/subject_visit_missed_form.py +1 -1
- meta_subject/forms/urine_dipstick_test_form.py +1 -1
- meta_subject/forms/urine_pregnancy_form.py +1 -1
- meta_subject/management/commands/create_missing_refills.py +3 -3
- meta_subject/management/commands/create_missing_rx.py +2 -2
- meta_subject/management/commands/missed.py +20 -23
- meta_subject/metadata_rules/__init__.py +2 -0
- meta_subject/metadata_rules/metadata_rules.py +14 -0
- meta_subject/metadata_rules/predicates.py +44 -25
- meta_subject/migrations/0001_initial.py +61 -61
- meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
- meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
- meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
- meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
- meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
- meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
- meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
- meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
- meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
- meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
- meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
- meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
- meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
- meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
- meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
- meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
- meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
- meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
- meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
- meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
- meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
- meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
- meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
- meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
- meta_subject/migrations/0107_auto_20220415_0043.py +1 -1
- meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
- meta_subject/migrations/0128_auto_20220720_0055.py +1 -1
- meta_subject/migrations/0131_auto_20220722_0411.py +1 -1
- meta_subject/migrations/0135_auto_20220722_2212.py +2 -1
- meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
- meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
- meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
- meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
- meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
- meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
- meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
- meta_subject/migrations/0199_auto_20240516_0247.py +1 -1
- meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
- meta_subject/migrations/0212_auto_20240827_2222.py +1 -1
- meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +553 -0
- meta_subject/migrations/0217_alter_historicalnextappointment_appt_datetime_and_more.py +42 -0
- meta_subject/migrations/0218_alter_historicalnextappointment_appt_date_and_more.py +53 -0
- meta_subject/migrations/0219_remove_historicalnextappointment_allow_create_interim_and_more.py +92 -0
- meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +825 -0
- meta_subject/migrations/0221_auto_20250402_1913.py +42 -0
- meta_subject/migrations/0222_alter_historicalstudymedication_stock_codes_and_more.py +46 -0
- meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py +83 -0
- meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py +153 -0
- meta_subject/migrations/0225_followupvitals_waist_circumference_and_more.py +46 -0
- meta_subject/migrations/0226_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +2518 -0
- meta_subject/migrations/0229_alter_glucosefbg_consent_model_and_more.py +1918 -0
- meta_subject/migrations/0230_alter_historicaldelivery_action_identifier_and_more.py +1733 -0
- meta_subject/migrations/0231_alter_historicalmedicationadherence_consent_model_and_more.py +2054 -0
- meta_subject/migrations/0232_alter_patienthistory_concomitant_conditions_and_more.py +1170 -0
- meta_subject/migrations/0233_historicalspfq_spfq.py +1066 -0
- meta_subject/migrations/0234_remove_spfq_site_remove_spfq_subject_visit_and_more.py +27 -0
- meta_subject/migrations/0235_glucosefbg_endpoint_today_and_more.py +606 -0
- meta_subject/migrations/0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more.py +58 -0
- meta_subject/migrations/0237_historicalhivexitreview_singleton_field_and_more.py +68 -0
- meta_subject/migrations/0238_historicalhivexitreview_available_and_more.py +88 -0
- meta_subject/model_mixins/__init__.py +10 -0
- meta_subject/model_mixins/arv_history_model_mixin.py +3 -44
- meta_subject/model_mixins/arv_review_model_mixin.py +53 -0
- meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
- meta_subject/model_mixins/vitals_fields_model_mixin.py +33 -0
- meta_subject/models/__init__.py +52 -0
- meta_subject/models/birth_outcomes.py +3 -3
- meta_subject/models/blood_results/__init__.py +11 -0
- meta_subject/models/blood_results/blood_results_glu.py +29 -0
- meta_subject/models/blood_results/blood_results_hba1c.py +0 -1
- meta_subject/models/blood_results/blood_results_ins.py +0 -1
- meta_subject/models/blood_results/blood_results_lft.py +0 -1
- meta_subject/models/delivery.py +4 -6
- meta_subject/models/diabetes/__init__.py +2 -0
- meta_subject/models/diabetes/dm_endpoint.py +5 -5
- meta_subject/models/diabetes/dm_followup.py +7 -8
- meta_subject/models/diet_and_lifestyle.py +2 -2
- meta_subject/models/followup_examination.py +12 -14
- meta_subject/models/glucose.py +5 -5
- meta_subject/models/glucose_fbg.py +17 -4
- meta_subject/models/health_economics/__init__.py +2 -0
- meta_subject/models/health_economics/health_economics.py +8 -8
- meta_subject/models/health_economics/health_economics_simple.py +2 -2
- meta_subject/models/health_economics/health_economics_update.py +3 -2
- meta_subject/models/hepatitis_test.py +2 -2
- meta_subject/models/hiv_exit_review.py +44 -0
- meta_subject/models/next_appointment.py +15 -0
- meta_subject/models/other_arv_regimens_detail.py +1 -1
- meta_subject/models/patient_history.py +6 -7
- meta_subject/models/physical_exam.py +2 -2
- meta_subject/models/pregnancy_update.py +1 -1
- meta_subject/models/signals.py +15 -13
- meta_subject/models/subject_visit.py +2 -2
- meta_subject/models/todo.txt +1 -1
- meta_subject/models/urine_dipstick_test.py +2 -2
- meta_subject/models/urine_pregnancy.py +1 -1
- meta_subject/static/meta_subject/slider.css +1 -1
- meta_subject/templates/meta_subject/endpoint_review_instructions.html +1 -1
- meta_subject/templates/meta_subject/widgets/slider.html +0 -1
- meta_visit_schedule/visit_schedules/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/crfs.py +34 -1
- meta_visit_schedule/visit_schedules/phase_three/schedule.py +4 -4
- meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +2 -3
- meta_ae/tests/holidays.csv +0 -15
- meta_ae/tests/tests/test_actions.py +0 -127
- meta_ae/tests/urls.py +0 -10
- meta_analytics/dataframes/enrolled/__init__.py +0 -1
- meta_analytics/dataframes/enrolled/get_glucose_df.py +0 -122
- meta_analytics/tests/__init__.py +0 -0
- meta_analytics/tests/test_endpoints_by_date.py +0 -94
- meta_consent/tests/__init__.py +0 -0
- meta_consent/tests/holidays.csv +0 -15
- meta_consent/tests/tests/__init__.py +0 -0
- meta_consent/tests/tests/test_form_validators.py +0 -110
- meta_consent/tests/tests/test_subject_consent.py +0 -10
- meta_consent/tests/urls.py +0 -17
- meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard.html +0 -11
- meta_dashboard/tests/__init__.py +0 -0
- meta_dashboard/tests/admin.py +0 -22
- meta_dashboard/tests/holidays.csv +0 -15
- meta_dashboard/tests/tests/__init__.py +0 -0
- meta_dashboard/tests/urls.py +0 -55
- meta_edc/tests/__init__.py +0 -0
- meta_edc/tests/tests/__init__.py +0 -0
- meta_edc/tests/tests/test_endpoints.py +0 -554
- meta_edc-0.3.39.dist-info/AUTHORS +0 -0
- meta_edc-0.3.39.dist-info/METADATA +0 -766
- meta_edc-0.3.39.dist-info/WHEEL +0 -5
- meta_edc-0.3.39.dist-info/top_level.txt +0 -20
- meta_labs/tests/__init__.py +0 -0
- meta_labs/tests/test_labs.py +0 -27
- meta_labs/tests/test_reportables.py +0 -16
- meta_labs/tests/urls.py +0 -4
- meta_lists/tests/__init__.py +0 -0
- meta_lists/tests/test_lists.py +0 -8
- meta_pharmacy/admin/actions.py +0 -38
- meta_prn/tests/__init__.py +0 -0
- meta_prn/tests/tests/__init__.py +0 -0
- meta_prn/tests/tests/test_actions.py +0 -97
- meta_prn/tests/tests/test_dm_referral.py +0 -206
- meta_prn/tests/tests/test_manager_order.py +0 -14
- meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
- meta_prn/tests/urls.py +0 -10
- meta_rando/tests/__init__.py +0 -0
- meta_rando/tests/tests/__init__.py +0 -0
- meta_rando/tests/tests/test_randomizers.py +0 -57
- meta_reports/tests/__init__.py +0 -0
- meta_reports/tests/test_reports.py +0 -35
- meta_reports/tests/test_sql_gen.py +0 -5
- meta_reports/tests/urls.py +0 -4
- meta_screening/offline_models.py +0 -3
- meta_screening/tests/__init__.py +0 -0
- meta_screening/tests/holidays.csv +0 -15
- meta_screening/tests/meta_test_case_mixin.py +0 -216
- meta_screening/tests/options.py +0 -127
- meta_screening/tests/tests/__init__.py +0 -0
- meta_screening/tests/tests/test_forms.py +0 -397
- meta_screening/tests/tests/test_screening_part_one.py +0 -108
- meta_screening/tests/tests/test_screening_part_three.py +0 -436
- meta_screening/tests/tests/test_screening_part_two.py +0 -84
- meta_sites/tests/__init__.py +0 -0
- meta_sites/tests/test_sites.py +0 -12
- meta_sites/tests/urls.py +0 -4
- meta_stats/__init__.py +0 -0
- meta_stats/incidence.py +0 -16
- meta_stats/models.py +0 -0
- meta_stats/tests/__init__.py +0 -0
- meta_stats/tests/tests/__init__.py +0 -0
- meta_stats/tests/tests/test_incidence.py +0 -10
- meta_subject/tests/__init__.py +0 -0
- meta_subject/tests/holidays.csv +0 -15
- meta_subject/tests/tests/__init__.py +0 -0
- meta_subject/tests/tests/test_egfr.py +0 -234
- meta_subject/tests/tests/test_fixes.py +0 -64
- meta_subject/tests/tests/test_followup.py +0 -52
- meta_subject/tests/tests/test_manager_order.py +0 -11
- meta_subject/tests/tests/test_medication_adherence.py +0 -75
- meta_subject/tests/tests/test_metadata_rules.py +0 -135
- meta_subject/tests/tests/test_mnsi.py +0 -317
- meta_subject/tests/tests/test_patient_history_form.py +0 -74
- meta_subject/tests/tests/test_physical_exam.py +0 -84
- meta_subject/tests/tests/test_sf12.py +0 -173
- meta_subject/tests/tests/test_study_medication.py +0 -230
- meta_subject/tests/urls.py +0 -24
- meta_visit_schedule/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/test_schedule.py +0 -181
- meta_visit_schedule/tests/urls.py +0 -4
- tests/__init__.py +0 -0
- tests/etc/randomization_list.csv +0 -241
- tests/etc/randomization_list_phase_three.csv +0 -241
- tests/etc/user-aes-local.key +0 -0
- tests/etc/user-aes-restricted.key +0 -1
- tests/etc/user-rsa-local-private.pem +0 -27
- tests/etc/user-rsa-local-public.pem +0 -9
- tests/etc/user-rsa-restricted-private.pem +0 -27
- tests/etc/user-rsa-restricted-public.pem +0 -9
- tests/etc/user-salt-local.key +0 -0
- tests/etc/user-salt-restricted.key +0 -0
- tests/holidays.csv +0 -15
- tests/test_settings.py +0 -186
- /meta_ae/templates/meta_ae/{bootstrap3/ae_initial_description.html → aeinitial_description.html} +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/add_consent_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/dashboard_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/refusal_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/screening → screening}/listboard.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/listboard.html +0 -0
- {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info/licenses}/LICENSE +0 -0
- /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
- /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
4
2
|
from django.core.exceptions import ObjectDoesNotExist
|
|
5
3
|
from django.template.loader import render_to_string
|
|
@@ -47,11 +45,11 @@ class BirthOutcomesAdmin(
|
|
|
47
45
|
"birth_outcome",
|
|
48
46
|
)
|
|
49
47
|
|
|
50
|
-
radio_fields = {
|
|
48
|
+
radio_fields = { # noqa: RUF012
|
|
51
49
|
"birth_outcome": admin.VERTICAL,
|
|
52
50
|
}
|
|
53
51
|
|
|
54
|
-
def get_list_filter(self, request) ->
|
|
52
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
55
53
|
fields = super().get_list_filter(request)
|
|
56
54
|
custom_fields = (
|
|
57
55
|
"birth_order",
|
|
@@ -59,7 +57,7 @@ class BirthOutcomesAdmin(
|
|
|
59
57
|
)
|
|
60
58
|
return custom_fields + fields
|
|
61
59
|
|
|
62
|
-
def get_search_fields(self, request) ->
|
|
60
|
+
def get_search_fields(self, request) -> tuple[str, ...]:
|
|
63
61
|
fields = super().get_search_fields(request)
|
|
64
62
|
custom_fields = (
|
|
65
63
|
"delivery__subject_visit__subject_identifier",
|
|
@@ -68,11 +66,11 @@ class BirthOutcomesAdmin(
|
|
|
68
66
|
return tuple(set(fields + custom_fields))
|
|
69
67
|
|
|
70
68
|
@admin.display
|
|
71
|
-
def delivery_report(self, obj=None, label=None):
|
|
69
|
+
def delivery_report(self, obj=None, label=None): # noqa: ARG002
|
|
72
70
|
url = reverse("meta_subject_admin:meta_subject_delivery_changelist")
|
|
73
71
|
url = f"{url}?q={obj.subject_identifier}"
|
|
74
72
|
context = dict(title="Delivery", url=url, label="Delivery")
|
|
75
|
-
return render_to_string("dashboard_button.html", context=context)
|
|
73
|
+
return render_to_string("edc_subject_dashboard/dashboard_button.html", context=context)
|
|
76
74
|
|
|
77
75
|
def get_subject_dashboard_url_kwargs(self, obj):
|
|
78
76
|
return dict(subject_identifier=obj.subject_identifier)
|
|
@@ -93,6 +91,6 @@ class BirthOutcomesAdmin(
|
|
|
93
91
|
url = super().view_on_site(obj)
|
|
94
92
|
else:
|
|
95
93
|
raise NoReverseMatch(
|
|
96
|
-
f"{e}. See subject_dashboard_url_name for {
|
|
97
|
-
)
|
|
94
|
+
f"{e}. See subject_dashboard_url_name for {self!r}."
|
|
95
|
+
) from e
|
|
98
96
|
return url
|
|
@@ -4,3 +4,12 @@ from .blood_results_ins_admin import BloodResultsInsAdmin
|
|
|
4
4
|
from .blood_results_lft_admin import BloodResultsLftAdmin
|
|
5
5
|
from .blood_results_lipids_admin import BloodResultsLipidsAdmin
|
|
6
6
|
from .blood_results_rft_admin import BloodResultsRftAdmin
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"BloodResultsFbcAdmin",
|
|
10
|
+
"BloodResultsHba1cAdmin",
|
|
11
|
+
"BloodResultsInsAdmin",
|
|
12
|
+
"BloodResultsLftAdmin",
|
|
13
|
+
"BloodResultsLipidsAdmin",
|
|
14
|
+
"BloodResultsRftAdmin",
|
|
15
|
+
]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
|
-
from edc_action_item import action_fieldset_tuple
|
|
2
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
3
3
|
from edc_lab_results.admin import BloodResultsModelAdminMixin
|
|
4
4
|
from edc_lab_results.fieldsets import BloodResultFieldset
|
|
5
5
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
|
-
from edc_action_item import action_fieldset_tuple
|
|
2
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
3
3
|
from edc_lab_panel.panels import hba1c_panel
|
|
4
4
|
from edc_lab_results.admin import BloodResultsModelAdminMixin
|
|
5
5
|
from edc_lab_results.fieldsets import BloodResultFieldset
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
|
-
from edc_action_item import action_fieldset_tuple
|
|
2
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
3
3
|
from edc_lab_results.admin import BloodResultsModelAdminMixin
|
|
4
4
|
from edc_lab_results.fieldsets import BloodResultFieldset
|
|
5
5
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
|
-
from edc_action_item import action_fieldset_tuple
|
|
2
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
3
3
|
from edc_lab_results.admin import BloodResultsModelAdminMixin
|
|
4
4
|
from edc_lab_results.fieldsets import BloodResultFieldset
|
|
5
5
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
|
-
from edc_action_item import action_fieldset_tuple
|
|
2
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
3
3
|
from edc_lab_results.admin import BloodResultsModelAdminMixin
|
|
4
4
|
from edc_lab_results.fieldsets import BloodResultFieldset
|
|
5
5
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin, messages
|
|
4
2
|
from django.core.exceptions import MultipleObjectsReturned
|
|
5
|
-
from edc_action_item import action_fieldset_tuple
|
|
3
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
6
4
|
from edc_egfr.egfr import Egfr
|
|
7
5
|
from edc_lab_results.admin import BloodResultsModelAdminMixin
|
|
8
6
|
from edc_lab_results.fieldsets import (
|
|
@@ -28,7 +26,7 @@ class BloodResultsRftAdmin(
|
|
|
28
26
|
BloodResultsModelAdminMixin, CrfModelAdminMixin, SimpleHistoryAdmin
|
|
29
27
|
):
|
|
30
28
|
form = BloodResultsRftForm
|
|
31
|
-
actions =
|
|
29
|
+
actions = ("create_or_update_egfr_notification", "recalculate_egfr")
|
|
32
30
|
fieldsets = (
|
|
33
31
|
*BloodResultFieldset(
|
|
34
32
|
BloodResultsRft.lab_panel,
|
|
@@ -42,7 +40,7 @@ class BloodResultsRftAdmin(
|
|
|
42
40
|
).fieldsets,
|
|
43
41
|
)
|
|
44
42
|
|
|
45
|
-
def get_readonly_fields(self, request, obj=None) ->
|
|
43
|
+
def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]: # noqa: ARG002
|
|
46
44
|
readonly_fields = super().get_readonly_fields(request)
|
|
47
45
|
custom_fields = (
|
|
48
46
|
"egfr_value",
|
|
@@ -98,7 +98,7 @@ class ComplicationsGlycemiaAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
98
98
|
audit_fieldset_tuple,
|
|
99
99
|
)
|
|
100
100
|
|
|
101
|
-
radio_fields = {
|
|
101
|
+
radio_fields = { # noqa: RUF012
|
|
102
102
|
"at_reflex": admin.VERTICAL,
|
|
103
103
|
"cataracts": admin.VERTICAL,
|
|
104
104
|
"dns_burning": admin.VERTICAL,
|
|
@@ -2,11 +2,8 @@ from django.contrib import admin
|
|
|
2
2
|
from django.template.loader import render_to_string
|
|
3
3
|
from django.urls import reverse
|
|
4
4
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
5
|
-
from edc_action_item import
|
|
6
|
-
|
|
7
|
-
action_fields,
|
|
8
|
-
action_fieldset_tuple,
|
|
9
|
-
)
|
|
5
|
+
from edc_action_item.fieldsets import action_fields, action_fieldset_tuple
|
|
6
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
10
7
|
from edc_crf.fieldset import crf_status_fieldset
|
|
11
8
|
from edc_form_label import FormLabelModelAdminMixin
|
|
12
9
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -22,11 +19,11 @@ class BirthOutcomesInlineAdmin(TabularInlineMixin, admin.TabularInline):
|
|
|
22
19
|
model = BirthOutcomes
|
|
23
20
|
form = BirthOutcomesForm
|
|
24
21
|
extra = 1
|
|
25
|
-
fields =
|
|
22
|
+
fields = (
|
|
26
23
|
"birth_order",
|
|
27
24
|
"birth_outcome",
|
|
28
25
|
"birth_weight",
|
|
29
|
-
|
|
26
|
+
)
|
|
30
27
|
|
|
31
28
|
|
|
32
29
|
@admin.register(Delivery, site=meta_subject_admin)
|
|
@@ -38,7 +35,7 @@ class DeliveryAdmin(
|
|
|
38
35
|
):
|
|
39
36
|
form = DeliveryForm
|
|
40
37
|
|
|
41
|
-
inlines =
|
|
38
|
+
inlines = (BirthOutcomesInlineAdmin,)
|
|
42
39
|
|
|
43
40
|
fieldsets = (
|
|
44
41
|
(None, {"fields": ("subject_visit", "report_datetime")}),
|
|
@@ -94,7 +91,7 @@ class DeliveryAdmin(
|
|
|
94
91
|
"maternal_outcome",
|
|
95
92
|
)
|
|
96
93
|
|
|
97
|
-
radio_fields = {
|
|
94
|
+
radio_fields = { # noqa: RUF012
|
|
98
95
|
"info_available": admin.VERTICAL,
|
|
99
96
|
"info_source": admin.VERTICAL,
|
|
100
97
|
"informant_relation": admin.VERTICAL,
|
|
@@ -112,8 +109,8 @@ class DeliveryAdmin(
|
|
|
112
109
|
)
|
|
113
110
|
|
|
114
111
|
@admin.display
|
|
115
|
-
def birth_outcomes(self, obj=None, label=None):
|
|
112
|
+
def birth_outcomes(self, obj=None, label=None): # noqa: ARG002
|
|
116
113
|
url = reverse("meta_subject_admin:meta_subject_birthoutcomes_changelist")
|
|
117
114
|
url = f"{url}?q={obj.subject_identifier}"
|
|
118
115
|
context = dict(title="Outcomes", url=url, label="Outcomes")
|
|
119
|
-
return render_to_string("dashboard_button.html", context=context)
|
|
116
|
+
return render_to_string("edc_subject_dashboard/dashboard_button.html", context=context)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
2
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
3
|
-
from edc_action_item import
|
|
3
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
4
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
4
5
|
from edc_adherence.model_admin_mixin import get_visual_score_fieldset_tuple
|
|
5
6
|
from edc_crf.fieldset import crf_status_fieldset
|
|
6
7
|
from edc_form_label.form_label_modeladmin_mixin import FormLabelModelAdminMixin
|
|
@@ -86,7 +87,7 @@ class DmFollowupAdmin(
|
|
|
86
87
|
"missed_referral_reasons",
|
|
87
88
|
)
|
|
88
89
|
|
|
89
|
-
radio_fields = {
|
|
90
|
+
radio_fields = { # noqa: RUF012
|
|
90
91
|
"attended": admin.VERTICAL,
|
|
91
92
|
"investigations_performed": admin.VERTICAL,
|
|
92
93
|
"on_dm_medications": admin.VERTICAL,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
|
-
from edc_action_item import ActionItemModelAdminMixin
|
|
2
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
3
3
|
from edc_egfr.admin import EgfrDropNotificationAdminMixin
|
|
4
4
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
5
5
|
|
meta_subject/admin/fields.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
def get_blood_pressure_fields():
|
|
2
|
-
return
|
|
1
|
+
def get_blood_pressure_fields() -> tuple[str, ...]:
|
|
2
|
+
return (
|
|
3
3
|
"sys_blood_pressure_one",
|
|
4
4
|
"dia_blood_pressure_one",
|
|
5
5
|
"sys_blood_pressure_two",
|
|
6
6
|
"dia_blood_pressure_two",
|
|
7
7
|
"severe_htn",
|
|
8
|
-
|
|
8
|
+
)
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
def get_respiratory_o2_fields():
|
|
12
|
-
return
|
|
11
|
+
def get_respiratory_o2_fields() -> tuple[str, ...]:
|
|
12
|
+
return ("respiratory_rate",)
|
meta_subject/admin/fieldsets.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
def get_htn_fieldset(part=None):
|
|
2
|
-
fields =
|
|
2
|
+
fields = (
|
|
3
3
|
"htn_diagnosis",
|
|
4
4
|
"on_htn_treatment",
|
|
5
5
|
"htn_treatment",
|
|
@@ -9,11 +9,11 @@ def get_htn_fieldset(part=None):
|
|
|
9
9
|
"dyslipidaemia_rx",
|
|
10
10
|
"concomitant_conditions",
|
|
11
11
|
"concomitant_medications",
|
|
12
|
-
|
|
12
|
+
)
|
|
13
13
|
|
|
14
14
|
return (
|
|
15
15
|
f"Part {part}: Hypertension",
|
|
16
|
-
{"fields":
|
|
16
|
+
{"fields": fields},
|
|
17
17
|
)
|
|
18
18
|
|
|
19
19
|
|
|
@@ -22,7 +22,7 @@ def get_hiv_fieldset(part=None):
|
|
|
22
22
|
if part:
|
|
23
23
|
title = f"Part {part}: {title}"
|
|
24
24
|
# TODO: previous_arv_regimen_start_date is PHASE 3 only
|
|
25
|
-
fields =
|
|
25
|
+
fields = (
|
|
26
26
|
"hiv_diagnosis_date",
|
|
27
27
|
"arv_initiation_date",
|
|
28
28
|
"viral_load",
|
|
@@ -39,7 +39,7 @@ def get_hiv_fieldset(part=None):
|
|
|
39
39
|
"on_oi_prophylaxis",
|
|
40
40
|
"oi_prophylaxis",
|
|
41
41
|
"other_oi_prophylaxis",
|
|
42
|
-
|
|
42
|
+
)
|
|
43
43
|
return (
|
|
44
44
|
title,
|
|
45
45
|
{"fields": fields},
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import NONE, YES
|
|
1
2
|
from django.contrib import admin
|
|
2
3
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
3
|
-
from edc_action_item import
|
|
4
|
-
from
|
|
4
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
5
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
5
6
|
from edc_crf.fieldset import crf_status_fieldset
|
|
6
7
|
from edc_form_label.form_label_modeladmin_mixin import FormLabelModelAdminMixin
|
|
7
8
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -16,17 +17,18 @@ class GradedEventFilter(admin.SimpleListFilter):
|
|
|
16
17
|
title = "Graded events"
|
|
17
18
|
parameter_name = "grade"
|
|
18
19
|
|
|
19
|
-
def lookups(self, request, model_admin):
|
|
20
|
+
def lookups(self, request, model_admin): # noqa: ARG002
|
|
20
21
|
return (
|
|
21
22
|
("g3", "Grade 3"),
|
|
22
23
|
("g4", "Grade 4"),
|
|
23
24
|
)
|
|
24
25
|
|
|
25
|
-
def queryset(self, request, queryset):
|
|
26
|
+
def queryset(self, request, queryset): # noqa: ARG002
|
|
26
27
|
if self.value() == "g3":
|
|
27
28
|
return queryset.exclude(symptoms_g3__name=NONE)
|
|
28
29
|
if self.value() == "g4":
|
|
29
30
|
return queryset.exclude(symptoms_g4__name=NONE)
|
|
31
|
+
return queryset
|
|
30
32
|
|
|
31
33
|
|
|
32
34
|
@admin.register(FollowupExamination, site=meta_subject_admin)
|
|
@@ -38,11 +40,11 @@ class FollowupExaminationAdmin(
|
|
|
38
40
|
):
|
|
39
41
|
form = FollowupExaminationForm
|
|
40
42
|
|
|
41
|
-
autocomplete_fields =
|
|
43
|
+
autocomplete_fields = ("art_new_regimen",)
|
|
42
44
|
|
|
43
|
-
additional_instructions =
|
|
44
|
-
"If participant is pregnant, complete the action linked CRF `Pregnancy notification`."
|
|
45
|
-
|
|
45
|
+
additional_instructions = (
|
|
46
|
+
"If participant is pregnant, complete the action linked CRF `Pregnancy notification`.",
|
|
47
|
+
)
|
|
46
48
|
|
|
47
49
|
fieldsets = (
|
|
48
50
|
(None, {"fields": ("subject_visit", "report_datetime")}),
|
|
@@ -127,7 +129,7 @@ class FollowupExaminationAdmin(
|
|
|
127
129
|
|
|
128
130
|
# readonly_fields = action_fields
|
|
129
131
|
|
|
130
|
-
radio_fields = {
|
|
132
|
+
radio_fields = { # noqa: RUF012
|
|
131
133
|
"abdominal_tenderness": admin.VERTICAL,
|
|
132
134
|
"admitted_hospital": admin.VERTICAL,
|
|
133
135
|
"any_other_problems": admin.VERTICAL,
|
|
@@ -15,34 +15,59 @@ from .modeladmin import CrfModelAdminMixin
|
|
|
15
15
|
class FollowupVitalsAdmin(CrfModelAdminMixin, FormLabelModelAdminMixin, SimpleHistoryAdmin):
|
|
16
16
|
form = FollowupVitalsForm
|
|
17
17
|
|
|
18
|
-
additional_instructions =
|
|
18
|
+
additional_instructions = (
|
|
19
19
|
"If participant is pregnant, complete the action linked CRF `Pregnancy notification`."
|
|
20
|
-
|
|
20
|
+
)
|
|
21
21
|
|
|
22
22
|
fieldsets = (
|
|
23
23
|
(None, {"fields": ("subject_visit", "report_datetime")}),
|
|
24
24
|
(
|
|
25
|
-
"
|
|
25
|
+
"Weight",
|
|
26
|
+
{
|
|
27
|
+
"fields": ("weight",),
|
|
28
|
+
},
|
|
29
|
+
),
|
|
30
|
+
(
|
|
31
|
+
"Waist circumference",
|
|
32
|
+
{
|
|
33
|
+
"description": (
|
|
34
|
+
"REQUIRED at 36 and 48 months. If not measured "
|
|
35
|
+
"at 36 and 48 months, provide the reason."
|
|
36
|
+
),
|
|
37
|
+
"fields": (
|
|
38
|
+
"waist_circumference_measured",
|
|
39
|
+
"waist_circumference",
|
|
40
|
+
"waist_circumference_comment",
|
|
41
|
+
),
|
|
42
|
+
},
|
|
43
|
+
),
|
|
44
|
+
(
|
|
45
|
+
"BP and heart rate",
|
|
26
46
|
{
|
|
27
47
|
"description": (
|
|
28
48
|
"To be completed by the research nurse. <BR>"
|
|
29
49
|
"Refer to SOP for blood pressure measurement procedure."
|
|
30
50
|
),
|
|
31
51
|
"fields": (
|
|
32
|
-
"weight",
|
|
33
52
|
*get_blood_pressure_fields(),
|
|
34
53
|
"heart_rate",
|
|
35
54
|
*get_respiratory_o2_fields(),
|
|
36
|
-
"temperature",
|
|
37
55
|
),
|
|
38
56
|
},
|
|
39
57
|
),
|
|
58
|
+
(
|
|
59
|
+
"Temperature",
|
|
60
|
+
{
|
|
61
|
+
"fields": ("temperature",),
|
|
62
|
+
},
|
|
63
|
+
),
|
|
40
64
|
crf_status_fieldset,
|
|
41
65
|
audit_fieldset_tuple,
|
|
42
66
|
)
|
|
43
67
|
|
|
44
68
|
filter_horizontal = ()
|
|
45
69
|
|
|
46
|
-
radio_fields = {
|
|
70
|
+
radio_fields = { # noqa: RUF012
|
|
71
|
+
"waist_circumference_measured": admin.VERTICAL,
|
|
47
72
|
"severe_htn": admin.VERTICAL,
|
|
48
73
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Type
|
|
4
|
-
|
|
5
3
|
from django.contrib import admin
|
|
6
4
|
from django.contrib.admin import SimpleListFilter
|
|
7
5
|
from django.template.loader import render_to_string
|
|
@@ -72,7 +70,7 @@ class GlucoseAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
72
70
|
audit_fieldset_tuple,
|
|
73
71
|
)
|
|
74
72
|
|
|
75
|
-
radio_fields = {
|
|
73
|
+
radio_fields = { # noqa: RUF012
|
|
76
74
|
"fasting": admin.VERTICAL,
|
|
77
75
|
"fbg_units": admin.VERTICAL,
|
|
78
76
|
"fbg_performed": admin.VERTICAL,
|
|
@@ -86,13 +84,11 @@ class GlucoseAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
86
84
|
list_display = list(list_display)
|
|
87
85
|
list_display.insert(3, "ogtt_value")
|
|
88
86
|
list_display.insert(3, "fbg_value")
|
|
89
|
-
|
|
90
|
-
return list_display
|
|
87
|
+
return tuple(list_display)
|
|
91
88
|
|
|
92
|
-
def get_list_filter(self, request) -> tuple[str |
|
|
89
|
+
def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
|
|
93
90
|
list_filter = super().get_list_filter(request)
|
|
94
91
|
list_filter = list(list_filter)
|
|
95
92
|
list_filter.insert(2, OgttListFilter)
|
|
96
93
|
list_filter.insert(2, FbgListFilter)
|
|
97
|
-
|
|
98
|
-
return list_filter
|
|
94
|
+
return tuple(list_filter)
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Type
|
|
4
|
-
|
|
5
3
|
from django.contrib import admin
|
|
6
4
|
from django.contrib.admin import SimpleListFilter
|
|
5
|
+
from django.template.loader import render_to_string
|
|
7
6
|
from django_audit_fields import audit_fieldset_tuple
|
|
8
7
|
from edc_crf.fieldset import crf_status_fieldset
|
|
9
8
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -19,7 +18,7 @@ from .modeladmin import CrfModelAdminMixin
|
|
|
19
18
|
class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
20
19
|
form = GlucoseFbgForm
|
|
21
20
|
|
|
22
|
-
fieldsets =
|
|
21
|
+
fieldsets = (
|
|
23
22
|
(None, {"fields": ("subject_visit", "report_datetime")}),
|
|
24
23
|
(
|
|
25
24
|
"Fasting",
|
|
@@ -42,11 +41,21 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
42
41
|
)
|
|
43
42
|
},
|
|
44
43
|
),
|
|
44
|
+
(
|
|
45
|
+
"Endpoint review",
|
|
46
|
+
{
|
|
47
|
+
"description": render_to_string(
|
|
48
|
+
"meta_subject/endpoint_review_instructions.html", context={}
|
|
49
|
+
),
|
|
50
|
+
"fields": ("endpoint_today",),
|
|
51
|
+
},
|
|
52
|
+
),
|
|
45
53
|
(
|
|
46
54
|
"Confirmation appointment",
|
|
47
55
|
{
|
|
48
56
|
"description": (
|
|
49
|
-
"If
|
|
57
|
+
"If patient has not reached the endpoint and the blood glucose "
|
|
58
|
+
"value is >= 7.0 mmol/L, schedule an "
|
|
50
59
|
"appointment within 1 week to confirm"
|
|
51
60
|
),
|
|
52
61
|
"fields": ("repeat_fbg_date",),
|
|
@@ -54,9 +63,9 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
54
63
|
),
|
|
55
64
|
crf_status_fieldset,
|
|
56
65
|
audit_fieldset_tuple,
|
|
57
|
-
|
|
66
|
+
)
|
|
58
67
|
|
|
59
|
-
radio_fields = {
|
|
68
|
+
radio_fields = { # noqa: RUF012
|
|
60
69
|
"fasting": admin.VERTICAL,
|
|
61
70
|
"fbg_units": admin.VERTICAL,
|
|
62
71
|
"fbg_performed": admin.VERTICAL,
|
|
@@ -71,12 +80,10 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
71
80
|
list_display = list(list_display)
|
|
72
81
|
# list_display.insert(3, "ogtt")
|
|
73
82
|
list_display.insert(3, "fbg")
|
|
74
|
-
|
|
75
|
-
return list_display
|
|
83
|
+
return tuple(list_display)
|
|
76
84
|
|
|
77
|
-
def get_list_filter(self, request) -> tuple[str |
|
|
85
|
+
def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
|
|
78
86
|
list_filter = super().get_list_filter(request)
|
|
79
87
|
list_filter = list(list_filter)
|
|
80
88
|
list_filter.insert(2, GlucoseListFilter)
|
|
81
|
-
|
|
82
|
-
return list_filter
|
|
89
|
+
return tuple(list_filter)
|
|
@@ -92,7 +92,7 @@ class HealthEconomicsUpdateAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
92
92
|
audit_fieldset_tuple,
|
|
93
93
|
)
|
|
94
94
|
|
|
95
|
-
radio_fields = {
|
|
95
|
+
radio_fields = { # noqa: RUF012
|
|
96
96
|
"hoh": admin.VERTICAL,
|
|
97
97
|
"relationship_to_hoh": admin.VERTICAL,
|
|
98
98
|
"avg_income": admin.VERTICAL,
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from django.contrib import admin
|
|
4
|
+
from django_audit_fields import audit_fieldset_tuple
|
|
5
|
+
from edc_crf.fieldset import crf_status_fieldset
|
|
6
|
+
from edc_model_admin.history import SimpleHistoryAdmin
|
|
7
|
+
|
|
8
|
+
from ..admin_site import meta_subject_admin
|
|
9
|
+
from ..forms import HivExitReviewForm
|
|
10
|
+
from ..models import HivExitReview
|
|
11
|
+
from .modeladmin import CrfModelAdminMixin
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@admin.register(HivExitReview, site=meta_subject_admin)
|
|
15
|
+
class HivExitReviewAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
16
|
+
autocomplete_fields = ("current_arv_regimen",)
|
|
17
|
+
|
|
18
|
+
form = HivExitReviewForm
|
|
19
|
+
|
|
20
|
+
fieldsets = (
|
|
21
|
+
(
|
|
22
|
+
None,
|
|
23
|
+
{
|
|
24
|
+
"fields": (
|
|
25
|
+
"subject_visit",
|
|
26
|
+
"report_datetime",
|
|
27
|
+
"available",
|
|
28
|
+
"not_available_reason",
|
|
29
|
+
)
|
|
30
|
+
},
|
|
31
|
+
),
|
|
32
|
+
(
|
|
33
|
+
"HIV and ARVs",
|
|
34
|
+
{
|
|
35
|
+
"fields": (
|
|
36
|
+
"viral_load",
|
|
37
|
+
"viral_load_date",
|
|
38
|
+
"cd4",
|
|
39
|
+
"cd4_date",
|
|
40
|
+
"current_arv_regimen",
|
|
41
|
+
"other_current_arv_regimen",
|
|
42
|
+
"current_arv_regimen_start_date",
|
|
43
|
+
)
|
|
44
|
+
},
|
|
45
|
+
),
|
|
46
|
+
("Comment", {"fields": ("comment",)}),
|
|
47
|
+
crf_status_fieldset,
|
|
48
|
+
audit_fieldset_tuple,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
list_filter = ("available",)
|
|
52
|
+
|
|
53
|
+
radio_fields = { # noqa: RUF012
|
|
54
|
+
"available": admin.VERTICAL,
|
|
55
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
from clinicedc_constants import HIGH, NORMAL
|
|
1
2
|
from django.contrib.admin import SimpleListFilter
|
|
2
3
|
from django.db.models import Q
|
|
3
|
-
from edc_constants.constants import HIGH, NORMAL
|
|
4
4
|
from edc_model_admin.list_filters import FutureDateListFilter, PastDateListFilter
|
|
5
5
|
|
|
6
6
|
from meta_subject.models import Glucose, GlucoseFbg
|
|
@@ -13,14 +13,14 @@ class GlucoseListFilter(SimpleListFilter):
|
|
|
13
13
|
parameter_name = "glucose_value"
|
|
14
14
|
model_cls = GlucoseFbg
|
|
15
15
|
|
|
16
|
-
def lookups(self, request, model_admin):
|
|
16
|
+
def lookups(self, request, model_admin): # noqa: ARG002
|
|
17
17
|
return (
|
|
18
18
|
(NORMAL, "Normal"),
|
|
19
19
|
(HIGH, "High"),
|
|
20
20
|
(VERY_HIGH, "Very high"),
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
-
def queryset(self, request, queryset):
|
|
23
|
+
def queryset(self, request, queryset): # noqa: ARG002
|
|
24
24
|
qs = None
|
|
25
25
|
if self.value():
|
|
26
26
|
if self.value() == NORMAL:
|
|
@@ -46,13 +46,13 @@ class OgttListFilter(SimpleListFilter):
|
|
|
46
46
|
parameter_name = "ogtt_value"
|
|
47
47
|
model_cls = Glucose
|
|
48
48
|
|
|
49
|
-
def lookups(self, request, model_admin):
|
|
49
|
+
def lookups(self, request, model_admin): # noqa: ARG002
|
|
50
50
|
return (
|
|
51
51
|
(NORMAL, "Normal"),
|
|
52
52
|
(HIGH, "High"),
|
|
53
53
|
)
|
|
54
54
|
|
|
55
|
-
def queryset(self, request, queryset):
|
|
55
|
+
def queryset(self, request, queryset): # noqa: ARG002
|
|
56
56
|
qs = None
|
|
57
57
|
if self.value():
|
|
58
58
|
if self.value() == NORMAL:
|