From 9e0f05e1f05ee035ff04edc651e59d773e7c7eda Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Thu, 5 Dec 2019 15:12:14 +0100
Subject: [PATCH 01/13] Add module base_m2m_custom_field
---
base_m2m_custom_field/__init__.py | 1 +
base_m2m_custom_field/__manifest__.py | 15 +++++
base_m2m_custom_field/fields.py | 23 +++++++
base_m2m_custom_field/readme/CONTRIBUTORS.rst | 1 +
base_m2m_custom_field/readme/DESCRIPTION.rst | 1 +
base_m2m_custom_field/readme/USAGE.rst | 65 +++++++++++++++++++
6 files changed, 106 insertions(+)
create mode 100644 base_m2m_custom_field/__init__.py
create mode 100644 base_m2m_custom_field/__manifest__.py
create mode 100644 base_m2m_custom_field/fields.py
create mode 100644 base_m2m_custom_field/readme/CONTRIBUTORS.rst
create mode 100644 base_m2m_custom_field/readme/DESCRIPTION.rst
create mode 100644 base_m2m_custom_field/readme/USAGE.rst
diff --git a/base_m2m_custom_field/__init__.py b/base_m2m_custom_field/__init__.py
new file mode 100644
index 000000000..735443893
--- /dev/null
+++ b/base_m2m_custom_field/__init__.py
@@ -0,0 +1 @@
+from . import fields
diff --git a/base_m2m_custom_field/__manifest__.py b/base_m2m_custom_field/__manifest__.py
new file mode 100644
index 000000000..76ae9eb5b
--- /dev/null
+++ b/base_m2m_custom_field/__manifest__.py
@@ -0,0 +1,15 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+{
+ "name": "Base Many2many Custom Field",
+ "summary": "Customizations of Many2many",
+ "version": "12.0.1.0.0",
+ "category": "Technical Settings",
+ "author": "Camptocamp, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "website": "https://github.com/OCA/server-tools",
+ "depends": [
+ "base",
+ ],
+ "installable": True,
+}
diff --git a/base_m2m_custom_field/fields.py b/base_m2m_custom_field/fields.py
new file mode 100644
index 000000000..6136f37fa
--- /dev/null
+++ b/base_m2m_custom_field/fields.py
@@ -0,0 +1,23 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import fields
+
+
+class Many2manyCustom(fields.Many2many):
+ """ Many2manyCustom field is intended to customize Many2many properties.
+
+ :param create_table: defines if the relational table must be created
+ at the initialization of the field (boolean)
+ """
+
+ _slots = {
+ 'create_table': True
+ }
+
+ def update_db(self, model, columns):
+ if not self.create_table:
+ return
+ return super().update_db(model, columns)
+
+
+fields.Many2manyCustom = Many2manyCustom
diff --git a/base_m2m_custom_field/readme/CONTRIBUTORS.rst b/base_m2m_custom_field/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..e31e2f0c4
--- /dev/null
+++ b/base_m2m_custom_field/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Akim Juillerat
diff --git a/base_m2m_custom_field/readme/DESCRIPTION.rst b/base_m2m_custom_field/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..0a88d0367
--- /dev/null
+++ b/base_m2m_custom_field/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
+This module adds a new Many2many custom field with a `create_table` attribute.
diff --git a/base_m2m_custom_field/readme/USAGE.rst b/base_m2m_custom_field/readme/USAGE.rst
new file mode 100644
index 000000000..834fa397d
--- /dev/null
+++ b/base_m2m_custom_field/readme/USAGE.rst
@@ -0,0 +1,65 @@
+Many2manyCustom field is useful when a direct access to the relational table
+is needed, for example to be editable in a dedicated tree view.
+
+Let's consider following models:
+
+.. code-block:: python
+
+ class MyModelA(models.Model):
+
+ _name = 'my.model.a'
+
+ my_model_b_ids = fields.Many2manyCustom(
+ 'my.model.b',
+ 'my_model_a_b_rel',
+ 'my_model_a_id',
+ 'my_model_b_id',
+ create_table=False,
+ )
+
+
+ class MyModelB(models.Model):
+
+ _name = 'my.model.b'
+
+ my_model_a_ids = fields.Many2manyCustom(
+ 'my.model.a',
+ 'my_model_a_b_rel',
+ 'my_model_b_id',
+ 'my_model_a_id',
+ create_table=False,
+ )
+
+
+ class MyModelABRel(models.Model):
+
+ _name = 'my.model.a.b.rel'
+
+ my_model_a_id = fields.Many2one(
+ 'my.model.a',
+ required=True,
+ index=True, # Index is mandatory here
+ )
+ my_model_b_id = fields.Many2one(
+ 'my.model.b',
+ required=True,
+ index=True, # Index is mandatory here
+ )
+
+
+By setting `create_table=False` on the Many2manyCustom field, and using the
+relational table name, as `_name` for the relational model, we're able to
+define a dedicated tree view for `my.model.a.b.rel`.
+
+.. code-block:: xml
+
+
+ my.model.a.b.rel.tree.view
+ my.model.a.b.rel
+
+
+
+
+
+
+
From f0f7328926dfa1f526de616cca06a7e9bc81868d Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Wed, 8 Jan 2020 16:26:27 +0100
Subject: [PATCH 02/13] [IMP] base_m2m_custom_field: black, isort
---
base_m2m_custom_field/__manifest__.py | 4 +---
base_m2m_custom_field/fields.py | 4 +---
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/base_m2m_custom_field/__manifest__.py b/base_m2m_custom_field/__manifest__.py
index 76ae9eb5b..7d72be6d1 100644
--- a/base_m2m_custom_field/__manifest__.py
+++ b/base_m2m_custom_field/__manifest__.py
@@ -8,8 +8,6 @@
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/server-tools",
- "depends": [
- "base",
- ],
+ "depends": ["base"],
"installable": True,
}
diff --git a/base_m2m_custom_field/fields.py b/base_m2m_custom_field/fields.py
index 6136f37fa..65729bd45 100644
--- a/base_m2m_custom_field/fields.py
+++ b/base_m2m_custom_field/fields.py
@@ -10,9 +10,7 @@ class Many2manyCustom(fields.Many2many):
at the initialization of the field (boolean)
"""
- _slots = {
- 'create_table': True
- }
+ _slots = {"create_table": True}
def update_db(self, model, columns):
if not self.create_table:
From c15f7eeed852395348acd1c6685be4831d1237db Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Wed, 8 Jan 2020 16:29:29 +0100
Subject: [PATCH 03/13] [MIG] base_m2m_custom_field: Migration to 13.0
---
base_m2m_custom_field/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/base_m2m_custom_field/__manifest__.py b/base_m2m_custom_field/__manifest__.py
index 7d72be6d1..8fb5e575d 100644
--- a/base_m2m_custom_field/__manifest__.py
+++ b/base_m2m_custom_field/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Base Many2many Custom Field",
"summary": "Customizations of Many2many",
- "version": "12.0.1.0.0",
+ "version": "13.0.1.0.0",
"category": "Technical Settings",
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
From 087d6d932c82c16a8e9e61cb287406e1768555b8 Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Wed, 29 Jan 2020 14:34:15 +0000
Subject: [PATCH 04/13] [UPD] Update base_m2m_custom_field.pot
---
base_m2m_custom_field/README.rst | 142 +++++
.../i18n/base_m2m_custom_field.pot | 13 +
.../static/description/index.html | 483 ++++++++++++++++++
3 files changed, 638 insertions(+)
create mode 100644 base_m2m_custom_field/README.rst
create mode 100644 base_m2m_custom_field/i18n/base_m2m_custom_field.pot
create mode 100644 base_m2m_custom_field/static/description/index.html
diff --git a/base_m2m_custom_field/README.rst b/base_m2m_custom_field/README.rst
new file mode 100644
index 000000000..bcfae17cc
--- /dev/null
+++ b/base_m2m_custom_field/README.rst
@@ -0,0 +1,142 @@
+===========================
+Base Many2many Custom Field
+===========================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-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%2Fserver--tools-lightgray.png?logo=github
+ :target: https://github.com/OCA/server-tools/tree/13.0/base_m2m_custom_field
+ :alt: OCA/server-tools
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/server-tools-13-0/server-tools-13-0-base_m2m_custom_field
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/149/13.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module adds a new Many2many custom field with a `create_table` attribute.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+Many2manyCustom field is useful when a direct access to the relational table
+is needed, for example to be editable in a dedicated tree view.
+
+Let's consider following models:
+
+.. code-block:: python
+
+ class MyModelA(models.Model):
+
+ _name = 'my.model.a'
+
+ my_model_b_ids = fields.Many2manyCustom(
+ 'my.model.b',
+ 'my_model_a_b_rel',
+ 'my_model_a_id',
+ 'my_model_b_id',
+ create_table=False,
+ )
+
+
+ class MyModelB(models.Model):
+
+ _name = 'my.model.b'
+
+ my_model_a_ids = fields.Many2manyCustom(
+ 'my.model.a',
+ 'my_model_a_b_rel',
+ 'my_model_b_id',
+ 'my_model_a_id',
+ create_table=False,
+ )
+
+
+ class MyModelABRel(models.Model):
+
+ _name = 'my.model.a.b.rel'
+
+ my_model_a_id = fields.Many2one(
+ 'my.model.a',
+ required=True,
+ index=True, # Index is mandatory here
+ )
+ my_model_b_id = fields.Many2one(
+ 'my.model.b',
+ required=True,
+ index=True, # Index is mandatory here
+ )
+
+
+By setting `create_table=False` on the Many2manyCustom field, and using the
+relational table name, as `_name` for the relational model, we're able to
+define a dedicated tree view for `my.model.a.b.rel`.
+
+.. code-block:: xml
+
+
+ my.model.a.b.rel.tree.view
+ my.model.a.b.rel
+
+
+
+
+
+
+
+
+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
+~~~~~~~
+
+* Camptocamp
+
+Contributors
+~~~~~~~~~~~~
+
+* Akim Juillerat
+
+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/server-tools `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/base_m2m_custom_field/i18n/base_m2m_custom_field.pot b/base_m2m_custom_field/i18n/base_m2m_custom_field.pot
new file mode 100644
index 000000000..cc93d01ee
--- /dev/null
+++ b/base_m2m_custom_field/i18n/base_m2m_custom_field.pot
@@ -0,0 +1,13 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#
+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"
diff --git a/base_m2m_custom_field/static/description/index.html b/base_m2m_custom_field/static/description/index.html
new file mode 100644
index 000000000..5e37801b9
--- /dev/null
+++ b/base_m2m_custom_field/static/description/index.html
@@ -0,0 +1,483 @@
+
+
+
+
+
+
+Base Many2many Custom Field
+
+
+
+
+
Base Many2many Custom Field
+
+
+

+
This module adds a new Many2many custom field with a create_table attribute.
+
Table of contents
+
+
+
+
Many2manyCustom field is useful when a direct access to the relational table
+is needed, for example to be editable in a dedicated tree view.
+
Let’s consider following models:
+
+class MyModelA(models.Model):
+
+ _name = 'my.model.a'
+
+ my_model_b_ids = fields.Many2manyCustom(
+ 'my.model.b',
+ 'my_model_a_b_rel',
+ 'my_model_a_id',
+ 'my_model_b_id',
+ create_table=False,
+ )
+
+
+class MyModelB(models.Model):
+
+ _name = 'my.model.b'
+
+ my_model_a_ids = fields.Many2manyCustom(
+ 'my.model.a',
+ 'my_model_a_b_rel',
+ 'my_model_b_id',
+ 'my_model_a_id',
+ create_table=False,
+ )
+
+
+class MyModelABRel(models.Model):
+
+ _name = 'my.model.a.b.rel'
+
+ my_model_a_id = fields.Many2one(
+ 'my.model.a',
+ required=True,
+ index=True, # Index is mandatory here
+ )
+ my_model_b_id = fields.Many2one(
+ 'my.model.b',
+ required=True,
+ index=True, # Index is mandatory here
+ )
+
+
By setting create_table=False on the Many2manyCustom field, and using the
+relational table name, as _name for the relational model, we’re able to
+define a dedicated tree view for my.model.a.b.rel.
+
+<record id="my_model_a_b_rel_tree_view" model="ir.ui.view">
+ <field name="name">my.model.a.b.rel.tree.view</field>
+ <field name="model">my.model.a.b.rel</field>
+ <field name="arch" type="xml">
+ <tree editable="top">
+ <field name="my_model_a_id" />
+ <field name="my_model_b_id" />
+ </tree>
+ </field>
+</record>
+
+
+
+
+
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/server-tools project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
From 8da6baedc1d6984ab87a2dd5c37f091b7f5518a7 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Wed, 29 Jan 2020 14:39:06 +0000
Subject: [PATCH 05/13] [ADD] icon.png
---
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 12 ++++++------
2 files changed, 6 insertions(+), 6 deletions(-)
create mode 100644 base_m2m_custom_field/static/description/icon.png
diff --git a/base_m2m_custom_field/static/description/icon.png b/base_m2m_custom_field/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/base_m2m_custom_field/static/description/index.html b/base_m2m_custom_field/static/description/index.html
index 5e37801b9..68eec0fad 100644
--- a/base_m2m_custom_field/static/description/index.html
+++ b/base_m2m_custom_field/static/description/index.html
@@ -397,7 +397,7 @@ is needed, for example to be editable in a dedicated tree view.
'my_model_a_b_rel',
'my_model_a_id',
'my_model_b_id',
- create_table=False,
+ create_table=False,
)
@@ -410,7 +410,7 @@ is needed, for example to be editable in a dedicated tree view.
'my_model_a_b_rel',
'my_model_b_id',
'my_model_a_id',
- create_table=False,
+ create_table=False,
)
@@ -420,13 +420,13 @@ is needed, for example to be editable in a dedicated tree view.
my_model_a_id = fields.Many2one(
'my.model.a',
- required=True,
- index=True, # Index is mandatory here
+ required=True,
+ index=True, # Index is mandatory here
)
my_model_b_id = fields.Many2one(
'my.model.b',
- required=True,
- index=True, # Index is mandatory here
+ required=True,
+ index=True, # Index is mandatory here
)
By setting create_table=False on the Many2manyCustom field, and using the
From 1074e8f986c761575773a9cfa216a8648016f386 Mon Sep 17 00:00:00 2001
From: hparfr
Date: Wed, 13 Jan 2021 17:45:34 +0100
Subject: [PATCH 06/13] [IMP] base_m2m_custom_field: black, isort, prettier
---
base_m2m_custom_field/fields.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/base_m2m_custom_field/fields.py b/base_m2m_custom_field/fields.py
index 65729bd45..80e3372f6 100644
--- a/base_m2m_custom_field/fields.py
+++ b/base_m2m_custom_field/fields.py
@@ -4,10 +4,10 @@ from odoo import fields
class Many2manyCustom(fields.Many2many):
- """ Many2manyCustom field is intended to customize Many2many properties.
+ """Many2manyCustom field is intended to customize Many2many properties.
- :param create_table: defines if the relational table must be created
- at the initialization of the field (boolean)
+ :param create_table: defines if the relational table must be created
+ at the initialization of the field (boolean)
"""
_slots = {"create_table": True}
From 7392a1914a090ed341b37ac6c2cd129fdf9195eb Mon Sep 17 00:00:00 2001
From: hparfr
Date: Wed, 13 Jan 2021 17:45:34 +0100
Subject: [PATCH 07/13] [MIG] base_m2m_custom_field: Migration to 14.0
---
base_m2m_custom_field/__manifest__.py | 2 +-
base_m2m_custom_field/fields.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/base_m2m_custom_field/__manifest__.py b/base_m2m_custom_field/__manifest__.py
index 8fb5e575d..260f581de 100644
--- a/base_m2m_custom_field/__manifest__.py
+++ b/base_m2m_custom_field/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Base Many2many Custom Field",
"summary": "Customizations of Many2many",
- "version": "13.0.1.0.0",
+ "version": "14.0.1.0.0",
"category": "Technical Settings",
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
diff --git a/base_m2m_custom_field/fields.py b/base_m2m_custom_field/fields.py
index 80e3372f6..269d0f5c4 100644
--- a/base_m2m_custom_field/fields.py
+++ b/base_m2m_custom_field/fields.py
@@ -10,7 +10,7 @@ class Many2manyCustom(fields.Many2many):
at the initialization of the field (boolean)
"""
- _slots = {"create_table": True}
+ create_table = True
def update_db(self, model, columns):
if not self.create_table:
From 0c37b49f696fb4332247ffb7bb33b01481d03e0c Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Tue, 9 Feb 2021 23:07:58 +0000
Subject: [PATCH 08/13] [UPD] Update base_m2m_custom_field.pot
---
base_m2m_custom_field/i18n/base_m2m_custom_field.pot | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/base_m2m_custom_field/i18n/base_m2m_custom_field.pot b/base_m2m_custom_field/i18n/base_m2m_custom_field.pot
index cc93d01ee..4d8b20f91 100644
--- a/base_m2m_custom_field/i18n/base_m2m_custom_field.pot
+++ b/base_m2m_custom_field/i18n/base_m2m_custom_field.pot
@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
From 8ce9e06cb6864854c30552e5e2e3c3be2d4a1950 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 9 Feb 2021 23:11:10 +0000
Subject: [PATCH 09/13] [UPD] README.rst
---
base_m2m_custom_field/README.rst | 10 +++++-----
base_m2m_custom_field/static/description/index.html | 6 +++---
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/base_m2m_custom_field/README.rst b/base_m2m_custom_field/README.rst
index bcfae17cc..4809b736f 100644
--- a/base_m2m_custom_field/README.rst
+++ b/base_m2m_custom_field/README.rst
@@ -14,13 +14,13 @@ Base Many2many Custom Field
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github
- :target: https://github.com/OCA/server-tools/tree/13.0/base_m2m_custom_field
+ :target: https://github.com/OCA/server-tools/tree/14.0/base_m2m_custom_field
:alt: OCA/server-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/server-tools-13-0/server-tools-13-0-base_m2m_custom_field
+ :target: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-base_m2m_custom_field
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/149/13.0
+ :target: https://runbot.odoo-community.org/runbot/149/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -107,7 +107,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.
@@ -137,6 +137,6 @@ 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/server-tools `_ project on GitHub.
+This module is part of the `OCA/server-tools `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/base_m2m_custom_field/static/description/index.html b/base_m2m_custom_field/static/description/index.html
index 68eec0fad..3a370d14b 100644
--- a/base_m2m_custom_field/static/description/index.html
+++ b/base_m2m_custom_field/static/description/index.html
@@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module adds a new Many2many custom field with a create_table attribute.
Table of contents
@@ -450,7 +450,7 @@ define a dedicated tree view for
my.model.a.b.rel.
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.
@@ -474,7 +474,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
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/server-tools project on GitHub.
+
This module is part of the OCA/server-tools project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
From 0b947440546b0a3ed49beb8985b4d764981b4f8c Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 9 Feb 2021 23:11:11 +0000
Subject: [PATCH 10/13] base_m2m_custom_field 14.0.1.1.0
---
base_m2m_custom_field/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/base_m2m_custom_field/__manifest__.py b/base_m2m_custom_field/__manifest__.py
index 260f581de..e69877647 100644
--- a/base_m2m_custom_field/__manifest__.py
+++ b/base_m2m_custom_field/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Base Many2many Custom Field",
"summary": "Customizations of Many2many",
- "version": "14.0.1.0.0",
+ "version": "14.0.1.1.0",
"category": "Technical Settings",
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
From 27bce7f3414cf60628d8a0ddc4a8d784f721064b Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Sun, 3 Sep 2023 16:46:20 +0000
Subject: [PATCH 11/13] [UPD] README.rst
---
base_m2m_custom_field/README.rst | 15 ++-
.../static/description/index.html | 118 +++++++++---------
2 files changed, 69 insertions(+), 64 deletions(-)
diff --git a/base_m2m_custom_field/README.rst b/base_m2m_custom_field/README.rst
index 4809b736f..ed5df6ef7 100644
--- a/base_m2m_custom_field/README.rst
+++ b/base_m2m_custom_field/README.rst
@@ -2,10 +2,13 @@
Base Many2many Custom Field
===========================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:ac28509a998ece35b07c3c8ca1c0a85e96d0ff5b587a83505e5fdb616cc4c1e7
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -19,11 +22,11 @@ Base Many2many Custom Field
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-base_m2m_custom_field
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/149/14.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/server-tools&target_branch=14.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
This module adds a new Many2many custom field with a `create_table` attribute.
@@ -106,7 +109,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/base_m2m_custom_field/static/description/index.html b/base_m2m_custom_field/static/description/index.html
index 3a370d14b..d34409152 100644
--- a/base_m2m_custom_field/static/description/index.html
+++ b/base_m2m_custom_field/static/description/index.html
@@ -1,20 +1,20 @@
-
+
-
+
Base Many2many Custom Field