clinicedc 2.0.33__py3-none-any.whl → 2.0.35__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of clinicedc might be problematic. Click here for more details.
- {clinicedc-2.0.33.dist-info → clinicedc-2.0.35.dist-info}/METADATA +1 -1
- {clinicedc-2.0.33.dist-info → clinicedc-2.0.35.dist-info}/RECORD +155 -165
- {clinicedc-2.0.33.dist-info → clinicedc-2.0.35.dist-info}/WHEEL +1 -1
- edc_action_item/templatetags/action_item_extras.py +1 -1
- edc_adverse_event/form_validator_mixins/death_report_form_validator.py +1 -1
- edc_adverse_event/form_validator_mixins/requires_death_report_form_validator_mixin.py +5 -3
- edc_adverse_event/form_validators/death_report_tmg.py +2 -2
- edc_adverse_event/modeladmin_mixins/ae_tmg_admin_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/utils.py +1 -1
- edc_adverse_event/utils.py +1 -1
- edc_appointment/admin/appointment_admin.py +24 -24
- edc_appointment/admin/list_filters.py +5 -5
- edc_appointment/appointment_reason_updater.py +6 -5
- edc_appointment/appointment_status_updater.py +2 -2
- edc_appointment/context_processors.py +1 -2
- edc_appointment/creators/appointment_creator.py +9 -8
- edc_appointment/creators/unscheduled_appointment_creator.py +31 -24
- edc_appointment/creators/utils.py +35 -37
- edc_appointment/exceptions.py +3 -3
- edc_appointment/form_runners.py +2 -2
- edc_appointment/form_validator_mixins/next_appointment_crf_form_validator_mixin.py +5 -5
- edc_appointment/form_validator_mixins/window_period_form_validator_mixin.py +7 -7
- edc_appointment/form_validators/appointment_form_validator.py +16 -23
- edc_appointment/management/commands/close_appointments.py +3 -3
- edc_appointment/management/commands/reset_visit_code_sequences.py +1 -1
- edc_appointment/management/commands/update_appointment_status.py +2 -2
- edc_appointment/management/commands/update_skipped_appointments.py +7 -7
- edc_appointment/managers.py +6 -7
- edc_appointment/model_mixins/appointment_model_mixin.py +3 -4
- edc_appointment/modeladmin_mixins/next_appointment_crf_modeladmin_mixin.py +2 -2
- edc_appointment/modelform_mixins/next_appointment_crf_modelform_mixins.py +25 -24
- edc_appointment/models/signals.py +1 -1
- edc_appointment/skip_appointments.py +10 -29
- edc_appointment/utils.py +43 -47
- edc_appointment/view_mixins/appointment_view_mixin.py +11 -13
- edc_appointment/views/unscheduled_appointment_view.py +5 -6
- edc_consent/consent_definition.py +5 -13
- edc_consent/consent_definition_extension.py +0 -2
- edc_consent/form_validators/consent_definition_form_validator_mixin.py +26 -30
- edc_consent/form_validators/subject_consent_form_validator.py +3 -3
- edc_consent/modelform_mixins/consent_modelform_mixin/consent_modelform_validation_mixin.py +1 -1
- edc_consent/modelform_mixins/requires_consent_modelform_mixin.py +4 -5
- edc_consent/site_consents.py +13 -14
- edc_crf/crf_form_validator.py +13 -19
- edc_crf/crf_form_validator_mixins.py +2 -17
- edc_data_manager/admin/actions.py +1 -1
- edc_data_manager/admin/data_query_admin.py +1 -1
- edc_dx/form_validators/result_form_validator_mixin.py +1 -1
- edc_dx_review/medical_date.py +1 -1
- edc_egfr/egfr.py +4 -8
- edc_egfr/form_validator_mixins/egfr_form_validator_mixins.py +2 -2
- edc_facility/facility.py +7 -11
- edc_facility/holidays.py +3 -3
- edc_facility/models/holiday.py +1 -1
- edc_form_runners/form_runner.py +15 -16
- edc_form_validators/base_form_validator.py +5 -1
- edc_form_validators/date_range_validator.py +49 -61
- edc_form_validators/date_validator.py +1 -1
- edc_form_validators/extra_mixins/study_day_form_validator.py +1 -1
- edc_lab/form_validators/crf_requisition_form_validator_mixin.py +21 -15
- edc_lab/form_validators/requisition_form_validator_mixin.py +3 -3
- edc_lab_results/form_validator_mixins/blood_results_form_validator_mixin.py +1 -1
- edc_ltfu/modelform_mixins.py +1 -1
- edc_metadata/metadata/metadata.py +20 -7
- edc_metadata/metadata_rules/logic.py +5 -4
- edc_metadata/metadata_rules/predicate.py +22 -24
- edc_model_form/mixins/report_datetime_modelform_mixin.py +1 -5
- edc_offstudy/model_mixins/offstudy_model_mixin.py +1 -1
- edc_offstudy/modelform_mixins/crf/offstudy_crf_modelform_mixin.py +2 -2
- edc_offstudy/utils.py +4 -4
- edc_pdf_reports/crf_pdf_report.py +2 -1
- edc_pdutils/helper.py +3 -3
- edc_pdutils/utils/convert_dates_from_model.py +4 -3
- edc_pharmacy/admin/actions/confirm_stock.py +3 -3
- edc_pharmacy/admin/actions/delete_items_for_stock_request.py +4 -3
- edc_pharmacy/admin/actions/delete_order_items.py +7 -3
- edc_pharmacy/admin/actions/delete_receive_items.py +5 -3
- edc_pharmacy/admin/actions/process_repack_request.py +7 -11
- edc_pharmacy/admin/autocomplete_admin.py +1 -1
- edc_pharmacy/admin/list_filters.py +48 -46
- edc_pharmacy/admin/medication/assignment_admin.py +4 -4
- edc_pharmacy/admin/medication/dosage_guideline_admin.py +3 -3
- edc_pharmacy/admin/medication/formulation_admin.py +5 -5
- edc_pharmacy/admin/medication/medication_admin.py +3 -3
- edc_pharmacy/admin/prescription/rx_admin.py +2 -2
- edc_pharmacy/admin/prescription/rx_refill_admin.py +11 -17
- edc_pharmacy/admin/remove_fields_for_blinded_users.py +1 -1
- edc_pharmacy/admin/reports/stock_availability_admin.py +12 -8
- edc_pharmacy/admin/stock/allocation_admin.py +13 -17
- edc_pharmacy/admin/stock/allocation_proxy_admin.py +1 -2
- edc_pharmacy/admin/stock/confirmation_admin.py +4 -8
- edc_pharmacy/admin/stock/confirmation_at_site_item_admin.py +1 -1
- edc_pharmacy/admin/stock/container_admin.py +3 -3
- edc_pharmacy/admin/stock/location_admin.py +3 -6
- edc_pharmacy/admin/stock/lot_admin.py +9 -12
- edc_pharmacy/admin/stock/order_admin.py +2 -5
- edc_pharmacy/admin/stock/order_item_admin.py +14 -22
- edc_pharmacy/admin/stock/product_admin.py +6 -9
- edc_pharmacy/admin/stock/receive_admin.py +2 -2
- edc_pharmacy/admin/stock/receive_item_admin.py +3 -3
- edc_pharmacy/admin/stock/repack_request_admin.py +7 -10
- edc_pharmacy/admin/stock/stock_adjustment_admin.py +1 -1
- edc_pharmacy/admin/stock/stock_admin.py +17 -28
- edc_pharmacy/admin/stock/stock_proxy_admin.py +3 -4
- edc_pharmacy/admin/stock/stock_request_admin.py +6 -10
- edc_pharmacy/admin/stock/stock_request_item_admin.py +9 -18
- edc_pharmacy/admin/stock/stock_transfer_admin.py +5 -5
- edc_pharmacy/admin/stock/stock_transfer_item_admin.py +3 -3
- edc_pharmacy/admin/stock/storage_bin_admin.py +1 -1
- edc_pharmacy/admin/stock/storage_bin_item_admin.py +2 -2
- edc_pharmacy/form_validators/crf/study_medication_form_validator.py +27 -27
- edc_pharmacy/forms/stock/confirmation_form.py +2 -2
- edc_pharmacy/forms/stock/dispense_form.py +2 -2
- edc_pharmacy/forms/stock/lot_form.py +6 -6
- edc_pharmacy/forms/stock/order_form.py +4 -6
- edc_pharmacy/forms/stock/product_form.py +2 -3
- edc_pharmacy/forms/stock/receive_form.py +4 -4
- edc_pharmacy/forms/stock/receive_item_form.py +7 -5
- edc_pharmacy/forms/stock/repack_request_form.py +10 -8
- edc_pharmacy/forms/stock/stock_form.py +2 -3
- edc_pharmacy/forms/stock/stock_request_form.py +10 -8
- edc_pharmacy/forms/stock/stock_request_item_form.py +6 -5
- edc_pharmacy/forms/stock/stock_transfer_form.py +16 -14
- edc_pharmacy/forms/stock/supplier_form.py +2 -2
- edc_pharmacy/labels/label_data.py +2 -3
- edc_pharmacy/model_mixins/study_medication_crf_model_mixin.py +1 -1
- edc_pharmacy/models/medication/dosage_guideline.py +3 -3
- edc_pharmacy/models/model_mixins.py +12 -10
- edc_pharmacy/models/prescription/rx.py +1 -1
- edc_pharmacy/models/prescription/rx_refill.py +1 -1
- edc_pharmacy/models/signals.py +2 -3
- edc_pharmacy/models/storage/utils.py +4 -4
- edc_pharmacy/pdf_reports/manifest_pdf_report.py +3 -6
- edc_pharmacy/pdf_reports/stock_pdf_report.py +1 -3
- edc_pharmacy/refill/refill_creator.py +3 -4
- edc_protocol/validators.py +10 -16
- edc_reportable/forms/reportables_form_validator_mixin.py +1 -1
- edc_screening/form_validator_mixins.py +2 -1
- edc_transfer/form_validators.py +1 -1
- edc_transfer/model_mixins.py +1 -1
- edc_utils/age.py +17 -15
- edc_utils/date.py +7 -7
- edc_utils/text.py +7 -6
- edc_visit_schedule/exceptions.py +8 -0
- edc_visit_schedule/model_mixins/off_schedule_model_mixin.py +1 -1
- edc_visit_schedule/model_mixins/on_schedule_model_mixin.py +1 -1
- edc_visit_schedule/modelform_mixins/off_schedule_modelform_mixin.py +1 -3
- edc_visit_schedule/schedule/visit_collection.py +1 -1
- edc_visit_schedule/schedule/window.py +0 -2
- edc_visit_schedule/subject_schedule.py +1 -1
- edc_visit_schedule/utils.py +4 -4
- edc_visit_schedule/visit/visit.py +9 -3
- edc_visit_schedule/visit/window_period.py +1 -1
- edc_visit_tracking/form_validators/visit_form_validator.py +1 -1
- edc_metadata/metadata_wrappers/__init__.py +0 -5
- edc_metadata/metadata_wrappers/crf_metadata_wrapper.py +0 -5
- edc_metadata/metadata_wrappers/crf_metadata_wrappers.py +0 -8
- edc_metadata/metadata_wrappers/metadata_wrapper.py +0 -74
- edc_metadata/metadata_wrappers/metadata_wrappers.py +0 -33
- edc_metadata/metadata_wrappers/requisition_metadata_wrapper.py +0 -26
- edc_metadata/metadata_wrappers/requisition_metadata_wrappers.py +0 -10
- edc_pharmacy/management/__init__.py +0 -0
- edc_pharmacy/management/commands/__init__.py +0 -0
- edc_pharmacy/management/commands/update_initial_pharmacy_data.py +0 -10
- {clinicedc-2.0.33.dist-info → clinicedc-2.0.35.dist-info}/licenses/LICENSE +0 -0
|
@@ -15,8 +15,8 @@ from edc_consent.exceptions import ConsentDefinitionError
|
|
|
15
15
|
from edc_consent.site_consents import site_consents
|
|
16
16
|
from edc_sites.site import sites as site_sites
|
|
17
17
|
from edc_sites.utils import valid_site_for_subject_or_raise
|
|
18
|
-
from edc_utils import convert_php_dateformat, formatted_datetime
|
|
19
18
|
from edc_utils.date import to_local
|
|
19
|
+
from edc_utils.text import convert_php_dateformat, formatted_datetime
|
|
20
20
|
|
|
21
21
|
from .constants import OFF_SCHEDULE, ON_SCHEDULE
|
|
22
22
|
from .exceptions import (
|
edc_visit_schedule/utils.py
CHANGED
|
@@ -12,7 +12,7 @@ from django.conf import settings
|
|
|
12
12
|
from django.core.exceptions import ObjectDoesNotExist
|
|
13
13
|
from django.db import transaction
|
|
14
14
|
|
|
15
|
-
from edc_utils import floor_secs, formatted_datetime
|
|
15
|
+
from edc_utils import floor_secs, formatted_datetime
|
|
16
16
|
from edc_utils.date import to_local
|
|
17
17
|
|
|
18
18
|
from .baseline import Baseline
|
|
@@ -39,14 +39,14 @@ def get_lower_datetime(instance: Appointment) -> datetime:
|
|
|
39
39
|
if instance.related_visit:
|
|
40
40
|
dte = instance.appt_datetime
|
|
41
41
|
else:
|
|
42
|
-
instance.visit.dates.base =
|
|
42
|
+
instance.visit.dates.base = instance.first.timepoint_datetime
|
|
43
43
|
dte = instance.visit.dates.lower
|
|
44
44
|
return dte
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
def get_upper_datetime(instance) -> datetime:
|
|
48
48
|
"""Returns the datetime of the upper window"""
|
|
49
|
-
instance.visit.dates.base =
|
|
49
|
+
instance.visit.dates.base = instance.first.timepoint_datetime
|
|
50
50
|
return instance.visit.dates.upper
|
|
51
51
|
|
|
52
52
|
|
|
@@ -271,7 +271,7 @@ def get_onschedule_model_instance(
|
|
|
271
271
|
try:
|
|
272
272
|
onschedule_obj = model_cls.objects.get(
|
|
273
273
|
subject_identifier=subject_identifier,
|
|
274
|
-
onschedule_datetime__lte=
|
|
274
|
+
onschedule_datetime__lte=reference_datetime + relativedelta(seconds=1),
|
|
275
275
|
)
|
|
276
276
|
except ObjectDoesNotExist as e:
|
|
277
277
|
dte_as_str = formatted_datetime(to_local(reference_datetime))
|
|
@@ -8,8 +8,9 @@ from django.apps import apps as django_apps
|
|
|
8
8
|
from django.utils import timezone
|
|
9
9
|
|
|
10
10
|
from edc_facility.utils import get_default_facility_name, get_facility
|
|
11
|
-
from edc_utils import to_local
|
|
11
|
+
from edc_utils.date import to_local
|
|
12
12
|
|
|
13
|
+
from .crf import Crf
|
|
13
14
|
from .crf_collection import CrfCollection
|
|
14
15
|
from .forms_collection import FormsCollection
|
|
15
16
|
from .requisition_collection import RequisitionCollection
|
|
@@ -22,7 +23,6 @@ if TYPE_CHECKING:
|
|
|
22
23
|
|
|
23
24
|
from edc_facility.facility import Facility
|
|
24
25
|
|
|
25
|
-
from .crf import Crf
|
|
26
26
|
from .requisition import Requisition
|
|
27
27
|
|
|
28
28
|
|
|
@@ -132,7 +132,9 @@ class Visit:
|
|
|
132
132
|
self.base_timepoint = base_timepoint or Decimal("0.0")
|
|
133
133
|
self.crfs: CrfCollection = crfs or CrfCollection()
|
|
134
134
|
self.crfs_unscheduled: CrfCollection = crfs_unscheduled or CrfCollection()
|
|
135
|
-
self.crfs_missed: CrfCollection = crfs_missed or CrfCollection(
|
|
135
|
+
self.crfs_missed: CrfCollection = crfs_missed or CrfCollection(
|
|
136
|
+
Crf(show_order=1, model="edc_visit_tracking.subjectvisitmissed", required=True)
|
|
137
|
+
)
|
|
136
138
|
self.crfs_prn: CrfCollection = crfs_prn or CrfCollection()
|
|
137
139
|
for prn in self.crfs_prn:
|
|
138
140
|
prn.required = False
|
|
@@ -181,6 +183,10 @@ class Visit:
|
|
|
181
183
|
self.name = self.code
|
|
182
184
|
self.facility_name = facility_name or get_default_facility_name()
|
|
183
185
|
self.allow_unscheduled = allow_unscheduled
|
|
186
|
+
if self.allow_unscheduled and not crfs_unscheduled:
|
|
187
|
+
raise VisitError(
|
|
188
|
+
f"crfs_unscheduled may not be null if allow_unscheduled=True. See {self!r}"
|
|
189
|
+
)
|
|
184
190
|
if timepoint is None:
|
|
185
191
|
raise VisitError(f"Timepoint not specified. Got None. See Visit {code}.")
|
|
186
192
|
|
|
@@ -18,7 +18,7 @@ from edc_metadata.utils import (
|
|
|
18
18
|
get_crf_metadata_model_cls,
|
|
19
19
|
get_requisition_metadata_model_cls,
|
|
20
20
|
)
|
|
21
|
-
from edc_utils import formatted_datetime
|
|
21
|
+
from edc_utils.text import formatted_datetime
|
|
22
22
|
from edc_visit_schedule.utils import is_baseline
|
|
23
23
|
|
|
24
24
|
from ..constants import MISSED_VISIT, UNSCHEDULED
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# from .crf_metadata_wrapper import CrfMetadataWrapper
|
|
2
|
-
# from .crf_metadata_wrappers import CrfMetadataWrappers
|
|
3
|
-
# from .metadata_wrapper import MetadataWrapper, MetadataWrapperError
|
|
4
|
-
# from .requisition_metadata_wrapper import RequisitionMetadataWrapper
|
|
5
|
-
# from .requisition_metadata_wrappers import RequisitionMetadataWrappers
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
from ..metadata import CrfMetadataGetter
|
|
2
|
-
from .crf_metadata_wrapper import CrfMetadataWrapper
|
|
3
|
-
from .metadata_wrappers import MetadataWrappers
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class CrfMetadataWrappers(MetadataWrappers):
|
|
7
|
-
metadata_getter_cls = CrfMetadataGetter
|
|
8
|
-
metadata_wrapper_cls = CrfMetadataWrapper
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING, Any
|
|
4
|
-
|
|
5
|
-
from django.apps import apps as django_apps
|
|
6
|
-
from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
|
|
7
|
-
|
|
8
|
-
from edc_visit_tracking.typing_stubs import RelatedVisitProtocol
|
|
9
|
-
|
|
10
|
-
if TYPE_CHECKING:
|
|
11
|
-
from edc_crf.model_mixins import CrfModelMixin
|
|
12
|
-
from edc_metadata.models import CrfMetadata, RequisitionMetadata
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class MetadataWrapperError(Exception):
|
|
16
|
-
pass
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class MetadataWrapper:
|
|
20
|
-
"""A class that wraps the corresponding model instance, or not, for the
|
|
21
|
-
given metadata object and sets it to itself along with other
|
|
22
|
-
attributes like the visit, model class, metadata_obj, etc.
|
|
23
|
-
"""
|
|
24
|
-
|
|
25
|
-
label: str | None = None
|
|
26
|
-
|
|
27
|
-
def __init__(
|
|
28
|
-
self,
|
|
29
|
-
visit: RelatedVisitProtocol,
|
|
30
|
-
metadata_obj: CrfMetadata | RequisitionMetadata,
|
|
31
|
-
) -> None:
|
|
32
|
-
self._source_model_obj = None
|
|
33
|
-
self.metadata_obj = metadata_obj
|
|
34
|
-
self.visit = visit
|
|
35
|
-
|
|
36
|
-
# visit codes (and sequence) must match
|
|
37
|
-
if (self.visit.visit_code != self.metadata_obj.visit_code) or (
|
|
38
|
-
self.visit.visit_code_sequence != self.metadata_obj.visit_code_sequence
|
|
39
|
-
):
|
|
40
|
-
raise MetadataWrapperError(
|
|
41
|
-
f"Visit code mismatch. Visit is {self.visit.visit_code}."
|
|
42
|
-
f"{self.visit.visit_code_sequence} but metadata object has "
|
|
43
|
-
f"{self.metadata_obj.visit_code}."
|
|
44
|
-
f"{self.metadata_obj.visit_code_sequence}. Got {metadata_obj!r}."
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
def __repr__(self) -> str:
|
|
48
|
-
return f"{self.__class__.__name__}({self.visit}, {self.metadata_obj})"
|
|
49
|
-
|
|
50
|
-
@property
|
|
51
|
-
def options(self) -> dict[str, Any]:
|
|
52
|
-
"""Returns a dictionary of query options."""
|
|
53
|
-
return {f"{self.source_model_cls.related_visit_model_attr()}": self.visit}
|
|
54
|
-
|
|
55
|
-
@property
|
|
56
|
-
def source_model_obj(self) -> CrfModelMixin:
|
|
57
|
-
if not self._source_model_obj:
|
|
58
|
-
try:
|
|
59
|
-
self._source_model_obj = self.source_model_cls.objects.get(**self.options)
|
|
60
|
-
except AttributeError as e:
|
|
61
|
-
if "related_visit_model_attr" not in str(e):
|
|
62
|
-
raise ImproperlyConfigured(f"{e} See {self.source_model_cls!r}")
|
|
63
|
-
except ObjectDoesNotExist:
|
|
64
|
-
self._source_model_obj = None
|
|
65
|
-
return self._source_model_obj
|
|
66
|
-
|
|
67
|
-
@source_model_obj.setter
|
|
68
|
-
def source_model_obj(self, value=None) -> None:
|
|
69
|
-
self._source_model_obj = value
|
|
70
|
-
|
|
71
|
-
@property
|
|
72
|
-
def source_model_cls(self) -> type[CrfModelMixin]:
|
|
73
|
-
"""Returns a CRF model class"""
|
|
74
|
-
return django_apps.get_model(self.metadata_obj.model)
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from django.core.management.color import color_style
|
|
4
|
-
|
|
5
|
-
from ..metadata import MetadataGetter
|
|
6
|
-
from .metadata_wrapper import MetadataWrapper
|
|
7
|
-
|
|
8
|
-
style = color_style()
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class MetadataWrappers:
|
|
12
|
-
"""A class that generates a collection of MetadataWrapper objects, e.g. CRF
|
|
13
|
-
or REQUISITION, from a queryset of metadata objects.
|
|
14
|
-
|
|
15
|
-
See also classes Crf, Requisition in edc_visit_schedule.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
metadata_getter_cls: MetadataGetter = MetadataGetter
|
|
19
|
-
metadata_wrapper_cls: MetadataWrapper = MetadataWrapper
|
|
20
|
-
|
|
21
|
-
def __init__(self, **kwargs) -> None:
|
|
22
|
-
metadata_getter = self.metadata_getter_cls(**kwargs)
|
|
23
|
-
self.objects = []
|
|
24
|
-
if metadata_getter.related_visit:
|
|
25
|
-
for metadata_obj in metadata_getter.metadata_objects:
|
|
26
|
-
metadata_wrapper = self.metadata_wrapper_cls(
|
|
27
|
-
metadata_obj=metadata_obj,
|
|
28
|
-
visit=metadata_getter.related_visit,
|
|
29
|
-
)
|
|
30
|
-
self.objects.append(metadata_wrapper)
|
|
31
|
-
|
|
32
|
-
def __repr__(self) -> str:
|
|
33
|
-
return f"{self.__class__.__name__}({self.objects})"
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING
|
|
4
|
-
|
|
5
|
-
from .metadata_wrapper import MetadataWrapper
|
|
6
|
-
|
|
7
|
-
if TYPE_CHECKING:
|
|
8
|
-
from ..models import RequisitionMetadata
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class RequisitionMetadataWrapper(MetadataWrapper):
|
|
12
|
-
label = "Requisition"
|
|
13
|
-
|
|
14
|
-
def __init__(self, metadata_obj: RequisitionMetadata = None, **kwargs) -> None:
|
|
15
|
-
self.panel_name = metadata_obj.panel_name
|
|
16
|
-
super().__init__(metadata_obj=metadata_obj, **kwargs)
|
|
17
|
-
|
|
18
|
-
@property
|
|
19
|
-
def options(self) -> dict:
|
|
20
|
-
options = super().options
|
|
21
|
-
options.update(panel__name=self.panel_name)
|
|
22
|
-
return options
|
|
23
|
-
|
|
24
|
-
@property
|
|
25
|
-
def html_id(self) -> str:
|
|
26
|
-
return f"id_{self.panel_name}"
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from ..metadata import RequisitionMetadataGetter
|
|
4
|
-
from .metadata_wrappers import MetadataWrappers
|
|
5
|
-
from .requisition_metadata_wrapper import RequisitionMetadataWrapper
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class RequisitionMetadataWrappers(MetadataWrappers):
|
|
9
|
-
metadata_getter_cls: RequisitionMetadataGetter = RequisitionMetadataGetter
|
|
10
|
-
metadata_wrapper_cls: RequisitionMetadataWrapper = RequisitionMetadataWrapper
|
|
File without changes
|
|
File without changes
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from django.core.management import BaseCommand
|
|
2
|
-
from meta_pharmacy.utils import update_initial_pharmacy_data
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class Command(BaseCommand):
|
|
6
|
-
|
|
7
|
-
def handle(self, *args, **options):
|
|
8
|
-
"""This is an example of an initial set of data"""
|
|
9
|
-
update_initial_pharmacy_data()
|
|
10
|
-
print("Done")
|
|
File without changes
|