Skip to content

Commit

Permalink
feat:site mentorship questionnaire (#158)
Browse files Browse the repository at this point in the history
- Mini deployment to demo site mentorship questionnaire
  • Loading branch information
saladgg committed Nov 19, 2021
1 parent 93c9fbe commit 102fcaa
Show file tree
Hide file tree
Showing 64 changed files with 3,846 additions and 333 deletions.
2 changes: 1 addition & 1 deletion .coveragerc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[run]
branch=True
source=fahari
omit=fahari/config/*,fahari/**/migrations/*,scripts/*,fahari/**/tests/*
omit=fahari/config/*,fahari/**/migrations/*,scripts/*,fahari/**/tests/*,fahari/sims/*

[report]
exclude_lines =
Expand Down
4 changes: 2 additions & 2 deletions config/api_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@
FacilitySystemTicketViewSet,
FacilitySystemViewSet,
SecurityIncidenceViewSet,
SiteMentorshipViewSet,
StockReceiptVerificationViewSet,
TimeSheetViewSet,
UoMCategoryViewSet,
UoMViewSet,
WeeklyProgramUpdateCommentsViewSet,
WeeklyProgramUpdateViewSet,
)
from fahari.sims.views import QuestionnaireResponseViewSet
from fahari.users.api.views import UserViewSet

if settings.DEBUG:
Expand All @@ -35,7 +35,6 @@
router.register("tickets", FacilitySystemTicketViewSet)
router.register("stock_receipts", StockReceiptVerificationViewSet)
router.register("activity_logs", ActivityLogViewSet)
router.register("site_mentorships", SiteMentorshipViewSet)
router.register("daily_updates", DailyUpdateViewSet)
router.register("timesheets", TimeSheetViewSet)
router.register("weekly_updates", WeeklyProgramUpdateViewSet)
Expand All @@ -49,6 +48,7 @@
router.register("facility_device_requests", FacilityDeviceRequestViewSet)
router.register("security_incidents", SecurityIncidenceViewSet)
router.register("stock_receipts_adapters", StockVerificationReceiptsAdapterView)
router.register("questionnaire_responses", QuestionnaireResponseViewSet)

app_name = "api"
urlpatterns = router.urls
1 change: 1 addition & 0 deletions config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
"fahari.ops.apps.OpsConfig",
"fahari.mle.apps.MLEConfig",
"fahari.misc.apps.MiscConfig",
"fahari.sims.apps.SimsConfig",
]
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS

Expand Down
1 change: 1 addition & 0 deletions config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
# Our apps
path("common/", include("fahari.common.urls", namespace="common")),
path("ops/", include("fahari.ops.urls", namespace="ops")),
path("sims/", include("fahari.sims.urls", namespace="sims")),
# favicon
re_path(
r"^favicon\.ico$",
Expand Down
1,467 changes: 1,467 additions & 0 deletions data/service_delivery_questionnaire.json

Large diffs are not rendered by default.

11 changes: 0 additions & 11 deletions fahari/ops/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
FacilitySystem,
FacilitySystemTicket,
SecurityIncidence,
SiteMentorship,
StockReceiptVerification,
TimeSheet,
UoM,
Expand Down Expand Up @@ -65,16 +64,6 @@ class Meta:
fields = "__all__"


class SiteMentorshipFilter(CommonFieldsFilterset):

search = filters.SearchFilter()

class Meta:

model = SiteMentorship
fields = "__all__"


class DailyUpdateFilter(CommonFieldsFilterset):

search = filters.SearchFilter()
Expand Down
30 changes: 0 additions & 30 deletions fahari/ops/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
FacilitySystem,
FacilitySystemTicket,
SecurityIncidence,
SiteMentorship,
StockReceiptVerification,
TimeSheet,
UoM,
Expand Down Expand Up @@ -222,35 +221,6 @@ class Meta(BaseModelForm.Meta):
}


class SiteMentorshipForm(GetAllottedFacilitiesMixin, BaseModelForm):
field_order = (
"staff_member",
"site",
"day",
"duration",
"objective",
"pick_up_point",
"drop_off_point",
"active",
)

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper.form_id = "site_mentorship_form"
self.fields["site"].queryset = self.get_allotted_facilities().active()

class Meta(BaseModelForm.Meta):
model = SiteMentorship
widgets = {
"day": TextInput(
attrs={
"type": "date",
}
),
"site": SearchableComboBox(),
}


class DailyUpdateForm(GetAllottedFacilitiesMixin, BaseModelForm):
field_order = (
"facility",
Expand Down
16 changes: 16 additions & 0 deletions fahari/ops/migrations/0034_delete_sitementorship.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Generated by Django 3.2.9 on 2021-11-15 13:00

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('ops', '0033_auto_20211015_0829'),
]

operations = [
migrations.DeleteModel(
name='SiteMentorship',
),
]
29 changes: 0 additions & 29 deletions fahari/ops/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,35 +246,6 @@ class Meta:
)


class SiteMentorship(AbstractBase):
staff_member = models.ForeignKey(User, on_delete=models.PROTECT)
day = models.DateField(default=timezone.datetime.today)
duration = models.DurationField(
help_text="HH:MM:SS e.g '08:00:00' for 8 hours",
default="08:00:00",
)
site = models.ForeignKey(Facility, on_delete=models.PROTECT)
objective = models.TextField()
pick_up_point = models.TextField()
drop_off_point = models.TextField()

def get_absolute_url(self):
update_url = reverse_lazy("ops:site_mentorship_update", kwargs={"pk": self.pk})
return update_url

def __str__(self) -> str:
return (
f"Site Mentorship: {self.staff_member.name} "
+ f"at {self.site.name} on {self.day} (for {self.duration})"
)

class Meta:
ordering = (
"-day",
"site__name",
)


class DailyUpdate(AbstractBase):
"""
Daily updates from facilities.
Expand Down
10 changes: 0 additions & 10 deletions fahari/ops/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
FacilitySystem,
FacilitySystemTicket,
SecurityIncidence,
SiteMentorship,
StockReceiptVerification,
TimeSheet,
UoM,
Expand Down Expand Up @@ -72,15 +71,6 @@ class Meta(BaseSerializer.Meta):
fields = "__all__"


class SiteMentorshipSerializer(BaseSerializer):
staff_member_name = serializers.ReadOnlyField(source="staff_member.name")
site_name = serializers.ReadOnlyField(source="site.name")

class Meta(BaseSerializer.Meta):
model = SiteMentorship
fields = "__all__"


class DailyUpdateSerializer(BaseSerializer):
facility_name = serializers.ReadOnlyField(source="facility.name")

Expand Down
148 changes: 0 additions & 148 deletions fahari/ops/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
FacilitySystem,
FacilitySystemTicket,
SecurityIncidence,
SiteMentorship,
StockReceiptVerification,
TimeSheet,
UoM,
Expand Down Expand Up @@ -651,153 +650,6 @@ def test_delete(self):
)


class SiteMentorshipViewsetTest(LoggedInMixin, APITestCase):
def setUp(self):
self.url_list = reverse("api:sitementorship-list")
self.detail_url_name = "api:sitementorship-detail"
self.facility = baker.make(
Facility,
is_fahari_facility=True,
county=random.choice(WHITELIST_COUNTIES),
organisation=self.global_organisation,
)
super().setUp()

def test_create(self):
data = {
"staff_member": self.user.pk,
"site": self.facility.pk,
"day": date.today().isoformat(),
"objective": fake.text(),
"pick_up_point": fake.text(),
"drop_off_point": fake.text(),
"organisation": self.global_organisation.pk,
}
response = self.client.post(self.url_list, data)
assert response.status_code == 201, response.json()
assert response.data["objective"] == data["objective"]

def test_retrieve(self):
instance = baker.make(
SiteMentorship,
site=self.facility,
staff_member=self.user,
organisation=self.global_organisation,
)
response = self.client.get(self.url_list)
assert response.status_code == 200, response.json()
assert response.data["count"] >= 1, response.json()

facilities = [a["id"] for a in response.data["results"]]
assert str(instance.pk) in facilities

def test_patch(self):
instance = baker.make(
SiteMentorship,
site=self.facility,
staff_member=self.user,
organisation=self.global_organisation,
)
edit = {"active": False}
url = reverse(self.detail_url_name, kwargs={"pk": instance.pk})
response = self.client.patch(url, edit)

assert response.status_code == 200, response.json()
assert response.data["active"] == edit["active"]

def test_put(self):
instance = baker.make(
SiteMentorship,
site=self.facility,
organisation=self.global_organisation,
)
data = {
"staff_member": self.user.pk,
"site": self.facility.pk,
"day": date.today().isoformat(),
"objective": fake.text(),
"pick_up_point": fake.text(),
"drop_off_point": fake.text(),
"organisation": self.global_organisation.pk,
"active": False,
}
url = reverse(self.detail_url_name, kwargs={"pk": instance.pk})
response = self.client.put(url, data)

assert response.status_code == 200, response.json()
assert response.data["active"] == data["active"]


class SiteMentorshipFormTest(LoggedInMixin, TestCase):
def setUp(self):
self.facility = baker.make(
Facility,
is_fahari_facility=True,
county=random.choice(WHITELIST_COUNTIES),
organisation=self.global_organisation,
)
super().setUp()

def test_create(self):
data = {
"staff_member": self.user.pk,
"site": self.facility.pk,
"day": date.today().isoformat(),
"duration": "08:00:00",
"objective": fake.text(),
"pick_up_point": fake.text(),
"drop_off_point": fake.text(),
"organisation": self.global_organisation.pk,
}
response = self.client.post(reverse("ops:site_mentorship_create"), data=data)
self.assertEqual(
response.status_code,
302,
)

def test_update(self):
instance = baker.make(
SiteMentorship,
site=self.facility,
staff_member=self.user,
organisation=self.global_organisation,
)
data = {
"pk": instance.pk,
"staff_member": self.user.pk,
"site": self.facility.pk,
"day": date.today().isoformat(),
"duration": "08:00:00",
"objective": fake.text(),
"pick_up_point": fake.text(),
"drop_off_point": fake.text(),
"organisation": self.global_organisation.pk,
"active": False,
}
response = self.client.post(
reverse("ops:site_mentorship_update", kwargs={"pk": instance.pk}), data=data
)
self.assertEqual(
response.status_code,
302,
)

def test_delete(self):
instance = baker.make(
SiteMentorship,
site=self.facility,
staff_member=self.user,
organisation=self.global_organisation,
)
response = self.client.post(
reverse("ops:site_mentorship_delete", kwargs={"pk": instance.pk}),
)
self.assertEqual(
response.status_code,
302,
)


class DailyUpdateViewsetTest(LoggedInMixin, APITestCase):
def setUp(self):
self.url_list = reverse("api:dailyupdate-list")
Expand Down
2 changes: 0 additions & 2 deletions fahari/ops/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
FacilitySystemTicket,
OperationalArea,
SecurityIncidence,
SiteMentorship,
StockReceiptVerification,
TimeSheet,
UoM,
Expand Down Expand Up @@ -201,7 +200,6 @@ def test_string_reprs():
models = [
TimeSheet,
ActivityLog,
SiteMentorship,
DailyUpdate,
StockReceiptVerification,
OperationalArea,
Expand Down
7 changes: 0 additions & 7 deletions fahari/ops/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,6 @@ def test_activity_log_view(user_with_all_permissions, client):
assert response.status_code == status.HTTP_200_OK


def test_site_mentorship_view(user_with_all_permissions, client):
client.force_login(user_with_all_permissions)
url = reverse("ops:site_mentorships")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_daily_site_updates_view(user_with_all_permissions, client):
client.force_login(user_with_all_permissions)
url = reverse("ops:daily_site_updates")
Expand Down
Loading

0 comments on commit 102fcaa

Please sign in to comment.