|
4 | 4 | from odoo import api, models, fields, _ |
5 | 5 | from odoo.exceptions import UserError |
6 | 6 |
|
| 7 | +from collections import defaultdict |
| 8 | + |
7 | 9 |
|
8 | 10 | class AccountJournal(models.Model): |
9 | 11 | _inherit = 'account.journal' |
@@ -47,11 +49,34 @@ def _compute_compatible_edi_ids(self): |
47 | 49 |
|
48 | 50 | for journal in self: |
49 | 51 | compatible_edis = edi_formats.filtered(lambda e: e._is_compatible_with_journal(journal)) |
50 | | - journal.compatible_edi_ids += compatible_edis |
| 52 | + journal.compatible_edi_ids = compatible_edis |
51 | 53 |
|
52 | 54 | @api.depends('type', 'company_id', 'company_id.country_id') |
53 | 55 | def _compute_edi_format_ids(self): |
54 | 56 | edi_formats = self.env['account.edi.format'].search([]) |
| 57 | + journal_ids = self.ids |
| 58 | + |
| 59 | + if journal_ids: |
| 60 | + self._cr.execute(''' |
| 61 | + SELECT |
| 62 | + move.journal_id, |
| 63 | + ARRAY_AGG(doc.edi_format_id) AS edi_format_ids |
| 64 | + FROM account_edi_document doc |
| 65 | + JOIN account_move move ON move.id = doc.move_id |
| 66 | + WHERE doc.state IN ('to_cancel', 'to_send') |
| 67 | + AND move.journal_id IN %s |
| 68 | + GROUP BY move.journal_id |
| 69 | + ''', [tuple(journal_ids)]) |
| 70 | + protected_edi_formats_per_journal = {r[0]: set(r[1]) for r in self._cr.fetchall()} |
| 71 | + else: |
| 72 | + protected_edi_formats_per_journal = defaultdict(set) |
55 | 73 |
|
56 | 74 | for journal in self: |
57 | | - journal.edi_format_ids += edi_formats.filtered(lambda e: e._is_compatible_with_journal(journal)) |
| 75 | + enabled_edi_formats = edi_formats.filtered(lambda e: e._is_compatible_with_journal(journal) and |
| 76 | + e._is_enabled_by_default_on_journal(journal)) |
| 77 | + |
| 78 | + # The existing edi formats that are already in use so we can't remove it. |
| 79 | + protected_edi_format_ids = protected_edi_formats_per_journal.get(journal.id, set()) |
| 80 | + protected_edi_formats = journal.edi_format_ids.filtered(lambda e: e.id in protected_edi_format_ids) |
| 81 | + |
| 82 | + journal.edi_format_ids = enabled_edi_formats + protected_edi_formats |
0 commit comments