From 1fad059840a0b6e63538d89e988a893c56d15281 Mon Sep 17 00:00:00 2001
From: Thierry Ducrest
Date: Fri, 11 Jun 2021 07:20:33 +0200
Subject: [PATCH 01/28] 13.0][ADD] sale_order_line_position
This module adds an auto computed position on sale order line.
This position number is added on the report.
The position can be used to keep track of each line during
the delivery, invoicing of the order with the customer.
This is why there is related modules on `account-invoice-reporting`
and `stock-logisics-reporting`.
The position set on a line is not changed when the order is not in
draft anymore.
---
sale_order_line_position/README.rst | 99 ++++
sale_order_line_position/__init__.py | 1 +
sale_order_line_position/__manifest__.py | 15 +
.../i18n/sale_order_line_position.pot | 45 ++
sale_order_line_position/models/__init__.py | 2 +
sale_order_line_position/models/sale_order.py | 28 ++
.../models/sale_order_line.py | 68 +++
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 9 +
sale_order_line_position/readme/ROADMAP.rst | 14 +
.../report/sale_order_report.xml | 19 +
.../static/description/index.html | 439 ++++++++++++++++++
sale_order_line_position/tests/__init__.py | 1 +
.../tests/test_sale_order_line_position.py | 82 ++++
sale_order_line_position/views/sale_order.xml | 23 +
15 files changed, 846 insertions(+)
create mode 100644 sale_order_line_position/README.rst
create mode 100644 sale_order_line_position/__init__.py
create mode 100644 sale_order_line_position/__manifest__.py
create mode 100644 sale_order_line_position/i18n/sale_order_line_position.pot
create mode 100644 sale_order_line_position/models/__init__.py
create mode 100644 sale_order_line_position/models/sale_order.py
create mode 100644 sale_order_line_position/models/sale_order_line.py
create mode 100644 sale_order_line_position/readme/CONTRIBUTORS.rst
create mode 100644 sale_order_line_position/readme/DESCRIPTION.rst
create mode 100644 sale_order_line_position/readme/ROADMAP.rst
create mode 100644 sale_order_line_position/report/sale_order_report.xml
create mode 100644 sale_order_line_position/static/description/index.html
create mode 100644 sale_order_line_position/tests/__init__.py
create mode 100644 sale_order_line_position/tests/test_sale_order_line_position.py
create mode 100644 sale_order_line_position/views/sale_order.xml
diff --git a/sale_order_line_position/README.rst b/sale_order_line_position/README.rst
new file mode 100644
index 000000000..4210d2a0f
--- /dev/null
+++ b/sale_order_line_position/README.rst
@@ -0,0 +1,99 @@
+========================
+Sale 0rder Line Position
+========================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! 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%2Fsale--reporting-lightgray.png?logo=github
+ :target: https://github.com/OCA/sale-reporting/tree/13.0/sale_order_line_position
+ :alt: OCA/sale-reporting
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/sale-reporting-13-0/sale-reporting-13-0-sale_order_line_position
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/148/13.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module adds an auto computed position on sale order line.
+This position number is added on the report.
+
+The position can be used to keep track of each line during
+the delivery and invoicing of the order with the customer.
+This is why there are related modules on `account-invoice-reporting`
+and `stock-logisics-reporting`.
+
+The position is not changed on the line after the order has been send.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Known issues / Roadmap
+======================
+
+The way the positions are computed on the create of `sale.order.line`
+record could lead to a performance issue. There is a few improvements
+that have been suggested:
+
+Remove it and handle the computation on the write and/or create
+method of the `sale.order`.
+
+Have a context key to enable/disable the recomputation.
+
+Do not set any value in the position fields before the sale order lines
+are locked (in the current implementation, before sending).
+And add a recompute button in the UI.
+
+Set the position values with an SQL query using a `TRIGGER`.
+
+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
+~~~~~~~~~~~~
+
+* Thierry Ducrest
+
+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/sale-reporting `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/sale_order_line_position/__init__.py b/sale_order_line_position/__init__.py
new file mode 100644
index 000000000..0650744f6
--- /dev/null
+++ b/sale_order_line_position/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/sale_order_line_position/__manifest__.py b/sale_order_line_position/__manifest__.py
new file mode 100644
index 000000000..3040c7a00
--- /dev/null
+++ b/sale_order_line_position/__manifest__.py
@@ -0,0 +1,15 @@
+# Copyright 2021 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
+
+{
+ "name": "Sale 0rder Line Position",
+ "summary": "Adds position number on sale order line.",
+ "version": "13.0.1.0.0",
+ "category": "Sales",
+ "author": "Camptocamp, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "website": "https://github.com/OCA/sale-reporting",
+ "depends": ["sale"],
+ "data": ["views/sale_order.xml", "report/sale_order_report.xml"],
+ "installable": True,
+}
diff --git a/sale_order_line_position/i18n/sale_order_line_position.pot b/sale_order_line_position/i18n/sale_order_line_position.pot
new file mode 100644
index 000000000..17e678cc5
--- /dev/null
+++ b/sale_order_line_position/i18n/sale_order_line_position.pot
@@ -0,0 +1,45 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_order_line_position
+#
+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: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__locked_positions
+msgid "Locked Positions"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model_terms:ir.ui.view,arch_db:sale_order_line_position.report_saleorder_document
+#: model_terms:ir.ui.view,arch_db:sale_order_line_position.view_order_form_inherit
+msgid "Pos"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__position
+msgid "Position"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__position_formatted
+msgid "Position Formatted"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model,name:sale_order_line_position.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model,name:sale_order_line_position.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
diff --git a/sale_order_line_position/models/__init__.py b/sale_order_line_position/models/__init__.py
new file mode 100644
index 000000000..2d7ee6c3d
--- /dev/null
+++ b/sale_order_line_position/models/__init__.py
@@ -0,0 +1,2 @@
+from . import sale_order
+from . import sale_order_line
diff --git a/sale_order_line_position/models/sale_order.py b/sale_order_line_position/models/sale_order.py
new file mode 100644
index 000000000..3e8c073b1
--- /dev/null
+++ b/sale_order_line_position/models/sale_order.py
@@ -0,0 +1,28 @@
+# Copyright 2021 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import api, fields, models
+
+
+class SaleOrder(models.Model):
+ _inherit = "sale.order"
+
+ locked_positions = fields.Boolean(compute="_compute_locked_positions")
+
+ @api.depends("state")
+ def _compute_locked_positions(self):
+ for record in self:
+ record.locked_positions = record.state != "draft"
+
+ def action_quotation_send(self):
+ self.recompute_positions()
+ return super().action_quotation_send()
+
+ def recompute_positions(self):
+ self.ensure_one()
+ if self.locked_positions:
+ return
+ lines = self.order_line.filtered(lambda l: not l.display_type)
+ lines.sorted(key=lambda x: x.sequence)
+ for position, line in enumerate(lines, start=1):
+ line.position = position
diff --git a/sale_order_line_position/models/sale_order_line.py b/sale_order_line_position/models/sale_order_line.py
new file mode 100644
index 000000000..746729629
--- /dev/null
+++ b/sale_order_line_position/models/sale_order_line.py
@@ -0,0 +1,68 @@
+# Copyright 2021 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import api, fields, models
+
+
+class SaleOrderLine(models.Model):
+ _inherit = "sale.order.line"
+
+ position = fields.Integer(readonly=True, index=True, default=False)
+ position_formatted = fields.Char(compute="_compute_position_formatted")
+
+ @api.depends("position")
+ def _compute_position_formatted(self):
+ for record in self:
+ record.position_formatted = record._format_position(record.position)
+
+ @api.onchange("sequence")
+ def _onchange_sequence(self):
+ if self.order_id.locked_positions:
+ return
+ lines = self.order_id.order_line.filtered(
+ lambda x: not x.display_type and x.sequence < self.sequence
+ )
+ self.position = len(lines) + 1
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ vals_list = self._add_next_position_on_new_line(vals_list)
+ return super().create(vals_list)
+
+ def unlink(self):
+ sales = self.mapped("order_id")
+ res = super().unlink()
+ for sale in sales:
+ sale.recompute_positions()
+ return res
+
+ def _add_next_position_on_new_line(self, vals_list):
+ sale_ids = [
+ line["order_id"]
+ for line in vals_list
+ if not line.get("display_type") and line.get("order_id")
+ ]
+ if sale_ids:
+ ids = tuple(set(sale_ids))
+ self.flush()
+ query = """
+ SELECT order_id, max(position) FROM sale_order_line
+ WHERE order_id in %s GROUP BY order_id;
+ """
+ self.env.cr.execute(query, (ids,))
+ default_pos = {key: 1 for key in ids}
+ existing_pos = {
+ order_id: pos + 1 for order_id, pos in self.env.cr.fetchall()
+ }
+ sale_pos = {**default_pos, **existing_pos}
+ for line in vals_list:
+ if not line.get("display_type"):
+ line["position"] = sale_pos[line["order_id"]]
+ sale_pos[line["order_id"]] += 1
+ return vals_list
+
+ @api.model
+ def _format_position(self, position):
+ if not position:
+ return ""
+ return str(position).zfill(3)
diff --git a/sale_order_line_position/readme/CONTRIBUTORS.rst b/sale_order_line_position/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..0dd376fae
--- /dev/null
+++ b/sale_order_line_position/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Thierry Ducrest
diff --git a/sale_order_line_position/readme/DESCRIPTION.rst b/sale_order_line_position/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..fbf494a0b
--- /dev/null
+++ b/sale_order_line_position/readme/DESCRIPTION.rst
@@ -0,0 +1,9 @@
+This module adds an auto computed position on sale order line.
+This position number is added on the report.
+
+The position can be used to keep track of each line during
+the delivery and invoicing of the order with the customer.
+This is why there are related modules on `account-invoice-reporting`
+and `stock-logisics-reporting`.
+
+The position is not changed on the line after the order has been send.
diff --git a/sale_order_line_position/readme/ROADMAP.rst b/sale_order_line_position/readme/ROADMAP.rst
new file mode 100644
index 000000000..ade3ff206
--- /dev/null
+++ b/sale_order_line_position/readme/ROADMAP.rst
@@ -0,0 +1,14 @@
+The way the positions are computed on the create of `sale.order.line`
+record could lead to a performance issue. There is a few improvements
+that have been suggested:
+
+Remove it and handle the computation on the write and/or create
+method of the `sale.order`.
+
+Have a context key to enable/disable the recomputation.
+
+Do not set any value in the position fields before the sale order lines
+are locked (in the current implementation, before sending).
+And add a recompute button in the UI.
+
+Set the position values with an SQL query using a `TRIGGER`.
diff --git a/sale_order_line_position/report/sale_order_report.xml b/sale_order_line_position/report/sale_order_report.xml
new file mode 100644
index 000000000..5554a478d
--- /dev/null
+++ b/sale_order_line_position/report/sale_order_report.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
Pos
+
+
+
+
+
+
+
+
diff --git a/sale_order_line_position/static/description/index.html b/sale_order_line_position/static/description/index.html
new file mode 100644
index 000000000..f5a171e64
--- /dev/null
+++ b/sale_order_line_position/static/description/index.html
@@ -0,0 +1,439 @@
+
+
+
+
+
+
+Sale 0rder Line Position
+
+
+
+
+
Sale 0rder Line Position
+
+
+
+
This module adds an auto computed position on sale order line.
+This position number is added on the report.
+
The position can be used to keep track of each line during
+the delivery and invoicing of the order with the customer.
+This is why there are related modules on account-invoice-reporting
+and stock-logisics-reporting.
+
The position is not changed on the line after the order has been send.
The way the positions are computed on the create of sale.order.line
+record could lead to a performance issue. There is a few improvements
+that have been suggested:
+
Remove it and handle the computation on the write and/or create
+method of the sale.order.
+
Have a context key to enable/disable the recomputation.
+
Do not set any value in the position fields before the sale order lines
+are locked (in the current implementation, before sending).
+And add a recompute button in the UI.
+
Set the position values with an SQL query using a TRIGGER.
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.
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.
From b56566b60bed138e59f9ae9a878a3e8f2a3c8f58 Mon Sep 17 00:00:00 2001
From: Thierry Ducrest
Date: Mon, 11 Oct 2021 10:46:58 +0200
Subject: [PATCH 04/28] [13.0][FIX] sale-order-line-position
The previous implementation with the onchange was broken and hardly
feasible (onchange are called on each line and the sequence set on them
changes on each call) and not possible to cover with unit
tests (reproduce the drag and drop).
The other solution could have been to replace the onchange with a
recompute of the position on every `write` of a sale.order but that
also leads to a complex solution.
As the positions are needed to discuss with the customer, the recompute of the
position on print, send and confirm is a good enough, simple solution.
---
sale_order_line_position/README.rst | 9 +++++++--
.../i18n/sale_order_line_position.pot | 13 +++++++++++++
sale_order_line_position/models/__init__.py | 1 +
.../models/ir_actions_report.py | 17 +++++++++++++++++
sale_order_line_position/models/sale_order.py | 18 +++++++++++-------
.../models/sale_order_line.py | 9 ---------
.../readme/DESCRIPTION.rst | 9 +++++++--
.../static/description/index.html | 7 +++++--
sale_order_line_position/views/sale_order.xml | 12 ++++++++++++
9 files changed, 73 insertions(+), 22 deletions(-)
create mode 100644 sale_order_line_position/models/ir_actions_report.py
diff --git a/sale_order_line_position/README.rst b/sale_order_line_position/README.rst
index b8be2e7a2..ccd7be124 100644
--- a/sale_order_line_position/README.rst
+++ b/sale_order_line_position/README.rst
@@ -26,14 +26,19 @@ Sale 0rder Line Position
|badge1| |badge2| |badge3| |badge4| |badge5|
This module adds an auto computed position on sale order line.
-This position number is added on the report.
+This position number is also printed on the report.
The position can be used to keep track of each line during
the delivery and invoicing of the order with the customer.
This is why there are related modules on `account-invoice-reporting`
and `stock-logisics-reporting`.
-The position is not changed on the line after the order has been send.
+The positions are recomputed when the sale order is printed, sent and set to confirm.
+
+The positions are not changed on the line after the order has been confirmed, but if
+new line are added they will receive a position number.
+
+An action is also availabled to manually recompute the positions.
**Table of contents**
diff --git a/sale_order_line_position/i18n/sale_order_line_position.pot b/sale_order_line_position/i18n/sale_order_line_position.pot
index f1767670d..a45a79082 100644
--- a/sale_order_line_position/i18n/sale_order_line_position.pot
+++ b/sale_order_line_position/i18n/sale_order_line_position.pot
@@ -14,18 +14,21 @@ msgstr ""
"Plural-Forms: \n"
#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report__display_name
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__display_name
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__display_name
msgid "Display Name"
msgstr ""
#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report__id
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__id
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__id
msgid "ID"
msgstr ""
#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report____last_update
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order____last_update
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line____last_update
msgid "Last Modified on"
@@ -52,6 +55,16 @@ msgstr ""
msgid "Position Formatted"
msgstr ""
+#. module: sale_order_line_position
+#: model:ir.actions.server,name:sale_order_line_position.action_compute_sale_position
+msgid "Recompute positions"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model,name:sale_order_line_position.model_ir_actions_report
+msgid "Report Action"
+msgstr ""
+
#. module: sale_order_line_position
#: model:ir.model,name:sale_order_line_position.model_sale_order
msgid "Sales Order"
diff --git a/sale_order_line_position/models/__init__.py b/sale_order_line_position/models/__init__.py
index 2d7ee6c3d..fca7f1ced 100644
--- a/sale_order_line_position/models/__init__.py
+++ b/sale_order_line_position/models/__init__.py
@@ -1,2 +1,3 @@
+from . import ir_actions_report
from . import sale_order
from . import sale_order_line
diff --git a/sale_order_line_position/models/ir_actions_report.py b/sale_order_line_position/models/ir_actions_report.py
new file mode 100644
index 000000000..0c0cf2a98
--- /dev/null
+++ b/sale_order_line_position/models/ir_actions_report.py
@@ -0,0 +1,17 @@
+# Copyright 2021 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models
+
+
+class IrActionsReport(models.Model):
+ _inherit = "ir.actions.report"
+
+ def render_qweb_pdf(self, res_ids=None, data=None):
+ self.sale_recompute_positions(res_ids)
+ return super().render_qweb_pdf(res_ids, data)
+
+ def sale_recompute_positions(self, res_ids):
+ if self.model == "sale.order":
+ sales = self.env["sale.order"].browse(res_ids)
+ sales.recompute_positions()
diff --git a/sale_order_line_position/models/sale_order.py b/sale_order_line_position/models/sale_order.py
index 3e8c073b1..469ca2aa7 100644
--- a/sale_order_line_position/models/sale_order.py
+++ b/sale_order_line_position/models/sale_order.py
@@ -14,15 +14,19 @@ def _compute_locked_positions(self):
for record in self:
record.locked_positions = record.state != "draft"
+ def action_confirm(self):
+ self.recompute_positions()
+ return super().action_confirm()
+
def action_quotation_send(self):
self.recompute_positions()
return super().action_quotation_send()
def recompute_positions(self):
- self.ensure_one()
- if self.locked_positions:
- return
- lines = self.order_line.filtered(lambda l: not l.display_type)
- lines.sorted(key=lambda x: x.sequence)
- for position, line in enumerate(lines, start=1):
- line.position = position
+ for sale in self:
+ if sale.locked_positions:
+ continue
+ lines = sale.order_line.filtered(lambda l: not l.display_type)
+ lines.sorted(key=lambda x: (x.sequence, x.id))
+ for position, line in enumerate(lines, start=1):
+ line.position = position
diff --git a/sale_order_line_position/models/sale_order_line.py b/sale_order_line_position/models/sale_order_line.py
index 746729629..f9b22b79a 100644
--- a/sale_order_line_position/models/sale_order_line.py
+++ b/sale_order_line_position/models/sale_order_line.py
@@ -15,15 +15,6 @@ def _compute_position_formatted(self):
for record in self:
record.position_formatted = record._format_position(record.position)
- @api.onchange("sequence")
- def _onchange_sequence(self):
- if self.order_id.locked_positions:
- return
- lines = self.order_id.order_line.filtered(
- lambda x: not x.display_type and x.sequence < self.sequence
- )
- self.position = len(lines) + 1
-
@api.model_create_multi
def create(self, vals_list):
vals_list = self._add_next_position_on_new_line(vals_list)
diff --git a/sale_order_line_position/readme/DESCRIPTION.rst b/sale_order_line_position/readme/DESCRIPTION.rst
index fbf494a0b..13f06343b 100644
--- a/sale_order_line_position/readme/DESCRIPTION.rst
+++ b/sale_order_line_position/readme/DESCRIPTION.rst
@@ -1,9 +1,14 @@
This module adds an auto computed position on sale order line.
-This position number is added on the report.
+This position number is also printed on the report.
The position can be used to keep track of each line during
the delivery and invoicing of the order with the customer.
This is why there are related modules on `account-invoice-reporting`
and `stock-logisics-reporting`.
-The position is not changed on the line after the order has been send.
+The positions are recomputed when the sale order is printed, sent and set to confirm.
+
+The positions are not changed on the line after the order has been confirmed, but if
+new line are added they will receive a position number.
+
+An action is also availabled to manually recompute the positions.
diff --git a/sale_order_line_position/static/description/index.html b/sale_order_line_position/static/description/index.html
index 54e292624..4d9b5813d 100644
--- a/sale_order_line_position/static/description/index.html
+++ b/sale_order_line_position/static/description/index.html
@@ -369,12 +369,15 @@
This module adds an auto computed position on sale order line.
-This position number is added on the report.
+This position number is also printed on the report.
The position can be used to keep track of each line during
the delivery and invoicing of the order with the customer.
This is why there are related modules on account-invoice-reporting
and stock-logisics-reporting.
-
The position is not changed on the line after the order has been send.
+
The positions are recomputed when the sale order is printed, sent and set to confirm.
+
The positions are not changed on the line after the order has been confirmed, but if
+new line are added they will receive a position number.
+
An action is also availabled to manually recompute the positions.
Table of contents
diff --git a/sale_order_line_position/views/sale_order.xml b/sale_order_line_position/views/sale_order.xml
index ebe67ddd7..f485eebc3 100644
--- a/sale_order_line_position/views/sale_order.xml
+++ b/sale_order_line_position/views/sale_order.xml
@@ -1,5 +1,6 @@
+
sale.order.form.sale.inheritsale.order
@@ -20,4 +21,15 @@
+
+
+ Recompute positions
+
+
+ code
+
+ records.recompute_positions()
+
+
+
From 395fdc348fda79f27bde4f623b07ed393b88386d Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 17 Jan 2022 14:37:15 +0000
Subject: [PATCH 05/28] sale_order_line_position 14.0.1.1.0
---
sale_order_line_position/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sale_order_line_position/__manifest__.py b/sale_order_line_position/__manifest__.py
index 037c7d609..ad72a7884 100644
--- a/sale_order_line_position/__manifest__.py
+++ b/sale_order_line_position/__manifest__.py
@@ -4,7 +4,7 @@
{
"name": "Sale 0rder Line Position",
"summary": "Adds position number on sale order line.",
- "version": "14.0.1.0.0",
+ "version": "14.0.1.1.0",
"category": "Sales",
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
From 90d767578d5202eb72fd3217a6c535993e6809f0 Mon Sep 17 00:00:00 2001
From: Maria Sparenberg
Date: Wed, 11 May 2022 10:07:21 +0000
Subject: [PATCH 06/28] Added translation using Weblate (German)
---
sale_order_line_position/i18n/de.po | 77 +++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
create mode 100644 sale_order_line_position/i18n/de.po
diff --git a/sale_order_line_position/i18n/de.po b/sale_order_line_position/i18n/de.po
new file mode 100644
index 000000000..d3107c7be
--- /dev/null
+++ b/sale_order_line_position/i18n/de.po
@@ -0,0 +1,77 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_order_line_position
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report__display_name
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__display_name
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report__id
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__id
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__id
+msgid "ID"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report____last_update
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order____last_update
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__locked_positions
+msgid "Locked Positions"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model_terms:ir.ui.view,arch_db:sale_order_line_position.report_saleorder_document
+#: model_terms:ir.ui.view,arch_db:sale_order_line_position.view_order_form_inherit
+msgid "Pos"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__position
+msgid "Position"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__position_formatted
+msgid "Position Formatted"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.actions.server,name:sale_order_line_position.action_compute_sale_position
+msgid "Recompute positions"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model,name:sale_order_line_position.model_ir_actions_report
+msgid "Report Action"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model,name:sale_order_line_position.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_order_line_position
+#: model:ir.model,name:sale_order_line_position.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
From 77d4a7a86be0191c7a99c99858f3ed17aadf2bcc Mon Sep 17 00:00:00 2001
From: Maria Sparenberg
Date: Wed, 11 May 2022 10:10:51 +0000
Subject: [PATCH 07/28] Translated using Weblate (German)
Currently translated at 81.8% (9 of 11 strings)
Translation: sale-reporting-14.0/sale-reporting-14.0-sale_order_line_position
Translate-URL: https://translation.odoo-community.org/projects/sale-reporting-14-0/sale-reporting-14-0-sale_order_line_position/de/
---
sale_order_line_position/i18n/de.po | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/sale_order_line_position/i18n/de.po b/sale_order_line_position/i18n/de.po
index d3107c7be..17570a58a 100644
--- a/sale_order_line_position/i18n/de.po
+++ b/sale_order_line_position/i18n/de.po
@@ -6,50 +6,52 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2022-05-11 12:05+0000\n"
+"Last-Translator: Maria Sparenberg \n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
#. module: sale_order_line_position
#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report__display_name
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__display_name
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__display_name
msgid "Display Name"
-msgstr ""
+msgstr "Anzeigename"
#. module: sale_order_line_position
#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report__id
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__id
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__id
msgid "ID"
-msgstr ""
+msgstr "ID"
#. module: sale_order_line_position
#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report____last_update
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order____last_update
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line____last_update
msgid "Last Modified on"
-msgstr ""
+msgstr "Zuletzt geändert am"
#. module: sale_order_line_position
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__locked_positions
msgid "Locked Positions"
-msgstr ""
+msgstr "Gesperrte Positionen"
#. module: sale_order_line_position
#: model_terms:ir.ui.view,arch_db:sale_order_line_position.report_saleorder_document
#: model_terms:ir.ui.view,arch_db:sale_order_line_position.view_order_form_inherit
msgid "Pos"
-msgstr ""
+msgstr "Pos"
#. module: sale_order_line_position
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__position
msgid "Position"
-msgstr ""
+msgstr "Position"
#. module: sale_order_line_position
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__position_formatted
@@ -59,7 +61,7 @@ msgstr ""
#. module: sale_order_line_position
#: model:ir.actions.server,name:sale_order_line_position.action_compute_sale_position
msgid "Recompute positions"
-msgstr ""
+msgstr "Positionen neuberechnen"
#. module: sale_order_line_position
#: model:ir.model,name:sale_order_line_position.model_ir_actions_report
@@ -69,9 +71,9 @@ msgstr ""
#. module: sale_order_line_position
#: model:ir.model,name:sale_order_line_position.model_sale_order
msgid "Sales Order"
-msgstr ""
+msgstr "Verkaufsauftrag"
#. module: sale_order_line_position
#: model:ir.model,name:sale_order_line_position.model_sale_order_line
msgid "Sales Order Line"
-msgstr ""
+msgstr "Auftragsposition"
From ee32db3e171ce4bcff7207cb5043877e16efd368 Mon Sep 17 00:00:00 2001
From: Anna Janiszewska
Date: Thu, 12 May 2022 09:02:15 +0200
Subject: [PATCH 08/28] [MIG] sale_order_line_position : Migration to 15.0
---
sale_order_line_position/README.rst | 10 ++++----
sale_order_line_position/__manifest__.py | 2 +-
.../i18n/sale_order_line_position.pot | 23 +------------------
.../static/description/index.html | 6 ++---
.../tests/test_sale_order_line_position.py | 4 ++--
5 files changed, 12 insertions(+), 33 deletions(-)
diff --git a/sale_order_line_position/README.rst b/sale_order_line_position/README.rst
index ccd7be124..633de5a0c 100644
--- a/sale_order_line_position/README.rst
+++ b/sale_order_line_position/README.rst
@@ -14,13 +14,13 @@ Sale 0rder Line Position
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--reporting-lightgray.png?logo=github
- :target: https://github.com/OCA/sale-reporting/tree/14.0/sale_order_line_position
+ :target: https://github.com/OCA/sale-reporting/tree/15.0/sale_order_line_position
:alt: OCA/sale-reporting
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/sale-reporting-14-0/sale-reporting-14-0-sale_order_line_position
+ :target: https://translation.odoo-community.org/projects/sale-reporting-15-0/sale-reporting-15-0-sale_order_line_position
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/148/14.0
+ :target: https://runbot.odoo-community.org/runbot/148/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -69,7 +69,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.
@@ -106,6 +106,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/sale-reporting `_ project on GitHub.
+This module is part of the `OCA/sale-reporting `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/sale_order_line_position/__manifest__.py b/sale_order_line_position/__manifest__.py
index ad72a7884..4a9490b74 100644
--- a/sale_order_line_position/__manifest__.py
+++ b/sale_order_line_position/__manifest__.py
@@ -4,7 +4,7 @@
{
"name": "Sale 0rder Line Position",
"summary": "Adds position number on sale order line.",
- "version": "14.0.1.1.0",
+ "version": "15.0.1.0.0",
"category": "Sales",
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
diff --git a/sale_order_line_position/i18n/sale_order_line_position.pot b/sale_order_line_position/i18n/sale_order_line_position.pot
index a45a79082..2efc38d81 100644
--- a/sale_order_line_position/i18n/sale_order_line_position.pot
+++ b/sale_order_line_position/i18n/sale_order_line_position.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"
@@ -13,27 +13,6 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
-#. module: sale_order_line_position
-#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report__display_name
-#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__display_name
-#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__display_name
-msgid "Display Name"
-msgstr ""
-
-#. module: sale_order_line_position
-#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report__id
-#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__id
-#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line__id
-msgid "ID"
-msgstr ""
-
-#. module: sale_order_line_position
-#: model:ir.model.fields,field_description:sale_order_line_position.field_ir_actions_report____last_update
-#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order____last_update
-#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order_line____last_update
-msgid "Last Modified on"
-msgstr ""
-
#. module: sale_order_line_position
#: model:ir.model.fields,field_description:sale_order_line_position.field_sale_order__locked_positions
msgid "Locked Positions"
diff --git a/sale_order_line_position/static/description/index.html b/sale_order_line_position/static/description/index.html
index 4d9b5813d..190a1ca72 100644
--- a/sale_order_line_position/static/description/index.html
+++ b/sale_order_line_position/static/description/index.html
@@ -367,7 +367,7 @@
Sale 0rder Line Position
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module adds an auto computed position on sale order line.
This position number is also printed on the report.
The position can be used to keep track of each line during
@@ -410,7 +410,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.
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.