diff --git a/erpnext/accounts/report/payment_ledger/payment_ledger.js b/erpnext/accounts/report/payment_ledger/payment_ledger.js index 9779844dc945..a5a4108f1df9 100644 --- a/erpnext/accounts/report/payment_ledger/payment_ledger.js +++ b/erpnext/accounts/report/payment_ledger/payment_ledger.js @@ -37,6 +37,29 @@ function get_filters() { }); } }, + { + "fieldname":"party_type", + "label": __("Party Type"), + "fieldtype": "Link", + "options": "Party Type", + "default": "", + on_change: function() { + frappe.query_report.set_filter_value('party', ""); + } + }, + { + "fieldname":"party", + "label": __("Party"), + "fieldtype": "MultiSelectList", + get_data: function(txt) { + if (!frappe.query_report.filters) return; + + let party_type = frappe.query_report.get_filter_value('party_type'); + if (!party_type) return; + + return frappe.db.get_link_options(party_type, txt); + }, + }, { "fieldname":"voucher_no", "label": __("Voucher No"), @@ -49,6 +72,20 @@ function get_filters() { "fieldtype": "Data", "width": 100, }, + { + "fieldname":"include_account_currency", + "label": __("Include Account Currency"), + "fieldtype": "Check", + "width": 100, + }, + { + "fieldname":"group_party", + "label": __("Group by Party"), + "fieldtype": "Check", + "width": 100, + }, + + ] return filters; diff --git a/erpnext/accounts/report/payment_ledger/payment_ledger.py b/erpnext/accounts/report/payment_ledger/payment_ledger.py index e470c2727e38..8875d2743fe2 100644 --- a/erpnext/accounts/report/payment_ledger/payment_ledger.py +++ b/erpnext/accounts/report/payment_ledger/payment_ledger.py @@ -17,34 +17,26 @@ def __init__(self, filters=None): self.ple = qb.DocType("Payment Ledger Entry") def init_voucher_dict(self): - if self.voucher_amount: - s = set() - # build a set of unique vouchers + # for each ple, using group_by_key to create a key and assign it to +/- list for ple in self.voucher_amount: - key = (ple.voucher_type, ple.voucher_no, ple.party) - s.add(key) - - # for each unique vouchers, initialize +/- list - for key in s: - self.voucher_dict[key] = frappe._dict(increase=list(), decrease=list()) + group_by_key = None + if not self.filters.group_party: + group_by_key = (ple.against_voucher_type, ple.against_voucher_no, ple.party) + else: + group_by_key = (ple.party_type, ple.party) - # for each ple, using against voucher and amount, assign it to +/- list - # group by against voucher - for ple in self.voucher_amount: - against_key = (ple.against_voucher_type, ple.against_voucher_no, ple.party) target = None - if self.voucher_dict.get(against_key): - if ple.amount > 0: - target = self.voucher_dict.get(against_key).increase - else: - target = self.voucher_dict.get(against_key).decrease + if ple.amount > 0: + target = self.voucher_dict.setdefault(group_by_key, {}).setdefault("increase", []) + else: + target = self.voucher_dict.setdefault(group_by_key, {}).setdefault("decrease", []) # this if condition will lose unassigned ple entries(against_voucher doc doesn't have ple) # need to somehow include the stray entries as well. if target is not None: entry = frappe._dict( - company=ple.company, + posting_date=ple.posting_date, account=ple.account, party_type=ple.party_type, party=ple.party, @@ -66,10 +58,10 @@ def build_data(self): for value in self.voucher_dict.values(): voucher_data = [] - if value.increase != []: - voucher_data.extend(value.increase) - if value.decrease != []: - voucher_data.extend(value.decrease) + if value.get("increase"): + voucher_data.extend(value.get("increase")) + if value.get("decrease"): + voucher_data.extend(value.get("decrease")) if voucher_data: # balance row @@ -117,6 +109,12 @@ def build_conditions(self): if self.filters.against_voucher_no: self.conditions.append(self.ple.against_voucher_no == self.filters.against_voucher_no) + if self.filters.party_type: + self.conditions.append(self.ple.party_type == self.filters.party_type) + + if self.filters.party: + self.conditions.append(self.ple.party.isin(self.filters.party)) + def get_data(self): ple = self.ple @@ -134,7 +132,13 @@ def get_data(self): def get_columns(self): options = None self.columns.append( - dict(label=_("Company"), fieldname="company", fieldtype="data", options=options, width="100") + dict( + label=_("Posting Date"), + fieldname="posting_date", + fieldtype="Date", + options=options, + width="100", + ) ) self.columns.append( @@ -160,7 +164,11 @@ def get_columns(self): ) self.columns.append( dict( - label=_("Voucher No"), fieldname="voucher_no", fieldtype="data", options=options, width="100" + label=_("Voucher No"), + fieldname="voucher_no", + fieldtype="Dynamic Link", + options="voucher_type", + width="100", ) ) self.columns.append( @@ -176,8 +184,8 @@ def get_columns(self): dict( label=_("Against Voucher No"), fieldname="against_voucher_no", - fieldtype="data", - options=options, + fieldtype="Dynamic Link", + options="against_voucher_type", width="100", ) ) @@ -209,7 +217,7 @@ def run(self): self.get_columns() self.get_data() - # initialize dictionary and group using against voucher + # initialize dictionary and group using key self.init_voucher_dict() # convert dictionary to list and add balance rows