From b109dbcbf06536f982054be8536d10ffb519cd92 Mon Sep 17 00:00:00 2001 From: yostashiro Date: Mon, 4 May 2026 10:31:59 +0000 Subject: [PATCH] [ADD] stock_move_location: init from OCA/stock-logistics-warehouse --- stock_move_location/README.rst | 173 ++++++ stock_move_location/__init__.py | 3 + stock_move_location/__manifest__.py | 27 + stock_move_location/data/stock_quant_view.xml | 13 + stock_move_location/i18n/de.po | 296 ++++++++++ stock_move_location/i18n/es.po | 289 ++++++++++ stock_move_location/i18n/fr.po | 293 ++++++++++ stock_move_location/i18n/fr_BE.po | 284 ++++++++++ stock_move_location/i18n/fr_FR.po | 274 ++++++++++ stock_move_location/i18n/it.po | 281 ++++++++++ stock_move_location/i18n/ja.po | 287 ++++++++++ stock_move_location/i18n/ja_JP.po | 274 ++++++++++ stock_move_location/i18n/pt.po | 277 ++++++++++ stock_move_location/i18n/sk.po | 301 ++++++++++ .../i18n/stock_move_location.pot | 300 ++++++++++ stock_move_location/init_hook.py | 6 + stock_move_location/models/__init__.py | 6 + stock_move_location/models/stock_move.py | 20 + stock_move_location/models/stock_picking.py | 55 ++ .../models/stock_picking_type.py | 26 + stock_move_location/pyproject.toml | 3 + stock_move_location/readme/CONTRIBUTORS.md | 18 + stock_move_location/readme/DESCRIPTION.md | 2 + stock_move_location/readme/ROADMAP.md | 16 + stock_move_location/readme/USAGE.md | 36 ++ .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 516 ++++++++++++++++++ stock_move_location/tests/__init__.py | 3 + stock_move_location/tests/test_common.py | 185 +++++++ .../tests/test_move_location.py | 353 ++++++++++++ .../tests/test_stock_fillwithstock.py | 85 +++ stock_move_location/views/stock_picking.xml | 20 + .../views/stock_picking_type_views.xml | 34 ++ stock_move_location/wizard/__init__.py | 6 + .../wizard/stock_move_location.py | 372 +++++++++++++ .../wizard/stock_move_location.xml | 186 +++++++ .../wizard/stock_move_location_line.py | 146 +++++ 38 files changed, 5469 insertions(+) create mode 100644 stock_move_location/README.rst create mode 100644 stock_move_location/__init__.py create mode 100644 stock_move_location/__manifest__.py create mode 100644 stock_move_location/data/stock_quant_view.xml create mode 100644 stock_move_location/i18n/de.po create mode 100644 stock_move_location/i18n/es.po create mode 100644 stock_move_location/i18n/fr.po create mode 100644 stock_move_location/i18n/fr_BE.po create mode 100644 stock_move_location/i18n/fr_FR.po create mode 100644 stock_move_location/i18n/it.po create mode 100644 stock_move_location/i18n/ja.po create mode 100644 stock_move_location/i18n/ja_JP.po create mode 100644 stock_move_location/i18n/pt.po create mode 100644 stock_move_location/i18n/sk.po create mode 100644 stock_move_location/i18n/stock_move_location.pot create mode 100644 stock_move_location/init_hook.py create mode 100644 stock_move_location/models/__init__.py create mode 100644 stock_move_location/models/stock_move.py create mode 100644 stock_move_location/models/stock_picking.py create mode 100644 stock_move_location/models/stock_picking_type.py create mode 100644 stock_move_location/pyproject.toml create mode 100644 stock_move_location/readme/CONTRIBUTORS.md create mode 100644 stock_move_location/readme/DESCRIPTION.md create mode 100644 stock_move_location/readme/ROADMAP.md create mode 100644 stock_move_location/readme/USAGE.md create mode 100644 stock_move_location/security/ir.model.access.csv create mode 100644 stock_move_location/static/description/icon.png create mode 100644 stock_move_location/static/description/index.html create mode 100644 stock_move_location/tests/__init__.py create mode 100644 stock_move_location/tests/test_common.py create mode 100644 stock_move_location/tests/test_move_location.py create mode 100644 stock_move_location/tests/test_stock_fillwithstock.py create mode 100644 stock_move_location/views/stock_picking.xml create mode 100644 stock_move_location/views/stock_picking_type_views.xml create mode 100644 stock_move_location/wizard/__init__.py create mode 100644 stock_move_location/wizard/stock_move_location.py create mode 100644 stock_move_location/wizard/stock_move_location.xml create mode 100644 stock_move_location/wizard/stock_move_location_line.py diff --git a/stock_move_location/README.rst b/stock_move_location/README.rst new file mode 100644 index 0000000..084e586 --- /dev/null +++ b/stock_move_location/README.rst @@ -0,0 +1,173 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +=================== +Move Stock Location +=================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:792445e5024062bee785b19642189b2500b863643ed32db16d168d433c7dc7fd + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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 + :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/18.0/stock_move_location + :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-18-0/stock-logistics-warehouse-18-0-stock_move_location + :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/stock-logistics-warehouse&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to move entire location of products from one place to +another and move only selected quantities. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +- A new menu item Operations > Move from location... opens a wizard + where 2 locations can be specified. +- Select origin and destination locations and press "IMMEDIATE TRANSFER" + or "PLANNED TRANSFER" +- Those lines can be edited. Move quantity can't be more than a max + available quantity +- Move doesn't care about the reservations and will move stuff anyway +- If during your operation with the wizard the real quantity will change + it will move only the available quantity at the button press +- Products will be moved and a form view of picking that did that will + show up +- If "PLANNED TRANSFER" is used - the picking won't be validated + automatically + +If you want to transfer a full quant: + +- Go to Inventory > Products > Products and click "On hand" smart button + or Inventory > Reporting > Inventory, the quants view will be opened. +- Select the quantities which you want move to another location + +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 and +outgoing transfers). Press it and you will be directed to the wizard. + +|image1| + +To enable this option, check "Show Move On Hand Stock" in the Picking +Type configuration. + +|image2| + +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. The Origin Location must have stock. +The Destination Location has to be a final 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. + +.. |image1| image:: https://user-images.githubusercontent.com/147538094/281480833-208ea309-0bad-43e7-bd6f-8384520afe00.png +.. |image2| image:: https://user-images.githubusercontent.com/147538094/281479487-45fa4bde-36be-4ba1-8d54-8e707b89459e.png + +Known issues / Roadmap +====================== + +Change the current implementation (suggested by Denis Roussel from +ACSONE): + +- A new parameter on stock picking types : 'Product Change Location' + (with a little help). +- With this, go to the dashboard, create a picking with that type. +- Add a button on the picking form which is visible with that type that + fill in the picking as now +- Nice to have: add a magic button on locations that with context + creates a new picking of that type with the origin location already + filled in. + +Note from Jacques-Etienne Baudoux (BCIM) + +- The fill with stock action on stock.picking should not create manually + the move lines but instead call ``action_assign()``. There are many + modules hooking ``action_assign`` that are not called due to this. + +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 +------- + +* Julius Network Solutions +* BCIM +* Camptocamp + +Contributors +------------ + +- Mathieu Vatel +- Mykhailo Panarin +- Joan Sisquella +- Jordi Ballester Alomar +- Lois Rilo +- Héctor Villarreal +- Tecnativa + + - Sergio Teruel + - João Marques + - Carlos Roca + +- Jacques-Etienne Baudoux +- Iryna Vyshnevska +- Alexei Rivera +- Abraham Anes +- Quartile + + - Aung Ko Ko Lin + +- Laurent Mignon +- Maksym Yankin + +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_move_location/__init__.py b/stock_move_location/__init__.py new file mode 100644 index 0000000..76d87ae --- /dev/null +++ b/stock_move_location/__init__.py @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..169e6f0 --- /dev/null +++ b/stock_move_location/__manifest__.py @@ -0,0 +1,27 @@ +# Copyright (C) 2011 Julius Network Solutions SARL +# Copyright 2018 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": "18.0.1.0.1", + "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", + "license": "AGPL-3", + "depends": ["stock"], + "category": "Stock", + "data": [ + "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/data/stock_quant_view.xml b/stock_move_location/data/stock_quant_view.xml new file mode 100644 index 0000000..8688587 --- /dev/null +++ b/stock_move_location/data/stock_quant_view.xml @@ -0,0 +1,13 @@ + + + + + Move to location... + wiz.stock.move.location + + form + + new + + + diff --git a/stock_move_location/i18n/de.po b/stock_move_location/i18n/de.po new file mode 100644 index 0000000..f878c54 --- /dev/null +++ b/stock_move_location/i18n/de.po @@ -0,0 +1,296 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-10-25 14:33+0000\n" +"Last-Translator: Stefan Wild \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 3.8\n" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "Abbrechen" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "Verbundene Bewegung" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "Angepasste Zeile" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "Ziellagerort" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +#, fuzzy +msgid "Destination Location Disable" +msgstr "Ziellagerort" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +#, fuzzy +msgid "Edit Locations" +msgstr "Quelllagerort" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "ID" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "Sofortige Lieferung" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "Zuletzt geändert von" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "Zuletzt geändert am" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "Lot/Seriennummer" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "Maximal verfügbare Menge" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "Lagerort Buchungszeilen" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "Von Lagerort bewegen..." + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "Umlagerungsassistent" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "Die Menge darf nicht die Bestandsmenge überschreiten oder negativ sein" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "Zu Lagerort bewegen..." + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "Quelllagerort" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +#, fuzzy +msgid "Origin Location Disable" +msgstr "Quelllagerort" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "Teil der Lagerortbewegung" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "Geplante Bewegung" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "Produkt" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "Produkt Maßeinheit" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "Anzahl" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "Lagerbewegung" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "Einheit" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "Ist diese Bewegung Teil der Lagerortbewegungen" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +#, fuzzy +msgid "Wizard move location" +msgstr "Teil der Lagerortbewegung" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +#, fuzzy +msgid "Wizard move location line" +msgstr "Lagerort Buchungszeilen" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "" + +#~ msgid "Inventory Details" +#~ msgstr "Bestand Details" + +#~ msgid "Add all" +#~ msgstr "Alle hinzufügen" + +#~ msgid "Clear all" +#~ msgstr "Alle entfernen" + +#~ msgid "wiz.stock.move.location" +#~ msgstr "wiz.stock.move.location" + +#~ msgid "wiz.stock.move.location.line" +#~ msgstr "wiz.stock.move.location.line" diff --git a/stock_move_location/i18n/es.po b/stock_move_location/i18n/es.po new file mode 100644 index 0000000..76efec9 --- /dev/null +++ b/stock_move_location/i18n/es.po @@ -0,0 +1,289 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-11-02 20:30+0000\n" +"PO-Revision-Date: 2023-07-27 23:12+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\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: Weblate 4.17\n" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "Aplicar la estrategia de salida" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "Aplicar estrategia de traslado para los movimientos de producto" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "Operación relacionada" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "Línea personalizada" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "Ubicación de destino" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "Ubicación de destino desactivada" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +msgid "Edit Locations" +msgstr "(editar)" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "Rellenar con existencias" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "Desde el Propietario" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "ID" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "Transferencia Inmediata" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "Lote/Número de serie" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "Cantidad máxima disponible" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "Líneas de movimiento de Ubicación" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "Disponible" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "Mover desde ubicación..." + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "Asistente para mover desde ubicación" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "La cantidad movida no puede superar la cantidad máxima o ser negativo" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "Mover a ubicación..." + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "Desplaza las líneas ya existentes" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "Ubicación de origen" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "Ubicación origen desactivada" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "Número del paquete" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "Parte de un movimiento entre ubicaciones" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "Tipo de operación" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "Transferencia Planificada" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "Por favor elija una ubicación final de origen" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "Producto" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "Unidad de medida" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "Cantidad a mover" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "Cantidad Reservada" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "Mostrar cantidad disponible" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" +"Muestre un botón \"Mover en existencias\" en el panel de control de " +"inventario para iniciar el proceso de mover los productos en existencias en " +"la ubicación de origen." + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "Transferencia" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "UdM" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "Si este movimiento es parte de movimiento de ubicaciones" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "Asistente para mover ubicación" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "Asistente para mover línea de ubicación" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "campo técnico para desactivar la edición de la ubicación de destino." + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "campo técnico para desactivar la edición de la ubicación de origen." + +#~ msgid "Apply putaway strategy" +#~ msgstr "Aplicar estrategia de traslado" + +#~ msgid "Inventory Details" +#~ msgstr "Detalles de Inventario" + +#~ msgid "Reserved quantity" +#~ msgstr "Cantidad Reservada" diff --git a/stock_move_location/i18n/fr.po b/stock_move_location/i18n/fr.po new file mode 100644 index 0000000..8df046d --- /dev/null +++ b/stock_move_location/i18n/fr.po @@ -0,0 +1,293 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-29 13:37+0000\n" +"Last-Translator: yassine-rhimi \n" +"Language-Team: none\n" +"Language: 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.17\n" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "Appliquer la stratégie de rangement" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "Appliquer la stratégie de rangement pour les articles déplacés" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "Annuler" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "Transfert lié" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "Ligne sur mesure" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "Emplacement de Destination" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "Désactiver l'Emplacement de Destination" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +msgid "Edit Locations" +msgstr "Modifier les Emplacements" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "Remplir de stock" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "Du propriétaire" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "ID" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "Transfert Immédiat" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "Modifié le" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "Lot/Numéro de Série" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "Quantité maximale disponible" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "Lignes à changer d'Emplacement" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "Déplacer" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "Déplacer depuis l'emplacement..." + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "Assistant de changement d'emplacement" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "" +"Les quantités à déplacer ne peuvent dépasser la quantité maximale ou être " +"négatives" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "Déplacer vers l'emplacement..." + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "Déplace les lignes déjà existantes" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "Emplacement d'Origine" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "Désactiver l'Emplacement d'Origine" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "Numéro du paquet" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "Fait partie d'un déplacement d'emplacement" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "Type d'Opération" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "Transfert Planifié" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "Veuillez choisir un lieu de fin de source" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "Article" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "Unité de Mesure de l'Article" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "Quantité à déplacer" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "Quantité réservée" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "Montrer les quantités disponibles en stock" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" +"Affiche un bouton \"Déplacer\" dans le Tableau de Bord de l'inventaire pour " +"démarrer l'opération de déplacement des articles disponibles dans " +"l'emplacement d'origine." + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "Opération" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "UdM" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "Est-ce que cette opération fait partie d'un déplacement d'emplacement" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "Assistant de déplacement" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "Ligne de l'assistant de déplacement" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" +"champ technique pour désactiver la modification de l'emplacement de " +"destination." + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "" +"champ technique pour désactiver la modification de l'emplacement d'origine." + +#~ msgid "Apply putaway strategy" +#~ msgstr "Appliquer la stratégie de rangement" + +#~ msgid "Inventory Details" +#~ msgstr "Détails de l'Inventaire" + +#~ msgid "Reserved quantity" +#~ msgstr "Quantité réservée" diff --git a/stock_move_location/i18n/fr_BE.po b/stock_move_location/i18n/fr_BE.po new file mode 100644 index 0000000..f6c19b0 --- /dev/null +++ b/stock_move_location/i18n/fr_BE.po @@ -0,0 +1,284 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_picking_fillwithstock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-22 08:26+0000\n" +"PO-Revision-Date: 2017-01-22 08:26+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +msgid "Edit Locations" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "Remplir avec le stock" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "Veuillez choisir un emplacement source physique" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "Transfert" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "" + +#, python-format +#~ msgid "Moves lines already exsits" +#~ msgstr "Des lignes existent déjà" + +#, python-format +#~ msgid "Nothing to move" +#~ msgstr "Rien à déplacer" diff --git a/stock_move_location/i18n/fr_FR.po b/stock_move_location/i18n/fr_FR.po new file mode 100644 index 0000000..60968e4 --- /dev/null +++ b/stock_move_location/i18n/fr_FR.po @@ -0,0 +1,274 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +msgid "Edit Locations" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "" diff --git a/stock_move_location/i18n/it.po b/stock_move_location/i18n/it.po new file mode 100644 index 0000000..e1f93ab --- /dev/null +++ b/stock_move_location/i18n/it.po @@ -0,0 +1,281 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-08-22 10:06+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 5.6.2\n" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "Applica regole inoltro" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "Applica regole inoltro per prodotti movimentati" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "Annulla" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "Prelievo collegato" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "Riga personalizzata" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "Ubicazione di destinazione" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "Disabilita ubicazione di destinazione" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +msgid "Edit Locations" +msgstr "Modifica ubicazioni" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "Riempi con giacenza" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "Dal proprietario" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "ID" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "Trasferimento immediato" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "Numero di lotto/serie" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "Massima quantità disponibile" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "Righe movimento ubicazione" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "Sposta disponibile" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "Sposta da ubicazione..." + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "Procedura guidata movimento ubicazione" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "" +"La quantità spostata non può superare la quantità massima o essere negativa" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "Sposta all'ubicazione..." + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "Le righe di spostamento esistono già" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "Ubicazione di origine" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "Disabilita ubicazione di origine" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "Numero collo" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "Parte di un movimento ubicazione" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "Tipo prelievo" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "Trasferimento pianificato" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "Selezionare ubicazione destinazione" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "Prodotto" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "Unità di misura del prodotto" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "Quantità da spostare" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "Quantità riservata" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "Mostra quantità in giacenza" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" +"Mostra un pulsante 'Sposta disponibile' nella panoramica del magazzino per " +"iniziare il processo per spostare i prodotti in magazzino dalla destinazione " +"di origine." + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "Movimento di magazzino" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "Trasferimento" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "UdM" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "Se questo movimento fa parte dei movimenti tra ubicazioni" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "Procedura guidata spostamento ubicazione" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "Riga procedura guidata spostamento ubicazione" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" +"campo tecnico per disabilitare la modifica delle ubicazioni di destinazione." + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "campo tecnico per disabilitare la modifica dell'ubicazione di origine." diff --git a/stock_move_location/i18n/ja.po b/stock_move_location/i18n/ja.po new file mode 100644 index 0000000..e92f5c3 --- /dev/null +++ b/stock_move_location/i18n/ja.po @@ -0,0 +1,287 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-01-11 08:23+0000\n" +"Last-Translator: Wang-TKurata \n" +"Language-Team: none\n" +"Language: ja\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.14.1\n" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "移動品目に置場規則を適用する" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "キャンセル" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "対象のピッキング" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "作成者" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "作成日" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "カスタムライン" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "移動先ロケーション" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "移動先ロケーション無効" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "名称" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +msgid "Edit Locations" +msgstr "保管場所の編集" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "ID" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "即時在庫移動" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "最終更新日" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "ロット/シリアル" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "最大使用可能数量" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "在庫移動明細" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "手持在庫からの移動" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "保管場所からの移動..." + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "保管場所移動ウィザード" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "移動数量は、最大在庫数を超えるかマイナスになってはなりません" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "保管場所への移動..." + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "移動元" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "移動元無効" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "ピッキングタイプ" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "在庫移動伝票を作成" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "プロダクト" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "単位" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "数量" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "手持在庫移動数を表示" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" +"在庫ダッシュボード内に'手持在庫移動'ボタンを表示し、移動元保管場所からの在庫" +"移動を開始します。" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "在庫移動" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "単位" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "この在庫移動が stock_location の移動であるかどうか" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "在庫移動ウィザード" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "在庫移動明細ウィザード" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "移動先保管場所の編集を無効にする技術フィールド。" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "移動元保管場所の編集を無効にする技術フィールド。" + +#~ msgid "Apply putaway strategy" +#~ msgstr "置場規則を適用する" + +#~ msgid "Inventory Details" +#~ msgstr "在庫詳細" + +#~ msgid "Reserved quantity" +#~ msgstr "予約済数" diff --git a/stock_move_location/i18n/ja_JP.po b/stock_move_location/i18n/ja_JP.po new file mode 100644 index 0000000..2a20185 --- /dev/null +++ b/stock_move_location/i18n/ja_JP.po @@ -0,0 +1,274 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja_JP\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" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +msgid "Edit Locations" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "" diff --git a/stock_move_location/i18n/pt.po b/stock_move_location/i18n/pt.po new file mode 100644 index 0000000..68e3231 --- /dev/null +++ b/stock_move_location/i18n/pt.po @@ -0,0 +1,277 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-03 16:36+0000\n" +"Last-Translator: Daniel Reis \n" +"Language-Team: none\n" +"Language: pt\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: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "Aplicar a estratégia de saída" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "Aplicar a estratégia de saída para os produtos a transferir" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "Operação relacionada" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "Linha personalizada" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "Local de destino" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "Desativar local de destino" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "Nome de apresentação" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +msgid "Edit Locations" +msgstr "(editar)" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "Preencher com existências" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "Do Proprietário" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +#, fuzzy +msgid "ID" +msgstr "ID" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "Transferência Imediata" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location____last_update +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line____last_update +msgid "Last Modified on" +msgstr "Última alteração em" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "Última alteração por" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "Última alteração em" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "Lote/Número de série" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "Quantidade máxima disponível" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "Linhas de Movimento de Local" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "Disponível" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "Mover do local..." + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +#, python-format +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Moves lines already exists" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +#, python-format +msgid "Please choose a source end location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "" diff --git a/stock_move_location/i18n/sk.po b/stock_move_location/i18n/sk.po new file mode 100644 index 0000000..711a3fe --- /dev/null +++ b/stock_move_location/i18n/sk.po @@ -0,0 +1,301 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__company_id +msgid "Company" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Edit Locations" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__exclude_reserved_qty +msgid "Exclude Reserved Qty" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Exclude Reserved Quantities" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Lot/SN:" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +msgid "Moves lines already exists" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +msgid "Please choose a source end location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__total_quantity +msgid "Total existence quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Unit of Measure" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "" diff --git a/stock_move_location/i18n/stock_move_location.pot b/stock_move_location/i18n/stock_move_location.pot new file mode 100644 index 0000000..acaca01 --- /dev/null +++ b/stock_move_location/i18n/stock_move_location.pot @@ -0,0 +1,300 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.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: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__apply_putaway_strategy +msgid "Apply Putaway Strategy" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Apply putaway strategy for moving products" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Cancel" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__company_id +msgid "Company" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_id +msgid "Connected Picking" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__create_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__create_date +msgid "Created on" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__custom +msgid "Custom line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__destination_location_id +msgid "Destination Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "Destination Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__display_name +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__edit_locations +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Edit Locations" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__exclude_reserved_qty +msgid "Exclude Reserved Qty" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Exclude Reserved Quantities" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_picking_form +msgid "Fill with stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__owner_id +msgid "From Owner" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__id +msgid "ID" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Immediate Transfer" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_uid +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__write_date +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Lot/SN:" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__lot_id +msgid "Lot/Serial Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__max_quantity +msgid "Maximum available quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__stock_move_location_line_ids +msgid "Move Location lines" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.stock_picking_type_kanban +msgid "Move On Hand" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_move_location_action +#: model:ir.ui.menu,name:stock_move_location.menuitem_move_location +msgid "Move from location..." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_location_wizard_id +msgid "Move location Wizard" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/wizard/stock_move_location_line.py:0 +msgid "Move quantity can not exceed max quantity or be negative" +msgstr "" + +#. module: stock_move_location +#: model:ir.actions.act_window,name:stock_move_location.wiz_stock_quant_location_action +msgid "Move to location..." +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +msgid "Moves lines already exists" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_id +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__origin_location_id +msgid "Origin Location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "Origin Location Disable" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__package_id +msgid "Package Number" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_move__location_move +msgid "Part of move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking_type +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location__picking_type_id +msgid "Picking Type" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Planned Transfer" +msgstr "" + +#. module: stock_move_location +#. odoo-python +#: code:addons/stock_move_location/models/stock_picking.py:0 +msgid "Please choose a source end location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_id +msgid "Product" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__product_uom_id +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__move_quantity +msgid "Quantity to move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__reserved_quantity +msgid "Reserved Quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "Show Move On hand stock" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_picking_type__show_move_onhand +msgid "" +"Show a button 'Move On Hand' in the Inventory Dashboard to initiate the " +"process to move the products in stock at the origin location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,field_description:stock_move_location.field_wiz_stock_move_location_line__total_quantity +msgid "Total existence quantity" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "Unit of Measure" +msgstr "" + +#. module: stock_move_location +#: model_terms:ir.ui.view,arch_db:stock_move_location.view_wiz_stock_move_location_form_stock_move_location +msgid "UoM" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_stock_move__location_move +msgid "Whether this move is a part of stock_location moves" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location +msgid "Wizard move location" +msgstr "" + +#. module: stock_move_location +#: model:ir.model,name:stock_move_location.model_wiz_stock_move_location_line +msgid "Wizard move location line" +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__destination_location_disable +msgid "technical field to disable the edition of destination location." +msgstr "" + +#. module: stock_move_location +#: model:ir.model.fields,help:stock_move_location.field_wiz_stock_move_location__origin_location_disable +msgid "technical field to disable the edition of origin location." +msgstr "" diff --git a/stock_move_location/init_hook.py b/stock_move_location/init_hook.py new file mode 100644 index 0000000..47a2142 --- /dev/null +++ b/stock_move_location/init_hook.py @@ -0,0 +1,6 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +def enable_multi_locations(env): + ResConfig = env["res.config.settings"] + default_values = ResConfig.default_get(list(ResConfig.fields_get())) + default_values.update({"group_stock_multi_locations": True}) + ResConfig.create(default_values).execute() diff --git a/stock_move_location/models/__init__.py b/stock_move_location/models/__init__.py new file mode 100644 index 0000000..a443107 --- /dev/null +++ b/stock_move_location/models/__init__.py @@ -0,0 +1,6 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from . import stock_move +from . import stock_picking_type +from . import stock_picking diff --git a/stock_move_location/models/stock_move.py b/stock_move_location/models/stock_move.py new file mode 100644 index 0000000..d6f517f --- /dev/null +++ b/stock_move_location/models/stock_move.py @@ -0,0 +1,20 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import api, fields, models + + +class StockMove(models.Model): + _inherit = "stock.move" + + location_move = fields.Boolean( + string="Part of move location", + help="Whether this move is a part of stock_location moves", + ) + + @api.depends("location_move") + def _compute_show_details_visible(self): + res = super()._compute_show_details_visible() + for move in self.filtered(lambda x: x.location_move): + move.show_details_visible = True + return res diff --git a/stock_move_location/models/stock_picking.py b/stock_move_location/models/stock_picking.py new file mode 100644 index 0000000..199220e --- /dev/null +++ b/stock_move_location/models/stock_picking.py @@ -0,0 +1,55 @@ +# Copyright 2016 Jacques-Etienne Baudoux (BCIM) +# 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", + "planned": True, + } + # FIXME: this action should not bypass the call to action_assign !!! + 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, + "apply_putaway_strategy": True, + } + ) + ) + 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_ids: + 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), + ] + ) + .filtered(lambda quant: quant.quantity - quant.reserved_quantity > 0.0) + ) diff --git a/stock_move_location/models/stock_picking_type.py b/stock_move_location/models/stock_picking_type.py new file mode 100644 index 0000000..0bb437f --- /dev/null +++ b/stock_move_location/models/stock_picking_type.py @@ -0,0 +1,26 @@ +# Copyright 2019 Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class StockPickingType(models.Model): + _inherit = "stock.picking.type" + + show_move_onhand = fields.Boolean( + string="Show Move On hand stock", + help="Show a button 'Move On Hand' in the Inventory Dashboard " + "to initiate the process to move the products in stock " + "at the origin location.", + ) + + def action_move_location(self): + action = self.env.ref( + "stock_move_location.wiz_stock_move_location_action" + ).read()[0] + action["context"] = { + "default_origin_location_id": self.default_location_src_id.id, + "default_destination_location_id": self.default_location_dest_id.id, + "default_picking_type_id": self.id, + "default_edit_locations": False, + } + return action diff --git a/stock_move_location/pyproject.toml b/stock_move_location/pyproject.toml new file mode 100644 index 0000000..4231d0c --- /dev/null +++ b/stock_move_location/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/stock_move_location/readme/CONTRIBUTORS.md b/stock_move_location/readme/CONTRIBUTORS.md new file mode 100644 index 0000000..a9f4054 --- /dev/null +++ b/stock_move_location/readme/CONTRIBUTORS.md @@ -0,0 +1,18 @@ +- Mathieu Vatel \<\> +- Mykhailo Panarin \<\> +- Joan Sisquella \<\> +- Jordi Ballester Alomar \<\> +- Lois Rilo \<\> +- Héctor Villarreal \<\> +- Tecnativa \ + - Sergio Teruel + - João Marques + - Carlos Roca +- Jacques-Etienne Baudoux \<\> +- Iryna Vyshnevska \<\> +- Alexei Rivera \<\> +- Abraham Anes \<\> +- Quartile \<\> + - Aung Ko Ko Lin +- Laurent Mignon \<\> +- Maksym Yankin \<\> diff --git a/stock_move_location/readme/DESCRIPTION.md b/stock_move_location/readme/DESCRIPTION.md new file mode 100644 index 0000000..40d1bde --- /dev/null +++ b/stock_move_location/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module allows to move entire location of products from one place to +another and move only selected quantities. diff --git a/stock_move_location/readme/ROADMAP.md b/stock_move_location/readme/ROADMAP.md new file mode 100644 index 0000000..9d8ed9f --- /dev/null +++ b/stock_move_location/readme/ROADMAP.md @@ -0,0 +1,16 @@ +Change the current implementation (suggested by Denis Roussel from +ACSONE): + +- A new parameter on stock picking types : 'Product Change Location' + (with a little help). +- With this, go to the dashboard, create a picking with that type. +- Add a button on the picking form which is visible with that type that + fill in the picking as now +- Nice to have: add a magic button on locations that with context + creates a new picking of that type with the origin location already + filled in. + +Note from Jacques-Etienne Baudoux (BCIM) +- The fill with stock action on stock.picking should not create manually the + move lines but instead call `action_assign()`. There are many modules hooking + `action_assign` that are not called due to this. diff --git a/stock_move_location/readme/USAGE.md b/stock_move_location/readme/USAGE.md new file mode 100644 index 0000000..f177e25 --- /dev/null +++ b/stock_move_location/readme/USAGE.md @@ -0,0 +1,36 @@ +- A new menu item Operations \> Move from location... opens a wizard where 2 locations + can be specified. +- Select origin and destination locations and press "IMMEDIATE TRANSFER" or "PLANNED + TRANSFER" +- Those lines can be edited. Move quantity can't be more than a max available quantity +- Move doesn't care about the reservations and will move stuff anyway +- If during your operation with the wizard the real quantity will change it will move + only the available quantity at the button press +- Products will be moved and a form view of picking that did that will show up +- If "PLANNED TRANSFER" is used - the picking won't be validated automatically + +If you want to transfer a full quant: + +- Go to Inventory \> Products \> Products and click "On hand" smart button or Inventory + \> Reporting \> Inventory, the quants view will be opened. +- Select the quantities which you want move to another location + +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 and outgoing transfers). Press it and +you will be directed to the wizard. + +![](https://user-images.githubusercontent.com/147538094/281480833-208ea309-0bad-43e7-bd6f-8384520afe00.png) + +To enable this option, check "Show Move On Hand Stock" in the Picking Type +configuration. + +![](https://user-images.githubusercontent.com/147538094/281479487-45fa4bde-36be-4ba1-8d54-8e707b89459e.png) + +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. The +Origin Location must have stock. The Destination Location has to be a final 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/security/ir.model.access.csv b/stock_move_location/security/ir.model.access.csv new file mode 100644 index 0000000..b41b028 --- /dev/null +++ b/stock_move_location/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_wiz_stock_move_location,access wiz.stock.move.location,model_wiz_stock_move_location,stock.group_stock_user,1,1,1,1 +access_wiz_stock_move_location_line,access wiz.stock.move.location.line,model_wiz_stock_move_location_line,stock.group_stock_user,1,1,1,1 diff --git a/stock_move_location/static/description/icon.png b/stock_move_location/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/stock_move_location/static/description/index.html b/stock_move_location/static/description/index.html new file mode 100644 index 0000000..e5b8a6b --- /dev/null +++ b/stock_move_location/static/description/index.html @@ -0,0 +1,516 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Move Stock Location

+ +

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

+

This module allows to move entire location of products from one place to +another and move only selected quantities.

+

Table of contents

+ +
+

Usage

+
    +
  • A new menu item Operations > Move from location… opens a wizard +where 2 locations can be specified.
  • +
  • Select origin and destination locations and press “IMMEDIATE TRANSFER” +or “PLANNED TRANSFER”
  • +
  • Those lines can be edited. Move quantity can’t be more than a max +available quantity
  • +
  • Move doesn’t care about the reservations and will move stuff anyway
  • +
  • If during your operation with the wizard the real quantity will change +it will move only the available quantity at the button press
  • +
  • Products will be moved and a form view of picking that did that will +show up
  • +
  • If “PLANNED TRANSFER” is used - the picking won’t be validated +automatically
  • +
+

If you want to transfer a full quant:

+
    +
  • Go to Inventory > Products > Products and click “On hand” smart button +or Inventory > Reporting > Inventory, the quants view will be opened.
  • +
  • Select the quantities which you want move to another location
  • +
+

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 and +outgoing transfers). Press it and you will be directed to the wizard.

+

image1

+

To enable this option, check “Show Move On Hand Stock” in the Picking +Type configuration.

+

image2

+

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. The Origin Location must have stock. +The Destination Location has to be a final 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

+

Change the current implementation (suggested by Denis Roussel from +ACSONE):

+
    +
  • A new parameter on stock picking types : ‘Product Change Location’ +(with a little help).
  • +
  • With this, go to the dashboard, create a picking with that type.
  • +
  • Add a button on the picking form which is visible with that type that +fill in the picking as now
  • +
  • Nice to have: add a magic button on locations that with context +creates a new picking of that type with the origin location already +filled in.
  • +
+

Note from Jacques-Etienne Baudoux (BCIM)

+
    +
  • The fill with stock action on stock.picking should not create manually +the move lines but instead call action_assign(). There are many +modules hooking action_assign that are not called due to this.
  • +
+
+
+

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

+
    +
  • Julius Network Solutions
  • +
  • BCIM
  • +
  • Camptocamp
  • +
+
+
+

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_move_location/tests/__init__.py b/stock_move_location/tests/__init__.py new file mode 100644 index 0000000..315ff51 --- /dev/null +++ b/stock_move_location/tests/__init__.py @@ -0,0 +1,3 @@ +from . import test_common +from . import test_move_location +from . import test_stock_fillwithstock diff --git a/stock_move_location/tests/test_common.py b/stock_move_location/tests/test_common.py new file mode 100644 index 0000000..7aa5c1d --- /dev/null +++ b/stock_move_location/tests/test_common.py @@ -0,0 +1,185 @@ +# Copyright (C) 2011 Julius Network Solutions SARL +# Copyright 2018 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) +from odoo.tests import Form + +from odoo.addons.base.tests.common import BaseCommon + + +class TestsCommon(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.location_obj = cls.env["stock.location"] + cls.product_obj = cls.env["product.product"] + cls.wizard_obj = cls.env["wiz.stock.move.location"] + cls.quant_obj = cls.env["stock.quant"] + cls.company = cls.env.ref("base.main_company") + cls.partner = cls.env.ref("base.res_partner_category_0") + + cls.internal_loc_1 = cls.location_obj.create( + { + "name": "INT_1", + "usage": "internal", + "active": True, + "company_id": cls.company.id, + } + ) + cls.internal_loc_2 = cls.location_obj.create( + { + "name": "INT_2", + "usage": "internal", + "active": True, + "company_id": cls.company.id, + } + ) + cls.internal_loc_2_shelf = cls.location_obj.create( + { + "name": "Shelf", + "usage": "internal", + "active": True, + "company_id": cls.company.id, + "location_id": cls.internal_loc_2.id, + } + ) + cls.uom_unit = cls.env.ref("uom.product_uom_unit") + cls.product_no_lots = cls.product_obj.create( + {"name": "Pineapple", "is_storable": True, "tracking": "none"} + ) + cls.product_lots = cls.product_obj.create( + {"name": "Apple", "is_storable": True, "tracking": "lot"} + ) + cls.product_package = cls.product_obj.create( + {"name": "Orange", "is_storable": True, "tracking": "lot"} + ) + cls.lot1 = cls.env["stock.lot"].create( + { + "name": "lot1", + "product_id": cls.product_lots.id, + "company_id": cls.company.id, + } + ) + cls.lot2 = cls.env["stock.lot"].create( + { + "name": "lot2", + "product_id": cls.product_lots.id, + "company_id": cls.company.id, + } + ) + cls.lot3 = cls.env["stock.lot"].create( + { + "name": "lot3", + "product_id": cls.product_lots.id, + "company_id": cls.company.id, + } + ) + cls.product_package = cls.product_obj.create( + {"name": "Orange", "is_storable": True, "tracking": "lot"} + ) + cls.lot4 = cls.env["stock.lot"].create( + { + "name": "lot4", + "product_id": cls.product_package.id, + "company_id": cls.company.id, + } + ) + cls.lot5 = cls.env["stock.lot"].create( + { + "name": "lot5", + "product_id": cls.product_package.id, + "company_id": cls.company.id, + } + ) + cls.package = cls.env["stock.quant.package"].create({}) + cls.package1 = cls.env["stock.quant.package"].create({}) + + cls.package2 = cls.env["stock.quant.package"].create({}) + + @classmethod + def setup_product_amounts(cls): + cls.set_product_amount(cls.product_no_lots, cls.internal_loc_1, 123) + cls.set_product_amount( + cls.product_lots, cls.internal_loc_1, 1.0, lot_id=cls.lot1 + ) + cls.set_product_amount( + cls.product_lots, cls.internal_loc_1, 1.0, lot_id=cls.lot2 + ) + cls.set_product_amount( + cls.product_lots, cls.internal_loc_1, 1.0, lot_id=cls.lot3 + ) + cls.set_product_amount( + cls.product_package, + cls.internal_loc_1, + 1.0, + lot_id=cls.lot4, + package_id=cls.package, + ) + cls.set_product_amount( + cls.product_package, + cls.internal_loc_1, + 1.0, + lot_id=cls.lot4, + package_id=cls.package1, + ) + cls.set_product_amount( + cls.product_package, + cls.internal_loc_1, + 1.0, + lot_id=cls.lot5, + package_id=cls.package2, + owner_id=cls.partner, + ) + + @classmethod + def set_product_amount( + cls, product, location, amount, lot_id=None, package_id=None, owner_id=None + ): + cls.env["stock.quant"]._update_available_quantity( + product, + location, + amount, + lot_id=lot_id, + package_id=package_id, + owner_id=owner_id, + ) + + def check_product_amount( + self, product, location, amount, lot_id=None, package_id=None, owner_id=None + ): + self.assertEqual( + self.env["stock.quant"]._get_available_quantity( + product, + location, + lot_id=lot_id, + package_id=package_id, + owner_id=owner_id, + ), + amount, + ) + + def _create_wizard( + self, origin_location, destination_location, exclude_reserved_qty=False + ): + move_location_wizard = self.env["wiz.stock.move.location"] + return move_location_wizard.create( + { + "origin_location_id": origin_location.id, + "destination_location_id": destination_location.id, + "exclude_reserved_qty": exclude_reserved_qty, + } + ) + + def _create_picking(self, picking_type): + with Form(self.env["stock.picking"]) as picking_form: + picking_form.picking_type_id = picking_type + return picking_form.save() + + def _create_putaway_for_product(self, product, loc_in, loc_out): + putaway = self.env["stock.putaway.rule"].create( + { + "product_id": product.id, + "location_in_id": loc_in.id, + "location_out_id": loc_out.id, + } + ) + loc_in.write({"putaway_rule_ids": [(4, putaway.id, 0)]}) diff --git a/stock_move_location/tests/test_move_location.py b/stock_move_location/tests/test_move_location.py new file mode 100644 index 0000000..f6821bc --- /dev/null +++ b/stock_move_location/tests/test_move_location.py @@ -0,0 +1,353 @@ +# Copyright (C) 2011 Julius Network Solutions SARL +# Copyright 2018 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo.exceptions import ValidationError + +from .test_common import TestsCommon + + +class TestMoveLocation(TestsCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.setup_product_amounts() + + def test_move_location_wizard(self): + """Test a simple move.""" + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.onchange_origin_location() + wizard.action_move_location() + self.check_product_amount(self.product_no_lots, self.internal_loc_1, 0) + self.check_product_amount(self.product_lots, self.internal_loc_1, 0, self.lot1) + self.check_product_amount(self.product_lots, self.internal_loc_1, 0, self.lot2) + self.check_product_amount(self.product_lots, self.internal_loc_1, 0, self.lot3) + self.check_product_amount( + self.product_package, self.internal_loc_1, 0, self.lot4, self.package + ) + self.check_product_amount( + self.product_package, self.internal_loc_1, 0, self.lot4, self.package1 + ) + self.check_product_amount( + self.product_package, + self.internal_loc_1, + 0, + self.lot5, + self.package2, + self.partner, + ) + self.check_product_amount(self.product_no_lots, self.internal_loc_2, 123) + self.check_product_amount(self.product_lots, self.internal_loc_2, 1, self.lot1) + self.check_product_amount(self.product_lots, self.internal_loc_2, 1, self.lot2) + self.check_product_amount(self.product_lots, self.internal_loc_2, 1, self.lot3) + self.check_product_amount( + self.product_package, self.internal_loc_2, 1, self.lot4, self.package + ) + self.check_product_amount( + self.product_package, self.internal_loc_2, 1, self.lot4, self.package1 + ) + self.check_product_amount( + self.product_package, + self.internal_loc_2, + 1, + self.lot5, + self.package2, + self.partner, + ) + + def test_move_location_wizard_amount(self): + """Can't move more than exists.""" + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.onchange_origin_location() + with self.assertRaises(ValidationError): + wizard.stock_move_location_line_ids[0].move_quantity += 1 + + def test_move_location_wizard_ignore_reserved(self): + """Can't move more than exists.""" + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.onchange_origin_location() + # reserve some quants + self.quant_obj._update_reserved_quantity( + self.product_no_lots, self.internal_loc_1, 50 + ) + self.quant_obj._update_reserved_quantity( + self.product_lots, self.internal_loc_1, 1, lot_id=self.lot1 + ) + # doesn't care about reservations, everything is moved + wizard.action_move_location() + self.check_product_amount(self.product_no_lots, self.internal_loc_1, 0) + self.check_product_amount(self.product_no_lots, self.internal_loc_2, 123) + self.check_product_amount(self.product_lots, self.internal_loc_2, 1, self.lot1) + + def test_wizard_clear_lines(self): + """Test lines getting cleared properly.""" + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.onchange_origin_location() + self.assertEqual(len(wizard.stock_move_location_line_ids), 7) + dest_location_line = wizard.stock_move_location_line_ids.mapped( + "destination_location_id" + ) + self.assertEqual(dest_location_line, wizard.destination_location_id) + wizard.clear_lines() + self.assertEqual(len(wizard.stock_move_location_line_ids), 0) + + def test_wizard_onchange_origin_location(self): + """Test a product that have existing quants with undefined quantity.""" + + product_not_available = self.env["product.product"].create( + {"name": "Mango", "is_storable": True, "tracking": "none"} + ) + self.quant_obj.create( + { + "product_id": product_not_available.id, + "location_id": self.internal_loc_1.id, + } + ) + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.onchange_origin_location() + # we check there is no line for product_not_available + self.assertEqual( + len( + wizard.stock_move_location_line_ids.filtered( + lambda x: x.product_id.id == product_not_available.id + ) + ), + 0, + ) + + def test_planned_transfer(self): + """Test planned transfer.""" + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.onchange_origin_location() + wizard = wizard.with_context(planned=True) + wizard.action_move_location() + picking = wizard.picking_id + self.assertEqual(picking.state, "assigned") + self.assertEqual( + len(wizard.stock_move_location_line_ids), len(picking.move_line_ids) + ) + wizard_lines = sorted( + [ + (line.product_id.id, line.lot_id.id, line.move_quantity) + for line in wizard.stock_move_location_line_ids + ], + key=lambda x: (x[0], x[1]), + ) + picking_lines = sorted( + [ + (line.product_id.id, line.lot_id.id, line.quantity) + for line in picking.move_line_ids + ], + key=lambda x: (x[0], x[1]), + ) + self.assertEqual( + wizard_lines, + picking_lines, + "Mismatch between move location lines and move lines", + ) + self.assertEqual( + sorted(picking.move_line_ids.mapped("quantity")), + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 123.0], + ) + + def test_planned_transfer_strict(self): + product = self.env["product.product"].create( + {"name": "Test", "is_storable": True, "tracking": "lot"} + ) + lot = self.env["stock.lot"].create( + { + "name": "Test lot", + "product_id": product.id, + } + ) + self.set_product_amount( + product, + self.internal_loc_1, + 10.0, + ) + self.set_product_amount( + product, + self.internal_loc_1, + 10.0, + lot_id=lot, + ) + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.onchange_origin_location() + wizard = wizard.with_context(planned=True) + location_lines = wizard.stock_move_location_line_ids.filtered( + lambda r: r.product_id.id != product.id or r.lot_id.id != lot.id + ) + location_lines.unlink() + wizard.action_move_location() + picking = wizard.picking_id + self.assertEqual(picking.state, "assigned") + self.assertEqual( + len(wizard.stock_move_location_line_ids), len(picking.move_line_ids) + ) + location_line = wizard.stock_move_location_line_ids + wizard_lines = [ + location_line.product_id.id, + location_line.lot_id.id, + location_line.move_quantity, + ] + line = picking.move_line_ids + picking_lines = [line.product_id.id, line.lot_id.id, line.quantity] + self.assertEqual( + wizard_lines, + picking_lines, + "Mismatch between move location lines and move lines", + ) + self.assertEqual( + picking.move_line_ids.quantity, + 10.0, + ) + + # Create planned transfer for same quant + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.onchange_origin_location() + wizard = wizard.with_context(planned=True) + location_lines = wizard.stock_move_location_line_ids.filtered( + lambda r: r.product_id.id != product.id or r.lot_id.id != lot.id + ) + location_lines.unlink() + wizard.action_move_location() + picking = wizard.picking_id + # Planned transfer state is "confirmed" + # move lines (quantity is zero) are removed + self.assertEqual(picking.state, "confirmed") + self.assertFalse(picking.move_line_ids) + + def test_quant_transfer(self): + """Test quants transfer.""" + quants = self.product_lots.stock_quant_ids + wizard = self.wizard_obj.with_context( + active_model="stock.quant", + active_ids=quants.ids, + origin_location_disable=True, + ).create( + { + "origin_location_id": quants[:1].location_id.id, + "destination_location_id": self.internal_loc_2.id, + } + ) + lines = wizard.stock_move_location_line_ids + self.assertEqual(len(lines), 3) + wizard.onchange_origin_location() + self.assertEqual(len(lines), 3) + wizard.destination_location_id = self.internal_loc_1 + self.assertEqual(lines.mapped("destination_location_id"), self.internal_loc_1) + wizard.origin_location_id = self.internal_loc_2 + self.assertEqual(len(lines), 3) + + def test_readonly_location_computation(self): + """Test that origin_location_disable and destination_location_disable + are computed correctly.""" + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + # locations are editable. + self.assertFalse(wizard.origin_location_disable) + self.assertFalse(wizard.destination_location_disable) + # Disable edit mode: + wizard.edit_locations = False + self.assertTrue(wizard.origin_location_disable) + self.assertTrue(wizard.destination_location_disable) + + def test_picking_type_action_dummy(self): + """Test that no error is raised from actions.""" + pick_type = self.env.ref("stock.picking_type_internal") + pick_type.action_move_location() + + def test_wizard_with_putaway_strategy(self): + """Test that Putaway strategies are being applied.""" + self._create_putaway_for_product( + self.product_no_lots, self.internal_loc_2, self.internal_loc_2_shelf + ) + wizard = self._create_wizard(self.internal_loc_1, self.internal_loc_2) + wizard.apply_putaway_strategy = True + wizard.onchange_origin_location() + putaway_line = wizard.stock_move_location_line_ids.filtered( + lambda p: p.product_id == self.product_no_lots + )[0] + self.assertEqual( + putaway_line.destination_location_id, wizard.destination_location_id + ) + picking_action = wizard.action_move_location() + picking = self.env["stock.picking"].browse(picking_action["res_id"]) + move_lines = picking.move_line_ids.filtered( + lambda sml: sml.product_id == self.product_no_lots + ) + self.assertEqual(move_lines.location_dest_id, self.internal_loc_2_shelf) + + def test_delivery_order_assignation_after_transfer(self): + """ + Make sure using the wizard doesn't break assignation on delivery orders + """ + delivery_order_type = self.env.ref("stock.picking_type_out") + internal_transfer_type = self.env.ref("stock.picking_type_internal") + wh_stock_shelf_1 = self.env.ref("stock.stock_location_components") + wh_stock_shelf_2 = self.env.ref("stock.stock_location_14") + wh_stock_shelf_3 = wh_stock_shelf_1.copy({"name": "Shelf 3"}) + + # Create some quants + self.set_product_amount( + self.product_lots, wh_stock_shelf_1, 100, lot_id=self.lot1 + ) + + # Create and assign a delivery picking to reserve some quantities + delivery_picking = self._create_picking(delivery_order_type) + # delivery_picking.location_id = wh_stock_shelf_1 + delivery_move = self.env["stock.move"].create( + { + "name": "Delivery move", + "product_id": self.product_lots.id, + "product_uom_qty": 20.0, + "product_uom": self.product_lots.uom_id.id, + "location_id": delivery_picking.location_id.id, + "location_dest_id": delivery_picking.location_dest_id.id, + "picking_id": delivery_picking.id, + } + ) + delivery_picking.action_confirm() + self.assertEqual(delivery_picking.state, "assigned") + self.assertEqual(delivery_move.move_line_ids.location_id, wh_stock_shelf_1) + + # Move all quantities to other location using module's wizard + wizard = self._create_wizard(wh_stock_shelf_1, wh_stock_shelf_2) + wizard.onchange_origin_location() + wizard.action_move_location() + self.assertEqual(delivery_picking.state, "assigned") + self.assertEqual(delivery_move.move_line_ids.location_id, wh_stock_shelf_2) + + # Do a planned transfer to move quantities to other location + # without using module's wizard + internal_picking = self._create_picking(internal_transfer_type) + internal_picking.write( + {"location_id": wh_stock_shelf_2, "location_dest_id": wh_stock_shelf_3.id} + ) + self.env["stock.move"].create( + { + "name": "Internal move", + "product_id": self.product_lots.id, + "product_uom_qty": 100.0, + "product_uom": self.product_lots.uom_id.id, + "location_id": internal_picking.location_id.id, + "location_dest_id": internal_picking.location_dest_id.id, + "picking_id": internal_picking.id, + } + ) + # Unreserve quantity on the delivery to allow moving the quantity + delivery_picking.do_unreserve() + self.assertEqual(delivery_picking.state, "confirmed") + internal_picking.action_confirm() + internal_picking.action_assign() + internal_picking.move_line_ids.quantity = ( + internal_picking.move_line_ids.quantity + ) + internal_picking.button_validate() + self.assertEqual(internal_picking.state, "done") + # Assign the delivery must work + delivery_picking.action_assign() + self.assertEqual(delivery_picking.state, "assigned") + # The old reserved quantities must be in new location after confirm wizard + self.assertEqual(len(delivery_move.move_line_ids), 1) + self.assertEqual(delivery_move.move_line_ids.quantity, 20.0) + self.assertEqual(delivery_move.move_line_ids.location_id, wh_stock_shelf_3) diff --git a/stock_move_location/tests/test_stock_fillwithstock.py b/stock_move_location/tests/test_stock_fillwithstock.py new file mode 100644 index 0000000..d45adf9 --- /dev/null +++ b/stock_move_location/tests/test_stock_fillwithstock.py @@ -0,0 +1,85 @@ +# Copyright Iryna Vyshnevska 2020 Camptocamp +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +from odoo.addons.base.tests.common import BaseCommon + + +class TestFillwithStock(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.stock_location = cls.env.ref("stock.stock_location_stock") + cls.pack_location = cls.env.ref("stock.location_pack_zone") + + cls.shelf1_location = cls.env["stock.location"].create( + { + "name": "Test location", + "usage": "internal", + "location_id": cls.stock_location.id, + } + ) + + cls.product1 = cls.env["product.product"].create( + { + "name": "Product A", + "is_storable": True, + } + ) + cls.product2 = cls.env["product.product"].create( + { + "name": "Product B", + "is_storable": True, + } + ) + + cls.env["stock.quant"].create( + { + "product_id": cls.product1.id, + "location_id": cls.shelf1_location.id, + "quantity": 5.0, + "reserved_quantity": 0.0, + } + ) + cls.env["stock.quant"].create( + { + "product_id": cls.product1.id, + "location_id": cls.shelf1_location.id, + "quantity": 10.0, + "reserved_quantity": 5.0, + } + ) + cls.env["stock.quant"].create( + { + "product_id": cls.product2.id, + "location_id": cls.shelf1_location.id, + "quantity": 5.0, + "reserved_quantity": 0.0, + } + ) + + def test_fillwithstock(self): + picking_stock_pack = self.env["stock.picking"].create( + { + "location_id": self.shelf1_location.id, + "location_dest_id": self.pack_location.id, + "picking_type_id": self.env.ref("stock.picking_type_internal").id, + } + ) + self.assertFalse(picking_stock_pack.move_ids) + picking_stock_pack.button_fillwithstock() + # picking filled with quants in bin + self.assertEqual(len(picking_stock_pack.move_ids), 2) + self.assertEqual( + picking_stock_pack.move_ids.filtered( + lambda m: m.product_id == self.product1 + ).product_uom_qty, + 15.0, + ) + self.assertEqual( + picking_stock_pack.move_ids.filtered( + lambda m: m.product_id == self.product2 + ).product_uom_qty, + 5.0, + ) diff --git a/stock_move_location/views/stock_picking.xml b/stock_move_location/views/stock_picking.xml new file mode 100644 index 0000000..a24c47d --- /dev/null +++ b/stock_move_location/views/stock_picking.xml @@ -0,0 +1,20 @@ + + + + stock.picking.form.fillwithstock + stock.picking + + + + + + diff --git a/stock_move_location/views/stock_picking_type_views.xml b/stock_move_location/views/stock_picking_type_views.xml new file mode 100644 index 0000000..ab2850d --- /dev/null +++ b/stock_move_location/views/stock_picking_type_views.xml @@ -0,0 +1,34 @@ + + + + Operation Types + stock.picking.type + + + + + + + + + stock.picking.type + + + + + + + + + + + diff --git a/stock_move_location/wizard/__init__.py b/stock_move_location/wizard/__init__.py new file mode 100644 index 0000000..d9fdbf2 --- /dev/null +++ b/stock_move_location/wizard/__init__.py @@ -0,0 +1,6 @@ +# 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 stock_move_location +from . import stock_move_location_line diff --git a/stock_move_location/wizard/stock_move_location.py b/stock_move_location/wizard/stock_move_location.py new file mode 100644 index 0000000..fd8c76a --- /dev/null +++ b/stock_move_location/wizard/stock_move_location.py @@ -0,0 +1,372 @@ +# Copyright (C) 2011 Julius Network Solutions SARL +# Copyright 2018 Camptocamp SA +# Copyright 2019 Sergio Teruel - Tecnativa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + + +from odoo import Command, api, fields, models +from odoo.fields import first +from odoo.osv import expression + + +class StockMoveLocationWizard(models.TransientModel): + _name = "wiz.stock.move.location" + _description = "Wizard move location" + + origin_location_disable = fields.Boolean( + compute="_compute_readonly_locations", + help="technical field to disable the edition of origin location.", + ) + origin_location_id = fields.Many2one( + string="Origin Location", + comodel_name="stock.location", + required=True, + domain=lambda self: self._get_locations_domain(), + ) + destination_location_disable = fields.Boolean( + compute="_compute_readonly_locations", + help="technical field to disable the edition of destination location.", + ) + destination_location_id = fields.Many2one( + string="Destination Location", + comodel_name="stock.location", + required=True, + domain=lambda self: self._get_locations_domain(), + ) + stock_move_location_line_ids = fields.One2many( + "wiz.stock.move.location.line", + "move_location_wizard_id", + string="Move Location lines", + ) + company_id = fields.Many2one("res.company", default=lambda self: self.env.company) + picking_type_id = fields.Many2one( + compute="_compute_picking_type_id", + comodel_name="stock.picking.type", + readonly=False, + store=True, + domain="[('company_id', '=', company_id), ('code', '=', 'internal')]", + ) + picking_id = fields.Many2one( + string="Connected Picking", comodel_name="stock.picking" + ) + edit_locations = fields.Boolean(default=True) + apply_putaway_strategy = fields.Boolean() + exclude_reserved_qty = fields.Boolean(default=True) + + @api.depends("edit_locations") + def _compute_readonly_locations(self): + for rec in self: + rec.origin_location_disable = self.env.context.get( + "origin_location_disable", False + ) + rec.destination_location_disable = self.env.context.get( + "destination_location_disable", False + ) + if not rec.edit_locations: + rec.origin_location_disable = True + rec.destination_location_disable = True + + @api.depends_context("company") + @api.depends("origin_location_id") + def _compute_picking_type_id(self): + for rec in self: + picking_type = self.env["stock.picking.type"] + base_domain = [ + ("code", "=", "internal"), + ("warehouse_id.company_id", "=", self.company_id.id), + ] + if rec.origin_location_id: + location_id = rec.origin_location_id + if ( + location_id + and rec.picking_type_id + and rec.picking_type_id.default_location_src_id == location_id + ): + continue + while location_id and not picking_type: + domain = [("default_location_src_id", "=", location_id.id)] + domain = expression.AND([base_domain, domain]) + picking_type = picking_type.search(domain, limit=1) + # Move up to the parent location if no picking type found + location_id = not picking_type and location_id.location_id or False + if not picking_type: + picking_type = picking_type.search(base_domain, limit=1) + rec.picking_type_id = picking_type.id + + @api.model + def default_get(self, fields): + res = super().default_get(fields) + if self.env.context.get("active_model", False) != "stock.quant": + return res + # Load data directly from quants + quants = self.env["stock.quant"].browse( + self.env.context.get("active_ids", False) + ) + res["stock_move_location_line_ids"] = self._prepare_wizard_move_lines(quants) + res["origin_location_id"] = first(quants).location_id.id + return res + + @api.model + def _prepare_wizard_move_lines(self, quants): + res = [] + if not self.exclude_reserved_qty: + res = [ + ( + 0, + 0, + { + "product_id": quant.product_id.id, + "move_quantity": quant.quantity, + "max_quantity": quant.quantity, + "reserved_quantity": quant.reserved_quantity, + "total_quantity": quant.quantity, + "origin_location_id": quant.location_id.id, + "lot_id": quant.lot_id.id, + "package_id": quant.package_id.id, + "owner_id": quant.owner_id.id, + "product_uom_id": quant.product_uom_id.id, + "custom": False, + }, + ) + for quant in quants + ] + else: + # if need move only available qty per product on location + for quant in quants: + qty = quant._get_available_quantity( + quant.product_id, + quant.location_id, + quant.lot_id, + quant.package_id, + quant.owner_id, + ) + if qty: + res.append( + ( + 0, + 0, + { + "product_id": quant.product_id.id, + "move_quantity": qty, + "max_quantity": qty, + "reserved_quantity": quant.reserved_quantity, + "total_quantity": quant.quantity, + "origin_location_id": quant.location_id.id, + "lot_id": quant.lot_id.id, + "package_id": quant.package_id.id, + "owner_id": quant.owner_id.id, + "product_uom_id": quant.product_uom_id.id, + "custom": False, + }, + ) + ) + return res + + def _clear_lines(self): + self.stock_move_location_line_ids = False + + def _get_locations_domain(self): + return [ + "|", + ("company_id", "=", self.env.company.id), + ("company_id", "=", False), + ] + + def _create_picking(self): + return self.env["stock.picking"].create( + { + "picking_type_id": self.picking_type_id.id, + "location_id": self.origin_location_id.id, + "location_dest_id": self.destination_location_id.id, + } + ) + + def group_lines(self): + lines_grouped = {} + for line in self.stock_move_location_line_ids: + lines_grouped.setdefault( + line.product_id.id, self.env["wiz.stock.move.location.line"].browse() + ) + lines_grouped[line.product_id.id] |= line + return lines_grouped + + def _create_moves(self, picking): + self.ensure_one() + groups = self.group_lines() + moves = self.env["stock.move"] + for lines in groups.values(): + moves |= self._create_move(picking, lines) + return moves + + def _get_move_values(self, picking, lines): + # locations are same for the products + location_from_id = lines[0].origin_location_id.id + location_to_id = lines[0].destination_location_id.id + product = lines[0].product_id + product_uom_id = lines[0].product_uom_id.id + qty = sum(x.move_quantity for x in lines) + return { + "name": product.display_name, + "location_id": location_from_id, + "location_dest_id": location_to_id, + "product_id": product.id, + "product_uom": product_uom_id, + "product_uom_qty": qty, + "picking_id": picking.id, + "location_move": True, + } + + def _create_move(self, picking, lines): + self.ensure_one() + move = self.env["stock.move"].create(self._get_move_values(picking, lines)) + lines.create_move_lines(picking, move) + if self.env.context.get("planned"): + for line in lines: + move._update_reserved_quantity( + line.move_quantity, + line.origin_location_id, + lot_id=line.lot_id, + package_id=line.package_id, + owner_id=line.owner_id, + strict=True, + ) + # Force the state to be assigned, instead of _action_assign, + # to avoid discarding the selected move_location_line. + move.state = "assigned" + move.move_line_ids.filtered(lambda ml: not ml.quantity).unlink() + move.move_line_ids.write({"state": "assigned"}) + return move + + def _unreserve_moves(self, picking): + """ + Try to unreserve moves that they has reserved quantity before user + moves products from a location to other one and change move origin + location to the new location to assign later. + :return moves unreserved + """ + moves_to_reassign = self.env["stock.move"] + lines_to_ckeck_reverve = self.stock_move_location_line_ids.filtered( + lambda line: ( + line.move_quantity > line.max_quantity + and not line.origin_location_id.should_bypass_reservation() + ) + ) + for line in lines_to_ckeck_reverve: + move_lines = self.env["stock.move.line"].search( + [ + ("state", "=", "assigned"), + ("product_id", "=", line.product_id.id), + ("location_id", "=", line.origin_location_id.id), + ("lot_id", "=", line.lot_id.id), + ("package_id", "=", line.package_id.id), + ("owner_id", "=", line.owner_id.id), + ("quantity", ">", 0.0), + ("picking_id", "!=", picking.id), + ] + ) + moves_to_unreserve = move_lines.mapped("move_id") + # Unreserve in old location + moves_to_unreserve._do_unreserve() + moves_to_reassign |= moves_to_unreserve + return moves_to_reassign + + def action_move_location(self): + self.ensure_one() + picking = self.picking_id if self.picking_id else self._create_picking() + self._create_moves(picking) + if not self.env.context.get("planned"): + moves_to_reassign = self._unreserve_moves(picking) + picking.button_validate() + moves_to_reassign._action_assign() + self.picking_id = picking + return self._get_picking_action(picking.id) + + def _get_picking_action(self, picking_id): + action = self.env["ir.actions.act_window"]._for_xml_id( + "stock.action_picking_tree_all" + ) + form_view = self.env.ref("stock.view_picking_form").id + action.update( + {"view_mode": "form", "views": [(form_view, "form")], "res_id": picking_id} + ) + return action + + def _get_quants_domain(self): + return [("location_id", "=", self.origin_location_id.id)] + + def _get_group_quants(self): + domain = self._get_quants_domain() + result = self.env["stock.quant"].read_group( + domain=domain, + fields=[ + "product_id", + "lot_id", + "package_id", + "owner_id", + "quantity:sum", + "reserved_quantity:sum", + ], + groupby=["id", "product_id", "lot_id", "package_id", "owner_id"], + orderby="id", + lazy=False, + ) + return result + + def _get_stock_move_location_lines_values(self): + product_obj = self.env["product.product"] + product_data = [] + for group in self._get_group_quants(): + product = product_obj.browse(group["product_id"][0]).exists() + # Apply the putaway strategy + location_dest_id = ( + self.apply_putaway_strategy + and self.destination_location_id._get_putaway_strategy(product).id + or self.destination_location_id.id + ) + res_qty = group.get("reserved_quantity", 0.0) + total_qty = group.get("quantity", 0.0) + max_qty = ( + total_qty if not self.exclude_reserved_qty else total_qty - res_qty + ) + product_data.append( + { + "product_id": product.id, + "move_quantity": max_qty, + "max_quantity": max_qty, + "reserved_quantity": res_qty, + "total_quantity": total_qty, + "origin_location_id": self.origin_location_id.id, + "destination_location_id": location_dest_id, + # cursor returns None instead of False + "lot_id": group["lot_id"][0] if group.get("lot_id") else False, + "package_id": group["package_id"][0] + if group.get("package_id") + else False, + "owner_id": group["owner_id"][0] + if group.get("owner_id") + else False, + "product_uom_id": product.uom_id.id, + "custom": False, + } + ) + return product_data + + @api.onchange("origin_location_id", "exclude_reserved_qty") + def onchange_origin_location(self): + # Get origin_location_disable context key to prevent load all origin + # location products when user opens the wizard from stock quants to + # move it to other location. + if ( + not self.env.context.get("origin_location_disable") + and self.origin_location_id + ): + lines = [Command.clear()] + [ + Command.create(line_vals) + for line_vals in self._get_stock_move_location_lines_values() + if line_vals.get("max_quantity", 0.0) > 0.0 + ] + self.update({"stock_move_location_line_ids": lines}) + + def clear_lines(self): + self._clear_lines() + return {"type": "ir.action.do_nothing"} diff --git a/stock_move_location/wizard/stock_move_location.xml b/stock_move_location/wizard/stock_move_location.xml new file mode 100644 index 0000000..5875abc --- /dev/null +++ b/stock_move_location/wizard/stock_move_location.xml @@ -0,0 +1,186 @@ + + + + wiz.stock.move.location.form.stock_move_location + wiz.stock.move.location + +
+ +
+
+ + +
+
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Lot/SN: + +
+
+ + → + +
+
+
+ + +
+
+
+
+
+
+
+
+
+ + + + + + Move from location... + wiz.stock.move.location + form + new + {} + + + diff --git a/stock_move_location/wizard/stock_move_location_line.py b/stock_move_location/wizard/stock_move_location_line.py new file mode 100644 index 0000000..f32d968 --- /dev/null +++ b/stock_move_location/wizard/stock_move_location_line.py @@ -0,0 +1,146 @@ +# Copyright (C) 2011 Julius Network Solutions SARL +# Copyright 2018 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError +from odoo.tools import float_compare + + +class StockMoveLocationWizardLine(models.TransientModel): + _name = "wiz.stock.move.location.line" + _description = "Wizard move location line" + + move_location_wizard_id = fields.Many2one( + string="Move location Wizard", + comodel_name="wiz.stock.move.location", + ) + product_id = fields.Many2one( + string="Product", comodel_name="product.product", required=True + ) + origin_location_id = fields.Many2one( + string="Origin Location", comodel_name="stock.location" + ) + destination_location_id = fields.Many2one( + string="Destination Location", + comodel_name="stock.location", + compute="_compute_destination_location_id", + ) + product_uom_id = fields.Many2one( + string="Product Unit of Measure", comodel_name="uom.uom" + ) + lot_id = fields.Many2one( + string="Lot/Serial Number", + comodel_name="stock.lot", + domain="[('product_id','=',product_id)]", + ) + package_id = fields.Many2one( + string="Package Number", + comodel_name="stock.quant.package", + domain="[('location_id', '=', origin_location_id)]", + ) + owner_id = fields.Many2one(comodel_name="res.partner", string="From Owner") + move_quantity = fields.Float( + string="Quantity to move", digits="Product Unit of Measure" + ) + max_quantity = fields.Float( + string="Maximum available quantity", digits="Product Unit of Measure" + ) + total_quantity = fields.Float( + string="Total existence quantity", digits="Product Unit of Measure" + ) + reserved_quantity = fields.Float(digits="Product Unit of Measure") + custom = fields.Boolean(string="Custom line", default=True) + + @api.depends("move_location_wizard_id.destination_location_id") + def _compute_destination_location_id(self): + for record in self: + record.destination_location_id = ( + record.move_location_wizard_id.destination_location_id + ) + + @staticmethod + def _compare(qty1, qty2, precision_rounding): + return float_compare(qty1, qty2, precision_rounding=precision_rounding) + + @api.constrains("max_quantity", "move_quantity") + def _constraint_max_move_quantity(self): + for record in self: + rounding = record.product_uom_id.rounding + move_qty_gt_max_qty = ( + self._compare(record.move_quantity, record.max_quantity, rounding) == 1 + ) + move_qty_lt_0 = self._compare(record.move_quantity, 0.0, rounding) == -1 + if move_qty_gt_max_qty or move_qty_lt_0: + raise ValidationError( + _("Move quantity can not exceed max quantity or be negative") + ) + + def create_move_lines(self, picking, move): + for line in self: + values = line._get_move_line_values(picking, move) + if not self.env.context.get("planned") and values.get("quantity") <= 0: + continue + self.env["stock.move.line"].create(values) + return True + + def _get_move_line_values(self, picking, move): + self.ensure_one() + location_dest_id = ( + self.move_location_wizard_id.apply_putaway_strategy + and self.destination_location_id._get_putaway_strategy(self.product_id).id + or self.destination_location_id.id + ) + qty_done = self._get_available_quantity() + return { + "product_id": self.product_id.id, + "lot_id": self.lot_id.id, + "package_id": self.package_id.id, + "result_package_id": self.package_id.id, + "owner_id": self.owner_id.id, + "location_id": self.origin_location_id.id, + "location_dest_id": location_dest_id, + "quantity": qty_done, + "product_uom_id": self.product_uom_id.id, + "picking_id": picking.id, + "move_id": move.id, + } + + def _get_available_quantity(self): + """We check here if the actual amount changed in the stock. + + We don't care about the reservations but we do care about not moving + more than exists.""" + self.ensure_one() + if not self.product_id: + return 0 + if self.env.context.get("planned"): + # for planned transfer we don't care about the amounts at all + return 0.0 + search_args = [ + ("location_id", "=", self.origin_location_id.id), + ("product_id", "=", self.product_id.id), + ] + if self.lot_id: + search_args.append(("lot_id", "=", self.lot_id.id)) + else: + search_args.append(("lot_id", "=", False)) + if self.package_id: + search_args.append(("package_id", "=", self.package_id.id)) + else: + search_args.append(("package_id", "=", False)) + if self.owner_id: + search_args.append(("owner_id", "=", self.owner_id.id)) + else: + search_args.append(("owner_id", "=", False)) + res = self.env["stock.quant"].read_group(search_args, ["quantity"], []) + available_qty = res[0]["quantity"] + if not available_qty: + # if it is immediate transfer and product doesn't exist in that + # location -> make the transfer of 0. + return 0 + rounding = self.product_uom_id.rounding + available_qty_lt_move_qty = ( + self._compare(available_qty, self.move_quantity, rounding) == -1 + ) + return available_qty if available_qty_lt_move_qty else self.move_quantity