From 67171155b8ac8c0ef669fa205e9e170f6266219d Mon Sep 17 00:00:00 2001 From: Iryna Vushnevska Date: Thu, 16 Apr 2020 22:00:04 +0300 Subject: [PATCH] [ADD] stock_picking_fillwithstock --- stock_move_location/README.rst | 14 +++ stock_move_location/__init__.py | 4 - stock_move_location/__manifest__.py | 8 +- stock_move_location/models/__init__.py | 1 + stock_move_location/models/stock_picking.py | 51 +++++++++++ stock_move_location/readme/CONTRIBUTORS.rst | 2 + stock_move_location/readme/USAGE.rst | 10 +++ .../static/description/index.html | 14 ++- stock_move_location/tests/__init__.py | 5 +- .../tests/test_stock_fillwithstock.py | 90 +++++++++++++++++++ stock_move_location/views/stock_picking.xml | 22 +++++ 11 files changed, 210 insertions(+), 11 deletions(-) create mode 100644 stock_move_location/models/stock_picking.py create mode 100644 stock_move_location/tests/test_stock_fillwithstock.py create mode 100644 stock_move_location/views/stock_picking.xml diff --git a/stock_move_location/README.rst b/stock_move_location/README.rst index bdf72e0bf..e9e7048bc 100644 --- a/stock_move_location/README.rst +++ b/stock_move_location/README.rst @@ -59,6 +59,16 @@ If you go to the Inventory Dashboard you can see the button "Move from location" in each of the picking types (only applicable to internal transfers). Press it and you will be directed to the wizard. +If you want transfer everything from stock.location + +On a draft picking, add a button to fill with moves lines for all products in +the source destination. This allows to create a picking to move all the content +of a location. If some quants are not available (i.e. reserved) the picking +will be in partially available state and reserved moves won't be listed in the +operations. +Use barcode interface to scan a location and create an empty picking. Then use +the fill with stock button. + Known issues / Roadmap ====================== @@ -86,6 +96,8 @@ Authors ~~~~~~~ * Julius Network Solutions +* BCIM +* Camptocamp Contributors ~~~~~~~~~~~~ @@ -100,6 +112,8 @@ Contributors * Sergio Teruel * João Marques +* Jacques-Etienne Baudoux +* Iryna Vyshnevska Maintainers ~~~~~~~~~~~ diff --git a/stock_move_location/__init__.py b/stock_move_location/__init__.py index d1dcf0d2a..76d87ae8c 100644 --- a/stock_move_location/__init__.py +++ b/stock_move_location/__init__.py @@ -1,7 +1,3 @@ -# Copyright (C) 2011 Julius Network Solutions SARL -# Copyright 2018 Camptocamp SA -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) - from . import wizard from . import models from .init_hook import enable_multi_locations diff --git a/stock_move_location/__manifest__.py b/stock_move_location/__manifest__.py index 84afed1cf..019e55a8a 100644 --- a/stock_move_location/__manifest__.py +++ b/stock_move_location/__manifest__.py @@ -1,12 +1,15 @@ # Copyright (C) 2011 Julius Network Solutions SARL -# Copyright 2018 Camptocamp SA +# Copyright 2020 Camptocamp SA # Copyright 2020 Tecnativa - João Marques # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) { "name": "Move Stock Location", "version": "14.0.1.0.1", - "author": "Julius Network Solutions, Odoo Community Association (OCA)", + "author": "Julius Network Solutions, " + "BCIM," + "Camptocamp," + "Odoo Community Association (OCA)", "summary": "This module allows to move all stock " "in a stock location to an other one.", "website": "https://github.com/OCA/stock-logistics-warehouse", @@ -17,6 +20,7 @@ "data/stock_quant_view.xml", "security/ir.model.access.csv", "views/stock_picking_type_views.xml", + "views/stock_picking.xml", "wizard/stock_move_location.xml", ], "post_init_hook": "enable_multi_locations", diff --git a/stock_move_location/models/__init__.py b/stock_move_location/models/__init__.py index 58ff9b56b..a44310781 100644 --- a/stock_move_location/models/__init__.py +++ b/stock_move_location/models/__init__.py @@ -3,3 +3,4 @@ from . import stock_move from . import stock_picking_type +from . import stock_picking diff --git a/stock_move_location/models/stock_picking.py b/stock_move_location/models/stock_picking.py new file mode 100644 index 000000000..2df411168 --- /dev/null +++ b/stock_move_location/models/stock_picking.py @@ -0,0 +1,51 @@ +# Copyright Jacques-Etienne Baudoux 2016 Camptocamp +# Copyright Iryna Vyshnevska 2020 Camptocamp +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import _, models +from odoo.exceptions import UserError + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + def button_fillwithstock(self): + # check source location has no children, i.e. we scanned a bin + + self.ensure_one() + self._validate_picking() + context = { + "active_ids": self._get_movable_quants().ids, + "active_model": "stock.quant", + "only_reserved_qty": True, + "planned": True, + } + move_wizard = ( + self.env["wiz.stock.move.location"] + .with_context(context) + .create( + { + "destination_location_id": self.location_dest_id.id, + "origin_location_id": self.location_id.id, + "picking_type_id": self.picking_type_id.id, + "picking_id": self.id, + } + ) + ) + move_wizard._onchange_destination_location_id() + move_wizard.action_move_location() + return True + + def _validate_picking(self): + if self.location_id.child_ids: + raise UserError(_("Please choose a source end location")) + if self.move_lines: + raise UserError(_("Moves lines already exists")) + + def _get_movable_quants(self): + return self.env["stock.quant"].search( + [ + ("location_id", "=", self.location_id.id), + ("quantity", ">", 0.0), + ] + ) diff --git a/stock_move_location/readme/CONTRIBUTORS.rst b/stock_move_location/readme/CONTRIBUTORS.rst index d20d856f0..24f9bbc22 100644 --- a/stock_move_location/readme/CONTRIBUTORS.rst +++ b/stock_move_location/readme/CONTRIBUTORS.rst @@ -8,3 +8,5 @@ * Sergio Teruel * João Marques +* Jacques-Etienne Baudoux +* Iryna Vyshnevska diff --git a/stock_move_location/readme/USAGE.rst b/stock_move_location/readme/USAGE.rst index 53763e43d..80ae46c6e 100644 --- a/stock_move_location/readme/USAGE.rst +++ b/stock_move_location/readme/USAGE.rst @@ -20,3 +20,13 @@ If you want to transfer a full quant: If you go to the Inventory Dashboard you can see the button "Move from location" in each of the picking types (only applicable to internal transfers). Press it and you will be directed to the wizard. + +If you want transfer everything from stock.location + +On a draft picking, add a button to fill with moves lines for all products in +the source destination. This allows to create a picking to move all the content +of a location. If some quants are not available (i.e. reserved) the picking +will be in partially available state and reserved moves won't be listed in the +operations. +Use barcode interface to scan a location and create an empty picking. Then use +the fill with stock button. diff --git a/stock_move_location/static/description/index.html b/stock_move_location/static/description/index.html index eda83735c..fe9cb7172 100644 --- a/stock_move_location/static/description/index.html +++ b/stock_move_location/static/description/index.html @@ -3,7 +3,7 @@ - + Move Stock Location