mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-24 23:49:19 +00:00
perf: fetch mode of payments data in single query
This commit is contained in:
@@ -1951,22 +1951,23 @@ def update_multi_mode_option(doc, pos_profile):
|
|||||||
def append_payment(payment_mode):
|
def append_payment(payment_mode):
|
||||||
payment = doc.append('payments', {})
|
payment = doc.append('payments', {})
|
||||||
payment.default = payment_mode.default
|
payment.default = payment_mode.default
|
||||||
payment.mode_of_payment = payment_mode.parent
|
payment.mode_of_payment = payment_mode.mop
|
||||||
payment.account = payment_mode.default_account
|
payment.account = payment_mode.default_account
|
||||||
payment.type = payment_mode.type
|
payment.type = payment_mode.type
|
||||||
|
|
||||||
doc.set('payments', [])
|
doc.set('payments', [])
|
||||||
invalid_modes = []
|
invalid_modes = []
|
||||||
for pos_payment_method in pos_profile.get('payments'):
|
mode_of_payments = [d.mode_of_payment for d in pos_profile.get('payments')]
|
||||||
pos_payment_method = pos_payment_method.as_dict()
|
mode_of_payments_info = get_mode_of_payments_info(mode_of_payments, doc.company)
|
||||||
|
|
||||||
payment_mode = get_mode_of_payment_info(pos_payment_method.mode_of_payment, doc.company)
|
for row in pos_profile.get('payments'):
|
||||||
|
payment_mode = mode_of_payments_info.get(row.mode_of_payment)
|
||||||
if not payment_mode:
|
if not payment_mode:
|
||||||
invalid_modes.append(get_link_to_form("Mode of Payment", pos_payment_method.mode_of_payment))
|
invalid_modes.append(get_link_to_form("Mode of Payment", row.mode_of_payment))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
payment_mode[0].default = pos_payment_method.default
|
payment_mode.default = row.default
|
||||||
append_payment(payment_mode[0])
|
append_payment(payment_mode)
|
||||||
|
|
||||||
if invalid_modes:
|
if invalid_modes:
|
||||||
if invalid_modes == 1:
|
if invalid_modes == 1:
|
||||||
@@ -1982,6 +1983,25 @@ def get_all_mode_of_payments(doc):
|
|||||||
where mpa.parent = mp.name and mpa.company = %(company)s and mp.enabled = 1""",
|
where mpa.parent = mp.name and mpa.company = %(company)s and mp.enabled = 1""",
|
||||||
{'company': doc.company}, as_dict=1)
|
{'company': doc.company}, as_dict=1)
|
||||||
|
|
||||||
|
def get_mode_of_payments_info(mode_of_payments, company):
|
||||||
|
data = frappe.db.sql(
|
||||||
|
"""
|
||||||
|
select
|
||||||
|
mpa.default_account, mpa.parent as mop, mp.type as type
|
||||||
|
from
|
||||||
|
`tabMode of Payment Account` mpa,`tabMode of Payment` mp
|
||||||
|
where
|
||||||
|
mpa.parent = mp.name and
|
||||||
|
mpa.company = %s and
|
||||||
|
mp.enabled = 1 and
|
||||||
|
mp.name in (%s)
|
||||||
|
group by
|
||||||
|
mp.name
|
||||||
|
""",
|
||||||
|
(company, mode_of_payments), as_dict=1)
|
||||||
|
|
||||||
|
return {row.get('mop'): row for row in data}
|
||||||
|
|
||||||
def get_mode_of_payment_info(mode_of_payment, company):
|
def get_mode_of_payment_info(mode_of_payment, company):
|
||||||
return frappe.db.sql("""
|
return frappe.db.sql("""
|
||||||
select mpa.default_account, mpa.parent, mp.type as type
|
select mpa.default_account, mpa.parent, mp.type as type
|
||||||
|
|||||||
Reference in New Issue
Block a user