From 1664971c9666366a4e11f6cdc2158353e2b6ac7c Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 1 Mar 2021 16:09:08 +0000
Subject: [PATCH 001/161] [14.0][ADD] base_revision
---
base_revision/README.rst | 113 +++++
base_revision/__init__.py | 2 +
base_revision/__manifest__.py | 23 +
base_revision/i18n/base_revision.pot | 81 ++++
base_revision/models/__init__.py | 3 +
base_revision/models/base_revision.py | 111 +++++
base_revision/readme/CONTRIBUTORS.rst | 9 +
base_revision/readme/DESCRIPTION.rst | 28 ++
base_revision/static/description/icon.png | Bin 0 -> 9455 bytes
base_revision/static/description/index.html | 452 ++++++++++++++++++++
base_revision/tests/__init__.py | 4 +
base_revision/tests/base_revision_tester.py | 32 ++
base_revision/tests/test_base_revision.py | 88 ++++
13 files changed, 946 insertions(+)
create mode 100644 base_revision/README.rst
create mode 100644 base_revision/__init__.py
create mode 100644 base_revision/__manifest__.py
create mode 100644 base_revision/i18n/base_revision.pot
create mode 100644 base_revision/models/__init__.py
create mode 100644 base_revision/models/base_revision.py
create mode 100644 base_revision/readme/CONTRIBUTORS.rst
create mode 100644 base_revision/readme/DESCRIPTION.rst
create mode 100644 base_revision/static/description/icon.png
create mode 100644 base_revision/static/description/index.html
create mode 100644 base_revision/tests/__init__.py
create mode 100644 base_revision/tests/base_revision_tester.py
create mode 100644 base_revision/tests/test_base_revision.py
diff --git a/base_revision/README.rst b/base_revision/README.rst
new file mode 100644
index 0000000000..4d30690cc6
--- /dev/null
+++ b/base_revision/README.rst
@@ -0,0 +1,113 @@
+========================
+Base Revision (abstract)
+========================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! 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--ux-lightgray.png?logo=github
+ :target: https://github.com/OCA/server-ux/tree/14.0/base_revision
+ :alt: OCA/server-ux
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/server-ux-14-0/server-ux-14-0-base_revision
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/250/14.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+Making revision(s) of a document is a common need across many area.
+
+This module does not provide a functionality by itself but an abstract model
+to implement revision capality in other models
+(e.g. purchase orders, sales orders, budgets, expenses...).
+
+**Note:** To be able to use this module in a new model you will need some
+development.
+
+See `sale_order_revision `_ as an example of implementation.
+
+Example with sale_order_revision installed,
+
+On a cancelled orders, you can click on the "New copy of Quotation" button. This
+will create a new revision of the quotation, with the same base number and a
+'-revno' suffix appended. A message is added in the chatter saying that a new
+revision was created.
+
+In the form view, a new tab is added that lists the previous revisions, with
+the date they were made obsolete and the user who performed the action.
+
+The old revisions of a sale order are flagged as inactive, so they don't
+clutter up searches.
+
+**Special Remarks:** Starting on version 14, this module was splitted from sale_order_revision to,
+
+- base_revision
+- sale_order_revision
+
+**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
+~~~~~~~
+
+* Agile Business Group
+* Dreambits
+* Camptocamp
+* Akretion
+* Serpent Consulting Services Pvt. Ltd.
+* Ecosoft
+
+Contributors
+~~~~~~~~~~~~
+
+* Devang Pipaliya
+* Lorenzo Battistini
+* Raphael Valyi
+* Alexandre Fayolle
+* Serpent Consulting Services Pvt. Ltd.
+* Akim Juillerat
+* Raf Ven
+* Jeroen Evens
+* Kitti U.
+
+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-ux `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/base_revision/__init__.py b/base_revision/__init__.py
new file mode 100644
index 0000000000..cb45f2710a
--- /dev/null
+++ b/base_revision/__init__.py
@@ -0,0 +1,2 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from . import models
diff --git a/base_revision/__manifest__.py b/base_revision/__manifest__.py
new file mode 100644
index 0000000000..47885f0472
--- /dev/null
+++ b/base_revision/__manifest__.py
@@ -0,0 +1,23 @@
+# Copyright 2013 Agile Business Group sagl ()
+# Copyright 2016 Serpent Consulting Services Pvt. Ltd.
+# Copyright 2018 Dreambits Technologies Pvt. Ltd. ()
+# Copyright 2020 Ecosoft Co., Ltd. ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+{
+ "name": "Base Revision (abstract)",
+ "summary": "Keep track of revised document",
+ "version": "14.0.1.0.0",
+ "category": "Tools",
+ "author": "Agile Business Group,"
+ "Dreambits,"
+ "Camptocamp,"
+ "Akretion,"
+ "Serpent Consulting Services Pvt. Ltd.,"
+ "Ecosoft,"
+ "Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/server-ux",
+ "license": "AGPL-3",
+ "depends": ["base"],
+ "installable": True,
+}
diff --git a/base_revision/i18n/base_revision.pot b/base_revision/i18n/base_revision.pot
new file mode 100644
index 0000000000..0cb1c334c1
--- /dev/null
+++ b/base_revision/i18n/base_revision.pot
@@ -0,0 +1,81 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * base_revision
+#
+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: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision__active
+msgid "Active"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision__current_revision_id
+msgid "Current revision"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model,name:base_revision.model_base_revision
+msgid "Document Revision (abstract)"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision__has_old_revisions
+msgid "Has Old Revisions"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision__id
+msgid "ID"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: base_revision
+#: code:addons/base_revision/models/base_revision.py:0
+#, python-format
+msgid "New Revisions"
+msgstr ""
+
+#. module: base_revision
+#: code:addons/base_revision/models/base_revision.py:0
+#, python-format
+msgid "New revision created: %s"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision__old_revision_ids
+msgid "Old revisions"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision__unrevisioned_name
+msgid "Original Reference"
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.constraint,message:base_revision.constraint_base_revision_revision_unique
+msgid "Reference and revision must be unique."
+msgstr ""
+
+#. module: base_revision
+#: model:ir.model.fields,field_description:base_revision.field_base_revision__revision_number
+msgid "Revision"
+msgstr ""
diff --git a/base_revision/models/__init__.py b/base_revision/models/__init__.py
new file mode 100644
index 0000000000..87cc68f98e
--- /dev/null
+++ b/base_revision/models/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from . import base_revision
diff --git a/base_revision/models/base_revision.py b/base_revision/models/base_revision.py
new file mode 100644
index 0000000000..1422035130
--- /dev/null
+++ b/base_revision/models/base_revision.py
@@ -0,0 +1,111 @@
+# Copyright 2013 Agile Business Group sagl ()
+# Copyright 2016 Serpent Consulting Services Pvt. Ltd.
+# Copyright 2018 Dreambits Technologies Pvt. Ltd. ()
+# Copyright 2020 Ecosoft Co., Ltd. ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import _, api, fields, models
+
+
+class BaseRevision(models.AbstractModel):
+ _name = "base.revision"
+ _description = "Document Revision (abstract)"
+
+ @api.depends("old_revision_ids")
+ def _compute_has_old_revisions(self):
+ for rec in self:
+ rec.has_old_revisions = (
+ True if rec.with_context(active_test=False).old_revision_ids else False
+ )
+
+ current_revision_id = fields.Many2one(
+ comodel_name="base.revision",
+ string="Current revision",
+ readonly=True,
+ copy=True,
+ )
+ old_revision_ids = fields.One2many(
+ comodel_name="base.revision",
+ inverse_name="current_revision_id",
+ string="Old revisions",
+ readonly=True,
+ domain=["|", ("active", "=", False), ("active", "=", True)],
+ context={"active_test": False},
+ )
+ revision_number = fields.Integer(string="Revision", copy=False, default=0)
+ unrevisioned_name = fields.Char(
+ string="Original Reference", copy=True, readonly=True
+ )
+ active = fields.Boolean(default=True)
+ has_old_revisions = fields.Boolean(compute="_compute_has_old_revisions")
+
+ _sql_constraints = [
+ (
+ "revision_unique",
+ "unique(unrevisioned_name, revision_number)",
+ "Reference and revision must be unique.",
+ )
+ ]
+
+ @api.returns("self", lambda value: value.id)
+ def copy(self, default=None):
+ default = default or {}
+ if "unrevisioned_name" not in default:
+ default["unrevisioned_name"] = False
+ rec = super().copy(default=default)
+ if not rec.unrevisioned_name:
+ name_field = self._context.get("revision_name_field", "name")
+ rec.write({"unrevisioned_name": rec[name_field]})
+ return rec
+
+ def _get_new_rev_data(self, new_rev_number):
+ self.ensure_one()
+ return {
+ "revision_number": new_rev_number,
+ "unrevisioned_name": self.unrevisioned_name,
+ "name": "%s-%02d" % (self.unrevisioned_name, new_rev_number),
+ "old_revision_ids": [(4, self.id, False)],
+ }
+
+ def copy_revision_with_context(self):
+ default_data = self.default_get([])
+ new_rev_number = self.revision_number + 1
+ vals = self._get_new_rev_data(new_rev_number)
+ default_data.update(vals)
+ new_revision = self.copy(default_data)
+ self.old_revision_ids.write({"current_revision_id": new_revision.id})
+ self.write(
+ {"active": False, "state": "cancel", "current_revision_id": new_revision.id}
+ )
+ return new_revision
+
+ @api.model
+ def create(self, values):
+ rec = super().create(values)
+ if "unrevisioned_name" not in values:
+ name_field = self._context.get("revision_name_field", "name")
+ rec.write({"unrevisioned_name": rec[name_field]})
+ return rec
+
+ def create_revision(self):
+ revision_ids = []
+ # Looping over records
+ for rec in self:
+ # Calling Copy method
+ copied_rec = rec.copy_revision_with_context()
+ if hasattr(self, "message_post"):
+ msg = _("New revision created: %s") % copied_rec.name
+ copied_rec.message_post(body=msg)
+ rec.message_post(body=msg)
+ revision_ids.append(copied_rec.id)
+ action = {
+ "type": "ir.actions.act_window",
+ "view_mode": "tree,form",
+ "name": _("New Revisions"),
+ "res_model": self._name,
+ "domain": "[('id', 'in', %s)]" % revision_ids,
+ "auto_search": True,
+ "target": "current",
+ "nodestroy": True,
+ }
+ return action
diff --git a/base_revision/readme/CONTRIBUTORS.rst b/base_revision/readme/CONTRIBUTORS.rst
new file mode 100644
index 0000000000..8192f62d71
--- /dev/null
+++ b/base_revision/readme/CONTRIBUTORS.rst
@@ -0,0 +1,9 @@
+* Devang Pipaliya
+* Lorenzo Battistini
+* Raphael Valyi
+* Alexandre Fayolle
+* Serpent Consulting Services Pvt. Ltd.
+* Akim Juillerat
+* Raf Ven
+* Jeroen Evens
+* Kitti U.
diff --git a/base_revision/readme/DESCRIPTION.rst b/base_revision/readme/DESCRIPTION.rst
new file mode 100644
index 0000000000..5f6db8f94a
--- /dev/null
+++ b/base_revision/readme/DESCRIPTION.rst
@@ -0,0 +1,28 @@
+Making revision(s) of a document is a common need across many area.
+
+This module does not provide a functionality by itself but an abstract model
+to implement revision capality in other models
+(e.g. purchase orders, sales orders, budgets, expenses...).
+
+**Note:** To be able to use this module in a new model you will need some
+development.
+
+See `sale_order_revision `_ as an example of implementation.
+
+Example with sale_order_revision installed,
+
+On a cancelled orders, you can click on the "New copy of Quotation" button. This
+will create a new revision of the quotation, with the same base number and a
+'-revno' suffix appended. A message is added in the chatter saying that a new
+revision was created.
+
+In the form view, a new tab is added that lists the previous revisions, with
+the date they were made obsolete and the user who performed the action.
+
+The old revisions of a sale order are flagged as inactive, so they don't
+clutter up searches.
+
+**Special Remarks:** Starting on version 14, this module was splitted from sale_order_revision to,
+
+- base_revision
+- sale_order_revision
diff --git a/base_revision/static/description/icon.png b/base_revision/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_revision/static/description/index.html b/base_revision/static/description/index.html
new file mode 100644
index 0000000000..d46fc1bd7e
--- /dev/null
+++ b/base_revision/static/description/index.html
@@ -0,0 +1,452 @@
+
+
+
+
+
+
+Base Revision (abstract)
+
+
+
+
+
Base Revision (abstract)
+
+
+
+
Making revision(s) of a document is a common need across many area.
+
This module does not provide a functionality by itself but an abstract model
+to implement revision capality in other models
+(e.g. purchase orders, sales orders, budgets, expenses…).
+
Note: To be able to use this module in a new model you will need some
+development.
On a cancelled orders, you can click on the “New copy of Quotation” button. This
+will create a new revision of the quotation, with the same base number and a
+‘-revno’ suffix appended. A message is added in the chatter saying that a new
+revision was created.
+
In the form view, a new tab is added that lists the previous revisions, with
+the date they were made obsolete and the user who performed the action.
+
The old revisions of a sale order are flagged as inactive, so they don’t
+clutter up searches.
+
Special Remarks: Starting on version 14, this module was splitted from sale_order_revision to,
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.
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-ux project on GitHub.
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.
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-ux project on GitHub.
+
This module is part of the OCA/server-ux project on GitHub.
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.
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-ux project on GitHub.
+
This module is part of the OCA/server-ux project on GitHub.
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.
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-ux project on GitHub.
-
-
-
-
- base.substate
-
-
-
-
-
-
-
-
- Base Substate
- ir.actions.act_window
- base.substate
- form
- tree,form
-
- []
- {}
-
-
-
-
-
- form
-
-
-
-
-
-
- tree
-
-
-
-
+
+
+
+
+
+ base.substate
+
+
+
+
+
+
+
+ Base Substate
+ ir.actions.act_window
+ base.substate
+ form
+ tree,form
+
+ []
+ {}
+
+
+
+
+ form
+
+
+
+
+
+ tree
+
+
+
From e2ab1a6a958885041c2ba87984c53cb9305cbae6 Mon Sep 17 00:00:00 2001
From: Kitti U
Date: Sun, 30 Aug 2020 11:04:10 +0700
Subject: [PATCH 024/161] [13.0][MIG] base_substate
---
base_substate/README.rst | 15 ++++----
base_substate/__manifest__.py | 2 +-
base_substate/i18n/base_substate.pot | 29 ++++++++++-----
base_substate/models/base_substate_mixin.py | 37 ++++++++++++++++++-
base_substate/readme/CONTRIBUTORS.rst | 1 +
base_substate/readme/DESCRIPTION.rst | 2 +-
base_substate/readme/USAGE.rst | 2 +-
base_substate/static/description/index.html | 11 +++---
base_substate/tests/sale_test.py | 14 +++----
base_substate/tests/test_base_substate.py | 2 +-
.../views/base_substate_type_views.xml | 1 -
.../views/base_substate_value_views.xml | 1 -
base_substate/views/base_substate_views.xml | 1 -
13 files changed, 81 insertions(+), 37 deletions(-)
diff --git a/base_substate/README.rst b/base_substate/README.rst
index e9772bdacf..e03817206d 100644
--- a/base_substate/README.rst
+++ b/base_substate/README.rst
@@ -14,13 +14,13 @@ Base Sub State
: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--ux-lightgray.png?logo=github
- :target: https://github.com/OCA/server-ux/tree/12.0/base_substate
+ :target: https://github.com/OCA/server-ux/tree/13.0/base_substate
:alt: OCA/server-ux
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/server-ux-12-0/server-ux-12-0-base_substate
+ :target: https://translation.odoo-community.org/projects/server-ux-13-0/server-ux-13-0-base_substate
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/250/12.0
+ :target: https://runbot.odoo-community.org/runbot/250/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -36,7 +36,7 @@ example:
* We can also send mail when the susbstate is reached.
It is not useful for itself. You can see an example of implementation
-in the 'sale_substate' module. (sale-workflow repository).
+in the 'purchase_substate' module. (purchase-workflow repository).
**Table of contents**
@@ -46,7 +46,7 @@ in the 'sale_substate' module. (sale-workflow repository).
Usage
=====
-#. You must install an application module depending this one (for example sale_substate)
+#. You must install an application module depending this one (for example purchase_substate)
Bug Tracker
===========
@@ -54,7 +54,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.
@@ -70,6 +70,7 @@ Contributors
~~~~~~~~~~~~
* Mourad EL HADJ MIMOUNE
+* Kitti U.
Maintainers
~~~~~~~~~~~
@@ -84,6 +85,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-ux `_ project on GitHub.
+This module is part of the `OCA/server-ux `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/base_substate/__manifest__.py b/base_substate/__manifest__.py
index ddc8c4ce96..dd8219d50b 100644
--- a/base_substate/__manifest__.py
+++ b/base_substate/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Base Sub State",
- "version": "12.0.1.0.0",
+ "version": "13.0.1.0.0",
"category": "Tools",
"author": "Akretion, " "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/sale-workflow/",
diff --git a/base_substate/i18n/base_substate.pot b/base_substate/i18n/base_substate.pot
index 218c1a4cc7..7b28bc5cca 100644
--- a/base_substate/i18n/base_substate.pot
+++ b/base_substate/i18n/base_substate.pot
@@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * base_substate
+# * base_substate
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -91,7 +91,9 @@ msgstr ""
#. module: base_substate
#: model:ir.model.fields,help:base_substate.field_base_substate__mail_template_id
-msgid "If set, an email will be sent to the partner when the object reaches this substate."
+msgid ""
+"If set, an email will be sent to the partner when the object reaches this "
+"substate."
msgstr ""
#. module: base_substate
@@ -188,24 +190,33 @@ msgstr ""
#. module: base_substate
#: model:ir.model.fields,help:base_substate.field_target_state_value__name
-msgid "Target state translateble name.\n"
+msgid ""
+"Target state translateble name.\n"
"Ex: for sale order \"Quotation\", \"Sale order\", \"Locked\"..."
msgstr ""
#. module: base_substate
#: model:ir.model.fields,help:base_substate.field_base_substate_type__target_state_field
-msgid "Technical target state field name. Ex for sale order \"state\" for other \"status\" ... "
+msgid ""
+"Technical target state field name. Ex for sale order \"state\" for other "
+"\"status\" ... "
msgstr ""
#. module: base_substate
#: model:ir.model.fields,help:base_substate.field_target_state_value__target_state_value
-msgid "Technical target state value.\n"
+msgid ""
+"Technical target state value.\n"
"Ex: for sale order \"draft\", \"sale\", \"done\", ..."
msgstr ""
#. module: base_substate
-#: code:addons/base_substate/models/base_substate_mixin.py:67
+#: code:addons/base_substate/models/base_substate_mixin.py:0
#, python-format
-msgid "This substate is not define for this object but for %s"
+msgid "The substate \"%s\" is not define for the state \"%s\" but for \"%s\" "
msgstr ""
+#. module: base_substate
+#: code:addons/base_substate/models/base_substate_mixin.py:0
+#, python-format
+msgid "This substate is not define for this object but for %s"
+msgstr ""
diff --git a/base_substate/models/base_substate_mixin.py b/base_substate/models/base_substate_mixin.py
index 66961006c8..cb994d3e0b 100644
--- a/base_substate/models/base_substate_mixin.py
+++ b/base_substate/models/base_substate_mixin.py
@@ -8,6 +8,42 @@
class BaseSubstateMixin(models.AbstractModel):
_name = "base.substate.mixin"
_description = "BaseSubstate Mixin"
+ _state_field = "state"
+
+ @api.constrains("substate_id", _state_field)
+ def check_substate_id_value(self):
+ rec_states = dict(self._fields[self._state_field].selection)
+ for rec in self:
+ target_state = rec.substate_id.target_state_value_id.target_state_value
+ if rec.substate_id and rec.state != target_state:
+ raise ValidationError(
+ _(
+ 'The substate "%s" is not define for the state'
+ ' "%s" but for "%s" '
+ )
+ % (
+ rec.substate_id.name,
+ _(rec_states[rec.state]),
+ _(rec_states[target_state]),
+ )
+ )
+
+ def _track_template(self, tracking):
+ res = super()._track_template(tracking)
+ first_rec = self[0]
+ changes, tracking_value_ids = tracking[first_rec.id]
+ if "substate_id" in changes and first_rec.substate_id.mail_template_id:
+ res["substate_id"] = (
+ first_rec.substate_id.mail_template_id,
+ {
+ "auto_delete_message": True,
+ "subtype_id": self.env["ir.model.data"].xmlid_to_res_id(
+ "mail.mt_note"
+ ),
+ "notif_layout": "mail.mail_notification_light",
+ },
+ )
+ return res
def _get_default_substate_id(self, state_val=False):
""" Gives default substate_id """
@@ -78,7 +114,6 @@ def _update_before_write_create(self, values):
values["substate_id"] = self._get_default_substate_id(state_val)
return values
- @api.multi
def write(self, values):
values = self._update_before_write_create(values)
res = super().write(values)
diff --git a/base_substate/readme/CONTRIBUTORS.rst b/base_substate/readme/CONTRIBUTORS.rst
index f55657f6b9..4bb895c6ca 100644
--- a/base_substate/readme/CONTRIBUTORS.rst
+++ b/base_substate/readme/CONTRIBUTORS.rst
@@ -1 +1,2 @@
* Mourad EL HADJ MIMOUNE
+* Kitti U.
diff --git a/base_substate/readme/DESCRIPTION.rst b/base_substate/readme/DESCRIPTION.rst
index 290681551d..3268944e41 100644
--- a/base_substate/readme/DESCRIPTION.rst
+++ b/base_substate/readme/DESCRIPTION.rst
@@ -9,4 +9,4 @@ example:
* We can also send mail when the susbstate is reached.
It is not useful for itself. You can see an example of implementation
-in the 'sale_substate' module. (sale-workflow repository).
+in the 'purchase_substate' module. (purchase-workflow repository).
diff --git a/base_substate/readme/USAGE.rst b/base_substate/readme/USAGE.rst
index 1b8849ea93..fca986c290 100644
--- a/base_substate/readme/USAGE.rst
+++ b/base_substate/readme/USAGE.rst
@@ -1 +1 @@
-#. You must install an application module depending this one (for example sale_substate)
+#. You must install an application module depending this one (for example purchase_substate)
diff --git a/base_substate/static/description/index.html b/base_substate/static/description/index.html
index 6511a08abd..2b0c25f672 100644
--- a/base_substate/static/description/index.html
+++ b/base_substate/static/description/index.html
@@ -367,7 +367,7 @@
Base Sub State
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module provide abstract models to manage customizable
substates to be applied on different models (sale order, purchase, …).
@@ -378,7 +378,7 @@
example:
We can also send mail when the susbstate is reached.
It is not useful for itself. You can see an example of implementation
-in the ‘sale_substate’ module. (sale-workflow repository).
+in the ‘purchase_substate’ module. (purchase-workflow repository).
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.
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-ux project on GitHub.
+
This module is part of the OCA/server-ux project on GitHub.
From 73a68258338c349a88d0373cd4e108831ec0e49f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Bidoul?=
Date: Sat, 15 May 2021 11:17:26 +0200
Subject: [PATCH 026/161] [IMP] update dotfiles
---
base_substate/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/base_substate/__manifest__.py b/base_substate/__manifest__.py
index dca677fa24..adadb54411 100644
--- a/base_substate/__manifest__.py
+++ b/base_substate/__manifest__.py
@@ -6,7 +6,7 @@
"version": "13.0.1.1.0",
"category": "Tools",
"author": "Akretion, " "Odoo Community Association (OCA)",
- "website": "https://github.com/OCA/sale-workflow/",
+ "website": "https://github.com/OCA/server-ux",
"license": "AGPL-3",
"depends": ["base"],
"data": [
From bb873aff31e07d7e7ebf863d4d2f99217cad948c Mon Sep 17 00:00:00 2001
From: Alexei Rivera
Date: Wed, 22 Dec 2021 09:16:20 -0500
Subject: [PATCH 027/161] [IMP] base_substate: black, isort, prettier
---
base_substate/models/base_substate.py | 7 ++++--
base_substate/models/base_substate_mixin.py | 24 ++++++++++++---------
2 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/base_substate/models/base_substate.py b/base_substate/models/base_substate.py
index a312488942..ebb6b31ef6 100644
--- a/base_substate/models/base_substate.py
+++ b/base_substate/models/base_substate.py
@@ -48,7 +48,9 @@ class TargetStateValue(models.Model):
'Ex: for sale order "Quotation", "Sale order", "Locked"...',
)
base_substate_type_id = fields.Many2one(
- "base.substate.type", string="Substate Type", ondelete="restrict",
+ "base.substate.type",
+ string="Substate Type",
+ ondelete="restrict",
)
target_state_value = fields.Char(
required=True,
@@ -80,7 +82,8 @@ class BaseSubstate(models.Model):
name = fields.Char("Substate Name", required=True, translate=True)
description = fields.Text(translate=True)
sequence = fields.Integer(
- index=True, help="Gives the sequence order when applying the default substate",
+ index=True,
+ help="Gives the sequence order when applying the default substate",
)
target_state_value_id = fields.Many2one(
"target.state.value", string="Target State Value", ondelete="restrict"
diff --git a/base_substate/models/base_substate_mixin.py b/base_substate/models/base_substate_mixin.py
index cb994d3e0b..f800b00ee9 100644
--- a/base_substate/models/base_substate_mixin.py
+++ b/base_substate/models/base_substate_mixin.py
@@ -46,7 +46,7 @@ def _track_template(self, tracking):
return res
def _get_default_substate_id(self, state_val=False):
- """ Gives default substate_id """
+ """Gives default substate_id"""
search_domain = self._get_default_substate_domain(state_val)
# perform search, return the first found
return (
@@ -56,8 +56,8 @@ def _get_default_substate_id(self, state_val=False):
)
def _get_default_substate_domain(self, state_val=False):
- """ Override this method
- to change domain values
+ """Override this method
+ to change domain values
"""
if not state_val:
state_val = self._get_default_state_value()
@@ -72,15 +72,19 @@ def _get_default_substate_domain(self, state_val=False):
]
return domain
- def _get_default_state_value(self,):
- """ Override this method
- to change state_value
- """
+ def _get_default_state_value(
+ self,
+ ):
+ """Override this method
+ to change state_value
+ """
return "draft"
- def _get_substate_type(self,):
- """ Override this method
- to change substate_type (get by xml id for example)
+ def _get_substate_type(
+ self,
+ ):
+ """Override this method
+ to change substate_type (get by xml id for example)
"""
return self.env["base.substate.type"].search(
[("model", "=", self._name)], limit=1
From fb6583d04c7dac0a32618b191c4dc8f3abf3edd5 Mon Sep 17 00:00:00 2001
From: Alexei Rivera
Date: Wed, 22 Dec 2021 11:44:58 -0500
Subject: [PATCH 028/161] [MIG] base_substate: Migration to 15.0
---
base_substate/README.rst | 15 ++++++++-------
base_substate/__manifest__.py | 4 ++--
base_substate/i18n/base_substate.pot | 9 ++++-----
base_substate/models/base_substate.py | 4 ++--
base_substate/models/base_substate_mixin.py | 16 ++++++++--------
base_substate/readme/CONTRIBUTORS.rst | 1 +
base_substate/readme/DESCRIPTION.rst | 4 ++--
base_substate/static/description/index.html | 11 ++++++-----
base_substate/tests/test_base_substate.py | 7 +++----
.../views/base_substate_type_views.xml | 4 ++--
base_substate/views/base_substate_views.xml | 17 +++++++++--------
11 files changed, 47 insertions(+), 45 deletions(-)
diff --git a/base_substate/README.rst b/base_substate/README.rst
index e03817206d..02e3318d10 100644
--- a/base_substate/README.rst
+++ b/base_substate/README.rst
@@ -14,13 +14,13 @@ Base Sub State
: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--ux-lightgray.png?logo=github
- :target: https://github.com/OCA/server-ux/tree/13.0/base_substate
+ :target: https://github.com/OCA/server-ux/tree/15.0/base_substate
:alt: OCA/server-ux
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/server-ux-13-0/server-ux-13-0-base_substate
+ :target: https://translation.odoo-community.org/projects/server-ux-15-0/server-ux-15-0-base_substate
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/250/13.0
+ :target: https://runbot.odoo-community.org/runbot/250/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -33,9 +33,9 @@ example:
* for the quotation state of a sale order we can define 3 substates "In negotiation",
"Won" and "Lost".
-* We can also send mail when the susbstate is reached.
+* We can also send mail when the substate is reached.
-It is not useful for itself. You can see an example of implementation
+It is not useful by itself. You can see an example of implementation
in the 'purchase_substate' module. (purchase-workflow repository).
**Table of contents**
@@ -54,7 +54,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.
@@ -71,6 +71,7 @@ Contributors
* Mourad EL HADJ MIMOUNE
* Kitti U.
+* Alexei Rivera (migration to 15.0)
Maintainers
~~~~~~~~~~~
@@ -85,6 +86,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-ux `_ project on GitHub.
+This module is part of the `OCA/server-ux `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/base_substate/__manifest__.py b/base_substate/__manifest__.py
index adadb54411..d53b1d633d 100644
--- a/base_substate/__manifest__.py
+++ b/base_substate/__manifest__.py
@@ -3,12 +3,12 @@
{
"name": "Base Sub State",
- "version": "13.0.1.1.0",
+ "version": "15.0.1.0.0",
"category": "Tools",
"author": "Akretion, " "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/server-ux",
"license": "AGPL-3",
- "depends": ["base"],
+ "depends": ["base", "mail"],
"data": [
"security/base_substate_security.xml",
"security/ir.model.access.csv",
diff --git a/base_substate/i18n/base_substate.pot b/base_substate/i18n/base_substate.pot
index 24b2b64fe4..634d5047cf 100644
--- a/base_substate/i18n/base_substate.pot
+++ b/base_substate/i18n/base_substate.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -70,7 +70,6 @@ msgstr ""
#. module: base_substate
#: model:ir.model.fields,field_description:base_substate.field_base_substate__display_name
-#: model:ir.model.fields,field_description:base_substate.field_base_substate_mixin__display_name
#: model:ir.model.fields,field_description:base_substate.field_base_substate_type__display_name
#: model:ir.model.fields,field_description:base_substate.field_target_state_value__display_name
msgid "Display Name"
@@ -88,7 +87,6 @@ msgstr ""
#. module: base_substate
#: model:ir.model.fields,field_description:base_substate.field_base_substate__id
-#: model:ir.model.fields,field_description:base_substate.field_base_substate_mixin__id
#: model:ir.model.fields,field_description:base_substate.field_base_substate_type__id
#: model:ir.model.fields,field_description:base_substate.field_target_state_value__id
msgid "ID"
@@ -103,7 +101,6 @@ msgstr ""
#. module: base_substate
#: model:ir.model.fields,field_description:base_substate.field_base_substate____last_update
-#: model:ir.model.fields,field_description:base_substate.field_base_substate_mixin____last_update
#: model:ir.model.fields,field_description:base_substate.field_base_substate_type____last_update
#: model:ir.model.fields,field_description:base_substate.field_target_state_value____last_update
msgid "Last Modified on"
@@ -217,7 +214,9 @@ msgstr ""
#. module: base_substate
#: code:addons/base_substate/models/base_substate_mixin.py:0
#, python-format
-msgid "The substate \"%s\" is not define for the state \"%s\" but for \"%s\" "
+msgid ""
+"The substate %(name)s is not defined for the state %(state)s but for "
+"%(target_state)s "
msgstr ""
#. module: base_substate
diff --git a/base_substate/models/base_substate.py b/base_substate/models/base_substate.py
index ebb6b31ef6..79706d1b6e 100644
--- a/base_substate/models/base_substate.py
+++ b/base_substate/models/base_substate.py
@@ -5,11 +5,11 @@
class BaseSubstateType(models.Model):
- """This model define technical data which precises
+ """This model defines technical data which precises
for each target model concerned by substate,
the technical "state" field name.
Data in this model should be created by import as technical data
- in the specific module. For exemple in sale_subsatate we can define:
+ in the specific module. For example in sale_substate we can define:
base.substate.type:
- name: Sale order Substate
- model: sale.order
diff --git a/base_substate/models/base_substate_mixin.py b/base_substate/models/base_substate_mixin.py
index f800b00ee9..de37d62475 100644
--- a/base_substate/models/base_substate_mixin.py
+++ b/base_substate/models/base_substate_mixin.py
@@ -18,14 +18,14 @@ def check_substate_id_value(self):
if rec.substate_id and rec.state != target_state:
raise ValidationError(
_(
- 'The substate "%s" is not define for the state'
- ' "%s" but for "%s" '
- )
- % (
- rec.substate_id.name,
- _(rec_states[rec.state]),
- _(rec_states[target_state]),
+ "The substate %(name)s is not defined for the state"
+ " %(state)s but for %(target_state)s "
)
+ % {
+ "name": rec.substate_id.name,
+ "state": _(rec_states[rec.state]),
+ "target_state": _(rec_states[target_state]),
+ }
)
def _track_template(self, tracking):
@@ -95,7 +95,7 @@ def _get_substate_type(
string="Sub State",
ondelete="restrict",
default=lambda self: self._get_default_substate_id(),
- track_visibility="onchange",
+ tracking=5,
index=True,
domain=lambda self: [("model", "=", self._name)],
copy=False,
diff --git a/base_substate/readme/CONTRIBUTORS.rst b/base_substate/readme/CONTRIBUTORS.rst
index 4bb895c6ca..5a15da7923 100644
--- a/base_substate/readme/CONTRIBUTORS.rst
+++ b/base_substate/readme/CONTRIBUTORS.rst
@@ -1,2 +1,3 @@
* Mourad EL HADJ MIMOUNE
* Kitti U.
+* Alexei Rivera (migration to 15.0)
diff --git a/base_substate/readme/DESCRIPTION.rst b/base_substate/readme/DESCRIPTION.rst
index 3268944e41..24890f628c 100644
--- a/base_substate/readme/DESCRIPTION.rst
+++ b/base_substate/readme/DESCRIPTION.rst
@@ -6,7 +6,7 @@ example:
* for the quotation state of a sale order we can define 3 substates "In negotiation",
"Won" and "Lost".
-* We can also send mail when the susbstate is reached.
+* We can also send mail when the substate is reached.
-It is not useful for itself. You can see an example of implementation
+It is not useful by itself. You can see an example of implementation
in the 'purchase_substate' module. (purchase-workflow repository).
diff --git a/base_substate/static/description/index.html b/base_substate/static/description/index.html
index 2b0c25f672..1dce66c8d1 100644
--- a/base_substate/static/description/index.html
+++ b/base_substate/static/description/index.html
@@ -367,7 +367,7 @@
Base Sub State
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module provide abstract models to manage customizable
substates to be applied on different models (sale order, purchase, …).
@@ -375,9 +375,9 @@
example:
for the quotation state of a sale order we can define 3 substates “In negotiation”,
“Won” and “Lost”.
-
We can also send mail when the susbstate is reached.
+
We can also send mail when the substate is reached.
-
It is not useful for itself. You can see an example of implementation
+
It is not useful by itself. You can see an example of implementation
in the ‘purchase_substate’ module. (purchase-workflow repository).
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.
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-ux project on GitHub.
+
This module is part of the OCA/server-ux project on GitHub.