From 4532aa72f98776b06aa3559418b3d4fbaf08bb3b Mon Sep 17 00:00:00 2001 From: dessanhemrayev Date: Thu, 25 Jan 2024 01:40:23 +0300 Subject: [PATCH 1/5] [ADD] sale_order_amount_to_invoice: Add module --- sale_order_amount_to_invoice/README.rst | 104 ++++ sale_order_amount_to_invoice/__init__.py | 1 + sale_order_amount_to_invoice/__manifest__.py | 20 + .../models/__init__.py | 1 + .../models/sale_order.py | 19 + .../readme/CONFIGURE.md | 1 + .../readme/CONTEXT.md | 1 + .../readme/CONTRIBUTORS.md | 3 + .../readme/DESCRIPTION.md | 5 + sale_order_amount_to_invoice/readme/USAGE.md | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 450 ++++++++++++++++++ .../tests/__init__.py | 1 + .../tests/test_sale_order_invoice_amount.py | 63 +++ .../views/sale_order_view.xml | 60 +++ 15 files changed, 730 insertions(+) create mode 100644 sale_order_amount_to_invoice/README.rst create mode 100644 sale_order_amount_to_invoice/__init__.py create mode 100644 sale_order_amount_to_invoice/__manifest__.py create mode 100644 sale_order_amount_to_invoice/models/__init__.py create mode 100644 sale_order_amount_to_invoice/models/sale_order.py create mode 100644 sale_order_amount_to_invoice/readme/CONFIGURE.md create mode 100644 sale_order_amount_to_invoice/readme/CONTEXT.md create mode 100644 sale_order_amount_to_invoice/readme/CONTRIBUTORS.md create mode 100644 sale_order_amount_to_invoice/readme/DESCRIPTION.md create mode 100644 sale_order_amount_to_invoice/readme/USAGE.md create mode 100644 sale_order_amount_to_invoice/static/description/icon.png create mode 100644 sale_order_amount_to_invoice/static/description/index.html create mode 100644 sale_order_amount_to_invoice/tests/__init__.py create mode 100644 sale_order_amount_to_invoice/tests/test_sale_order_invoice_amount.py create mode 100644 sale_order_amount_to_invoice/views/sale_order_view.xml diff --git a/sale_order_amount_to_invoice/README.rst b/sale_order_amount_to_invoice/README.rst new file mode 100644 index 00000000000..0faf904f3e4 --- /dev/null +++ b/sale_order_amount_to_invoice/README.rst @@ -0,0 +1,104 @@ +============================ +Sale Order Amount to Invoice +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:8b39bbad0d45ed842c5f456334e4d80b130204436295875e73bc4ca4cdd54017 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/sale-workflow/tree/16.0/sale_order_amount_to_invoice + :alt: OCA/sale-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_order_amount_to_invoice + :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/sale-workflow&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds "Amount to Invoice" for quotations/sales orders. It is +displayed: + +- In order lines. You need to show this field because it's hidden by + default +- In the quotation form view +- In the quotation list view. You need to show this field because it's + hidden by default + +**Table of contents** + +.. contents:: + :local: + +Use Cases / Context +=================== + +Sometimes you would like to see total amount to invoice for all your +sales orders. + +Configuration +============= + +No configuration is required. + +Usage +===== + +You need to click the list view setting (the last column in the list +view) and enable "Amount to Invoice" to show this filed in the list +view. Same thing for the quotation order lines. + +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 +------- + +* Cetmix + +Contributors +------------ + +- `Cetmix `__: + + - Ivan Sokolov + - Dessan Hemrayev + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/sale-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_order_amount_to_invoice/__init__.py b/sale_order_amount_to_invoice/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/sale_order_amount_to_invoice/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_order_amount_to_invoice/__manifest__.py b/sale_order_amount_to_invoice/__manifest__.py new file mode 100644 index 00000000000..ead2f26b990 --- /dev/null +++ b/sale_order_amount_to_invoice/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright (C) 2024 Cetmix OÜ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Sale Order Amount to Invoice", + "version": "16.0.1.0.0", + "author": "Cetmix, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/sale-workflow", + "category": "Sales", + "license": "AGPL-3", + "summary": "Show total amount to invoice in quotations/sales orders ", + "depends": [ + "sale", + "account", + ], + "data": [ + "views/sale_order_view.xml", + ], + "installable": True, +} diff --git a/sale_order_amount_to_invoice/models/__init__.py b/sale_order_amount_to_invoice/models/__init__.py new file mode 100644 index 00000000000..6aacb753131 --- /dev/null +++ b/sale_order_amount_to_invoice/models/__init__.py @@ -0,0 +1 @@ +from . import sale_order diff --git a/sale_order_amount_to_invoice/models/sale_order.py b/sale_order_amount_to_invoice/models/sale_order.py new file mode 100644 index 00000000000..9b8acd24564 --- /dev/null +++ b/sale_order_amount_to_invoice/models/sale_order.py @@ -0,0 +1,19 @@ +# Copyright (C) 2024 Cetmix OÜ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + untaxed_amount_to_invoice = fields.Monetary( + compute="_compute_untaxed_amount_to_invoice", store=True + ) + + @api.depends("order_line.untaxed_amount_to_invoice") + def _compute_untaxed_amount_to_invoice(self): + for rec in self: + rec.untaxed_amount_to_invoice = sum( + rec.order_line.mapped("untaxed_amount_to_invoice") + ) diff --git a/sale_order_amount_to_invoice/readme/CONFIGURE.md b/sale_order_amount_to_invoice/readme/CONFIGURE.md new file mode 100644 index 00000000000..499830c72e6 --- /dev/null +++ b/sale_order_amount_to_invoice/readme/CONFIGURE.md @@ -0,0 +1 @@ +No configuration is required. \ No newline at end of file diff --git a/sale_order_amount_to_invoice/readme/CONTEXT.md b/sale_order_amount_to_invoice/readme/CONTEXT.md new file mode 100644 index 00000000000..97bd440c38c --- /dev/null +++ b/sale_order_amount_to_invoice/readme/CONTEXT.md @@ -0,0 +1 @@ +Sometimes you would like to see total amount to invoice for all your sales orders. \ No newline at end of file diff --git a/sale_order_amount_to_invoice/readme/CONTRIBUTORS.md b/sale_order_amount_to_invoice/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..c741b7f0228 --- /dev/null +++ b/sale_order_amount_to_invoice/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [Cetmix](https://www.cetmix.com): + - Ivan Sokolov + - Dessan Hemrayev \ No newline at end of file diff --git a/sale_order_amount_to_invoice/readme/DESCRIPTION.md b/sale_order_amount_to_invoice/readme/DESCRIPTION.md new file mode 100644 index 00000000000..7eec2e7b89c --- /dev/null +++ b/sale_order_amount_to_invoice/readme/DESCRIPTION.md @@ -0,0 +1,5 @@ +This module adds "Amount to Invoice" for quotations/sales orders. It is displayed: + +- In order lines. You need to show this field because it's hidden by default +- In the quotation form view +- In the quotation list view. You need to show this field because it's hidden by default \ No newline at end of file diff --git a/sale_order_amount_to_invoice/readme/USAGE.md b/sale_order_amount_to_invoice/readme/USAGE.md new file mode 100644 index 00000000000..b75734a166c --- /dev/null +++ b/sale_order_amount_to_invoice/readme/USAGE.md @@ -0,0 +1 @@ +You need to click the list view setting (the last column in the list view) and enable "Amount to Invoice" to show this filed in the list view. Same thing for the quotation order lines. \ No newline at end of file diff --git a/sale_order_amount_to_invoice/static/description/icon.png b/sale_order_amount_to_invoice/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/sale_order_amount_to_invoice/static/description/index.html b/sale_order_amount_to_invoice/static/description/index.html new file mode 100644 index 00000000000..b2ab1291cbd --- /dev/null +++ b/sale_order_amount_to_invoice/static/description/index.html @@ -0,0 +1,450 @@ + + + + + +Sale Order Amount to Invoice + + + +
+

Sale Order Amount to Invoice

+ + +

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

+

This module adds “Amount to Invoice” for quotations/sales orders. It is +displayed:

+
    +
  • In order lines. You need to show this field because it’s hidden by +default
  • +
  • In the quotation form view
  • +
  • In the quotation list view. You need to show this field because it’s +hidden by default
  • +
+

Table of contents

+ +
+

Use Cases / Context

+

Sometimes you would like to see total amount to invoice for all your +sales orders.

+
+
+

Configuration

+

No configuration is required.

+
+
+

Usage

+

You need to click the list view setting (the last column in the list +view) and enable “Amount to Invoice” to show this filed in the list +view. Same thing for the quotation order lines.

+
+
+

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

+
    +
  • Cetmix
  • +
+
+
+

Contributors

+
    +
  • Cetmix:
      +
    • Ivan Sokolov
    • +
    • Dessan Hemrayev
    • +
    +
  • +
+
+
+

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.

+

This module is part of the OCA/sale-workflow project on GitHub.

+

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

+
+
+
+ + diff --git a/sale_order_amount_to_invoice/tests/__init__.py b/sale_order_amount_to_invoice/tests/__init__.py new file mode 100644 index 00000000000..15963146727 --- /dev/null +++ b/sale_order_amount_to_invoice/tests/__init__.py @@ -0,0 +1 @@ +from . import test_sale_order_invoice_amount diff --git a/sale_order_amount_to_invoice/tests/test_sale_order_invoice_amount.py b/sale_order_amount_to_invoice/tests/test_sale_order_invoice_amount.py new file mode 100644 index 00000000000..1f8107086b4 --- /dev/null +++ b/sale_order_amount_to_invoice/tests/test_sale_order_invoice_amount.py @@ -0,0 +1,63 @@ +# Copyright (C) 2024 Cetmix OÜ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import tagged +from odoo.tests.common import Form, TransactionCase + + +@tagged("post_install", "-at_install") +class TestSaleOrderInvoiceAmount(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + # Partners + res_partner_obj = cls.env["res.partner"] + product_obj = cls.env["product.product"] + cls.res_partner_1 = res_partner_obj.create({"name": "Test Partner 1"}) + # Products + cls.product_1 = product_obj.create( + {"name": "Desk Combination 1", "type": "consu", "invoice_policy": "order"} + ) + cls.product_2 = product_obj.create( + { + "name": "Desk Combination 2", + "type": "consu", + "invoice_policy": "delivery", + } + ) + # Sale Order + cls.sale_order_1 = cls.env["sale.order"].create( + {"partner_id": cls.res_partner_1.id} + ) + + def test_add_product(self): + """Check add product to sale order""" + with Form(self.sale_order_1) as form: + with form.order_line.new() as line_1: + line_1.product_id = self.product_1 + line_1.price_unit = 100.0 + with form.order_line.new() as line_2: + line_2.product_id = self.product_2 + line_2.price_unit = 150.0 + + sale_order = form.save() + + self.assertEqual( + sale_order.untaxed_amount_to_invoice, + 0, + msg="Amount to invoice must be equal 0", + ) + sale_order.action_confirm() + self.assertEqual( + sale_order.untaxed_amount_to_invoice, + 100.0, + msg="Amount to invoice must be equal 100.0", + ) + + sale_order.order_line[1].qty_delivered = 1 + self.assertEqual( + sale_order.untaxed_amount_to_invoice, + 250.0, + msg="Amount to invoice must be equal 250.0", + ) diff --git a/sale_order_amount_to_invoice/views/sale_order_view.xml b/sale_order_amount_to_invoice/views/sale_order_view.xml new file mode 100644 index 00000000000..3d7511de4a0 --- /dev/null +++ b/sale_order_amount_to_invoice/views/sale_order_view.xml @@ -0,0 +1,60 @@ + + + + sale.order.form + sale.order + + 99 + + + + + + + + + + + sale.order.tree + sale.order + + + + + + + + + sale.order.tree + sale.order + + + + + + + + From ea9723db85203032660882132acc4d4d31b8d73b Mon Sep 17 00:00:00 2001 From: dessanhemrayev Date: Mon, 5 Feb 2024 23:38:13 +0300 Subject: [PATCH 2/5] [IMP] sale_order_amount_to_invoice: updated logic for calculating the amount --- sale_order_amount_to_invoice/README.rst | 2 +- .../i18n/sale_order_amount_to_invoice.pot | 31 +++++++++++++++++++ .../models/sale_order.py | 15 ++++++--- .../static/description/index.html | 2 +- 4 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 sale_order_amount_to_invoice/i18n/sale_order_amount_to_invoice.pot diff --git a/sale_order_amount_to_invoice/README.rst b/sale_order_amount_to_invoice/README.rst index 0faf904f3e4..03d16140db6 100644 --- a/sale_order_amount_to_invoice/README.rst +++ b/sale_order_amount_to_invoice/README.rst @@ -7,7 +7,7 @@ Sale Order Amount to Invoice !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8b39bbad0d45ed842c5f456334e4d80b130204436295875e73bc4ca4cdd54017 + !! source digest: sha256:b128ace1032969d89528228d1287a949929314a5d2a9a59d95e12b7f5dd8e76c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/sale_order_amount_to_invoice/i18n/sale_order_amount_to_invoice.pot b/sale_order_amount_to_invoice/i18n/sale_order_amount_to_invoice.pot new file mode 100644 index 00000000000..ff0e6e955b0 --- /dev/null +++ b/sale_order_amount_to_invoice/i18n/sale_order_amount_to_invoice.pot @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_amount_to_invoice +# +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: sale_order_amount_to_invoice +#: model:ir.model,name:sale_order_amount_to_invoice.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_order_amount_to_invoice +#: model_terms:ir.ui.view,arch_db:sale_order_amount_to_invoice.view_order_form +#: model_terms:ir.ui.view,arch_db:sale_order_amount_to_invoice.view_order_tree +#: model_terms:ir.ui.view,arch_db:sale_order_amount_to_invoice.view_quotation_tree +msgid "To Invoice" +msgstr "" + +#. module: sale_order_amount_to_invoice +#: model:ir.model.fields,field_description:sale_order_amount_to_invoice.field_sale_order__untaxed_amount_to_invoice +msgid "Untaxed Amount To Invoice" +msgstr "" diff --git a/sale_order_amount_to_invoice/models/sale_order.py b/sale_order_amount_to_invoice/models/sale_order.py index 9b8acd24564..5927978a3cb 100644 --- a/sale_order_amount_to_invoice/models/sale_order.py +++ b/sale_order_amount_to_invoice/models/sale_order.py @@ -13,7 +13,14 @@ class SaleOrder(models.Model): @api.depends("order_line.untaxed_amount_to_invoice") def _compute_untaxed_amount_to_invoice(self): - for rec in self: - rec.untaxed_amount_to_invoice = sum( - rec.order_line.mapped("untaxed_amount_to_invoice") - ) + """Compute the total invoice amount for each sales order.""" + result = self.env["sale.order.line"].read_group( + [("order_id", "in", self.ids)], + ["untaxed_amount_to_invoice:sum", "order_id"], + ["order_id"], + ) + amounts = { + item["order_id"][0]: item["untaxed_amount_to_invoice"] for item in result + } + for order in self: + order.untaxed_amount_to_invoice = amounts.get(order.id, 0) diff --git a/sale_order_amount_to_invoice/static/description/index.html b/sale_order_amount_to_invoice/static/description/index.html index b2ab1291cbd..15d0181fd4c 100644 --- a/sale_order_amount_to_invoice/static/description/index.html +++ b/sale_order_amount_to_invoice/static/description/index.html @@ -366,7 +366,7 @@

Sale Order Amount to Invoice

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:8b39bbad0d45ed842c5f456334e4d80b130204436295875e73bc4ca4cdd54017 +!! source digest: sha256:b128ace1032969d89528228d1287a949929314a5d2a9a59d95e12b7f5dd8e76c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module adds “Amount to Invoice” for quotations/sales orders. It is From cc9648e3f08a622b7cc476d5d25ebc1ff1a9e813 Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Mon, 12 Feb 2024 08:49:40 +0000 Subject: [PATCH 3/5] Added translation using Weblate (Italian) --- sale_order_amount_to_invoice/i18n/it.po | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 sale_order_amount_to_invoice/i18n/it.po diff --git a/sale_order_amount_to_invoice/i18n/it.po b/sale_order_amount_to_invoice/i18n/it.po new file mode 100644 index 00000000000..d4df930dd64 --- /dev/null +++ b/sale_order_amount_to_invoice/i18n/it.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_amount_to_invoice +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-08-27 11:25+0000\n" +"Last-Translator: Francesco Foresti \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.10.4\n" + +#. module: sale_order_amount_to_invoice +#: model:ir.model,name:sale_order_amount_to_invoice.model_sale_order +msgid "Sales Order" +msgstr "Ordine di vendita" + +#. module: sale_order_amount_to_invoice +#: model_terms:ir.ui.view,arch_db:sale_order_amount_to_invoice.view_order_form +#: model_terms:ir.ui.view,arch_db:sale_order_amount_to_invoice.view_order_tree +#: model_terms:ir.ui.view,arch_db:sale_order_amount_to_invoice.view_quotation_tree +msgid "To Invoice" +msgstr "Da fatturare" + +#. module: sale_order_amount_to_invoice +#: model:ir.model.fields,field_description:sale_order_amount_to_invoice.field_sale_order__untaxed_amount_to_invoice +msgid "Untaxed Amount To Invoice" +msgstr "Importo imponibile da fatturare" From 3815ef9d7b5e563f67794bb14138c04f24855512 Mon Sep 17 00:00:00 2001 From: Guy Nijs Date: Mon, 6 Oct 2025 10:39:42 +0200 Subject: [PATCH 4/5] [IMP] sale_order_amount_to_invoice: pre-commit stuff --- sale_order_amount_to_invoice/pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sale_order_amount_to_invoice/pyproject.toml diff --git a/sale_order_amount_to_invoice/pyproject.toml b/sale_order_amount_to_invoice/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/sale_order_amount_to_invoice/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" From cfb8ef76c7338c7da769cf372189f34fe803ea4a Mon Sep 17 00:00:00 2001 From: Guy Nijs Date: Mon, 6 Oct 2025 10:42:27 +0200 Subject: [PATCH 5/5] [MIG] sale_order_amount_to_invoice: Migration to 17.0 --- sale_order_amount_to_invoice/README.rst | 10 +++++----- sale_order_amount_to_invoice/__manifest__.py | 2 +- .../static/description/index.html | 17 ++++++++++------- .../views/sale_order_view.xml | 6 +++--- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/sale_order_amount_to_invoice/README.rst b/sale_order_amount_to_invoice/README.rst index 03d16140db6..b11e38024cc 100644 --- a/sale_order_amount_to_invoice/README.rst +++ b/sale_order_amount_to_invoice/README.rst @@ -17,13 +17,13 @@ Sale Order Amount to Invoice :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github - :target: https://github.com/OCA/sale-workflow/tree/16.0/sale_order_amount_to_invoice + :target: https://github.com/OCA/sale-workflow/tree/17.0/sale_order_amount_to_invoice :alt: OCA/sale-workflow .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_order_amount_to_invoice + :target: https://translation.odoo-community.org/projects/sale-workflow-17-0/sale-workflow-17-0-sale_order_amount_to_invoice :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/sale-workflow&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -66,7 +66,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. @@ -99,6 +99,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/sale-workflow `_ project on GitHub. +This module is part of the `OCA/sale-workflow `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_order_amount_to_invoice/__manifest__.py b/sale_order_amount_to_invoice/__manifest__.py index ead2f26b990..e268ccfe043 100644 --- a/sale_order_amount_to_invoice/__manifest__.py +++ b/sale_order_amount_to_invoice/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale Order Amount to Invoice", - "version": "16.0.1.0.0", + "version": "17.0.1.0.0", "author": "Cetmix, Odoo Community Association (OCA)", "website": "https://github.com/OCA/sale-workflow", "category": "Sales", diff --git a/sale_order_amount_to_invoice/static/description/index.html b/sale_order_amount_to_invoice/static/description/index.html index 15d0181fd4c..271b95c724a 100644 --- a/sale_order_amount_to_invoice/static/description/index.html +++ b/sale_order_amount_to_invoice/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,7 +369,7 @@

Sale Order Amount to Invoice

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:b128ace1032969d89528228d1287a949929314a5d2a9a59d95e12b7f5dd8e76c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module adds “Amount to Invoice” for quotations/sales orders. It is displayed:

    @@ -413,7 +414,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.

    @@ -437,11 +438,13 @@

    Contributors

    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.

    -

    This module is part of the OCA/sale-workflow project on GitHub.

    +

    This module is part of the OCA/sale-workflow project on GitHub.

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

    diff --git a/sale_order_amount_to_invoice/views/sale_order_view.xml b/sale_order_amount_to_invoice/views/sale_order_view.xml index 3d7511de4a0..6875a1f5bfb 100644 --- a/sale_order_amount_to_invoice/views/sale_order_view.xml +++ b/sale_order_amount_to_invoice/views/sale_order_view.xml @@ -20,7 +20,7 @@ @@ -34,9 +34,9 @@ @@ -50,9 +50,9 @@