Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[17.0][IMP] account_reconcile_oca: Allow to select all lines at once #799

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions account_reconcile_oca/i18n/account_reconcile_oca.pot
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,13 @@ msgstr ""
msgid "Add Bank Statement Line"
msgstr ""

#. module: account_reconcile_oca
#. odoo-javascript
#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0
#, python-format
msgid "Add all"
msgstr ""

#. module: account_reconcile_oca
#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id
msgid "Aggregate"
Expand Down
9 changes: 8 additions & 1 deletion account_reconcile_oca/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-01-29 18:52+0000\n"
"PO-Revision-Date: 2025-02-12 08:24+0000\n"
"Last-Translator: \"Pedro M. Baeza\" <pedro.baeza@tecnativa.com>\n"
"Language-Team: none\n"
"Language: es\n"
Expand Down Expand Up @@ -58,6 +58,13 @@ msgstr "Añadir apunte contable"
msgid "Add Bank Statement Line"
msgstr "Añadir línea de extracto bancario"

#. module: account_reconcile_oca
#. odoo-javascript
#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0
#, python-format
msgid "Add all"
msgstr "Añadir todo"

#. module: account_reconcile_oca
#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id
msgid "Aggregate"
Expand Down
24 changes: 16 additions & 8 deletions account_reconcile_oca/models/account_account_reconcile.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,16 +132,17 @@
@api.onchange("add_account_move_line_id")
def _onchange_add_account_move_line(self):
if self.add_account_move_line_id:
data = self.reconcile_data_info
if self.add_account_move_line_id.id not in data["counterparts"]:
data["counterparts"].append(self.add_account_move_line_id.id)
else:
del data["counterparts"][
data["counterparts"].index(self.add_account_move_line_id.id)
]
self.reconcile_data_info = self._recompute_data(data)
self._add_account_move_line(self.add_account_move_line_id)
self.add_account_move_line_id = False

def _add_account_move_line(self, move_line, keep_current=False):
data = self.reconcile_data_info
if move_line.id not in data["counterparts"]:
data["counterparts"].append(move_line.id)
elif not keep_current:
del data["counterparts"][data["counterparts"].index(move_line.id)]

Check warning on line 143 in account_reconcile_oca/models/account_account_reconcile.py

View check run for this annotation

Codecov / codecov/patch

account_reconcile_oca/models/account_account_reconcile.py#L143

Added line #L143 was not covered by tests
self.reconcile_data_info = self._recompute_data(data)

@api.onchange("manual_reference", "manual_delete")
def _onchange_manual_reconcile_reference(self):
self.ensure_one()
Expand Down Expand Up @@ -187,6 +188,13 @@
)
data_record.unlink()

def add_multiple_lines(self, domain):
res = super().add_multiple_lines(domain)
lines = self.env["account.move.line"].search(domain)

Check warning on line 193 in account_reconcile_oca/models/account_account_reconcile.py

View check run for this annotation

Codecov / codecov/patch

account_reconcile_oca/models/account_account_reconcile.py#L192-L193

Added lines #L192 - L193 were not covered by tests
for line in lines:
self._add_account_move_line(line, keep_current=True)
return res

Check warning on line 196 in account_reconcile_oca/models/account_account_reconcile.py

View check run for this annotation

Codecov / codecov/patch

account_reconcile_oca/models/account_account_reconcile.py#L195-L196

Added lines #L195 - L196 were not covered by tests


class AccountAccountReconcileData(models.TransientModel):
_name = "account.account.reconcile.data"
Expand Down
66 changes: 38 additions & 28 deletions account_reconcile_oca/models/account_bank_statement_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,36 +194,39 @@
@api.onchange("add_account_move_line_id")
def _onchange_add_account_move_line_id(self):
if self.add_account_move_line_id:
data = self.reconcile_data_info["data"]
new_data = []
is_new_line = True
pending_amount = 0.0
currency = self._get_reconcile_currency()
for line in data:
if line["kind"] != "suspense":
pending_amount += self._get_amount_currency(line, currency)
if self.add_account_move_line_id.id in line.get(
"counterpart_line_ids", []
):
is_new_line = False
else:
self._add_account_move_line(self.add_account_move_line_id)
self.add_account_move_line_id = False

def _add_account_move_line(self, move_line, keep_current=False):
data = self.reconcile_data_info["data"]
new_data = []
is_new_line = True
pending_amount = 0.0
currency = self._get_reconcile_currency()
for line in data:
if line["kind"] != "suspense":
pending_amount += self._get_amount_currency(line, currency)
if move_line.id in line.get("counterpart_line_ids", []):
is_new_line = False
if keep_current:
new_data.append(line)
if is_new_line:
reconcile_auxiliary_id, lines = self._get_reconcile_line(
self.add_account_move_line_id,
"other",
is_counterpart=True,
max_amount=currency.round(pending_amount),
move=True,
)
new_data += lines
self.reconcile_data_info = self._recompute_suspense_line(
new_data,
self.reconcile_data_info["reconcile_auxiliary_id"],
self.manual_reference,
else:
new_data.append(line)
if is_new_line:
reconcile_auxiliary_id, lines = self._get_reconcile_line(
move_line,
"other",
is_counterpart=True,
max_amount=currency.round(pending_amount),
move=True,
)
self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False)
self.add_account_move_line_id = False
new_data += lines
self.reconcile_data_info = self._recompute_suspense_line(
new_data,
self.reconcile_data_info["reconcile_auxiliary_id"],
self.manual_reference,
)
self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False)

def _recompute_suspense_line(self, data, reconcile_auxiliary_id, manual_reference):
can_reconcile = True
Expand Down Expand Up @@ -1260,3 +1263,10 @@
or self.journal_id.currency_id
or self.company_id.currency_id
)

def add_multiple_lines(self, domain):
res = super().add_multiple_lines(domain)
lines = self.env["account.move.line"].search(domain)

Check warning on line 1269 in account_reconcile_oca/models/account_bank_statement_line.py

View check run for this annotation

Codecov / codecov/patch

account_reconcile_oca/models/account_bank_statement_line.py#L1268-L1269

Added lines #L1268 - L1269 were not covered by tests
for line in lines:
self._add_account_move_line(line, keep_current=True)
return res

Check warning on line 1272 in account_reconcile_oca/models/account_bank_statement_line.py

View check run for this annotation

Codecov / codecov/patch

account_reconcile_oca/models/account_bank_statement_line.py#L1271-L1272

Added lines #L1271 - L1272 were not covered by tests
3 changes: 3 additions & 0 deletions account_reconcile_oca/models/account_reconcile_abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,6 @@
if is_counterpart:
vals["counterpart_line_ids"] = line.ids
return [vals]

def add_multiple_lines(self, domain):
self.ensure_one()

Check warning on line 129 in account_reconcile_oca/models/account_reconcile_abstract.py

View check run for this annotation

Codecov / codecov/patch

account_reconcile_oca/models/account_reconcile_abstract.py#L129

Added line #L129 was not covered by tests
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ export class ReconcileMoveLineController extends ListController {
data[this.props.parentField] = [record.resId, record.display_name];
this.props.parentRecord.update(data);
}
async clickAddAll() {
await this.props.parentRecord.save();
await this.orm.call(this.props.parentRecord.resModel, "add_multiple_lines", [
this.props.parentRecord.resIds,
this.model.root.domain,
]);
await this.props.parentRecord.load();
this.props.parentRecord.model.notify();
}
}

ReconcileMoveLineController.template = `account_reconcile_oca.ReconcileMoveLineController`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export const ReconcileMoveLineView = {
...listView,
Controller: ReconcileMoveLineController,
Renderer: ReconcileMoveLineRenderer,
buttonTemplate: "reconcile_move_line.ListView.Buttons",
};

registry.category("views").add("reconcile_move_line", ReconcileMoveLineView);
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export class AccountReconcileMatchWidget extends Component {
controlPanel: {
// Hiding the control panel buttons
"top-left": false,
"bottom-left": false,
"bottom-left": true,
layoutActions: false,
},
},
Expand All @@ -49,6 +49,7 @@ export class AccountReconcileMatchWidget extends Component {
searchViewId: false,
parentRecord: this.props.record,
parentField: this.props.name,
showButtons: false,
};
}
}
Expand Down
3 changes: 3 additions & 0 deletions account_reconcile_oca/static/src/xml/reconcile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -200,4 +200,7 @@
<attribute name="parentField">props.parentField</attribute>
</xpath>
</t>
<t t-name="reconcile_move_line.ListView.Buttons">
<button class="btn btn-primary" t-on-click="clickAddAll">Add all</button>
</t>
</templates>