fix: update payment entry references (#33274)
* fix: set_amounts after deductions and losses are set * test: difference_amount changes after update_references_in_payment_entry * chore: linter * fix: use kwargs instad of destructing a dict [skip ci] * fix(test): test payment entry difference_amount after payment reconciliation.
This commit is contained in:
		
							parent
							
								
									bb4725e9b5
								
							
						
					
					
						commit
						98c39c4f5f
					
				| @ -3,11 +3,14 @@ import unittest | ||||
| import frappe | ||||
| from frappe.test_runner import make_test_objects | ||||
| 
 | ||||
| from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry | ||||
| from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice | ||||
| from erpnext.accounts.party import get_party_shipping_address | ||||
| from erpnext.accounts.utils import ( | ||||
| 	get_future_stock_vouchers, | ||||
| 	get_voucherwise_gl_entries, | ||||
| 	sort_stock_vouchers_by_posting_date, | ||||
| 	update_reference_in_payment_entry, | ||||
| ) | ||||
| from erpnext.stock.doctype.item.test_item import make_item | ||||
| from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt | ||||
| @ -73,6 +76,47 @@ class TestUtils(unittest.TestCase): | ||||
| 		sorted_vouchers = sort_stock_vouchers_by_posting_date(list(reversed(vouchers))) | ||||
| 		self.assertEqual(sorted_vouchers, vouchers) | ||||
| 
 | ||||
| 	def test_update_reference_in_payment_entry(self): | ||||
| 		item = make_item().name | ||||
| 
 | ||||
| 		purchase_invoice = make_purchase_invoice( | ||||
| 			item=item, supplier="_Test Supplier USD", currency="USD", conversion_rate=82.32 | ||||
| 		) | ||||
| 		purchase_invoice.submit() | ||||
| 
 | ||||
| 		payment_entry = get_payment_entry(purchase_invoice.doctype, purchase_invoice.name) | ||||
| 		payment_entry.target_exchange_rate = 62.9 | ||||
| 		payment_entry.paid_amount = 15725 | ||||
| 		payment_entry.deductions = [] | ||||
| 		payment_entry.insert() | ||||
| 
 | ||||
| 		self.assertEqual(payment_entry.difference_amount, -4855.00) | ||||
| 		payment_entry.references = [] | ||||
| 		payment_entry.submit() | ||||
| 
 | ||||
| 		payment_reconciliation = frappe.new_doc("Payment Reconciliation") | ||||
| 		payment_reconciliation.company = payment_entry.company | ||||
| 		payment_reconciliation.party_type = "Supplier" | ||||
| 		payment_reconciliation.party = purchase_invoice.supplier | ||||
| 		payment_reconciliation.receivable_payable_account = payment_entry.paid_to | ||||
| 		payment_reconciliation.get_unreconciled_entries() | ||||
| 		payment_reconciliation.allocate_entries( | ||||
| 			{ | ||||
| 				"payments": [d.__dict__ for d in payment_reconciliation.payments], | ||||
| 				"invoices": [d.__dict__ for d in payment_reconciliation.invoices], | ||||
| 			} | ||||
| 		) | ||||
| 		for d in payment_reconciliation.invoices: | ||||
| 			# Reset invoice outstanding_amount because allocate_entries will zero this value out. | ||||
| 			d.outstanding_amount = d.amount | ||||
| 		for d in payment_reconciliation.allocation: | ||||
| 			d.difference_account = "Exchange Gain/Loss - _TC" | ||||
| 		payment_reconciliation.reconcile() | ||||
| 
 | ||||
| 		payment_entry.load_from_db() | ||||
| 		self.assertEqual(len(payment_entry.references), 1) | ||||
| 		self.assertEqual(payment_entry.difference_amount, 0) | ||||
| 
 | ||||
| 
 | ||||
| ADDRESS_RECORDS = [ | ||||
| 	{ | ||||
|  | ||||
| @ -611,11 +611,6 @@ def update_reference_in_payment_entry(d, payment_entry, do_not_save=False): | ||||
| 		new_row.docstatus = 1 | ||||
| 		new_row.update(reference_details) | ||||
| 
 | ||||
| 	payment_entry.flags.ignore_validate_update_after_submit = True | ||||
| 	payment_entry.setup_party_account_field() | ||||
| 	payment_entry.set_missing_values() | ||||
| 	payment_entry.set_amounts() | ||||
| 
 | ||||
| 	if d.difference_amount and d.difference_account: | ||||
| 		account_details = { | ||||
| 			"account": d.difference_account, | ||||
| @ -627,6 +622,11 @@ def update_reference_in_payment_entry(d, payment_entry, do_not_save=False): | ||||
| 
 | ||||
| 		payment_entry.set_gain_or_loss(account_details=account_details) | ||||
| 
 | ||||
| 	payment_entry.flags.ignore_validate_update_after_submit = True | ||||
| 	payment_entry.setup_party_account_field() | ||||
| 	payment_entry.set_missing_values() | ||||
| 	payment_entry.set_amounts() | ||||
| 
 | ||||
| 	if not do_not_save: | ||||
| 		payment_entry.save(ignore_permissions=True) | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										0
									
								
								erpnext/www/book-appointment/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								erpnext/www/book-appointment/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								erpnext/www/book-appointment/verify/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								erpnext/www/book-appointment/verify/__init__.py
									
									
									
									
									
										Normal file
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user