Commit 877e25ed authored by Ilham Maulana's avatar Ilham Maulana 💻

fix: member loan filter by near outstanding and overdue api

parent 6e18cf16
......@@ -13,8 +13,22 @@ class BookLoanSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
data = super().to_representation(instance)
remaining_loan_time = timezone.now().day - instance.due_date.day
data["remaining_loan_time"] = str(abs(remaining_loan_time)) + " days left"
now = timezone.now()
remaining_loan_time = instance.due_date - now
days = remaining_loan_time.days
hours, remainder = divmod(remaining_loan_time.seconds, 3600)
minutes = remainder // 60
time_string = ""
if days > 0:
time_string += f"{days} days"
if hours > 0:
time_string += f" {hours} hrs"
if minutes > 0:
time_string += f" {minutes} mins"
data["remaining_loan_time"] = time_string + " days left"
return data
class Meta:
......
......@@ -57,4 +57,25 @@ class MemberLoanViewSet(BookLoanViewSet):
def get_queryset(self):
member_id = self.kwargs.get("member_id")
now = timezone.now()
due_date_treshold = now + timezone.timedelta(days=3)
near_outstanding = self.request.query_params.get("near_outstanding")
overdue = self.request.query_params.get("overdue")
if near_outstanding:
return (
BookLoan.objects.filter(member=member_id)
.filter(due_date__lte=due_date_treshold, return_date=None)
.filter(due_date__gte=now)
.order_by("loan_date")
)
if overdue:
return (
BookLoan.objects.filter(member=member_id)
.filter(due_date__lte=now, return_date=None)
.order_by("loan_date")
)
return BookLoan.objects.filter(member=member_id).order_by("loan_date")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment