From 2dd5589431e7ad3311c8c972767eeaf844f4e9c6 Mon Sep 17 00:00:00 2001 From: intero-chd Date: Thu, 25 Jun 2026 19:03:58 +0000 Subject: [PATCH 01/12] Added translation using Weblate (German) --- pos_edit_order_line/i18n/de.po | 109 +++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 pos_edit_order_line/i18n/de.po diff --git a/pos_edit_order_line/i18n/de.po b/pos_edit_order_line/i18n/de.po new file mode 100644 index 0000000000..cbc92130d5 --- /dev/null +++ b/pos_edit_order_line/i18n/de.po @@ -0,0 +1,109 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_edit_order_line +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 19.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: pos_edit_order_line +#: model:ir.model.fields,field_description:pos_edit_order_line.field_pos_config__allow_edit_order_line +#: model:ir.model.fields,field_description:pos_edit_order_line.field_res_config_settings__pos_allow_edit_order_line +msgid "Allow Edit Order Line" +msgstr "" + +#. module: pos_edit_order_line +#: model_terms:ir.ui.view,arch_db:pos_edit_order_line.res_config_settings_view_form +msgid "Allow edit Order Line in popup" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 +msgid "Cancel" +msgstr "" + +#. module: pos_edit_order_line +#: model:ir.model,name:pos_edit_order_line.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 +msgid "Confirm" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 +msgid "Discount" +msgstr "" + +#. module: pos_edit_order_line +#: model:ir.model.fields,field_description:pos_edit_order_line.field_pos_config__display_name +#: model:ir.model.fields,field_description:pos_edit_order_line.field_res_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderButton.xml:0 +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 +msgid "Edit Order Lines" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/js/EditOrderButton.esm.js:0 +msgid "Empty Order" +msgstr "" + +#. module: pos_edit_order_line +#: model:ir.model.fields,field_description:pos_edit_order_line.field_pos_config__id +#: model:ir.model.fields,field_description:pos_edit_order_line.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: pos_edit_order_line +#: model:ir.model,name:pos_edit_order_line.model_pos_config +msgid "Point of Sale Configuration" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 +msgid "Price excl. VAT" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 +msgid "Product" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 +msgid "Quantity" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 +msgid "UoM" +msgstr "" + +#. module: pos_edit_order_line +#. odoo-javascript +#: code:addons/pos_edit_order_line/static/src/js/EditOrderButton.esm.js:0 +msgid "You need add some products first." +msgstr "" From ad30971ea4d7be1e1e92d0a060aad20593d7e8cc Mon Sep 17 00:00:00 2001 From: intero-chd Date: Thu, 25 Jun 2026 19:03:58 +0000 Subject: [PATCH 02/12] Added translation using Weblate (German) --- pos_partner_birthdate/i18n/de.po | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pos_partner_birthdate/i18n/de.po diff --git a/pos_partner_birthdate/i18n/de.po b/pos_partner_birthdate/i18n/de.po new file mode 100644 index 0000000000..93d50224a4 --- /dev/null +++ b/pos_partner_birthdate/i18n/de.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_partner_birthdate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 19.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: pos_partner_birthdate +#: model:ir.model,name:pos_partner_birthdate.model_res_partner +msgid "Contact" +msgstr "" + +#. module: pos_partner_birthdate +#: model:ir.model.fields,field_description:pos_partner_birthdate.field_res_partner__display_name +msgid "Display Name" +msgstr "" + +#. module: pos_partner_birthdate +#: model:ir.model.fields,field_description:pos_partner_birthdate.field_res_partner__id +msgid "ID" +msgstr "" From 46119b42ee130fa1524e87d4fc3fbaba2aa27f9b Mon Sep 17 00:00:00 2001 From: intero-chd Date: Thu, 25 Jun 2026 19:04:29 +0000 Subject: [PATCH 03/12] Translated using Weblate (German) Currently translated at 100.0% (3 of 3 strings) Translation: pos-19.0/pos-19.0-pos_partner_birthdate Translate-URL: https://translation.odoo-community.org/projects/pos-19-0/pos-19-0-pos_partner_birthdate/de/ --- pos_partner_birthdate/i18n/de.po | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pos_partner_birthdate/i18n/de.po b/pos_partner_birthdate/i18n/de.po index 93d50224a4..1c07d4f314 100644 --- a/pos_partner_birthdate/i18n/de.po +++ b/pos_partner_birthdate/i18n/de.po @@ -6,25 +6,27 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-06-25 21:46+0000\n" +"Last-Translator: intero-chd \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 5.15.2\n" #. module: pos_partner_birthdate #: model:ir.model,name:pos_partner_birthdate.model_res_partner msgid "Contact" -msgstr "" +msgstr "Kontakt" #. module: pos_partner_birthdate #: model:ir.model.fields,field_description:pos_partner_birthdate.field_res_partner__display_name msgid "Display Name" -msgstr "" +msgstr "Anzeigename" #. module: pos_partner_birthdate #: model:ir.model.fields,field_description:pos_partner_birthdate.field_res_partner__id msgid "ID" -msgstr "" +msgstr "ID" From d303e9a93bd7b2a1aeb054d1ff85a429056c1dc4 Mon Sep 17 00:00:00 2001 From: intero-chd Date: Thu, 25 Jun 2026 19:10:51 +0000 Subject: [PATCH 04/12] Translated using Weblate (German) Currently translated at 100.0% (16 of 16 strings) Translation: pos-19.0/pos-19.0-pos_edit_order_line Translate-URL: https://translation.odoo-community.org/projects/pos-19-0/pos-19-0-pos_edit_order_line/de/ --- pos_edit_order_line/i18n/de.po | 36 ++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/pos_edit_order_line/i18n/de.po b/pos_edit_order_line/i18n/de.po index cbc92130d5..6871e5d84f 100644 --- a/pos_edit_order_line/i18n/de.po +++ b/pos_edit_order_line/i18n/de.po @@ -6,104 +6,106 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-06-25 21:46+0000\n" +"Last-Translator: intero-chd \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 5.15.2\n" #. module: pos_edit_order_line #: model:ir.model.fields,field_description:pos_edit_order_line.field_pos_config__allow_edit_order_line #: model:ir.model.fields,field_description:pos_edit_order_line.field_res_config_settings__pos_allow_edit_order_line msgid "Allow Edit Order Line" -msgstr "" +msgstr "Bearbeitung der Auftragsposition zulassen" #. module: pos_edit_order_line #: model_terms:ir.ui.view,arch_db:pos_edit_order_line.res_config_settings_view_form msgid "Allow edit Order Line in popup" -msgstr "" +msgstr "Bearbeitung der Auftragspositionen im Popup-Fenster zulassen" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 msgid "Cancel" -msgstr "" +msgstr "Abbrechen" #. module: pos_edit_order_line #: model:ir.model,name:pos_edit_order_line.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "Konfigurationseinstellungen" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 msgid "Confirm" -msgstr "" +msgstr "Bestätigen" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 msgid "Discount" -msgstr "" +msgstr "Rabatt" #. module: pos_edit_order_line #: model:ir.model.fields,field_description:pos_edit_order_line.field_pos_config__display_name #: model:ir.model.fields,field_description:pos_edit_order_line.field_res_config_settings__display_name msgid "Display Name" -msgstr "" +msgstr "Anzeigename" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/xml/EditOrderButton.xml:0 #: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 msgid "Edit Order Lines" -msgstr "" +msgstr "Auftragspositionen bearbeiten" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/js/EditOrderButton.esm.js:0 msgid "Empty Order" -msgstr "" +msgstr "Leerer Auftrag" #. module: pos_edit_order_line #: model:ir.model.fields,field_description:pos_edit_order_line.field_pos_config__id #: model:ir.model.fields,field_description:pos_edit_order_line.field_res_config_settings__id msgid "ID" -msgstr "" +msgstr "ID" #. module: pos_edit_order_line #: model:ir.model,name:pos_edit_order_line.model_pos_config msgid "Point of Sale Configuration" -msgstr "" +msgstr "Kassensystem Konfiguration" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 msgid "Price excl. VAT" -msgstr "" +msgstr "Preis exkl. Mehrwertsteuer" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 msgid "Product" -msgstr "" +msgstr "Produkt" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 msgid "Quantity" -msgstr "" +msgstr "Menge" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/xml/EditOrderPopup.xml:0 msgid "UoM" -msgstr "" +msgstr "Maßeinheit" #. module: pos_edit_order_line #. odoo-javascript #: code:addons/pos_edit_order_line/static/src/js/EditOrderButton.esm.js:0 msgid "You need add some products first." -msgstr "" +msgstr "Sie müssen zunächst einige Produkte hinzufügen." From 22f08aca6837640d4b8c9a73297cfe7bec1ba0a3 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Sun, 4 Jan 2026 21:34:54 +0100 Subject: [PATCH 05/12] [ADD] pos_sale_picking_keep: Keep sale pickings from PoS This module inhibits the manipulation that the point of sale mades over the sales orders pickings, and the creation of new pickings under the PoS picking type. Use Cases / Context =================== In some scenarios, you may not want that the point of sale (PoS) handles the pickings of the products you are paying: - Using the PoS as a pure payment terminal. - When complex stock flows are not supplied by the PoS. In that cases, it's better to keep the original sales pickings. --- pos_sale_picking_keep/README.rst | 92 ++++ pos_sale_picking_keep/__init__.py | 2 + pos_sale_picking_keep/__manifest__.py | 18 + pos_sale_picking_keep/models/__init__.py | 4 + pos_sale_picking_keep/models/pos_order.py | 46 ++ pos_sale_picking_keep/models/pos_session.py | 21 + .../models/sale_order_line.py | 19 + pos_sale_picking_keep/pyproject.toml | 3 + pos_sale_picking_keep/readme/CONTEXT.md | 7 + pos_sale_picking_keep/readme/DESCRIPTION.md | 2 + .../static/description/index.html | 431 ++++++++++++++++++ .../tests/tours/pos_sale_picking_keep.esm.js | 32 ++ pos_sale_picking_keep/tests/__init__.py | 1 + .../tests/test_pos_sale_picking_keep.py | 70 +++ 14 files changed, 748 insertions(+) create mode 100644 pos_sale_picking_keep/README.rst create mode 100644 pos_sale_picking_keep/__init__.py create mode 100644 pos_sale_picking_keep/__manifest__.py create mode 100644 pos_sale_picking_keep/models/__init__.py create mode 100644 pos_sale_picking_keep/models/pos_order.py create mode 100644 pos_sale_picking_keep/models/pos_session.py create mode 100644 pos_sale_picking_keep/models/sale_order_line.py create mode 100644 pos_sale_picking_keep/pyproject.toml create mode 100644 pos_sale_picking_keep/readme/CONTEXT.md create mode 100644 pos_sale_picking_keep/readme/DESCRIPTION.md create mode 100644 pos_sale_picking_keep/static/description/index.html create mode 100644 pos_sale_picking_keep/static/tests/tours/pos_sale_picking_keep.esm.js create mode 100644 pos_sale_picking_keep/tests/__init__.py create mode 100644 pos_sale_picking_keep/tests/test_pos_sale_picking_keep.py diff --git a/pos_sale_picking_keep/README.rst b/pos_sale_picking_keep/README.rst new file mode 100644 index 0000000000..c385d2bfe0 --- /dev/null +++ b/pos_sale_picking_keep/README.rst @@ -0,0 +1,92 @@ +=========================== +Keep sale pickings from PoS +=========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:ea1933778dd59465a8396297149fff3f9fdfab1f4e6ed9a6a8d4dbad561e4da0 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fpos-lightgray.png?logo=github + :target: https://github.com/OCA/pos/tree/18.0/pos_sale_picking_keep + :alt: OCA/pos +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/pos-18-0/pos-18-0-pos_sale_picking_keep + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module inhibits the manipulation that the point of sale mades over +the sales orders pickings, and the creation of new pickings under the +PoS picking type. + +**Table of contents** + +.. contents:: + :local: + +Use Cases / Context +=================== + +In some scenarios, you may not want that the point of sale (PoS) handles +the pickings of the products you are paying: + +- Using the PoS as a pure payment terminal. +- When complex stock flows are not supplied by the PoS. + +In that cases, it's better to keep the original sales pickings. + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Tecnativa + +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. + +.. |maintainer-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px + :target: https://github.com/pedrobaeza + :alt: pedrobaeza + +Current `maintainer `__: + +|maintainer-pedrobaeza| + +This module is part of the `OCA/pos `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_sale_picking_keep/__init__.py b/pos_sale_picking_keep/__init__.py new file mode 100644 index 0000000000..3275ac2adf --- /dev/null +++ b/pos_sale_picking_keep/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import models diff --git a/pos_sale_picking_keep/__manifest__.py b/pos_sale_picking_keep/__manifest__.py new file mode 100644 index 0000000000..996e17d4db --- /dev/null +++ b/pos_sale_picking_keep/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2025 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Keep sale pickings from PoS", + "version": "18.0.1.0.0", + "category": "Point Of Sale", + "website": "https://github.com/OCA/pos", + "author": "Tecnativa, Odoo Community Association (OCA)", + "maintainers": ["pedrobaeza"], + "license": "AGPL-3", + "installable": True, + "depends": ["pos_sale"], + "assets": { + "web.assets_tests": [ + "pos_sale_picking_keep/static/tests/tours/**/*", + ], + }, +} diff --git a/pos_sale_picking_keep/models/__init__.py b/pos_sale_picking_keep/models/__init__.py new file mode 100644 index 0000000000..1315735d03 --- /dev/null +++ b/pos_sale_picking_keep/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import pos_order +from . import pos_session +from . import sale_order_line diff --git a/pos_sale_picking_keep/models/pos_order.py b/pos_sale_picking_keep/models/pos_order.py new file mode 100644 index 0000000000..4c40b68a6d --- /dev/null +++ b/pos_sale_picking_keep/models/pos_order.py @@ -0,0 +1,46 @@ +# Copyright 2025 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, models +from odoo.tools import config + + +class PosOrder(models.Model): + _inherit = "pos.order" + + @api.model + def sync_from_ui(self, orders): + # Avoid the cancellation of the SO pickings + so_line_ids = [] + for order_data in orders: + lines_data = order_data.get("lines", []) + for _, _, line_data in lines_data: + so_line_id = line_data.get("sale_order_line_id") + if so_line_id: + so_line_ids.append(so_line_id) + so_lines = self.env["sale.order.line"].browse(so_line_ids) + # confirm the unconfirmed sale orders that are linked to the sale order lines + # this is done also upstream, but we need to do it first for having already + # the pickings to make the trick + sale_orders = so_lines.order_id + for sale_order in sale_orders.filtered(lambda x: x.state in ["draft", "sent"]): + sale_order.action_confirm() + # Fake the pickings state before calling super for avoiding the move quantity + # reduction that is done upstream that effectively cancels the SO pickings + pickings = so_lines.move_ids.picking_id + pickings.state = "draft" + res = super().sync_from_ui(orders) + pickings._compute_state() + return res + + def _create_order_picking(self): + # Nullify the creation of the pickings at this level + # We cannot use self.env.context.get("test_pos_sale_picking_keep") because + # the tours that run in the tests do not allow that context to be maintained. + # Therefore, we use self.config_id.name. + if ( + config["test_enable"] + and self.config_id.name != "test_pos_sale_picking_keep" + ): + # For not breaking tests of other modules + return super()._create_order_picking() + return True diff --git a/pos_sale_picking_keep/models/pos_session.py b/pos_sale_picking_keep/models/pos_session.py new file mode 100644 index 0000000000..3def4406a1 --- /dev/null +++ b/pos_sale_picking_keep/models/pos_session.py @@ -0,0 +1,21 @@ +# Copyright 2025 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import models +from odoo.tools import config + + +class PosSession(models.Model): + _inherit = "pos.session" + + def _create_picking_at_end_of_session(self): + # Nullify the creation of the pickings at this level + # We cannot use self.env.context.get("test_pos_sale_picking_keep") because + # the tours that run in the tests do not allow that context to be maintained. + # Therefore, we use self.config_id.name. + if ( + config["test_enable"] + and self.config_id.name != "test_pos_sale_picking_keep" + ): + # For not breaking tests of other modules + return super()._create_picking_at_end_of_session() + return True diff --git a/pos_sale_picking_keep/models/sale_order_line.py b/pos_sale_picking_keep/models/sale_order_line.py new file mode 100644 index 0000000000..f44e3837a2 --- /dev/null +++ b/pos_sale_picking_keep/models/sale_order_line.py @@ -0,0 +1,19 @@ +# Copyright 2026 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + # TODO: Delete if merged https://github.com/odoo/odoo/pull/253333 + def _compute_qty_delivered(self): + self = self.with_context(from_qty_delivered=True) + return super()._compute_qty_delivered() + + # TODO: Delete if merged https://github.com/odoo/odoo/pull/253333 + @api.model + def _convert_qty(self, sale_line, qty, direction): + if self.env.context.get("from_qty_delivered"): + return 0 + return super()._convert_qty(sale_line=sale_line, qty=qty, direction=direction) diff --git a/pos_sale_picking_keep/pyproject.toml b/pos_sale_picking_keep/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/pos_sale_picking_keep/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/pos_sale_picking_keep/readme/CONTEXT.md b/pos_sale_picking_keep/readme/CONTEXT.md new file mode 100644 index 0000000000..df96e1c124 --- /dev/null +++ b/pos_sale_picking_keep/readme/CONTEXT.md @@ -0,0 +1,7 @@ +In some scenarios, you may not want that the point of sale (PoS) handles the pickings +of the products you are paying: + +- Using the PoS as a pure payment terminal. +- When complex stock flows are not supplied by the PoS. + +In that cases, it's better to keep the original sales pickings. diff --git a/pos_sale_picking_keep/readme/DESCRIPTION.md b/pos_sale_picking_keep/readme/DESCRIPTION.md new file mode 100644 index 0000000000..8c167306c6 --- /dev/null +++ b/pos_sale_picking_keep/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module inhibits the manipulation that the point of sale mades over the sales orders +pickings, and the creation of new pickings under the PoS picking type. diff --git a/pos_sale_picking_keep/static/description/index.html b/pos_sale_picking_keep/static/description/index.html new file mode 100644 index 0000000000..f105cf7fea --- /dev/null +++ b/pos_sale_picking_keep/static/description/index.html @@ -0,0 +1,431 @@ + + + + + +Keep sale pickings from PoS + + + +
+

Keep sale pickings from PoS

+ + +

Beta License: AGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

+

This module inhibits the manipulation that the point of sale mades over +the sales orders pickings, and the creation of new pickings under the +PoS picking type.

+

Table of contents

+ +
+

Use Cases / Context

+

In some scenarios, you may not want that the point of sale (PoS) handles +the pickings of the products you are paying:

+
    +
  • Using the PoS as a pure payment terminal.
  • +
  • When complex stock flows are not supplied by the PoS.
  • +
+

In that cases, it’s better to keep the original sales pickings.

+
+
+

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 to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

pedrobaeza

+

This module is part of the OCA/pos project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/pos_sale_picking_keep/static/tests/tours/pos_sale_picking_keep.esm.js b/pos_sale_picking_keep/static/tests/tours/pos_sale_picking_keep.esm.js new file mode 100644 index 0000000000..63ef17f323 --- /dev/null +++ b/pos_sale_picking_keep/static/tests/tours/pos_sale_picking_keep.esm.js @@ -0,0 +1,32 @@ +import * as Chrome from "@point_of_sale/../tests/tours/utils/chrome_util"; +import * as Dialog from "@point_of_sale/../tests/tours/utils/dialog_util"; +import * as PaymentScreen from "@point_of_sale/../tests/tours/utils/payment_screen_util"; +import * as PosSale from "@pos_sale/../tests/tours/utils/pos_sale_utils"; +import * as ProductScreen from "@point_of_sale/../tests/tours/utils/product_screen_util"; +import * as ReceiptScreen from "@point_of_sale/../tests/tours/utils/receipt_screen_util"; +import {registry} from "@web/core/registry"; + +registry.category("web_tour.tours").add("PosSalePickingKeep1", { + steps: () => + [ + Chrome.startPoS(), + Dialog.confirm("Open Register"), + PosSale.settleNthOrder(1), + ProductScreen.selectedOrderlineHas("Test Product", "1.00"), + ProductScreen.clickPayButton(), + PaymentScreen.clickPaymentMethod("Bank", true, {remaining: "0.0"}), + PaymentScreen.clickValidate(), + ReceiptScreen.isShown(), + ].flat(), +}); +registry.category("web_tour.tours").add("PosSalePickingKeep2", { + steps: () => + [ + Chrome.startPoS(), + Dialog.confirm("Open Register"), + ProductScreen.clickDisplayedProduct("Test Product"), + ProductScreen.clickPayButton(), + PaymentScreen.clickPaymentMethod("Bank"), + PaymentScreen.clickValidate(), + ].flat(), +}); diff --git a/pos_sale_picking_keep/tests/__init__.py b/pos_sale_picking_keep/tests/__init__.py new file mode 100644 index 0000000000..bdfa733c4b --- /dev/null +++ b/pos_sale_picking_keep/tests/__init__.py @@ -0,0 +1 @@ +from . import test_pos_sale_picking_keep diff --git a/pos_sale_picking_keep/tests/test_pos_sale_picking_keep.py b/pos_sale_picking_keep/tests/test_pos_sale_picking_keep.py new file mode 100644 index 0000000000..b85b122233 --- /dev/null +++ b/pos_sale_picking_keep/tests/test_pos_sale_picking_keep.py @@ -0,0 +1,70 @@ +# Copyright 2026 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import odoo.tests +from odoo.tests import Form + +from odoo.addons.point_of_sale.tests.test_frontend import TestPointOfSaleHttpCommon + + +@odoo.tests.tagged("post_install", "-at_install") +class TestPosSalePickingKeep(TestPointOfSaleHttpCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env.company.point_of_sale_update_stock_quantities = "closing" + cls.customer = cls.env["res.partner"].create({"name": "Test partner"}) + cls.warehouse = cls.env["stock.warehouse"].search( + [("company_id", "=", cls.env.company.id)], limit=1 + ) + cls.product = cls.env["product.product"].create( + { + "name": "Test Product", + "available_in_pos": True, + "is_storable": True, + "lst_price": 10.0, + } + ) + cls.main_pos_config.name = "test_pos_sale_picking_keep" + + def test_sale_order_pos_order_done(self): + self.env["stock.quant"]._update_available_quantity( + self.product, self.warehouse.lot_stock_id, 1 + ) + order_form = Form(self.env["sale.order"]) + order_form.partner_id = self.customer + order_form.client_order_ref = "test_pos_sale_picking_keep" + with order_form.order_line.new() as line_form: + line_form.product_id = self.product + sale_order = order_form.save() + sol = sale_order.order_line + self.assertEqual(sol.qty_delivered, 0) + self.main_pos_config.open_ui() + self.start_tour( + "/pos/ui?config_id=%d" % self.main_pos_config.id, + "PosSalePickingKeep1", + login="accountman", + ) + self.assertEqual(sale_order.state, "sale") + self.assertEqual(len(sale_order.picking_ids), 1) + pos_order = sol.pos_order_line_ids.order_id + self.assertEqual(pos_order.state, "paid") + self.assertFalse(pos_order.picking_ids) + so_picking = sale_order.picking_ids + self.assertEqual(so_picking.state, "assigned") + self.assertEqual(sol.qty_delivered, 0) + sale_order.picking_ids.button_validate() + self.assertEqual(so_picking.state, "done") + self.assertEqual(sol.qty_delivered, 1) + + def test_pos_order_flow(self): + self.main_pos_config.open_ui() + self.start_tour( + "/pos/ui?config_id=%d" % self.main_pos_config.id, + "PosSalePickingKeep2", + login="accountman", + ) + self.main_pos_config.current_session_id.close_session_from_ui() + pos_order = self.env["pos.order"].search([], order="id desc", limit=1) + self.assertTrue(pos_order) + self.assertEqual(pos_order.state, "done") + self.assertFalse(pos_order.session_id.picking_ids) From 5ed58c4482da4455a2c3950fa50f0cbc3d8542c1 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 12 Mar 2026 17:15:44 +0000 Subject: [PATCH 06/12] [UPD] Update pos_sale_picking_keep.pot --- .../i18n/pos_sale_picking_keep.pot | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 pos_sale_picking_keep/i18n/pos_sale_picking_keep.pot diff --git a/pos_sale_picking_keep/i18n/pos_sale_picking_keep.pot b/pos_sale_picking_keep/i18n/pos_sale_picking_keep.pot new file mode 100644 index 0000000000..ba699bbf39 --- /dev/null +++ b/pos_sale_picking_keep/i18n/pos_sale_picking_keep.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_sale_picking_keep +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.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: pos_sale_picking_keep +#: model:ir.model,name:pos_sale_picking_keep.model_pos_order +msgid "Point of Sale Orders" +msgstr "" + +#. module: pos_sale_picking_keep +#: model:ir.model,name:pos_sale_picking_keep.model_pos_session +msgid "Point of Sale Session" +msgstr "" + +#. module: pos_sale_picking_keep +#: model:ir.model,name:pos_sale_picking_keep.model_sale_order_line +msgid "Sales Order Line" +msgstr "" From 68210301c77429baf3fe3722d17226422c94bc47 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 12 Mar 2026 17:20:04 +0000 Subject: [PATCH 07/12] [BOT] post-merge updates --- pos_sale_picking_keep/README.rst | 12 +++++--- pos_sale_picking_keep/__manifest__.py | 2 +- .../static/description/icon.png | Bin 0 -> 10254 bytes .../static/description/index.html | 26 +++++++++++------- 4 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 pos_sale_picking_keep/static/description/icon.png diff --git a/pos_sale_picking_keep/README.rst b/pos_sale_picking_keep/README.rst index c385d2bfe0..f1d682f12a 100644 --- a/pos_sale_picking_keep/README.rst +++ b/pos_sale_picking_keep/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + =========================== Keep sale pickings from PoS =========================== @@ -7,13 +11,13 @@ Keep sale pickings from PoS !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ea1933778dd59465a8396297149fff3f9fdfab1f4e6ed9a6a8d4dbad561e4da0 + !! source digest: sha256:2eec5fd070679dc23fe194c9e09eadeb1a781441382f135a8032a1c2a145938f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 +.. |badge2| image:: https://img.shields.io/badge/license-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%2Fpos-lightgray.png?logo=github @@ -43,8 +47,8 @@ Use Cases / Context In some scenarios, you may not want that the point of sale (PoS) handles the pickings of the products you are paying: -- Using the PoS as a pure payment terminal. -- When complex stock flows are not supplied by the PoS. +- Using the PoS as a pure payment terminal. +- When complex stock flows are not supplied by the PoS. In that cases, it's better to keep the original sales pickings. diff --git a/pos_sale_picking_keep/__manifest__.py b/pos_sale_picking_keep/__manifest__.py index 996e17d4db..f4cb506b9a 100644 --- a/pos_sale_picking_keep/__manifest__.py +++ b/pos_sale_picking_keep/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Keep sale pickings from PoS", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Point Of Sale", "website": "https://github.com/OCA/pos", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/pos_sale_picking_keep/static/description/icon.png b/pos_sale_picking_keep/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 -Keep sale pickings from PoS +README.rst -
-

Keep sale pickings from PoS

+
+ + +Odoo Community Association + +
+

Keep sale pickings from PoS

-

Beta License: AGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

This module inhibits the manipulation that the point of sale mades over the sales orders pickings, and the creation of new pickings under the PoS picking type.

@@ -386,7 +391,7 @@

Keep sale pickings from PoS

-

Use Cases / Context

+

Use Cases / Context

In some scenarios, you may not want that the point of sale (PoS) handles the pickings of the products you are paying:

    @@ -396,7 +401,7 @@

    Use Cases / Context

    In that cases, it’s better to keep the original sales pickings.

-

Bug Tracker

+

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 to smash it by providing a detailed and welcomed @@ -404,15 +409,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Tecnativa
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -427,5 +432,6 @@

Maintainers

+
From 28ebdd651f25d90783288112713944c313ef2e1f Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 13 Mar 2026 13:22:43 +0000 Subject: [PATCH 08/12] Added translation using Weblate (Italian) --- pos_sale_picking_keep/i18n/it.po | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pos_sale_picking_keep/i18n/it.po diff --git a/pos_sale_picking_keep/i18n/it.po b/pos_sale_picking_keep/i18n/it.po new file mode 100644 index 0000000000..ebdcd4f36f --- /dev/null +++ b/pos_sale_picking_keep/i18n/it.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_sale_picking_keep +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\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: pos_sale_picking_keep +#: model:ir.model,name:pos_sale_picking_keep.model_pos_order +msgid "Point of Sale Orders" +msgstr "" + +#. module: pos_sale_picking_keep +#: model:ir.model,name:pos_sale_picking_keep.model_pos_session +msgid "Point of Sale Session" +msgstr "" + +#. module: pos_sale_picking_keep +#: model:ir.model,name:pos_sale_picking_keep.model_sale_order_line +msgid "Sales Order Line" +msgstr "" From 5043bf67256245ea2813a93b9dc7760dd9cb672c Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 13 Mar 2026 14:07:50 +0000 Subject: [PATCH 09/12] Translated using Weblate (Italian) Currently translated at 100.0% (3 of 3 strings) Translation: pos-18.0/pos-18.0-pos_sale_picking_keep Translate-URL: https://translation.odoo-community.org/projects/pos-18-0/pos-18-0-pos_sale_picking_keep/it/ --- pos_sale_picking_keep/i18n/it.po | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pos_sale_picking_keep/i18n/it.po b/pos_sale_picking_keep/i18n/it.po index ebdcd4f36f..414dca0a33 100644 --- a/pos_sale_picking_keep/i18n/it.po +++ b/pos_sale_picking_keep/i18n/it.po @@ -6,25 +6,27 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-03-13 16:45+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\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 5.15.2\n" #. module: pos_sale_picking_keep #: model:ir.model,name:pos_sale_picking_keep.model_pos_order msgid "Point of Sale Orders" -msgstr "" +msgstr "Ordini punto vendita" #. module: pos_sale_picking_keep #: model:ir.model,name:pos_sale_picking_keep.model_pos_session msgid "Point of Sale Session" -msgstr "" +msgstr "Sessione punto vendita" #. module: pos_sale_picking_keep #: model:ir.model,name:pos_sale_picking_keep.model_sale_order_line msgid "Sales Order Line" -msgstr "" +msgstr "Riga ordine di vendita" From 757787f8b8071530d9aa88e6943403f24fc1f1b7 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 13 May 2026 08:37:10 +0200 Subject: [PATCH 10/12] [FIX] pos_sale_picking_keep: Avoid crash on existing order updates If you have previously sync a `pos.order` (for example, because you have gone to backend with an opened order), and later you do things like unlinking an existing line, you may find other kind of commands in `lines` dictionary like `(2, )`, making the code of this module to crash, so let's protect it properly. --- pos_sale_picking_keep/models/pos_order.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pos_sale_picking_keep/models/pos_order.py b/pos_sale_picking_keep/models/pos_order.py index 4c40b68a6d..653aab9477 100644 --- a/pos_sale_picking_keep/models/pos_order.py +++ b/pos_sale_picking_keep/models/pos_order.py @@ -12,9 +12,10 @@ def sync_from_ui(self, orders): # Avoid the cancellation of the SO pickings so_line_ids = [] for order_data in orders: - lines_data = order_data.get("lines", []) - for _, _, line_data in lines_data: - so_line_id = line_data.get("sale_order_line_id") + for command in order_data.get("lines", []): + if len(command) != 3: + continue # No create/update command + so_line_id = command[2].get("sale_order_line_id") if so_line_id: so_line_ids.append(so_line_id) so_lines = self.env["sale.order.line"].browse(so_line_ids) From 5f4b23278f685d3ab78e7b8b187840e962dbe9b9 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 17 Jun 2026 09:34:00 +0000 Subject: [PATCH 11/12] [BOT] post-merge updates --- pos_sale_picking_keep/README.rst | 2 +- pos_sale_picking_keep/__manifest__.py | 2 +- pos_sale_picking_keep/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pos_sale_picking_keep/README.rst b/pos_sale_picking_keep/README.rst index f1d682f12a..fd25b9428f 100644 --- a/pos_sale_picking_keep/README.rst +++ b/pos_sale_picking_keep/README.rst @@ -11,7 +11,7 @@ Keep sale pickings from PoS !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2eec5fd070679dc23fe194c9e09eadeb1a781441382f135a8032a1c2a145938f + !! source digest: sha256:14008524ac2e970ae97eda09273f81e2fc25b02a6ccf008e85f4473f3d637815 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/pos_sale_picking_keep/__manifest__.py b/pos_sale_picking_keep/__manifest__.py index f4cb506b9a..5301bfc033 100644 --- a/pos_sale_picking_keep/__manifest__.py +++ b/pos_sale_picking_keep/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Keep sale pickings from PoS", - "version": "18.0.1.0.1", + "version": "18.0.1.0.2", "category": "Point Of Sale", "website": "https://github.com/OCA/pos", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/pos_sale_picking_keep/static/description/index.html b/pos_sale_picking_keep/static/description/index.html index 61487a9e41..2226b9650b 100644 --- a/pos_sale_picking_keep/static/description/index.html +++ b/pos_sale_picking_keep/static/description/index.html @@ -372,7 +372,7 @@

Keep sale pickings from PoS

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2eec5fd070679dc23fe194c9e09eadeb1a781441382f135a8032a1c2a145938f +!! source digest: sha256:14008524ac2e970ae97eda09273f81e2fc25b02a6ccf008e85f4473f3d637815 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

This module inhibits the manipulation that the point of sale mades over From c262e7fea23815b3b98594ba85555b869a8f1bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Alan=20Ramos=20Rodr=C3=ADguez?= Date: Fri, 26 Jun 2026 19:35:48 -0600 Subject: [PATCH 12/12] [MIG] pos_sale_picking_keep: Migration to 19.0 - Bump manifest version to 19.0.1.0.0. - Add sale_stock dependency: pos_sale loads sale.order.picking_ids in the PoS data, a field provided by sale_stock. It is auto_install so it is normally present, but it is not pulled in the minimal CI install, which made the PoS fail to load with 'Invalid field picking_ids on sale.order'. The module also operates on the sale order stock moves/pickings, so the dependency is required. - Update the PoS test tour imports to the new 19.0 paths (tests/pos/tours/utils and generic_helpers). - Grant the sales user group in tests, as point_of_sale.group_pos_manager no longer implies sales rights and the onchange now checks create access. - Use f-strings for the tour URLs (ruff UP031). - Add CONTRIBUTORS and regenerate README. --- pos_sale_picking_keep/README.rst | 22 ++++++++++++---- pos_sale_picking_keep/__manifest__.py | 4 +-- pos_sale_picking_keep/i18n/it.po | 2 +- .../i18n/pos_sale_picking_keep.pot | 2 +- pos_sale_picking_keep/readme/CONTRIBUTORS.md | 6 +++++ .../static/description/index.html | 25 +++++++++++++++---- .../tests/tours/pos_sale_picking_keep.esm.js | 10 ++++---- .../tests/test_pos_sale_picking_keep.py | 5 ++-- 8 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 pos_sale_picking_keep/readme/CONTRIBUTORS.md diff --git a/pos_sale_picking_keep/README.rst b/pos_sale_picking_keep/README.rst index fd25b9428f..f714ff3f1a 100644 --- a/pos_sale_picking_keep/README.rst +++ b/pos_sale_picking_keep/README.rst @@ -21,13 +21,13 @@ Keep sale pickings from PoS :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github - :target: https://github.com/OCA/pos/tree/18.0/pos_sale_picking_keep + :target: https://github.com/OCA/pos/tree/19.0/pos_sale_picking_keep :alt: OCA/pos .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/pos-18-0/pos-18-0-pos_sale_picking_keep + :target: https://translation.odoo-community.org/projects/pos-19-0/pos-19-0-pos_sale_picking_keep :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -58,7 +58,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 to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -70,6 +70,18 @@ Authors * Tecnativa +Contributors +------------ + +- Tecnativa: + + - Pedro M. Baeza + - Víctor Martínez + +- Jarsa: + + - Jesús Alan Ramos Rodríguez + Maintainers ----------- @@ -91,6 +103,6 @@ Current `maintainer `__: |maintainer-pedrobaeza| -This module is part of the `OCA/pos `_ project on GitHub. +This module is part of the `OCA/pos `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_sale_picking_keep/__manifest__.py b/pos_sale_picking_keep/__manifest__.py index 5301bfc033..1a7216b02d 100644 --- a/pos_sale_picking_keep/__manifest__.py +++ b/pos_sale_picking_keep/__manifest__.py @@ -2,14 +2,14 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Keep sale pickings from PoS", - "version": "18.0.1.0.2", + "version": "19.0.1.0.0", "category": "Point Of Sale", "website": "https://github.com/OCA/pos", "author": "Tecnativa, Odoo Community Association (OCA)", "maintainers": ["pedrobaeza"], "license": "AGPL-3", "installable": True, - "depends": ["pos_sale"], + "depends": ["pos_sale", "sale_stock"], "assets": { "web.assets_tests": [ "pos_sale_picking_keep/static/tests/tours/**/*", diff --git a/pos_sale_picking_keep/i18n/it.po b/pos_sale_picking_keep/i18n/it.po index 414dca0a33..9bed391550 100644 --- a/pos_sale_picking_keep/i18n/it.po +++ b/pos_sale_picking_keep/i18n/it.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2026-03-13 16:45+0000\n" "Last-Translator: mymage \n" diff --git a/pos_sale_picking_keep/i18n/pos_sale_picking_keep.pot b/pos_sale_picking_keep/i18n/pos_sale_picking_keep.pot index ba699bbf39..b14f7eb313 100644 --- a/pos_sale_picking_keep/i18n/pos_sale_picking_keep.pot +++ b/pos_sale_picking_keep/i18n/pos_sale_picking_keep.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/pos_sale_picking_keep/readme/CONTRIBUTORS.md b/pos_sale_picking_keep/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..8b7bbc8fc0 --- /dev/null +++ b/pos_sale_picking_keep/readme/CONTRIBUTORS.md @@ -0,0 +1,6 @@ +- Tecnativa: + - Pedro M. Baeza + - Víctor Martínez + +- Jarsa: + - Jesús Alan Ramos Rodríguez \ diff --git a/pos_sale_picking_keep/static/description/index.html b/pos_sale_picking_keep/static/description/index.html index 2226b9650b..f78b612c53 100644 --- a/pos_sale_picking_keep/static/description/index.html +++ b/pos_sale_picking_keep/static/description/index.html @@ -374,7 +374,7 @@

Keep sale pickings from PoS

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:14008524ac2e970ae97eda09273f81e2fc25b02a6ccf008e85f4473f3d637815 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

This module inhibits the manipulation that the point of sale mades over the sales orders pickings, and the creation of new pickings under the PoS picking type.

@@ -385,7 +385,8 @@

Keep sale pickings from PoS

  • Bug Tracker
  • Credits
  • @@ -405,7 +406,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 to smash it by providing a detailed and welcomed -feedback.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -416,8 +417,22 @@

    Authors

  • Tecnativa
  • +
    +

    Contributors

    +
      +
    • Tecnativa:
        +
      • Pedro M. Baeza
      • +
      • Víctor Martínez
      • +
      +
    • +
    • Jarsa: +
    • +
    +
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -427,7 +442,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    pedrobaeza

    -

    This module is part of the OCA/pos project on GitHub.

    +

    This module is part of the OCA/pos project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    diff --git a/pos_sale_picking_keep/static/tests/tours/pos_sale_picking_keep.esm.js b/pos_sale_picking_keep/static/tests/tours/pos_sale_picking_keep.esm.js index 63ef17f323..b26b0b5407 100644 --- a/pos_sale_picking_keep/static/tests/tours/pos_sale_picking_keep.esm.js +++ b/pos_sale_picking_keep/static/tests/tours/pos_sale_picking_keep.esm.js @@ -1,9 +1,9 @@ -import * as Chrome from "@point_of_sale/../tests/tours/utils/chrome_util"; -import * as Dialog from "@point_of_sale/../tests/tours/utils/dialog_util"; -import * as PaymentScreen from "@point_of_sale/../tests/tours/utils/payment_screen_util"; +import * as Chrome from "@point_of_sale/../tests/pos/tours/utils/chrome_util"; +import * as Dialog from "@point_of_sale/../tests/generic_helpers/dialog_util"; +import * as PaymentScreen from "@point_of_sale/../tests/pos/tours/utils/payment_screen_util"; import * as PosSale from "@pos_sale/../tests/tours/utils/pos_sale_utils"; -import * as ProductScreen from "@point_of_sale/../tests/tours/utils/product_screen_util"; -import * as ReceiptScreen from "@point_of_sale/../tests/tours/utils/receipt_screen_util"; +import * as ProductScreen from "@point_of_sale/../tests/pos/tours/utils/product_screen_util"; +import * as ReceiptScreen from "@point_of_sale/../tests/pos/tours/utils/receipt_screen_util"; import {registry} from "@web/core/registry"; registry.category("web_tour.tours").add("PosSalePickingKeep1", { diff --git a/pos_sale_picking_keep/tests/test_pos_sale_picking_keep.py b/pos_sale_picking_keep/tests/test_pos_sale_picking_keep.py index b85b122233..e9269ca313 100644 --- a/pos_sale_picking_keep/tests/test_pos_sale_picking_keep.py +++ b/pos_sale_picking_keep/tests/test_pos_sale_picking_keep.py @@ -11,6 +11,7 @@ class TestPosSalePickingKeep(TestPointOfSaleHttpCommon): @classmethod def setUpClass(cls): super().setUpClass() + cls.env.user.group_ids |= cls.env.ref("sales_team.group_sale_salesman") cls.env.company.point_of_sale_update_stock_quantities = "closing" cls.customer = cls.env["res.partner"].create({"name": "Test partner"}) cls.warehouse = cls.env["stock.warehouse"].search( @@ -40,7 +41,7 @@ def test_sale_order_pos_order_done(self): self.assertEqual(sol.qty_delivered, 0) self.main_pos_config.open_ui() self.start_tour( - "/pos/ui?config_id=%d" % self.main_pos_config.id, + f"/pos/ui?config_id={self.main_pos_config.id}", "PosSalePickingKeep1", login="accountman", ) @@ -59,7 +60,7 @@ def test_sale_order_pos_order_done(self): def test_pos_order_flow(self): self.main_pos_config.open_ui() self.start_tour( - "/pos/ui?config_id=%d" % self.main_pos_config.id, + f"/pos/ui?config_id={self.main_pos_config.id}", "PosSalePickingKeep2", login="accountman", )