diff --git a/sale_product_multi_add/README.rst b/sale_product_multi_add/README.rst new file mode 100644 index 00000000000..0a6f8a5baea --- /dev/null +++ b/sale_product_multi_add/README.rst @@ -0,0 +1,98 @@ +====================== +Sale Product Multi Add +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:76dc6788d1252512000fd3edaef23c4ecde388730ad5d522de42de14499555a1 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/18.0/sale_product_multi_add + :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-18-0/sale-workflow-18-0-sale_product_multi_add + :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=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of the Sales module by allowing +you to import multiple products into your current Sale Order. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +This module adds a button on a Sale Order to import several products on +your current sale order. To use this module create a Sale Order and +click the button to open a wizard where you can add multiple products +and set the quantities. + +|Sale Product Multi Add| + +.. |Sale Product Multi Add| image:: https://raw.githubusercontent.com/sale_product_multi_add/static/description/sale_product_multi_add.png + +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 +------------ + +- Denis Roussel +- Cédric Pigeon +- Tharathip Chaweewongphan +- `Pesol `__: + + - Jonathan Oscategui Taza + +- Jacques-Etienne Baudoux (BCIM) +- Anaïs López +- Heliconia Solutions Pvt. Ltd. + +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_product_multi_add/__init__.py b/sale_product_multi_add/__init__.py new file mode 100644 index 00000000000..5cb1c49143f --- /dev/null +++ b/sale_product_multi_add/__init__.py @@ -0,0 +1 @@ +from . import wizards diff --git a/sale_product_multi_add/__manifest__.py b/sale_product_multi_add/__manifest__.py new file mode 100644 index 00000000000..90f1e8d5e1e --- /dev/null +++ b/sale_product_multi_add/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2016-2024 Cédric Pigeon, ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Sale Product Multi Add", + "summary": """ + Sale Product Multi Add """, + "author": "ACSONE SA/NV, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/sale-workflow", + "category": "Sale Management", + "version": "18.0.1.0.0", + "license": "AGPL-3", + "depends": ["sale_stock"], + "data": [ + "security/ir.model.access.csv", + "wizards/sale_import_products_view.xml", + "views/sale_view.xml", + ], +} diff --git a/sale_product_multi_add/i18n/ca.po b/sale_product_multi_add/i18n/ca.po new file mode 100644 index 00000000000..86a9f38b03c --- /dev/null +++ b/sale_product_multi_add/i18n/ca.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_multi_add +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-11-06 13:08+0000\n" +"Last-Translator: brendapaniagua \n" +"Language-Team: none\n" +"Language: ca\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 3.10\n" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.sale_order_mass_import_form +msgid "Add multiple products" +msgstr "Afegiu diversos productes" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Cancel" +msgstr "Cancel · lar" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Confirm" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_date +msgid "Created on" +msgstr "Crea per" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__display_name +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__display_name +msgid "Display Name" +msgstr "Nom visible" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__id +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__id +msgid "ID" +msgstr "ID" + +#. module: sale_product_multi_add +#: model:ir.actions.act_window,name:sale_product_multi_add.action_import_product_to_sale +msgid "Import Products" +msgstr "Importar productes" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__items +msgid "Items" +msgstr "Articles" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_uid +msgid "Last Updated by" +msgstr "Darrera actualització per" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_date +msgid "Last Updated on" +msgstr "Darrera actualització el" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__product_id +msgid "Product" +msgstr "Producte" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__products +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Products" +msgstr "Productes" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__quantity +msgid "Quantity" +msgstr "Quantitat" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products +msgid "Sale Import Products" +msgstr "Venda de productes d'importació" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products_items +msgid "Sale Import Products Items" +msgstr "Venda d'articles de productes d'importació" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +msgid "Set quantities" +msgstr "Estableix quantitats" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__wizard_id +msgid "Wizard" +msgstr "Mag" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "or" +msgstr "o" + +#~ msgid "Last Modified on" +#~ msgstr "Darrera modificació el" + +#~ msgid "Select" +#~ msgstr "Seleccioneu" diff --git a/sale_product_multi_add/i18n/de.po b/sale_product_multi_add/i18n/de.po new file mode 100644 index 00000000000..efe68b2d18c --- /dev/null +++ b/sale_product_multi_add/i18n/de.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_multi_add +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-09 15:48+0000\n" +"Last-Translator: Maria Sparenberg \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.sale_order_mass_import_form +msgid "Add multiple products" +msgstr "Mehrere Produkte hinzufügen" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Cancel" +msgstr "Abbrechen" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Confirm" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__display_name +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__id +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__id +msgid "ID" +msgstr "ID" + +#. module: sale_product_multi_add +#: model:ir.actions.act_window,name:sale_product_multi_add.action_import_product_to_sale +msgid "Import Products" +msgstr "Produkte importieren" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__items +msgid "Items" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__product_id +msgid "Product" +msgstr "Produkt" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__products +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Products" +msgstr "Produkte" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__quantity +msgid "Quantity" +msgstr "Menge" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products +msgid "Sale Import Products" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products_items +msgid "Sale Import Products Items" +msgstr "" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +msgid "Set quantities" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__wizard_id +msgid "Wizard" +msgstr "Assistent" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "or" +msgstr "oder" + +#~ msgid "Last Modified on" +#~ msgstr "Zuletzt geändert am" + +#~ msgid "Select" +#~ msgstr "Auswählen" diff --git a/sale_product_multi_add/i18n/es.po b/sale_product_multi_add/i18n/es.po new file mode 100644 index 00000000000..eaae4eff205 --- /dev/null +++ b/sale_product_multi_add/i18n/es.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_multi_add +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-27 10:19+0000\n" +"Last-Translator: Daniel Martinez Vila \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.sale_order_mass_import_form +msgid "Add multiple products" +msgstr "Agregar múltiples productos" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Cancel" +msgstr "Cancelar" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Confirm" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__display_name +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__id +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__id +msgid "ID" +msgstr "ID" + +#. module: sale_product_multi_add +#: model:ir.actions.act_window,name:sale_product_multi_add.action_import_product_to_sale +msgid "Import Products" +msgstr "Importar productos" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__items +msgid "Items" +msgstr "Artículos" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__product_id +msgid "Product" +msgstr "Producto" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__products +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Products" +msgstr "Productos" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__quantity +msgid "Quantity" +msgstr "Cantidad" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products +msgid "Sale Import Products" +msgstr "Venta de productos de importación" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products_items +msgid "Sale Import Products Items" +msgstr "Venta Importación Productos Artículos" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +msgid "Set quantities" +msgstr "Establecer cantidades" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__wizard_id +msgid "Wizard" +msgstr "Asistente" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "or" +msgstr "o" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" + +#~ msgid "Select" +#~ msgstr "Seleccione" diff --git a/sale_product_multi_add/i18n/fr_FR.po b/sale_product_multi_add/i18n/fr_FR.po new file mode 100644 index 00000000000..d8a3ea5df1f --- /dev/null +++ b/sale_product_multi_add/i18n/fr_FR.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_multi_add +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-04-11 17:46+0000\n" +"Last-Translator: Yves Le Doeuff \n" +"Language-Team: none\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.sale_order_mass_import_form +msgid "Add multiple products" +msgstr "Ajouter plusieurs produits" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Cancel" +msgstr "Annuler" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Confirm" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__display_name +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__id +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__id +msgid "ID" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.actions.act_window,name:sale_product_multi_add.action_import_product_to_sale +msgid "Import Products" +msgstr "Importer des articles" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__items +msgid "Items" +msgstr "Eléments" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__product_id +msgid "Product" +msgstr "Article" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__products +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Products" +msgstr "Articles" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__quantity +msgid "Quantity" +msgstr "Quantité" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products +msgid "Sale Import Products" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products_items +msgid "Sale Import Products Items" +msgstr "" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +msgid "Set quantities" +msgstr "Quantités" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__wizard_id +msgid "Wizard" +msgstr "Assistant" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "or" +msgstr "ou" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière Modification le" + +#~ msgid "Select" +#~ msgstr "Sélectionner" diff --git a/sale_product_multi_add/i18n/it.po b/sale_product_multi_add/i18n/it.po new file mode 100644 index 00000000000..e5845bc9b4f --- /dev/null +++ b/sale_product_multi_add/i18n/it.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_multi_add +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-06-24 13:40+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.sale_order_mass_import_form +msgid "Add multiple products" +msgstr "Aggiungere prodotti multipli" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Cancel" +msgstr "Annulla" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Confirm" +msgstr "Conferma" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__display_name +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__id +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__id +msgid "ID" +msgstr "ID" + +#. module: sale_product_multi_add +#: model:ir.actions.act_window,name:sale_product_multi_add.action_import_product_to_sale +msgid "Import Products" +msgstr "Importare prodotti" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__items +msgid "Items" +msgstr "Elementi" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__product_id +msgid "Product" +msgstr "Prodotto" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__products +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Products" +msgstr "Prodotti" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__quantity +msgid "Quantity" +msgstr "Quantità" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products +msgid "Sale Import Products" +msgstr "Importare prodotti di vendita" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products_items +msgid "Sale Import Products Items" +msgstr "Importare elementi di prodotti di vendita" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +msgid "Set quantities" +msgstr "Impostare quantità" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__wizard_id +msgid "Wizard" +msgstr "Procedura guidata" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "or" +msgstr "o" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" + +#~ msgid "Select" +#~ msgstr "Seleziona" diff --git a/sale_product_multi_add/i18n/sale_product_multi_add.pot b/sale_product_multi_add/i18n/sale_product_multi_add.pot new file mode 100644 index 00000000000..f04df230b98 --- /dev/null +++ b/sale_product_multi_add/i18n/sale_product_multi_add.pot @@ -0,0 +1,119 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_multi_add +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.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_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.sale_order_mass_import_form +msgid "Add multiple products" +msgstr "" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Cancel" +msgstr "" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Confirm" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_uid +msgid "Created by" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_date +msgid "Created on" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__display_name +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__display_name +msgid "Display Name" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__id +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__id +msgid "ID" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.actions.act_window,name:sale_product_multi_add.action_import_product_to_sale +msgid "Import Products" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__items +msgid "Items" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_date +msgid "Last Updated on" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__product_id +msgid "Product" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__products +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Products" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__quantity +msgid "Quantity" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products +msgid "Sale Import Products" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products_items +msgid "Sale Import Products Items" +msgstr "" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +msgid "Set quantities" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__wizard_id +msgid "Wizard" +msgstr "" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "or" +msgstr "" diff --git a/sale_product_multi_add/i18n/zh_CN.po b/sale_product_multi_add/i18n/zh_CN.po new file mode 100644 index 00000000000..e7adb4d1022 --- /dev/null +++ b/sale_product_multi_add/i18n/zh_CN.po @@ -0,0 +1,122 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_multi_add +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-03-11 10:45+0000\n" +"Last-Translator: 黎伟杰 <674416404@qq.com>\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.sale_order_mass_import_form +msgid "Add multiple products" +msgstr "添加多个产品" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Cancel" +msgstr "取消" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Confirm" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_uid +msgid "Created by" +msgstr "创建人" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__create_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__create_date +msgid "Created on" +msgstr "创建时间" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__display_name +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__id +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__id +msgid "ID" +msgstr "ID" + +#. module: sale_product_multi_add +#: model:ir.actions.act_window,name:sale_product_multi_add.action_import_product_to_sale +msgid "Import Products" +msgstr "导入产品" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__items +msgid "Items" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_uid +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__write_date +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__write_date +msgid "Last Updated on" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__product_id +msgid "Product" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products__products +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "Products" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__quantity +msgid "Quantity" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products +msgid "Sale Import Products" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model,name:sale_product_multi_add.model_sale_import_products_items +msgid "Sale Import Products Items" +msgstr "" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +msgid "Set quantities" +msgstr "" + +#. module: sale_product_multi_add +#: model:ir.model.fields,field_description:sale_product_multi_add.field_sale_import_products_items__wizard_id +msgid "Wizard" +msgstr "" + +#. module: sale_product_multi_add +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale +#: model_terms:ir.ui.view,arch_db:sale_product_multi_add.view_import_product_to_sale2 +msgid "or" +msgstr "" diff --git a/sale_product_multi_add/pyproject.toml b/sale_product_multi_add/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/sale_product_multi_add/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/sale_product_multi_add/readme/CONTRIBUTORS.md b/sale_product_multi_add/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..ccd9d8238de --- /dev/null +++ b/sale_product_multi_add/readme/CONTRIBUTORS.md @@ -0,0 +1,8 @@ +- Denis Roussel \<\> +- Cédric Pigeon \<\> +- Tharathip Chaweewongphan \<\> +- [Pesol](https://www.pesol.es): + - Jonathan Oscategui Taza \<\> +- Jacques-Etienne Baudoux (BCIM) \<\> +- Anaïs López \<\> +- Heliconia Solutions Pvt. Ltd. \<\> diff --git a/sale_product_multi_add/readme/DESCRIPTION.md b/sale_product_multi_add/readme/DESCRIPTION.md new file mode 100644 index 00000000000..9ae6337efd4 --- /dev/null +++ b/sale_product_multi_add/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module extends the functionality of the Sales module by allowing you to +import multiple products into your current Sale Order. diff --git a/sale_product_multi_add/readme/USAGE.md b/sale_product_multi_add/readme/USAGE.md new file mode 100644 index 00000000000..1c972d54653 --- /dev/null +++ b/sale_product_multi_add/readme/USAGE.md @@ -0,0 +1,5 @@ +This module adds a button on a Sale Order to import several products on +your current sale order. To use this module create a Sale Order and click the button +to open a wizard where you can add multiple products and set the quantities. + +![Sale Product Multi Add](/sale_product_multi_add/static/description/sale_product_multi_add.png) diff --git a/sale_product_multi_add/security/ir.model.access.csv b/sale_product_multi_add/security/ir.model.access.csv new file mode 100644 index 00000000000..ebb6276165f --- /dev/null +++ b/sale_product_multi_add/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_sale_import_products,access_sale_import_products,model_sale_import_products,sales_team.group_sale_salesman,1,1,1,1 +access_sale_import_products_items,access_sale_import_products_items,model_sale_import_products_items,sales_team.group_sale_salesman,1,1,1,1 diff --git a/sale_product_multi_add/static/description/icon.png b/sale_product_multi_add/static/description/icon.png new file mode 100644 index 00000000000..3a0328b516c Binary files /dev/null and b/sale_product_multi_add/static/description/icon.png differ diff --git a/sale_product_multi_add/static/description/index.html b/sale_product_multi_add/static/description/index.html new file mode 100644 index 00000000000..e348a63f9fe --- /dev/null +++ b/sale_product_multi_add/static/description/index.html @@ -0,0 +1,442 @@ + + + + + +Sale Product Multi Add + + + +
+

Sale Product Multi Add

+ + +

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

+

This module extends the functionality of the Sales module by allowing +you to import multiple products into your current Sale Order.

+

Table of contents

+ +
+

Usage

+

This module adds a button on a Sale Order to import several products on +your current sale order. To use this module create a Sale Order and +click the button to open a wizard where you can add multiple products +and set the quantities.

+

Sale Product Multi Add

+
+
+

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_product_multi_add/static/description/sale_product_multi_add.png b/sale_product_multi_add/static/description/sale_product_multi_add.png new file mode 100644 index 00000000000..cb29986cd3c Binary files /dev/null and b/sale_product_multi_add/static/description/sale_product_multi_add.png differ diff --git a/sale_product_multi_add/tests/__init__.py b/sale_product_multi_add/tests/__init__.py new file mode 100644 index 00000000000..67709762e39 --- /dev/null +++ b/sale_product_multi_add/tests/__init__.py @@ -0,0 +1 @@ +from . import test_sale diff --git a/sale_product_multi_add/tests/test_sale.py b/sale_product_multi_add/tests/test_sale.py new file mode 100644 index 00000000000..b904536a11f --- /dev/null +++ b/sale_product_multi_add/tests/test_sale.py @@ -0,0 +1,88 @@ +from unittest.mock import patch + +import odoo.tests.common as common + + +class TestSale(common.TransactionCase): + def setUp(self): + super().setUp() + + self.product_9 = self.env.ref("product.product_product_9") + self.product_11 = self.env.ref("product.product_product_11") + self.so = self.env["sale.order"].create( + { + "partner_id": self.env.ref("base.res_partner_2").id, + "picking_policy": "one", + } + ) + + def test_import_product(self): + """Create SO + Import products + Check products are present + """ + wiz_obj = self.env["sale.import.products"] + wizard = wiz_obj.with_context(active_id=self.so.id, active_model="sale.order") + + products = [(6, 0, [self.product_9.id, self.product_11.id])] + + wizard_id = wizard.create([{"products": products}]) + wizard_id.create_items() + wizard_id.items[0].quantity = 4 + wizard_id.items[1].quantity = 6 + wizard_id.select_products() + + self.assertEqual(len(self.so.order_line), 2) + + for line in self.so.order_line: + if line.product_id.id == self.product_9.id: + self.assertEqual(line.product_uom_qty, 4) + else: + self.assertEqual(line.product_uom_qty, 6) + + def test_select_products_no_vals(self): + """Test when _get_line_values returns False""" + wizard = self.env["sale.import.products"].create([]) + + # Use unittest.mock to patch the method instead of direct assignment + with patch.object(type(wizard), "_get_line_values", return_value=False): + wizard.with_context(active_id=self.so.id).select_products() + + # Assert that no order lines are created + self.assertEqual(len(self.so.order_line), 0) + + def test_select_products_empty_vals_list(self): + """Test when vals_list is empty""" + wizard = self.env["sale.import.products"].create([]) + wizard.with_context(active_id=self.so.id).select_products() + + # Assert that no order lines are created + self.assertEqual(len(self.so.order_line), 0) + + def test_select_products_no_sale(self): + """Test when sale is not found""" + wizard = self.env["sale.import.products"].create([]) + result = wizard.with_context(active_id=False).select_products() + + # Assert no order lines are created and window action is returned + self.assertEqual(len(self.so.order_line), 0) + self.assertEqual(result, {"type": "ir.actions.act_window_close"}) + + def test_select_products_with_vals(self): + """Test when vals_list is created""" + wiz_obj = self.env["sale.import.products"] + wizard = wiz_obj.with_context(active_id=self.so.id) + products = [(6, 0, [self.product_9.id, self.product_11.id])] + wizard_id = wizard.create([{"products": products}]) + wizard_id.create_items() + wizard_id.items[0].quantity = 3 + wizard_id.items[1].quantity = 5 + wizard_id.select_products() + + # Assert that order lines are created correctly + self.assertEqual(len(self.so.order_line), 2) + for line in self.so.order_line: + if line.product_id.id == self.product_9.id: + self.assertEqual(line.product_uom_qty, 3) + elif line.product_id.id == self.product_11.id: + self.assertEqual(line.product_uom_qty, 5) diff --git a/sale_product_multi_add/views/sale_view.xml b/sale_product_multi_add/views/sale_view.xml new file mode 100644 index 00000000000..47d569019c7 --- /dev/null +++ b/sale_product_multi_add/views/sale_view.xml @@ -0,0 +1,25 @@ + + + + sale.order.mass.import.form + sale.order + + + +