From 9a32d9a4ebddbc625d1208e340a3d058befaca84 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Tue, 24 Nov 2020 18:18:52 +0100
Subject: [PATCH 01/37] Add edi_exchange_template
---
edi_exchange_template_oca/README.rst | 83 ++++
edi_exchange_template_oca/__init__.py | 2 +
edi_exchange_template_oca/__manifest__.py | 18 +
.../components/__init__.py | 2 +
.../components/common.py | 20 +
.../components/output_mixin.py | 42 ++
edi_exchange_template_oca/models/__init__.py | 3 +
.../models/edi_backend.py | 35 ++
.../models/edi_exchange_template_mixin.py | 119 +++++
.../models/edi_exchange_template_output.py | 108 +++++
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 6 +
.../security/ir_model_access.xml | 12 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 430 ++++++++++++++++++
edi_exchange_template_oca/tests/__init__.py | 1 +
.../tests/test_edi_backend_output.py | 124 +++++
edi_exchange_template_oca/utils.py | 40 ++
.../edi_exchange_template_output_views.xml | 134 ++++++
19 files changed, 1180 insertions(+)
create mode 100644 edi_exchange_template_oca/README.rst
create mode 100644 edi_exchange_template_oca/__init__.py
create mode 100644 edi_exchange_template_oca/__manifest__.py
create mode 100644 edi_exchange_template_oca/components/__init__.py
create mode 100644 edi_exchange_template_oca/components/common.py
create mode 100644 edi_exchange_template_oca/components/output_mixin.py
create mode 100644 edi_exchange_template_oca/models/__init__.py
create mode 100644 edi_exchange_template_oca/models/edi_backend.py
create mode 100644 edi_exchange_template_oca/models/edi_exchange_template_mixin.py
create mode 100644 edi_exchange_template_oca/models/edi_exchange_template_output.py
create mode 100644 edi_exchange_template_oca/readme/CONTRIBUTORS.rst
create mode 100644 edi_exchange_template_oca/readme/DESCRIPTION.rst
create mode 100644 edi_exchange_template_oca/security/ir_model_access.xml
create mode 100644 edi_exchange_template_oca/static/description/icon.png
create mode 100644 edi_exchange_template_oca/static/description/index.html
create mode 100644 edi_exchange_template_oca/tests/__init__.py
create mode 100644 edi_exchange_template_oca/tests/test_edi_backend_output.py
create mode 100644 edi_exchange_template_oca/utils.py
create mode 100644 edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
diff --git a/edi_exchange_template_oca/README.rst b/edi_exchange_template_oca/README.rst
new file mode 100644
index 000000000..2a497ce50
--- /dev/null
+++ b/edi_exchange_template_oca/README.rst
@@ -0,0 +1,83 @@
+=====================
+EDI Exchange Template
+=====================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Alpha
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github
+ :target: https://github.com/OCA/edi/tree/13.0/edi_exchange_template
+ :alt: OCA/edi
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/edi-13-0/edi-13-0-edi_exchange_template
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/226/13.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+Provide EDI exchange templates to control input/output records contents.
+
+Provides following models:
+
+1. EDI exchange output template, generates output using QWeb templates
+2. [TODO] EDI exchange input template
+
+.. IMPORTANT::
+ This is an alpha version, the data model and design can change at any time without warning.
+ Only for development or testing purpose, do not use in production.
+ `More details on development status `_
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+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 smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* ACSONE
+
+Contributors
+~~~~~~~~~~~~
+
+* Simone Orsi
+
+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.
+
+This module is part of the `OCA/edi `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/edi_exchange_template_oca/__init__.py b/edi_exchange_template_oca/__init__.py
new file mode 100644
index 000000000..0f00a6730
--- /dev/null
+++ b/edi_exchange_template_oca/__init__.py
@@ -0,0 +1,2 @@
+from . import models
+from . import components
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
new file mode 100644
index 000000000..219dd0834
--- /dev/null
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -0,0 +1,18 @@
+# Copyright 2020 ACSONE
+# @author: Simone Orsi
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+{
+ "name": "EDI Exchange Template",
+ "summary": """Allows definition of exchanges via templates.""",
+ "version": "13.0.1.0.0",
+ "development_status": "Alpha",
+ "license": "AGPL-3",
+ "author": "ACSONE,Odoo Community Association (OCA)",
+ "maintainers": ["simahawk"],
+ "depends": ["edi", "component"],
+ "data": [
+ "security/ir_model_access.xml",
+ "views/edi_exchange_template_output_views.xml",
+ ],
+}
diff --git a/edi_exchange_template_oca/components/__init__.py b/edi_exchange_template_oca/components/__init__.py
new file mode 100644
index 000000000..ed5b32801
--- /dev/null
+++ b/edi_exchange_template_oca/components/__init__.py
@@ -0,0 +1,2 @@
+from . import common
+from . import output_mixin
diff --git a/edi_exchange_template_oca/components/common.py b/edi_exchange_template_oca/components/common.py
new file mode 100644
index 000000000..06d6a876f
--- /dev/null
+++ b/edi_exchange_template_oca/components/common.py
@@ -0,0 +1,20 @@
+# Copyright 2020 ACSONE
+# @author: Simone Orsi
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.addons.component.core import AbstractComponent
+
+
+class EDIExchangeInfoMixin(AbstractComponent):
+ """Abstract component mixin provide info for exchanges."""
+
+ _name = "edi.info.provider.mixin"
+ _collection = "edi.backend"
+ # Enable validation of work context attributes
+ _work_context_validate_attrs = []
+
+ def __init__(self, work_context):
+ super().__init__(work_context)
+ for key in self._work_context_validate_attrs:
+ if not hasattr(work_context, key):
+ raise AttributeError(f"`{key}` is required for this component!")
diff --git a/edi_exchange_template_oca/components/output_mixin.py b/edi_exchange_template_oca/components/output_mixin.py
new file mode 100644
index 000000000..4567480ea
--- /dev/null
+++ b/edi_exchange_template_oca/components/output_mixin.py
@@ -0,0 +1,42 @@
+# Copyright 2020 ACSONE
+# @author: Simone Orsi
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import datetime
+
+import pytz
+
+from odoo import fields
+
+from odoo.addons.component.core import AbstractComponent
+
+
+class EDIExchangeInfoOutputMixin(AbstractComponent):
+ """Abstract component mixin to generate GS1 compliant XML files."""
+
+ _name = "edi.output.mixin"
+ _inherit = "edi.info.provider.mixin"
+ # Enable validation of work context attributes
+ _work_context_validate_attrs = ["exchange_record"]
+
+ @property
+ def record(self):
+ return self.work.exchange_record.record
+
+ def generate_info(self):
+ """Generate and return data for output info.
+
+ :return: odoo.tools.DotDict
+ """
+ raise NotImplementedError()
+
+ # helper methods
+ @staticmethod
+ def _utc_now():
+ return datetime.datetime.utcnow().isoformat()
+
+ @staticmethod
+ def date_to_string(dt, utc=True):
+ if utc:
+ dt = dt.astimezone(pytz.UTC)
+ return fields.Date.to_string(dt)
diff --git a/edi_exchange_template_oca/models/__init__.py b/edi_exchange_template_oca/models/__init__.py
new file mode 100644
index 000000000..a98be2011
--- /dev/null
+++ b/edi_exchange_template_oca/models/__init__.py
@@ -0,0 +1,3 @@
+from . import edi_backend
+from . import edi_exchange_template_mixin
+from . import edi_exchange_template_output
diff --git a/edi_exchange_template_oca/models/edi_backend.py b/edi_exchange_template_oca/models/edi_backend.py
new file mode 100644
index 000000000..559df9756
--- /dev/null
+++ b/edi_exchange_template_oca/models/edi_backend.py
@@ -0,0 +1,35 @@
+# Copyright 2020 ACSONE SA
+# @author Simone Orsi
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import models
+
+
+class EDIBackend(models.Model):
+ _inherit = "edi.backend"
+
+ def _generate_output(self, exchange_record, **kw):
+ # Template take precedence over component lookup
+ tmpl = self._get_output_template(exchange_record)
+ if tmpl:
+ return tmpl.generate_output(exchange_record, **kw)
+ return super()._generate_output(exchange_record, **kw)
+
+ @property
+ def output_template_model(self):
+ return self.env["edi.exchange.template.output"]
+
+ def _get_output_template(self, exchange_record, code=None):
+ """Retrieve output templates by convention.
+
+ Template's code must match the same component usage as per normal components.
+ """
+ tmpl = None
+ candidates = self._generate_output_component_usage_candidates(exchange_record)
+ if code:
+ candidates.insert(code)
+ for usage in candidates:
+ tmpl = self.output_template_model.search([("code", "=", usage)], limit=1)
+ if tmpl:
+ break
+ return tmpl
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_mixin.py b/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
new file mode 100644
index 000000000..ea4dec728
--- /dev/null
+++ b/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
@@ -0,0 +1,119 @@
+# Copyright 2020 ACSONE SA
+# @author Simone Orsi
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+import datetime
+import logging
+import textwrap
+import time
+
+import dateutil
+import pytz
+
+from odoo import fields, models
+from odoo.tools import DotDict
+from odoo.tools.safe_eval import safe_eval
+
+_logger = logging.getLogger(__name__)
+
+
+class EDIExchangeTemplateMixin(models.AbstractModel):
+ """Define a common ground for EDI exchange templates.
+ """
+
+ _name = "edi.exchange.template.mixin"
+ _description = "EDI Exchange Output Mixin"
+
+ name = fields.Char(required=True)
+ # TODO: make unique, autocompute slugified name
+ code = fields.Char(required=True, index=True)
+ backend_type_id = fields.Many2one(
+ string="EDI Backend type",
+ comodel_name="edi.backend.type",
+ ondelete="restrict",
+ required=True,
+ )
+ type_id = fields.Many2one(
+ string="EDI Exchange type",
+ comodel_name="edi.exchange.type",
+ ondelete="cascade",
+ auto_join=True,
+ )
+ backend_id = fields.Many2one(
+ comodel_name="edi.backend",
+ ondelete="cascade",
+ # TODO: default to type_id if given, validate otherwise
+ )
+ # TODO: add default content w/ comment on what you can use
+ code_snippet = fields.Text()
+ code_snippet_docs = fields.Text(
+ compute="_compute_code_snippet_docs",
+ default=lambda self: self._default_code_snippet_docs(),
+ )
+
+ def _compute_code_snippet_docs(self):
+ for rec in self:
+ rec.code_snippet_docs = textwrap.dedent(rec._default_code_snippet_docs())
+
+ def _default_code_snippet_docs(self):
+ return """
+ Available vars:
+ * datetime
+ * dateutil
+ * time
+ * uid
+ * user
+ * DotDict
+ """
+
+ def _code_snippet_valued(self):
+ snippet = self.code_snippet or ""
+ return bool(
+ [
+ not line.startswith("#")
+ for line in (snippet.splitlines())
+ if line.strip("")
+ ]
+ )
+
+ @staticmethod
+ def _utc_now():
+ return datetime.datetime.utcnow().isoformat()
+
+ @staticmethod
+ def _date_to_string(dt, utc=True):
+ if utc:
+ dt = dt.astimezone(pytz.UTC)
+ return fields.Date.to_string(dt)
+
+ def _get_code_snippet_eval_context(self):
+ """Prepare the context used when evaluating python code
+
+ :returns: dict -- evaluation context given to safe_eval
+ """
+ return {
+ "datetime": datetime,
+ "dateutil": dateutil,
+ "time": time,
+ "uid": self.env.uid,
+ "user": self.env.user,
+ "DotDict": DotDict,
+ }
+
+ def _evaluate_code_snippet(self, **render_values):
+ if not self._code_snippet_valued():
+ return {}
+ eval_ctx = dict(render_values, **self._get_code_snippet_eval_context())
+ safe_eval(self.code_snippet, eval_ctx, mode="exec", nocopy=True)
+ result = eval_ctx.get("result", {})
+ if not isinstance(result, dict):
+ _logger.error("code_snippet should return a dict into `result`")
+ return {}
+ return result
+
+ def _get_validator(self, exchange_record):
+ # TODO: lookup for validator (
+ # can be to validate received file or generated file)
+ pass
+
+ def validate(self, exchange_record):
+ pass
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
new file mode 100644
index 000000000..1871c8912
--- /dev/null
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -0,0 +1,108 @@
+# Copyright 2020 ACSONE SA
+# @author Simone Orsi
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+import logging
+
+from odoo import fields, models
+
+from ..utils import xml_purge_nswrapper
+
+_logger = logging.getLogger(__name__)
+
+
+class EDIExchangeOutputTemplate(models.Model):
+ """Define an output template to generate outgoing files
+ """
+
+ _name = "edi.exchange.template.output"
+ _inherit = "edi.exchange.template.mixin"
+ _description = "EDI Exchange Output Template"
+
+ output_type = fields.Char(required=True)
+ # TODO: add a good domain (maybe add a new flag or category to ir.ui.view)
+ template_id = fields.Many2one(
+ string="Qweb Template",
+ comodel_name="ir.ui.view",
+ required=True,
+ ondelete="restrict",
+ )
+ template_arch = fields.Text(
+ string="QWeb arch", related="template_id.arch_db", readonly=False,
+ )
+ template_key = fields.Char(related="template_id.xml_id", string="Template key")
+
+ def _default_code_snippet_docs(self):
+ return (
+ super()._default_code_snippet_docs()
+ + """
+ * exchange_record (edi.exchange.record)
+ * record (real odoo record related to this exchange)
+ * backend (current backend)
+ * template (current template record)
+ * utc_now
+ * date_to_string
+ * render_edi_template
+ * get_info_provider
+ * info
+ """
+ )
+
+ def generate_output(self, exchange_record, **kw):
+ """Generate output for given record using related QWeb template.
+ """
+ tmpl = self.template_id
+ # TODO: how to validate mandatory render values?
+ # (eg: sender/receiver are mandatory for BH)
+ values = self._get_render_values(exchange_record, **kw)
+ output = tmpl.render(values)
+ return self._post_process_output(output)
+
+ def _get_render_values(self, exchange_record, **kw):
+ """Collect values to render current template."""
+ values = {
+ "exchange_record": exchange_record,
+ "record": exchange_record.record,
+ "backend": exchange_record.backend_id,
+ "template": self,
+ "utc_now": self._utc_now,
+ "date_to_string": self._date_to_string,
+ "render_edi_template": self._render_template,
+ "get_info_provider": self._get_info_provider,
+ "info": {},
+ }
+ values.update(self._evaluate_code_snippet(**values))
+ values.update(kw)
+ return values
+
+ def _render_template(self, exchange_record, code, **kw):
+ """Render another template matching `code`.
+
+ This is very handy to render templates from other templates.
+ """
+ tmpl = self.search([("code", "=", code)], limit=1)
+ tmpl.ensure_one()
+ return tmpl.generate_output(exchange_record, **kw)
+
+ def _post_process_output(self, output):
+ """Post process generated output.
+ """
+ if self.output_type == "xml":
+ # TODO: lookup for components to handle this dynamically
+ return xml_purge_nswrapper(output)
+ return output
+
+ def _get_info_provider(self, exchange_record, work_ctx=None, usage=None, **kw):
+ """Retrieve component providing info to render a template.
+
+ TODO: improve this description.
+ TODO: add tests
+ """
+ default_work_ctx = dict(
+ exchange_record=exchange_record, record=exchange_record.record,
+ )
+ default_work_ctx.update(work_ctx or {})
+ usage_candidates = [usage or self.code + ".info"]
+ provider = exchange_record.backend_id._get_component(
+ usage_candidates, work_ctx=default_work_ctx, **kw
+ )
+ return provider
diff --git a/edi_exchange_template_oca/readme/CONTRIBUTORS.rst b/edi_exchange_template_oca/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..f583948be
--- /dev/null
+++ b/edi_exchange_template_oca/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Simone Orsi
diff --git a/edi_exchange_template_oca/readme/DESCRIPTION.rst b/edi_exchange_template_oca/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..491f1212a
--- /dev/null
+++ b/edi_exchange_template_oca/readme/DESCRIPTION.rst
@@ -0,0 +1,6 @@
+Provide EDI exchange templates to control input/output records contents.
+
+Provides following models:
+
+1. EDI exchange output template, generates output using QWeb templates
+2. [TODO] EDI exchange input template
diff --git a/edi_exchange_template_oca/security/ir_model_access.xml b/edi_exchange_template_oca/security/ir_model_access.xml
new file mode 100644
index 000000000..c611b9dbf
--- /dev/null
+++ b/edi_exchange_template_oca/security/ir_model_access.xml
@@ -0,0 +1,12 @@
+
+
+
+ edi_exchange_template_output manager
+
+
+
+
+
+
+
+
diff --git a/edi_exchange_template_oca/static/description/icon.png b/edi_exchange_template_oca/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~!
zVpnB`o+K7|Al`Q_U;eD$B
zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA
z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__
zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_
zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I
z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U
z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)(
z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH
zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW
z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx
zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h
zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9
zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz#
z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA
zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K=
z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS
zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C
zuVl&0duN<;uOsB3%T9Fp8t{ED108)`y_~Hnd9AUX7h-H?jVuU|}My+C=TjH(jKz
zqMVr0re3S$H@t{zI95qa)+Crz*5Zj}Ao%4Z><+W(nOZd?gDnfNBC3>M8WE61$So|P
zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO
z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1
zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_
zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8
zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ>
zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN
z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h
zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d
zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB
zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz
z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I
zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X
zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD
z#z-)AXwSRY?OPefw^iI+
z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd
z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs
z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I
z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$
z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV
z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s
zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6
zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u
zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q
zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH
zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c
zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT
zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+
z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ
zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy
zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC)
zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a
zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x!
zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X
zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8
z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A
z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H
zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n=
z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK
z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z
zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h
z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD
z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW
zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@
zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz
z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y<
zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X
zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6
zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6%
z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(|
z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ
z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H
zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6
z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d}
z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A
zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/edi_exchange_template_oca/static/description/index.html b/edi_exchange_template_oca/static/description/index.html
new file mode 100644
index 000000000..81c8f0f4a
--- /dev/null
+++ b/edi_exchange_template_oca/static/description/index.html
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+EDI Exchange Template
+
+
+
+
+
EDI Exchange Template
+
+
+
+
Provide EDI exchange templates to control input/output records contents.
+
Provides following models:
+
+- EDI exchange output template, generates output using QWeb templates
+- [TODO] EDI exchange input template
+
+
+
Important
+
This is an alpha version, the data model and design can change at any time without warning.
+Only for development or testing purpose, do not use in production.
+More details on development status
+
+
Table of contents
+
+
+
+
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 smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
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.
+
This module is part of the OCA/edi project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/edi_exchange_template_oca/tests/__init__.py b/edi_exchange_template_oca/tests/__init__.py
new file mode 100644
index 000000000..dbf4fc661
--- /dev/null
+++ b/edi_exchange_template_oca/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_edi_backend_output
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
new file mode 100644
index 000000000..0212886ac
--- /dev/null
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -0,0 +1,124 @@
+# Copyright 2020 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+import base64
+
+from lxml import etree
+
+from odoo.addons.edi.tests.common import EDIBackendCommonTestCase
+
+
+class TestEDIBackendOutputBase(EDIBackendCommonTestCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls._setup_records()
+
+ @classmethod
+ def _setup_records(cls):
+ cls.type_out1 = cls._create_exchange_type(
+ name="Template output 1",
+ direction="output",
+ code="test_type_out1",
+ exchange_file_ext="txt",
+ exchange_filename_pattern="{record.ref}-{type.code}-{dt}",
+ )
+ model = cls.env["edi.exchange.template.output"]
+ qweb_tmpl = cls.env["ir.ui.view"].create(
+ {
+ "type": "qweb",
+ "key": "edi_exchange.test_output1",
+ "arch": """
+
+ -
+
+ """,
+ }
+ )
+ cls.tmpl_out1 = model.create(
+ {
+ "code": "edi.output.demo_backend.test_type_out1",
+ "name": "Out 1",
+ "backend_type_id": cls.backend.backend_type_id.id,
+ "type_id": cls.type_out1.id,
+ "template_id": qweb_tmpl.id,
+ "output_type": "txt",
+ }
+ )
+ vals = {
+ "model": cls.partner._name,
+ "res_id": cls.partner.id,
+ "type_id": cls.type_out1.id,
+ }
+ cls.record1 = cls.backend.create_record("test_type_out1", vals)
+
+ cls.type_out2 = cls._create_exchange_type(
+ name="Template output 2",
+ direction="output",
+ code="test_type_out2",
+ exchange_file_ext="xml",
+ exchange_filename_pattern="{record.ref}-{type.code}-{dt}",
+ )
+ qweb_tmpl = cls.env["ir.ui.view"].create(
+ {
+ "type": "qweb",
+ "key": "edi_exchange.test_output2",
+ "arch": """
+
+
+
+
+
+
+
+
+ """,
+ }
+ )
+ cls.tmpl_out2 = model.create(
+ {
+ "code": "edi.output.demo_backend.test_type_out2",
+ "name": "Out 2",
+ "backend_type_id": cls.backend.backend_type_id.id,
+ "type_id": cls.type_out2.id,
+ "template_id": qweb_tmpl.id,
+ "output_type": "xml",
+ "code_snippet": """
+foo = "custom_var"
+baz = 2
+result = {"custom_bit": foo, "baz": baz}
+ """,
+ }
+ )
+ vals = {
+ "model": cls.partner._name,
+ "res_id": cls.partner.id,
+ "type_id": cls.type_out2.id,
+ }
+ cls.record2 = cls.backend.create_record("test_type_out2", vals)
+
+
+# TODO: add more unit tests
+class TestEDIBackendOutput(TestEDIBackendOutputBase):
+ def test_get_template(self):
+ self.assertEqual(
+ self.backend._get_output_template(self.record1), self.tmpl_out1
+ )
+ self.assertEqual(
+ self.backend._get_output_template(self.record2), self.tmpl_out2
+ )
+
+ def test_generate_file(self):
+ output = self.backend.generate_output(self.record1)
+ expected = "{0.ref} - {0.name}".format(self.partner)
+ self.assertEqual(output.strip(), expected)
+ file_content = base64.b64decode(self.record1.exchange_file).decode()
+ self.assertEqual(file_content.strip(), expected)
+ output = self.backend.generate_output(self.record2)
+ doc = etree.fromstring(output)
+ self.assertEqual(doc.tag, "Record")
+ self.assertEqual(doc.attrib, {"ref": self.partner.ref})
+ self.assertEqual(doc.getchildren()[0].tag, "Name")
+ self.assertEqual(doc.getchildren()[0].text, self.partner.name)
+ self.assertEqual(doc.getchildren()[1].tag, "Custom")
+ self.assertEqual(doc.getchildren()[1].text, "2")
+ self.assertEqual(doc.getchildren()[1].attrib, {"bit": "custom_var"})
diff --git a/edi_exchange_template_oca/utils.py b/edi_exchange_template_oca/utils.py
new file mode 100644
index 000000000..4fd56ed44
--- /dev/null
+++ b/edi_exchange_template_oca/utils.py
@@ -0,0 +1,40 @@
+from lxml import etree
+
+from odoo.tools import pycompat
+
+
+def xml_purge_nswrapper(xml_content):
+ """Purge `nswrapper` elements.
+
+ QWeb template does not allow parsing namespaced elements
+ without declaring namespaces on the root element.
+
+ Hence, by default you cannot define smaller re-usable templates
+ if the have namespaced elements.
+
+ The trick is to wrap your reusable template with `nswrapper` element
+ which holds the namespace for that particular sub template.
+ For instance:
+
+
+
+
+
+ Then this method is going to purge these unwanted elements from the result.
+ """
+ if not (xml_content and xml_content.strip()):
+ return xml_content
+ root = etree.XML(xml_content)
+ # deeper elements come after, keep the root element at the end (if any)
+ for nswrapper in reversed(root.xpath("//nswrapper")):
+ parent = nswrapper.getparent()
+ if not parent:
+ # fmt:off
+ return "".join([
+ pycompat.to_text(etree.tostring(el))
+ for el in nswrapper.getchildren()
+ ])
+ # fmt:on
+ parent.extend(nswrapper.getchildren())
+ parent.remove(nswrapper)
+ return etree.tostring(root)
diff --git a/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml b/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
new file mode 100644
index 000000000..e5e42e791
--- /dev/null
+++ b/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
@@ -0,0 +1,134 @@
+
+
+
+ edi.exchange.template.output
+
+
+
+
+
+
+
+
+
+
+
+ edi.exchange.template.output
+
+
+
+
+
+ edi.exchange.template.output
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EDI Exchange Template Output
+ ir.actions.act_window
+ edi.exchange.template.output
+ tree,form
+
+ []
+ {}
+
+
+
+
+ form
+
+
+
+
+
+ tree
+
+
+
+
+
From 31ee4b09d76be107654c9026c2b3383371fc5f29 Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Thu, 26 Nov 2020 11:53:18 +0000
Subject: [PATCH 02/37] [UPD] Update edi_exchange_template.pot
---
.../i18n/edi_exchange_template.pot | 184 ++++++++++++++++++
1 file changed, 184 insertions(+)
create mode 100644 edi_exchange_template_oca/i18n/edi_exchange_template.pot
diff --git a/edi_exchange_template_oca/i18n/edi_exchange_template.pot b/edi_exchange_template_oca/i18n/edi_exchange_template.pot
new file mode 100644
index 000000000..6e0b1ccfc
--- /dev/null
+++ b/edi_exchange_template_oca/i18n/edi_exchange_template.pot
@@ -0,0 +1,184 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * edi_exchange_template
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.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_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__backend_id
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__backend_id
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_search
+msgid "Backend"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_search
+msgid "Backend type"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__code
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__code
+msgid "Code"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__code_snippet
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__code_snippet
+msgid "Code Snippet"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__code_snippet_docs
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__code_snippet_docs
+msgid "Code Snippet Docs"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_form
+msgid "Code snippet"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_form
+msgid "Code snippet docs"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__display_name
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model,name:edi_exchange_template.model_edi_backend
+msgid "EDI Backend"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__backend_type_id
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__backend_type_id
+msgid "EDI Backend type"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model,name:edi_exchange_template.model_edi_exchange_template_mixin
+msgid "EDI Exchange Output Mixin"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model,name:edi_exchange_template.model_edi_exchange_template_output
+msgid "EDI Exchange Output Template"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.actions.act_window,name:edi_exchange_template.act_open_edi_exchange_template_output_view
+#: model:ir.ui.menu,name:edi_exchange_template.menu_edi_exchange_template_output
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_form
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_search
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_tree
+msgid "EDI Exchange Template Output"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.ui.menu,name:edi_exchange_template.menu_edi_exchange_template_root
+msgid "EDI Exchange Templates"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__type_id
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__type_id
+msgid "EDI Exchange type"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_search
+msgid "Group By"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__id
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__id
+msgid "ID"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,help:edi_exchange_template.field_edi_exchange_template_output__template_key
+msgid "ID of the view defined in xml file"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin____last_update
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_mixin__name
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__name
+msgid "Name"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__output_type
+msgid "Output Type"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__template_arch
+msgid "QWeb arch"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__template_id
+msgid "Qweb Template"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_form
+msgid "Template"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,field_description:edi_exchange_template.field_edi_exchange_template_output__template_key
+msgid "Template key"
+msgstr ""
+
+#. module: edi_exchange_template
+#: model:ir.model.fields,help:edi_exchange_template.field_edi_exchange_template_output__template_arch
+msgid "This field stores the view arch."
+msgstr ""
+
+#. module: edi_exchange_template
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template.edi_exchange_template_output_view_search
+msgid "Type"
+msgstr ""
From 546c6e3480b6e1de48464f812f88ad56aaa74105 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Thu, 26 Nov 2020 12:03:24 +0000
Subject: [PATCH 03/37] [UPD] README.rst
---
edi_exchange_template_oca/README.rst | 8 ++++++++
edi_exchange_template_oca/static/description/index.html | 2 ++
2 files changed, 10 insertions(+)
diff --git a/edi_exchange_template_oca/README.rst b/edi_exchange_template_oca/README.rst
index 2a497ce50..20b862b0b 100644
--- a/edi_exchange_template_oca/README.rst
+++ b/edi_exchange_template_oca/README.rst
@@ -78,6 +78,14 @@ 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
+
+Current `maintainer `__:
+
+|maintainer-simahawk|
+
This module is part of the `OCA/edi `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/edi_exchange_template_oca/static/description/index.html b/edi_exchange_template_oca/static/description/index.html
index 81c8f0f4a..b155d5055 100644
--- a/edi_exchange_template_oca/static/description/index.html
+++ b/edi_exchange_template_oca/static/description/index.html
@@ -421,6 +421,8 @@
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 maintainer:
+
This module is part of the OCA/edi project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
From c7af57688f2e6595fccb08692a5ff68d5e334809 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Thu, 26 Nov 2020 12:03:25 +0000
Subject: [PATCH 04/37] edi_exchange_template 13.0.1.1.0
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index 219dd0834..c66ba0b3a 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "13.0.1.0.0",
+ "version": "13.0.1.1.0",
"development_status": "Alpha",
"license": "AGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From 87582a495984005b1d2f61e8eea7ec8e63cfdad5 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Thu, 26 Nov 2020 08:44:41 +0100
Subject: [PATCH 05/37] edi_exchange_template: minor changes
---
edi_exchange_template_oca/models/edi_backend.py | 2 ++
.../models/edi_exchange_template_output.py | 11 ++++++++++-
edi_exchange_template_oca/utils.py | 2 +-
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/edi_exchange_template_oca/models/edi_backend.py b/edi_exchange_template_oca/models/edi_backend.py
index 559df9756..9ccfc951a 100644
--- a/edi_exchange_template_oca/models/edi_backend.py
+++ b/edi_exchange_template_oca/models/edi_backend.py
@@ -24,6 +24,8 @@ def _get_output_template(self, exchange_record, code=None):
Template's code must match the same component usage as per normal components.
"""
+ # TODO: maybe we can add a m2o to output templates
+ # but then we would need another for input templates if they are introduced.
tmpl = None
candidates = self._generate_output_component_usage_candidates(exchange_record)
if code:
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
index 1871c8912..69961c700 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_output.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -11,7 +11,7 @@
class EDIExchangeOutputTemplate(models.Model):
- """Define an output template to generate outgoing files
+ """Define an output template to generate outgoing records' content.
"""
_name = "edi.exchange.template.output"
@@ -20,12 +20,21 @@ class EDIExchangeOutputTemplate(models.Model):
output_type = fields.Char(required=True)
# TODO: add a good domain (maybe add a new flag or category to ir.ui.view)
+ # Options:
+ # 1. add a flag "edi_template" to ir.ui.view
+ # 2. set model="edi.exchange.template.output" on the view
+ # As templates are defined using `` tag
+ # I'm not sure this is a good option.
+ # 3. what else?
template_id = fields.Many2one(
string="Qweb Template",
comodel_name="ir.ui.view",
required=True,
ondelete="restrict",
)
+ # TODO: find a way to prevent editing "master templates"
+ # This would allow editing only a copy of the original template
+ # so that you can always check or rollback to it.
template_arch = fields.Text(
string="QWeb arch", related="template_id.arch_db", readonly=False,
)
diff --git a/edi_exchange_template_oca/utils.py b/edi_exchange_template_oca/utils.py
index 4fd56ed44..6f5e778e2 100644
--- a/edi_exchange_template_oca/utils.py
+++ b/edi_exchange_template_oca/utils.py
@@ -28,7 +28,7 @@ def xml_purge_nswrapper(xml_content):
# deeper elements come after, keep the root element at the end (if any)
for nswrapper in reversed(root.xpath("//nswrapper")):
parent = nswrapper.getparent()
- if not parent:
+ if parent is None:
# fmt:off
return "".join([
pycompat.to_text(etree.tostring(el))
From 1be5073c15553c716977487d182cf59ff5802e49 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Thu, 26 Nov 2020 17:04:26 +0100
Subject: [PATCH 06/37] edi.backend: add cron to handle record state updates
---
edi_exchange_template_oca/tests/test_edi_backend_output.py | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index 0212886ac..546606a23 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -8,13 +8,9 @@
class TestEDIBackendOutputBase(EDIBackendCommonTestCase):
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
- cls._setup_records()
-
@classmethod
def _setup_records(cls):
+ super()._setup_records()
cls.type_out1 = cls._create_exchange_type(
name="Template output 1",
direction="output",
From 8ddf8e6ac6c3ebf94ca651f6e466c2a477ec5707 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Thu, 26 Nov 2020 17:04:56 +0100
Subject: [PATCH 07/37] edi.exchange.template: update according to edi changes
---
edi_exchange_template_oca/models/edi_backend.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/models/edi_backend.py b/edi_exchange_template_oca/models/edi_backend.py
index 9ccfc951a..5308a38cd 100644
--- a/edi_exchange_template_oca/models/edi_backend.py
+++ b/edi_exchange_template_oca/models/edi_backend.py
@@ -27,7 +27,7 @@ def _get_output_template(self, exchange_record, code=None):
# TODO: maybe we can add a m2o to output templates
# but then we would need another for input templates if they are introduced.
tmpl = None
- candidates = self._generate_output_component_usage_candidates(exchange_record)
+ candidates = self._get_component_usage_candidates(exchange_record, "output")
if code:
candidates.insert(code)
for usage in candidates:
From 18911d5580a9683947a425cf334ab40edcfcfcb0 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Fri, 27 Nov 2020 12:03:21 +0000
Subject: [PATCH 08/37] edi_exchange_template 13.0.1.2.0
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index c66ba0b3a..e42bd459b 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "13.0.1.1.0",
+ "version": "13.0.1.2.0",
"development_status": "Alpha",
"license": "AGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From 63f558dcf48df9f2880ce439f86b27d6a898ca9f Mon Sep 17 00:00:00 2001
From: Enric Tobella
Date: Sun, 29 Nov 2020 23:22:34 +0100
Subject: [PATCH 09/37] [FIX] edi_exchange_template Tests
---
edi_exchange_template_oca/models/edi_backend.py | 2 +-
edi_exchange_template_oca/tests/test_edi_backend_output.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/edi_exchange_template_oca/models/edi_backend.py b/edi_exchange_template_oca/models/edi_backend.py
index 5308a38cd..998380a8b 100644
--- a/edi_exchange_template_oca/models/edi_backend.py
+++ b/edi_exchange_template_oca/models/edi_backend.py
@@ -27,7 +27,7 @@ def _get_output_template(self, exchange_record, code=None):
# TODO: maybe we can add a m2o to output templates
# but then we would need another for input templates if they are introduced.
tmpl = None
- candidates = self._get_component_usage_candidates(exchange_record, "output")
+ candidates = self._get_component_usage_candidates(exchange_record, "generate")
if code:
candidates.insert(code)
for usage in candidates:
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index 546606a23..47a57435e 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -32,7 +32,7 @@ def _setup_records(cls):
)
cls.tmpl_out1 = model.create(
{
- "code": "edi.output.demo_backend.test_type_out1",
+ "code": "edi.output.generate.demo_backend.test_type_out1",
"name": "Out 1",
"backend_type_id": cls.backend.backend_type_id.id,
"type_id": cls.type_out1.id,
@@ -72,7 +72,7 @@ def _setup_records(cls):
)
cls.tmpl_out2 = model.create(
{
- "code": "edi.output.demo_backend.test_type_out2",
+ "code": "edi.output.generate.demo_backend.test_type_out2",
"name": "Out 2",
"backend_type_id": cls.backend.backend_type_id.id,
"type_id": cls.type_out2.id,
From 281a4d13a7fbe4b3c47a35fd8c010306d3123457 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 30 Nov 2020 09:58:13 +0000
Subject: [PATCH 10/37] edi_exchange_template 13.0.1.3.0
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index e42bd459b..a8772c7ec 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "13.0.1.2.0",
+ "version": "13.0.1.3.0",
"development_status": "Alpha",
"license": "AGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From b7f33dc308177919b4cfe86be19da23f37fe2843 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Wed, 2 Dec 2020 18:18:15 +0100
Subject: [PATCH 11/37] edi.template: fix info provider lookup
---
.../models/edi_exchange_template_output.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
index 69961c700..28ecf5357 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_output.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -111,7 +111,7 @@ def _get_info_provider(self, exchange_record, work_ctx=None, usage=None, **kw):
)
default_work_ctx.update(work_ctx or {})
usage_candidates = [usage or self.code + ".info"]
- provider = exchange_record.backend_id._get_component(
+ provider = exchange_record.backend_id._find_component(
usage_candidates, work_ctx=default_work_ctx, **kw
)
return provider
From ff09e6464ae3adc902572c63a52736b93fc45dce Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Mon, 7 Dec 2020 13:52:56 +0100
Subject: [PATCH 12/37] edi_exchange_template: fix tests class
---
edi_exchange_template_oca/tests/test_edi_backend_output.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index 47a57435e..f40ac4859 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -4,10 +4,10 @@
from lxml import etree
-from odoo.addons.edi.tests.common import EDIBackendCommonTestCase
+from odoo.addons.edi.tests.common import EDIBackendCommonComponentTestCase
-class TestEDIBackendOutputBase(EDIBackendCommonTestCase):
+class TestEDIBackendOutputBase(EDIBackendCommonComponentTestCase):
@classmethod
def _setup_records(cls):
super()._setup_records()
From 7f29e792a219afa70b193f55be25088d6deb8337 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 8 Dec 2020 10:29:26 +0000
Subject: [PATCH 13/37] edi_exchange_template 13.0.1.4.0
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index a8772c7ec..b3d821816 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "13.0.1.3.0",
+ "version": "13.0.1.4.0",
"development_status": "Alpha",
"license": "AGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From 00463ba040ae18ee4319e461c9e4504f21e3c28f Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Mon, 8 Feb 2021 09:48:25 +0100
Subject: [PATCH 14/37] edi_exchange_template: add TODO
---
edi_exchange_template_oca/components/common.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/edi_exchange_template_oca/components/common.py b/edi_exchange_template_oca/components/common.py
index 06d6a876f..0fe861d44 100644
--- a/edi_exchange_template_oca/components/common.py
+++ b/edi_exchange_template_oca/components/common.py
@@ -8,6 +8,9 @@
class EDIExchangeInfoMixin(AbstractComponent):
"""Abstract component mixin provide info for exchanges."""
+ # TODO: this should be moved to core and renamed to `data`.
+ # A `data` component could be used for both incoming and outgoing.
+
_name = "edi.info.provider.mixin"
_collection = "edi.backend"
# Enable validation of work context attributes
From bf2272a5bdd23ef4fc2955e1b4321f399a1e67f6 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Tue, 9 Mar 2021 17:41:21 +0100
Subject: [PATCH 15/37] edi_exchange_template: adapt lookup to new api
---
edi_exchange_template_oca/models/edi_backend.py | 17 +++++++++++++----
.../tests/test_edi_backend_output.py | 4 ++++
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/edi_exchange_template_oca/models/edi_backend.py b/edi_exchange_template_oca/models/edi_backend.py
index 998380a8b..a4797a55d 100644
--- a/edi_exchange_template_oca/models/edi_backend.py
+++ b/edi_exchange_template_oca/models/edi_backend.py
@@ -24,14 +24,23 @@ def _get_output_template(self, exchange_record, code=None):
Template's code must match the same component usage as per normal components.
"""
+ search = self.output_template_model.search
# TODO: maybe we can add a m2o to output templates
# but then we would need another for input templates if they are introduced.
tmpl = None
- candidates = self._get_component_usage_candidates(exchange_record, "generate")
if code:
- candidates.insert(code)
- for usage in candidates:
- tmpl = self.output_template_model.search([("code", "=", usage)], limit=1)
+ domain = [("code", "=", code)]
+ return search(domain, limit=1)
+ for domain in self._get_output_template_domains(exchange_record):
+ tmpl = search(domain, limit=1)
if tmpl:
break
return tmpl
+
+ def _get_output_template_domains(self, exchange_record):
+ """Retrieve domains to lookup for templates by priority."""
+ backend_type_leaf = [("backend_type_id", "=", self.backend_type_id.id)]
+ exchange_type_leaf = [("type_id", "=", exchange_record.type_id.id)]
+ full_match_domain = backend_type_leaf + exchange_type_leaf
+ partial_match_domain = backend_type_leaf
+ return full_match_domain, partial_match_domain
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index f40ac4859..1365760a4 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -102,6 +102,10 @@ def test_get_template(self):
self.assertEqual(
self.backend._get_output_template(self.record2), self.tmpl_out2
)
+ self.assertEqual(
+ self.backend._get_output_template(self.record2, code=self.tmpl_out1.code),
+ self.tmpl_out1,
+ )
def test_generate_file(self):
output = self.backend.generate_output(self.record1)
From 50e9359418fdf201b722788a29ad495726c498dd Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Wed, 10 Mar 2021 06:49:56 +0000
Subject: [PATCH 16/37] edi_exchange_template 13.0.1.5.0
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index b3d821816..7ab808046 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "13.0.1.4.0",
+ "version": "13.0.1.5.0",
"development_status": "Alpha",
"license": "AGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From a8e84a6cbb060dde4943c9a4e4266f2fe32ec805 Mon Sep 17 00:00:00 2001
From: Enric Tobella
Date: Wed, 10 Mar 2021 13:56:20 +0100
Subject: [PATCH 17/37] [CHG] edi: Use more permissive licence: AGPL-> LGPL
---
edi_exchange_template_oca/README.rst | 10 +++++-----
edi_exchange_template_oca/__manifest__.py | 4 ++--
edi_exchange_template_oca/components/common.py | 2 +-
edi_exchange_template_oca/components/output_mixin.py | 2 +-
edi_exchange_template_oca/models/edi_backend.py | 2 +-
.../models/edi_exchange_template_mixin.py | 2 +-
.../models/edi_exchange_template_output.py | 2 +-
.../static/description/index.html | 2 +-
.../tests/test_edi_backend_output.py | 2 +-
9 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/edi_exchange_template_oca/README.rst b/edi_exchange_template_oca/README.rst
index 20b862b0b..f43910b54 100644
--- a/edi_exchange_template_oca/README.rst
+++ b/edi_exchange_template_oca/README.rst
@@ -10,9 +10,9 @@ EDI Exchange Template
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
-.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
- :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
- :alt: License: AGPL-3
+.. |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-lightgray.png?logo=github
:target: https://github.com/OCA/edi/tree/13.0/edi_exchange_template
:alt: OCA/edi
@@ -23,7 +23,7 @@ EDI Exchange Template
:target: https://runbot.odoo-community.org/runbot/226/13.0
:alt: Try me on Runbot
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
Provide EDI exchange templates to control input/output records contents.
@@ -84,7 +84,7 @@ promote its widespread use.
Current `maintainer `__:
-|maintainer-simahawk|
+|maintainer-simahawk|
This module is part of the `OCA/edi `_ project on GitHub.
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index 7ab808046..b8a4279eb 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -1,13 +1,13 @@
# Copyright 2020 ACSONE
# @author: Simone Orsi
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
"version": "13.0.1.5.0",
"development_status": "Alpha",
- "license": "AGPL-3",
+ "license": "LGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
"maintainers": ["simahawk"],
"depends": ["edi", "component"],
diff --git a/edi_exchange_template_oca/components/common.py b/edi_exchange_template_oca/components/common.py
index 0fe861d44..39c0d5816 100644
--- a/edi_exchange_template_oca/components/common.py
+++ b/edi_exchange_template_oca/components/common.py
@@ -1,6 +1,6 @@
# Copyright 2020 ACSONE
# @author: Simone Orsi
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from odoo.addons.component.core import AbstractComponent
diff --git a/edi_exchange_template_oca/components/output_mixin.py b/edi_exchange_template_oca/components/output_mixin.py
index 4567480ea..0e50c6f57 100644
--- a/edi_exchange_template_oca/components/output_mixin.py
+++ b/edi_exchange_template_oca/components/output_mixin.py
@@ -1,6 +1,6 @@
# Copyright 2020 ACSONE
# @author: Simone Orsi
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
import datetime
diff --git a/edi_exchange_template_oca/models/edi_backend.py b/edi_exchange_template_oca/models/edi_backend.py
index a4797a55d..2a538a90e 100644
--- a/edi_exchange_template_oca/models/edi_backend.py
+++ b/edi_exchange_template_oca/models/edi_backend.py
@@ -1,6 +1,6 @@
# Copyright 2020 ACSONE SA
# @author Simone Orsi
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from odoo import models
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_mixin.py b/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
index ea4dec728..e6a6e53a2 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
@@ -1,6 +1,6 @@
# Copyright 2020 ACSONE SA
# @author Simone Orsi
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
import datetime
import logging
import textwrap
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
index 28ecf5357..49b41bff5 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_output.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -1,6 +1,6 @@
# Copyright 2020 ACSONE SA
# @author Simone Orsi
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
import logging
from odoo import fields, models
diff --git a/edi_exchange_template_oca/static/description/index.html b/edi_exchange_template_oca/static/description/index.html
index b155d5055..50f629253 100644
--- a/edi_exchange_template_oca/static/description/index.html
+++ b/edi_exchange_template_oca/static/description/index.html
@@ -367,7 +367,7 @@ EDI Exchange Template
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Provide EDI exchange templates to control input/output records contents.
Provides following models:
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index 1365760a4..38dc0e82b 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -1,5 +1,5 @@
# Copyright 2020 ACSONE SA/NV ()
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
import base64
from lxml import etree
From f0ed5b4a704dadcbdeb987cc669d62384a732380 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Tue, 8 Dec 2020 22:26:27 +0100
Subject: [PATCH 18/37] edi.backend: rename generate to match others
All the other main methods start with 'exchange_'.
Make generate respect this convention.
---
edi_exchange_template_oca/models/edi_backend.py | 6 +++---
.../models/edi_exchange_template_output.py | 4 ++--
edi_exchange_template_oca/tests/test_edi_backend_output.py | 4 ++--
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/edi_exchange_template_oca/models/edi_backend.py b/edi_exchange_template_oca/models/edi_backend.py
index 2a538a90e..393eb8bd3 100644
--- a/edi_exchange_template_oca/models/edi_backend.py
+++ b/edi_exchange_template_oca/models/edi_backend.py
@@ -8,12 +8,12 @@
class EDIBackend(models.Model):
_inherit = "edi.backend"
- def _generate_output(self, exchange_record, **kw):
+ def _exchange_generate(self, exchange_record, **kw):
# Template take precedence over component lookup
tmpl = self._get_output_template(exchange_record)
if tmpl:
- return tmpl.generate_output(exchange_record, **kw)
- return super()._generate_output(exchange_record, **kw)
+ return tmpl.exchange_generate(exchange_record, **kw)
+ return super()._exchange_generate(exchange_record, **kw)
@property
def output_template_model(self):
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
index 49b41bff5..6206512e0 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_output.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -56,7 +56,7 @@ def _default_code_snippet_docs(self):
"""
)
- def generate_output(self, exchange_record, **kw):
+ def exchange_generate(self, exchange_record, **kw):
"""Generate output for given record using related QWeb template.
"""
tmpl = self.template_id
@@ -90,7 +90,7 @@ def _render_template(self, exchange_record, code, **kw):
"""
tmpl = self.search([("code", "=", code)], limit=1)
tmpl.ensure_one()
- return tmpl.generate_output(exchange_record, **kw)
+ return tmpl.exchange_generate(exchange_record, **kw)
def _post_process_output(self, output):
"""Post process generated output.
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index 38dc0e82b..fb0cb5c98 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -108,12 +108,12 @@ def test_get_template(self):
)
def test_generate_file(self):
- output = self.backend.generate_output(self.record1)
+ output = self.backend.exchange_generate(self.record1)
expected = "{0.ref} - {0.name}".format(self.partner)
self.assertEqual(output.strip(), expected)
file_content = base64.b64decode(self.record1.exchange_file).decode()
self.assertEqual(file_content.strip(), expected)
- output = self.backend.generate_output(self.record2)
+ output = self.backend.exchange_generate(self.record2)
doc = etree.fromstring(output)
self.assertEqual(doc.tag, "Record")
self.assertEqual(doc.attrib, {"ref": self.partner.ref})
From 16a06824a1a0f5a882d3197b97dfaa1547dbf97e Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 15 Mar 2021 21:46:44 +0000
Subject: [PATCH 19/37] [UPD] README.rst
---
edi_exchange_template_oca/README.rst | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/edi_exchange_template_oca/README.rst b/edi_exchange_template_oca/README.rst
index f43910b54..a856a7670 100644
--- a/edi_exchange_template_oca/README.rst
+++ b/edi_exchange_template_oca/README.rst
@@ -23,7 +23,7 @@ EDI Exchange Template
:target: https://runbot.odoo-community.org/runbot/226/13.0
:alt: Try me on Runbot
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
Provide EDI exchange templates to control input/output records contents.
@@ -84,7 +84,7 @@ promote its widespread use.
Current `maintainer `__:
-|maintainer-simahawk|
+|maintainer-simahawk|
This module is part of the `OCA/edi `_ project on GitHub.
From 500961519a6a71438e44580a4ae1a80056db5537 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 15 Mar 2021 21:46:56 +0000
Subject: [PATCH 20/37] edi_exchange_template 13.0.1.5.1
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index b8a4279eb..750a24bf5 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "13.0.1.5.0",
+ "version": "13.0.1.5.1",
"development_status": "Alpha",
"license": "LGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From 0ca46724d933afd1889d0a9dad1f0b9837770f69 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 16 Mar 2021 11:36:32 +0000
Subject: [PATCH 21/37] edi_exchange_template 13.0.1.6.0
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index 750a24bf5..95d6a3d55 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "13.0.1.5.1",
+ "version": "13.0.1.6.0",
"development_status": "Alpha",
"license": "LGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From bcd20529be979874ac819c29b2f413c6574aa8a7 Mon Sep 17 00:00:00 2001
From: Enric Tobella
Date: Tue, 25 May 2021 16:58:03 +0200
Subject: [PATCH 22/37] [IMP] edi_exchange_template: Allow to use report
instead of view
---
.../models/edi_exchange_template_output.py | 28 +++++++++++---
.../tests/test_edi_backend_output.py | 37 +++++++++++++++++++
.../edi_exchange_template_output_views.xml | 16 +++++++-
3 files changed, 74 insertions(+), 7 deletions(-)
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
index 6206512e0..14cb6e241 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_output.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -18,6 +18,11 @@ class EDIExchangeOutputTemplate(models.Model):
_inherit = "edi.exchange.template.mixin"
_description = "EDI Exchange Output Template"
+ generator = fields.Selection(
+ [("qweb", "Qweb Template"), ("report", "Report")],
+ required=True,
+ default="qweb",
+ )
output_type = fields.Char(required=True)
# TODO: add a good domain (maybe add a new flag or category to ir.ui.view)
# Options:
@@ -29,9 +34,10 @@ class EDIExchangeOutputTemplate(models.Model):
template_id = fields.Many2one(
string="Qweb Template",
comodel_name="ir.ui.view",
- required=True,
+ required=False,
ondelete="restrict",
)
+ report_id = fields.Many2one(comodel_name="ir.actions.report", ondelete="restrict",)
# TODO: find a way to prevent editing "master templates"
# This would allow editing only a copy of the original template
# so that you can always check or rollback to it.
@@ -59,12 +65,24 @@ def _default_code_snippet_docs(self):
def exchange_generate(self, exchange_record, **kw):
"""Generate output for given record using related QWeb template.
"""
+ method = "_generate_" + self.generator
+ try:
+ generator = getattr(self, method)
+ except AttributeError:
+ raise NotImplementedError(f"`{method}` not found")
+ result = generator(exchange_record, **kw)
+ return self._post_process_output(result)
+
+ def _generate_qweb(self, exchange_record, **kw):
tmpl = self.template_id
- # TODO: how to validate mandatory render values?
- # (eg: sender/receiver are mandatory for BH)
values = self._get_render_values(exchange_record, **kw)
- output = tmpl.render(values)
- return self._post_process_output(output)
+ return tmpl.render(values)
+
+ def _generate_report(self, exchange_record, **kw):
+ report = self.report_id
+ values = self._get_render_values(exchange_record, **kw)
+ res_ids = values.get("res_ids", [])
+ return report.render(res_ids, data=values)[0]
def _get_render_values(self, exchange_record, **kw):
"""Collect values to render current template."""
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index fb0cb5c98..98bef4fd3 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -91,6 +91,35 @@ def _setup_records(cls):
"type_id": cls.type_out2.id,
}
cls.record2 = cls.backend.create_record("test_type_out2", vals)
+ cls.type_out3 = cls._create_exchange_type(
+ name="Template output 3",
+ direction="output",
+ code="test_type_out3",
+ exchange_file_ext="xml",
+ exchange_filename_pattern="{record.id}-{type.code}-{dt}",
+ )
+ cls.report = cls.env.ref("web.action_report_externalpreview")
+ cls.tmpl_out3 = model.create(
+ {
+ "code": "edi.output.generate.demo_backend.test_type_out3",
+ "name": "Out 3",
+ "backend_type_id": cls.backend.backend_type_id.id,
+ "type_id": cls.type_out3.id,
+ "generator": "report",
+ "report_id": cls.report.id,
+ "output_type": "pdf",
+ "code_snippet": """
+result = {"res_ids": record.ids}
+ """,
+ }
+ )
+ company = cls.env.ref("base.main_company")
+ vals = {
+ "model": company._name,
+ "res_id": company.id,
+ "type_id": cls.type_out2.id,
+ }
+ cls.record3 = cls.backend.create_record("test_type_out3", vals)
# TODO: add more unit tests
@@ -122,3 +151,11 @@ def test_generate_file(self):
self.assertEqual(doc.getchildren()[1].tag, "Custom")
self.assertEqual(doc.getchildren()[1].text, "2")
self.assertEqual(doc.getchildren()[1].attrib, {"bit": "custom_var"})
+
+ def test_generate_file_report(self):
+ output = self.backend.exchange_generate(self.record3)
+ self.assertTrue(output)
+ self.assertEqual(
+ self.report.render([self.record3.res_id])[0].strip().decode("UTF-8"),
+ output.strip(),
+ )
diff --git a/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml b/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
index e5e42e791..91e3cf79e 100644
--- a/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
+++ b/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
@@ -30,10 +30,22 @@
-
+
+
+
-
+
Date: Wed, 26 May 2021 15:30:11 +0200
Subject: [PATCH 23/37] [IMP] edi_exchange_template_oca: black, isort, prettier
---
.../models/edi_exchange_template_mixin.py | 3 +--
.../models/edi_exchange_template_output.py | 21 +++++++++++--------
2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_mixin.py b/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
index e6a6e53a2..383f90b5d 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
@@ -17,8 +17,7 @@
class EDIExchangeTemplateMixin(models.AbstractModel):
- """Define a common ground for EDI exchange templates.
- """
+ """Define a common ground for EDI exchange templates."""
_name = "edi.exchange.template.mixin"
_description = "EDI Exchange Output Mixin"
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
index 14cb6e241..a1afd313b 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_output.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -11,8 +11,7 @@
class EDIExchangeOutputTemplate(models.Model):
- """Define an output template to generate outgoing records' content.
- """
+ """Define an output template to generate outgoing records' content."""
_name = "edi.exchange.template.output"
_inherit = "edi.exchange.template.mixin"
@@ -37,12 +36,17 @@ class EDIExchangeOutputTemplate(models.Model):
required=False,
ondelete="restrict",
)
- report_id = fields.Many2one(comodel_name="ir.actions.report", ondelete="restrict",)
+ report_id = fields.Many2one(
+ comodel_name="ir.actions.report",
+ ondelete="restrict",
+ )
# TODO: find a way to prevent editing "master templates"
# This would allow editing only a copy of the original template
# so that you can always check or rollback to it.
template_arch = fields.Text(
- string="QWeb arch", related="template_id.arch_db", readonly=False,
+ string="QWeb arch",
+ related="template_id.arch_db",
+ readonly=False,
)
template_key = fields.Char(related="template_id.xml_id", string="Template key")
@@ -63,8 +67,7 @@ def _default_code_snippet_docs(self):
)
def exchange_generate(self, exchange_record, **kw):
- """Generate output for given record using related QWeb template.
- """
+ """Generate output for given record using related QWeb template."""
method = "_generate_" + self.generator
try:
generator = getattr(self, method)
@@ -111,8 +114,7 @@ def _render_template(self, exchange_record, code, **kw):
return tmpl.exchange_generate(exchange_record, **kw)
def _post_process_output(self, output):
- """Post process generated output.
- """
+ """Post process generated output."""
if self.output_type == "xml":
# TODO: lookup for components to handle this dynamically
return xml_purge_nswrapper(output)
@@ -125,7 +127,8 @@ def _get_info_provider(self, exchange_record, work_ctx=None, usage=None, **kw):
TODO: add tests
"""
default_work_ctx = dict(
- exchange_record=exchange_record, record=exchange_record.record,
+ exchange_record=exchange_record,
+ record=exchange_record.record,
)
default_work_ctx.update(work_ctx or {})
usage_candidates = [usage or self.code + ".info"]
From 79b92829d639fb957b1bafab905e227c1e0b0a6c Mon Sep 17 00:00:00 2001
From: Enric Tobella
Date: Wed, 26 May 2021 15:42:54 +0200
Subject: [PATCH 24/37] [MIG] edi_exchange_template_oca: Migration to 14.0
---
edi_exchange_template_oca/__manifest__.py | 5 +++--
.../models/edi_exchange_template_mixin.py | 13 +++++--------
.../models/edi_exchange_template_output.py | 4 ++--
.../tests/test_edi_backend_output.py | 4 ++--
4 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index 95d6a3d55..02907dd74 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,12 +5,13 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "13.0.1.6.0",
+ "version": "14.0.1.0.0",
"development_status": "Alpha",
"license": "LGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
"maintainers": ["simahawk"],
- "depends": ["edi", "component"],
+ "website": "https://github.com/OCA/edi",
+ "depends": ["edi_oca", "component"],
"data": [
"security/ir_model_access.xml",
"views/edi_exchange_template_output_views.xml",
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_mixin.py b/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
index 383f90b5d..8a8e1cc5a 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_mixin.py
@@ -4,14 +4,11 @@
import datetime
import logging
import textwrap
-import time
-import dateutil
import pytz
from odoo import fields, models
-from odoo.tools import DotDict
-from odoo.tools.safe_eval import safe_eval
+from odoo.tools import DotDict, safe_eval
_logger = logging.getLogger(__name__)
@@ -90,9 +87,9 @@ def _get_code_snippet_eval_context(self):
:returns: dict -- evaluation context given to safe_eval
"""
return {
- "datetime": datetime,
- "dateutil": dateutil,
- "time": time,
+ "datetime": safe_eval.datetime,
+ "dateutil": safe_eval.dateutil,
+ "time": safe_eval.time,
"uid": self.env.uid,
"user": self.env.user,
"DotDict": DotDict,
@@ -102,7 +99,7 @@ def _evaluate_code_snippet(self, **render_values):
if not self._code_snippet_valued():
return {}
eval_ctx = dict(render_values, **self._get_code_snippet_eval_context())
- safe_eval(self.code_snippet, eval_ctx, mode="exec", nocopy=True)
+ safe_eval.safe_eval(self.code_snippet, eval_ctx, mode="exec", nocopy=True)
result = eval_ctx.get("result", {})
if not isinstance(result, dict):
_logger.error("code_snippet should return a dict into `result`")
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
index a1afd313b..f3707c6ff 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_output.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -79,13 +79,13 @@ def exchange_generate(self, exchange_record, **kw):
def _generate_qweb(self, exchange_record, **kw):
tmpl = self.template_id
values = self._get_render_values(exchange_record, **kw)
- return tmpl.render(values)
+ return tmpl._render(values)
def _generate_report(self, exchange_record, **kw):
report = self.report_id
values = self._get_render_values(exchange_record, **kw)
res_ids = values.get("res_ids", [])
- return report.render(res_ids, data=values)[0]
+ return report._render(res_ids, data=values)[0]
def _get_render_values(self, exchange_record, **kw):
"""Collect values to render current template."""
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index 98bef4fd3..fc45d2465 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -4,7 +4,7 @@
from lxml import etree
-from odoo.addons.edi.tests.common import EDIBackendCommonComponentTestCase
+from odoo.addons.edi_oca.tests.common import EDIBackendCommonComponentTestCase
class TestEDIBackendOutputBase(EDIBackendCommonComponentTestCase):
@@ -156,6 +156,6 @@ def test_generate_file_report(self):
output = self.backend.exchange_generate(self.record3)
self.assertTrue(output)
self.assertEqual(
- self.report.render([self.record3.res_id])[0].strip().decode("UTF-8"),
+ self.report._render([self.record3.res_id])[0].strip().decode("UTF-8"),
output.strip(),
)
From a71b0aee870b97d7e27b40a250f2cbc844c6125e Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Thu, 27 May 2021 13:35:13 +0000
Subject: [PATCH 25/37] [UPD] Update edi_exchange_template_oca.pot
---
.../i18n/edi_exchange_template_oca.pot | 199 ++++++++++++++++++
1 file changed, 199 insertions(+)
create mode 100644 edi_exchange_template_oca/i18n/edi_exchange_template_oca.pot
diff --git a/edi_exchange_template_oca/i18n/edi_exchange_template_oca.pot b/edi_exchange_template_oca/i18n/edi_exchange_template_oca.pot
new file mode 100644
index 000000000..494722a79
--- /dev/null
+++ b/edi_exchange_template_oca/i18n/edi_exchange_template_oca.pot
@@ -0,0 +1,199 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * edi_exchange_template_oca
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.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_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__backend_id
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__backend_id
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_search
+msgid "Backend"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_search
+msgid "Backend type"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__code
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__code
+msgid "Code"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__code_snippet
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__code_snippet
+msgid "Code Snippet"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__code_snippet_docs
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__code_snippet_docs
+msgid "Code Snippet Docs"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_form
+msgid "Code snippet"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_form
+msgid "Code snippet docs"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_backend__display_name
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__display_name
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model,name:edi_exchange_template_oca.model_edi_backend
+msgid "EDI Backend"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__backend_type_id
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__backend_type_id
+msgid "EDI Backend type"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model,name:edi_exchange_template_oca.model_edi_exchange_template_mixin
+msgid "EDI Exchange Output Mixin"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model,name:edi_exchange_template_oca.model_edi_exchange_template_output
+msgid "EDI Exchange Output Template"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.actions.act_window,name:edi_exchange_template_oca.act_open_edi_exchange_template_output_view
+#: model:ir.ui.menu,name:edi_exchange_template_oca.menu_edi_exchange_template_output
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_form
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_search
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_tree
+msgid "EDI Exchange Template Output"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.ui.menu,name:edi_exchange_template_oca.menu_edi_exchange_template_root
+msgid "EDI Exchange Templates"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__type_id
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__type_id
+msgid "EDI Exchange type"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__generator
+msgid "Generator"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_search
+msgid "Group By"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_backend__id
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__id
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__id
+msgid "ID"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,help:edi_exchange_template_oca.field_edi_exchange_template_output__template_key
+msgid "ID of the view defined in xml file"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_backend____last_update
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin____last_update
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__name
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__name
+msgid "Name"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__output_type
+msgid "Output Type"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__template_arch
+msgid "QWeb arch"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__template_id
+#: model:ir.model.fields.selection,name:edi_exchange_template_oca.selection__edi_exchange_template_output__generator__qweb
+msgid "Qweb Template"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__report_id
+#: model:ir.model.fields.selection,name:edi_exchange_template_oca.selection__edi_exchange_template_output__generator__report
+msgid "Report"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_form
+msgid "Template"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__template_key
+msgid "Template key"
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model:ir.model.fields,help:edi_exchange_template_oca.field_edi_exchange_template_output__template_arch
+msgid "This field stores the view arch."
+msgstr ""
+
+#. module: edi_exchange_template_oca
+#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_search
+msgid "Type"
+msgstr ""
From 98ce1970ef46044e1336f5067a9a4f2b783f373c Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Thu, 27 May 2021 13:40:07 +0000
Subject: [PATCH 26/37] [UPD] README.rst
---
edi_exchange_template_oca/README.rst | 10 +++++-----
.../static/description/index.html | 6 +++---
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/edi_exchange_template_oca/README.rst b/edi_exchange_template_oca/README.rst
index a856a7670..ceb1afcc5 100644
--- a/edi_exchange_template_oca/README.rst
+++ b/edi_exchange_template_oca/README.rst
@@ -14,13 +14,13 @@ EDI Exchange Template
: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-lightgray.png?logo=github
- :target: https://github.com/OCA/edi/tree/13.0/edi_exchange_template
+ :target: https://github.com/OCA/edi/tree/14.0/edi_exchange_template_oca
:alt: OCA/edi
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/edi-13-0/edi-13-0-edi_exchange_template
+ :target: https://translation.odoo-community.org/projects/edi-14-0/edi-14-0-edi_exchange_template_oca
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/226/13.0
+ :target: https://runbot.odoo-community.org/runbot/226/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -48,7 +48,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -86,6 +86,6 @@ Current `maintainer `__:
|maintainer-simahawk|
-This module is part of the `OCA/edi `_ project on GitHub.
+This module is part of the `OCA/edi `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/edi_exchange_template_oca/static/description/index.html b/edi_exchange_template_oca/static/description/index.html
index 50f629253..2514094f1 100644
--- a/edi_exchange_template_oca/static/description/index.html
+++ b/edi_exchange_template_oca/static/description/index.html
@@ -367,7 +367,7 @@ EDI Exchange Template
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Provide EDI exchange templates to control input/output records contents.
Provides following models:
@@ -397,7 +397,7 @@
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 smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
From f1d2b6a6bdda9ecb33fe77257ad43b37393df37f Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Fri, 7 Jan 2022 08:26:03 +0100
Subject: [PATCH 27/37] [IMP] edi_exchange_template_oca: Promote to beta
In use for several modules.
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index 02907dd74..a56a2d025 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -6,7 +6,7 @@
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
"version": "14.0.1.0.0",
- "development_status": "Alpha",
+ "development_status": "Beta",
"license": "LGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
"maintainers": ["simahawk"],
From 9a870aa5cb3ab08dee66528922cb5c09505f0d3a Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Fri, 7 Jan 2022 07:26:19 +0000
Subject: [PATCH 28/37] [UPD] README.rst
---
edi_exchange_template_oca/README.rst | 9 ++-------
edi_exchange_template_oca/static/description/index.html | 8 +-------
2 files changed, 3 insertions(+), 14 deletions(-)
diff --git a/edi_exchange_template_oca/README.rst b/edi_exchange_template_oca/README.rst
index ceb1afcc5..856f94524 100644
--- a/edi_exchange_template_oca/README.rst
+++ b/edi_exchange_template_oca/README.rst
@@ -7,9 +7,9 @@ EDI Exchange Template
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
- :alt: Alpha
+ :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
@@ -32,11 +32,6 @@ Provides following models:
1. EDI exchange output template, generates output using QWeb templates
2. [TODO] EDI exchange input template
-.. IMPORTANT::
- This is an alpha version, the data model and design can change at any time without warning.
- Only for development or testing purpose, do not use in production.
- `More details on development status `_
-
**Table of contents**
.. contents::
diff --git a/edi_exchange_template_oca/static/description/index.html b/edi_exchange_template_oca/static/description/index.html
index 2514094f1..5aa6e354b 100644
--- a/edi_exchange_template_oca/static/description/index.html
+++ b/edi_exchange_template_oca/static/description/index.html
@@ -367,19 +367,13 @@ EDI Exchange Template
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Provide EDI exchange templates to control input/output records contents.
Provides following models:
- EDI exchange output template, generates output using QWeb templates
- [TODO] EDI exchange input template
-
-
Important
-
This is an alpha version, the data model and design can change at any time without warning.
-Only for development or testing purpose, do not use in production.
-More details on development status
-
Table of contents
From a06c25fc54ab4d869694b27531d610111ecdfd4d Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Fri, 7 Jan 2022 11:18:53 +0100
Subject: [PATCH 29/37] edi_exchange_template_oca 14.0.1.0.1
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index a56a2d025..400dfea8c 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "14.0.1.0.0",
+ "version": "14.0.1.0.1",
"development_status": "Beta",
"license": "LGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From 88c3549bbc258ca3ece973b683c410b3175124b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Juan=20Ignacio=20=C3=9Abeda?=
Date: Tue, 15 Feb 2022 22:55:42 +0100
Subject: [PATCH 30/37] [MIG] edi_change_template_oca : Migration to 15.0
---
edi_exchange_template_oca/__manifest__.py | 2 +-
.../models/edi_exchange_template_output.py | 2 +-
edi_exchange_template_oca/tests/test_edi_backend_output.py | 3 ++-
.../views/edi_exchange_template_output_views.xml | 2 +-
4 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index 400dfea8c..0dd298a8d 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "14.0.1.0.1",
+ "version": "15.0.1.0.0",
"development_status": "Beta",
"license": "LGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
diff --git a/edi_exchange_template_oca/models/edi_exchange_template_output.py b/edi_exchange_template_oca/models/edi_exchange_template_output.py
index f3707c6ff..d33a9601a 100644
--- a/edi_exchange_template_oca/models/edi_exchange_template_output.py
+++ b/edi_exchange_template_oca/models/edi_exchange_template_output.py
@@ -72,7 +72,7 @@ def exchange_generate(self, exchange_record, **kw):
try:
generator = getattr(self, method)
except AttributeError:
- raise NotImplementedError(f"`{method}` not found")
+ raise NotImplementedError(f"`{method}` not found") from AttributeError
result = generator(exchange_record, **kw)
return self._post_process_output(result)
diff --git a/edi_exchange_template_oca/tests/test_edi_backend_output.py b/edi_exchange_template_oca/tests/test_edi_backend_output.py
index fc45d2465..84f64596e 100644
--- a/edi_exchange_template_oca/tests/test_edi_backend_output.py
+++ b/edi_exchange_template_oca/tests/test_edi_backend_output.py
@@ -10,7 +10,7 @@
class TestEDIBackendOutputBase(EDIBackendCommonComponentTestCase):
@classmethod
def _setup_records(cls):
- super()._setup_records()
+ res = super()._setup_records()
cls.type_out1 = cls._create_exchange_type(
name="Template output 1",
direction="output",
@@ -120,6 +120,7 @@ def _setup_records(cls):
"type_id": cls.type_out2.id,
}
cls.record3 = cls.backend.create_record("test_type_out3", vals)
+ return res
# TODO: add more unit tests
diff --git a/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml b/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
index 91e3cf79e..d9ffdfbb4 100644
--- a/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
+++ b/edi_exchange_template_oca/views/edi_exchange_template_output_views.xml
@@ -3,7 +3,7 @@
edi.exchange.template.output
-
+
From 2698f243bf0e4b5ead11a2cc28ca24a17e01eb30 Mon Sep 17 00:00:00 2001
From: oca-ci
Date: Wed, 23 Feb 2022 10:45:05 +0000
Subject: [PATCH 31/37] [UPD] Update edi_exchange_template_oca.pot
---
.../i18n/edi_exchange_template_oca.pot | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/edi_exchange_template_oca/i18n/edi_exchange_template_oca.pot b/edi_exchange_template_oca/i18n/edi_exchange_template_oca.pot
index 494722a79..98a6eda49 100644
--- a/edi_exchange_template_oca/i18n/edi_exchange_template_oca.pot
+++ b/edi_exchange_template_oca/i18n/edi_exchange_template_oca.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -64,8 +64,6 @@ msgid "Created on"
msgstr ""
#. module: edi_exchange_template_oca
-#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_backend__display_name
-#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__display_name
#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__display_name
msgid "Display Name"
msgstr ""
@@ -96,7 +94,6 @@ msgstr ""
#: model:ir.ui.menu,name:edi_exchange_template_oca.menu_edi_exchange_template_output
#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_form
#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_search
-#: model_terms:ir.ui.view,arch_db:edi_exchange_template_oca.edi_exchange_template_output_view_tree
msgid "EDI Exchange Template Output"
msgstr ""
@@ -122,8 +119,6 @@ msgid "Group By"
msgstr ""
#. module: edi_exchange_template_oca
-#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_backend__id
-#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin__id
#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output__id
msgid "ID"
msgstr ""
@@ -134,8 +129,6 @@ msgid "ID of the view defined in xml file"
msgstr ""
#. module: edi_exchange_template_oca
-#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_backend____last_update
-#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_mixin____last_update
#: model:ir.model.fields,field_description:edi_exchange_template_oca.field_edi_exchange_template_output____last_update
msgid "Last Modified on"
msgstr ""
From 33670fd6e999fda173648c39653ed695ace60109 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Wed, 23 Feb 2022 10:47:54 +0000
Subject: [PATCH 32/37] [UPD] README.rst
---
edi_exchange_template_oca/README.rst | 10 +++++-----
.../static/description/index.html | 6 +++---
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/edi_exchange_template_oca/README.rst b/edi_exchange_template_oca/README.rst
index 856f94524..d9878f980 100644
--- a/edi_exchange_template_oca/README.rst
+++ b/edi_exchange_template_oca/README.rst
@@ -14,13 +14,13 @@ EDI Exchange Template
: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-lightgray.png?logo=github
- :target: https://github.com/OCA/edi/tree/14.0/edi_exchange_template_oca
+ :target: https://github.com/OCA/edi/tree/15.0/edi_exchange_template_oca
:alt: OCA/edi
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/edi-14-0/edi-14-0-edi_exchange_template_oca
+ :target: https://translation.odoo-community.org/projects/edi-15-0/edi-15-0-edi_exchange_template_oca
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/226/14.0
+ :target: https://runbot.odoo-community.org/runbot/226/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -43,7 +43,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -81,6 +81,6 @@ Current `maintainer `__:
|maintainer-simahawk|
-This module is part of the `OCA/edi `_ project on GitHub.
+This module is part of the `OCA/edi `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/edi_exchange_template_oca/static/description/index.html b/edi_exchange_template_oca/static/description/index.html
index 5aa6e354b..a837c1829 100644
--- a/edi_exchange_template_oca/static/description/index.html
+++ b/edi_exchange_template_oca/static/description/index.html
@@ -367,7 +367,7 @@ EDI Exchange Template
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Provide EDI exchange templates to control input/output records contents.
Provides following models:
@@ -391,7 +391,7 @@
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 smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
From 60710be9e15a7b548b87db191b8e4947a92c46ae Mon Sep 17 00:00:00 2001
From: Enric Tobella
Date: Mon, 16 May 2022 16:33:56 +0200
Subject: [PATCH 33/37] [IMP] edi_exchange_template: Allow users to see, but
not edit
---
edi_exchange_template_oca/security/ir_model_access.xml | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/edi_exchange_template_oca/security/ir_model_access.xml b/edi_exchange_template_oca/security/ir_model_access.xml
index c611b9dbf..672ab5d80 100644
--- a/edi_exchange_template_oca/security/ir_model_access.xml
+++ b/edi_exchange_template_oca/security/ir_model_access.xml
@@ -9,4 +9,14 @@
+
+
+ edi_exchange_template_output user
+
+
+
+
+
+
+
From 47ab1c334a517bde4a000463f6e0e62893e0de19 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 16 May 2022 14:49:13 +0000
Subject: [PATCH 34/37] edi_exchange_template_oca 15.0.1.0.1
---
edi_exchange_template_oca/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/edi_exchange_template_oca/__manifest__.py b/edi_exchange_template_oca/__manifest__.py
index 0dd298a8d..50132b666 100644
--- a/edi_exchange_template_oca/__manifest__.py
+++ b/edi_exchange_template_oca/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "EDI Exchange Template",
"summary": """Allows definition of exchanges via templates.""",
- "version": "15.0.1.0.0",
+ "version": "15.0.1.0.1",
"development_status": "Beta",
"license": "LGPL-3",
"author": "ACSONE,Odoo Community Association (OCA)",
From ba506a81da3a8ab47862919c740f7400c7edff4f Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Sun, 3 Sep 2023 12:44:19 +0000
Subject: [PATCH 35/37] [UPD] README.rst
---
edi_exchange_template_oca/README.rst | 15 ++++----
.../static/description/index.html | 36 ++++++++++---------
2 files changed, 28 insertions(+), 23 deletions(-)
diff --git a/edi_exchange_template_oca/README.rst b/edi_exchange_template_oca/README.rst
index d9878f980..a9995904c 100644
--- a/edi_exchange_template_oca/README.rst
+++ b/edi_exchange_template_oca/README.rst
@@ -2,10 +2,13 @@
EDI Exchange Template
=====================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:77f9c8f1d2157e0270a1eadf85a1d39476fdefc8e14bc5cfe0fb47c3dadf118e
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -19,11 +22,11 @@ EDI Exchange Template
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/edi-15-0/edi-15-0-edi_exchange_template_oca
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/226/15.0
- :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/edi&target_branch=15.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
Provide EDI exchange templates to control input/output records contents.
@@ -42,7 +45,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 smashing it by providing a detailed and welcomed
+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.
diff --git a/edi_exchange_template_oca/static/description/index.html b/edi_exchange_template_oca/static/description/index.html
index a837c1829..2113c7f7e 100644
--- a/edi_exchange_template_oca/static/description/index.html
+++ b/edi_exchange_template_oca/static/description/index.html
@@ -1,20 +1,20 @@
-
+
-
+
EDI Exchange Template