diff --git a/edi_chunk_processing_oca/__init__.py b/edi_chunk_processing_oca/__init__.py new file mode 100644 index 0000000000..f24d3e2426 --- /dev/null +++ b/edi_chunk_processing_oca/__init__.py @@ -0,0 +1,2 @@ +from . import components +from . import models diff --git a/edi_chunk_processing_oca/__manifest__.py b/edi_chunk_processing_oca/__manifest__.py new file mode 100644 index 0000000000..9ac72f1102 --- /dev/null +++ b/edi_chunk_processing_oca/__manifest__.py @@ -0,0 +1,28 @@ +# Copyright 2021 Akretion (https://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "EDI Chunk Processing OCA", + "summary": "Add a new component for spliting and processing file using chunk", + "version": "14.0.1.0.0", + "category": "Uncategorized", + "website": "https://github.com/OCA/edi", + "author": " Akretion, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "external_dependencies": { + "python": [], + "bin": [], + }, + "depends": [ + "chunk_processing", + "edi_oca", + ], + "data": [ + "views/edi_exchange_record_views.xml", + "security/ir.model.access.csv", + ], + "demo": [], +} diff --git a/edi_chunk_processing_oca/components/__init__.py b/edi_chunk_processing_oca/components/__init__.py new file mode 100644 index 0000000000..d782f55222 --- /dev/null +++ b/edi_chunk_processing_oca/components/__init__.py @@ -0,0 +1 @@ +from . import input_process_with_chunk diff --git a/edi_chunk_processing_oca/components/input_process_with_chunk.py b/edi_chunk_processing_oca/components/input_process_with_chunk.py new file mode 100644 index 0000000000..6da88eb900 --- /dev/null +++ b/edi_chunk_processing_oca/components/input_process_with_chunk.py @@ -0,0 +1,28 @@ +# Copyright 2021 Akretion (https://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.addons.component.core import Component + +CHUNK_GROUP_FIELDS = [ + "job_priority", + "chunk_size", + "process_multi", + "data_format", + "apply_on_model", + "usage", + "xml_split_xpath", +] + + +class ProcessWithChunk(Component): + _name = "edi.input.process.with.chunk" + _inherit = "edi.component.input.mixin" + _usage = "process.with.chunk" + + def process(self): + vals = {"edi_exchange_record_id": [(4, self.exchange_record.id, 0)]} + for key in CHUNK_GROUP_FIELDS: + if hasattr(self.work, key): + vals[key] = getattr(self.work, key) + self.env["chunk.group"].create(vals) diff --git a/edi_chunk_processing_oca/models/__init__.py b/edi_chunk_processing_oca/models/__init__.py new file mode 100644 index 0000000000..966fea5df1 --- /dev/null +++ b/edi_chunk_processing_oca/models/__init__.py @@ -0,0 +1,2 @@ +from . import edi_exchange_record +from . import chunk_group diff --git a/edi_chunk_processing_oca/models/chunk_group.py b/edi_chunk_processing_oca/models/chunk_group.py new file mode 100644 index 0000000000..034b0a732c --- /dev/null +++ b/edi_chunk_processing_oca/models/chunk_group.py @@ -0,0 +1,26 @@ +# Copyright 2021 Akretion (https://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import base64 + +from odoo import fields, models + + +class ChunkGroup(models.Model): + _inherit = "chunk.group" + + # We use a O2M but as there is a sql constraint we can have only + # one pattern file, this is why the fieldname end with "id" + edi_exchange_record_id = fields.One2many( + "edi.exchange.record", "chunk_group_id", "Exchange Record" + ) + + def _get_data(self): + self.ensure_one() + if self.edi_exchange_record_id: + return base64.b64decode( + self.edi_exchange_record_id.exchange_file.decode("utf-8") + ) + else: + return super()._get_data() diff --git a/edi_chunk_processing_oca/models/edi_exchange_record.py b/edi_chunk_processing_oca/models/edi_exchange_record.py new file mode 100644 index 0000000000..ce6ffb57c1 --- /dev/null +++ b/edi_chunk_processing_oca/models/edi_exchange_record.py @@ -0,0 +1,15 @@ +# Copyright 2021 Akretion (https://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class EdiExchangeRecord(models.Model): + _inherit = "edi.exchange.record" + + chunk_group_id = fields.Many2one("chunk.group", string="Chunk Group") + + _sql_constraints = [ + ("uniq_chunk_group_id", "unique(chunk_group_id)", "The Group must be unique!") + ] diff --git a/edi_chunk_processing_oca/security/ir.model.access.csv b/edi_chunk_processing_oca/security/ir.model.access.csv new file mode 100644 index 0000000000..44bfac7ee4 --- /dev/null +++ b/edi_chunk_processing_oca/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_chunk_group,Chunk group,chunk_processing.model_chunk_group,base_edi.group_edi_manager,1,1,1,1 +access_chunk_item,Chunk item,chunk_processing.model_chunk_item,base_edi.group_edi_manager,1,1,1,1 diff --git a/edi_chunk_processing_oca/views/edi_exchange_record_views.xml b/edi_chunk_processing_oca/views/edi_exchange_record_views.xml new file mode 100644 index 0000000000..b959234ee7 --- /dev/null +++ b/edi_chunk_processing_oca/views/edi_exchange_record_views.xml @@ -0,0 +1,12 @@ + + + + edi.exchange.record + + + + + + + + diff --git a/setup/edi_chunk_processing_oca/odoo/addons/edi_chunk_processing_oca b/setup/edi_chunk_processing_oca/odoo/addons/edi_chunk_processing_oca new file mode 120000 index 0000000000..d6cad16b97 --- /dev/null +++ b/setup/edi_chunk_processing_oca/odoo/addons/edi_chunk_processing_oca @@ -0,0 +1 @@ +../../../../edi_chunk_processing_oca \ No newline at end of file diff --git a/setup/edi_chunk_processing_oca/setup.py b/setup/edi_chunk_processing_oca/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/edi_chunk_processing_oca/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)