Simplified the query in the ledger summary in the accounting application.
This commit is contained in:
		@@ -23,7 +23,7 @@ from datetime import timedelta
 | 
			
		||||
 | 
			
		||||
from django.db import connection
 | 
			
		||||
from django.db.models import Sum, Case, When, F
 | 
			
		||||
from django.db.models.functions import TruncMonth
 | 
			
		||||
from django.db.models.functions import TruncMonth, Coalesce
 | 
			
		||||
from django.http import HttpResponseRedirect, Http404
 | 
			
		||||
from django.shortcuts import render
 | 
			
		||||
from django.urls import reverse
 | 
			
		||||
@@ -466,23 +466,18 @@ def ledger_summary(request, subject_code):
 | 
			
		||||
    if current_subject is None:
 | 
			
		||||
        raise Http404()
 | 
			
		||||
    # The accounting records
 | 
			
		||||
    records = [RecordSummary(
 | 
			
		||||
        month=x["month"],
 | 
			
		||||
        debit=x["debit"] if x["debit"] is not None else 0,
 | 
			
		||||
        credit=x["credit"] if x["credit"] is not None else 0,
 | 
			
		||||
        balance=x["balance"],
 | 
			
		||||
    ) for x in Record.objects\
 | 
			
		||||
    records = [RecordSummary(**x) for x in Record.objects\
 | 
			
		||||
        .filter(subject__code__startswith=current_subject.code)\
 | 
			
		||||
        .annotate(month=TruncMonth("transaction__date"))\
 | 
			
		||||
        .values("month")\
 | 
			
		||||
        .order_by("month")\
 | 
			
		||||
        .annotate(
 | 
			
		||||
        debit=Sum(Case(
 | 
			
		||||
            When(is_credit=False, then=F("amount"))),
 | 
			
		||||
            default=0),
 | 
			
		||||
        credit=Sum(Case(
 | 
			
		||||
            When(is_credit=True, then=F("amount"))),
 | 
			
		||||
            default=0),
 | 
			
		||||
        debit=Coalesce(
 | 
			
		||||
            Sum(Case(When(is_credit=False, then=F("amount")))),
 | 
			
		||||
            0),
 | 
			
		||||
        credit=Coalesce(
 | 
			
		||||
            Sum(Case(When(is_credit=True, then=F("amount")))),
 | 
			
		||||
            0),
 | 
			
		||||
        balance=Sum(Case(
 | 
			
		||||
            When(is_credit=False, then=F("amount")),
 | 
			
		||||
            default=-F("amount"))))]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user