Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions care/emr/api/viewsets/facility.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ class FacilityViewSet(EMRModelViewSet):
filter_backends = [DjangoFilterBackend]

def get_queryset(self):
qs = super().get_queryset()
qs = super().get_queryset().select_related("geo_organization")
if self.request.user.is_superuser:
return qs
organization_ids = list(
Expand Down Expand Up @@ -217,4 +217,6 @@ class AllFacilityViewSet(EMRModelReadOnlyViewSet):
search_fields = ["name"]

def get_queryset(self):
return Facility.objects.filter(is_public=True).select_related()
return Facility.objects.filter(is_public=True).select_related(
"geo_organization"
)
12 changes: 9 additions & 3 deletions care/emr/api/viewsets/patient.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,9 @@ def search(self, request, *args, **kwargs):
):
partial = True

queryset = queryset.order_by("-created_date")[:page_size]
queryset = queryset.select_related("geo_organization").order_by(
"-created_date"
)[:page_size]
if partial:
data = [PatientPartialSpec.serialize(obj).to_json() for obj in queryset]
return Response({"partial": True, "results": data})
Expand All @@ -268,7 +270,9 @@ class SearchRetrieveRequestSpec(BaseModel):
@action(detail=False, methods=["POST"])
def search_retrieve(self, request, *args, **kwargs):
request_data = self.SearchRetrieveRequestSpec(**request.data)
queryset = Patient.objects.filter(phone_number=request_data.phone_number)
queryset = Patient.objects.filter(
phone_number=request_data.phone_number
).select_related("geo_organization")
queryset = queryset.filter(year_of_birth=request_data.year_of_birth)
for patient in queryset:
if str(patient.external_id)[:5] == request_data.partial_id:
Expand All @@ -283,7 +287,9 @@ def search_retrieve(self, request, *args, **kwargs):
@action(detail=True, methods=["GET"])
def get_users(self, request, *args, **kwargs):
patient = self.get_object()
patient_users = PatientUser.objects.filter(patient=patient)
patient_users = PatientUser.objects.filter(patient=patient).select_related(
"user"
)
data = [
UserSpec.serialize(patient_user.user).to_json()
for patient_user in patient_users
Expand Down
1 change: 1 addition & 0 deletions care/emr/api/viewsets/scheduling/booking.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@ def available_users(self, request, *args, **kwargs):
user_id__in=facility_organization_users.values("user_id")
)

user_resources = user_resources.select_related("user")
return Response(
{
"users": [
Expand Down
9 changes: 6 additions & 3 deletions care/emr/models/patient.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,9 +190,12 @@ def get_config(cls, config_id) -> PatientIdentifierConfig:
from care.emr.resources.patient_identifier.spec import PatientIdentifierListSpec

if config_id not in cls.configs:
cls.configs[config_id] = PatientIdentifierListSpec.serialize(
PatientIdentifierConfig.objects.get(external_id=config_id)
).to_json()
config = PatientIdentifierConfig.objects.only("id").get(
external_id=config_id
)
cls.configs[config_id] = model_from_cache(
PatientIdentifierListSpec, id=config.id
)
return cls.configs[config_id]

@classmethod
Expand Down
6 changes: 1 addition & 5 deletions care/emr/resources/allergy_intolerance/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
from care.emr.resources.allergy_intolerance.valueset import CARE_ALLERGY_CODE_VALUESET
from care.emr.resources.base import EMRResource
from care.emr.resources.common.coding import Coding
from care.emr.resources.user.spec import UserSpec
from care.emr.utils.valueset_coding_type import ValueSetBoundCoding


Expand Down Expand Up @@ -134,9 +133,6 @@ class AllergyIntoleranceReadSpec(BaseAllergyIntoleranceSpec):
@classmethod
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)
if obj.encounter:
mapping["encounter"] = obj.encounter.external_id
5 changes: 1 addition & 4 deletions care/emr/resources/condition/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,7 @@ def perform_extra_serialization(cls, mapping, obj):
if obj.encounter:
mapping["encounter"] = obj.encounter.external_id

if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)


class ConditionUpdateSpec(BaseConditionSpec):
Expand Down
8 changes: 3 additions & 5 deletions care/emr/resources/device/history_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
from pydantic import UUID4

from care.emr.models import DeviceServiceHistory
from care.emr.resources.base import EMRResource
from care.emr.resources.base import EMRResource, model_from_cache
from care.emr.resources.user.spec import UserSpec
from care.users.models import User


class DeviceServiceHistorySpecBase(EMRResource):
Expand Down Expand Up @@ -41,9 +40,8 @@ def perform_extra_serialization(cls, mapping, obj):
edit_history = []
for history in obj.edit_history:
user = history.get("updated_by")
user_obj = User.objects.filter(id=user).first()
if user_obj:
history["updated_by"] = UserSpec.serialize(user_obj).to_json()
if user:
history["updated_by"] = model_from_cache(UserSpec, id=user)
else:
history["updated_by"] = {} # Edge Case
edit_history.append(history)
Expand Down
8 changes: 6 additions & 2 deletions care/emr/resources/encounter/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,9 @@ class EncounterListSpec(EncounterSpecBase):
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
mapping["patient"] = PatientListSpec.serialize(obj.patient).to_json()
mapping["facility"] = FacilityBareMinimumSpec.serialize(obj.facility).to_json()
mapping["facility"] = model_from_cache(
FacilityBareMinimumSpec, id=obj.facility_id
)
mapping["tags"] = SingleFacilityTagManager().render_tags(obj)
mapping["current_location"] = None
if obj.current_location:
Expand All @@ -155,7 +157,9 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["patient"] = PatientRetrieveSpec.serialize(
obj.patient, facility=obj.facility
).to_json()
mapping["facility"] = FacilityBareMinimumSpec.serialize(obj.facility).to_json()
mapping["facility"] = model_from_cache(
FacilityBareMinimumSpec, id=obj.facility_id
)
mapping["tags"] = SingleFacilityTagManager().render_tags(obj)
if obj.appointment:
mapping["appointment"] = TokenBookingReadSpec.serialize(
Expand Down
2 changes: 1 addition & 1 deletion care/emr/resources/facility/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def perform_extra_serialization(cls, mapping, obj):

mapping["id"] = obj.external_id
mapping["read_cover_image_url"] = obj.read_cover_image_url()
if obj.created_by:
if obj.created_by_id:
mapping["created_by"] = model_from_cache(UserSpec, id=obj.created_by_id)
mapping["facility_type"] = REVERSE_FACILITY_TYPES[obj.facility_type]
if obj.geo_organization:
Expand Down
6 changes: 1 addition & 5 deletions care/emr/resources/facility_organization/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,7 @@ class FacilityOrganizationReadSpec(FacilityOrganizationBaseSpec):
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
mapping["parent"] = obj.get_parent_json()

if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)


class FacilityOrganizationRetrieveSpec(FacilityOrganizationReadSpec):
Expand Down
14 changes: 7 additions & 7 deletions care/emr/resources/file_upload/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from pydantic import UUID4, field_validator

from care.emr.models import FileUpload
from care.emr.resources.base import EMRResource
from care.emr.resources.base import EMRResource, model_from_cache
from care.emr.resources.user.spec import UserSpec
from care.utils.models.validators import file_name_validator

Expand Down Expand Up @@ -92,10 +92,10 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
mapping["extension"] = obj.get_extension()
mapping["mime_type"] = obj.meta.get("mime_type")
if obj.created_by:
mapping["uploaded_by"] = UserSpec.serialize(obj.created_by)
if obj.archived_by:
mapping["archived_by"] = UserSpec.serialize(obj.archived_by)
if obj.created_by_id:
mapping["uploaded_by"] = model_from_cache(UserSpec, id=obj.created_by_id)
if obj.archived_by_id:
mapping["archived_by"] = model_from_cache(UserSpec, id=obj.archived_by_id)


class FileUploadRetrieveSpec(FileUploadListSpec):
Expand All @@ -112,8 +112,8 @@ def perform_extra_serialization(cls, mapping, obj):
else:
mapping["read_signed_url"] = obj.files_manager.read_signed_url(obj)

if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
if obj.updated_by_id:
mapping["updated_by"] = model_from_cache(UserSpec, id=obj.updated_by_id)


class ConsentFileUploadCreateSpec(FileUploadBaseSpec):
Expand Down
6 changes: 1 addition & 5 deletions care/emr/resources/location/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from care.emr.models.location import FacilityLocation
from care.emr.resources.base import EMRResource
from care.emr.resources.common import Coding
from care.emr.resources.user.spec import UserSpec


class LocationEncounterAvailabilityStatusChoices(str, Enum):
Expand Down Expand Up @@ -156,10 +155,7 @@ class FacilityLocationRetrieveSpec(FacilityLocationListSpec):
@classmethod
def perform_extra_serialization(cls, mapping, obj):
super().perform_extra_serialization(mapping, obj)
if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)


class FacilityLocationEncounterBaseSpec(EMRResource):
Expand Down
6 changes: 3 additions & 3 deletions care/emr/resources/medication/administration/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from care.emr.models.medication_administration import MedicationAdministration
from care.emr.models.medication_request import MedicationRequest
from care.emr.models.product_knowledge import ProductKnowledge
from care.emr.resources.base import EMRResource
from care.emr.resources.base import EMRResource, model_from_cache
from care.emr.resources.common import Quantity
from care.emr.resources.inventory.product_knowledge.spec import ProductKnowledgeReadSpec
from care.emr.resources.medication.valueset.administration_method import (
Expand Down Expand Up @@ -191,5 +191,5 @@ def perform_extra_serialization(cls, mapping, obj):
obj.administered_product
)

if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.created_by_id:
mapping["created_by"] = model_from_cache(UserSpec, id=obj.created_by_id)
5 changes: 1 addition & 4 deletions care/emr/resources/meta_artifact/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,7 @@ class MetaArtifactReadSpec(MetaArtifactBaseSpec):
@classmethod
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)


class MetaArtifactCreateSpec(MetaArtifactBaseSpec):
Expand Down
10 changes: 3 additions & 7 deletions care/emr/resources/notes/notes_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

from care.emr.models.notes import NoteMessage
from care.emr.resources.base import EMRResource
from care.emr.resources.user.spec import UserSpec


class NoteMessageSpec(EMRResource):
Expand Down Expand Up @@ -40,16 +39,13 @@ def perform_extra_deserialization(self, is_update, obj):
class NoteMessageReadSpec(NoteMessageSpec):
message_history: dict

created_by: UserSpec = {}
updated_by: UserSpec = {}
created_by: dict = {}
updated_by: dict = {}
created_date: datetime.datetime
modified_date: datetime.datetime

@classmethod
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id

if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by).to_json()
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by).to_json()
cls.serialize_audit_users(mapping, obj)
10 changes: 3 additions & 7 deletions care/emr/resources/notes/thread_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from care.emr.models import Encounter
from care.emr.models.notes import NoteThread
from care.emr.resources.base import EMRResource
from care.emr.resources.user.spec import UserSpec


class NoteThreadSpec(EMRResource):
Expand Down Expand Up @@ -36,16 +35,13 @@ class NoteThreadUpdateSpec(NoteThreadSpec):


class NoteThreadReadSpec(NoteThreadSpec):
created_by: UserSpec = {}
updated_by: UserSpec = {}
created_by: dict = {}
updated_by: dict = {}
created_date: datetime.datetime
modified_date: datetime.datetime

@classmethod
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id

if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by).to_json()
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by).to_json()
cls.serialize_audit_users(mapping, obj)
13 changes: 7 additions & 6 deletions care/emr/resources/observation/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,13 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["patient"] = None
mapping["questionnaire_response"] = None

if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
if obj.data_entered_by:
mapping["data_entered_by"] = UserSpec.serialize(obj.data_entered_by)
cls.serialize_audit_users(mapping, obj)
if obj.data_entered_by_id:
from care.emr.resources.base import model_from_cache

mapping["data_entered_by"] = model_from_cache(
UserSpec, id=obj.data_entered_by_id
)


class ObservationRetrieveSpec(ObservationReadSpec):
Expand Down
10 changes: 5 additions & 5 deletions care/emr/resources/observation_definition/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from pydantic import UUID4, BaseModel, Field, field_validator, model_validator

from care.emr.models.observation_definition import ObservationDefinition
from care.emr.resources.base import EMRResource
from care.emr.resources.base import EMRResource, model_from_cache
from care.emr.resources.common.condition_evaluator import EvaluatorConditionSpec
from care.emr.resources.facility.spec import FacilityBareMinimumSpec
from care.emr.resources.observation.valueset import (
Expand Down Expand Up @@ -224,8 +224,8 @@ class ObservationDefinitionReadSpec(BaseObservationDefinitionSpec):
@classmethod
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
if obj.facility:
mapping["facility"] = FacilityBareMinimumSpec.serialize(
obj.facility
).to_json()
if obj.facility_id:
mapping["facility"] = model_from_cache(
FacilityBareMinimumSpec, id=obj.facility_id
)
mapping["slug_config"] = obj.parse_slug(obj.slug)
6 changes: 1 addition & 5 deletions care/emr/resources/patient/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,17 +261,13 @@ class PatientRetrieveSpec(PatientListSpec, PatientPermissionsMixin):
@classmethod
def perform_extra_serialization(cls, mapping, obj, *args, **kwargs):
from care.emr.resources.organization.spec import OrganizationReadSpec
from care.emr.resources.user.spec import UserSpec

super().perform_extra_serialization(mapping, obj, *args, **kwargs)
if obj.geo_organization:
mapping["geo_organization"] = OrganizationReadSpec.serialize(
obj.geo_organization
).to_json()
if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by).to_json()
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by).to_json()
cls.serialize_audit_users(mapping, obj)
if obj.instance_identifiers:
mapping["instance_identifiers"] = [
{
Expand Down
5 changes: 1 addition & 4 deletions care/emr/resources/questionnaire/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,10 +290,7 @@ def perform_extra_serialization(cls, mapping, obj):
for tag in obj.tags:
tags.append(QuestionnaireTag.get_tag(tag))
mapping["tags"] = tags
if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)


# Add this to handle recursive Question type
Expand Down
5 changes: 1 addition & 4 deletions care/emr/resources/questionnaire_response/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,4 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["encounter"] = obj.encounter.external_id
else:
mapping["encounter"] = None
if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)
Loading