From 0b43502c5818948cf8403f340b19537aa0b9cf3b Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Tue, 19 Sep 2023 09:32:51 +0200 Subject: [PATCH 1/9] [ADD] new module pos_order_new_line to allow cashier to force to create a new line --- pos_order_new_line/README.rst | 5 +++ pos_order_new_line/__init__.py | 0 pos_order_new_line/__manifest__.py | 25 +++++++++++ pos_order_new_line/i18n/fr.po | 23 ++++++++++ pos_order_new_line/readme/CONTRIBUTORS.rst | 1 + pos_order_new_line/readme/CREDITS.rst | 3 ++ pos_order_new_line/readme/DESCRIPTION.rst | 11 +++++ pos_order_new_line/readme/USAGE.rst | 11 +++++ .../static/description/new_line_button.png | Bin 0 -> 40276 bytes .../static/src/js/NewlineButton.esm.js | 40 ++++++++++++++++++ pos_order_new_line/static/src/js/Order.esm.js | 24 +++++++++++ .../static/src/js/OrderLine.esm.js | 22 ++++++++++ .../static/src/xml/NewlineButton.xml | 20 +++++++++ 13 files changed, 185 insertions(+) create mode 100644 pos_order_new_line/README.rst create mode 100644 pos_order_new_line/__init__.py create mode 100644 pos_order_new_line/__manifest__.py create mode 100644 pos_order_new_line/i18n/fr.po create mode 100644 pos_order_new_line/readme/CONTRIBUTORS.rst create mode 100644 pos_order_new_line/readme/CREDITS.rst create mode 100644 pos_order_new_line/readme/DESCRIPTION.rst create mode 100644 pos_order_new_line/readme/USAGE.rst create mode 100644 pos_order_new_line/static/description/new_line_button.png create mode 100644 pos_order_new_line/static/src/js/NewlineButton.esm.js create mode 100644 pos_order_new_line/static/src/js/Order.esm.js create mode 100644 pos_order_new_line/static/src/js/OrderLine.esm.js create mode 100644 pos_order_new_line/static/src/xml/NewlineButton.xml diff --git a/pos_order_new_line/README.rst b/pos_order_new_line/README.rst new file mode 100644 index 0000000000..e74d011291 --- /dev/null +++ b/pos_order_new_line/README.rst @@ -0,0 +1,5 @@ +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/pos_order_new_line/__init__.py b/pos_order_new_line/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pos_order_new_line/__manifest__.py b/pos_order_new_line/__manifest__.py new file mode 100644 index 0000000000..d8008aabc5 --- /dev/null +++ b/pos_order_new_line/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright (C) 2023-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +{ + "name": "Point of Sale - New Line", + "summary": "Allow cashier to create a new order line, instead of" + " merging the quantity with a previous line", + "version": "16.0.1.0.0", + "category": "Point of Sale", + "maintainers": ["legalsylvain"], + "author": "GRAP,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/pos", + "license": "AGPL-3", + "depends": ["point_of_sale"], + "assets": { + "point_of_sale.assets": [ + "pos_order_new_line/static/src/js/OrderLine.esm.js", + "pos_order_new_line/static/src/js/Order.esm.js", + "pos_order_new_line/static/src/js/NewlineButton.esm.js", + "pos_order_new_line/static/src/xml/NewlineButton.xml", + ], + }, + "installable": True, +} diff --git a/pos_order_new_line/i18n/fr.po b/pos_order_new_line/i18n/fr.po new file mode 100644 index 0000000000..89555a94f4 --- /dev/null +++ b/pos_order_new_line/i18n/fr.po @@ -0,0 +1,23 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_order_new_line +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-19 11:42+0000\n" +"PO-Revision-Date: 2023-09-19 11:42+0000\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_order_new_line +#. odoo-javascript +#: code:addons/pos_order_new_line/static/src/xml/NewlineButton.xml:0 +#, python-format +msgid "New Line" +msgstr "Nouvelle ligne" diff --git a/pos_order_new_line/readme/CONTRIBUTORS.rst b/pos_order_new_line/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..ae6f43a86d --- /dev/null +++ b/pos_order_new_line/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://twitter.com/legalsylvain) diff --git a/pos_order_new_line/readme/CREDITS.rst b/pos_order_new_line/readme/CREDITS.rst new file mode 100644 index 0000000000..4c3758b92a --- /dev/null +++ b/pos_order_new_line/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +* UGESS, Union Nationale des Groupements des épiceries Sociales et Solidaires (https://ugess.org/) diff --git a/pos_order_new_line/readme/DESCRIPTION.rst b/pos_order_new_line/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..9410dec590 --- /dev/null +++ b/pos_order_new_line/readme/DESCRIPTION.rst @@ -0,0 +1,11 @@ +This module extends the functionality of point of sale module, to allow to force +Point of sale to create a new order line, when selecting a product previously selected. + +That can be usefull, if you want to sale the same product with different prices +and or discount. For exemple : + +- You sell carrots, and some carrots are quite old, and you want to + apply discount to a part of the products. (but not all the product) + +- You want to manually apply some discount like : + "2 Coca cola sold, the third will have a 10% discount". diff --git a/pos_order_new_line/readme/USAGE.rst b/pos_order_new_line/readme/USAGE.rst new file mode 100644 index 0000000000..3de10a0983 --- /dev/null +++ b/pos_order_new_line/readme/USAGE.rst @@ -0,0 +1,11 @@ +* Open the Point of sale + +* Select a product + +* Click on 'New line' + +.. figure:: ../static/description/new_line_button.png + +* Select again the same product + +* A new line will be created. diff --git a/pos_order_new_line/static/description/new_line_button.png b/pos_order_new_line/static/description/new_line_button.png new file mode 100644 index 0000000000000000000000000000000000000000..b2467f8444e19b14d9516e37c4a33446e649a509 GIT binary patch literal 40276 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%0D&ZRUyg4 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 E4>A|hL;wH) literal 0 HcmV?d00001 diff --git a/pos_order_new_line/static/src/js/NewlineButton.esm.js b/pos_order_new_line/static/src/js/NewlineButton.esm.js new file mode 100644 index 0000000000..b8abb29551 --- /dev/null +++ b/pos_order_new_line/static/src/js/NewlineButton.esm.js @@ -0,0 +1,40 @@ +/* + Copyright (C) 2023-Today GRAP (http://www.grap.coop) + @author Sylvain LE GAL (https://twitter.com/legalsylvain) + License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +*/ + +odoo.define("pos_order_new_line.NewlineButton", function (require) { + const PosComponent = require("point_of_sale.PosComponent"); + const ProductScreen = require("point_of_sale.ProductScreen"); + const {useListener} = require("@web/core/utils/hooks"); + const Registries = require("point_of_sale.Registries"); + + class NewlineButton extends PosComponent { + setup() { + super.setup(); + useListener("click", this.onClick); + } + + get currentOrder() { + return this.env.pos.get_order(); + } + + async onClick() { + this.currentOrder.create_new_line = !this.currentOrder.create_new_line; + this.render(true); + } + } + NewlineButton.template = "NewlineButton"; + + ProductScreen.addControlButton({ + component: NewlineButton, + condition: function () { + return this.env.pos.get_order().get_orderlines().length !== 0; + }, + }); + + Registries.Component.add(NewlineButton); + + return NewlineButton; +}); diff --git a/pos_order_new_line/static/src/js/Order.esm.js b/pos_order_new_line/static/src/js/Order.esm.js new file mode 100644 index 0000000000..7d5407cf44 --- /dev/null +++ b/pos_order_new_line/static/src/js/Order.esm.js @@ -0,0 +1,24 @@ +/* + Copyright (C) 2023-Today GRAP (http://www.grap.coop) + @author Sylvain LE GAL (https://twitter.com/legalsylvain) + License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +*/ + +odoo.define("pos_order_new_line.Order", function (require) { + var {Order} = require("point_of_sale.models"); + const Registries = require("point_of_sale.Registries"); + + const OverloadOrder = (OriginalOrder) => + class extends OriginalOrder { + constructor() { + super(...arguments); + this.create_new_line = false; + } + + add_product() { + super.add_product(...arguments); + this.create_new_line = false; + } + }; + Registries.Model.extend(Order, OverloadOrder); +}); diff --git a/pos_order_new_line/static/src/js/OrderLine.esm.js b/pos_order_new_line/static/src/js/OrderLine.esm.js new file mode 100644 index 0000000000..be0fd0f03f --- /dev/null +++ b/pos_order_new_line/static/src/js/OrderLine.esm.js @@ -0,0 +1,22 @@ +/* + Copyright (C) 2023-Today GRAP (http://www.grap.coop) + @author Sylvain LE GAL (https://twitter.com/legalsylvain) + License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +*/ + +odoo.define("pos_order_new_line.OrderLine", function (require) { + var {Orderline} = require("point_of_sale.models"); + const Registries = require("point_of_sale.Registries"); + + const OverloadOrderLine = (OriginalOrderline) => + class extends OriginalOrderline { + can_be_merged_with() { + const order = this.pos.get_order(); + if (order.create_new_line) { + return false; + } + return super.can_be_merged_with(...arguments); + } + }; + Registries.Model.extend(Orderline, OverloadOrderLine); +}); diff --git a/pos_order_new_line/static/src/xml/NewlineButton.xml b/pos_order_new_line/static/src/xml/NewlineButton.xml new file mode 100644 index 0000000000..ec6d3a78f3 --- /dev/null +++ b/pos_order_new_line/static/src/xml/NewlineButton.xml @@ -0,0 +1,20 @@ + + + + + + + + + New Line + + + + From 258dfb1b13217a7849a872b7e9af969a56ef7089 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 20 Feb 2024 15:54:52 +0000 Subject: [PATCH 2/9] [UPD] Update pos_order_new_line.pot --- pos_order_new_line/i18n/fr.po | 1 + .../i18n/pos_order_new_line.pot | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 pos_order_new_line/i18n/pos_order_new_line.pot diff --git a/pos_order_new_line/i18n/fr.po b/pos_order_new_line/i18n/fr.po index 89555a94f4..232ae33906 100644 --- a/pos_order_new_line/i18n/fr.po +++ b/pos_order_new_line/i18n/fr.po @@ -10,6 +10,7 @@ msgstr "" "PO-Revision-Date: 2023-09-19 11:42+0000\n" "Last-Translator: \n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" diff --git a/pos_order_new_line/i18n/pos_order_new_line.pot b/pos_order_new_line/i18n/pos_order_new_line.pot new file mode 100644 index 0000000000..fdd909c695 --- /dev/null +++ b/pos_order_new_line/i18n/pos_order_new_line.pot @@ -0,0 +1,21 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_order_new_line +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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_order_new_line +#. odoo-javascript +#: code:addons/pos_order_new_line/static/src/xml/NewlineButton.xml:0 +#, python-format +msgid "New Line" +msgstr "" From 15ae60a3c079b7926689113724e6330f5e32fb67 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 20 Feb 2024 15:59:43 +0000 Subject: [PATCH 3/9] [BOT] post-merge updates --- pos_order_new_line/README.rst | 111 +++++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 455 ++++++++++++++++++ 3 files changed, 566 insertions(+) create mode 100644 pos_order_new_line/static/description/icon.png create mode 100644 pos_order_new_line/static/description/index.html diff --git a/pos_order_new_line/README.rst b/pos_order_new_line/README.rst index e74d011291..a25032b67b 100644 --- a/pos_order_new_line/README.rst +++ b/pos_order_new_line/README.rst @@ -1,5 +1,116 @@ +======================== +Point of Sale - New Line +======================== + .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:61cf1d3fd3db01cf12ea835c5528ea0f84b0ab15eb17c0d5540f4b38f9f01df3 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/16.0/pos_order_new_line + :alt: OCA/pos +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/pos-16-0/pos-16-0-pos_order_new_line + :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=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of point of sale module, to allow to force +Point of sale to create a new order line, when selecting a product previously selected. + +That can be usefull, if you want to sale the same product with different prices +and or discount. For exemple : + +- You sell carrots, and some carrots are quite old, and you want to + apply discount to a part of the products. (but not all the product) + +- You want to manually apply some discount like : + "2 Coca cola sold, the third will have a 10% discount". + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +* Open the Point of sale + +* Select a product + +* Click on 'New line' + +.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_order_new_line/static/description/new_line_button.png + +* Select again the same product + +* A new line will be created. + +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 +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* Sylvain LE GAL (https://twitter.com/legalsylvain) + +Other credits +~~~~~~~~~~~~~ + +The development of this module has been financially supported by: + +* UGESS, Union Nationale des Groupements des épiceries Sociales et Solidaires (https://ugess.org/) + +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-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px + :target: https://github.com/legalsylvain + :alt: legalsylvain + +Current `maintainer `__: + +|maintainer-legalsylvain| + +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_order_new_line/static/description/icon.png b/pos_order_new_line/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/pos_order_new_line/static/description/index.html b/pos_order_new_line/static/description/index.html new file mode 100644 index 0000000000..677dfd40f2 --- /dev/null +++ b/pos_order_new_line/static/description/index.html @@ -0,0 +1,455 @@ + + + + + +Point of Sale - New Line + + + +
+

Point of Sale - New Line

+ + +

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

+

This module extends the functionality of point of sale module, to allow to force +Point of sale to create a new order line, when selecting a product previously selected.

+

That can be usefull, if you want to sale the same product with different prices +and or discount. For exemple :

+
    +
  • You sell carrots, and some carrots are quite old, and you want to +apply discount to a part of the products. (but not all the product)
  • +
  • You want to manually apply some discount like : +“2 Coca cola sold, the third will have a 10% discount”.
  • +
+

Table of contents

+ +
+

Usage

+
    +
  • Open the Point of sale
  • +
  • Select a product
  • +
  • Click on ‘New line’
  • +
+
+https://raw.githubusercontent.com/OCA/pos/16.0/pos_order_new_line/static/description/new_line_button.png +
+
    +
  • Select again the same product
  • +
  • A new line will be created.
  • +
+
+
+

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

+
    +
  • GRAP
  • +
+
+ +
+

Other credits

+

The development of this module has been financially supported by:

+
    +
  • UGESS, Union Nationale des Groupements des épiceries Sociales et Solidaires (https://ugess.org/)
  • +
+
+
+

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:

+

legalsylvain

+

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.

+
+
+
+ + From fa046db4637d196237e69c6907b65a42450e17df Mon Sep 17 00:00:00 2001 From: Miguel Cepeda Date: Fri, 23 Feb 2024 12:03:04 +0000 Subject: [PATCH 4/9] Added translation using Weblate (Spanish) --- pos_order_new_line/i18n/es.po | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 pos_order_new_line/i18n/es.po diff --git a/pos_order_new_line/i18n/es.po b/pos_order_new_line/i18n/es.po new file mode 100644 index 0000000000..ed08f6232b --- /dev/null +++ b/pos_order_new_line/i18n/es.po @@ -0,0 +1,22 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_order_new_line +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es\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_order_new_line +#. odoo-javascript +#: code:addons/pos_order_new_line/static/src/xml/NewlineButton.xml:0 +#, python-format +msgid "New Line" +msgstr "" From c7a47cc05fdab4cefe4d235a16913f0e9ec0e657 Mon Sep 17 00:00:00 2001 From: Miguel Cepeda Date: Fri, 23 Feb 2024 12:03:22 +0000 Subject: [PATCH 5/9] Translated using Weblate (Spanish) Currently translated at 100.0% (1 of 1 strings) Translation: pos-16.0/pos-16.0-pos_order_new_line Translate-URL: https://translation.odoo-community.org/projects/pos-16-0/pos-16-0-pos_order_new_line/es/ --- pos_order_new_line/i18n/es.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pos_order_new_line/i18n/es.po b/pos_order_new_line/i18n/es.po index ed08f6232b..4d5f5a8e7f 100644 --- a/pos_order_new_line/i18n/es.po +++ b/pos_order_new_line/i18n/es.po @@ -6,17 +6,19 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-02-23 12:11+0000\n" +"Last-Translator: Miguel Cepeda \n" "Language-Team: none\n" "Language: es\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.17\n" #. module: pos_order_new_line #. odoo-javascript #: code:addons/pos_order_new_line/static/src/xml/NewlineButton.xml:0 #, python-format msgid "New Line" -msgstr "" +msgstr "Nueva línea" From 667db1eb9767b6abcc20f4ebbc43ed5c0ec5b8ce Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 26 Feb 2024 13:55:00 +0000 Subject: [PATCH 6/9] Added translation using Weblate (Italian) --- pos_order_new_line/i18n/it.po | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 pos_order_new_line/i18n/it.po diff --git a/pos_order_new_line/i18n/it.po b/pos_order_new_line/i18n/it.po new file mode 100644 index 0000000000..29999ab6f9 --- /dev/null +++ b/pos_order_new_line/i18n/it.po @@ -0,0 +1,22 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_order_new_line +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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_order_new_line +#. odoo-javascript +#: code:addons/pos_order_new_line/static/src/xml/NewlineButton.xml:0 +#, python-format +msgid "New Line" +msgstr "" From 20b90485f5b4a464fe93524ac50056ff3eb5d9f9 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 26 Feb 2024 13:55:06 +0000 Subject: [PATCH 7/9] Translated using Weblate (Italian) Currently translated at 100.0% (1 of 1 strings) Translation: pos-16.0/pos-16.0-pos_order_new_line Translate-URL: https://translation.odoo-community.org/projects/pos-16-0/pos-16-0-pos_order_new_line/it/ --- pos_order_new_line/i18n/it.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pos_order_new_line/i18n/it.po b/pos_order_new_line/i18n/it.po index 29999ab6f9..8720ed7bf7 100644 --- a/pos_order_new_line/i18n/it.po +++ b/pos_order_new_line/i18n/it.po @@ -6,17 +6,19 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-02-26 15:34+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 4.17\n" #. module: pos_order_new_line #. odoo-javascript #: code:addons/pos_order_new_line/static/src/xml/NewlineButton.xml:0 #, python-format msgid "New Line" -msgstr "" +msgstr "Nuova riga" From 99db1bd4e9bfb81e67e25c83020f3334e6766d07 Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Mon, 10 Feb 2025 16:11:27 +0530 Subject: [PATCH 8/9] [IMP] pos_order_new_line: pre-commit auto fixes --- pos_order_new_line/README.rst | 52 +++++++++---------- pos_order_new_line/pyproject.toml | 3 ++ pos_order_new_line/readme/CONTRIBUTORS.md | 1 + pos_order_new_line/readme/CONTRIBUTORS.rst | 1 - pos_order_new_line/readme/CREDITS.md | 4 ++ pos_order_new_line/readme/CREDITS.rst | 3 -- .../{DESCRIPTION.rst => DESCRIPTION.md} | 14 ++--- pos_order_new_line/readme/USAGE.md | 8 +++ pos_order_new_line/readme/USAGE.rst | 11 ---- .../static/description/index.html | 37 +++++++------ 10 files changed, 69 insertions(+), 65 deletions(-) create mode 100644 pos_order_new_line/pyproject.toml create mode 100644 pos_order_new_line/readme/CONTRIBUTORS.md delete mode 100644 pos_order_new_line/readme/CONTRIBUTORS.rst create mode 100644 pos_order_new_line/readme/CREDITS.md delete mode 100644 pos_order_new_line/readme/CREDITS.rst rename pos_order_new_line/readme/{DESCRIPTION.rst => DESCRIPTION.md} (50%) create mode 100644 pos_order_new_line/readme/USAGE.md delete mode 100644 pos_order_new_line/readme/USAGE.rst diff --git a/pos_order_new_line/README.rst b/pos_order_new_line/README.rst index a25032b67b..cc5715c6ae 100644 --- a/pos_order_new_line/README.rst +++ b/pos_order_new_line/README.rst @@ -17,28 +17,28 @@ Point of Sale - New Line :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/16.0/pos_order_new_line + :target: https://github.com/OCA/pos/tree/17.0/pos_order_new_line :alt: OCA/pos .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/pos-16-0/pos-16-0-pos_order_new_line + :target: https://translation.odoo-community.org/projects/pos-17-0/pos-17-0-pos_order_new_line :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=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -This module extends the functionality of point of sale module, to allow to force -Point of sale to create a new order line, when selecting a product previously selected. +This module extends the functionality of point of sale module, to allow +to force Point of sale to create a new order line, when selecting a +product previously selected. -That can be usefull, if you want to sale the same product with different prices -and or discount. For exemple : +That can be usefull, if you want to sale the same product with different +prices and or discount. For exemple : - You sell carrots, and some carrots are quite old, and you want to apply discount to a part of the products. (but not all the product) - -- You want to manually apply some discount like : - "2 Coca cola sold, the third will have a 10% discount". +- You want to manually apply some discount like : "2 Coca cola sold, the + third will have a 10% discount". **Table of contents** @@ -48,17 +48,16 @@ and or discount. For exemple : Usage ===== -* Open the Point of sale - -* Select a product - -* Click on 'New line' +- Open the Point of sale +- Select a product +- Click on 'New line' -.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_order_new_line/static/description/new_line_button.png +|image1| -* Select again the same product +- Select again the same product +- A new line will be created. -* A new line will be created. +.. |image1| image:: https://raw.githubusercontent.com/OCA/pos/17.0/pos_order_new_line/static/description/new_line_button.png Bug Tracker =========== @@ -66,7 +65,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. @@ -74,24 +73,25 @@ Credits ======= Authors -~~~~~~~ +------- * GRAP Contributors -~~~~~~~~~~~~ +------------ -* Sylvain LE GAL (https://twitter.com/legalsylvain) +- Sylvain LE GAL (https://twitter.com/legalsylvain) Other credits -~~~~~~~~~~~~~ +------------- The development of this module has been financially supported by: -* UGESS, Union Nationale des Groupements des épiceries Sociales et Solidaires (https://ugess.org/) +- UGESS, Union Nationale des Groupements des épiceries Sociales et + Solidaires (https://ugess.org/) Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -111,6 +111,6 @@ Current `maintainer `__: |maintainer-legalsylvain| -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_order_new_line/pyproject.toml b/pos_order_new_line/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/pos_order_new_line/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/pos_order_new_line/readme/CONTRIBUTORS.md b/pos_order_new_line/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..18c1c87e0f --- /dev/null +++ b/pos_order_new_line/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Sylvain LE GAL () diff --git a/pos_order_new_line/readme/CONTRIBUTORS.rst b/pos_order_new_line/readme/CONTRIBUTORS.rst deleted file mode 100644 index ae6f43a86d..0000000000 --- a/pos_order_new_line/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Sylvain LE GAL (https://twitter.com/legalsylvain) diff --git a/pos_order_new_line/readme/CREDITS.md b/pos_order_new_line/readme/CREDITS.md new file mode 100644 index 0000000000..4f833c6217 --- /dev/null +++ b/pos_order_new_line/readme/CREDITS.md @@ -0,0 +1,4 @@ +The development of this module has been financially supported by: + +- UGESS, Union Nationale des Groupements des épiceries Sociales et + Solidaires () diff --git a/pos_order_new_line/readme/CREDITS.rst b/pos_order_new_line/readme/CREDITS.rst deleted file mode 100644 index 4c3758b92a..0000000000 --- a/pos_order_new_line/readme/CREDITS.rst +++ /dev/null @@ -1,3 +0,0 @@ -The development of this module has been financially supported by: - -* UGESS, Union Nationale des Groupements des épiceries Sociales et Solidaires (https://ugess.org/) diff --git a/pos_order_new_line/readme/DESCRIPTION.rst b/pos_order_new_line/readme/DESCRIPTION.md similarity index 50% rename from pos_order_new_line/readme/DESCRIPTION.rst rename to pos_order_new_line/readme/DESCRIPTION.md index 9410dec590..347585e479 100644 --- a/pos_order_new_line/readme/DESCRIPTION.rst +++ b/pos_order_new_line/readme/DESCRIPTION.md @@ -1,11 +1,11 @@ -This module extends the functionality of point of sale module, to allow to force -Point of sale to create a new order line, when selecting a product previously selected. +This module extends the functionality of point of sale module, to allow +to force Point of sale to create a new order line, when selecting a +product previously selected. -That can be usefull, if you want to sale the same product with different prices -and or discount. For exemple : +That can be usefull, if you want to sale the same product with different +prices and or discount. For exemple : - You sell carrots, and some carrots are quite old, and you want to apply discount to a part of the products. (but not all the product) - -- You want to manually apply some discount like : - "2 Coca cola sold, the third will have a 10% discount". +- You want to manually apply some discount like : "2 Coca cola sold, the + third will have a 10% discount". diff --git a/pos_order_new_line/readme/USAGE.md b/pos_order_new_line/readme/USAGE.md new file mode 100644 index 0000000000..c7d4fd4ec6 --- /dev/null +++ b/pos_order_new_line/readme/USAGE.md @@ -0,0 +1,8 @@ +- Open the Point of sale +- Select a product +- Click on 'New line' + +![](../static/description/new_line_button.png) + +- Select again the same product +- A new line will be created. diff --git a/pos_order_new_line/readme/USAGE.rst b/pos_order_new_line/readme/USAGE.rst deleted file mode 100644 index 3de10a0983..0000000000 --- a/pos_order_new_line/readme/USAGE.rst +++ /dev/null @@ -1,11 +0,0 @@ -* Open the Point of sale - -* Select a product - -* Click on 'New line' - -.. figure:: ../static/description/new_line_button.png - -* Select again the same product - -* A new line will be created. diff --git a/pos_order_new_line/static/description/index.html b/pos_order_new_line/static/description/index.html index 677dfd40f2..4ed64f7bf7 100644 --- a/pos_order_new_line/static/description/index.html +++ b/pos_order_new_line/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -368,16 +369,17 @@

Point of Sale - New Line

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:61cf1d3fd3db01cf12ea835c5528ea0f84b0ab15eb17c0d5540f4b38f9f01df3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

-

This module extends the functionality of point of sale module, to allow to force -Point of sale to create a new order line, when selecting a product previously selected.

-

That can be usefull, if you want to sale the same product with different prices -and or discount. For exemple :

+

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

+

This module extends the functionality of point of sale module, to allow +to force Point of sale to create a new order line, when selecting a +product previously selected.

+

That can be usefull, if you want to sale the same product with different +prices and or discount. For exemple :

  • You sell carrots, and some carrots are quite old, and you want to apply discount to a part of the products. (but not all the product)
  • -
  • You want to manually apply some discount like : -“2 Coca cola sold, the third will have a 10% discount”.
  • +
  • You want to manually apply some discount like : “2 Coca cola sold, the +third will have a 10% discount”.

Table of contents

@@ -400,9 +402,7 @@

Usage

  • Select a product
  • Click on ‘New line’
  • -
    -https://raw.githubusercontent.com/OCA/pos/16.0/pos_order_new_line/static/description/new_line_button.png -
    +

    image1

    • Select again the same product
    • A new line will be created.
    • @@ -413,7 +413,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.

    @@ -434,19 +434,22 @@

    Contributors

    Other credits

    The development of this module has been financially supported by:

      -
    • UGESS, Union Nationale des Groupements des épiceries Sociales et Solidaires (https://ugess.org/)
    • +
    • UGESS, Union Nationale des Groupements des épiceries Sociales et +Solidaires (https://ugess.org/)

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +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:

    legalsylvain

    -

    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.

    From d1737055fed27236381ecb90bf0bb1587bb33b97 Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Mon, 10 Feb 2025 16:13:35 +0530 Subject: [PATCH 9/9] [MIG] pos_order_new_line: Migration to 17.0 --- pos_order_new_line/README.rst | 3 ++ pos_order_new_line/__manifest__.py | 4 +- pos_order_new_line/readme/CONTRIBUTORS.md | 2 + .../static/description/index.html | 4 ++ .../static/src/js/NewlineButton.esm.js | 50 ++++++++----------- pos_order_new_line/static/src/js/Order.esm.js | 28 +++++------ .../static/src/js/OrderLine.esm.js | 25 ++++------ .../static/src/xml/NewlineButton.xml | 3 +- 8 files changed, 58 insertions(+), 61 deletions(-) diff --git a/pos_order_new_line/README.rst b/pos_order_new_line/README.rst index cc5715c6ae..c0110b23a2 100644 --- a/pos_order_new_line/README.rst +++ b/pos_order_new_line/README.rst @@ -81,6 +81,9 @@ Contributors ------------ - Sylvain LE GAL (https://twitter.com/legalsylvain) +- `Heliconia Solutions Pvt. Ltd. `__ + + - Bhavesh Heliconia Other credits ------------- diff --git a/pos_order_new_line/__manifest__.py b/pos_order_new_line/__manifest__.py index d8008aabc5..47b4316c9e 100644 --- a/pos_order_new_line/__manifest__.py +++ b/pos_order_new_line/__manifest__.py @@ -6,7 +6,7 @@ "name": "Point of Sale - New Line", "summary": "Allow cashier to create a new order line, instead of" " merging the quantity with a previous line", - "version": "16.0.1.0.0", + "version": "17.0.1.0.0", "category": "Point of Sale", "maintainers": ["legalsylvain"], "author": "GRAP,Odoo Community Association (OCA)", @@ -14,7 +14,7 @@ "license": "AGPL-3", "depends": ["point_of_sale"], "assets": { - "point_of_sale.assets": [ + "point_of_sale._assets_pos": [ "pos_order_new_line/static/src/js/OrderLine.esm.js", "pos_order_new_line/static/src/js/Order.esm.js", "pos_order_new_line/static/src/js/NewlineButton.esm.js", diff --git a/pos_order_new_line/readme/CONTRIBUTORS.md b/pos_order_new_line/readme/CONTRIBUTORS.md index 18c1c87e0f..ad1e39054e 100644 --- a/pos_order_new_line/readme/CONTRIBUTORS.md +++ b/pos_order_new_line/readme/CONTRIBUTORS.md @@ -1 +1,3 @@ - Sylvain LE GAL () +- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io) + - Bhavesh Heliconia diff --git a/pos_order_new_line/static/description/index.html b/pos_order_new_line/static/description/index.html index 4ed64f7bf7..9a637abc67 100644 --- a/pos_order_new_line/static/description/index.html +++ b/pos_order_new_line/static/description/index.html @@ -428,6 +428,10 @@

    Authors

    Contributors

    diff --git a/pos_order_new_line/static/src/js/NewlineButton.esm.js b/pos_order_new_line/static/src/js/NewlineButton.esm.js index b8abb29551..86994363dd 100644 --- a/pos_order_new_line/static/src/js/NewlineButton.esm.js +++ b/pos_order_new_line/static/src/js/NewlineButton.esm.js @@ -1,40 +1,34 @@ +/** @odoo-module **/ /* Copyright (C) 2023-Today GRAP (http://www.grap.coop) @author Sylvain LE GAL (https://twitter.com/legalsylvain) License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html */ -odoo.define("pos_order_new_line.NewlineButton", function (require) { - const PosComponent = require("point_of_sale.PosComponent"); - const ProductScreen = require("point_of_sale.ProductScreen"); - const {useListener} = require("@web/core/utils/hooks"); - const Registries = require("point_of_sale.Registries"); +import {Component} from "@odoo/owl"; +import {ProductScreen} from "@point_of_sale/app/screens/product_screen/product_screen"; +import {usePos} from "@point_of_sale/app/store/pos_hook"; - class NewlineButton extends PosComponent { - setup() { - super.setup(); - useListener("click", this.onClick); - } - - get currentOrder() { - return this.env.pos.get_order(); - } - - async onClick() { - this.currentOrder.create_new_line = !this.currentOrder.create_new_line; - this.render(true); - } +class NewlineButton extends Component { + setup() { + super.setup(); + this.pos = usePos(); } - NewlineButton.template = "NewlineButton"; - ProductScreen.addControlButton({ - component: NewlineButton, - condition: function () { - return this.env.pos.get_order().get_orderlines().length !== 0; - }, - }); + get currentOrder() { + return this.pos.get_order(); + } - Registries.Component.add(NewlineButton); + async onClick() { + this.currentOrder.create_new_line = !this.currentOrder.create_new_line; + this.render(true); + } +} +NewlineButton.template = "NewlineButton"; - return NewlineButton; +ProductScreen.addControlButton({ + component: NewlineButton, + condition: function () { + return this.pos.get_order().get_orderlines().length !== 0; + }, }); diff --git a/pos_order_new_line/static/src/js/Order.esm.js b/pos_order_new_line/static/src/js/Order.esm.js index 7d5407cf44..fbb07deed4 100644 --- a/pos_order_new_line/static/src/js/Order.esm.js +++ b/pos_order_new_line/static/src/js/Order.esm.js @@ -1,24 +1,20 @@ +/** @odoo-module */ /* Copyright (C) 2023-Today GRAP (http://www.grap.coop) @author Sylvain LE GAL (https://twitter.com/legalsylvain) License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html */ -odoo.define("pos_order_new_line.Order", function (require) { - var {Order} = require("point_of_sale.models"); - const Registries = require("point_of_sale.Registries"); +import {Order} from "@point_of_sale/app/store/models"; +import {patch} from "@web/core/utils/patch"; - const OverloadOrder = (OriginalOrder) => - class extends OriginalOrder { - constructor() { - super(...arguments); - this.create_new_line = false; - } - - add_product() { - super.add_product(...arguments); - this.create_new_line = false; - } - }; - Registries.Model.extend(Order, OverloadOrder); +patch(Order.prototype, { + async setup() { + this.create_new_line = false; + await super.setup(...arguments); + }, + add_product() { + super.add_product(...arguments); + this.create_new_line = false; + }, }); diff --git a/pos_order_new_line/static/src/js/OrderLine.esm.js b/pos_order_new_line/static/src/js/OrderLine.esm.js index be0fd0f03f..5ddf65907a 100644 --- a/pos_order_new_line/static/src/js/OrderLine.esm.js +++ b/pos_order_new_line/static/src/js/OrderLine.esm.js @@ -1,22 +1,19 @@ +/** @odoo-module */ /* Copyright (C) 2023-Today GRAP (http://www.grap.coop) @author Sylvain LE GAL (https://twitter.com/legalsylvain) License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html */ -odoo.define("pos_order_new_line.OrderLine", function (require) { - var {Orderline} = require("point_of_sale.models"); - const Registries = require("point_of_sale.Registries"); +import {Orderline} from "@point_of_sale/app/store/models"; +import {patch} from "@web/core/utils/patch"; - const OverloadOrderLine = (OriginalOrderline) => - class extends OriginalOrderline { - can_be_merged_with() { - const order = this.pos.get_order(); - if (order.create_new_line) { - return false; - } - return super.can_be_merged_with(...arguments); - } - }; - Registries.Model.extend(Orderline, OverloadOrderLine); +patch(Orderline.prototype, { + can_be_merged_with(orderline) { + const order = this.pos.get_order(); + if (order.create_new_line) { + return false; + } + return super.can_be_merged_with(orderline); + }, }); diff --git a/pos_order_new_line/static/src/xml/NewlineButton.xml b/pos_order_new_line/static/src/xml/NewlineButton.xml index ec6d3a78f3..99888fb058 100644 --- a/pos_order_new_line/static/src/xml/NewlineButton.xml +++ b/pos_order_new_line/static/src/xml/NewlineButton.xml @@ -8,8 +8,9 @@