From 929132a1d122ac3fb5dda2f66ef1ec4b16f789ec Mon Sep 17 00:00:00 2001 From: duongtq Date: Mon, 1 Jul 2024 14:24:16 +0700 Subject: [PATCH 01/12] [ADD] edi_exchange_deduplicate_oca --- edi_exchange_deduplicate_oca/README.rst | 107 ++++ edi_exchange_deduplicate_oca/__init__.py | 1 + edi_exchange_deduplicate_oca/__manifest__.py | 19 + edi_exchange_deduplicate_oca/data/cron.xml | 19 + .../models/__init__.py | 3 + .../models/edi_backend.py | 49 ++ .../models/edi_exchange_record.py | 54 +++ .../models/edi_exchange_type.py | 21 + .../readme/CONFIGURE.rst | 3 + .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 3 + edi_exchange_deduplicate_oca/readme/USAGE.rst | 6 + .../static/description/index.html | 455 ++++++++++++++++++ .../tests/__init__.py | 2 + .../tests/test_edi_backend_cron.py | 39 ++ .../tests/test_edi_duplicate.py | 137 ++++++ .../views/edi_exchange_type_views.xml | 17 + 17 files changed, 937 insertions(+) create mode 100644 edi_exchange_deduplicate_oca/README.rst create mode 100644 edi_exchange_deduplicate_oca/__init__.py create mode 100644 edi_exchange_deduplicate_oca/__manifest__.py create mode 100644 edi_exchange_deduplicate_oca/data/cron.xml create mode 100644 edi_exchange_deduplicate_oca/models/__init__.py create mode 100644 edi_exchange_deduplicate_oca/models/edi_backend.py create mode 100644 edi_exchange_deduplicate_oca/models/edi_exchange_record.py create mode 100644 edi_exchange_deduplicate_oca/models/edi_exchange_type.py create mode 100644 edi_exchange_deduplicate_oca/readme/CONFIGURE.rst create mode 100644 edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.rst create mode 100644 edi_exchange_deduplicate_oca/readme/DESCRIPTION.rst create mode 100644 edi_exchange_deduplicate_oca/readme/USAGE.rst create mode 100644 edi_exchange_deduplicate_oca/static/description/index.html create mode 100644 edi_exchange_deduplicate_oca/tests/__init__.py create mode 100644 edi_exchange_deduplicate_oca/tests/test_edi_backend_cron.py create mode 100644 edi_exchange_deduplicate_oca/tests/test_edi_duplicate.py create mode 100644 edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml diff --git a/edi_exchange_deduplicate_oca/README.rst b/edi_exchange_deduplicate_oca/README.rst new file mode 100644 index 000000000..390f500cc --- /dev/null +++ b/edi_exchange_deduplicate_oca/README.rst @@ -0,0 +1,107 @@ +============================ +Edi Exchange Deduplicate OCA +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c87271df5c59b606335e18395349874d1aeb6aa3e1cddff1bd724ba7a84e5712 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi--framework-lightgray.png?logo=github + :target: https://github.com/OCA/edi-framework/tree/16.0/edi_exchange_deduplicate_oca + :alt: OCA/edi-framework +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/edi-framework-16-0/edi-framework-16-0-edi_exchange_deduplicate_oca + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/edi-framework&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds options for deduplication records before sending step on type: + - deduplicate_on_send: check if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete. + - delete_obsolete_records: Delete records marked as obsolete. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +Go to "EDI -> Config -> Exchange Type". + +Enable "Deduplicate on Send" option -> Enable "Delete obsolete records" option. + +Usage +===== + + +With all the types that have been enabled "Deduplicate on Send" option, this module will check their records if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete (except "block_obsolescence" records) + - "block_obsolescence" is an technical option on records to avoid marking them as obsolete. + +With all the types that have been enabled "Delete obsolete records" option, the cron will remove their obsolete records. + - If the records are obsolete, delete them even if their type's flag has been disabled. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Simone Orsi +* Duong (Tran Quoc) + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-simahawk| image:: https://github.com/simahawk.png?size=40px + :target: https://github.com/simahawk + :alt: simahawk +.. |maintainer-etobella| image:: https://github.com/etobella.png?size=40px + :target: https://github.com/etobella + :alt: etobella + +Current `maintainers `__: + +|maintainer-simahawk| |maintainer-etobella| + +This module is part of the `OCA/edi-framework `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/edi_exchange_deduplicate_oca/__init__.py b/edi_exchange_deduplicate_oca/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/edi_exchange_deduplicate_oca/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/edi_exchange_deduplicate_oca/__manifest__.py b/edi_exchange_deduplicate_oca/__manifest__.py new file mode 100644 index 000000000..f343c86c2 --- /dev/null +++ b/edi_exchange_deduplicate_oca/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2024 Camptocamp +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + "name": "Edi Exchange Deduplicate OCA", + "summary": """ + Introduce a deduplication mechanism at the sending step""", + "version": "16.0.1.0.0", + "license": "LGPL-3", + "author": "Camptocamp,Odoo Community Association (OCA)", + "maintainers": ["simahawk", "etobella"], + "website": "https://github.com/OCA/edi-framework", + "depends": ["edi_oca"], + "data": [ + "data/cron.xml", + "views/edi_exchange_type_views.xml", + ], + "demo": [], +} diff --git a/edi_exchange_deduplicate_oca/data/cron.xml b/edi_exchange_deduplicate_oca/data/cron.xml new file mode 100644 index 000000000..8e30571c9 --- /dev/null +++ b/edi_exchange_deduplicate_oca/data/cron.xml @@ -0,0 +1,19 @@ + + + + EDI exchange delete obsolete records + + + 1 + days + -1 + + + code + model.search([])._cron_delete_obsolete_records() + + diff --git a/edi_exchange_deduplicate_oca/models/__init__.py b/edi_exchange_deduplicate_oca/models/__init__.py new file mode 100644 index 000000000..ddad285da --- /dev/null +++ b/edi_exchange_deduplicate_oca/models/__init__.py @@ -0,0 +1,3 @@ +from . import edi_backend +from . import edi_exchange_type +from . import edi_exchange_record diff --git a/edi_exchange_deduplicate_oca/models/edi_backend.py b/edi_exchange_deduplicate_oca/models/edi_backend.py new file mode 100644 index 000000000..843fa264c --- /dev/null +++ b/edi_exchange_deduplicate_oca/models/edi_backend.py @@ -0,0 +1,49 @@ +# Copyright 2024 Camptocamp +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import logging + +from odoo import models + +_logger = logging.getLogger(__name__) + + +class EDIBackend(models.Model): + + _inherit = "edi.backend" + + def _failed_output_check_send_msg(self): + return "Nothing to do. Likely already sent or obsolete." + + def _cron_delete_obsolete_records(self, **kw): + for backend in self: + backend._delete_obsolete_records(**kw) + + def _delete_obsolete_records(self, record_ids=None, **kw): + """Cleanup obsolete records. + + Go through types with `delete_obsolete_records` flag on + and delete their obsolete records if any. + """ + obsolete_records = self.exchange_record_model.search( + self._obsolete_records_domain(record_ids=record_ids) + ) + _logger.info( + "EDI Exchange delete records: found %d obsolete records to delete.", + len(obsolete_records), + ) + if obsolete_records: + obsolete_records.unlink() + + def _obsolete_records_domain(self, record_ids=None): + """ + Domain for obsolete records need to delete. + If the record is obsolete, delete it even if the type's flag has been disabled. + """ + domain = [ + ("backend_id", "=", self.id), + ("edi_exchange_state", "=", "obsolete"), + ] + if record_ids: + domain.append(("id", "in", record_ids)) + return domain diff --git a/edi_exchange_deduplicate_oca/models/edi_exchange_record.py b/edi_exchange_deduplicate_oca/models/edi_exchange_record.py new file mode 100644 index 000000000..f1f2efb80 --- /dev/null +++ b/edi_exchange_deduplicate_oca/models/edi_exchange_record.py @@ -0,0 +1,54 @@ +# Copyright 2024 Camptocamp +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import api, fields, models + + +class EDIExchangeRecord(models.Model): + + _inherit = "edi.exchange.record" + + edi_exchange_state = fields.Selection( + selection_add=[ + ("obsolete", "Obsolete"), + ], + ondelete={"obsolete": "cascade"}, + ) + block_obsolescence = fields.Boolean( + default=False, + help="Flag record that can never be marked as obsolete", + ) + + @api.constrains("edi_exchange_state") + def _constrain_edi_exchange_state(self): + # Remove `obsolete` record for this check + self = self.filtered(lambda r: r.edi_exchange_state != "obsolete") + return super()._constrain_edi_exchange_state() + + @api.model_create_multi + def create(self, vals_list): + records = super().create(vals_list) + for rec in records: + check_obsoleted_record = ( + rec.type_id.direction == "output" and rec.type_id.deduplicate_on_send + ) + if check_obsoleted_record: + obsoleted_records = rec._edi_get_duplicates() + if obsoleted_records: + obsoleted_records.edi_exchange_state = "obsolete" + return records + + def _edi_get_duplicates(self, count=None): + self.ensure_one() + older_duplicates = self.search( + [ + ("id", "<", self.id), + ("res_id", "=", self.res_id), + ("model", "=", self.model), + ("type_id", "=", self.type_id.id), + ("edi_exchange_state", "in", ("new", "output_pending")), + ("block_obsolescence", "=", False), + ], + count=count, + ) + return older_duplicates diff --git a/edi_exchange_deduplicate_oca/models/edi_exchange_type.py b/edi_exchange_deduplicate_oca/models/edi_exchange_type.py new file mode 100644 index 000000000..c70cfaf7f --- /dev/null +++ b/edi_exchange_deduplicate_oca/models/edi_exchange_type.py @@ -0,0 +1,21 @@ +# Copyright 2024 Camptocamp +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class EDIExchangeType(models.Model): + + _inherit = "edi.exchange.type" + + deduplicate_on_send = fields.Boolean( + string="Deduplicate on Send", + default=False, + help="Before sending an exchange record, check if a fresher one does not " + "exist for same record; if so, mark oldest one as obsolete.", + ) + delete_obsolete_records = fields.Boolean( + string="Delete obsolete records", + default=True, + help="Delete records marked as obsolete.", + ) diff --git a/edi_exchange_deduplicate_oca/readme/CONFIGURE.rst b/edi_exchange_deduplicate_oca/readme/CONFIGURE.rst new file mode 100644 index 000000000..3838d41fe --- /dev/null +++ b/edi_exchange_deduplicate_oca/readme/CONFIGURE.rst @@ -0,0 +1,3 @@ +Go to "EDI -> Config -> Exchange Type". + +Enable "Deduplicate on Send" option -> Enable "Delete obsolete records" option. diff --git a/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.rst b/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..20b0da936 --- /dev/null +++ b/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Simone Orsi +* Duong (Tran Quoc) diff --git a/edi_exchange_deduplicate_oca/readme/DESCRIPTION.rst b/edi_exchange_deduplicate_oca/readme/DESCRIPTION.rst new file mode 100644 index 000000000..f0e131712 --- /dev/null +++ b/edi_exchange_deduplicate_oca/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module adds options for deduplication records before sending step on type: + - deduplicate_on_send: check if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete. + - delete_obsolete_records: Delete records marked as obsolete. diff --git a/edi_exchange_deduplicate_oca/readme/USAGE.rst b/edi_exchange_deduplicate_oca/readme/USAGE.rst new file mode 100644 index 000000000..61171bfe3 --- /dev/null +++ b/edi_exchange_deduplicate_oca/readme/USAGE.rst @@ -0,0 +1,6 @@ + +With all the types that have been enabled "Deduplicate on Send" option, this module will check their records if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete (except "block_obsolescence" records) + - "block_obsolescence" is an technical option on records to avoid marking them as obsolete. + +With all the types that have been enabled "Delete obsolete records" option, the cron will remove their obsolete records. + - If the records are obsolete, delete them even if their type's flag has been disabled. diff --git a/edi_exchange_deduplicate_oca/static/description/index.html b/edi_exchange_deduplicate_oca/static/description/index.html new file mode 100644 index 000000000..ea1e44368 --- /dev/null +++ b/edi_exchange_deduplicate_oca/static/description/index.html @@ -0,0 +1,455 @@ + + + + + +Edi Exchange Deduplicate OCA + + + +
+

Edi Exchange Deduplicate OCA

+ + +

Beta License: LGPL-3 OCA/edi-framework Translate me on Weblate Try me on Runboat

+
+
This module adds options for deduplication records before sending step on type:
+
    +
  • deduplicate_on_send: check if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete.
  • +
  • delete_obsolete_records: Delete records marked as obsolete.
  • +
+
+
+

Table of contents

+ +
+

Configuration

+

Go to “EDI -> Config -> Exchange Type”.

+

Enable “Deduplicate on Send” option -> Enable “Delete obsolete records” option.

+
+
+

Usage

+
+
With all the types that have been enabled “Deduplicate on Send” option, this module will check their records if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete (except “block_obsolescence” records)
+
    +
  • “block_obsolescence” is an technical option on records to avoid marking them as obsolete.
  • +
+
+
With all the types that have been enabled “Delete obsolete records” option, the cron will remove their obsolete records.
+
    +
  • If the records are obsolete, delete them even if their type’s flag has been disabled.
  • +
+
+
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainers:

+

simahawk etobella

+

This module is part of the OCA/edi-framework project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/edi_exchange_deduplicate_oca/tests/__init__.py b/edi_exchange_deduplicate_oca/tests/__init__.py new file mode 100644 index 000000000..c4bb24c72 --- /dev/null +++ b/edi_exchange_deduplicate_oca/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_edi_backend_cron +from . import test_edi_duplicate diff --git a/edi_exchange_deduplicate_oca/tests/test_edi_backend_cron.py b/edi_exchange_deduplicate_oca/tests/test_edi_backend_cron.py new file mode 100644 index 000000000..8d71e1640 --- /dev/null +++ b/edi_exchange_deduplicate_oca/tests/test_edi_backend_cron.py @@ -0,0 +1,39 @@ +# Copyright 2024 Camptocamp +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo.tools import mute_logger + +from odoo.addons.edi_oca.tests.test_edi_backend_cron import EDIBackendTestCronCase + +LOGGERS = ("odoo.addons.edi_oca.models.edi_backend", "odoo.addons.queue_job.delay") + + +class EDIBackendTestCronDeduplicationCase(EDIBackendTestCronCase): + @mute_logger(*LOGGERS) + def test_exchange_delete_obsolete_records(self): + self.exchange_type_out.write( + { + "exchange_file_auto_generate": True, + "deduplicate_on_send": True, + "delete_obsolete_records": True, + } + ) + record1_1 = self.backend.create_record( + "test_csv_output", {"model": self.partner._name, "res_id": self.partner.id} + ) + record1_2 = self.backend.create_record( + "test_csv_output", {"model": self.partner._name, "res_id": self.partner.id} + ) + record1_3 = self.backend.create_record( + "test_csv_output", {"model": self.partner._name, "res_id": self.partner.id} + ) + # all the older records should have been obsolete by record1_3 + records = self.record1 + record1_1 + record1_2 + self.backend._check_output_exchange_sync() + for record in records: + self.assertEqual(record.edi_exchange_state, "obsolete") + self.assertEqual(record1_3.edi_exchange_state, "output_sent") + self.backend._delete_obsolete_records() + for record in records: + self.assertFalse(record.exists()) + self.assertTrue(record1_3.exists()) diff --git a/edi_exchange_deduplicate_oca/tests/test_edi_duplicate.py b/edi_exchange_deduplicate_oca/tests/test_edi_duplicate.py new file mode 100644 index 000000000..36ff9c92f --- /dev/null +++ b/edi_exchange_deduplicate_oca/tests/test_edi_duplicate.py @@ -0,0 +1,137 @@ +# Copyright 2024 Camptocamp +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo.addons.edi_oca.tests.common import EDIBackendCommonComponentRegistryTestCase +from odoo.addons.edi_oca.tests.fake_components import ( + FakeInputProcess, + FakeOutputChecker, + FakeOutputGenerator, + FakeOutputSender, +) + +LOGGERS = ("odoo.addons.edi_oca.models.edi_backend", "odoo.addons.queue_job.delay") + + +class EDIDeduplicateTestCase(EDIBackendCommonComponentRegistryTestCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._build_components( + cls, + FakeOutputGenerator, + FakeOutputSender, + FakeOutputChecker, + FakeInputProcess, + ) + cls.partner = cls.env.ref("base.res_partner_10") + cls.exchange_type_out.exchange_file_auto_generate = True + + def setUp(self): + super().setUp() + FakeOutputGenerator.reset_faked() + FakeOutputSender.reset_faked() + FakeOutputChecker.reset_faked() + FakeInputProcess.reset_faked() + + def test_deduplicate_on_send(self): + self.exchange_type_out.write( + { + "deduplicate_on_send": True, + } + ) + record1 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + }, + ) + record2 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + }, + ) + record3 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + }, + ) + records = record1 + record2 + self.backend._check_output_exchange_sync() + # Because we just sent the last record, so the others should be "obsolete" + for record in records: + self.assertEqual(record.edi_exchange_state, "obsolete") + self.assertEqual(record3.edi_exchange_state, "output_sent") + + def test_no_deduplicate_on_send(self): + self.exchange_type_out.write( + { + "deduplicate_on_send": False, + } + ) + record1 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + }, + ) + record2 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + }, + ) + record3 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + }, + ) + records = record1 + record2 + record3 + self.backend._check_output_exchange_sync() + # All the records should be "output_sent" + for record in records: + self.assertEqual(record.edi_exchange_state, "output_sent") + + def test_block_obsolescence(self): + self.exchange_type_out.write( + { + "deduplicate_on_send": True, + } + ) + record1 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + }, + ) + record2 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + # Checking + "block_obsolescence": True, + }, + ) + record3 = self.backend.create_record( + "test_csv_output", + { + "model": self.partner._name, + "res_id": self.partner.id, + }, + ) + self.backend._check_output_exchange_sync() + # Normally, record2 has been "obsolete" + # But with block_obsolescence = True, it will be "output_sent" too + self.assertEqual(record1.edi_exchange_state, "obsolete") + self.assertEqual(record2.edi_exchange_state, "output_sent") + self.assertEqual(record3.edi_exchange_state, "output_sent") diff --git a/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml b/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml new file mode 100644 index 000000000..821c20f1b --- /dev/null +++ b/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml @@ -0,0 +1,17 @@ + + + + edi.exchange.type.form.inherit + edi.exchange.type + + + + + + + + + From 20be3e48488146a38a445de0ef3c0a645e4f261d Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 25 Jul 2024 06:26:00 +0000 Subject: [PATCH 02/12] [UPD] Update edi_exchange_deduplicate_oca.pot --- .../i18n/edi_exchange_deduplicate_oca.pot | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 edi_exchange_deduplicate_oca/i18n/edi_exchange_deduplicate_oca.pot diff --git a/edi_exchange_deduplicate_oca/i18n/edi_exchange_deduplicate_oca.pot b/edi_exchange_deduplicate_oca/i18n/edi_exchange_deduplicate_oca.pot new file mode 100644 index 000000000..28481a0bc --- /dev/null +++ b/edi_exchange_deduplicate_oca/i18n/edi_exchange_deduplicate_oca.pot @@ -0,0 +1,77 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * edi_exchange_deduplicate_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_type__deduplicate_on_send +msgid "" +"Before sending an exchange record, check if a fresher one does not exist for" +" same record; if so, mark oldest one as obsolete." +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_record__block_obsolescence +msgid "Block Obsolescence" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_type__deduplicate_on_send +msgid "Deduplicate on Send" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_type__delete_obsolete_records +msgid "Delete obsolete records" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_type__delete_obsolete_records +msgid "Delete records marked as obsolete." +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_backend +msgid "EDI Backend" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_exchange_type +msgid "EDI Exchange Type" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_exchange_record +msgid "EDI exchange Record" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.actions.server,name:edi_exchange_deduplicate_oca.cron_edi_backend_delete_obsolete_records_ir_actions_server +#: model:ir.cron,cron_name:edi_exchange_deduplicate_oca.cron_edi_backend_delete_obsolete_records +msgid "EDI exchange delete obsolete records" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_record__edi_exchange_state +msgid "Exchange state" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_record__block_obsolescence +msgid "Flag record that can never be marked as obsolete" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields.selection,name:edi_exchange_deduplicate_oca.selection__edi_exchange_record__edi_exchange_state__obsolete +msgid "Obsolete" +msgstr "" From 3d655a355e75d3071e6bdc83f8692076996629cc Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 25 Jul 2024 06:29:08 +0000 Subject: [PATCH 03/12] [BOT] post-merge updates --- edi_exchange_deduplicate_oca/README.rst | 2 +- edi_exchange_deduplicate_oca/__manifest__.py | 2 +- .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 edi_exchange_deduplicate_oca/static/description/icon.png diff --git a/edi_exchange_deduplicate_oca/README.rst b/edi_exchange_deduplicate_oca/README.rst index 390f500cc..e6d59fdf5 100644 --- a/edi_exchange_deduplicate_oca/README.rst +++ b/edi_exchange_deduplicate_oca/README.rst @@ -7,7 +7,7 @@ Edi Exchange Deduplicate OCA !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c87271df5c59b606335e18395349874d1aeb6aa3e1cddff1bd724ba7a84e5712 + !! source digest: sha256:06edee3c1d1d40daaddff2ec21bb2d2ee194e014fe811281703f5271d98e31ae !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/edi_exchange_deduplicate_oca/__manifest__.py b/edi_exchange_deduplicate_oca/__manifest__.py index f343c86c2..79f3cc646 100644 --- a/edi_exchange_deduplicate_oca/__manifest__.py +++ b/edi_exchange_deduplicate_oca/__manifest__.py @@ -5,7 +5,7 @@ "name": "Edi Exchange Deduplicate OCA", "summary": """ Introduce a deduplication mechanism at the sending step""", - "version": "16.0.1.0.0", + "version": "16.0.1.1.0", "license": "LGPL-3", "author": "Camptocamp,Odoo Community Association (OCA)", "maintainers": ["simahawk", "etobella"], diff --git a/edi_exchange_deduplicate_oca/static/description/icon.png b/edi_exchange_deduplicate_oca/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/edi_exchange_deduplicate_oca/static/description/index.html b/edi_exchange_deduplicate_oca/static/description/index.html index ea1e44368..5001c40e5 100644 --- a/edi_exchange_deduplicate_oca/static/description/index.html +++ b/edi_exchange_deduplicate_oca/static/description/index.html @@ -367,7 +367,7 @@

Edi Exchange Deduplicate OCA

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:c87271df5c59b606335e18395349874d1aeb6aa3e1cddff1bd724ba7a84e5712 +!! source digest: sha256:06edee3c1d1d40daaddff2ec21bb2d2ee194e014fe811281703f5271d98e31ae !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: LGPL-3 OCA/edi-framework Translate me on Weblate Try me on Runboat

From 1f2fa171faa8a541b8642e0cd3e2d7aaaa00a1b6 Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 30 Jul 2024 12:13:31 +0000 Subject: [PATCH 04/12] Added translation using Weblate (Italian) --- edi_exchange_deduplicate_oca/i18n/it.po | 78 +++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 edi_exchange_deduplicate_oca/i18n/it.po diff --git a/edi_exchange_deduplicate_oca/i18n/it.po b/edi_exchange_deduplicate_oca/i18n/it.po new file mode 100644 index 000000000..4121338ae --- /dev/null +++ b/edi_exchange_deduplicate_oca/i18n/it.po @@ -0,0 +1,78 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * edi_exchange_deduplicate_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_type__deduplicate_on_send +msgid "" +"Before sending an exchange record, check if a fresher one does not exist for" +" same record; if so, mark oldest one as obsolete." +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_record__block_obsolescence +msgid "Block Obsolescence" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_type__deduplicate_on_send +msgid "Deduplicate on Send" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_type__delete_obsolete_records +msgid "Delete obsolete records" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_type__delete_obsolete_records +msgid "Delete records marked as obsolete." +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_backend +msgid "EDI Backend" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_exchange_type +msgid "EDI Exchange Type" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_exchange_record +msgid "EDI exchange Record" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.actions.server,name:edi_exchange_deduplicate_oca.cron_edi_backend_delete_obsolete_records_ir_actions_server +#: model:ir.cron,cron_name:edi_exchange_deduplicate_oca.cron_edi_backend_delete_obsolete_records +msgid "EDI exchange delete obsolete records" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_record__edi_exchange_state +msgid "Exchange state" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_record__block_obsolescence +msgid "Flag record that can never be marked as obsolete" +msgstr "" + +#. module: edi_exchange_deduplicate_oca +#: model:ir.model.fields.selection,name:edi_exchange_deduplicate_oca.selection__edi_exchange_record__edi_exchange_state__obsolete +msgid "Obsolete" +msgstr "" From f317ebc2533f88f91cfe54bb89470f626dcd5366 Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 7 Aug 2024 15:15:07 +0000 Subject: [PATCH 05/12] Translated using Weblate (Italian) Currently translated at 100.0% (12 of 12 strings) Translation: edi-framework-16.0/edi-framework-16.0-edi_exchange_deduplicate_oca Translate-URL: https://translation.odoo-community.org/projects/edi-framework-16-0/edi-framework-16-0-edi_exchange_deduplicate_oca/it/ --- edi_exchange_deduplicate_oca/i18n/it.po | 28 ++++++++++++++----------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/edi_exchange_deduplicate_oca/i18n/it.po b/edi_exchange_deduplicate_oca/i18n/it.po index 4121338ae..efddbf985 100644 --- a/edi_exchange_deduplicate_oca/i18n/it.po +++ b/edi_exchange_deduplicate_oca/i18n/it.po @@ -6,13 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-08-07 17:58+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" #. module: edi_exchange_deduplicate_oca #: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_type__deduplicate_on_send @@ -20,59 +22,61 @@ msgid "" "Before sending an exchange record, check if a fresher one does not exist for" " same record; if so, mark oldest one as obsolete." msgstr "" +"Prima di inviare un record di scambio, controlla se ne esiste uno più " +"recente per lo stesso record; se così, marca il vecchio come obsoleto." #. module: edi_exchange_deduplicate_oca #: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_record__block_obsolescence msgid "Block Obsolescence" -msgstr "" +msgstr "Obsolescenza blocco" #. module: edi_exchange_deduplicate_oca #: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_type__deduplicate_on_send msgid "Deduplicate on Send" -msgstr "" +msgstr "Duplica alla spedizione" #. module: edi_exchange_deduplicate_oca #: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_type__delete_obsolete_records msgid "Delete obsolete records" -msgstr "" +msgstr "Cancella record obsoleti" #. module: edi_exchange_deduplicate_oca #: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_type__delete_obsolete_records msgid "Delete records marked as obsolete." -msgstr "" +msgstr "Cancella record marcati come obsoleti." #. module: edi_exchange_deduplicate_oca #: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_backend msgid "EDI Backend" -msgstr "" +msgstr "Backend EDI" #. module: edi_exchange_deduplicate_oca #: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_exchange_type msgid "EDI Exchange Type" -msgstr "" +msgstr "Tipo scambio EDI" #. module: edi_exchange_deduplicate_oca #: model:ir.model,name:edi_exchange_deduplicate_oca.model_edi_exchange_record msgid "EDI exchange Record" -msgstr "" +msgstr "Record di scambio EDI" #. module: edi_exchange_deduplicate_oca #: model:ir.actions.server,name:edi_exchange_deduplicate_oca.cron_edi_backend_delete_obsolete_records_ir_actions_server #: model:ir.cron,cron_name:edi_exchange_deduplicate_oca.cron_edi_backend_delete_obsolete_records msgid "EDI exchange delete obsolete records" -msgstr "" +msgstr "Scambio EDI cancella record obsoleti" #. module: edi_exchange_deduplicate_oca #: model:ir.model.fields,field_description:edi_exchange_deduplicate_oca.field_edi_exchange_record__edi_exchange_state msgid "Exchange state" -msgstr "" +msgstr "Stato scambio" #. module: edi_exchange_deduplicate_oca #: model:ir.model.fields,help:edi_exchange_deduplicate_oca.field_edi_exchange_record__block_obsolescence msgid "Flag record that can never be marked as obsolete" -msgstr "" +msgstr "Segna record che non devono mai essere marcati obsoleti" #. module: edi_exchange_deduplicate_oca #: model:ir.model.fields.selection,name:edi_exchange_deduplicate_oca.selection__edi_exchange_record__edi_exchange_state__obsolete msgid "Obsolete" -msgstr "" +msgstr "Obsoleto" From 6f3c37752b9a24513a41e8a3189a5e5e30b69e3e Mon Sep 17 00:00:00 2001 From: Ricardoalso Date: Thu, 16 Jan 2025 11:21:40 +0100 Subject: [PATCH 06/12] [IMP] edi_exchange_deduplicate_oca: pre-commit auto fixes --- edi_exchange_deduplicate_oca/README.rst | 47 ++++++++++++------- edi_exchange_deduplicate_oca/data/cron.xml | 22 ++++----- .../models/edi_backend.py | 1 - .../models/edi_exchange_record.py | 1 - .../models/edi_exchange_type.py | 1 - edi_exchange_deduplicate_oca/pyproject.toml | 3 ++ .../readme/CONFIGURE.md | 4 ++ .../readme/CONFIGURE.rst | 3 -- .../readme/CONTRIBUTORS.md | 2 + .../readme/CONTRIBUTORS.rst | 2 - .../readme/DESCRIPTION.md | 4 ++ .../readme/DESCRIPTION.rst | 3 -- edi_exchange_deduplicate_oca/readme/USAGE.md | 7 +++ edi_exchange_deduplicate_oca/readme/USAGE.rst | 6 --- .../static/description/index.html | 42 +++++++++-------- 15 files changed, 82 insertions(+), 66 deletions(-) create mode 100644 edi_exchange_deduplicate_oca/pyproject.toml create mode 100644 edi_exchange_deduplicate_oca/readme/CONFIGURE.md delete mode 100644 edi_exchange_deduplicate_oca/readme/CONFIGURE.rst create mode 100644 edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.md delete mode 100644 edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.rst create mode 100644 edi_exchange_deduplicate_oca/readme/DESCRIPTION.md delete mode 100644 edi_exchange_deduplicate_oca/readme/DESCRIPTION.rst create mode 100644 edi_exchange_deduplicate_oca/readme/USAGE.md delete mode 100644 edi_exchange_deduplicate_oca/readme/USAGE.rst diff --git a/edi_exchange_deduplicate_oca/README.rst b/edi_exchange_deduplicate_oca/README.rst index e6d59fdf5..7fa28f44a 100644 --- a/edi_exchange_deduplicate_oca/README.rst +++ b/edi_exchange_deduplicate_oca/README.rst @@ -17,20 +17,23 @@ Edi Exchange Deduplicate OCA :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi--framework-lightgray.png?logo=github - :target: https://github.com/OCA/edi-framework/tree/16.0/edi_exchange_deduplicate_oca + :target: https://github.com/OCA/edi-framework/tree/18.0/edi_exchange_deduplicate_oca :alt: OCA/edi-framework .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/edi-framework-16-0/edi-framework-16-0-edi_exchange_deduplicate_oca + :target: https://translation.odoo-community.org/projects/edi-framework-18-0/edi-framework-18-0-edi_exchange_deduplicate_oca :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/edi-framework&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/edi-framework&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -This module adds options for deduplication records before sending step on type: - - deduplicate_on_send: check if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete. - - delete_obsolete_records: Delete records marked as obsolete. +This module adds options for deduplication records before sending step +on type: + +- deduplicate_on_send: check if a fresher one does not exist for the + same record. If so, mark the oldest one as obsolete. +- delete_obsolete_records: Delete records marked as obsolete. **Table of contents** @@ -42,17 +45,25 @@ Configuration Go to "EDI -> Config -> Exchange Type". -Enable "Deduplicate on Send" option -> Enable "Delete obsolete records" option. +Enable "Deduplicate on Send" option -> Enable "Delete obsolete records" +option. Usage ===== +With all the types that have been enabled "Deduplicate on Send" option, +this module will check their records if a fresher one does not exist for +the same record. If so, mark the oldest one as obsolete (except +"block_obsolescence" records) + +- "block_obsolescence" is an technical option on records to avoid + marking them as obsolete. -With all the types that have been enabled "Deduplicate on Send" option, this module will check their records if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete (except "block_obsolescence" records) - - "block_obsolescence" is an technical option on records to avoid marking them as obsolete. +With all the types that have been enabled "Delete obsolete records" +option, the cron will remove their obsolete records. -With all the types that have been enabled "Delete obsolete records" option, the cron will remove their obsolete records. - - If the records are obsolete, delete them even if their type's flag has been disabled. +- If the records are obsolete, delete them even if their type's flag has + been disabled. Bug Tracker =========== @@ -60,7 +71,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -68,18 +79,18 @@ Credits ======= Authors -~~~~~~~ +------- * Camptocamp Contributors -~~~~~~~~~~~~ +------------ -* Simone Orsi -* Duong (Tran Quoc) +- Simone Orsi +- Duong (Tran Quoc) Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -102,6 +113,6 @@ Current `maintainers `__: |maintainer-simahawk| |maintainer-etobella| -This module is part of the `OCA/edi-framework `_ project on GitHub. +This module is part of the `OCA/edi-framework `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/edi_exchange_deduplicate_oca/data/cron.xml b/edi_exchange_deduplicate_oca/data/cron.xml index 8e30571c9..236a0e0ec 100644 --- a/edi_exchange_deduplicate_oca/data/cron.xml +++ b/edi_exchange_deduplicate_oca/data/cron.xml @@ -5,15 +5,15 @@ model="ir.cron" forcecreate="True" > - EDI exchange delete obsolete records - - - 1 - days - -1 - - - code - model.search([])._cron_delete_obsolete_records() - + EDI exchange delete obsolete records + + + 1 + days + -1 + + + code + model.search([])._cron_delete_obsolete_records() + diff --git a/edi_exchange_deduplicate_oca/models/edi_backend.py b/edi_exchange_deduplicate_oca/models/edi_backend.py index 843fa264c..12a75a380 100644 --- a/edi_exchange_deduplicate_oca/models/edi_backend.py +++ b/edi_exchange_deduplicate_oca/models/edi_backend.py @@ -9,7 +9,6 @@ class EDIBackend(models.Model): - _inherit = "edi.backend" def _failed_output_check_send_msg(self): diff --git a/edi_exchange_deduplicate_oca/models/edi_exchange_record.py b/edi_exchange_deduplicate_oca/models/edi_exchange_record.py index f1f2efb80..ffd764320 100644 --- a/edi_exchange_deduplicate_oca/models/edi_exchange_record.py +++ b/edi_exchange_deduplicate_oca/models/edi_exchange_record.py @@ -5,7 +5,6 @@ class EDIExchangeRecord(models.Model): - _inherit = "edi.exchange.record" edi_exchange_state = fields.Selection( diff --git a/edi_exchange_deduplicate_oca/models/edi_exchange_type.py b/edi_exchange_deduplicate_oca/models/edi_exchange_type.py index c70cfaf7f..80fcbd7d8 100644 --- a/edi_exchange_deduplicate_oca/models/edi_exchange_type.py +++ b/edi_exchange_deduplicate_oca/models/edi_exchange_type.py @@ -5,7 +5,6 @@ class EDIExchangeType(models.Model): - _inherit = "edi.exchange.type" deduplicate_on_send = fields.Boolean( diff --git a/edi_exchange_deduplicate_oca/pyproject.toml b/edi_exchange_deduplicate_oca/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/edi_exchange_deduplicate_oca/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/edi_exchange_deduplicate_oca/readme/CONFIGURE.md b/edi_exchange_deduplicate_oca/readme/CONFIGURE.md new file mode 100644 index 000000000..fd2d3271d --- /dev/null +++ b/edi_exchange_deduplicate_oca/readme/CONFIGURE.md @@ -0,0 +1,4 @@ +Go to "EDI -\> Config -\> Exchange Type". + +Enable "Deduplicate on Send" option -\> Enable "Delete obsolete records" +option. diff --git a/edi_exchange_deduplicate_oca/readme/CONFIGURE.rst b/edi_exchange_deduplicate_oca/readme/CONFIGURE.rst deleted file mode 100644 index 3838d41fe..000000000 --- a/edi_exchange_deduplicate_oca/readme/CONFIGURE.rst +++ /dev/null @@ -1,3 +0,0 @@ -Go to "EDI -> Config -> Exchange Type". - -Enable "Deduplicate on Send" option -> Enable "Delete obsolete records" option. diff --git a/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.md b/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..faee38dc0 --- /dev/null +++ b/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- Simone Orsi \ +- Duong (Tran Quoc) \ diff --git a/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.rst b/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.rst deleted file mode 100644 index 20b0da936..000000000 --- a/edi_exchange_deduplicate_oca/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Simone Orsi -* Duong (Tran Quoc) diff --git a/edi_exchange_deduplicate_oca/readme/DESCRIPTION.md b/edi_exchange_deduplicate_oca/readme/DESCRIPTION.md new file mode 100644 index 000000000..434a47858 --- /dev/null +++ b/edi_exchange_deduplicate_oca/readme/DESCRIPTION.md @@ -0,0 +1,4 @@ +This module adds options for deduplication records before sending step on type: +- deduplicate_on_send: check if a fresher one does not exist for the + same record. If so, mark the oldest one as obsolete. +- delete_obsolete_records: Delete records marked as obsolete. diff --git a/edi_exchange_deduplicate_oca/readme/DESCRIPTION.rst b/edi_exchange_deduplicate_oca/readme/DESCRIPTION.rst deleted file mode 100644 index f0e131712..000000000 --- a/edi_exchange_deduplicate_oca/readme/DESCRIPTION.rst +++ /dev/null @@ -1,3 +0,0 @@ -This module adds options for deduplication records before sending step on type: - - deduplicate_on_send: check if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete. - - delete_obsolete_records: Delete records marked as obsolete. diff --git a/edi_exchange_deduplicate_oca/readme/USAGE.md b/edi_exchange_deduplicate_oca/readme/USAGE.md new file mode 100644 index 000000000..70fcdfdbd --- /dev/null +++ b/edi_exchange_deduplicate_oca/readme/USAGE.md @@ -0,0 +1,7 @@ +With all the types that have been enabled "Deduplicate on Send" option, this module will check their records if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete (except "block_obsolescence" records) +- "block_obsolescence" is an technical option on records to avoid + marking them as obsolete. + +With all the types that have been enabled "Delete obsolete records" option, the cron will remove their obsolete records. +- If the records are obsolete, delete them even if their type's flag has + been disabled. diff --git a/edi_exchange_deduplicate_oca/readme/USAGE.rst b/edi_exchange_deduplicate_oca/readme/USAGE.rst deleted file mode 100644 index 61171bfe3..000000000 --- a/edi_exchange_deduplicate_oca/readme/USAGE.rst +++ /dev/null @@ -1,6 +0,0 @@ - -With all the types that have been enabled "Deduplicate on Send" option, this module will check their records if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete (except "block_obsolescence" records) - - "block_obsolescence" is an technical option on records to avoid marking them as obsolete. - -With all the types that have been enabled "Delete obsolete records" option, the cron will remove their obsolete records. - - If the records are obsolete, delete them even if their type's flag has been disabled. diff --git a/edi_exchange_deduplicate_oca/static/description/index.html b/edi_exchange_deduplicate_oca/static/description/index.html index 5001c40e5..8857fc1b3 100644 --- a/edi_exchange_deduplicate_oca/static/description/index.html +++ b/edi_exchange_deduplicate_oca/static/description/index.html @@ -369,15 +369,14 @@

Edi Exchange Deduplicate OCA

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:06edee3c1d1d40daaddff2ec21bb2d2ee194e014fe811281703f5271d98e31ae !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: LGPL-3 OCA/edi-framework Translate me on Weblate Try me on Runboat

-
-
This module adds options for deduplication records before sending step on type:
-
    -
  • deduplicate_on_send: check if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete.
  • +

    Beta License: LGPL-3 OCA/edi-framework Translate me on Weblate Try me on Runboat

    +

    This module adds options for deduplication records before sending step +on type:

    +
      +
    • deduplicate_on_send: check if a fresher one does not exist for the +same record. If so, mark the oldest one as obsolete.
    • delete_obsolete_records: Delete records marked as obsolete.
    -
-

Table of contents

    @@ -395,29 +394,32 @@

    Edi Exchange Deduplicate OCA

    Configuration

    Go to “EDI -> Config -> Exchange Type”.

    -

    Enable “Deduplicate on Send” option -> Enable “Delete obsolete records” option.

    +

    Enable “Deduplicate on Send” option -> Enable “Delete obsolete records” +option.

    Usage

    -
    -
    With all the types that have been enabled “Deduplicate on Send” option, this module will check their records if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete (except “block_obsolescence” records)
    -
      -
    • “block_obsolescence” is an technical option on records to avoid marking them as obsolete.
    • +

      With all the types that have been enabled “Deduplicate on Send” option, +this module will check their records if a fresher one does not exist for +the same record. If so, mark the oldest one as obsolete (except +“block_obsolescence” records)

      +
        +
      • “block_obsolescence” is an technical option on records to avoid +marking them as obsolete.
      -
    -
    With all the types that have been enabled “Delete obsolete records” option, the cron will remove their obsolete records.
    -
      -
    • If the records are obsolete, delete them even if their type’s flag has been disabled.
    • +

      With all the types that have been enabled “Delete obsolete records” +option, the cron will remove their obsolete records.

      +
        +
      • If the records are obsolete, delete them even if their type’s flag has +been disabled.
      -
    -

    Bug Tracker

    Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -446,7 +448,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    simahawk etobella

    -

    This module is part of the OCA/edi-framework project on GitHub.

    +

    This module is part of the OCA/edi-framework project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 5b6a0bb206e7b3723365164dd22a38c25a173594 Mon Sep 17 00:00:00 2001 From: SilvioC2C Date: Wed, 11 Dec 2024 10:49:16 +0100 Subject: [PATCH 07/12] [MIG] edi_exchange_deduplicate_oca: Migration to 17.0 --- edi_exchange_deduplicate_oca/__manifest__.py | 2 +- edi_exchange_deduplicate_oca/models/edi_exchange_record.py | 4 +--- .../views/edi_exchange_type_views.xml | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/edi_exchange_deduplicate_oca/__manifest__.py b/edi_exchange_deduplicate_oca/__manifest__.py index 79f3cc646..995d03b4b 100644 --- a/edi_exchange_deduplicate_oca/__manifest__.py +++ b/edi_exchange_deduplicate_oca/__manifest__.py @@ -5,7 +5,7 @@ "name": "Edi Exchange Deduplicate OCA", "summary": """ Introduce a deduplication mechanism at the sending step""", - "version": "16.0.1.1.0", + "version": "17.0.1.0.0", "license": "LGPL-3", "author": "Camptocamp,Odoo Community Association (OCA)", "maintainers": ["simahawk", "etobella"], diff --git a/edi_exchange_deduplicate_oca/models/edi_exchange_record.py b/edi_exchange_deduplicate_oca/models/edi_exchange_record.py index ffd764320..c533a4e62 100644 --- a/edi_exchange_deduplicate_oca/models/edi_exchange_record.py +++ b/edi_exchange_deduplicate_oca/models/edi_exchange_record.py @@ -39,7 +39,7 @@ def create(self, vals_list): def _edi_get_duplicates(self, count=None): self.ensure_one() - older_duplicates = self.search( + return (self.search_count if count else self.search)( [ ("id", "<", self.id), ("res_id", "=", self.res_id), @@ -48,6 +48,4 @@ def _edi_get_duplicates(self, count=None): ("edi_exchange_state", "in", ("new", "output_pending")), ("block_obsolescence", "=", False), ], - count=count, ) - return older_duplicates diff --git a/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml b/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml index 821c20f1b..b1978ff24 100644 --- a/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml +++ b/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml @@ -9,7 +9,7 @@ From 002903c73e7659d20b916d160e15c046cf5f92dc Mon Sep 17 00:00:00 2001 From: Ricardoalso Date: Thu, 16 Jan 2025 11:37:19 +0100 Subject: [PATCH 08/12] [MIG] edi_exchange_deduplicate_oca: Migration to 18.0 --- edi_exchange_deduplicate_oca/__manifest__.py | 4 +- edi_exchange_deduplicate_oca/data/cron.xml | 4 +- .../models/edi_exchange_record.py | 2 +- .../tests/test_edi_backend_cron.py | 4 +- .../tests/test_edi_duplicate.py | 57 +++++++++++-------- .../views/edi_exchange_type_views.xml | 2 +- 6 files changed, 39 insertions(+), 34 deletions(-) diff --git a/edi_exchange_deduplicate_oca/__manifest__.py b/edi_exchange_deduplicate_oca/__manifest__.py index 995d03b4b..8576d5b5e 100644 --- a/edi_exchange_deduplicate_oca/__manifest__.py +++ b/edi_exchange_deduplicate_oca/__manifest__.py @@ -5,12 +5,12 @@ "name": "Edi Exchange Deduplicate OCA", "summary": """ Introduce a deduplication mechanism at the sending step""", - "version": "17.0.1.0.0", + "version": "18.0.1.0.0", "license": "LGPL-3", "author": "Camptocamp,Odoo Community Association (OCA)", "maintainers": ["simahawk", "etobella"], "website": "https://github.com/OCA/edi-framework", - "depends": ["edi_oca"], + "depends": ["edi_core_oca"], "data": [ "data/cron.xml", "views/edi_exchange_type_views.xml", diff --git a/edi_exchange_deduplicate_oca/data/cron.xml b/edi_exchange_deduplicate_oca/data/cron.xml index 236a0e0ec..02e9eb208 100644 --- a/edi_exchange_deduplicate_oca/data/cron.xml +++ b/edi_exchange_deduplicate_oca/data/cron.xml @@ -10,9 +10,7 @@ 1 days - -1 - - + code model.search([])._cron_delete_obsolete_records() diff --git a/edi_exchange_deduplicate_oca/models/edi_exchange_record.py b/edi_exchange_deduplicate_oca/models/edi_exchange_record.py index c533a4e62..dcbb3f096 100644 --- a/edi_exchange_deduplicate_oca/models/edi_exchange_record.py +++ b/edi_exchange_deduplicate_oca/models/edi_exchange_record.py @@ -37,7 +37,7 @@ def create(self, vals_list): obsoleted_records.edi_exchange_state = "obsolete" return records - def _edi_get_duplicates(self, count=None): + def _edi_get_duplicates(self, count=False): self.ensure_one() return (self.search_count if count else self.search)( [ diff --git a/edi_exchange_deduplicate_oca/tests/test_edi_backend_cron.py b/edi_exchange_deduplicate_oca/tests/test_edi_backend_cron.py index 8d71e1640..3162001be 100644 --- a/edi_exchange_deduplicate_oca/tests/test_edi_backend_cron.py +++ b/edi_exchange_deduplicate_oca/tests/test_edi_backend_cron.py @@ -3,9 +3,9 @@ from odoo.tools import mute_logger -from odoo.addons.edi_oca.tests.test_edi_backend_cron import EDIBackendTestCronCase +from odoo.addons.edi_core_oca.tests.test_edi_backend_cron import EDIBackendTestCronCase -LOGGERS = ("odoo.addons.edi_oca.models.edi_backend", "odoo.addons.queue_job.delay") +LOGGERS = ("odoo.addons.edi_core_oca.models.edi_backend", "odoo.addons.queue_job.delay") class EDIBackendTestCronDeduplicationCase(EDIBackendTestCronCase): diff --git a/edi_exchange_deduplicate_oca/tests/test_edi_duplicate.py b/edi_exchange_deduplicate_oca/tests/test_edi_duplicate.py index 36ff9c92f..2273e51d8 100644 --- a/edi_exchange_deduplicate_oca/tests/test_edi_duplicate.py +++ b/edi_exchange_deduplicate_oca/tests/test_edi_duplicate.py @@ -1,38 +1,43 @@ # Copyright 2024 Camptocamp # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -from odoo.addons.edi_oca.tests.common import EDIBackendCommonComponentRegistryTestCase -from odoo.addons.edi_oca.tests.fake_components import ( - FakeInputProcess, - FakeOutputChecker, - FakeOutputGenerator, - FakeOutputSender, -) +from odoo_test_helper import FakeModelLoader -LOGGERS = ("odoo.addons.edi_oca.models.edi_backend", "odoo.addons.queue_job.delay") +from odoo.tools import mute_logger +from odoo.addons.edi_core_oca.tests.common import EDIBackendCommonTestCase -class EDIDeduplicateTestCase(EDIBackendCommonComponentRegistryTestCase): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls._build_components( - cls, - FakeOutputGenerator, - FakeOutputSender, - FakeOutputChecker, - FakeInputProcess, - ) - cls.partner = cls.env.ref("base.res_partner_10") - cls.exchange_type_out.exchange_file_auto_generate = True +LOGGERS = ( + "odoo.addons.edi_core_oca.models.edi_backend", + "odoo.addons.queue_job.delay", +) + +class EDIDeduplicateTestCase(EDIBackendCommonTestCase): def setUp(self): super().setUp() - FakeOutputGenerator.reset_faked() - FakeOutputSender.reset_faked() - FakeOutputChecker.reset_faked() - FakeInputProcess.reset_faked() + self.loader = FakeModelLoader(self.env, self.__module__) + self.loader.backup_registry() + from odoo.addons.edi_core_oca.tests.fake_models import EdiTestExecution + + self.loader.update_registry((EdiTestExecution,)) + self.model = self.env["ir.model"].search( + [("model", "=", "edi.framework.test.execution")] + ) + self.exchange_type_out.write( + { + "exchange_file_auto_generate": True, + "generate_model_id": self.model.id, + "send_model_id": self.model.id, + "output_validate_model_id": self.model.id, + } + ) + + def tearDown(self): + self.loader.restore_registry() + super().tearDown() + @mute_logger(*LOGGERS) def test_deduplicate_on_send(self): self.exchange_type_out.write( { @@ -67,6 +72,7 @@ def test_deduplicate_on_send(self): self.assertEqual(record.edi_exchange_state, "obsolete") self.assertEqual(record3.edi_exchange_state, "output_sent") + @mute_logger(*LOGGERS) def test_no_deduplicate_on_send(self): self.exchange_type_out.write( { @@ -100,6 +106,7 @@ def test_no_deduplicate_on_send(self): for record in records: self.assertEqual(record.edi_exchange_state, "output_sent") + @mute_logger(*LOGGERS) def test_block_obsolescence(self): self.exchange_type_out.write( { diff --git a/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml b/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml index b1978ff24..0470b5255 100644 --- a/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml +++ b/edi_exchange_deduplicate_oca/views/edi_exchange_type_views.xml @@ -3,7 +3,7 @@ edi.exchange.type.form.inherit edi.exchange.type - + From 67bf3118b048cb37483a7765125724b7b32ff4fa Mon Sep 17 00:00:00 2001 From: SilvioC2C Date: Fri, 5 Jun 2026 17:11:14 +0200 Subject: [PATCH 09/12] [FIX] edi_core_oca: fix ``active_test`` propagation Exchange type action ``act_open_edi_exchange_type_view`` declared ``active_test=False`` in its context to allow displaying archived rules in the ExcType form view. However, this choice had the side effect of propagating ``active_test=False`` to all relational fields' context, leading to archived records to *always* be displayed. This fix removes the context key from the action and moves it to the field's definition itself (at model lever, not view level). --- edi_core_oca/models/edi_exchange_type.py | 1 + edi_core_oca/tests/test_exchange_type.py | 80 +++++++++++++++---- .../views/edi_exchange_type_views.xml | 9 +-- 3 files changed, 65 insertions(+), 25 deletions(-) diff --git a/edi_core_oca/models/edi_exchange_type.py b/edi_core_oca/models/edi_exchange_type.py index 3346e487f..4eaa92824 100644 --- a/edi_core_oca/models/edi_exchange_type.py +++ b/edi_core_oca/models/edi_exchange_type.py @@ -158,6 +158,7 @@ class EDIExchangeType(models.Model): rule_ids = fields.One2many( comodel_name="edi.exchange.type.rule", inverse_name="type_id", + context={"active_test": False}, help="Rules to handle exchanges and UI automatically", ) quick_exec = fields.Boolean( diff --git a/edi_core_oca/tests/test_exchange_type.py b/edi_core_oca/tests/test_exchange_type.py index 5d3ae33bb..753c0b652 100644 --- a/edi_core_oca/tests/test_exchange_type.py +++ b/edi_core_oca/tests/test_exchange_type.py @@ -5,6 +5,7 @@ from freezegun import freeze_time +from odoo.fields import Command from odoo.tools import mute_logger from .common import EDIBackendCommonTestCase @@ -147,26 +148,71 @@ def test_filename_pattern_settings(self): self._test_exchange_filename("Test-File-0000001.csv") def test_archive_rules(self): - exc_type = self.exchange_type_out - rule1 = exc_type.rule_ids.create( - { - "type_id": exc_type.id, - "name": "Fake partner rule", - "model_id": self.env["ir.model"]._get("res.partner").id, - } - ) - rule2 = exc_type.rule_ids.create( + # Make sure to drop the ``active_test`` flag to be able to properly test + # whether archived rules can be found in the exchange type O2M field + ctx = dict(self.env.context) + ctx.pop("active_test", None) + exc_type = self.exchange_type_out.with_context(ctx) # pylint: disable=W8121 + exc_type.write( { - "type_id": exc_type.id, - "name": "Fake user rule", - "model_id": self.env["ir.model"]._get("res.users").id, + "rule_ids": [ + Command.clear(), # Drop preexisting rules to avoid pollution + Command.create( + { + "name": "Fake partner rule", + "model_id": self.env["ir.model"]._get("res.partner").id, + } + ), + Command.create( + { + "name": "Fake user rule", + "model_id": self.env["ir.model"]._get("res.users").id, + } + ), + ] } ) - exc_type.active = False - rule1.invalidate_recordset() - rule2.invalidate_recordset() - self.assertFalse(rule1.active) - self.assertFalse(rule2.active) + rules = rule_1, rule_2 = exc_type.rule_ids + + def _check_exc_type_rule_ids(): + exc_type.invalidate_recordset(["rule_ids"]) + self.assertEqual(exc_type.rule_ids, rules) + + # Make sure both Exc Type and all its rules are active + self.assertTrue(exc_type.active) + self.assertTrue(rule_1.active) + self.assertTrue(rule_2.active) + _check_exc_type_rule_ids() + + # Archive one of the rules, make sure the Exc Type and the other rule stay + # active, and the archived rule is still found in the Exc Type O2M field + rule_1.action_archive() + self.assertTrue(exc_type.active) + self.assertFalse(rule_1.active) + self.assertTrue(rule_2.active) + _check_exc_type_rule_ids() + + # Archive the Exc Type, make sure both rules are archived, and they both are + # still found in the Exc Type O2M field + exc_type.action_archive() + self.assertFalse(exc_type.active) + self.assertFalse(rule_1.active) + self.assertFalse(rule_2.active) + _check_exc_type_rule_ids() + + # Reactivate the Exc Type, make sure both rules are still archived, and they + # both are still found in the Exc Type O2M field + exc_type.action_unarchive() + self.assertTrue(exc_type.active) + self.assertFalse(rule_1.active) + self.assertFalse(rule_2.active) + _check_exc_type_rule_ids() + + # Force ``active_test`` in record ctx => archived rules are found anyway + # (record context does not override field context) + for value in (True, False): + exc_type = exc_type.with_context(active_test=value) + _check_exc_type_rule_ids() def _create_exchange_record(self, exc_type): return self.backend.create_record( diff --git a/edi_core_oca/views/edi_exchange_type_views.xml b/edi_core_oca/views/edi_exchange_type_views.xml index cddc4a36b..67c2e97c1 100644 --- a/edi_core_oca/views/edi_exchange_type_views.xml +++ b/edi_core_oca/views/edi_exchange_type_views.xml @@ -209,14 +209,7 @@ list,form [] - - {'search_default_filter_all': 1, 'active_test': False} + {'search_default_filter_all': 1} Date: Tue, 9 Jun 2026 10:32:49 +0000 Subject: [PATCH 10/12] [BOT] post-merge updates --- README.md | 2 +- edi_core_oca/README.rst | 2 +- edi_core_oca/__manifest__.py | 2 +- edi_core_oca/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0fccb7e26..05f981a72 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ addon | version | maintainers | summary [edi_account_core_oca](edi_account_core_oca/) | 18.0.1.1.1 | etobella | Define EDI Configuration for Account Moves [edi_account_oca](edi_account_oca/) | 18.0.1.1.1 | etobella | Define some component listeners for Account Moves [edi_component_oca](edi_component_oca/) | 18.0.1.1.0 | simahawk etobella | Allow to use Connector as a source in EDI -[edi_core_oca](edi_core_oca/) | 18.0.1.7.2 | simahawk etobella | Define backends, exchange types, exchange records, basic automation and views for handling EDI exchanges. +[edi_core_oca](edi_core_oca/) | 18.0.1.7.3 | simahawk etobella | Define backends, exchange types, exchange records, basic automation and views for handling EDI exchanges. [edi_endpoint_oca](edi_endpoint_oca/) | 18.0.1.0.3 | | Base module allowing configuration of custom endpoints for EDI framework. [edi_exchange_template_oca](edi_exchange_template_oca/) | 18.0.1.3.3 | simahawk | Allows definition of exchanges via templates. [edi_exchange_template_party_data](edi_exchange_template_party_data/) | 18.0.1.0.1 | simahawk | Glue module between edi_exchange_template and edi_party_data diff --git a/edi_core_oca/README.rst b/edi_core_oca/README.rst index a73b1e222..1746c1441 100644 --- a/edi_core_oca/README.rst +++ b/edi_core_oca/README.rst @@ -11,7 +11,7 @@ EDI !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5e54bc58f7c88ff2eaac2207226e25488a4aa47b800e1cdc606f485cf0523830 + !! source digest: sha256:a2ec0c8c9a701363efa1965a3296fbc0972859cf5c22504865d391c74d13ab86 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/edi_core_oca/__manifest__.py b/edi_core_oca/__manifest__.py index 31955b191..ddd8abbcd 100644 --- a/edi_core_oca/__manifest__.py +++ b/edi_core_oca/__manifest__.py @@ -9,7 +9,7 @@ Define backends, exchange types, exchange records, basic automation and views for handling EDI exchanges. """, - "version": "18.0.1.7.2", + "version": "18.0.1.7.3", "website": "https://github.com/OCA/edi-framework", "development_status": "Beta", "license": "LGPL-3", diff --git a/edi_core_oca/static/description/index.html b/edi_core_oca/static/description/index.html index 7c70c56f1..014b14ba2 100644 --- a/edi_core_oca/static/description/index.html +++ b/edi_core_oca/static/description/index.html @@ -372,7 +372,7 @@

EDI

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5e54bc58f7c88ff2eaac2207226e25488a4aa47b800e1cdc606f485cf0523830 +!! source digest: sha256:a2ec0c8c9a701363efa1965a3296fbc0972859cf5c22504865d391c74d13ab86 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: LGPL-3 OCA/edi-framework Translate me on Weblate Try me on Runboat

Base EDI backend.

From aa5118dc87429729cbb43be9fa382825de7fb696 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 9 Jun 2026 10:45:56 +0000 Subject: [PATCH 11/12] [UPD] Update edi_exchange_deduplicate_oca.pot --- .../i18n/edi_exchange_deduplicate_oca.pot | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/edi_exchange_deduplicate_oca/i18n/edi_exchange_deduplicate_oca.pot b/edi_exchange_deduplicate_oca/i18n/edi_exchange_deduplicate_oca.pot index 28481a0bc..1dabac0d3 100644 --- a/edi_exchange_deduplicate_oca/i18n/edi_exchange_deduplicate_oca.pot +++ b/edi_exchange_deduplicate_oca/i18n/edi_exchange_deduplicate_oca.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -57,7 +57,6 @@ msgstr "" #. module: edi_exchange_deduplicate_oca #: model:ir.actions.server,name:edi_exchange_deduplicate_oca.cron_edi_backend_delete_obsolete_records_ir_actions_server -#: model:ir.cron,cron_name:edi_exchange_deduplicate_oca.cron_edi_backend_delete_obsolete_records msgid "EDI exchange delete obsolete records" msgstr "" From e307b065775ad5c259dda23c8ef8800c4261f15f Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 9 Jun 2026 10:53:47 +0000 Subject: [PATCH 12/12] [BOT] post-merge updates --- README.md | 1 + edi_exchange_deduplicate_oca/README.rst | 8 +++-- .../static/description/index.html | 30 +++++++++++-------- setup/_metapackage/pyproject.toml | 3 +- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 05f981a72..ee496644b 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ addon | version | maintainers | summary [edi_component_oca](edi_component_oca/) | 18.0.1.1.0 | simahawk etobella | Allow to use Connector as a source in EDI [edi_core_oca](edi_core_oca/) | 18.0.1.7.3 | simahawk etobella | Define backends, exchange types, exchange records, basic automation and views for handling EDI exchanges. [edi_endpoint_oca](edi_endpoint_oca/) | 18.0.1.0.3 | | Base module allowing configuration of custom endpoints for EDI framework. +[edi_exchange_deduplicate_oca](edi_exchange_deduplicate_oca/) | 18.0.1.0.0 | simahawk etobella | Introduce a deduplication mechanism at the sending step [edi_exchange_template_oca](edi_exchange_template_oca/) | 18.0.1.3.3 | simahawk | Allows definition of exchanges via templates. [edi_exchange_template_party_data](edi_exchange_template_party_data/) | 18.0.1.0.1 | simahawk | Glue module between edi_exchange_template and edi_party_data [edi_notification_oca](edi_notification_oca/) | 18.0.1.0.0 | | Define notification activities on exchange records. diff --git a/edi_exchange_deduplicate_oca/README.rst b/edi_exchange_deduplicate_oca/README.rst index 7fa28f44a..62979d3e4 100644 --- a/edi_exchange_deduplicate_oca/README.rst +++ b/edi_exchange_deduplicate_oca/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ============================ Edi Exchange Deduplicate OCA ============================ @@ -7,13 +11,13 @@ Edi Exchange Deduplicate OCA !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:06edee3c1d1d40daaddff2ec21bb2d2ee194e014fe811281703f5271d98e31ae + !! source digest: sha256:3de9feb24a7f003dbf559920c24bb63ab597aeec9efe527ccfe462068ebf7cf6 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi--framework-lightgray.png?logo=github diff --git a/edi_exchange_deduplicate_oca/static/description/index.html b/edi_exchange_deduplicate_oca/static/description/index.html index 8857fc1b3..f8a806666 100644 --- a/edi_exchange_deduplicate_oca/static/description/index.html +++ b/edi_exchange_deduplicate_oca/static/description/index.html @@ -3,7 +3,7 @@ -Edi Exchange Deduplicate OCA +README.rst -
-

Edi Exchange Deduplicate OCA

+
+ + +Odoo Community Association + +
+

Edi Exchange Deduplicate OCA

-

Beta License: LGPL-3 OCA/edi-framework Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/edi-framework Translate me on Weblate Try me on Runboat

This module adds options for deduplication records before sending step on type:

    @@ -392,13 +397,13 @@

    Edi Exchange Deduplicate OCA

-

Configuration

+

Configuration

Go to “EDI -> Config -> Exchange Type”.

Enable “Deduplicate on Send” option -> Enable “Delete obsolete records” option.

-

Usage

+

Usage

With all the types that have been enabled “Deduplicate on Send” option, this module will check their records if a fresher one does not exist for the same record. If so, mark the oldest one as obsolete (except @@ -415,7 +420,7 @@

Usage

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -423,22 +428,22 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -453,5 +458,6 @@

Maintainers

+
diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index abcb4d0a4..7c59f4867 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -1,12 +1,13 @@ [project] name = "odoo-addons-oca-edi-framework" -version = "18.0.20260524.0" +version = "18.0.20260609.0" dependencies = [ "odoo-addon-edi_account_core_oca==18.0.*", "odoo-addon-edi_account_oca==18.0.*", "odoo-addon-edi_component_oca==18.0.*", "odoo-addon-edi_core_oca==18.0.*", "odoo-addon-edi_endpoint_oca==18.0.*", + "odoo-addon-edi_exchange_deduplicate_oca==18.0.*", "odoo-addon-edi_exchange_template_oca==18.0.*", "odoo-addon-edi_exchange_template_party_data==18.0.*", "odoo-addon-edi_notification_oca==18.0.*",