Skip to content

Commit

Permalink
feat: add service request models
Browse files Browse the repository at this point in the history
  • Loading branch information
ngurenyaga committed Nov 26, 2021
1 parent 8f724f8 commit 499932a
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 0 deletions.
6 changes: 6 additions & 0 deletions mycarehub/clients/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
RelatedPerson,
SecurityQuestion,
SecurityQuestionResponse,
ServiceRequest,
)


Expand Down Expand Up @@ -88,3 +89,8 @@ class HealthDiaryAttachmentAdmin(BaseAdmin):
@admin.register(HealthDiaryQuote)
class HealthDiaryQuoteAdmin(BaseAdmin):
list_display = ("quote",)


@admin.register(ServiceRequest)
class ServiceRequestAdmin(BaseAdmin):
list_display = ("client", "request_type", "status")
49 changes: 49 additions & 0 deletions mycarehub/clients/migrations/0016_servicerequest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Generated by Django 3.2.9 on 2021-11-26 05:55

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import mycarehub.common.models.base_models
import mycarehub.users.models
import uuid


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('common', '0013_alter_facilityattachment_content_type'),
('clients', '0015_healthdiaryattachment_healthdiaryentry_healthdiaryquote'),
]

operations = [
migrations.CreateModel(
name='ServiceRequest',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('active', models.BooleanField(default=True)),
('created', models.DateTimeField(default=django.utils.timezone.now)),
('created_by', models.UUIDField(blank=True, null=True)),
('updated', models.DateTimeField(default=django.utils.timezone.now)),
('updated_by', models.UUIDField(blank=True, null=True)),
('deleted_at', models.DateTimeField(blank=True, null=True)),
('request_type', models.CharField(choices=[('HEALTH_DIARY_ENTRY', 'HEALTH DIARY ENTRY'), ('RED_FLAG', 'RED FLAG')], max_length=36)),
('request', models.TextField()),
('status', models.CharField(choices=[('PENDING', 'PENDING'), ('IN PROGRESS', 'IN PROGRESS'), ('RESOLVED', 'RESOLVED')], default='PENDING', max_length=36)),
('in_progress_at', models.DateTimeField(blank=True, null=True)),
('resolved_at', models.DateTimeField(blank=True, null=True)),
('client', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='clients.client')),
('in_progress_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='service_request_in_progress_by_users', to=settings.AUTH_USER_MODEL)),
('organisation', models.ForeignKey(default=mycarehub.users.models.default_organisation, on_delete=django.db.models.deletion.PROTECT, related_name='clients_servicerequest_related', to='common.organisation')),
('resolved_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='service_request_resolved_by_users', to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ('-updated', '-created'),
'abstract': False,
},
managers=[
('objects', mycarehub.common.models.base_models.AbstractBaseManager()),
],
),
]
45 changes: 45 additions & 0 deletions mycarehub/clients/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,3 +344,48 @@ class HealthDiaryQuote(AbstractBase):
"""

quote = models.TextField(unique=True)


class ServiceRequest(AbstractBase):
"""
ServiceRequest is used to consolidate service requests sent by clients.
"""

class ServiceRequestType(models.TextChoices):
HEALTH_DIARY_ENTRY = "HEALTH_DIARY_ENTRY", _("HEALTH DIARY ENTRY")
RED_FLAG = "RED_FLAG", _("RED FLAG")

class ServiceRequestStatus(models.TextChoices):
PENDING = "PENDING", _("PENDING")
IN_PROGRESS = "IN PROGRESS", _("IN PROGRESS")
RESOLVED = "RESOLVED", _("RESOLVED")

client = models.ForeignKey(Client, on_delete=models.PROTECT)
request_type = models.CharField(
choices=ServiceRequestType.choices,
max_length=36,
)
request = models.TextField()
status = models.CharField(
choices=ServiceRequestStatus.choices,
max_length=36,
default=ServiceRequestStatus.PENDING,
)

in_progress_by = models.ForeignKey(
get_user_model(),
null=True,
blank=True,
on_delete=models.PROTECT,
related_name="service_request_in_progress_by_users",
)
in_progress_at = models.DateTimeField(null=True, blank=True)

resolved_by = models.ForeignKey(
get_user_model(),
null=True,
blank=True,
on_delete=models.PROTECT,
related_name="service_request_resolved_by_users",
)
resolved_at = models.DateTimeField(null=True, blank=True)
7 changes: 7 additions & 0 deletions mycarehub/clients/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from mycarehub.clients.models import (
Client,
ClientFacility,
HealthDiaryAttachment,
Identifier,
RelatedPerson,
SecurityQuestion,
Expand Down Expand Up @@ -58,3 +59,9 @@ class Meta:
field_mapping = {
PhoneNumberField: make_form_serializer_field(CharField),
}


class HealthDiaryAttachmentSerializer(ModelSerializer):
class Meta:
model = HealthDiaryAttachment
fields = "__all__"
7 changes: 7 additions & 0 deletions mycarehub/clients/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from mycarehub.clients.models import (
Client,
ClientFacility,
HealthDiaryAttachment,
Identifier,
RelatedPerson,
SecurityQuestion,
Expand All @@ -16,6 +17,7 @@
ClientFacilitySerializer,
ClientRegistrationSerializer,
ClientSerializer,
HealthDiaryAttachmentSerializer,
IdentifierSerializer,
RelatedPersonSerializer,
SecurityQuestionResponseSerializer,
Expand Down Expand Up @@ -55,6 +57,11 @@ class ClientFacilityViewSet(ModelViewSet):
serializer_class = ClientFacilitySerializer


class HealthDiaryAttachmentViewSet(ModelViewSet):
queryset = HealthDiaryAttachment.objects.order_by("pk")
serializer_class = HealthDiaryAttachmentSerializer


class ClientRegistrationView(APIView):
queryset = Client.objects.all() # to enable model permissions
serializer_class = ClientRegistrationSerializer
Expand Down

0 comments on commit 499932a

Please sign in to comment.