Merge pull request #38280 from frappe/mergify/bp/version-15-hotfix/pr-38257
refactor: optmize outstanding amount query (backport #38257)
This commit is contained in:
		
						commit
						0c3c36f658
					
				| @ -1171,6 +1171,7 @@ class TestPaymentReconciliation(FrappeTestCase): | |||||||
| 		# Should not raise frappe.exceptions.ValidationError: Payment Entry has been modified after you pulled it. Please pull it again. | 		# Should not raise frappe.exceptions.ValidationError: Payment Entry has been modified after you pulled it. Please pull it again. | ||||||
| 		pr.reconcile() | 		pr.reconcile() | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| def make_customer(customer_name, currency=None): | def make_customer(customer_name, currency=None): | ||||||
| 	if not frappe.db.exists("Customer", customer_name): | 	if not frappe.db.exists("Customer", customer_name): | ||||||
| 		customer = frappe.new_doc("Customer") | 		customer = frappe.new_doc("Customer") | ||||||
|  | |||||||
| @ -1826,6 +1826,28 @@ class QueryPaymentLedger(object): | |||||||
| 					Table("outstanding").amount_in_account_currency >= self.max_outstanding | 					Table("outstanding").amount_in_account_currency >= self.max_outstanding | ||||||
| 				) | 				) | ||||||
| 
 | 
 | ||||||
|  | 		if self.limit and self.get_invoices: | ||||||
|  | 			outstanding_vouchers = ( | ||||||
|  | 				qb.from_(ple) | ||||||
|  | 				.select( | ||||||
|  | 					ple.against_voucher_no.as_("voucher_no"), | ||||||
|  | 					Sum(ple.amount_in_account_currency).as_("amount_in_account_currency"), | ||||||
|  | 				) | ||||||
|  | 				.where(ple.delinked == 0) | ||||||
|  | 				.where(Criterion.all(filter_on_against_voucher_no)) | ||||||
|  | 				.where(Criterion.all(self.common_filter)) | ||||||
|  | 				.groupby(ple.against_voucher_type, ple.against_voucher_no, ple.party_type, ple.party) | ||||||
|  | 				.orderby(ple.posting_date, ple.voucher_no) | ||||||
|  | 				.having(qb.Field("amount_in_account_currency") > 0) | ||||||
|  | 				.limit(self.limit) | ||||||
|  | 				.run() | ||||||
|  | 			) | ||||||
|  | 			if outstanding_vouchers: | ||||||
|  | 				filter_on_voucher_no.append(ple.voucher_no.isin([x[0] for x in outstanding_vouchers])) | ||||||
|  | 				filter_on_against_voucher_no.append( | ||||||
|  | 					ple.against_voucher_no.isin([x[0] for x in outstanding_vouchers]) | ||||||
|  | 				) | ||||||
|  | 
 | ||||||
| 		# build query for voucher amount | 		# build query for voucher amount | ||||||
| 		query_voucher_amount = ( | 		query_voucher_amount = ( | ||||||
| 			qb.from_(ple) | 			qb.from_(ple) | ||||||
|  | |||||||
| @ -663,7 +663,7 @@ def make_contact(args, is_primary_contact=1): | |||||||
| 				"company_name": args.get(party_name_key), | 				"company_name": args.get(party_name_key), | ||||||
| 			} | 			} | ||||||
| 		) | 		) | ||||||
| 		 | 
 | ||||||
| 	contact = frappe.get_doc(values) | 	contact = frappe.get_doc(values) | ||||||
| 
 | 
 | ||||||
| 	if args.get("email_id"): | 	if args.get("email_id"): | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user