Skip to content

Commit

Permalink
include submission time slot in opportunity API
Browse files Browse the repository at this point in the history
  • Loading branch information
sravfeyn committed Oct 9, 2024
1 parent c8549a7 commit dca64e5
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 13 deletions.
15 changes: 3 additions & 12 deletions commcare_connect/form_receiver/tests/test_receiver_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -464,12 +464,9 @@ def test_reciever_verification_flags_form_submission(
user_with_connectid_link: User, api_client: APIClient, opportunity: Opportunity
):
verification_flags = OpportunityVerificationFlags.objects.get(opportunity=opportunity)
verification_flags.form_submission_start = datetime.time(hour=10, minute=0)
verification_flags.form_submission_end = datetime.time(hour=12, minute=0)
verification_flags.save()

form_json = _create_opp_and_form_json(opportunity, user=user_with_connectid_link)
time = datetime.datetime(2024, 4, 17, 10, 0, 0)
time = datetime.datetime(2024, 4, 17, verification_flags.form_submission_start.hour, 0, 0)
form_json["metadata"]["timeStart"] = time
form_json["metadata"]["timeEnd"] = time + datetime.timedelta(minutes=10)
make_request(api_client, form_json, user_with_connectid_link)
Expand All @@ -481,12 +478,9 @@ def test_reciever_verification_flags_form_submission_start(
user_with_connectid_link: User, api_client: APIClient, opportunity: Opportunity
):
verification_flags = OpportunityVerificationFlags.objects.get(opportunity=opportunity)
verification_flags.form_submission_start = datetime.time(hour=10, minute=0)
verification_flags.form_submission_end = datetime.time(hour=12, minute=0)
verification_flags.save()

form_json = _create_opp_and_form_json(opportunity, user=user_with_connectid_link)
time = datetime.datetime(2024, 4, 17, 9, 0, 0)
time = datetime.datetime(2024, 4, 17, verification_flags.form_submission_start.hour - 1, 0, 0)
form_json["metadata"]["timeStart"] = time
make_request(api_client, form_json, user_with_connectid_link)
visit = UserVisit.objects.get(user=user_with_connectid_link)
Expand All @@ -498,12 +492,9 @@ def test_reciever_verification_flags_form_submission_end(
user_with_connectid_link: User, api_client: APIClient, opportunity: Opportunity
):
verification_flags = OpportunityVerificationFlags.objects.get(opportunity=opportunity)
verification_flags.form_submission_start = datetime.time(hour=10, minute=0)
verification_flags.form_submission_end = datetime.time(hour=12, minute=0)
verification_flags.save()

form_json = _create_opp_and_form_json(opportunity, user=user_with_connectid_link)
time = datetime.datetime(2024, 4, 17, 13, 0, 0)
time = datetime.datetime(2024, 4, 17, verification_flags.form_submission_end.hour + 1, 0, 0)
form_json["metadata"]["timeStart"] = time
make_request(api_client, form_json, user_with_connectid_link)
visit = UserVisit.objects.get(user=user_with_connectid_link)
Expand Down
19 changes: 19 additions & 0 deletions commcare_connect/opportunity/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from functools import lru_cache

from django.conf import settings
from django.db.models import Sum
from rest_framework import serializers
Expand All @@ -15,6 +17,7 @@
OpportunityAccess,
OpportunityClaim,
OpportunityClaimLimit,
OpportunityVerificationFlags,
Payment,
PaymentUnit,
UserVisit,
Expand Down Expand Up @@ -105,6 +108,8 @@ class OpportunitySerializer(serializers.ModelSerializer):
payment_units = serializers.SerializerMethodField()
is_user_suspended = serializers.SerializerMethodField()
catchment_areas = serializers.SerializerMethodField()
start_time_threshold = serializers.SerializerMethodField()
end_time_threshold = serializers.SerializerMethodField()

class Meta:
model = Opportunity
Expand Down Expand Up @@ -133,6 +138,8 @@ class Meta:
"payment_units",
"is_user_suspended",
"catchment_areas",
"start_time_threshold",
"end_time_threshold",
]

def get_claim(self, obj):
Expand Down Expand Up @@ -178,6 +185,18 @@ def get_catchment_areas(self, obj):
catchments = CatchmentArea.objects.filter(opportunity_access=opp_access)
return CatchmentAreaSerializer(catchments, many=True).data

@lru_cache
def _get_flags(self, obj):
return OpportunityVerificationFlags.objects.filter(opportunity=obj).first()

def get_start_time_threshold(self, obj):
flags = self._get_flags(obj)
return flags.form_submission_start

def get_end_time_threshold(self, obj):
flags = self._get_flags(obj)
return flags.form_submission_end


@quickcache(vary_on=["user.pk", "opportunity.pk"], timeout=60 * 60)
def _get_opp_access(user, opportunity):
Expand Down
4 changes: 3 additions & 1 deletion commcare_connect/opportunity/tests/factories.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from datetime import timezone
from datetime import time, timezone

from factory import DictFactory, Faker, LazyAttribute, SelfAttribute, SubFactory
from factory.django import DjangoModelFactory
Expand Down Expand Up @@ -72,6 +72,8 @@ class Meta:

class OpportunityVerificationFlagsFactory(DjangoModelFactory):
opportunity = SubFactory(OpportunityFactory)
form_submission_start = time(10, 0, 0)
form_submission_end = time(12, 0, 0)

class Meta:
model = "opportunity.OpportunityVerificationFlags"
Expand Down
4 changes: 4 additions & 0 deletions commcare_connect/opportunity/tests/test_api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
OpportunityAccess,
OpportunityClaim,
OpportunityClaimLimit,
OpportunityVerificationFlags,
Payment,
VisitValidationStatus,
)
Expand Down Expand Up @@ -160,6 +161,9 @@ def test_opportunity_list_endpoint(
assert response.data[0]["budget_per_visit"] == max([pu.amount for pu in payment_units])
claim_limits = OpportunityClaimLimit.objects.filter(opportunity_claim__opportunity_access__opportunity=opportunity)
assert response.data[0]["claim"]["max_payments"] == sum([cl.max_visits for cl in claim_limits])
verification_flags = OpportunityVerificationFlags.objects.get(opportunity=opportunity)
assert response.data[0]["start_time_threshold"] == verification_flags.form_submission_start
assert response.data[0]["end_time_threshold"] == verification_flags.form_submission_end


def test_delivery_progress_endpoint(
Expand Down

0 comments on commit dca64e5

Please sign in to comment.