Skip to content

Commit

Permalink
Merge pull request #369 from 8848digital/329-payment-terms-status-for…
Browse files Browse the repository at this point in the history
…-sales-order-report-showing-error-1_issue

329-payment-terms-status-for-sales-order-report-showing-error-1_issue
  • Loading branch information
tinadn authored Oct 22, 2024
2 parents daa4df0 + b173f85 commit 014d4d1
Showing 1 changed file with 38 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

import frappe
from frappe import _, qb, query_builder
from frappe.query_builder import Criterion, functions
from frappe.query_builder import Criterion, functions,Case
from frappe.utils.dateutils import getdate

from frappe.utils import today

def get_columns():
columns = [
Expand Down Expand Up @@ -171,6 +171,7 @@ def build_filter_criterions(filters):


def get_so_with_invoices(filters):

"""
Get Sales Order with payment terms template with their associated Invoices
"""
Expand All @@ -182,39 +183,36 @@ def get_so_with_invoices(filters):

conditions = get_conditions(filters)
filter_criterions = build_filter_criterions(filters)

datediff = query_builder.CustomFunction("DATEDIFF", ["cur_date", "due_date"])
ifelse = query_builder.CustomFunction("IF", ["condition", "then", "else"])

status_case = Case().when((ps.due_date - str(today())) < 0, "Overdue").else_("Unpaid")
query_so = (
qb.from_(so)
.join(soi)
.on(soi.parent == so.name)
.join(ps)
.on(ps.parent == so.name)
.select(so.name)
.distinct()
.select(
so.customer,
so.transaction_date.as_("submitted"),
ifelse(datediff(ps.due_date, functions.CurDate()) < 0, "Overdue", "Unpaid").as_("status"),
ps.payment_term,
ps.description,
ps.due_date,
ps.invoice_portion,
ps.base_payment_amount,
ps.paid_amount,
)
.where(
(so.docstatus == 1)
& (so.status.isin(["To Deliver and Bill", "To Bill"]))
& (so.company == conditions.company)
& (so.transaction_date[conditions.start_date : conditions.end_date])
)
.where(Criterion.all(filter_criterions))
.orderby(so.name, so.transaction_date, ps.due_date)
qb.from_(so)
.join(soi)
.on(soi.parent == so.name)
.join(ps)
.on(ps.parent == so.name)
.select(so.name)
.distinct()
.select(
so.customer,
so.transaction_date.as_("submitted"),
status_case,
ps.payment_term,
ps.description,
ps.due_date,
ps.invoice_portion,
ps.base_payment_amount,
ps.paid_amount,
)
.where(
(so.docstatus == 1)
& (so.status.isin(["To Deliver and Bill", "To Bill"]))
& (so.company == conditions.company)
& (so.transaction_date[conditions.start_date : conditions.end_date])
)
.where(Criterion.all(filter_criterions))
.orderby(so.name, so.transaction_date, ps.due_date)
)

sorders = query_so.run(as_dict=True)

invoices = []
Expand All @@ -223,17 +221,16 @@ def get_so_with_invoices(filters):
si = qb.DocType("Sales Invoice")
sii = qb.DocType("Sales Invoice Item")
query_inv = (
qb.from_(sii)
.right_join(si)
.on(si.name == sii.parent)
.inner_join(soi)
.on(soi.name == sii.so_detail)
.select(sii.sales_order, sii.parent.as_("invoice"), si.base_grand_total.as_("invoice_amount"))
.where((sii.sales_order.isin([x.name for x in sorders])) & (si.docstatus == 1))
.groupby(sii.parent)
qb.from_(sii)
.right_join(si)
.on(si.name == sii.parent)
.inner_join(soi)
.on(soi.name == sii.so_detail)
.select(sii.sales_order, sii.parent.as_("invoice"), si.base_grand_total.as_("invoice_amount"))
.where((sii.sales_order.isin([x.name for x in sorders])) & (si.docstatus == 1))
.groupby(sii.parent, sii.sales_order, si.base_grand_total)
)
invoices = query_inv.run(as_dict=True)

return sorders, invoices


Expand Down

0 comments on commit 014d4d1

Please sign in to comment.