diff --git a/setup/stock_picking_manual_package/odoo/addons/stock_picking_manual_package b/setup/stock_picking_manual_package/odoo/addons/stock_picking_manual_package new file mode 120000 index 000000000..4f0028e65 --- /dev/null +++ b/setup/stock_picking_manual_package/odoo/addons/stock_picking_manual_package @@ -0,0 +1 @@ +../../../../stock_picking_manual_package \ No newline at end of file diff --git a/setup/stock_picking_manual_package/setup.py b/setup/stock_picking_manual_package/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/stock_picking_manual_package/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/stock_picking_manual_package/README.rst b/stock_picking_manual_package/README.rst new file mode 100644 index 000000000..44a7e6d82 --- /dev/null +++ b/stock_picking_manual_package/README.rst @@ -0,0 +1,87 @@ +============================ +Stock Picking Manual Package +============================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fstock--logistics--warehouse-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_picking_manual_package + :alt: OCA/stock-logistics-warehouse +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-13-0/stock-logistics-warehouse-13-0-stock_picking_manual_package + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/153/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to create or select a package in picking to 'Put in pack' all done +quantities. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +#. Go to *Inventory > Transfer* +#. Create a picking +#. Create or select a package +#. Click on put in pack button +#. All lines will have the package selected + +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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Sergio Teruel + +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/stock-logistics-warehouse `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_picking_manual_package/__init__.py b/stock_picking_manual_package/__init__.py new file mode 100644 index 000000000..adc6207fd --- /dev/null +++ b/stock_picking_manual_package/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models +from . import wizards diff --git a/stock_picking_manual_package/__manifest__.py b/stock_picking_manual_package/__manifest__.py new file mode 100644 index 000000000..24c858f75 --- /dev/null +++ b/stock_picking_manual_package/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2022 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Stock Picking Manual Package", + "summary": "Select or create a package to put in pack for a picking", + "version": "13.0.1.0.0", + "category": "Stock", + "website": "https://github.com/OCA/stock-logistics-warehouse", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": ["stock"], + "data": ["wizards/stock_picking_manual_package_wizard_view.xml"], +} diff --git a/stock_picking_manual_package/i18n/es.po b/stock_picking_manual_package/i18n/es.po new file mode 100644 index 000000000..4e5dbb0bd --- /dev/null +++ b/stock_picking_manual_package/i18n/es.po @@ -0,0 +1,125 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_picking_manual_package +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-06-09 07:22+0000\n" +"PO-Revision-Date: 2022-06-09 09:25+0200\n" +"Last-Translator: Sergio Teruel \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.3\n" + +#. module: stock_picking_manual_package +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_picking_manual_package +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Confirm" +msgstr "Confirmar" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__create_uid +msgid "Created by" +msgstr "Creado el" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,help:stock_picking_manual_package.field_stock_picking_manual_package_wiz__nbr_lines_into_package +msgid "" +"If set, the package will be assigned to the N reserved detailed operations" +msgstr "" +"Si está establecido se empaquetaran N líneas en el paquete seleccionado" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,help:stock_picking_manual_package.field_stock_picking_manual_package_wiz__package_id +msgid "" +"If this field is set, when you click on 'Put in pack' all done quantities " +"will be include in this package" +msgstr "" +"Si este campo está establecido, cuando pulses sobre 'Poner en paquete' todas " +"las cantidades serán incluidas en este paquete" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__nbr_lines_into_package +msgid "Number lines to packaging" +msgstr "Número de líneas a empaquetar" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__package_id +msgid "Package" +msgstr "Paquete" + +#. module: stock_picking_manual_package +#: model:ir.model,name:stock_picking_manual_package.model_stock_quant_package +msgid "Packages" +msgstr "Paquetes" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__picking_id +msgid "Picking" +msgstr "Albarán" + +#. module: stock_picking_manual_package +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Select or create a package to do 'Put in pack'" +msgstr "Selecciona o crea un paquete para la acción \"Poner en paquete\"" + +#. module: stock_picking_manual_package +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Set how many lines you want to 'Put in pack'" +msgstr "Establezca el número de lineas que quiere \"Poner en paquete\"" + +#. module: stock_picking_manual_package +#: model:ir.actions.act_window,name:stock_picking_manual_package.action_manual_package_wiz +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Stock Picking Manual Package" +msgstr "Empaquetado manual" + +#. module: stock_picking_manual_package +#: model:ir.model,name:stock_picking_manual_package.model_stock_picking_manual_package_wiz +msgid "Stock picking manual package wizard" +msgstr "Asistente de empaquetado manual" + +#. module: stock_picking_manual_package +#: model:ir.model,name:stock_picking_manual_package.model_stock_picking +msgid "Transfer" +msgstr "Transferir" diff --git a/stock_picking_manual_package/i18n/stock_picking_manual_package.pot b/stock_picking_manual_package/i18n/stock_picking_manual_package.pot new file mode 100644 index 000000000..f03ed340f --- /dev/null +++ b/stock_picking_manual_package/i18n/stock_picking_manual_package.pot @@ -0,0 +1,120 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_picking_manual_package +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-06-09 07:22+0000\n" +"PO-Revision-Date: 2022-06-09 07:22+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: stock_picking_manual_package +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Cancel" +msgstr "" + +#. module: stock_picking_manual_package +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Confirm" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__create_date +msgid "Created on" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__id +msgid "ID" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,help:stock_picking_manual_package.field_stock_picking_manual_package_wiz__nbr_lines_into_package +msgid "" +"If set, the package will be assigned to the N reserved detailed operations" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,help:stock_picking_manual_package.field_stock_picking_manual_package_wiz__package_id +msgid "" +"If this field is set, when you click on 'Put in pack' all done quantities " +"will be include in this package" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz____last_update +msgid "Last Modified on" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__nbr_lines_into_package +msgid "Number lines to packaging" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__package_id +msgid "Package" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model,name:stock_picking_manual_package.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model.fields,field_description:stock_picking_manual_package.field_stock_picking_manual_package_wiz__picking_id +msgid "Picking" +msgstr "" + +#. module: stock_picking_manual_package +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Select or create a package to do 'Put in pack'" +msgstr "" + +#. module: stock_picking_manual_package +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Set how many lines you want to 'Put in pack'" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.actions.act_window,name:stock_picking_manual_package.action_manual_package_wiz +#: model_terms:ir.ui.view,arch_db:stock_picking_manual_package.view_manual_package_wizard_form +msgid "Stock Picking Manual Package" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model,name:stock_picking_manual_package.model_stock_picking_manual_package_wiz +msgid "Stock picking manual package wizard" +msgstr "" + +#. module: stock_picking_manual_package +#: model:ir.model,name:stock_picking_manual_package.model_stock_picking +msgid "Transfer" +msgstr "" diff --git a/stock_picking_manual_package/models/__init__.py b/stock_picking_manual_package/models/__init__.py new file mode 100644 index 000000000..8d311ae45 --- /dev/null +++ b/stock_picking_manual_package/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2022 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import stock_picking +from . import stock_quant_package diff --git a/stock_picking_manual_package/models/stock_picking.py b/stock_picking_manual_package/models/stock_picking.py new file mode 100644 index 000000000..b1e4db221 --- /dev/null +++ b/stock_picking_manual_package/models/stock_picking.py @@ -0,0 +1,30 @@ +# Copyright 2022 Sergio Teruel - Tecnativa +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import models +from odoo.tools import config + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + def put_in_pack(self): + if ( + config["test_enable"] + and not self.env.context.get("test_manual_package", False) + ) or self.env.context.get("skip_manual_package", False): + return super().put_in_pack() + action = self.env.ref( + "stock_picking_manual_package.action_manual_package_wiz" + ).read()[0] + wiz = self.env["stock.picking.manual.package.wiz"].create( + {"picking_id": self.id} + ) + action["res_id"] = wiz.id + return action + + def _put_in_pack(self, move_line_ids): + nbr_lines_into_package = self.env.context.get("nbr_lines_into_package", False) + if nbr_lines_into_package: + move_line_ids = move_line_ids[:nbr_lines_into_package] + return super()._put_in_pack(move_line_ids) diff --git a/stock_picking_manual_package/models/stock_quant_package.py b/stock_picking_manual_package/models/stock_quant_package.py new file mode 100644 index 000000000..d53c1c348 --- /dev/null +++ b/stock_picking_manual_package/models/stock_quant_package.py @@ -0,0 +1,15 @@ +# Copyright 2022 Sergio Teruel - Tecnativa +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import api, models + + +class StockQuantPackage(models.Model): + _inherit = "stock.quant.package" + + @api.model_create_multi + def create(self, vals_list): + package = self.env.context.get("put_in_pack_package_id", False) + if not package: + return super().create(vals_list) + return package diff --git a/stock_picking_manual_package/readme/CONTRIBUTORS.rst b/stock_picking_manual_package/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..def785d74 --- /dev/null +++ b/stock_picking_manual_package/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Tecnativa `_: + + * Sergio Teruel diff --git a/stock_picking_manual_package/readme/DESCRIPTION.rst b/stock_picking_manual_package/readme/DESCRIPTION.rst new file mode 100644 index 000000000..66ca7ba5f --- /dev/null +++ b/stock_picking_manual_package/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows to create or select a package in picking to 'Put in pack' all done +quantities. diff --git a/stock_picking_manual_package/readme/USAGE.rst b/stock_picking_manual_package/readme/USAGE.rst new file mode 100644 index 000000000..888630558 --- /dev/null +++ b/stock_picking_manual_package/readme/USAGE.rst @@ -0,0 +1,7 @@ +To use this module, you need to: + +#. Go to *Inventory > Transfer* +#. Create a picking +#. Create or select a package +#. Click on put in pack button +#. All lines will have the package selected diff --git a/stock_picking_manual_package/static/description/icon.png b/stock_picking_manual_package/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/stock_picking_manual_package/static/description/icon.png differ diff --git a/stock_picking_manual_package/static/description/index.html b/stock_picking_manual_package/static/description/index.html new file mode 100644 index 000000000..388422f70 --- /dev/null +++ b/stock_picking_manual_package/static/description/index.html @@ -0,0 +1,438 @@ + + + + + + +Stock Picking Manual Package + + + +
+

Stock Picking Manual Package

+ + +

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

+

This module allows to create or select a package in picking to ‘Put in pack’ all done +quantities.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Inventory > Transfer
  2. +
  3. Create a picking
  4. +
  5. Create or select a package
  6. +
  7. Click on put in pack button
  8. +
  9. All lines will have the package selected
  10. +
+
+
+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

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/stock-logistics-warehouse project on GitHub.

+

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

+
+
+
+ + diff --git a/stock_picking_manual_package/tests/__init__.py b/stock_picking_manual_package/tests/__init__.py new file mode 100644 index 000000000..3a2628f81 --- /dev/null +++ b/stock_picking_manual_package/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2022 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_stock_picking_manual_package diff --git a/stock_picking_manual_package/tests/test_stock_picking_manual_package.py b/stock_picking_manual_package/tests/test_stock_picking_manual_package.py new file mode 100644 index 000000000..7116f1dc2 --- /dev/null +++ b/stock_picking_manual_package/tests/test_stock_picking_manual_package.py @@ -0,0 +1,78 @@ +# Copyright 2022 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests import Form +from odoo.tests.common import TransactionCase + + +class TestStockPicking(TransactionCase): + def setUp(self): + super(TestStockPicking, self).setUp() + + # models + self.picking_model = self.env["stock.picking"] + + # warehouse and picking types + self.warehouse = self.env.ref("stock.stock_warehouse_shop0") + self.picking_type_in = self.env.ref("stock.chi_picking_type_in") + self.picking_type_out = self.env.ref("stock.chi_picking_type_out") + self.picking_type_in.show_reserved = True + self.supplier_location = self.env.ref("stock.stock_location_suppliers") + self.customer_location = self.env.ref("stock.stock_location_customers") + self.stock_location = self.warehouse.lot_stock_id + + # Allow all companies for OdooBot user and set default user company + # to warehouse company + companies = self.env["res.company"].search([]) + self.env.user.company_ids = [(6, 0, companies.ids)] + self.env.user.company_id = self.warehouse.company_id + + # products + self.product_8 = self.env.ref("product.product_product_8") + self.product_9 = self.env.ref("product.product_product_9") + self.product_10 = self.env.ref("product.product_product_10") + product_list = [self.product_8, self.product_9, self.product_10] + + # Supplier + self.customer = self.env.ref("base.res_partner_12") + + picking_form = Form( + self.picking_model.with_context( + default_picking_type_id=self.picking_type_in.id + ) + ) + picking_form.picking_type_id = self.picking_type_in + picking_form.location_id = self.supplier_location + picking_form.location_dest_id = self.stock_location + for product in product_list: + with picking_form.move_ids_without_package.new() as line_form: + line_form.product_id = product + line_form.product_uom_qty = 5 + self.picking_in = picking_form.save() + + def test_manual_package(self): + self.picking_in.action_assign() + # Add done quantities + for line in self.picking_in.move_line_ids: + line.qty_done = line.product_uom_qty + action = self.picking_in.with_context(test_manual_package=True).put_in_pack() + self.assertEqual(action["res_model"], "stock.picking.manual.package.wiz") + wiz = self.env["stock.picking.manual.package.wiz"].browse(action["res_id"]) + wiz.package_id = self.env["stock.quant.package"].create({"name": "TEST-0001"}) + package = wiz.action_confirm() + self.assertEqual(package, wiz.package_id) + packages = self.picking_in.move_line_ids.mapped("result_package_id") + self.assertEqual(len(packages), 1) + + def test_manual_package_with_n_lines(self): + self.picking_in.action_assign() + # Add done quantities + for line in self.picking_in.move_line_ids: + line.qty_done = line.product_uom_qty + action = self.picking_in.with_context(test_manual_package=True).put_in_pack() + wiz = self.env["stock.picking.manual.package.wiz"].browse(action["res_id"]) + wiz.package_id = self.env["stock.quant.package"].create({"name": "TEST-0001"}) + wiz.nbr_lines_into_package = 1 + wiz.action_confirm() + packages = self.picking_in.move_line_ids.mapped("result_package_id") + self.assertEqual(len(packages), 1) diff --git a/stock_picking_manual_package/wizards/__init__.py b/stock_picking_manual_package/wizards/__init__.py new file mode 100644 index 000000000..35c9a6470 --- /dev/null +++ b/stock_picking_manual_package/wizards/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2022 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import stock_picking_manual_package_wiz diff --git a/stock_picking_manual_package/wizards/stock_picking_manual_package_wiz.py b/stock_picking_manual_package/wizards/stock_picking_manual_package_wiz.py new file mode 100644 index 000000000..44f90bcc7 --- /dev/null +++ b/stock_picking_manual_package/wizards/stock_picking_manual_package_wiz.py @@ -0,0 +1,29 @@ +# Copyright 2022 Sergio Teruel - Tecnativa +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import fields, models + + +class StockPicking(models.TransientModel): + _name = "stock.picking.manual.package.wiz" + _description = "Stock picking manual package wizard" + + picking_id = fields.Many2one(comodel_name="stock.picking") + package_id = fields.Many2one( + comodel_name="stock.quant.package", + help="If this field is set, when you click on 'Put in pack' all done quantities " + "will be include in this package", + ) + nbr_lines_into_package = fields.Integer( + string="Number lines to packaging", + help="If set, the package will be assigned to the N reserved detailed operations", + ) + + def action_confirm(self): + if not self.package_id: + return self.picking_id.with_context(skip_manual_package=True).put_in_pack() + return self.picking_id.with_context( + put_in_pack_package_id=self.package_id, + skip_manual_package=True, + nbr_lines_into_package=self.nbr_lines_into_package, + ).put_in_pack() diff --git a/stock_picking_manual_package/wizards/stock_picking_manual_package_wizard_view.xml b/stock_picking_manual_package/wizards/stock_picking_manual_package_wizard_view.xml new file mode 100644 index 000000000..5fb75a134 --- /dev/null +++ b/stock_picking_manual_package/wizards/stock_picking_manual_package_wizard_view.xml @@ -0,0 +1,35 @@ + + + + stock.picking.manual.package.wiz.form + stock.picking.manual.package.wiz + +
+

Select or create a package to do 'Put in pack'

+ + + +

Set how many lines you want to 'Put in pack'

+ + + +
+
+
+
+
+ + Stock Picking Manual Package + ir.actions.act_window + stock.picking.manual.package.wiz + form + new + +