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
meta_prn/admin/__init__.py
CHANGED
|
@@ -11,3 +11,19 @@ from .onschedule_dm_referral_admin import OnScheduleDmReferralAdmin
|
|
|
11
11
|
from .pregnancy_notification_admin import PregnancyNotificationAdmin
|
|
12
12
|
from .protocol_incident_admin import ProtocolIncidentAdmin
|
|
13
13
|
from .subject_transfer_admin import SubjectTransferAdmin
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"DmReferralAdmin",
|
|
17
|
+
"EndOfStudyAdmin",
|
|
18
|
+
"LossToFollowupAdmin",
|
|
19
|
+
"OffScheduleAdmin",
|
|
20
|
+
"OffScheduleDmReferralAdmin",
|
|
21
|
+
"OffSchedulePostnatalAdmin",
|
|
22
|
+
"OffSchedulePregnancyAdmin",
|
|
23
|
+
"OffStudyMedicationAdmin",
|
|
24
|
+
"OnScheduleAdmin",
|
|
25
|
+
"OnScheduleDmReferralAdmin",
|
|
26
|
+
"PregnancyNotificationAdmin",
|
|
27
|
+
"ProtocolIncidentAdmin",
|
|
28
|
+
"SubjectTransferAdmin",
|
|
29
|
+
]
|
|
@@ -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_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
5
6
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
6
7
|
from edc_sites.admin import SiteModelAdminMixin
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
1
|
+
from clinicedc_constants import OTHER
|
|
3
2
|
from dateutil.relativedelta import relativedelta
|
|
4
3
|
from django.contrib import admin
|
|
4
|
+
from django.template.loader import render_to_string
|
|
5
5
|
from django.utils.html import format_html
|
|
6
|
+
from django.utils.safestring import mark_safe
|
|
6
7
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
7
|
-
from edc_action_item import
|
|
8
|
-
from
|
|
8
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
9
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
9
10
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
10
11
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
11
12
|
from edc_sites.admin import SiteModelAdminMixin
|
|
12
13
|
|
|
13
14
|
from meta_ae.models import DeathReport
|
|
14
15
|
from meta_consent.models import SubjectConsent
|
|
16
|
+
from meta_lists.models import OffstudyReasons
|
|
15
17
|
|
|
16
18
|
from ..admin_site import meta_prn_admin
|
|
17
19
|
from ..forms import EndOfStudyForm
|
|
@@ -26,12 +28,16 @@ class EndOfStudyAdmin(
|
|
|
26
28
|
SimpleHistoryAdmin,
|
|
27
29
|
):
|
|
28
30
|
additional_instructions = format_html(
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
"{html}",
|
|
32
|
+
html=mark_safe( # noqa: S308
|
|
33
|
+
render_to_string(
|
|
34
|
+
"meta_prn/eos/additional_instructions.html",
|
|
35
|
+
context=dict(
|
|
36
|
+
death_report=DeathReport._meta.verbose_name,
|
|
37
|
+
ltfu=LossToFollowup._meta.verbose_name,
|
|
38
|
+
),
|
|
39
|
+
)
|
|
40
|
+
), # nosec #B703 # B308
|
|
35
41
|
)
|
|
36
42
|
|
|
37
43
|
form = EndOfStudyForm
|
|
@@ -105,13 +111,18 @@ class EndOfStudyAdmin(
|
|
|
105
111
|
audit_fieldset_tuple,
|
|
106
112
|
)
|
|
107
113
|
|
|
108
|
-
radio_fields = {
|
|
114
|
+
radio_fields = { # noqa: RUF012
|
|
109
115
|
"offstudy_reason": admin.VERTICAL,
|
|
110
116
|
"clinical_withdrawal_reason": admin.VERTICAL,
|
|
111
117
|
"toxicity_withdrawal_reason": admin.VERTICAL,
|
|
112
118
|
}
|
|
113
119
|
|
|
114
|
-
def
|
|
120
|
+
def formfield_for_foreignkey(self, db_field, request, **kwargs):
|
|
121
|
+
if db_field.name == "offstudy_reason":
|
|
122
|
+
kwargs["queryset"] = OffstudyReasons.objects.order_by("display_index")
|
|
123
|
+
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
|
124
|
+
|
|
125
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
115
126
|
list_display = super().get_list_display(request)
|
|
116
127
|
custom_fields = (
|
|
117
128
|
"subject_identifier",
|
|
@@ -122,15 +133,15 @@ class EndOfStudyAdmin(
|
|
|
122
133
|
"reason",
|
|
123
134
|
)
|
|
124
135
|
return custom_fields + tuple(
|
|
125
|
-
f for f in list_display if f not in custom_fields
|
|
136
|
+
f for f in list_display if f not in (*custom_fields, "__str__")
|
|
126
137
|
)
|
|
127
138
|
|
|
128
|
-
def get_list_filter(self, request) ->
|
|
139
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
129
140
|
list_filter = super().get_list_filter(request)
|
|
130
141
|
custom_fields = ("offstudy_reason", "last_seen_date")
|
|
131
142
|
return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
|
|
132
143
|
|
|
133
|
-
def get_search_fields(self, request) ->
|
|
144
|
+
def get_search_fields(self, request) -> tuple[str, ...]:
|
|
134
145
|
search_fields = super().get_search_fields(request)
|
|
135
146
|
custom_fields = ("subject_identifier",)
|
|
136
147
|
return tuple(set(custom_fields + search_fields))
|
|
@@ -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_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
5
6
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
6
7
|
from edc_sites.admin import SiteModelAdminMixin
|
|
@@ -54,7 +55,7 @@ class LossToFollowupAdmin(
|
|
|
54
55
|
"number_consecutive_missed_visits",
|
|
55
56
|
)
|
|
56
57
|
|
|
57
|
-
radio_fields = {
|
|
58
|
+
radio_fields = { # noqa: RUF012
|
|
58
59
|
"home_visited": admin.VERTICAL,
|
|
59
60
|
"loss_category": admin.VERTICAL,
|
|
60
61
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
4
2
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
5
|
-
from edc_action_item import
|
|
3
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
4
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
6
5
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
7
6
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
8
7
|
from edc_sites.admin import SiteModelAdminMixin
|
|
@@ -40,7 +39,7 @@ class OffStudyMedicationAdmin(
|
|
|
40
39
|
audit_fieldset_tuple,
|
|
41
40
|
)
|
|
42
41
|
|
|
43
|
-
radio_fields = {
|
|
42
|
+
radio_fields = { # noqa: RUF012
|
|
44
43
|
"reason": admin.VERTICAL,
|
|
45
44
|
}
|
|
46
45
|
|
|
@@ -48,7 +47,7 @@ class OffStudyMedicationAdmin(
|
|
|
48
47
|
|
|
49
48
|
search_fields = ("subject_identifier",)
|
|
50
49
|
|
|
51
|
-
def get_list_display(self, request) ->
|
|
50
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
52
51
|
list_display = super().get_list_display(request)
|
|
53
52
|
custom_fields = (
|
|
54
53
|
"subject_identifier",
|
|
@@ -58,7 +57,7 @@ class OffStudyMedicationAdmin(
|
|
|
58
57
|
)
|
|
59
58
|
return custom_fields + tuple(f for f in list_display if f not in custom_fields)
|
|
60
59
|
|
|
61
|
-
def get_list_filter(self, request) ->
|
|
60
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
62
61
|
list_filter = super().get_list_filter(request)
|
|
63
62
|
custom_fields = (
|
|
64
63
|
"medications",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
4
|
-
from django.
|
|
2
|
+
from django.template.loader import render_to_string
|
|
3
|
+
from django.utils.safestring import mark_safe
|
|
5
4
|
from django_audit_fields import audit_fieldset_tuple
|
|
6
|
-
from edc_action_item import
|
|
5
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
6
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
7
7
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
8
8
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
9
9
|
from edc_sites.admin import SiteModelAdminMixin
|
|
@@ -22,11 +22,12 @@ class OffScheduleAdmin(
|
|
|
22
22
|
):
|
|
23
23
|
form = OffScheduleForm
|
|
24
24
|
|
|
25
|
-
additional_instructions =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
additional_instructions = mark_safe( # noqa: S308
|
|
26
|
+
render_to_string(
|
|
27
|
+
"meta_prn/offschedule/additional_instructions.html",
|
|
28
|
+
context=dict(verbose_name=EndOfStudy._meta.verbose_name),
|
|
29
|
+
)
|
|
30
|
+
) # nosec B703, B308
|
|
30
31
|
|
|
31
32
|
fieldsets = (
|
|
32
33
|
(None, {"fields": ("subject_identifier", "offschedule_datetime")}),
|
|
@@ -34,12 +35,12 @@ class OffScheduleAdmin(
|
|
|
34
35
|
audit_fieldset_tuple,
|
|
35
36
|
)
|
|
36
37
|
|
|
37
|
-
def get_list_display(self, request) ->
|
|
38
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
38
39
|
list_display = super().get_list_display(request)
|
|
39
40
|
custom_fields = ("subject_identifier", "dashboard", "offschedule_datetime")
|
|
40
41
|
return custom_fields + tuple(f for f in list_display if f not in custom_fields)
|
|
41
42
|
|
|
42
|
-
def get_list_filter(self, request) ->
|
|
43
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
43
44
|
list_filter = super().get_list_filter(request)
|
|
44
45
|
custom_fields = ("offschedule_datetime",)
|
|
45
46
|
return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
4
|
-
from django.
|
|
2
|
+
from django.template.loader import render_to_string
|
|
3
|
+
from django.utils.safestring import mark_safe
|
|
5
4
|
from django_audit_fields import audit_fieldset_tuple
|
|
6
|
-
from edc_action_item import
|
|
5
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
6
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
7
7
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
8
8
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
9
9
|
from edc_sites.admin import SiteModelAdminMixin
|
|
@@ -24,10 +24,11 @@ class OffScheduleDmReferralAdmin(
|
|
|
24
24
|
|
|
25
25
|
form = OffScheduleDmReferralForm
|
|
26
26
|
|
|
27
|
-
additional_instructions =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
additional_instructions = mark_safe( # noqa: S308
|
|
28
|
+
render_to_string(
|
|
29
|
+
"meta_prn/offschedule/additional_instructions.html",
|
|
30
|
+
context=dict(verbose_name=EndOfStudy._meta.verbose_name),
|
|
31
|
+
)
|
|
31
32
|
)
|
|
32
33
|
|
|
33
34
|
fieldsets = (
|
|
@@ -36,12 +37,12 @@ class OffScheduleDmReferralAdmin(
|
|
|
36
37
|
audit_fieldset_tuple,
|
|
37
38
|
)
|
|
38
39
|
|
|
39
|
-
def get_list_display(self, request) ->
|
|
40
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
40
41
|
list_display = super().get_list_display(request)
|
|
41
42
|
custom_fields = ("subject_identifier", "dashboard", "offschedule_datetime")
|
|
42
43
|
return custom_fields + tuple(f for f in list_display if f not in custom_fields)
|
|
43
44
|
|
|
44
|
-
def get_list_filter(self, request) ->
|
|
45
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
45
46
|
list_filter = super().get_list_filter(request)
|
|
46
47
|
custom_fields = ("offschedule_datetime",)
|
|
47
48
|
return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
2
|
+
from django.template.loader import render_to_string
|
|
3
|
+
from django.utils.safestring import mark_safe
|
|
4
4
|
from django_audit_fields import audit_fieldset_tuple
|
|
5
|
-
from edc_action_item import
|
|
5
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
6
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
6
7
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
7
8
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
8
9
|
from edc_sites.admin import SiteModelAdminMixin
|
|
9
10
|
|
|
10
11
|
from ..admin_site import meta_prn_admin
|
|
11
|
-
from ..models import OffSchedulePostnatal
|
|
12
|
+
from ..models import EndOfStudy, OffSchedulePostnatal
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
@admin.register(OffSchedulePostnatal, site=meta_prn_admin)
|
|
@@ -20,22 +21,29 @@ class OffSchedulePostnatalAdmin(
|
|
|
20
21
|
):
|
|
21
22
|
instructions = None
|
|
22
23
|
|
|
24
|
+
additional_instructions = mark_safe( # noqa: S308
|
|
25
|
+
render_to_string(
|
|
26
|
+
"meta_prn/offschedule/additional_instructions.html",
|
|
27
|
+
context=dict(verbose_name=EndOfStudy._meta.verbose_name),
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
|
|
23
31
|
fieldsets = (
|
|
24
32
|
(None, {"fields": ("subject_identifier", "offschedule_datetime")}),
|
|
25
33
|
action_fieldset_tuple,
|
|
26
34
|
audit_fieldset_tuple,
|
|
27
35
|
)
|
|
28
36
|
|
|
29
|
-
def get_list_display(self, request) ->
|
|
37
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
30
38
|
list_display = super().get_list_display(request)
|
|
31
39
|
custom_fields = ("subject_identifier", "dashboard", "offschedule_datetime")
|
|
32
40
|
return custom_fields + tuple(f for f in list_display if f not in custom_fields)
|
|
33
41
|
|
|
34
|
-
def get_list_filter(self, request) ->
|
|
42
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
35
43
|
list_filter = super().get_list_filter(request)
|
|
36
44
|
custom_fields = ("offschedule_datetime",)
|
|
37
45
|
return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
|
|
38
46
|
|
|
39
|
-
def get_readonly_fields(self, request, obj=None) ->
|
|
47
|
+
def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]:
|
|
40
48
|
custom_fields = ("subject_identifier", "offschedule_datetime")
|
|
41
49
|
return tuple(set(super().get_readonly_fields(request, obj=obj) + custom_fields))
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
2
|
+
from django.template.loader import render_to_string
|
|
3
|
+
from django.utils.safestring import mark_safe
|
|
4
4
|
from django_audit_fields import audit_fieldset_tuple
|
|
5
|
-
from edc_action_item import
|
|
5
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
6
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
6
7
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
7
8
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
8
9
|
from edc_sites.admin import SiteModelAdminMixin
|
|
9
10
|
|
|
10
11
|
from ..admin_site import meta_prn_admin
|
|
11
12
|
from ..forms import OffSchedulePregnancyForm
|
|
12
|
-
from ..models import OffSchedulePregnancy
|
|
13
|
+
from ..models import EndOfStudy, OffSchedulePregnancy
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
@admin.register(OffSchedulePregnancy, site=meta_prn_admin)
|
|
@@ -21,6 +22,13 @@ class OffSchedulePregnancyAdmin(
|
|
|
21
22
|
):
|
|
22
23
|
instructions = None
|
|
23
24
|
|
|
25
|
+
additional_instructions = mark_safe( # noqa: S308
|
|
26
|
+
render_to_string(
|
|
27
|
+
"meta_prn/offschedule/additional_instructions.html",
|
|
28
|
+
context=dict(verbose_name=EndOfStudy._meta.verbose_name),
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
|
|
24
32
|
form = OffSchedulePregnancyForm
|
|
25
33
|
|
|
26
34
|
fieldsets = (
|
|
@@ -29,16 +37,17 @@ class OffSchedulePregnancyAdmin(
|
|
|
29
37
|
audit_fieldset_tuple,
|
|
30
38
|
)
|
|
31
39
|
|
|
32
|
-
def get_list_display(self, request) ->
|
|
40
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
33
41
|
list_display = super().get_list_display(request)
|
|
34
42
|
custom_fields = ("subject_identifier", "dashboard", "offschedule_datetime")
|
|
35
43
|
return custom_fields + tuple(f for f in list_display if f not in custom_fields)
|
|
36
44
|
|
|
37
|
-
def get_list_filter(self, request) ->
|
|
45
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
38
46
|
list_filter = super().get_list_filter(request)
|
|
39
47
|
custom_fields = ("offschedule_datetime",)
|
|
40
48
|
return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
|
|
41
49
|
|
|
42
|
-
def get_readonly_fields(self, request, obj=None) -> Tuple[str, ...]:
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
# def get_readonly_fields(self, request, obj=None) -> Tuple[str, ...]:
|
|
51
|
+
# custom_fields = ("subject_identifier", "offschedule_datetime")
|
|
52
|
+
# return tuple(set(super().get_readonly_fields(request, obj=obj) +
|
|
53
|
+
# custom_fields))
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
4
2
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
5
3
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -17,23 +15,24 @@ class OnScheduleAdmin(
|
|
|
17
15
|
|
|
18
16
|
fields = ("subject_identifier", "onschedule_datetime")
|
|
19
17
|
|
|
20
|
-
def get_list_display(self, request) ->
|
|
18
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
21
19
|
list_display = super().get_list_display(request)
|
|
22
20
|
custom_fields = ("subject_identifier", "dashboard", "onschedule_datetime")
|
|
23
21
|
return custom_fields + tuple(
|
|
24
|
-
f for f in list_display if f not in custom_fields
|
|
22
|
+
f for f in list_display if f not in (*custom_fields, "__str__")
|
|
25
23
|
)
|
|
26
24
|
|
|
27
|
-
def get_list_filter(self, request) ->
|
|
25
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
28
26
|
list_filter = super().get_list_filter(request)
|
|
29
27
|
custom_fields = ("onschedule_datetime",)
|
|
30
28
|
return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
|
|
31
29
|
|
|
32
|
-
def get_readonly_fields(self, request, obj=None) ->
|
|
30
|
+
def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]: # noqa: ARG002
|
|
33
31
|
return (
|
|
34
32
|
"subject_identifier",
|
|
35
33
|
"onschedule_datetime",
|
|
36
34
|
)
|
|
37
35
|
|
|
38
|
-
def get_search_fields(self, request) ->
|
|
39
|
-
|
|
36
|
+
def get_search_fields(self, request) -> tuple[str, ...]:
|
|
37
|
+
fields = super().get_search_fields(request)
|
|
38
|
+
return tuple({*fields, "subject_identifier"})
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
4
2
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
5
3
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -17,23 +15,24 @@ class OnScheduleDmReferralAdmin(
|
|
|
17
15
|
|
|
18
16
|
fields = ("subject_identifier", "onschedule_datetime")
|
|
19
17
|
|
|
20
|
-
def get_list_display(self, request) ->
|
|
18
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
21
19
|
list_display = super().get_list_display(request)
|
|
22
20
|
custom_fields = ("subject_identifier", "dashboard", "onschedule_datetime")
|
|
23
21
|
return custom_fields + tuple(
|
|
24
|
-
f for f in list_display if f not in custom_fields
|
|
22
|
+
f for f in list_display if f not in (*custom_fields, "__str__")
|
|
25
23
|
)
|
|
26
24
|
|
|
27
|
-
def get_list_filter(self, request) ->
|
|
25
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
28
26
|
list_filter = super().get_list_filter(request)
|
|
29
27
|
custom_fields = ("onschedule_datetime",)
|
|
30
28
|
return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
|
|
31
29
|
|
|
32
|
-
def get_readonly_fields(self, request, obj=None) -> Tuple[str, ...]:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
# def get_readonly_fields(self, request, obj=None) -> Tuple[str, ...]:
|
|
31
|
+
# return (
|
|
32
|
+
# "subject_identifier",
|
|
33
|
+
# "onschedule_datetime",
|
|
34
|
+
# )
|
|
37
35
|
|
|
38
|
-
def get_search_fields(self, request) ->
|
|
39
|
-
|
|
36
|
+
def get_search_fields(self, request) -> tuple[str, ...]:
|
|
37
|
+
fields = super().get_search_fields(request)
|
|
38
|
+
return tuple({*fields, "subject_identifier"})
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
from typing import Tuple
|
|
2
|
-
|
|
3
1
|
from django.contrib import admin
|
|
4
2
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
5
|
-
from edc_action_item import
|
|
3
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
4
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
6
5
|
from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
7
6
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
8
7
|
from edc_sites.admin import SiteModelAdminMixin
|
|
@@ -46,12 +45,12 @@ class PregnancyNotificationAdmin(
|
|
|
46
45
|
audit_fieldset_tuple,
|
|
47
46
|
)
|
|
48
47
|
|
|
49
|
-
radio_fields = {
|
|
48
|
+
radio_fields = { # noqa: RUF012
|
|
50
49
|
"bhcg_confirmed": admin.VERTICAL,
|
|
51
50
|
"may_contact": admin.VERTICAL,
|
|
52
51
|
}
|
|
53
52
|
|
|
54
|
-
def get_list_display(self, request) ->
|
|
53
|
+
def get_list_display(self, request) -> tuple[str, ...]:
|
|
55
54
|
list_display = super().get_list_display(request)
|
|
56
55
|
custom_fields = (
|
|
57
56
|
"subject_identifier",
|
|
@@ -61,7 +60,7 @@ class PregnancyNotificationAdmin(
|
|
|
61
60
|
)
|
|
62
61
|
return custom_fields + tuple(f for f in list_display if f not in custom_fields)
|
|
63
62
|
|
|
64
|
-
def get_list_filter(self, request) ->
|
|
63
|
+
def get_list_filter(self, request) -> tuple[str, ...]:
|
|
65
64
|
list_filter = super().get_list_filter(request)
|
|
66
65
|
custom_fields = ("edd", "may_contact")
|
|
67
66
|
return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
|
|
@@ -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_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
4
4
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
5
5
|
from edc_protocol_incident.modeladmin_mixins import ProtocolIncidentModelAdminMixin
|
|
@@ -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_model_admin.dashboard import ModelAdminSubjectDashboardMixin
|
|
4
4
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
5
5
|
from edc_sites.admin import SiteModelAdminMixin
|
meta_prn/baker_recipes.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
from clinicedc_constants import NULL_STRING, YES
|
|
1
2
|
from dateutil.relativedelta import relativedelta
|
|
2
|
-
from
|
|
3
|
-
from edc_utils import get_utcnow
|
|
3
|
+
from django.utils import timezone
|
|
4
4
|
from faker import Faker
|
|
5
5
|
from model_bakery.recipe import Recipe
|
|
6
6
|
|
|
@@ -12,17 +12,17 @@ fake = Faker()
|
|
|
12
12
|
pregnancynotification = Recipe(
|
|
13
13
|
PregnancyNotification,
|
|
14
14
|
# site=None,
|
|
15
|
-
action_identifier=
|
|
16
|
-
subject_identifier=
|
|
17
|
-
report_datetime=
|
|
15
|
+
action_identifier=NULL_STRING,
|
|
16
|
+
subject_identifier=NULL_STRING,
|
|
17
|
+
report_datetime=timezone.now(),
|
|
18
18
|
bhcg_confirmed=YES,
|
|
19
|
-
unconfirmed_details=
|
|
20
|
-
edd=
|
|
19
|
+
unconfirmed_details=NULL_STRING,
|
|
20
|
+
edd=timezone.now() + relativedelta(months=6),
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
dmreferral = Recipe(
|
|
24
24
|
DmReferral,
|
|
25
|
-
action_identifier=
|
|
26
|
-
subject_identifier=
|
|
27
|
-
report_datetime=
|
|
25
|
+
action_identifier=NULL_STRING,
|
|
26
|
+
subject_identifier=NULL_STRING,
|
|
27
|
+
report_datetime=timezone.now(),
|
|
28
28
|
)
|
meta_prn/choices.py
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
from
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE, OTHER, PATIENT, PREGNANCY, UNKNOWN
|
|
2
2
|
|
|
3
3
|
from .constants import CLINICIAN, INVESTIGATOR, REFERRAL, SAE
|
|
4
4
|
|
|
5
|
+
# from edc_transfer.constants import TRANSFERRED
|
|
6
|
+
|
|
7
|
+
|
|
5
8
|
CLINICAL_WITHDRAWAL_REASONS = (
|
|
6
9
|
("kidney_disease", "Development of chronic kidney disease"),
|
|
7
10
|
("liver_disease", "Development of chronic liver disease"),
|
|
@@ -45,30 +48,30 @@ LOSS_CHOICES = (
|
|
|
45
48
|
)
|
|
46
49
|
|
|
47
50
|
PROTOCOL_VIOLATION = (
|
|
48
|
-
("failure_to_obtain_informed_consent", "Failure to obtain informed
|
|
51
|
+
("failure_to_obtain_informed_consent", "Failure to obtain informed consent"),
|
|
49
52
|
("enrollment_of_ineligible_patient", "Enrollment of ineligible patient"),
|
|
50
53
|
(
|
|
51
54
|
"screening_procedure not done",
|
|
52
|
-
"Screening procedure required by
|
|
55
|
+
"Screening procedure required by protocol not done",
|
|
53
56
|
),
|
|
54
57
|
(
|
|
55
58
|
"screening_or_on-study_procedure",
|
|
56
|
-
"Screening or on-study procedure/lab
|
|
59
|
+
"Screening or on-study procedure/lab work required not done",
|
|
57
60
|
),
|
|
58
61
|
(
|
|
59
62
|
"incorrect_research_treatment",
|
|
60
|
-
"Incorrect research treatment given to
|
|
63
|
+
"Incorrect research treatment given to patient",
|
|
61
64
|
),
|
|
62
65
|
(
|
|
63
66
|
"procedure_not_completed",
|
|
64
|
-
"On-study procedure required by protocol not
|
|
67
|
+
"On-study procedure required by protocol not completed",
|
|
65
68
|
),
|
|
66
69
|
("visit_non-compliance", "Visit non-compliance"),
|
|
67
70
|
("medication_stopped_early", "Medication stopped early"),
|
|
68
71
|
("medication_noncompliance", "Medication_noncompliance"),
|
|
69
72
|
(
|
|
70
73
|
"national_regulations_not_met",
|
|
71
|
-
"Standard WPD, ICH-GCP, local/national
|
|
74
|
+
"Standard WPD, ICH-GCP, local/national regulations not met",
|
|
72
75
|
),
|
|
73
76
|
(OTHER, "Other"),
|
|
74
77
|
(NOT_APPLICABLE, "Not applicable"),
|
|
@@ -96,6 +99,7 @@ WITHDRAWAL_STUDY_MEDICATION_REASONS = (
|
|
|
96
99
|
),
|
|
97
100
|
(INVESTIGATOR, " Investigator decision"),
|
|
98
101
|
(REFERRAL, "Referral to Diabetes clinic"),
|
|
102
|
+
# (TRANSFERRED, "Patient decision to transfer out of catchment area"),
|
|
99
103
|
(PATIENT, "Patient decision"),
|
|
100
104
|
(OTHER, "Other reason (specify below)"),
|
|
101
105
|
)
|
meta_prn/constants.py
CHANGED