Skip to content

Commit c995e74

Browse files
authored
Merge pull request #10 from openimis/feature/CM-316
CM-316: added condition to processs unpaid payroll too
2 parents 8ac0e3d + 9cbd709 commit c995e74

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

payroll/gql_mutations.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class PayrollStatusEnum(graphene.Enum):
3838
payment_point_id = graphene.UUID(required=True)
3939
status = graphene.Field(PayrollStatusEnum, required=True)
4040
payment_method = graphene.String(required=True, max_length=255)
41+
included_unpaid = graphene.Boolean(required=True)
4142

4243
date_valid_from = graphene.Date(required=False)
4344
date_valid_to = graphene.Date(required=False)

payroll/services.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22

33
from django.db import transaction
4+
from django.db.models import Q
45
from django.contrib.contenttypes.models import ContentType
56

67
from core.custom_filters import CustomFilterWizardStorage
@@ -49,8 +50,9 @@ def __init__(self, user, validation_class=PayrollValidation):
4950
def create(self, obj_data):
5051
try:
5152
with transaction.atomic():
53+
included_unpaid = obj_data.pop("included_unpaid", False)
5254
obj_data = self._adjust_create_payload(obj_data)
53-
bills_queryset = self._get_bills_queryset(obj_data)
55+
bills_queryset = self._get_bills_queryset(obj_data, included_unpaid)
5456
obj_data_and_bills = {**obj_data, "bills": bills_queryset}
5557
self.validation_class.validate_create(self.user, **obj_data_and_bills)
5658
obj_ = self.OBJECT_TYPE(**obj_data)
@@ -96,7 +98,7 @@ def _create_payroll_bills(self, bills_queryset, payroll_id):
9698
payroll_bill = PayrollBill(bill_id=bill.id, payroll_id=payroll_id)
9799
payroll_bill.save(username=self.user.username)
98100

99-
def _get_bills_queryset(self, obj_data):
101+
def _get_bills_queryset(self, obj_data, included_unpaid):
100102
benefit_plan_id = obj_data.get("benefit_plan_id")
101103
date_from = obj_data.get("date_valid_from")
102104
date_to = obj_data.get("date_valid_to")
@@ -129,4 +131,12 @@ def _get_bills_queryset(self, obj_data):
129131
status__in=[Bill.Status.VALIDATED]
130132
)
131133

134+
if included_unpaid:
135+
bills_queryset = bills_queryset.filter(json_ext__unpaid=True)
136+
else:
137+
bills_queryset = bills_queryset.filter(
138+
Q(json_ext__unpaid=False) |
139+
Q(json_ext__unpaid__isnull=True)
140+
)
141+
132142
return bills_queryset

payroll/tests/payroll_gql_tests.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from graphene.test import Client
66
from django.test import TestCase
77
from django.contrib.contenttypes.models import ContentType
8+
from django.db.models import Q
89

910
from individual.models import Individual
1011
from individual.tests.data import service_add_individual_payload
@@ -213,6 +214,26 @@ def test_delete_unauthorized(self):
213214
payroll_bill.delete(username=self.user.username)
214215
self.assertTrue(PayrollBill.objects.filter(payroll=payroll, bill=self.bill, is_deleted=True))
215216

217+
def test_check_bill_included_unpaid(self):
218+
self.bill.json_ext = {"unpaid": True}
219+
self.bill.save(username=self.user.username)
220+
bills_queryset_not_paid = Bill.objects.filter(json_ext__unpaid=True)
221+
bills_queryset = Bill.objects.filter(
222+
Q(json_ext__unpaid=False) |
223+
Q(json_ext__unpaid__isnull=True)
224+
)
225+
self.assertGreaterEqual(bills_queryset_not_paid.count(), 1)
226+
self.assertEqual(bills_queryset.count(), 0)
227+
228+
def test_check_bill_not_included_unpaid(self):
229+
bills_queryset_not_paid = Bill.objects.filter(json_ext__unpaid=True)
230+
bills_queryset = Bill.objects.filter(
231+
Q(json_ext__unpaid=False) |
232+
Q(json_ext__unpaid__isnull=True)
233+
)
234+
self.assertEqual(bills_queryset_not_paid.count(), 0)
235+
self.assertGreaterEqual(bills_queryset.count(), 1)
236+
216237
@classmethod
217238
def __create_benefit_plan(cls):
218239
object_data = {

0 commit comments

Comments
 (0)