Skip to content

Commit dc13eb5

Browse files
committed
[18.0][IMP] account_reconcile_oca: onchange manual_partner_id
Manual partner change on liquidity line updates other lines and ensures the consistent partner across all displayed reconcile lines (like in enterprise). Updating partner on other lines does not propagate.
1 parent 9b9695f commit dc13eb5

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

account_reconcile_oca/models/account_bank_statement_line.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,7 @@ def _onchange_manual_reconcile_vals(self):
508508
in_currency_date,
509509
)
510510
self.previous_manual_amount_in_currency = self.manual_amount_in_currency
511+
edited_is_liquidity = False
511512
for line in data:
512513
if line["reference"] == self.manual_reference:
513514
if self._check_line_changed(line):
@@ -516,7 +517,8 @@ def _onchange_manual_reconcile_vals(self):
516517
line["kind"] if line["kind"] != "suspense" else "other"
517518
)
518519
line.update(line_vals)
519-
if line["kind"] == "liquidity":
520+
edited_is_liquidity = line.get("kind") == "liquidity"
521+
if edited_is_liquidity:
520522
self._update_move_partner()
521523
if self.manual_line_id and self.manual_line_id.id == line.get(
522524
"original_exchange_line_id"
@@ -544,6 +546,30 @@ def _onchange_manual_reconcile_vals(self):
544546
)
545547
self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False)
546548

549+
# Ensure the UI shows consistent partner across all displayed lines:
550+
# only when editing liquidity line
551+
if not edited_is_liquidity:
552+
return
553+
partner_value = (
554+
[self.manual_partner_id.id, self.manual_partner_id.display_name]
555+
if self.manual_partner_id
556+
else False
557+
)
558+
info = dict(self.reconcile_data_info or {})
559+
reconcile_lines = list(info.get("data") or [])
560+
if not reconcile_lines:
561+
self.reconcile_data_info = info
562+
return
563+
updated_lines = []
564+
for line in reconcile_lines:
565+
new_line = dict(line)
566+
# Update only the "other" displayed line(s)
567+
if new_line.get("kind") != "liquidity":
568+
new_line["partner_id"] = partner_value
569+
updated_lines.append(new_line)
570+
info["data"] = updated_lines
571+
self.reconcile_data_info = info
572+
547573
def _update_move_partner(self):
548574
if self.partner_id == self.manual_partner_id:
549575
return

account_reconcile_oca/tests/test_bank_account_reconcile.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,3 +1473,63 @@ def test_invoice_foreign_currency_late_change_of_rate(self):
14731473
self.assertEqual(3, len(f.reconcile_data_info["data"]))
14741474
self.assertTrue(f.can_reconcile)
14751475
self.assertEqual(f.reconcile_data_info["data"][-1]["amount"], 3.63)
1476+
1477+
def test_manual_partner_on_liquidity_propagates_to_other_line(self):
1478+
# GIVEN
1479+
partner = self.env["res.partner"].create({"name": "Widget Partner Propagate"})
1480+
bank_stmt = self.acc_bank_stmt_model.create(
1481+
{
1482+
"journal_id": self.bank_journal_euro.id,
1483+
"date": time.strftime("%Y-07-15"),
1484+
"name": "test",
1485+
}
1486+
)
1487+
bank_stmt_line = self.acc_bank_stmt_line_model.create(
1488+
{
1489+
"name": "testLine",
1490+
"journal_id": self.bank_journal_euro.id,
1491+
"statement_id": bank_stmt.id,
1492+
"amount": 100,
1493+
"date": time.strftime("%Y-07-15"),
1494+
}
1495+
)
1496+
with Form(
1497+
bank_stmt_line,
1498+
view="account_reconcile_oca_2.bank_statement_line_form_reconcile_view",
1499+
) as f:
1500+
widget_lines = f.reconcile_data_info["data"]
1501+
liquidity_line = None
1502+
for line_data in widget_lines:
1503+
if line_data.get("kind") == "liquidity" and line_data.get("id"):
1504+
liquidity_line = line_data
1505+
break
1506+
self.assertTrue(liquidity_line)
1507+
non_liquidity_line = None
1508+
for line_data in widget_lines:
1509+
if line_data.get("kind") != "liquidity":
1510+
non_liquidity_line = line_data
1511+
break
1512+
self.assertTrue(non_liquidity_line)
1513+
partner_display_format = [partner.id, partner.display_name]
1514+
initial_partner = non_liquidity_line.get("partner_id")
1515+
self.assertNotEqual(
1516+
initial_partner,
1517+
partner_display_format,
1518+
)
1519+
# WHEN
1520+
f.manual_reference = f"account.move.line;{liquidity_line['id']}"
1521+
f.manual_partner_id = partner
1522+
# THEN
1523+
updated_widget_lines = f.reconcile_data_info["data"]
1524+
updated_non_liquidity_line = None
1525+
for line_data in updated_widget_lines:
1526+
if line_data.get("kind") != "liquidity":
1527+
updated_non_liquidity_line = line_data
1528+
break
1529+
self.assertTrue(
1530+
updated_non_liquidity_line,
1531+
)
1532+
self.assertEqual(
1533+
updated_non_liquidity_line.get("partner_id"),
1534+
partner_display_format,
1535+
)

0 commit comments

Comments
 (0)