diff --git a/stock_move_location/README.rst b/stock_move_location/README.rst new file mode 100644 index 000000000000..2cfd2b97c0c0 --- /dev/null +++ b/stock_move_location/README.rst @@ -0,0 +1,178 @@ +.. 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/19.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-19-0/stock-logistics-warehouse-19-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=19.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 +- Open Source Integrators + + - Daniel Reis + +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 000000000000..76d87ae8c668 --- /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 000000000000..124121ca9410 --- /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": "19.0.1.0.0", + "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 000000000000..5b6ab7ae802f --- /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 000000000000..f878c541c2a3 --- /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 000000000000..76efec987ff9 --- /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 000000000000..8df046df9968 --- /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 000000000000..f6c19b038bbf --- /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 000000000000..60968e4dd567 --- /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 000000000000..e1f93ab77154 --- /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 000000000000..e92f5c351fac --- /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 000000000000..2a2018544a45 --- /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 000000000000..68e32310ea70 --- /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 000000000000..711a3fe4244e --- /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 000000000000..acaca015f501 --- /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 000000000000..47a21429d389 --- /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 000000000000..a44310781293 --- /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 000000000000..d6f517fed7c2 --- /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 000000000000..db6d09bce7ff --- /dev/null +++ b/stock_move_location/models/stock_picking.py @@ -0,0 +1,70 @@ +# 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(self.env._("Please choose a source end location")) + if self.move_ids: + raise UserError(self.env._("Moves lines already exists")) + + def _get_movable_quants(self): + # Unreserve all quantities in this location before filling + self._unreserve_quants_in_location() + return self.env["stock.quant"].search( + [ + ("location_id", "=", self.location_id.id), + ("quantity", ">", 0.0), + ] + ) + + def _unreserve_quants_in_location(self): + """Unreserve all quantities in the source location.""" + self.ensure_one() + # Find all move lines that have reserved stock in this location + move_lines = self.env["stock.move.line"].search( + [ + ("location_id", "=", self.location_id.id), + ("state", "in", ["assigned", "partially_available"]), + ("quantity", ">", 0.0), + ] + ) + # Unreserve the moves + if move_lines: + moves = move_lines.mapped("move_id") + moves.write({"picked": False}) # Don't skip picked moves + moves._do_unreserve() 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 000000000000..0bb437fd03bd --- /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 000000000000..4231d0cccb3d --- /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 000000000000..6dac24265e41 --- /dev/null +++ b/stock_move_location/readme/CONTRIBUTORS.md @@ -0,0 +1,20 @@ +- 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 \<\> +- Open Source Integrators \<\> + - Daniel Reis <> diff --git a/stock_move_location/readme/DESCRIPTION.md b/stock_move_location/readme/DESCRIPTION.md new file mode 100644 index 000000000000..40d1bdefc960 --- /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 000000000000..9d8ed9fcf308 --- /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 000000000000..f177e25480b3 --- /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 000000000000..b41b028f140d --- /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 000000000000..3a0328b516c4 Binary files /dev/null and b/stock_move_location/static/description/icon.png differ diff --git a/stock_move_location/static/description/index.html b/stock_move_location/static/description/index.html new file mode 100644 index 000000000000..898fd4220e6b --- /dev/null +++ b/stock_move_location/static/description/index.html @@ -0,0 +1,522 @@ + + + + + +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 000000000000..315ff5109155 --- /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 000000000000..bda908826b87 --- /dev/null +++ b/stock_move_location/tests/test_common.py @@ -0,0 +1,187 @@ +# 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() + # Disable tracking for tests as recommended in Odoo 19.0 migration guide + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + 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["res.partner"].create({"name": "Test Partner"}) + + 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.package"].create({}) + cls.package1 = cls.env["stock.package"].create({}) + + cls.package2 = cls.env["stock.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_migration_19.py b/stock_move_location/tests/test_migration_19.py new file mode 100644 index 000000000000..e69de29bb2d1 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 000000000000..72fa530338f7 --- /dev/null +++ b/stock_move_location/tests/test_move_location.py @@ -0,0 +1,352 @@ +# 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_stock") + wh_stock_shelf_2 = wh_stock_shelf_1.copy({"name": "Shelf 2"}) + 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( + { + "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 000000000000..d45adf9ec7eb --- /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 000000000000..a24c47d7367d --- /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 000000000000..ab2850dacafe --- /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 000000000000..d9fdbf21cacb --- /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 000000000000..656dd368fcf2 --- /dev/null +++ b/stock_move_location/wizard/stock_move_location.py @@ -0,0 +1,354 @@ +# 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 Domain + + +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 = Domain( + [("default_location_src_id", "=", location_id.id)] + ) & Domain(base_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"] = quants[0].location_id.id if quants else False + 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 { + "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: 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, + groupby=["product_id", "lot_id", "package_id", "owner_id"], + aggregates=["quantity:sum", "reserved_quantity:sum"], + ) + return result + + def _get_stock_move_location_lines_values(self): + product_data = [] + for group in self._get_group_quants(): + product, lot, package, owner, total_qty, res_qty = group + + # Apply the putaway strategy + location_dest_id = ( + product + and self.apply_putaway_strategy + and self.destination_location_id._get_putaway_strategy(product).id + or self.destination_location_id.id + ) + 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, + # Extract IDs from record objects + "lot_id": lot.id, + "package_id": package.id, + "owner_id": owner.id, + "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 000000000000..5875abc21403 --- /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 000000000000..0414093fe9e6 --- /dev/null +++ b/stock_move_location/wizard/stock_move_location_line.py @@ -0,0 +1,141 @@ +# 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.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( + self.env._( + "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 + + # Use the built-in stock.quant method to get available quantity + available_qty = self.env["stock.quant"]._get_available_quantity( + product_id=self.product_id, + location_id=self.origin_location_id, + lot_id=self.lot_id, + package_id=self.package_id, + owner_id=self.owner_id, + strict=False, + ) + + 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