mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-31 18:59:08 +00:00
refactor: filter only immediate upcoming payment term for each SO (#33923)
* fix: ignore closed or 'on hold' orders * refactor: filter immediate upcoming term --------- Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
This commit is contained in:
@@ -103,6 +103,11 @@ function get_filters() {
|
|||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"only_immediate_upcoming_term",
|
||||||
|
"label": __("Show only the Immediate Upcoming Term"),
|
||||||
|
"fieldtype": "Check",
|
||||||
|
},
|
||||||
]
|
]
|
||||||
return filters;
|
return filters;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe import _, qb, query_builder
|
from frappe import _, qb, query_builder
|
||||||
from frappe.query_builder import Criterion, functions
|
from frappe.query_builder import Criterion, functions
|
||||||
|
from frappe.utils.dateutils import getdate
|
||||||
|
|
||||||
|
|
||||||
def get_columns():
|
def get_columns():
|
||||||
@@ -208,6 +209,7 @@ def get_so_with_invoices(filters):
|
|||||||
)
|
)
|
||||||
.where(
|
.where(
|
||||||
(so.docstatus == 1)
|
(so.docstatus == 1)
|
||||||
|
& (so.status.isin(["To Deliver and Bill", "To Bill"]))
|
||||||
& (so.payment_terms_template != "NULL")
|
& (so.payment_terms_template != "NULL")
|
||||||
& (so.company == conditions.company)
|
& (so.company == conditions.company)
|
||||||
& (so.transaction_date[conditions.start_date : conditions.end_date])
|
& (so.transaction_date[conditions.start_date : conditions.end_date])
|
||||||
@@ -291,6 +293,18 @@ def filter_on_calculated_status(filters, sales_orders):
|
|||||||
return sales_orders
|
return sales_orders
|
||||||
|
|
||||||
|
|
||||||
|
def filter_for_immediate_upcoming_term(filters, sales_orders):
|
||||||
|
if filters.only_immediate_upcoming_term and sales_orders:
|
||||||
|
immediate_term_found = set()
|
||||||
|
filtered_data = []
|
||||||
|
for order in sales_orders:
|
||||||
|
if order.name not in immediate_term_found and order.due_date > getdate():
|
||||||
|
filtered_data.append(order)
|
||||||
|
immediate_term_found.add(order.name)
|
||||||
|
return filtered_data
|
||||||
|
return sales_orders
|
||||||
|
|
||||||
|
|
||||||
def execute(filters=None):
|
def execute(filters=None):
|
||||||
columns = get_columns()
|
columns = get_columns()
|
||||||
sales_orders, so_invoices = get_so_with_invoices(filters)
|
sales_orders, so_invoices = get_so_with_invoices(filters)
|
||||||
@@ -298,6 +312,8 @@ def execute(filters=None):
|
|||||||
|
|
||||||
sales_orders = filter_on_calculated_status(filters, sales_orders)
|
sales_orders = filter_on_calculated_status(filters, sales_orders)
|
||||||
|
|
||||||
|
sales_orders = filter_for_immediate_upcoming_term(filters, sales_orders)
|
||||||
|
|
||||||
prepare_chart(sales_orders)
|
prepare_chart(sales_orders)
|
||||||
|
|
||||||
data = sales_orders
|
data = sales_orders
|
||||||
|
|||||||
Reference in New Issue
Block a user