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.

Files changed (165) hide show
  1. {clinicedc-2.0.33.dist-info → clinicedc-2.0.35.dist-info}/METADATA +1 -1
  2. {clinicedc-2.0.33.dist-info → clinicedc-2.0.35.dist-info}/RECORD +155 -165
  3. {clinicedc-2.0.33.dist-info → clinicedc-2.0.35.dist-info}/WHEEL +1 -1
  4. edc_action_item/templatetags/action_item_extras.py +1 -1
  5. edc_adverse_event/form_validator_mixins/death_report_form_validator.py +1 -1
  6. edc_adverse_event/form_validator_mixins/requires_death_report_form_validator_mixin.py +5 -3
  7. edc_adverse_event/form_validators/death_report_tmg.py +2 -2
  8. edc_adverse_event/modeladmin_mixins/ae_tmg_admin_mixin.py +1 -1
  9. edc_adverse_event/modeladmin_mixins/utils.py +1 -1
  10. edc_adverse_event/utils.py +1 -1
  11. edc_appointment/admin/appointment_admin.py +24 -24
  12. edc_appointment/admin/list_filters.py +5 -5
  13. edc_appointment/appointment_reason_updater.py +6 -5
  14. edc_appointment/appointment_status_updater.py +2 -2
  15. edc_appointment/context_processors.py +1 -2
  16. edc_appointment/creators/appointment_creator.py +9 -8
  17. edc_appointment/creators/unscheduled_appointment_creator.py +31 -24
  18. edc_appointment/creators/utils.py +35 -37
  19. edc_appointment/exceptions.py +3 -3
  20. edc_appointment/form_runners.py +2 -2
  21. edc_appointment/form_validator_mixins/next_appointment_crf_form_validator_mixin.py +5 -5
  22. edc_appointment/form_validator_mixins/window_period_form_validator_mixin.py +7 -7
  23. edc_appointment/form_validators/appointment_form_validator.py +16 -23
  24. edc_appointment/management/commands/close_appointments.py +3 -3
  25. edc_appointment/management/commands/reset_visit_code_sequences.py +1 -1
  26. edc_appointment/management/commands/update_appointment_status.py +2 -2
  27. edc_appointment/management/commands/update_skipped_appointments.py +7 -7
  28. edc_appointment/managers.py +6 -7
  29. edc_appointment/model_mixins/appointment_model_mixin.py +3 -4
  30. edc_appointment/modeladmin_mixins/next_appointment_crf_modeladmin_mixin.py +2 -2
  31. edc_appointment/modelform_mixins/next_appointment_crf_modelform_mixins.py +25 -24
  32. edc_appointment/models/signals.py +1 -1
  33. edc_appointment/skip_appointments.py +10 -29
  34. edc_appointment/utils.py +43 -47
  35. edc_appointment/view_mixins/appointment_view_mixin.py +11 -13
  36. edc_appointment/views/unscheduled_appointment_view.py +5 -6
  37. edc_consent/consent_definition.py +5 -13
  38. edc_consent/consent_definition_extension.py +0 -2
  39. edc_consent/form_validators/consent_definition_form_validator_mixin.py +26 -30
  40. edc_consent/form_validators/subject_consent_form_validator.py +3 -3
  41. edc_consent/modelform_mixins/consent_modelform_mixin/consent_modelform_validation_mixin.py +1 -1
  42. edc_consent/modelform_mixins/requires_consent_modelform_mixin.py +4 -5
  43. edc_consent/site_consents.py +13 -14
  44. edc_crf/crf_form_validator.py +13 -19
  45. edc_crf/crf_form_validator_mixins.py +2 -17
  46. edc_data_manager/admin/actions.py +1 -1
  47. edc_data_manager/admin/data_query_admin.py +1 -1
  48. edc_dx/form_validators/result_form_validator_mixin.py +1 -1
  49. edc_dx_review/medical_date.py +1 -1
  50. edc_egfr/egfr.py +4 -8
  51. edc_egfr/form_validator_mixins/egfr_form_validator_mixins.py +2 -2
  52. edc_facility/facility.py +7 -11
  53. edc_facility/holidays.py +3 -3
  54. edc_facility/models/holiday.py +1 -1
  55. edc_form_runners/form_runner.py +15 -16
  56. edc_form_validators/base_form_validator.py +5 -1
  57. edc_form_validators/date_range_validator.py +49 -61
  58. edc_form_validators/date_validator.py +1 -1
  59. edc_form_validators/extra_mixins/study_day_form_validator.py +1 -1
  60. edc_lab/form_validators/crf_requisition_form_validator_mixin.py +21 -15
  61. edc_lab/form_validators/requisition_form_validator_mixin.py +3 -3
  62. edc_lab_results/form_validator_mixins/blood_results_form_validator_mixin.py +1 -1
  63. edc_ltfu/modelform_mixins.py +1 -1
  64. edc_metadata/metadata/metadata.py +20 -7
  65. edc_metadata/metadata_rules/logic.py +5 -4
  66. edc_metadata/metadata_rules/predicate.py +22 -24
  67. edc_model_form/mixins/report_datetime_modelform_mixin.py +1 -5
  68. edc_offstudy/model_mixins/offstudy_model_mixin.py +1 -1
  69. edc_offstudy/modelform_mixins/crf/offstudy_crf_modelform_mixin.py +2 -2
  70. edc_offstudy/utils.py +4 -4
  71. edc_pdf_reports/crf_pdf_report.py +2 -1
  72. edc_pdutils/helper.py +3 -3
  73. edc_pdutils/utils/convert_dates_from_model.py +4 -3
  74. edc_pharmacy/admin/actions/confirm_stock.py +3 -3
  75. edc_pharmacy/admin/actions/delete_items_for_stock_request.py +4 -3
  76. edc_pharmacy/admin/actions/delete_order_items.py +7 -3
  77. edc_pharmacy/admin/actions/delete_receive_items.py +5 -3
  78. edc_pharmacy/admin/actions/process_repack_request.py +7 -11
  79. edc_pharmacy/admin/autocomplete_admin.py +1 -1
  80. edc_pharmacy/admin/list_filters.py +48 -46
  81. edc_pharmacy/admin/medication/assignment_admin.py +4 -4
  82. edc_pharmacy/admin/medication/dosage_guideline_admin.py +3 -3
  83. edc_pharmacy/admin/medication/formulation_admin.py +5 -5
  84. edc_pharmacy/admin/medication/medication_admin.py +3 -3
  85. edc_pharmacy/admin/prescription/rx_admin.py +2 -2
  86. edc_pharmacy/admin/prescription/rx_refill_admin.py +11 -17
  87. edc_pharmacy/admin/remove_fields_for_blinded_users.py +1 -1
  88. edc_pharmacy/admin/reports/stock_availability_admin.py +12 -8
  89. edc_pharmacy/admin/stock/allocation_admin.py +13 -17
  90. edc_pharmacy/admin/stock/allocation_proxy_admin.py +1 -2
  91. edc_pharmacy/admin/stock/confirmation_admin.py +4 -8
  92. edc_pharmacy/admin/stock/confirmation_at_site_item_admin.py +1 -1
  93. edc_pharmacy/admin/stock/container_admin.py +3 -3
  94. edc_pharmacy/admin/stock/location_admin.py +3 -6
  95. edc_pharmacy/admin/stock/lot_admin.py +9 -12
  96. edc_pharmacy/admin/stock/order_admin.py +2 -5
  97. edc_pharmacy/admin/stock/order_item_admin.py +14 -22
  98. edc_pharmacy/admin/stock/product_admin.py +6 -9
  99. edc_pharmacy/admin/stock/receive_admin.py +2 -2
  100. edc_pharmacy/admin/stock/receive_item_admin.py +3 -3
  101. edc_pharmacy/admin/stock/repack_request_admin.py +7 -10
  102. edc_pharmacy/admin/stock/stock_adjustment_admin.py +1 -1
  103. edc_pharmacy/admin/stock/stock_admin.py +17 -28
  104. edc_pharmacy/admin/stock/stock_proxy_admin.py +3 -4
  105. edc_pharmacy/admin/stock/stock_request_admin.py +6 -10
  106. edc_pharmacy/admin/stock/stock_request_item_admin.py +9 -18
  107. edc_pharmacy/admin/stock/stock_transfer_admin.py +5 -5
  108. edc_pharmacy/admin/stock/stock_transfer_item_admin.py +3 -3
  109. edc_pharmacy/admin/stock/storage_bin_admin.py +1 -1
  110. edc_pharmacy/admin/stock/storage_bin_item_admin.py +2 -2
  111. edc_pharmacy/form_validators/crf/study_medication_form_validator.py +27 -27
  112. edc_pharmacy/forms/stock/confirmation_form.py +2 -2
  113. edc_pharmacy/forms/stock/dispense_form.py +2 -2
  114. edc_pharmacy/forms/stock/lot_form.py +6 -6
  115. edc_pharmacy/forms/stock/order_form.py +4 -6
  116. edc_pharmacy/forms/stock/product_form.py +2 -3
  117. edc_pharmacy/forms/stock/receive_form.py +4 -4
  118. edc_pharmacy/forms/stock/receive_item_form.py +7 -5
  119. edc_pharmacy/forms/stock/repack_request_form.py +10 -8
  120. edc_pharmacy/forms/stock/stock_form.py +2 -3
  121. edc_pharmacy/forms/stock/stock_request_form.py +10 -8
  122. edc_pharmacy/forms/stock/stock_request_item_form.py +6 -5
  123. edc_pharmacy/forms/stock/stock_transfer_form.py +16 -14
  124. edc_pharmacy/forms/stock/supplier_form.py +2 -2
  125. edc_pharmacy/labels/label_data.py +2 -3
  126. edc_pharmacy/model_mixins/study_medication_crf_model_mixin.py +1 -1
  127. edc_pharmacy/models/medication/dosage_guideline.py +3 -3
  128. edc_pharmacy/models/model_mixins.py +12 -10
  129. edc_pharmacy/models/prescription/rx.py +1 -1
  130. edc_pharmacy/models/prescription/rx_refill.py +1 -1
  131. edc_pharmacy/models/signals.py +2 -3
  132. edc_pharmacy/models/storage/utils.py +4 -4
  133. edc_pharmacy/pdf_reports/manifest_pdf_report.py +3 -6
  134. edc_pharmacy/pdf_reports/stock_pdf_report.py +1 -3
  135. edc_pharmacy/refill/refill_creator.py +3 -4
  136. edc_protocol/validators.py +10 -16
  137. edc_reportable/forms/reportables_form_validator_mixin.py +1 -1
  138. edc_screening/form_validator_mixins.py +2 -1
  139. edc_transfer/form_validators.py +1 -1
  140. edc_transfer/model_mixins.py +1 -1
  141. edc_utils/age.py +17 -15
  142. edc_utils/date.py +7 -7
  143. edc_utils/text.py +7 -6
  144. edc_visit_schedule/exceptions.py +8 -0
  145. edc_visit_schedule/model_mixins/off_schedule_model_mixin.py +1 -1
  146. edc_visit_schedule/model_mixins/on_schedule_model_mixin.py +1 -1
  147. edc_visit_schedule/modelform_mixins/off_schedule_modelform_mixin.py +1 -3
  148. edc_visit_schedule/schedule/visit_collection.py +1 -1
  149. edc_visit_schedule/schedule/window.py +0 -2
  150. edc_visit_schedule/subject_schedule.py +1 -1
  151. edc_visit_schedule/utils.py +4 -4
  152. edc_visit_schedule/visit/visit.py +9 -3
  153. edc_visit_schedule/visit/window_period.py +1 -1
  154. edc_visit_tracking/form_validators/visit_form_validator.py +1 -1
  155. edc_metadata/metadata_wrappers/__init__.py +0 -5
  156. edc_metadata/metadata_wrappers/crf_metadata_wrapper.py +0 -5
  157. edc_metadata/metadata_wrappers/crf_metadata_wrappers.py +0 -8
  158. edc_metadata/metadata_wrappers/metadata_wrapper.py +0 -74
  159. edc_metadata/metadata_wrappers/metadata_wrappers.py +0 -33
  160. edc_metadata/metadata_wrappers/requisition_metadata_wrapper.py +0 -26
  161. edc_metadata/metadata_wrappers/requisition_metadata_wrappers.py +0 -10
  162. edc_pharmacy/management/__init__.py +0 -0
  163. edc_pharmacy/management/commands/__init__.py +0 -0
  164. edc_pharmacy/management/commands/update_initial_pharmacy_data.py +0 -10
  165. {clinicedc-2.0.33.dist-info → clinicedc-2.0.35.dist-info}/licenses/LICENSE +0 -0
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from datetime import datetime
4
4
  from typing import TYPE_CHECKING
5
5
 
6
- from edc_utils import to_local
6
+ from edc_utils.date import to_local
7
7
 
8
8
  from ..ordered_collection import OrderedCollection
9
9
 
@@ -76,8 +76,6 @@ class Window:
76
76
  window period for a scheduled `visit` otherwise
77
77
  raises an exception.
78
78
 
79
- Ensure all datetimes in UTC before comparison.
80
-
81
79
  In this case, `visit` is the object from schedule and
82
80
  not a model instance.
83
81
  """
@@ -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 (
@@ -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, to_utc
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 = to_utc(instance.first.timepoint_datetime)
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 = to_utc(instance.first.timepoint_datetime)
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=to_utc(reference_datetime) + relativedelta(seconds=1),
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
 
@@ -8,7 +8,7 @@ from zoneinfo import ZoneInfo
8
8
  from dateutil.relativedelta import relativedelta
9
9
  from django.conf import settings
10
10
 
11
- from edc_utils import to_local
11
+ from edc_utils.date import to_local
12
12
 
13
13
 
14
14
  class WindowPeriod:
@@ -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,5 +0,0 @@
1
- from .metadata_wrapper import MetadataWrapper
2
-
3
-
4
- class CrfMetadataWrapper(MetadataWrapper):
5
- label = "CRF"
@@ -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")