oca-ocb-accounting/odoo-bringout-oca-ocb-account/account/models/account_full_reconcile.py
Ernad Husremovic 768b70e05e 19.0 vanilla
2026-03-09 09:30:07 +01:00

45 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models, Command
class AccountFullReconcile(models.Model):
_name = 'account.full.reconcile'
_description = "Full Reconcile"
partial_reconcile_ids = fields.One2many('account.partial.reconcile', 'full_reconcile_id', string='Reconciliation Parts')
reconciled_line_ids = fields.One2many('account.move.line', 'full_reconcile_id', string='Matched Journal Items')
@api.model_create_multi
def create(self, vals_list):
def get_ids(commands):
for command in commands:
if command[0] == Command.LINK:
yield command[1]
elif command[0] == Command.SET:
yield from command[2]
else:
raise ValueError("Unexpected command: %s" % command)
move_line_ids = [list(get_ids(vals.pop('reconciled_line_ids'))) for vals in vals_list]
partial_ids = [list(get_ids(vals.pop('partial_reconcile_ids'))) for vals in vals_list]
fulls = super(AccountFullReconcile, self.with_context(tracking_disable=True)).create(vals_list)
self.env.cr.execute_values("""
UPDATE account_move_line line
SET full_reconcile_id = source.full_id
FROM (VALUES %s) AS source(full_id, line_ids)
WHERE line.id = ANY(source.line_ids)
""", [(full.id, line_ids) for full, line_ids in zip(fulls, move_line_ids)], page_size=1000)
fulls.reconciled_line_ids.invalidate_recordset(['full_reconcile_id'], flush=False)
fulls.invalidate_recordset(['reconciled_line_ids'], flush=False)
self.env.cr.execute_values("""
UPDATE account_partial_reconcile partial
SET full_reconcile_id = source.full_id
FROM (VALUES %s) AS source(full_id, partial_ids)
WHERE partial.id = ANY(source.partial_ids)
""", [(full.id, line_ids) for full, line_ids in zip(fulls, partial_ids)], page_size=1000)
fulls.partial_reconcile_ids.invalidate_recordset(['full_reconcile_id'], flush=False)
fulls.invalidate_recordset(['partial_reconcile_ids'], flush=False)
self.env['account.partial.reconcile']._update_matching_number(fulls.reconciled_line_ids)
return fulls