diff --git a/README.md b/README.md index cead0e1e157..9593e9a13b9 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ addon | version | maintainers | summary [sale_invoice_blocking](sale_invoice_blocking/) | 16.0.1.0.1 | | Allow you to block the creation of invoices from a sale order. [sale_invoice_frequency](sale_invoice_frequency/) | 16.0.1.2.1 | Shide yajo EmilioPascual | Define the invoice frequency for customers [sale_invoice_plan](sale_invoice_plan/) | 16.0.1.0.0 | kittiu | Add to sales order, ability to manage future invoice plan -[sale_invoice_policy](sale_invoice_policy/) | 16.0.3.0.0 | | Sales Management: let the user choose the invoice policy on the order +[sale_invoice_policy](sale_invoice_policy/) | 16.0.2.0.0 | | Sales Management: let the user choose the invoice policy on the order [sale_invoice_split_payment](sale_invoice_split_payment/) | 16.0.1.0.0 | | Split by payment term generated invoices from sale orders [sale_last_price_info](sale_last_price_info/) | 16.0.1.0.0 | | Product Last Price Info - Sale [sale_loyalty_exclude](sale_loyalty_exclude/) | 16.0.1.1.0 | | Exclude products from sale loyalty program diff --git a/requirements.txt b/requirements.txt index 180fc49789b..9cd1629223b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ # generated from manifests external_dependencies -openupgradelib diff --git a/sale_invoice_policy/README.rst b/sale_invoice_policy/README.rst index bf935547357..282b8ad535c 100644 --- a/sale_invoice_policy/README.rst +++ b/sale_invoice_policy/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - =================== Sale invoice Policy =================== @@ -11,13 +7,13 @@ Sale invoice Policy !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:cc274081b5e134e2166c780e74e08a4f4433eea4649c258bc78e7899c0f4614c + !! source digest: sha256:c97ec053f6a06fcb824861d16be9e31cc8a53549f47a0f38b6f54f534d09138b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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/license-AGPL--3-blue.png +.. |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 @@ -32,58 +28,21 @@ Sale invoice Policy |badge1| |badge2| |badge3| |badge4| |badge5| -This module adds an invoicing policy on sale order level in order to -apply that invoicing policy on the whole sale order. - -That invoicing policy can take three values: - -- Products Invoicing Policy: The sale order will follow the standard - behavior and apply the policy depending on products configurations. -- Ordered Quantities: The sale order will invoice the ordered quantities. -- Delivered Quantities: The sale order will invoice the delivered quantities. - -Following the chosen policy, the quantity to invoice and the -amount to invoice on each line will be computed accordingly. -Note that the sale order policy will affect only storable products. - -You will be able also to define a default invoicing policy -(globally per company) -that can be different than the default invoicing policy for new products. +This modules helps to get Invoicing Policy on Sale Order Level without +breaking behaviour (as it is defined from >= v10 on product level). **Table of contents** .. contents:: :local: -Use Cases / Context -=================== - -In Odoo, products have their own invoicing policy that can be: - -- Invoicing on ordered quantities -- Invoicing on ordered quantities - -Following that configuration, when trying to create invoices from -sale orders, each line of product will apply its invoicing policy. - -In some cases, user needs to apply an invoicing policy on a whole -sale order. - -The solution proposed here is to add an invoicing policy on -sale order level. - -Configuration -============= - -* Go to Sale > Configuration > Settings > Sale Invoice Policy -* Choose the one that fits your needs. - Usage ===== * Create Sale Order -* Select Invoicing Policy on Sale Order or let it on Products Invoicing Policy -* The created invoices will use the configuration on sale order. +* Select Invoicing Policy on Sale Order or let it void +* Either the policy selected on Sale Order would be used, either if not + filled in, the policy would be chosen from product configuration Bug Tracker =========== @@ -113,7 +72,6 @@ Contributors * Luis J. Salvatierra * Alejandro Ji Cheung * Ioan Galan -* Laurent Mignon Maintainers ~~~~~~~~~~~ diff --git a/sale_invoice_policy/__init__.py b/sale_invoice_policy/__init__.py index 548c73eb1a1..0650744f6bc 100644 --- a/sale_invoice_policy/__init__.py +++ b/sale_invoice_policy/__init__.py @@ -1,2 +1 @@ -from .hooks import pre_init_hook from . import models diff --git a/sale_invoice_policy/__manifest__.py b/sale_invoice_policy/__manifest__.py index b7eafc11c1c..28247ed01c9 100644 --- a/sale_invoice_policy/__manifest__.py +++ b/sale_invoice_policy/__manifest__.py @@ -8,13 +8,11 @@ "author": "ACSONE SA/NV, Odoo Community Association (OCA)", "website": "https://github.com/OCA/sale-workflow", "category": "Sales Management", - "version": "16.0.3.0.0", + "version": "16.0.2.0.0", "license": "AGPL-3", - "depends": ["sale_stock", "base_partition"], - "external_dependencies": {"python": ["openupgradelib"]}, + "depends": ["sale_stock"], "data": [ "views/res_config_settings_view.xml", "views/sale_view.xml", ], - "pre_init_hook": "pre_init_hook", } diff --git a/sale_invoice_policy/hooks.py b/sale_invoice_policy/hooks.py deleted file mode 100644 index 320fcc6d816..00000000000 --- a/sale_invoice_policy/hooks.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2024 ACSONE SA/NV () -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from openupgradelib import openupgrade - -from odoo.api import SUPERUSER_ID, Environment - - -def pre_init_hook(cr): - """ - Create the sale order invoice policy with the "product" policy (standard) - but with a postgres query to avoid an update on all sale order records - """ - env = Environment(cr, SUPERUSER_ID, {}) - field_spec = [ - ( - "invoice_policy", - "sale.order", - False, - "selection", - False, - "sale_invoice_policy", - "product", - ) - ] - openupgrade.add_fields(env, field_spec=field_spec) diff --git a/sale_invoice_policy/i18n/ca.po b/sale_invoice_policy/i18n/ca.po index 9df9088384b..5ed6cb86196 100644 --- a/sale_invoice_policy/i18n/ca.po +++ b/sale_invoice_policy/i18n/ca.po @@ -16,25 +16,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.10\n" -#. module: sale_invoice_policy -#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config -msgid "" -"Choose the default policy that will be applied for new sale orders " -"(the 'Invoicing Policy' configuration is the policy for new products)." -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model,name:sale_invoice_policy.model_res_company -msgid "Companies" -msgstr "" - #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_res_config_settings msgid "Config Settings" msgstr "Configuració" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__delivery #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__delivery msgid "Delivered quantities" msgstr "Quantitats entregades" @@ -44,37 +31,42 @@ msgstr "Quantitats entregades" msgid "Invoice Policy" msgstr "Política de Facturació" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_sale_order__invoice_policy_required +msgid "Invoice Policy Required" +msgstr "Política de Facturació" + +#. module: sale_invoice_policy +#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config +msgid "Invoice Policy required in Sale Orders" +msgstr "Política de Facturació" + #. module: sale_invoice_policy #: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy msgid "" "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -"(time or deliveries). This applies for storable products only." +"(time or deliveries)." msgstr "" +"Quantitat demanada: Factura basada en la quantitat demanada pel client.\n" +"Quantitat entregada: Factura basada en funció de la quantitat entregada pel " +"proveïdor ( temps o entregues)." #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__order #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order msgid "Ordered quantities" msgstr "Quantitats Demanades" -#. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__product -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__product -msgid "Products Invoice Policy" -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "Sale Default Invoice Policy" -msgstr "" - #. module: sale_invoice_policy #: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config msgid "Sale Invoice Policy" msgstr "" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "Sale Invoice Policy Required" +msgstr "Política de Facturació" + #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_sale_order msgid "Sales Order" @@ -86,31 +78,9 @@ msgid "Sales Order Line" msgstr "Línia de comanda de venda" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "This will be the default invoice policy for sale orders." -msgstr "" - -#~ msgid "Invoice Policy Required" -#~ msgstr "Política de Facturació" - -#~ msgid "Invoice Policy required in Sale Orders" -#~ msgstr "Política de Facturació" - -#~ msgid "" -#~ "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -#~ "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -#~ "(time or deliveries)." -#~ msgstr "" -#~ "Quantitat demanada: Factura basada en la quantitat demanada pel client.\n" -#~ "Quantitat entregada: Factura basada en funció de la quantitat entregada " -#~ "pel proveïdor ( temps o entregues)." - -#~ msgid "Sale Invoice Policy Required" -#~ msgstr "Política de Facturació" - -#~ msgid "This makes Invoice Policy required on Sale Orders" -#~ msgstr "La política de facturació és necessària a les comandes de venda" +#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "This makes Invoice Policy required on Sale Orders" +msgstr "La política de facturació és necessària a les comandes de venda" #~ msgid "Default Invoicing Policy" #~ msgstr "Política de Facturació" diff --git a/sale_invoice_policy/i18n/es.po b/sale_invoice_policy/i18n/es.po index e981c7956f6..56a30cb9c5e 100644 --- a/sale_invoice_policy/i18n/es.po +++ b/sale_invoice_policy/i18n/es.po @@ -16,25 +16,12 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: sale_invoice_policy -#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config -msgid "" -"Choose the default policy that will be applied for new sale orders " -"(the 'Invoicing Policy' configuration is the policy for new products)." -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model,name:sale_invoice_policy.model_res_company -msgid "Companies" -msgstr "" - #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_res_config_settings msgid "Config Settings" msgstr "Opciones de configuración" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__delivery #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__delivery msgid "Delivered quantities" msgstr "Cantidades entregadas" @@ -44,37 +31,42 @@ msgstr "Cantidades entregadas" msgid "Invoice Policy" msgstr "Política de facturación" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_sale_order__invoice_policy_required +msgid "Invoice Policy Required" +msgstr "Política de facturación requerida" + +#. module: sale_invoice_policy +#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config +msgid "Invoice Policy required in Sale Orders" +msgstr "Política de facturación requerida en pedidos de venta" + #. module: sale_invoice_policy #: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy msgid "" "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -"(time or deliveries). This applies for storable products only." +"(time or deliveries)." msgstr "" +"Cantidad pedida: facturada en función de la cantidad pedida por el cliente.\n" +"Cantidad entregada: facturada en función de la cantidad entregada por el " +"proveedor (tiempo o entregas)." #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__order #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order msgid "Ordered quantities" msgstr "Cantidades pedidas" -#. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__product -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__product -msgid "Products Invoice Policy" -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "Sale Default Invoice Policy" -msgstr "" - #. module: sale_invoice_policy #: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config msgid "Sale Invoice Policy" msgstr "Política de facturación para ventas" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "Sale Invoice Policy Required" +msgstr "Política de facturación requerida para ventas" + #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_sale_order msgid "Sales Order" @@ -86,33 +78,9 @@ msgid "Sales Order Line" msgstr "Línea de pedido de venta" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "This will be the default invoice policy for sale orders." -msgstr "" - -#~ msgid "Invoice Policy Required" -#~ msgstr "Política de facturación requerida" - -#~ msgid "Invoice Policy required in Sale Orders" -#~ msgstr "Política de facturación requerida en pedidos de venta" - -#~ msgid "" -#~ "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -#~ "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -#~ "(time or deliveries)." -#~ msgstr "" -#~ "Cantidad pedida: facturada en función de la cantidad pedida por el " -#~ "cliente.\n" -#~ "Cantidad entregada: facturada en función de la cantidad entregada por el " -#~ "proveedor (tiempo o entregas)." - -#~ msgid "Sale Invoice Policy Required" -#~ msgstr "Política de facturación requerida para ventas" - -#~ msgid "This makes Invoice Policy required on Sale Orders" -#~ msgstr "" -#~ "Hace que la política de facturación sea requerida en pedidos de venta" +#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "This makes Invoice Policy required on Sale Orders" +msgstr "Hace que la política de facturación sea requerida en pedidos de venta" #~ msgid "Default Invoicing Policy" #~ msgstr "Política de facturación por defecto" diff --git a/sale_invoice_policy/i18n/es_MX.po b/sale_invoice_policy/i18n/es_MX.po index 5840abbcd0c..41716af6f25 100644 --- a/sale_invoice_policy/i18n/es_MX.po +++ b/sale_invoice_policy/i18n/es_MX.po @@ -16,25 +16,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.2\n" -#. module: sale_invoice_policy -#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config -msgid "" -"Choose the default policy that will be applied for new sale orders " -"(the 'Invoicing Policy' configuration is the policy for new products)." -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model,name:sale_invoice_policy.model_res_company -msgid "Companies" -msgstr "" - #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_res_config_settings msgid "Config Settings" msgstr "Configuración" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__delivery #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__delivery msgid "Delivered quantities" msgstr "Cantidades entregadas" @@ -44,37 +31,42 @@ msgstr "Cantidades entregadas" msgid "Invoice Policy" msgstr "Política de Facturación" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_sale_order__invoice_policy_required +msgid "Invoice Policy Required" +msgstr "Política de facturación requerida" + +#. module: sale_invoice_policy +#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config +msgid "Invoice Policy required in Sale Orders" +msgstr "Política de facturas requerida en órdenes de venta" + #. module: sale_invoice_policy #: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy msgid "" "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -"(time or deliveries). This applies for storable products only." +"(time or deliveries)." msgstr "" +"Cantidad pedida: Factura basada en la cantidad solicitada por el cliente.\n" +"Cantidad entregada: Facturada en base a la cantidad entregada por el " +"proveedor (tiempo o entregas)." #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__order #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order msgid "Ordered quantities" msgstr "Cantidades ordenadas" -#. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__product -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__product -msgid "Products Invoice Policy" -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "Sale Default Invoice Policy" -msgstr "" - #. module: sale_invoice_policy #: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config msgid "Sale Invoice Policy" msgstr "" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "Sale Invoice Policy Required" +msgstr "Política de facturación en ventas requerido" + #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_sale_order msgid "Sales Order" @@ -86,34 +78,10 @@ msgid "Sales Order Line" msgstr "Línea de Pedido de Venta" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "This will be the default invoice policy for sale orders." +#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "This makes Invoice Policy required on Sale Orders" msgstr "" - -#~ msgid "Invoice Policy Required" -#~ msgstr "Política de facturación requerida" - -#~ msgid "Invoice Policy required in Sale Orders" -#~ msgstr "Política de facturas requerida en órdenes de venta" - -#~ msgid "" -#~ "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -#~ "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -#~ "(time or deliveries)." -#~ msgstr "" -#~ "Cantidad pedida: Factura basada en la cantidad solicitada por el " -#~ "cliente.\n" -#~ "Cantidad entregada: Facturada en base a la cantidad entregada por el " -#~ "proveedor (tiempo o entregas)." - -#~ msgid "Sale Invoice Policy Required" -#~ msgstr "Política de facturación en ventas requerido" - -#~ msgid "This makes Invoice Policy required on Sale Orders" -#~ msgstr "" -#~ "Esto hace que la política de facturas sea obligatoria en los pedidos de " -#~ "venta" +"Esto hace que la política de facturas sea obligatoria en los pedidos de venta" #~ msgid "Default Invoicing Policy" #~ msgstr "Política de Facturación por Defecto" diff --git a/sale_invoice_policy/i18n/fr.po b/sale_invoice_policy/i18n/fr.po index 5e894318521..de4fccd3454 100644 --- a/sale_invoice_policy/i18n/fr.po +++ b/sale_invoice_policy/i18n/fr.po @@ -17,25 +17,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 3.10\n" -#. module: sale_invoice_policy -#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config -msgid "" -"Choose the default policy that will be applied for new sale orders " -"(the 'Invoicing Policy' configuration is the policy for new products)." -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model,name:sale_invoice_policy.model_res_company -msgid "Companies" -msgstr "" - #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_res_config_settings msgid "Config Settings" msgstr "Paramètres de configuration" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__delivery #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__delivery msgid "Delivered quantities" msgstr "Quantités Livrées" @@ -45,37 +32,43 @@ msgstr "Quantités Livrées" msgid "Invoice Policy" msgstr "Politique de facturation" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_sale_order__invoice_policy_required +msgid "Invoice Policy Required" +msgstr "Politique de facturation requise" + +#. module: sale_invoice_policy +#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config +msgid "Invoice Policy required in Sale Orders" +msgstr "Politique de facturation requise dans les commandes de vente" + #. module: sale_invoice_policy #: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy msgid "" "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -"(time or deliveries). This applies for storable products only." +"(time or deliveries)." msgstr "" +"Quantités commandées : facturation basée sur les quantités commandées par le " +"client.\n" +"Quantités livrées : facturation basée sur les quantités que le fournisseur a " +"livré (temps passé dans le cas de prestations)." #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__order #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order msgid "Ordered quantities" msgstr "Quantités Commandées" -#. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__product -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__product -msgid "Products Invoice Policy" -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "Sale Default Invoice Policy" -msgstr "" - #. module: sale_invoice_policy #: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config msgid "Sale Invoice Policy" msgstr "" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "Sale Invoice Policy Required" +msgstr "Politique de facturation des ventes requise" + #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_sale_order msgid "Sales Order" @@ -87,32 +80,9 @@ msgid "Sales Order Line" msgstr "Ligne de bon de commande" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "This will be the default invoice policy for sale orders." -msgstr "" - -#~ msgid "Invoice Policy Required" -#~ msgstr "Politique de facturation requise" - -#~ msgid "Invoice Policy required in Sale Orders" -#~ msgstr "Politique de facturation requise dans les commandes de vente" - -#~ msgid "" -#~ "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -#~ "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -#~ "(time or deliveries)." -#~ msgstr "" -#~ "Quantités commandées : facturation basée sur les quantités commandées par " -#~ "le client.\n" -#~ "Quantités livrées : facturation basée sur les quantités que le " -#~ "fournisseur a livré (temps passé dans le cas de prestations)." - -#~ msgid "Sale Invoice Policy Required" -#~ msgstr "Politique de facturation des ventes requise" - -#~ msgid "This makes Invoice Policy required on Sale Orders" -#~ msgstr "La politique de facturation est requise sur les bons de commandes" +#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "This makes Invoice Policy required on Sale Orders" +msgstr "La politique de facturation est requise sur les bons de commandes" #~ msgid "Default Invoicing Policy" #~ msgstr "Politique de facturation par défaut" diff --git a/sale_invoice_policy/i18n/hr.po b/sale_invoice_policy/i18n/hr.po index df91f82b28c..bd53e828229 100644 --- a/sale_invoice_policy/i18n/hr.po +++ b/sale_invoice_policy/i18n/hr.po @@ -17,25 +17,12 @@ msgstr "" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 5.6.2\n" -#. module: sale_invoice_policy -#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config -msgid "" -"Choose the default policy that will be applied for new sale orders " -"(the 'Invoicing Policy' configuration is the policy for new products)." -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model,name:sale_invoice_policy.model_res_company -msgid "Companies" -msgstr "" - #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_res_config_settings msgid "Config Settings" msgstr "Postavke" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__delivery #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__delivery msgid "Delivered quantities" msgstr "Isporučene količine" @@ -45,37 +32,42 @@ msgstr "Isporučene količine" msgid "Invoice Policy" msgstr "Politika izdavanja računa" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_sale_order__invoice_policy_required +msgid "Invoice Policy Required" +msgstr "Obavezna politika izdavanja računa" + +#. module: sale_invoice_policy +#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config +msgid "Invoice Policy required in Sale Orders" +msgstr "Politika izdavanja računa obavezna u prodajnim nalozima" + #. module: sale_invoice_policy #: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy msgid "" "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -"Delivered Quantity: Invoiced based on the quantity the vendor delivered " -"(time or deliveries). This applies for storable products only." +"Delivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries)." msgstr "" +"Naručena količina: Račun se izdaje na temelju količine koju je kupac naručio." +"\n" +"Isporučena količina: Račun se izdaje na temelju količine koju je dobavljač " +"isporučio (vrijeme ili isporuke)." #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__order #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order msgid "Ordered quantities" msgstr "Naručene količine" -#. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__product -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__product -msgid "Products Invoice Policy" -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "Sale Default Invoice Policy" -msgstr "" - #. module: sale_invoice_policy #: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config msgid "Sale Invoice Policy" msgstr "Politika izdavanja računa" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "Sale Invoice Policy Required" +msgstr "Obavezna politika izdavanja računa" + #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_sale_order msgid "Sales Order" @@ -87,29 +79,6 @@ msgid "Sales Order Line" msgstr "Stavka prodajnog naloga" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "This will be the default invoice policy for sale orders." -msgstr "" - -#~ msgid "Invoice Policy Required" -#~ msgstr "Obavezna politika izdavanja računa" - -#~ msgid "Invoice Policy required in Sale Orders" -#~ msgstr "Politika izdavanja računa obavezna u prodajnim nalozima" - -#~ msgid "" -#~ "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -#~ "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -#~ "(time or deliveries)." -#~ msgstr "" -#~ "Naručena količina: Račun se izdaje na temelju količine koju je kupac " -#~ "naručio.\n" -#~ "Isporučena količina: Račun se izdaje na temelju količine koju je " -#~ "dobavljač isporučio (vrijeme ili isporuke)." - -#~ msgid "Sale Invoice Policy Required" -#~ msgstr "Obavezna politika izdavanja računa" - -#~ msgid "This makes Invoice Policy required on Sale Orders" -#~ msgstr "Ovo čini politiku izdavanja računa obaveznom na prodajnim nalozima" +#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "This makes Invoice Policy required on Sale Orders" +msgstr "Ovo čini politiku izdavanja računa obaveznom na prodajnim nalozima" diff --git a/sale_invoice_policy/i18n/it.po b/sale_invoice_policy/i18n/it.po index 0bb127b4124..5eec55cb100 100644 --- a/sale_invoice_policy/i18n/it.po +++ b/sale_invoice_policy/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-03-23 10:45+0000\n" +"PO-Revision-Date: 2023-12-13 12:34+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -14,22 +14,7 @@ msgstr "" "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: sale_invoice_policy -#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config -msgid "" -"Choose the default policy that will be applied for new sale orders " -"(the 'Invoicing Policy' configuration is the policy for new products)." -msgstr "" -"Scegliere la politica predefinita che verrà applicata ai nuovi ordini " -"di vendita (la configurazione 'Politica di fatturazione' è la politica per i " -"nuovi prodotti)." - -#. module: sale_invoice_policy -#: model:ir.model,name:sale_invoice_policy.model_res_company -msgid "Companies" -msgstr "Aziende" +"X-Generator: Weblate 4.17\n" #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_res_config_settings @@ -37,7 +22,6 @@ msgid "Config Settings" msgstr "Impostazioni configurazione" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__delivery #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__delivery msgid "Delivered quantities" msgstr "Quantità consegnate" @@ -47,41 +31,41 @@ msgstr "Quantità consegnate" msgid "Invoice Policy" msgstr "Politica fatturazione" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_sale_order__invoice_policy_required +msgid "Invoice Policy Required" +msgstr "Richiesta politica fatturazione" + +#. module: sale_invoice_policy +#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config +msgid "Invoice Policy required in Sale Orders" +msgstr "Politica fatturazione richiesta negli ordini di vendita" + #. module: sale_invoice_policy #: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy msgid "" "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -"(time or deliveries). This applies for storable products only." +"(time or deliveries)." msgstr "" -"Quantità ordinata: fattura calcolata in base alla quantità ordinata dal " -"cliente.\n" -"Quantità consegnata: fattura calcolata in base alla quantità effettivamente " -"consegnata dal fornitore (in base al numero di consegne). Questa modalità si " -"applica solo ai prodotti immagazzinabili." +"Quantità ordinate: fattura basata sulle quantità ordinate dal cliente.\n" +"Quantità consegnate: fattura basata sulle quantità consegnate da fornitore " +"(tempo o consegne)." #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__order #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order msgid "Ordered quantities" msgstr "Quantità ordinate" -#. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__product -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__product -msgid "Products Invoice Policy" -msgstr "Politica fatturazione prodotti" - -#. module: sale_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "Sale Default Invoice Policy" -msgstr "Politica fatturazione vendite predefinita" - #. module: sale_invoice_policy #: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config msgid "Sale Invoice Policy" -msgstr "Politica fatturazione vendite" +msgstr "Plitica fatturazione vendite" + +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "Sale Invoice Policy Required" +msgstr "Richiesta politica fatturazione vendite" #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_sale_order @@ -94,35 +78,10 @@ msgid "Sales Order Line" msgstr "Riga ordine di vendita" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "This will be the default invoice policy for sale orders." +#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "This makes Invoice Policy required on Sale Orders" msgstr "" -"Questa sarà la politica di fatturazione predefinita per gli ordini di " -"vendita." - -#~ msgid "Invoice Policy Required" -#~ msgstr "Richiesta politica fatturazione" - -#~ msgid "Invoice Policy required in Sale Orders" -#~ msgstr "Politica fatturazione richiesta negli ordini di vendita" - -#~ msgid "" -#~ "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -#~ "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -#~ "(time or deliveries)." -#~ msgstr "" -#~ "Quantità ordinate: fattura basata sulle quantità ordinate dal cliente.\n" -#~ "Quantità consegnate: fattura basata sulle quantità consegnate da " -#~ "fornitore (tempo o consegne)." - -#~ msgid "Sale Invoice Policy Required" -#~ msgstr "Richiesta politica fatturazione vendite" - -#~ msgid "This makes Invoice Policy required on Sale Orders" -#~ msgstr "" -#~ "Questo rende obbligatoria la politica di fatturazione negli ordini di " -#~ "vendita" +"Questo rende obbligatoria la politica di fatturazione negli ordini di vendita" #~ msgid "Default Invoicing Policy" #~ msgstr "Politica fatturazione predefinita" diff --git a/sale_invoice_policy/i18n/pt.po b/sale_invoice_policy/i18n/pt.po index e117d0bf46a..f09e8e5fb98 100644 --- a/sale_invoice_policy/i18n/pt.po +++ b/sale_invoice_policy/i18n/pt.po @@ -16,25 +16,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 3.10\n" -#. module: sale_invoice_policy -#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config -msgid "" -"Choose the default policy that will be applied for new sale orders " -"(the 'Invoicing Policy' configuration is the policy for new products)." -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model,name:sale_invoice_policy.model_res_company -msgid "Companies" -msgstr "" - #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_res_config_settings msgid "Config Settings" msgstr "Parâmetros de Configuração" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__delivery #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__delivery msgid "Delivered quantities" msgstr "Quantidades entregues" @@ -44,37 +31,43 @@ msgstr "Quantidades entregues" msgid "Invoice Policy" msgstr "Política de Faturação" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_sale_order__invoice_policy_required +msgid "Invoice Policy Required" +msgstr "Política de Faturação Requerida" + +#. module: sale_invoice_policy +#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config +msgid "Invoice Policy required in Sale Orders" +msgstr "Política de Faturação requerida em Encomendas de Venda" + #. module: sale_invoice_policy #: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy msgid "" "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -"(time or deliveries). This applies for storable products only." +"(time or deliveries)." msgstr "" +"Quantidade Encomendada: Faturar com base na quantidade que o cliente " +"encomendou.\n" +"Quantidade Entregue: Faturar tendo em conta a quantidade que o cliente " +"recebeu (tempo ou materiais)." #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__order #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order msgid "Ordered quantities" msgstr "Quantidades encomendadas" -#. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__product -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__product -msgid "Products Invoice Policy" -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "Sale Default Invoice Policy" -msgstr "" - #. module: sale_invoice_policy #: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config msgid "Sale Invoice Policy" msgstr "" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "Sale Invoice Policy Required" +msgstr "Política de Faturação de Vendas Requerida" + #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_sale_order msgid "Sales Order" @@ -86,34 +79,11 @@ msgid "Sales Order Line" msgstr "Linha de Encomenda de Venda" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "This will be the default invoice policy for sale orders." +#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "This makes Invoice Policy required on Sale Orders" msgstr "" - -#~ msgid "Invoice Policy Required" -#~ msgstr "Política de Faturação Requerida" - -#~ msgid "Invoice Policy required in Sale Orders" -#~ msgstr "Política de Faturação requerida em Encomendas de Venda" - -#~ msgid "" -#~ "Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -#~ "Delivered Quantity: Invoiced based on the quantity the vendor delivered " -#~ "(time or deliveries)." -#~ msgstr "" -#~ "Quantidade Encomendada: Faturar com base na quantidade que o cliente " -#~ "encomendou.\n" -#~ "Quantidade Entregue: Faturar tendo em conta a quantidade que o cliente " -#~ "recebeu (tempo ou materiais)." - -#~ msgid "Sale Invoice Policy Required" -#~ msgstr "Política de Faturação de Vendas Requerida" - -#~ msgid "This makes Invoice Policy required on Sale Orders" -#~ msgstr "" -#~ "Isto faz com que a Política de Faturação seja requerida em Encomendas de " -#~ "Venda" +"Isto faz com que a Política de Faturação seja requerida em Encomendas de " +"Venda" #~ msgid "Default Invoicing Policy" #~ msgstr "Política de Faturação Predefinida" diff --git a/sale_invoice_policy/i18n/sale_invoice_policy.pot b/sale_invoice_policy/i18n/sale_invoice_policy.pot index 31ba0a21d39..69e09897ae7 100644 --- a/sale_invoice_policy/i18n/sale_invoice_policy.pot +++ b/sale_invoice_policy/i18n/sale_invoice_policy.pot @@ -13,26 +13,12 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: sale_invoice_policy -#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config -msgid "" -"Choose the default policy that will be applied for new sale orders " -"(the 'Invoicing Policy' configuration is the policy for new " -"products)." -msgstr "" - -#. module: sale_invoice_policy -#: model:ir.model,name:sale_invoice_policy.model_res_company -msgid "Companies" -msgstr "" - #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_res_config_settings msgid "Config Settings" msgstr "" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__delivery #: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__delivery msgid "Delivered quantities" msgstr "" @@ -43,28 +29,25 @@ msgid "Invoice Policy" msgstr "" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy -msgid "" -"Ordered Quantity: Invoice based on the quantity the customer ordered.\n" -"Delivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries). This applies for storable products only." +#: model:ir.model.fields,field_description:sale_invoice_policy.field_sale_order__invoice_policy_required +msgid "Invoice Policy Required" msgstr "" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__order -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order -msgid "Ordered quantities" +#: model_terms:ir.ui.view,arch_db:sale_invoice_policy.view_sales_config +msgid "Invoice Policy required in Sale Orders" msgstr "" #. module: sale_invoice_policy -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__res_company__sale_default_invoice_policy__product -#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__product -msgid "Products Invoice Policy" +#: model:ir.model.fields,help:sale_invoice_policy.field_sale_order__invoice_policy +msgid "" +"Ordered Quantity: Invoice based on the quantity the customer ordered.\n" +"Delivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries)." msgstr "" #. module: sale_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "Sale Default Invoice Policy" +#: model:ir.model.fields.selection,name:sale_invoice_policy.selection__sale_order__invoice_policy__order +msgid "Ordered quantities" msgstr "" #. module: sale_invoice_policy @@ -72,6 +55,11 @@ msgstr "" msgid "Sale Invoice Policy" msgstr "" +#. module: sale_invoice_policy +#: model:ir.model.fields,field_description:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "Sale Invoice Policy Required" +msgstr "" + #. module: sale_invoice_policy #: model:ir.model,name:sale_invoice_policy.model_sale_order msgid "Sales Order" @@ -83,7 +71,6 @@ msgid "Sales Order Line" msgstr "" #. module: sale_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_company__sale_default_invoice_policy -#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_default_invoice_policy -msgid "This will be the default invoice policy for sale orders." +#: model:ir.model.fields,help:sale_invoice_policy.field_res_config_settings__sale_invoice_policy_required +msgid "This makes Invoice Policy required on Sale Orders" msgstr "" diff --git a/sale_invoice_policy/models/__init__.py b/sale_invoice_policy/models/__init__.py index c7862adb115..db2da088832 100644 --- a/sale_invoice_policy/models/__init__.py +++ b/sale_invoice_policy/models/__init__.py @@ -1,4 +1,3 @@ from . import res_config_settings from . import sale_order from . import sale_order_line -from . import res_company diff --git a/sale_invoice_policy/models/res_company.py b/sale_invoice_policy/models/res_company.py deleted file mode 100644 index b7b6227bb85..00000000000 --- a/sale_invoice_policy/models/res_company.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2024 ACSONE SA/NV () -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). - -from odoo import fields, models - - -class ResCompany(models.Model): - - _inherit = "res.company" - - sale_default_invoice_policy = fields.Selection( - [ - ("product", "Products Invoice Policy"), - ("order", "Ordered quantities"), - ("delivery", "Delivered quantities"), - ], - default="product", - required=True, - help="This will be the default invoice policy for sale orders.", - ) diff --git a/sale_invoice_policy/models/res_config_settings.py b/sale_invoice_policy/models/res_config_settings.py index 7ba62af605c..7e5a6c9539a 100644 --- a/sale_invoice_policy/models/res_config_settings.py +++ b/sale_invoice_policy/models/res_config_settings.py @@ -1,13 +1,34 @@ # Copyright 2018 ACSONE SA/NV () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models +from odoo import api, fields, models class ResConfigSettings(models.TransientModel): _inherit = "res.config.settings" - sale_default_invoice_policy = fields.Selection( - related="company_id.sale_default_invoice_policy", - readonly=False, + sale_invoice_policy_required = fields.Boolean( + help="This makes Invoice Policy required on Sale Orders" ) + + @api.model + def get_values(self): + res = super().get_values() + res.update( + sale_invoice_policy_required=self.env["ir.default"].get( + "res.config.settings", "sale_invoice_policy_required" + ) + ) + return res + + def set_values(self): + super().set_values() + ir_default_obj = self.env["ir.default"] + if self.env["res.users"].has_group("base.group_erp_manager"): + ir_default_obj = ir_default_obj.sudo() + ir_default_obj.set( + "res.config.settings", + "sale_invoice_policy_required", + self.sale_invoice_policy_required, + ) + return True diff --git a/sale_invoice_policy/models/sale_order.py b/sale_invoice_policy/models/sale_order.py index 47d7c87f470..b9c2a5b1296 100644 --- a/sale_invoice_policy/models/sale_order.py +++ b/sale_invoice_policy/models/sale_order.py @@ -9,27 +9,41 @@ class SaleOrder(models.Model): _inherit = "sale.order" invoice_policy = fields.Selection( - [ - ("product", "Products Invoice Policy"), - ("order", "Ordered quantities"), - ("delivery", "Delivered quantities"), - ], - compute="_compute_invoice_policy", - store=True, - readonly=False, - required=True, + [("order", "Ordered quantities"), ("delivery", "Delivered quantities")], + readonly=True, states={"draft": [("readonly", False)], "sent": [("readonly", False)]}, - precompute=True, help="Ordered Quantity: Invoice based on the quantity the customer " "ordered.\n" "Delivered Quantity: Invoiced based on the quantity the vendor " - "delivered (time or deliveries). This applies for storable products only.", + "delivered (time or deliveries).", ) + invoice_policy_required = fields.Boolean( + compute="_compute_invoice_policy_required", + default=lambda self: self.env["ir.default"].get( + "res.config.settings", "sale_invoice_policy_required" + ), + ) + + @api.model + def default_get(self, fields_list): + res = super().default_get(fields_list) + default_invoice_policy = ( + self.env["res.config.settings"] + .sudo() + .default_get(["default_invoice_policy"]) + .get("default_invoice_policy", False) + ) + if "invoice_policy" not in res: + res.update({"invoice_policy": default_invoice_policy}) + return res - @api.depends("company_id") - def _compute_invoice_policy(self) -> None: - """ - Get default sale order invoice policy - """ - for company, sale_orders in self.partition("company_id").items(): - sale_orders.invoice_policy = company.sale_default_invoice_policy + @api.depends("partner_id") + def _compute_invoice_policy_required(self): + invoice_policy_required = ( + self.env["res.config.settings"] + .sudo() + .default_get(["sale_invoice_policy_required"]) + .get("sale_invoice_policy_required", False) + ) + for sale in self: + sale.invoice_policy_required = invoice_policy_required diff --git a/sale_invoice_policy/models/sale_order_line.py b/sale_invoice_policy/models/sale_order_line.py index fea12193336..b8b33124fa8 100644 --- a/sale_invoice_policy/models/sale_order_line.py +++ b/sale_invoice_policy/models/sale_order_line.py @@ -1,45 +1,23 @@ # Copyright 2017 ACSONE SA/NV () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from contextlib import contextmanager -from odoo import api, models +from odoo import api, fields, models class SaleOrderLine(models.Model): _inherit = "sale.order.line" - @contextmanager - def _sale_invoice_policy(self, lines): - """Apply the sale invoice policy to the products - - This method must be called with lines sharing the same invoice policy - """ - invoice_policy = set(lines.mapped("order_id.invoice_policy")) - if len(invoice_policy) > 1: - raise Exception( - "The method _sale_invoice_policy() must be called with lines " - "sharing the same invoice policy" - ) - invoice_policy = next(iter(invoice_policy)) - invoice_policy_field = self.env["product.product"]._fields["invoice_policy"] - products = lines.product_id - with self.env.protecting([invoice_policy_field], products): - old_values = {} - for product in products: - old_values[product] = product.invoice_policy - product.invoice_policy = invoice_policy - yield - for product, invoice_policy in old_values.items(): - product.invoice_policy = invoice_policy - - @api.depends("order_id.invoice_policy") + @api.depends( + "qty_invoiced", + "qty_delivered", + "product_uom_qty", + "state", + "order_id.invoice_policy", + ) def _compute_qty_to_invoice(self): - """ - Exclude lines that have their order invoice policy filled in - """ other_lines = self.filtered( - lambda l: l.product_id.type == "service" - or l.order_id.invoice_policy == "product" + lambda l: not l.order_id.invoice_policy + or not l.order_id.invoice_policy_required ) super(SaleOrderLine, other_lines)._compute_qty_to_invoice() for line in self - other_lines: @@ -50,16 +28,74 @@ def _compute_qty_to_invoice(self): line.qty_to_invoice = line.qty_delivered - line.qty_invoiced return True - @api.depends("order_id.invoice_policy") - def _compute_untaxed_amount_to_invoice(self) -> None: + @api.depends( + "state", + "price_reduce", + "product_id", + "untaxed_amount_invoiced", + "qty_delivered", + "product_uom_qty", + "order_id.invoice_policy", + ) + def _compute_untaxed_amount_to_invoice(self): other_lines = self.filtered( lambda line: line.product_id.type == "service" - or line.order_id.invoice_policy == "product" + or not line.order_id.invoice_policy or line.order_id.invoice_policy == line.product_id.invoice_policy or line.state not in ["sale", "done"] + or not line.order_id.invoice_policy_required ) super(SaleOrderLine, other_lines)._compute_untaxed_amount_to_invoice() - for lines in (self - other_lines).partition("order_id.invoice_policy").values(): - with self._sale_invoice_policy(lines): - super(SaleOrderLine, lines)._compute_untaxed_amount_to_invoice() - return + for line in self - other_lines: + invoice_policy = line.order_id.invoice_policy + amount_to_invoice = 0.0 + price_subtotal = 0.0 + uom_qty_to_consider = ( + line.qty_delivered + if invoice_policy == "delivery" + else line.product_uom_qty + ) + price_reduce = line.price_unit * (1 - (line.discount or 0.0) / 100.0) + price_subtotal = price_reduce * uom_qty_to_consider + if len(line.tax_id.filtered(lambda tax: tax.price_include)) > 0: + price_subtotal = line.tax_id.compute_all( + price_reduce, + currency=line.currency_id, + quantity=uom_qty_to_consider, + product=line.product_id, + partner=line.order_id.partner_shipping_id, + )["total_excluded"] + inv_lines = line._get_invoice_lines() + if any(inv_lines.mapped(lambda l: l.discount != line.discount)): + amount = 0 + for inv_line in inv_lines: + if ( + len(inv_line.tax_ids.filtered(lambda tax: tax.price_include)) + > 0 + ): + amount += inv_line.tax_ids.compute_all( + inv_line.currency_id._convert( + inv_line.price_unit, + line.currency_id, + line.company_id, + inv_line.date or fields.Date.today(), + round=False, + ) + * inv_line.quantity + )["total_excluded"] + else: + amount += ( + inv_line.currency_id._convert( + inv_line.price_unit, + line.currency_id, + line.company_id, + inv_line.date or fields.Date.today(), + round=False, + ) + * inv_line.quantity + ) + amount_to_invoice = max(price_subtotal - amount, 0) + else: + amount_to_invoice = price_subtotal - line.untaxed_amount_invoiced + line.untaxed_amount_to_invoice = amount_to_invoice + return True diff --git a/sale_invoice_policy/readme/CONFIGURE.rst b/sale_invoice_policy/readme/CONFIGURE.rst deleted file mode 100644 index b6d3330f669..00000000000 --- a/sale_invoice_policy/readme/CONFIGURE.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Go to Sale > Configuration > Settings > Sale Invoice Policy -* Choose the one that fits your needs. diff --git a/sale_invoice_policy/readme/CONTEXT.rst b/sale_invoice_policy/readme/CONTEXT.rst deleted file mode 100644 index 0807e810ac4..00000000000 --- a/sale_invoice_policy/readme/CONTEXT.rst +++ /dev/null @@ -1,13 +0,0 @@ -In Odoo, products have their own invoicing policy that can be: - -- Invoicing on ordered quantities -- Invoicing on ordered quantities - -Following that configuration, when trying to create invoices from -sale orders, each line of product will apply its invoicing policy. - -In some cases, user needs to apply an invoicing policy on a whole -sale order. - -The solution proposed here is to add an invoicing policy on -sale order level. diff --git a/sale_invoice_policy/readme/CONTRIBUTORS.rst b/sale_invoice_policy/readme/CONTRIBUTORS.rst index 9a8c5d402bf..c3ac969909f 100644 --- a/sale_invoice_policy/readme/CONTRIBUTORS.rst +++ b/sale_invoice_policy/readme/CONTRIBUTORS.rst @@ -5,4 +5,3 @@ * Luis J. Salvatierra * Alejandro Ji Cheung * Ioan Galan -* Laurent Mignon \ No newline at end of file diff --git a/sale_invoice_policy/readme/DESCRIPTION.rst b/sale_invoice_policy/readme/DESCRIPTION.rst index f94c98aa36a..83b3bae0e62 100644 --- a/sale_invoice_policy/readme/DESCRIPTION.rst +++ b/sale_invoice_policy/readme/DESCRIPTION.rst @@ -1,17 +1,2 @@ -This module adds an invoicing policy on sale order level in order to -apply that invoicing policy on the whole sale order. - -That invoicing policy can take three values: - -- Products Invoicing Policy: The sale order will follow the standard - behavior and apply the policy depending on products configurations. -- Ordered Quantities: The sale order will invoice the ordered quantities. -- Delivered Quantities: The sale order will invoice the delivered quantities. - -Following the chosen policy, the quantity to invoice and the -amount to invoice on each line will be computed accordingly. -Note that the sale order policy will affect only storable products. - -You will be able also to define a default invoicing policy -(globally per company) -that can be different than the default invoicing policy for new products. +This modules helps to get Invoicing Policy on Sale Order Level without +breaking behaviour (as it is defined from >= v10 on product level). diff --git a/sale_invoice_policy/readme/USAGE.rst b/sale_invoice_policy/readme/USAGE.rst index 3796bdeb6eb..b62785e91ad 100644 --- a/sale_invoice_policy/readme/USAGE.rst +++ b/sale_invoice_policy/readme/USAGE.rst @@ -1,3 +1,4 @@ * Create Sale Order -* Select Invoicing Policy on Sale Order or let it on Products Invoicing Policy -* The created invoices will use the configuration on sale order. +* Select Invoicing Policy on Sale Order or let it void +* Either the policy selected on Sale Order would be used, either if not + filled in, the policy would be chosen from product configuration diff --git a/sale_invoice_policy/static/description/index.html b/sale_invoice_policy/static/description/index.html deleted file mode 100644 index 41ef1cb3ac0..00000000000 --- a/sale_invoice_policy/static/description/index.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - - -README.rst - - - -
- - - -Odoo Community Association - -
-

Sale invoice Policy

- -

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

-

This module adds an invoicing policy on sale order level in order to -apply that invoicing policy on the whole sale order.

-

That invoicing policy can take three values:

-
    -
  • Products Invoicing Policy: The sale order will follow the standard -behavior and apply the policy depending on products configurations.
  • -
  • Ordered Quantities: The sale order will invoice the ordered quantities.
  • -
  • Delivered Quantities: The sale order will invoice the delivered quantities.
  • -
-

Following the chosen policy, the quantity to invoice and the -amount to invoice on each line will be computed accordingly. -Note that the sale order policy will affect only storable products.

-

You will be able also to define a default invoicing policy -(globally per company) -that can be different than the default invoicing policy for new products.

-

Table of contents

- -
-

Use Cases / Context

-

In Odoo, products have their own invoicing policy that can be:

-
    -
  • Invoicing on ordered quantities
  • -
  • Invoicing on ordered quantities
  • -
-

Following that configuration, when trying to create invoices from -sale orders, each line of product will apply its invoicing policy.

-

In some cases, user needs to apply an invoicing policy on a whole -sale order.

-

The solution proposed here is to add an invoicing policy on -sale order level.

-
-
-

Configuration

-
    -
  • Go to Sale > Configuration > Settings > Sale Invoice Policy
  • -
  • Choose the one that fits your needs.
  • -
-
-
-

Usage

-
    -
  • Create Sale Order
  • -
  • Select Invoicing Policy on Sale Order or let it on Products Invoicing Policy
  • -
  • The created invoices will use the configuration on sale order.
  • -
-
-
-

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

-
    -
  • ACSONE SA/NV
  • -
-
-
-

Contributors

- -
-
-

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_invoice_policy/tests/test_sale_invoice_policy.py b/sale_invoice_policy/tests/test_sale_invoice_policy.py index 9d94bae1b8d..bcd2bebd071 100644 --- a/sale_invoice_policy/tests/test_sale_invoice_policy.py +++ b/sale_invoice_policy/tests/test_sale_invoice_policy.py @@ -26,6 +26,9 @@ def setUpClass(cls): def test_sale_order_invoice_order(self): """Test invoicing based on ordered quantities""" + settings = self.env["res.config.settings"].create({}) + settings.sale_invoice_policy_required = True + settings.execute() so = self.env["sale.order"].create( { "partner_id": self.env.ref("base.res_partner_2").id, @@ -36,10 +39,8 @@ def test_sale_order_invoice_order(self): "invoice_policy": "order", } ) - self.assertEqual(so.invoice_policy, "order") - - # SO is not confirmed yet - self.assertEqual([0.0, 0.0], so.order_line.mapped("untaxed_amount_to_invoice")) + self.assertTrue(so.invoice_policy_required) + self.assertTrue(so.invoice_policy == "order") so.action_confirm() @@ -60,7 +61,9 @@ def test_sale_order_invoice_order(self): def test_sale_order_invoice_deliver(self): """Test invoicing based on delivered quantities""" - self.assertEqual("order", self.product.invoice_policy) + settings = self.env["res.config.settings"].create({}) + settings.sale_invoice_policy_required = True + settings.execute() so = self.env["sale.order"].create( { "partner_id": self.env.ref("base.res_partner_2").id, @@ -71,16 +74,11 @@ def test_sale_order_invoice_deliver(self): ], } ) - self.assertEqual(so.invoice_policy, "delivery") - - # SO is not confirmed yet - self.assertEqual([0.0, 0.0], so.order_line.mapped("untaxed_amount_to_invoice")) + self.assertTrue(so.invoice_policy_required) + self.assertTrue(so.invoice_policy == "delivery") so.action_confirm() - # SO is not delivered - self.assertEqual([0.0, 0.0], so.order_line.mapped("untaxed_amount_to_invoice")) - self.assertEqual(len(so.picking_ids), 1) picking = so.picking_ids @@ -104,65 +102,26 @@ def test_sale_order_invoice_deliver(self): self.assertEqual(so_line.qty_to_invoice, 2) self.assertEqual(so_line.invoice_status, "to invoice") - self.assertEqual(40.0, so_line.untaxed_amount_to_invoice) - # Check that product has still its original invoice policy - self.assertEqual("order", self.product.invoice_policy) - so_line = so.order_line[1] self.assertEqual(so_line.qty_to_invoice, 3) self.assertEqual(so_line.invoice_status, "to invoice") - self.assertEqual(135.0, so_line.untaxed_amount_to_invoice) - def test_settings(self): # delivery policy is the default settings = self.env["res.config.settings"].create({}) - settings.sale_default_invoice_policy = "delivery" + settings.default_invoice_policy = "delivery" + settings.sale_invoice_policy_required = True settings.execute() so = self.env["sale.order"].create( {"partner_id": self.env.ref("base.res_partner_2").id} ) self.assertEqual(so.invoice_policy, "delivery") + self.assertTrue(so.invoice_policy_required) # order policy is the default - settings.sale_default_invoice_policy = "order" + settings.default_invoice_policy = "order" settings.execute() so = self.env["sale.order"].create( {"partner_id": self.env.ref("base.res_partner_2").id} ) self.assertEqual(so.invoice_policy, "order") - - def test_context_manager_exception(self): - """Check the exception is well managed when called with several invoice policies""" - self.assertEqual("order", self.product.invoice_policy) - so = self.env["sale.order"].create( - { - "partner_id": self.env.ref("base.res_partner_2").id, - "invoice_policy": "delivery", - "order_line": [ - (0, 0, {"product_id": self.product.id, "product_uom_qty": 2.0}), - (0, 0, {"product_id": self.product2.id, "product_uom_qty": 3.0}), - ], - } - ) - - so2 = self.env["sale.order"].create( - { - "partner_id": self.env.ref("base.res_partner_2").id, - "invoice_policy": "order", - "order_line": [ - (0, 0, {"product_id": self.product.id, "product_uom_qty": 2.0}), - (0, 0, {"product_id": self.product2.id, "product_uom_qty": 3.0}), - ], - } - ) - lines = (so | so2).order_line - with self.assertRaises(Exception) as exc: - with self.env["sale.order.line"]._sale_invoice_policy( - lines - ): # pragma: no cover - pass - self.assertEqual( - "The method _sale_invoice_policy() must be called with lines sharing " - "the same invoice policy", - exc.exception.args[0], - ) + self.assertTrue(so.invoice_policy_required) diff --git a/sale_invoice_policy/views/res_config_settings_view.xml b/sale_invoice_policy/views/res_config_settings_view.xml index cba89c33cec..c79d78633ff 100644 --- a/sale_invoice_policy/views/res_config_settings_view.xml +++ b/sale_invoice_policy/views/res_config_settings_view.xml @@ -10,18 +10,16 @@ class="col-12 col-lg-6 o_setting_box" id="sale_invoice_policy_setting" > -
+
+ +
diff --git a/sale_invoice_policy/views/sale_view.xml b/sale_invoice_policy/views/sale_view.xml index 9fb0e0024a5..85e0c03209a 100644 --- a/sale_invoice_policy/views/sale_view.xml +++ b/sale_invoice_policy/views/sale_view.xml @@ -7,7 +7,11 @@ 50 - + +