meta-edc 0.3.53__py3-none-any.whl → 1.0.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.
Files changed (54) hide show
  1. meta_ae/action_items.py +9 -4
  2. meta_ae/admin/ae_initial_admin.py +5 -2
  3. meta_ae/admin/modeladmin_mixins.py +5 -3
  4. meta_ae/templatetags/meta_ae_extras.py +1 -3
  5. meta_consent/action_items.py +1 -0
  6. meta_consent/migrations/0030_auto_20250120_2114.py +40 -0
  7. meta_consent/migrations/0031_alter_historicalsubjectconsent_guardian_name_and_more.py +124 -0
  8. meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/sidebar.html +1 -1
  9. meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/top_bar.html +1 -1
  10. meta_dashboard/templates/meta_dashboard/subject/dashboard.html +14 -0
  11. meta_dashboard/templatetags/meta_dashboard_extras.py +6 -11
  12. meta_dashboard/views/subject/dashboard/dashboard_view.py +6 -5
  13. meta_edc/admin.py +2 -3
  14. meta_edc/settings/debug.py +2 -2
  15. meta_edc/settings/defaults.py +1 -3
  16. meta_edc/templates/meta_edc/{bootstrap3/base.html → base.html} +1 -1
  17. meta_edc/templates/meta_edc/{bootstrap3/home.html → home.html} +1 -1
  18. meta_edc/views/home_view.py +1 -2
  19. {meta_edc-0.3.53.dist-info → meta_edc-1.0.0.dist-info}/METADATA +2 -2
  20. {meta_edc-0.3.53.dist-info → meta_edc-1.0.0.dist-info}/RECORD +53 -48
  21. meta_prn/admin/end_of_study_admin.py +12 -6
  22. meta_prn/admin/offschedule_admin.py +8 -6
  23. meta_prn/admin/offschedule_dm_referral_admin.py +8 -6
  24. meta_prn/admin/offschedule_postnatal_admin.py +10 -1
  25. meta_prn/admin/offschedule_pregnancy_admin.py +10 -1
  26. meta_prn/form_validators/end_of_study.py +10 -4
  27. meta_prn/templates/meta_prn/eos/additional_instructions.html +3 -0
  28. meta_prn/templates/meta_prn/offschedule/additional_instructions.html +2 -0
  29. meta_reports/admin/dbviews/imp_substitutions_admin.py +1 -1
  30. meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +1 -1
  31. meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +1 -1
  32. meta_reports/admin/last_imp_refill_admin.py +5 -19
  33. meta_reports/templates/meta_reports/last_imp_refill/changelist_note.html +13 -0
  34. meta_screening/admin/subject_screening_admin.py +13 -3
  35. meta_screening/eligibility/eligibility.py +14 -7
  36. meta_screening/model_mixins/part_one_fields_model_mixin.py +15 -14
  37. meta_subject/admin/birth_outcome_admin.py +1 -1
  38. meta_subject/admin/delivery_admin.py +1 -1
  39. meta_subject/form_validators/dm_endpoint_form_validator.py +3 -1
  40. meta_subject/models/diabetes/dm_followup.py +3 -3
  41. tests/test_settings.py +0 -1
  42. meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard.html +0 -14
  43. /meta_ae/templates/meta_ae/{bootstrap3/ae_initial_description.html → aeinitial_description.html} +0 -0
  44. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/add_consent_button.html +0 -0
  45. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/dashboard_button.html +0 -0
  46. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/eligibility_button.html +0 -0
  47. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/refusal_button.html +0 -0
  48. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/screening_button.html +0 -0
  49. /meta_dashboard/templates/meta_dashboard/{bootstrap3/screening → screening}/listboard.html +0 -0
  50. /meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/listboard.html +0 -0
  51. {meta_edc-0.3.53.dist-info → meta_edc-1.0.0.dist-info}/AUTHORS +0 -0
  52. {meta_edc-0.3.53.dist-info → meta_edc-1.0.0.dist-info}/LICENSE +0 -0
  53. {meta_edc-0.3.53.dist-info → meta_edc-1.0.0.dist-info}/WHEEL +0 -0
  54. {meta_edc-0.3.53.dist-info → meta_edc-1.0.0.dist-info}/top_level.txt +0 -0
meta_ae/action_items.py CHANGED
@@ -1,6 +1,8 @@
1
1
  from django.apps import apps as django_apps
2
2
  from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
3
+ from django.utils.html import format_html
3
4
  from django.utils.safestring import mark_safe
5
+ from django.utils.translation import gettext as _
4
6
  from edc_action_item import ActionWithNotification, site_action_items
5
7
  from edc_adverse_event.constants import (
6
8
  AE_FOLLOWUP_ACTION,
@@ -39,10 +41,13 @@ class AeFollowupAction(ActionWithNotification):
39
41
  create_by_user = False
40
42
  show_link_to_changelist = True
41
43
  admin_site_name = "meta_ae_admin"
42
- instructions = mark_safe( # nosec B308, B703
43
- "Upon submission the TMG group will be notified "
44
- f'by email at <a href="mailto:{get_email_contacts("tmg") or "#"}">'
45
- f'{get_email_contacts("tmg") or "unknown"}</a>'
44
+ instructions = format_html(
45
+ _(
46
+ "Upon submission the TMG group will be notified "
47
+ 'by email at <a href="mailto:{email1}">{email2}</a>'
48
+ ),
49
+ email1=get_email_contacts("tmg") or "#",
50
+ email2=get_email_contacts("tmg") or "unknown",
46
51
  )
47
52
  priority = HIGH_PRIORITY
48
53
 
@@ -1,5 +1,6 @@
1
1
  from django.contrib import admin
2
2
  from django.utils.html import format_html
3
+ from django.utils.translation import gettext as _
3
4
  from edc_adverse_event.modeladmin_mixins import AeInitialModelAdminMixin
4
5
  from edc_model_admin.history import SimpleHistoryAdmin
5
6
  from edc_notification.utils import get_email_contacts
@@ -15,8 +16,10 @@ class AeInitialAdmin(SiteModelAdminMixin, AeInitialModelAdminMixin, SimpleHistor
15
16
  form = AeInitialForm
16
17
  email_contact = get_email_contacts("ae_reports")
17
18
  additional_instructions = format_html(
18
- "Complete the initial AE report and forward to the TMG. "
19
- 'Email to <a href="mailto:{}">{}</a>',
19
+ _(
20
+ "Complete the initial AE report and forward to the TMG. "
21
+ 'Email to <a href="mailto:{}">{}</a>'
22
+ ),
20
23
  email_contact,
21
24
  email_contact,
22
25
  )
@@ -6,6 +6,7 @@ from django.template.loader import render_to_string
6
6
  from django.urls.base import reverse
7
7
  from django.utils.html import format_html
8
8
  from django.utils.safestring import mark_safe
9
+ from django.utils.translation import gettext as _
9
10
  from django_audit_fields.admin import audit_fieldset_tuple
10
11
  from edc_action_item import action_fieldset_tuple
11
12
  from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
@@ -96,8 +97,8 @@ class AeReviewModelAdminMixin(
96
97
  if follow_up_reports:
97
98
  return format_html(
98
99
  "{}. See {}",
99
- mark_safe(obj.get_outcome_display()), # nosec B703, B308
100
- mark_safe(follow_up_reports), # nosec B703, B308
100
+ mark_safe(_(obj.get_outcome_display())), # nosec B703, B308
101
+ mark_safe(_(follow_up_reports)), # nosec B703, B308
101
102
  )
102
103
  return obj.get_outcome_display()
103
104
 
@@ -111,8 +112,9 @@ class AeReviewModelAdminMixin(
111
112
  namespace = self.admin_site.name
112
113
  url = reverse(f"{namespace}:{url_name}_changelist")
113
114
  return format_html(
114
- '<a data-toggle="tooltip" title="go to ae initial report" '
115
+ '<a data-toggle="tooltip" title="{title}" '
115
116
  'href="{url}?q={action_identifier}">{identifier}</a>',
117
+ title=_("go to ae initial report"),
116
118
  url=mark_safe(url), # nosec B703, B308
117
119
  action_identifier=mark_safe( # nosec B703, B308
118
120
  obj.ae_initial.action_identifier
@@ -6,14 +6,12 @@ from django.conf import settings
6
6
  from django.utils.safestring import mark_safe
7
7
  from edc_adverse_event.utils import get_adverse_event_app_label
8
8
  from edc_constants.constants import OTHER, YES
9
- from edc_dashboard.utils import get_bootstrap_version
10
9
 
11
10
  register = template.Library()
12
11
 
13
12
 
14
13
  format_ae_description_template_name = (
15
- f"{get_adverse_event_app_label()}/bootstrap{get_bootstrap_version()}/"
16
- f"ae_initial_description.html"
14
+ f"{get_adverse_event_app_label()}/ae_initial_description.html"
17
15
  )
18
16
 
19
17
 
@@ -31,6 +31,7 @@ class ConsentV1ExtensionAction(Action):
31
31
  show_on_dashboard = True
32
32
  show_link_to_changelist = True
33
33
  admin_site_name = "meta_consent_admin"
34
+ show_link_to_add = True
34
35
  create_by_user = True
35
36
  singleton = True
36
37
  instructions = "Participant must complete as soon as able. "
@@ -0,0 +1,40 @@
1
+ # Generated by Django 5.1.5 on 2025-01-20 18:14
2
+
3
+ from django.core.exceptions import ObjectDoesNotExist
4
+ from django.db import IntegrityError, migrations, transaction
5
+ from edc_action_item.models import ActionItem
6
+ from edc_registration.models import RegisteredSubject
7
+ from tqdm import tqdm
8
+
9
+ from meta_consent.action_items import ConsentV1ExtensionAction
10
+
11
+
12
+ def update_missing_action_items(apps, schema_editor):
13
+ total = RegisteredSubject.objects.all().count()
14
+ for obj in tqdm(RegisteredSubject.objects.all(), total=total):
15
+ try:
16
+ ActionItem.objects.get(
17
+ subject_identifier=obj.subject_identifier, action_type__name="consent_v1_ext"
18
+ )
19
+ except ObjectDoesNotExist:
20
+ try:
21
+ with transaction.atomic():
22
+ ConsentV1ExtensionAction(
23
+ subject_identifier=obj.subject_identifier,
24
+ skip_get_current_site=True,
25
+ site_id=obj.site_id,
26
+ )
27
+ except IntegrityError:
28
+ print(f"ERROR: Unable to create for {obj.subject_identifier}.")
29
+
30
+
31
+ class Migration(migrations.Migration):
32
+
33
+ dependencies = [
34
+ (
35
+ "meta_consent",
36
+ "0029_alter_historicalsubjectconsentv1ext_agrees_to_extension_and_more",
37
+ ),
38
+ ]
39
+
40
+ operations = []
@@ -0,0 +1,124 @@
1
+ # Generated by Django 5.1.5 on 2025-01-22 03:27
2
+
3
+ import django_crypto_fields.fields.encrypted_char_field
4
+ import django_crypto_fields.fields.lastname_field
5
+ import edc_consent.validators
6
+ from django.db import migrations, models
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+
11
+ dependencies = [
12
+ ("meta_consent", "0030_auto_20250120_2114"),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.AlterField(
17
+ model_name="historicalsubjectconsent",
18
+ name="guardian_name",
19
+ field=django_crypto_fields.fields.encrypted_char_field.EncryptedCharField(
20
+ blank=True,
21
+ help_text="Required only if participant is a minor.<BR>Format is &#x27;LASTNAME, FIRSTNAME&#x27;. All uppercase separated by a comma. (Encryption: RSA local)",
22
+ max_length=71,
23
+ null=True,
24
+ validators=[edc_consent.validators.FullNameValidator()],
25
+ verbose_name="Guardian's last and first name",
26
+ ),
27
+ ),
28
+ migrations.AlterField(
29
+ model_name="historicalsubjectconsent",
30
+ name="is_incarcerated",
31
+ field=models.CharField(
32
+ choices=[("Yes", "Yes"), ("No", "No")],
33
+ help_text="If 'Yes' STOP participant cannot be consented.",
34
+ max_length=3,
35
+ null=True,
36
+ validators=[edc_consent.validators.eligible_if_no],
37
+ verbose_name="Is the participant under involuntary incarceration?",
38
+ ),
39
+ ),
40
+ migrations.AlterField(
41
+ model_name="historicalsubjectconsent",
42
+ name="witness_name",
43
+ field=django_crypto_fields.fields.lastname_field.LastnameField(
44
+ blank=True,
45
+ help_text="Required only if participant is illiterate.<BR>Format is &#x27;LASTNAME, FIRSTNAME&#x27;. All uppercase separated by a comma. (Encryption: RSA local)",
46
+ max_length=71,
47
+ null=True,
48
+ validators=[edc_consent.validators.FullNameValidator()],
49
+ verbose_name="Witness's last and first name",
50
+ ),
51
+ ),
52
+ migrations.AlterField(
53
+ model_name="historicalsubjectconsentv1",
54
+ name="guardian_name",
55
+ field=django_crypto_fields.fields.encrypted_char_field.EncryptedCharField(
56
+ blank=True,
57
+ help_text="Required only if participant is a minor.<BR>Format is &#x27;LASTNAME, FIRSTNAME&#x27;. All uppercase separated by a comma. (Encryption: RSA local)",
58
+ max_length=71,
59
+ null=True,
60
+ validators=[edc_consent.validators.FullNameValidator()],
61
+ verbose_name="Guardian's last and first name",
62
+ ),
63
+ ),
64
+ migrations.AlterField(
65
+ model_name="historicalsubjectconsentv1",
66
+ name="is_incarcerated",
67
+ field=models.CharField(
68
+ choices=[("Yes", "Yes"), ("No", "No")],
69
+ help_text="If 'Yes' STOP participant cannot be consented.",
70
+ max_length=3,
71
+ null=True,
72
+ validators=[edc_consent.validators.eligible_if_no],
73
+ verbose_name="Is the participant under involuntary incarceration?",
74
+ ),
75
+ ),
76
+ migrations.AlterField(
77
+ model_name="historicalsubjectconsentv1",
78
+ name="witness_name",
79
+ field=django_crypto_fields.fields.lastname_field.LastnameField(
80
+ blank=True,
81
+ help_text="Required only if participant is illiterate.<BR>Format is &#x27;LASTNAME, FIRSTNAME&#x27;. All uppercase separated by a comma. (Encryption: RSA local)",
82
+ max_length=71,
83
+ null=True,
84
+ validators=[edc_consent.validators.FullNameValidator()],
85
+ verbose_name="Witness's last and first name",
86
+ ),
87
+ ),
88
+ migrations.AlterField(
89
+ model_name="subjectconsent",
90
+ name="guardian_name",
91
+ field=django_crypto_fields.fields.encrypted_char_field.EncryptedCharField(
92
+ blank=True,
93
+ help_text="Required only if participant is a minor.<BR>Format is &#x27;LASTNAME, FIRSTNAME&#x27;. All uppercase separated by a comma. (Encryption: RSA local)",
94
+ max_length=71,
95
+ null=True,
96
+ validators=[edc_consent.validators.FullNameValidator()],
97
+ verbose_name="Guardian's last and first name",
98
+ ),
99
+ ),
100
+ migrations.AlterField(
101
+ model_name="subjectconsent",
102
+ name="is_incarcerated",
103
+ field=models.CharField(
104
+ choices=[("Yes", "Yes"), ("No", "No")],
105
+ help_text="If 'Yes' STOP participant cannot be consented.",
106
+ max_length=3,
107
+ null=True,
108
+ validators=[edc_consent.validators.eligible_if_no],
109
+ verbose_name="Is the participant under involuntary incarceration?",
110
+ ),
111
+ ),
112
+ migrations.AlterField(
113
+ model_name="subjectconsent",
114
+ name="witness_name",
115
+ field=django_crypto_fields.fields.lastname_field.LastnameField(
116
+ blank=True,
117
+ help_text="Required only if participant is illiterate.<BR>Format is &#x27;LASTNAME, FIRSTNAME&#x27;. All uppercase separated by a comma. (Encryption: RSA local)",
118
+ max_length=71,
119
+ null=True,
120
+ validators=[edc_consent.validators.FullNameValidator()],
121
+ verbose_name="Witness's last and first name",
122
+ ),
123
+ ),
124
+ ]
@@ -1,4 +1,4 @@
1
- {% extends 'edc_subject_dashboard/bootstrap3/dashboard/sidebar.html' %}
1
+ {% extends 'edc_subject_dashboard/dashboard/sidebar.html' %}
2
2
  {% load edc_subject_dashboard_extras %}
3
3
 
4
4
  {% block consents %}
@@ -1,3 +1,3 @@
1
- {% extends 'edc_subject_dashboard/bootstrap3/dashboard/topbar.html' %}
1
+ {% extends 'edc_subject_dashboard/dashboard/topbar.html' %}
2
2
 
3
3
  {% block close_url %}href="{% url subject_listboard_url|default:'subject_listboard_url_cannot_be_none' %}?q={{ subject_identifier }}"{% endblock close_url %}
@@ -0,0 +1,14 @@
1
+ {% extends 'edc_subject_dashboard/dashboard.html' %}
2
+
3
+ {% load static %}
4
+
5
+ {% block locator_information %}{% endblock locator_information %}
6
+
7
+ {% block top_bar %}
8
+
9
+ {% include "meta_dashboard/subject/dashboard/top_bar.html" %}
10
+
11
+ {% endblock top_bar %}
12
+
13
+
14
+ {% block side_bar %}{% include 'meta_dashboard/subject/dashboard/sidebar.html' %}{% endblock side_bar %}
@@ -6,7 +6,6 @@ from bs4 import BeautifulSoup
6
6
  from django import template
7
7
  from edc_constants.constants import TBD
8
8
  from edc_dashboard.url_names import url_names
9
- from edc_dashboard.utils import get_bootstrap_version
10
9
 
11
10
  from meta_consent.models import SubjectConsent
12
11
  from meta_dashboard.view_utils import (
@@ -29,9 +28,7 @@ if TYPE_CHECKING:
29
28
  register = template.Library()
30
29
 
31
30
 
32
- @register.inclusion_tag(
33
- f"meta_dashboard/bootstrap{get_bootstrap_version()}/" f"buttons/eligibility_button.html"
34
- )
31
+ @register.inclusion_tag("meta_dashboard/buttons/eligibility_button.html")
35
32
  def eligibility_button(subject_screening: SubjectScreening):
36
33
  comment = []
37
34
  tooltip = None
@@ -52,7 +49,7 @@ def eligibility_button(subject_screening: SubjectScreening):
52
49
 
53
50
 
54
51
  @register.inclusion_tag(
55
- f"meta_dashboard/bootstrap{get_bootstrap_version()}/buttons/add_consent_button.html",
52
+ "meta_dashboard/buttons/add_consent_button.html",
56
53
  takes_context=True,
57
54
  )
58
55
  def render_consent_button(context, subject_screening: SubjectScreening):
@@ -77,9 +74,7 @@ def refusal_button(context, subject_refusal):
77
74
  )
78
75
 
79
76
 
80
- @register.inclusion_tag(
81
- f"edc_listboard/bootstrap{get_bootstrap_version()}/buttons/dashboard_button.html"
82
- )
77
+ @register.inclusion_tag("edc_listboard/buttons/dashboard_button.html")
83
78
  def render_dashboard_button(subject_consent: SubjectConsent):
84
79
  subject_dashboard_url = url_names.get("subject_dashboard_url")
85
80
  return dict(
@@ -89,7 +84,7 @@ def render_dashboard_button(subject_consent: SubjectConsent):
89
84
 
90
85
 
91
86
  @register.inclusion_tag(
92
- f"edc_subject_dashboard/bootstrap{get_bootstrap_version()}/buttons/forms_button.html",
87
+ "edc_subject_dashboard/buttons/forms_button.html",
93
88
  takes_context=True,
94
89
  )
95
90
  def render_screening_part_one_button(context, subject_screening: ScreeningPartOne) -> dict:
@@ -102,7 +97,7 @@ def render_screening_part_one_button(context, subject_screening: ScreeningPartOn
102
97
 
103
98
 
104
99
  @register.inclusion_tag(
105
- f"edc_subject_dashboard/bootstrap{get_bootstrap_version()}/buttons/forms_button.html",
100
+ "edc_subject_dashboard/buttons/forms_button.html",
106
101
  takes_context=True,
107
102
  )
108
103
  def render_screening_part_two_button(context, subject_screening: ScreeningPartTwo) -> dict:
@@ -115,7 +110,7 @@ def render_screening_part_two_button(context, subject_screening: ScreeningPartTw
115
110
 
116
111
 
117
112
  @register.inclusion_tag(
118
- f"edc_subject_dashboard/bootstrap{get_bootstrap_version()}/buttons/forms_button.html",
113
+ "edc_subject_dashboard/buttons/forms_button.html",
119
114
  takes_context=True,
120
115
  )
121
116
  def render_screening_part_three_button(context, subject_screening: ScreeningPartThree) -> dict:
@@ -5,6 +5,7 @@ from django.core.checks import messages
5
5
  from django.core.exceptions import ObjectDoesNotExist
6
6
  from django.urls import reverse
7
7
  from django.utils.html import format_html
8
+ from django.utils.safestring import mark_safe
8
9
  from django.utils.translation import gettext_lazy as _
9
10
  from edc_subject_dashboard.views import SubjectDashboardView
10
11
 
@@ -28,11 +29,11 @@ class DashboardView(SubjectDashboardView):
28
29
  else:
29
30
  url = reverse("meta_reports_admin:meta_reports_glucosesummary_changelist")
30
31
  url = f"{url}?q={self.subject_identifier}"
31
- message = _(
32
- format_html(
33
- f"Subject has reached the protocol endpoint. "
34
- f'See <A href="{url}">{GlucoseSummary._meta.verbose_name}</A>'
35
- )
32
+ message = format_html(
33
+ '{text} <A href="{url}">{verbose_name}</A>',
34
+ text=_("Subject has reached the protocol endpoint. See "),
35
+ url=mark_safe(url), # nosec B703, B308
36
+ verbose_name=GlucoseSummary._meta.verbose_name,
36
37
  )
37
38
  self.message_user(message, level=messages.WARNING)
38
39
  return context
meta_edc/admin.py CHANGED
@@ -1,13 +1,12 @@
1
1
  from django.contrib.admin import AdminSite as DjangoAdminSite
2
- from edc_dashboard.utils import get_bootstrap_version
3
2
 
4
3
  from .apps import AppConfig
5
4
 
6
5
 
7
6
  class AdminSite(DjangoAdminSite):
8
7
  app_index_template = "edc_model_admin/admin/app_index.html"
9
- login_template = f"edc_auth/bootstrap{get_bootstrap_version()}/login.html"
10
- logout_template = f"edc_auth/bootstrap{get_bootstrap_version()}/login.html"
8
+ login_template = "edc_auth/login.html"
9
+ logout_template = "edc_auth/login.html"
11
10
  enable_nav_sidebar = False # DJ 3.1
12
11
  final_catch_all_view = True # DJ 3.2
13
12
  site_title = AppConfig.verbose_name
@@ -7,11 +7,11 @@ from .defaults import * # noqa
7
7
  print(f"Settings file {__file__}")
8
8
 
9
9
  # TZ Sites:
10
- # SITE_ID = SiteID(default=20) # Amana
10
+ SITE_ID = SiteID(default=20) # Amana
11
11
  # SITE_ID = SiteID(default=10) # Hindu Mandal
12
12
  # SITE_ID = SiteID(default=40) # Mwananyamala
13
13
  # SITE_ID = SiteID(default=50) # Mbagala
14
- SITE_ID = SiteID(default=60) # Mnazi-Moja
14
+ # SITE_ID = SiteID(default=60) # Mnazi-Moja
15
15
  # SITE_ID = SiteID(default=30) # Temeke
16
16
  INDEX_PAGE = "http://localhost:8000"
17
17
  EDC_SITES_UAT_DOMAIN = False
@@ -19,7 +19,6 @@ env = environ.Env(
19
19
  DJANGO_AUTO_CREATE_KEYS=(bool, False),
20
20
  DJANGO_CSRF_COOKIE_SECURE=(bool, True),
21
21
  DJANGO_DEBUG=(bool, False),
22
- DJANGO_EDC_BOOTSTRAP=(int, 3),
23
22
  DJANGO_EMAIL_ENABLED=(bool, False),
24
23
  DJANGO_EMAIL_USE_TLS=(bool, True),
25
24
  DJANGO_LIVE_SYSTEM=(bool, False),
@@ -375,7 +374,6 @@ EDC_DASHBOARD_APP_LABEL = "meta_dashboard"
375
374
  EDC_NAVBAR_DEFAULT = env("EDC_NAVBAR_DEFAULT")
376
375
 
377
376
  # dashboards
378
- EDC_BOOTSTRAP = env("DJANGO_EDC_BOOTSTRAP")
379
377
  DASHBOARD_URL_NAMES = env.dict("DJANGO_DASHBOARD_URL_NAMES")
380
378
  DASHBOARD_BASE_TEMPLATES = env.dict("DJANGO_DASHBOARD_BASE_TEMPLATES")
381
379
  LAB_DASHBOARD_BASE_TEMPLATES = env.dict("DJANGO_LAB_DASHBOARD_BASE_TEMPLATES")
@@ -446,7 +444,7 @@ MULTISITE_REGISTER_POST_MIGRATE_SYNC_ALIAS = False
446
444
  # and that redis server is running
447
445
  DEFENDER_REDIS_NAME = "default"
448
446
  DEFENDER_LOCK_OUT_BY_IP_AND_USERNAME = True
449
- DEFENDER_LOCKOUT_TEMPLATE = "edc_auth/bootstrap3/login.html"
447
+ DEFENDER_LOCKOUT_TEMPLATE = "edc_auth/login.html"
450
448
  DEFENDER_LOGIN_FAILURE_LIMIT = 5
451
449
 
452
450
  # edc_crf
@@ -1,2 +1,2 @@
1
- {% extends 'edc_dashboard/bootstrap3/base.html' %}
1
+ {% extends 'edc_dashboard/base.html' %}
2
2
  {% block footer %}{{ block.super }} {% comment %}META 2/3 base.html template{% endcomment %}{% endblock footer %}
@@ -1,4 +1,4 @@
1
- {% extends 'meta_edc/bootstrap3/base.html' %}
1
+ {% extends 'meta_edc/base.html' %}
2
2
  {% load static edc_dashboard_extras %}
3
3
 
4
4
  {% block main %}
@@ -2,7 +2,6 @@ from typing import Any
2
2
 
3
3
  from django.conf import settings
4
4
  from django.views.generic import TemplateView
5
- from edc_dashboard.utils import get_bootstrap_version
6
5
  from edc_dashboard.view_mixins import EdcViewMixin
7
6
  from edc_navbar import NavbarViewMixin
8
7
  from edc_randomization.site_randomizers import site_randomizers
@@ -11,7 +10,7 @@ from meta_edc.meta_version import get_meta_version
11
10
 
12
11
 
13
12
  class HomeView(EdcViewMixin, NavbarViewMixin, TemplateView):
14
- template_name = f"meta_edc/bootstrap{get_bootstrap_version()}/home.html"
13
+ template_name = "meta_edc/home.html"
15
14
  navbar_name = settings.APP_NAME
16
15
  navbar_selected_item = "home"
17
16
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: meta-edc
3
- Version: 0.3.53
3
+ Version: 1.0.0
4
4
  Summary: META Trial EDC (http://www.isrctn.com/ISRCTN76157257)
5
5
  Home-page: https://github.com/meta-trial/meta-edc
6
6
  Author: Erik van Widenfelt
@@ -693,7 +693,7 @@ Requires-Python: >=3.12
693
693
  Description-Content-Type: text/x-rst
694
694
  License-File: LICENSE
695
695
  License-File: AUTHORS
696
- Requires-Dist: edc==0.6.26
696
+ Requires-Dist: edc==1.0.0
697
697
  Requires-Dist: edc-microscopy
698
698
  Requires-Dist: beautifulsoup4
699
699
  Requires-Dist: celery[redis]