From 85e0c8c6950bdb23e767b887f8cd93b1207cfefd Mon Sep 17 00:00:00 2001 From: Fanha Giang Date: Wed, 26 Jul 2017 15:29:25 +0700 Subject: [PATCH 01/36] [MIG] stock_quant_manual_assign: Migration to 10.0 --- stock_quant_manual_assign/README.rst | 67 +++++++++ stock_quant_manual_assign/__init__.py | 6 + stock_quant_manual_assign/__manifest__.py | 26 ++++ stock_quant_manual_assign/i18n/de.po | 131 ++++++++++++++++++ stock_quant_manual_assign/i18n/es.po | 131 ++++++++++++++++++ stock_quant_manual_assign/i18n/fi.po | 130 +++++++++++++++++ stock_quant_manual_assign/i18n/fr.po | 126 +++++++++++++++++ stock_quant_manual_assign/i18n/pt_BR.po | 131 ++++++++++++++++++ stock_quant_manual_assign/i18n/sl.po | 131 ++++++++++++++++++ .../i18n/stock_quant_manual_assign.pot | 128 +++++++++++++++++ stock_quant_manual_assign/models/__init__.py | 5 + .../models/stock_picking.py | 12 ++ .../static/description/step1.png | Bin 0 -> 34491 bytes .../static/description/step2.png | Bin 0 -> 34184 bytes .../static/description/step3.png | Bin 0 -> 17700 bytes .../static/description/step4.png | Bin 0 -> 40613 bytes stock_quant_manual_assign/tests/__init__.py | 5 + .../tests/test_stock_quant_manual_assign.py | 131 ++++++++++++++++++ .../views/stock_move_view.xml | 34 +++++ stock_quant_manual_assign/wizard/__init__.py | 5 + .../wizard/assign_manual_quants.py | 122 ++++++++++++++++ .../wizard/assign_manual_quants_view.xml | 36 +++++ 22 files changed, 1357 insertions(+) create mode 100644 stock_quant_manual_assign/README.rst create mode 100644 stock_quant_manual_assign/__init__.py create mode 100644 stock_quant_manual_assign/__manifest__.py create mode 100644 stock_quant_manual_assign/i18n/de.po create mode 100644 stock_quant_manual_assign/i18n/es.po create mode 100644 stock_quant_manual_assign/i18n/fi.po create mode 100644 stock_quant_manual_assign/i18n/fr.po create mode 100644 stock_quant_manual_assign/i18n/pt_BR.po create mode 100644 stock_quant_manual_assign/i18n/sl.po create mode 100644 stock_quant_manual_assign/i18n/stock_quant_manual_assign.pot create mode 100644 stock_quant_manual_assign/models/__init__.py create mode 100644 stock_quant_manual_assign/models/stock_picking.py create mode 100644 stock_quant_manual_assign/static/description/step1.png create mode 100644 stock_quant_manual_assign/static/description/step2.png create mode 100644 stock_quant_manual_assign/static/description/step3.png create mode 100644 stock_quant_manual_assign/static/description/step4.png create mode 100644 stock_quant_manual_assign/tests/__init__.py create mode 100644 stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py create mode 100644 stock_quant_manual_assign/views/stock_move_view.xml create mode 100644 stock_quant_manual_assign/wizard/__init__.py create mode 100644 stock_quant_manual_assign/wizard/assign_manual_quants.py create mode 100644 stock_quant_manual_assign/wizard/assign_manual_quants_view.xml diff --git a/stock_quant_manual_assign/README.rst b/stock_quant_manual_assign/README.rst new file mode 100644 index 000000000000..c2bbb2134cbf --- /dev/null +++ b/stock_quant_manual_assign/README.rst @@ -0,0 +1,67 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 + +=============================== +Stock - Manual Quant Assignment +=============================== + +This module allows you to manually change the automatic quant selection. + +Usage +===== + +To use this module, you need to: + +#. Select a stock move or a stock picking. +#. Click on the tab "Initial Demand". +#. Click on the line which you need to select quants. +#. Open the wizard with the button "Manual Quants". +#. Select the quants to assign (reserve), then Confirm. +#. Close the stock move line windows (which is popup by step 3). +#. Click on the tab "Operations" +#. Click on the "Recompute" to update the stock move info. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/153/10.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Mikel Arregi +* Pedro M. Baeza +* Ana Juaristi +* Oihane Crucelaegui +* Fanha Giang + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/stock_quant_manual_assign/__init__.py b/stock_quant_manual_assign/__init__.py new file mode 100644 index 000000000000..c1a24230cce8 --- /dev/null +++ b/stock_quant_manual_assign/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from . import models +from . import wizard diff --git a/stock_quant_manual_assign/__manifest__.py b/stock_quant_manual_assign/__manifest__.py new file mode 100644 index 000000000000..2dc9015d0a7d --- /dev/null +++ b/stock_quant_manual_assign/__manifest__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 Mikel Arregi - AvanzOSC +# Copyright 2016 Tecnativa - Pedro M. Baeza +# Copyright 2017 Eficent - Jordi Ballester +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +{ + "name": "Stock - Manual Quant Assignment", + "version": "10.0.1.0.0", + "category": "Warehouse Management", + "license": "AGPL-3", + "author": "AvanzOSC, " + "Tecnativa, " + "Eficent, " + "Fanha Giang, " + "Odoo Community Association (OCA)", + "website": "https://odoo-community.org", + "depends": [ + "stock", + ], + "data": [ + "wizard/assign_manual_quants_view.xml", + "views/stock_move_view.xml", + ], + "installable": True, +} diff --git a/stock_quant_manual_assign/i18n/de.po b/stock_quant_manual_assign/i18n/de.po new file mode 100644 index 000000000000..3bd276aa0d72 --- /dev/null +++ b/stock_quant_manual_assign/i18n/de.po @@ -0,0 +1,131 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_quant_manual_assign +# +# Translators: +# Rudolf Schnapka , 2016 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-14 01:38+0000\n" +"PO-Revision-Date: 2016-01-14 09:52+0000\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Cancel" +msgstr "Abbrechen" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Confirm" +msgstr "Bestätigen" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_uid:0 +#: field:assign.manual.quants.lines,create_uid:0 +msgid "Created by" +msgstr "Angelegt durch" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_date:0 +#: field:assign.manual.quants.lines,create_date:0 +msgid "Created on" +msgstr "Angelegt am" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,id:0 field:assign.manual.quants.lines,id:0 +msgid "ID" +msgstr "ID" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_uid:0 +#: field:assign.manual.quants.lines,write_uid:0 +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert durch" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_date:0 +#: field:assign.manual.quants.lines,write_date:0 +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_picking_form_view +msgid "Manual Quants" +msgstr "Manuelle Quants" + +#. module: stock_quant_manual_assign +#: model:ir.actions.act_window,name:stock_quant_manual_assign.assign_manual_quants_action +msgid "Manual quants" +msgstr "Manuelle Quants" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,assign_wizard:0 +msgid "Move" +msgstr "Umlagern" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,name:0 +msgid "Name" +msgstr "Bezeichnung" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_picking +msgid "Picking List" +msgstr "Kommissionierung" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,qty:0 +msgid "QTY" +msgstr "Menge" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,quant:0 +msgid "Quant" +msgstr "Quant" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:22 +#, python-format +msgid "Quantity is higher than the needed one" +msgstr "Menge ist größer als der Bedarf" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,quants_lines:0 +msgid "Quants" +msgstr "Quants" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,selected:0 +msgid "Select" +msgstr "Auswahl" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_move +msgid "Stock Move" +msgstr "Lagerbuchung" + +#. module: stock_quant_manual_assign +#: field:stock.move,picking_type_code:0 +msgid "Type of Operation" +msgstr "Vorgangsart" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "or" +msgstr "oder" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "qty" +msgstr "Menge" diff --git a/stock_quant_manual_assign/i18n/es.po b/stock_quant_manual_assign/i18n/es.po new file mode 100644 index 000000000000..d1433b2bd8fb --- /dev/null +++ b/stock_quant_manual_assign/i18n/es.po @@ -0,0 +1,131 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_quant_manual_assign +# +# Translators: +# Antonio Trueba, 2016 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-14 01:38+0000\n" +"PO-Revision-Date: 2016-02-10 16:37+0000\n" +"Last-Translator: Antonio Trueba\n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Confirm" +msgstr "Confirmar" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_uid:0 +#: field:assign.manual.quants.lines,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_date:0 +#: field:assign.manual.quants.lines,create_date:0 +msgid "Created on" +msgstr "Creado el" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,id:0 field:assign.manual.quants.lines,id:0 +msgid "ID" +msgstr "ID" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_uid:0 +#: field:assign.manual.quants.lines,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_date:0 +#: field:assign.manual.quants.lines,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_picking_form_view +msgid "Manual Quants" +msgstr "Quants manuales" + +#. module: stock_quant_manual_assign +#: model:ir.actions.act_window,name:stock_quant_manual_assign.assign_manual_quants_action +msgid "Manual quants" +msgstr "Quants manuales" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,assign_wizard:0 +msgid "Move" +msgstr "Mover" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_picking +msgid "Picking List" +msgstr "Albarán" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,qty:0 +msgid "QTY" +msgstr "Ctd." + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,quant:0 +msgid "Quant" +msgstr "Quant" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:22 +#, python-format +msgid "Quantity is higher than the needed one" +msgstr "La cantidad es mayor que la requerida" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,quants_lines:0 +msgid "Quants" +msgstr "Quants" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,selected:0 +msgid "Select" +msgstr "Seleccionar" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:stock.move,picking_type_code:0 +msgid "Type of Operation" +msgstr "Tipo de operación" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "or" +msgstr "o" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "qty" +msgstr "ctd." diff --git a/stock_quant_manual_assign/i18n/fi.po b/stock_quant_manual_assign/i18n/fi.po new file mode 100644 index 000000000000..7578e1c460dd --- /dev/null +++ b/stock_quant_manual_assign/i18n/fi.po @@ -0,0 +1,130 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_quant_manual_assign +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-04 07:59+0000\n" +"PO-Revision-Date: 2015-10-24 09:08+0000\n" +"Last-Translator: <>\n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Cancel" +msgstr "Peruuta" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Confirm" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_uid:0 +#: field:assign.manual.quants.lines,create_uid:0 +msgid "Created by" +msgstr "Luonut" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_date:0 +#: field:assign.manual.quants.lines,create_date:0 +msgid "Created on" +msgstr "Luotu" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,id:0 field:assign.manual.quants.lines,id:0 +msgid "ID" +msgstr "ID" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_uid:0 +#: field:assign.manual.quants.lines,write_uid:0 +msgid "Last Updated by" +msgstr "Viimeksi päivittänyt" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_date:0 +#: field:assign.manual.quants.lines,write_date:0 +msgid "Last Updated on" +msgstr "Viimeksi päivitetty" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_picking_form_view +msgid "Manual Quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: model:ir.actions.act_window,name:stock_quant_manual_assign.assign_manual_quants_action +msgid "Manual quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,assign_wizard:0 +msgid "Move" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,name:0 +msgid "Name" +msgstr "" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_picking +msgid "Picking List" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,qty:0 +msgid "QTY" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,quant:0 +msgid "Quant" +msgstr "" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:22 +#, python-format +msgid "Quantity is higher than the needed one" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,quants_lines:0 +msgid "Quants" +msgstr "Määrät" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,selected:0 +msgid "Select" +msgstr "" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:stock.move,picking_type_code:0 +msgid "Type of Operation" +msgstr "" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "or" +msgstr "tai" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "qty" +msgstr "" diff --git a/stock_quant_manual_assign/i18n/fr.po b/stock_quant_manual_assign/i18n/fr.po new file mode 100644 index 000000000000..94d19ddb7a23 --- /dev/null +++ b/stock_quant_manual_assign/i18n/fr.po @@ -0,0 +1,126 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_quant_manual_assign +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: odoomrp-wip (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-07 10:45+0000\n" +"PO-Revision-Date: 2015-09-10 16:41+0000\n" +"Last-Translator: <>\n" +"Language-Team: French (http://www.transifex.com/oca/odoomrp-wip-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Cancel" +msgstr "Annuler" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Confirm" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_uid:0 +#: field:assign.manual.quants.lines,create_uid:0 +msgid "Created by" +msgstr "Créé par" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_date:0 +#: field:assign.manual.quants.lines,create_date:0 +msgid "Created on" +msgstr "Créé le" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:25 +#, python-format +msgid "Error" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,id:0 field:assign.manual.quants.lines,id:0 +msgid "ID" +msgstr "Id." + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_uid:0 +#: field:assign.manual.quants.lines,write_uid:0 +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_date:0 +#: field:assign.manual.quants.lines,write_date:0 +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_picking_form_view +msgid "Manual Quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: model:ir.actions.act_window,name:stock_quant_manual_assign.assign_manual_quants_action +msgid "Manual quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,assign_wizard:0 +msgid "Move" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,name:0 +msgid "Name" +msgstr "" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_picking +msgid "Picking List" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,qty:0 +msgid "QTY" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,quant:0 +msgid "Quant" +msgstr "" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:26 +#, python-format +msgid "Quantity is higher than the needed one" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,quants_lines:0 +msgid "Quants" +msgstr "Quants" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,selected:0 +msgid "Select" +msgstr "" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "or" +msgstr "ou" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "qty" +msgstr "" diff --git a/stock_quant_manual_assign/i18n/pt_BR.po b/stock_quant_manual_assign/i18n/pt_BR.po new file mode 100644 index 000000000000..3bd0a7490d2d --- /dev/null +++ b/stock_quant_manual_assign/i18n/pt_BR.po @@ -0,0 +1,131 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_quant_manual_assign +# +# Translators: +# danimaribeiro , 2015 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-24 09:07+0000\n" +"PO-Revision-Date: 2015-10-24 09:08+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Confirm" +msgstr "Confirmar" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_uid:0 +#: field:assign.manual.quants.lines,create_uid:0 +msgid "Created by" +msgstr "Criado por" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_date:0 +#: field:assign.manual.quants.lines,create_date:0 +msgid "Created on" +msgstr "Criado em" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,id:0 field:assign.manual.quants.lines,id:0 +msgid "ID" +msgstr "ID" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_uid:0 +#: field:assign.manual.quants.lines,write_uid:0 +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_date:0 +#: field:assign.manual.quants.lines,write_date:0 +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_picking_form_view +msgid "Manual Quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: model:ir.actions.act_window,name:stock_quant_manual_assign.assign_manual_quants_action +msgid "Manual quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,assign_wizard:0 +msgid "Move" +msgstr "Movimentações" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,name:0 +msgid "Name" +msgstr "Nome" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_picking +msgid "Picking List" +msgstr "Lista de separação" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,qty:0 +msgid "QTY" +msgstr "QTD" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,quant:0 +msgid "Quant" +msgstr "Quant" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:22 +#, python-format +msgid "Quantity is higher than the needed one" +msgstr "Quantidade é maior que o necessário" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,quants_lines:0 +msgid "Quants" +msgstr "Quants" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,selected:0 +msgid "Select" +msgstr "Selecione" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:stock.move,picking_type_code:0 +msgid "Type of Operation" +msgstr "" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "or" +msgstr "ou" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "qty" +msgstr "qtd" diff --git a/stock_quant_manual_assign/i18n/sl.po b/stock_quant_manual_assign/i18n/sl.po new file mode 100644 index 000000000000..52f6b36c487f --- /dev/null +++ b/stock_quant_manual_assign/i18n/sl.po @@ -0,0 +1,131 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_quant_manual_assign +# +# Translators: +# Matjaž Mozetič , 2015 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-24 09:07+0000\n" +"PO-Revision-Date: 2015-10-25 07:18+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Cancel" +msgstr "Preklic" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Confirm" +msgstr "Potrdi" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_uid:0 +#: field:assign.manual.quants.lines,create_uid:0 +msgid "Created by" +msgstr "Ustvaril" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_date:0 +#: field:assign.manual.quants.lines,create_date:0 +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,id:0 field:assign.manual.quants.lines,id:0 +msgid "ID" +msgstr "ID" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_uid:0 +#: field:assign.manual.quants.lines,write_uid:0 +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_date:0 +#: field:assign.manual.quants.lines,write_date:0 +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_picking_form_view +msgid "Manual Quants" +msgstr "Ročni kvanti" + +#. module: stock_quant_manual_assign +#: model:ir.actions.act_window,name:stock_quant_manual_assign.assign_manual_quants_action +msgid "Manual quants" +msgstr "Ročni kvanti" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,assign_wizard:0 +msgid "Move" +msgstr "Premik" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,name:0 +msgid "Name" +msgstr "Naziv" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_picking +msgid "Picking List" +msgstr "Zbirnik" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,qty:0 +msgid "QTY" +msgstr "KOL" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,quant:0 +msgid "Quant" +msgstr "Kvant" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:22 +#, python-format +msgid "Quantity is higher than the needed one" +msgstr "Količina je višja od potrebne" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,quants_lines:0 +msgid "Quants" +msgstr "Kvant" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,selected:0 +msgid "Select" +msgstr "Izbira" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_move +msgid "Stock Move" +msgstr "Premik zaloge" + +#. module: stock_quant_manual_assign +#: field:stock.move,picking_type_code:0 +msgid "Type of Operation" +msgstr "Tip operacije" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "or" +msgstr "ali" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "qty" +msgstr "kol" diff --git a/stock_quant_manual_assign/i18n/stock_quant_manual_assign.pot b/stock_quant_manual_assign/i18n/stock_quant_manual_assign.pot new file mode 100644 index 000000000000..82af0a95cfd0 --- /dev/null +++ b/stock_quant_manual_assign/i18n/stock_quant_manual_assign.pot @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_quant_manual_assign +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-01 12:46+0000\n" +"PO-Revision-Date: 2015-10-01 12:46+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Cancel" +msgstr "" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "Confirm" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_uid:0 +#: field:assign.manual.quants.lines,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,create_date:0 +#: field:assign.manual.quants.lines,create_date:0 +msgid "Created on" +msgstr "" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:21 +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:24 +#, python-format +msgid "Error" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,id:0 +#: field:assign.manual.quants.lines,id:0 +msgid "ID" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_uid:0 +#: field:assign.manual.quants.lines,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,write_date:0 +#: field:assign.manual.quants.lines,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_form_view +#: view:stock.move:stock_quant_manual_assign.stock_move_manual_quants_picking_form_view +msgid "Manual Quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: model:ir.actions.act_window,name:stock_quant_manual_assign.assign_manual_quants_action +msgid "Manual quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,assign_wizard:0 +msgid "Move" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,name:0 +msgid "Name" +msgstr "" + +#. module: stock_quant_manual_assign +#: model:ir.model,name:stock_quant_manual_assign.model_stock_picking +msgid "Picking List" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,qty:0 +msgid "QTY" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,quant:0 +msgid "Quant" +msgstr "" + +#. module: stock_quant_manual_assign +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:22 +#: code:addons/stock_quant_manual_assign/wizard/assign_manual_quants.py:24 +#, python-format +msgid "Quantity is higher than the needed one" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants,quants_lines:0 +msgid "Quants" +msgstr "" + +#. module: stock_quant_manual_assign +#: field:assign.manual.quants.lines,selected:0 +msgid "Select" +msgstr "" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "or" +msgstr "" + +#. module: stock_quant_manual_assign +#: view:assign.manual.quants:stock_quant_manual_assign.assign_manual_quants_form_view +msgid "qty" +msgstr "" + diff --git a/stock_quant_manual_assign/models/__init__.py b/stock_quant_manual_assign/models/__init__.py new file mode 100644 index 000000000000..2dbb95a2877a --- /dev/null +++ b/stock_quant_manual_assign/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from . import stock_picking diff --git a/stock_quant_manual_assign/models/stock_picking.py b/stock_quant_manual_assign/models/stock_picking.py new file mode 100644 index 000000000000..0502d9d8ea98 --- /dev/null +++ b/stock_quant_manual_assign/models/stock_picking.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# (c) 2015 Mikel Arregi - AvanzOSC +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import fields, models + + +class StockMove(models.Model): + _inherit = 'stock.move' + + picking_type_code = fields.Selection( + related='picking_type_id.code', store=True, readonly=True) diff --git a/stock_quant_manual_assign/static/description/step1.png b/stock_quant_manual_assign/static/description/step1.png new file mode 100644 index 0000000000000000000000000000000000000000..8472953fa1b759bab0726dda3212032ddcd0b501 GIT binary patch literal 34491 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�jy`a>?%>cAT9Uy)m>Q~vce@0zARz5u#*;Tqr@0XLyM*}G}$~svH=S} z)!F1xJUTDIVdQ=^(eP6-DwA}HL1KScVd!wRgQOWd#>gM|Fd#>}X%J+RX#PRUR##N; z&aaxD-n_Tn_*qX|qi(q+$Ipz1f`oKK8F*o-Lb`jsyJcJMbjDddPLts15z^pDaQX*_ zKk3;stbJuimW4GvX;gYIVov|Z;hD&tcuk~pkdWWf{Y;qE4ENLQ)PM;wE*YQffC)+= zHp|oZGWLE@8%ZWCWK0|FL!7#I?3^t}=rxYp6`~ggm1RebkPWY*dxv?BkI=1;ZgT~Q8PCkQ z9$p=hD%UBFuA){dj)6+I?wYr4lD&?LX`J@Sb!PHUKDaLIMK|vY+T9AAP6{U<|2pG7 z$=h+JQyh2u=!<{tJ-DWE6aP5w{(W(yGD$yiHbJpAw{1T_`Of=;Lf3t2nSxgqu2;qD zgqI1ypba7mnYwkQ%+}kLuHX#ZE>ZUJg)V7(RCu)?*Ok%g$b%k3n= zN32_Sq~+sK1U@wBg-$ODB~8Ms?;Cr{X#J!(PoaMvp(~> zLVm3wT@qUc>!mVLR3@n1(*N*mnbG5QeQJ_SsI%jQTG5Wg0Dde0w|}ZDW)!d~BVu10 zP|MvoElu0K28$lWbuIXj&ss`DCjR^E>L_j|4t(!gaHfm9-4uGhb2>6=4|ZaeU%4s> z+qf3$ztingzf?q*sX(^*u;bFz1b3u6?81}-!l)gR15&gr{0ptTtwUBtel714ht#{8 zU6(z&4_|EKpP_Mz{V=b<)$0!;LHi{*9-4=TOQye0YvMjV*_P-vJl2`f_c^Z0<^{Hw z=ZF*Fy8prz@Vrce=JqX=Jj|_OScUBo4Olyn5F^1Y)A+PGp)AR<%oupu(wXi=uah@S z8@EyTD>>!rc$HHxsZD+l%)f8sw2C>HrQ^1;Xmv1lwM^jB^g?|q^=X&Zl%sy*6QxRi z(^=Z0&rWd%gM}lD!*wg+_{SvbX?wZL--v14cgvnXBFLIPr5H1|Fl@P(LimzXE`Rm6 zhymm+NshafCHZgEsgS8fnAEDsMXQ<01@VB7V-YGHzT^5WvyLtWRH~`bjFqa#S06Nm z@pC^U-zU0m5U8>^*U@mZ1I7(cyWJS8{PKv4YmMKvufav1NfRXjQcxYuoZ!8?%G|r{ zi~p{l_k-xh)5Wj3!iu!>BGR+|w13gh#A+itPEyUexkBkEM({2#J^BVkRL#xF%^Gua zTrl5bPJc*8j=%Q|#Ty&nI|q{wo~7XlAx@Aaaw0B1scLdzM5*{Ir8j2tcVz3%E#f9P zx3`VOjYX3eGZNROq7=ALxShqVzwU zh!WYNWMIg850$=t5Y}=E9hE4cL!YJiD8f|spNw4p(JtQ14rFTa45uCYsG@W2N`MX} zu*D-nTaPktZ27n8Mm`mWe%@XhpCGjZ&IT79WpIJ$yPYYI$_$^i4!}qz6P5#Ui*})rb1aVD@MS5ZfNFt3x8DAh;e7$s>Xa{ zaW74pH9MpWfCu%q071jPD+A?6dmvc(?&Oh(}{1tK3mB*!D z94l5tH6hW;r=pN^8gDsNbK8a-0M;ww=9BV0`eH_zGt0NBRVrBq4(g@MU(=})eCm0l zX5JmO6!R<8RUp=@XYNj(Om_;41Le}0IGiZ+Yppg*v|Nu_O1_6GwTqgC{E|RQ+4pAe zno+N;@f{QA=7!O5nCTf zoza@RSWmTMC$4}tQ);Y)xXAlo zZCEu!pFT(W+`A_-Jo{o_A@p!f#HiF10Su4|8X$sev>U;hRw>LJ(uWQjCtNM5o6d?U z?Iy(cIHp{2iI}bo7K@LwH+iQ32|1ZOy&IA=5b0_B1$H!4-c404a(C$DV1jN!|3TFq z*p%v^3qNDz%?l!Cwb^DO@wcODP%L;*5=+T+$ z%V_Ttd{YBE%JmXGy2ahg!&b6i9V?wl=(FpP6y1vpO_-A!m1?!oM=$0C4g5{@_#v!Z zxpcyjX0q*7cleyYz*srHznx}{#9O?sa?=bin`oUa8o;Gi7nV;4;y9};Qy%Z;?3mF# zM}Lat3Ouy!$Mmr9Q7h=FAwGsmL0=V1d(Vlno>6^#aOKRa_k;&9=OR^`e$_tX;t6;3 zIKgoC49Y<4RZ~uoQNa50Z1&THFSup5KD|9!;JerQAu4I*68eOvthvu(p>(H;fws)| zUgUDVm>=h*u7tH7f1QkW{iyeONg*UfC~J!IHb}+1QT||nnu_me^}q|ce{9^pJnCe;FHd~iHYLX z({7`-_N>hjC`-eLr!Gt9y_&M4Tc*4jcrFzLf`?`T6IT?b-J`e~&^ZsjBuHK|&K@Nw zX*74Z^7uQxyoFp;`LPbV+64C|48|!R(dF^hTF5@ zwl{@P2_lF+90|nGXylSxJ6nHxav!HaL1TQ;l|!KiX( zN_z)Nr`;=v^P>)nT)5XfcaCyc=%}{*#$UaM{)!XCHS2B`#%!n9=&54sjVdZ1TZ zl+bG>V@2kBu;LtE_kq008hT%{U865OR$QYgEQF8ES%@!Fc}NRj!V9n|M# zlY?2_kjJ>$Cj&u^j@LdfWAJWZzutLutKQPcDL zcn@O0=*Qp|RHdqnn^4w#tIYB*wljxyuf5?f`hJ6x#YquhH=!7^>_yXCDL>x`M5BXs z^KDc;SdF7e)6 zvj3td1%_i(@F-@ddul<^cEE1p3grxxRF)^r&3ywT6ppUngeYrbAH4Y1lwobmZ`@(l z34%HlX4GWfY<`W@VuE^8sD3ebJv%XXtxFbHled`DhgreBunrzjPKo8*X1D(D7lX~e zuirR`(kF{o{O|n)^2-dHk@lZUDF46iBmal{3F3zduMR-sb3}RTX;hMQn*m-5QK=jW zlz`Bk%Ht2g6k`gmfQF4@ZPPq;YGRp`b5mv zC%Ji-{__-t-9m{Er`>7(3mAI1@x)rx*L8nxbAk+1UTw_XX5GYXzHCIgDx_C~hM&j=l(PJa>EN@n5i)0*;$Fi>Q2Z zj7`2On@I=AH-W5{cVq6~*R3vD5e(_R|M6UN!9#)2&N^+Z3h9j~(oG<{7ey*&o2z?) zX!G_%8k52evML~Br2QwA9I#GxV)&V~vILwZ;?*ZJdNMWrzZbB6SLs3vx;5JZ5-k5$ zgbV*c!TnFWKRDVRw)6|ikWrMZ%O;u5g?=+~eqD8v$+Wo#6x;HqyG!Q1{N}w`*DIS& zkTXCxMFvodANCRT%3mlngzBK?NTKY;ok1t&t;z_r_2zILF^oWFOupS`BC_brt!ro! z<-q=Uor6Pb2Wi3s98_pZ6#2V1N3;Gw6;kC2nZdtg1fd3?OPc?^?p*3CZZciB25 zNaV~WOUQCS=)(sRhEP!&g~@s(`=;qD@K!V0o)Z))k<&ThQC-`R1X>a+ldJmq8Q7wNl61;e=zX;L+iH^Y!n( z1WmU6vxAbA$ZKN>G2#77iBxtMj4J><6*`J*WzX|ivLoK9eREiT*Fb$3?>a*f4$x&G zB|VD3r-)1ToS&Z~dmv^ihy$p!3c>gk!OF%~Lu3K+o(0drS0bJwp1D*@H3dTaHyfjm z>=kuW-gEt0_T)jwo28u28l$-Lh?RnAVht-eVW2<2b_DpF#YIK$jeLBugL2OYam245 z-wZszzaOXx$c!_Y!_5NToP@`dVUF0zu)xVSz#RnEo1B~qC&ez|DwGF!uFR0Hn*oiM zJTzGKX@~=d|6gh=Kqlrry|ZucFV2<@1hMLsNTDVH9}iz0!GXnUjum$SG-!m`RX{-b zlhD6r$Jww3NELHns^Nd;kL}?N!V~$eh@uUM%xI+7!iK@a)g3R@y*^LeS}3r9h_zq} zcZLhj>iiI(Op-y@dw?a_R?YdOl^sRcNfbw+I+e@C=%18M6ICVOcxSY1iL`C%URH~# zr)8C&gX=jRNgh^3$|yVJSHM&4mgilMp%0H4%VMQhje@#`H@FuU9Go>n z-KMNXyE$_6-%07Ofv1FlRKxR*{mh*s3Iar{W+nUG^hY8CHoRyyl(9!z)5#wU5ep=gEfS`rFB&^*n{w@{W;>3 zjqF~{w&hDdPuNgFVCRYj_X}6H_cE( z@gHTzl7kh(b1If&Zn|DM{+onSIHLyER6tYm;e1-H@K=+5aV>Th#LO#gOr;Cs`z0;K zi>yZzDr6wJIS0rSOUqq!wZ*W!2|Cg;{g;CVANDj?QJNyJF@^nT81uZ>NS%M{m%7Xb ztD|{p%}Qoes)kZWKC8Xgj~Q`lH(mzB%(0wdiSaQHL*J=ev& z4~N_N*UrR`^IVS#`V?!1yiFyn#`w#h&R*%aWYLYgH<=Z_%yE-@de`bF?ph&gozn1R zHB9*RMa)USkpK}e3JkPW{G>_$A%4OL9nvR#PrN(R6s={FB%?>r5h>T(SY6CDxMpYv zT(hxTeh7cJ1mSGQnW)3Ad4H;X-h=l*n7Yo&Mx%yvxF^n0y$$di?q%DC;(t>?w$gJ` z4%^4I%8X4v3(AX8lor!>-T!;*@;lV4v;@rIdWm;$v0I!==m=2f*X}#f&@%7?6Zitt zm2%YbhBb1~3>m)kOY}t51IPZ$V^Wwtlt-->r71eBPy1;EWAbVy3oi0EC+ne3qb4&z z;^|poUWn}YM}2?roHg%KMOd(0#!*>Ko$Kur%FZ;vP7PQhdm~4$y9=xQGRtW>P!5)| z%>t#+)5MH()t49J{Y_pf2gqONL3?VGezn(pYp=ae=m@TU6h?D3gBM|Y=<~}_XCkjC zB3P$12FUCed+L1UQstlD=2~Gkt5V%(dm1hJHg#NWkyoL#>xR@fw$p%?`c$EVVOiF?xTjk}=XhGtv2A zl7}PO7cht3o-8`UKWxwIWi5+7{Cn8GfGzaJ9_y+c9y;syIsPK-pI?j~1!?9c@5j&d zrNyqe8vBYVxN^I(_u2ejxu?baXMV}q2^0UxNDbNEVfO;1gMUCb;q zjeRB_+m9NU`hC3P?y-M1oPul4Tx++kcJDh;4Jc#}3;Y_}A9Yk}`fW3h6cM>-h42&7 zi?`?c^Pey(X2RF&GJRyi4_sy^67cDagp#ZFTZ5D-v6B3(tLgMxt6sPr1?EhKhC1*8TDMWwf(bOIqN zN`MfM8X$y-p@k442_&RHyub3^AMgG5&iUn>ob1lo?9R-0cXoH?GvDM}wq_Flocu>j zOiaSU{JOoE*v=6#u^rgI_iR(nj=wA2{@D>>Z+1-#F(^aXuI%!=YI9Xg>{Hr4{{7wC zb@7MhE)im42fqIK?l^MJ@{yR>b6Jb)SMS7n(um?M2blgkdnKd*u4;7}F7>Ntj@5FY$>Mz|$g%)gYCHX`G({-U^7oIPD>>5V z!=)9T06tG@gd9AYaqPs-9_iUllcBtbS$1bh94y__rM{E|8+zw5R0|n0j2JAaTG8FL z&6}85miIH>zW+*=S58U%DO~wy*S3J$pVI%cgyUM#p#&vRoA6fGI_ma#NE_rouJ%*` zya_KP8eB>i0CsOJGJE>rWb(p(y_o*%Cwwq$ImQ2&fAoc(f?se1&hvYGr#@b_de?o* zm6j>+IhUgmlpJZsbk7?dTYPaQD&@7$aP3LJop#q_gKu}Mhkm}SOCYN5^E?0cXuw+z zcF_VQ4F@La3>7Nmna*4Q=HRdz*^QD>DGjm1=d1V%l7Cq8Vf5%qT>%X`Jm=xG?vI>3 zA$`PwZINeLdg(KKSmC8ph)sld&y26O*}|*6!!56aLxa^&#~*Rt_F z!&4!^8UI$-X{RRSl}qur4obG{wJp@q$qfmnX4wL6S_3Qe_C`ra3}4*4-TkAvWgIAb zG-20(a$mB~KOY=V{6)EN(BrIL^ZOv*zBBUHt+||4^SVJpQ{RER=j!VA;efQ5?&$a& zrz1nQX|O$eDUmwZnE`NwqT5@U0dmhgUP;ZhWOtCS`YX9zlhwoR<5g})b2pwGVr}X6 zSba)7SX8Jy({&k*`fk-#Qxk*}xeZ)=^P<_z&NL({N=L@Q-=Mjan3`6n69Arzcrah! zK(o|i{n5j%0|q{$E58f<=||%3Zz^dw8*=5$VXj*bTdNnE<4p5 zPF1|b@87$ldQaGT^{AJlC#<`XuqxwHg{xH#b3HkDDpvY;-*m>}w>B9bU-Zq!fd#(nb4$%)fAaT4T z@Fz3mR;A--I(~9+m$%i2m-a__fxkkFTFQ9|yWZzTF7jSZI>#YkanVy>CE~`1+|DC( zTYanwwG}a!w1RF&$9ID>i*oMpLYfrUL#4IL==(n0>nw3}ntWQ4l6-@C9X@%+>X+m$ zaJ&T5DtNxuwHntyJ#&@Tw28!BHaL9F$AId0lZS7)=Kj7jIltu4+Q7~X`@v-N(eTBK zvMEJ7wuM**fmUIO2mp5=yGzQ*Qpr~QDTUEAO=Mp|BK802e^ou|vQt9KKtUm3Oemqbj@+<53}#Ao8DiP*1@2U(4JB(1DiX_Z|W3bRdD-#EPaBa zCbV9{f?;YNrX$cq5TRZ5&8WE2vSsRK#LtlLYo+l-#p=9E2C5z{ z61AK_VxQypgz%-aU}a-ddGmwTJGV!=d{oE(z*B!ajPsouVwaBI>3b{wIqgEh!n-@V zhnzsH$MB=o`IVO)`U~q0$wuEG$=h}VQjc_DsPYHA+eS!lNj*7=Q;7$vZwINw*$8w1 zX*nm%v{IrLI$wscB8Jbj<0k5DD_MnU#642qS^@*YI=_)r?i(nq8LsS1U#xVE@gNVZ z>ZxrOY$g4RcwODVuATVL&OF^-u>p06RnqB+d(+O8ONEjjHVdboE#m=e*;QwP7aM7= zKGkxqy?+(w(Csg|J6_vnUO(18d*RuhF|E32zm|)WO9Q4mom2Ejf4D}QeCRPO%EWYIbC5FtgL(*nUs!idYRdK=6yhImeOajA;AN$>eNOX zn!{7_D7roDsWnhb?1T&~c3Qkx9D9NAAZB`3W6OB+g9dsI`~3QlYFDAH(p}vLS6fu$ zZC93jq`}y8P3S-4Uf8-5C5;drAGUv>zCNz{^|{;VpG{co-AGo|^^<=}kLDg<`5%SD zd)@^C{*c6;9{V3#!vD*DcA<7Q-I%Sc?G7ZNet+>n{HNv%1^cV6APXLc>m3aKGaEkt z&|dzFV!1CT;i;JPpAPrbzmhCfYu48t|Mq8I-ixj7y@G7L8mPFt)bzgmpB7?9j@M5W z>MqNye(}v0D1Q9I<)ePBcaI~hb}ZaFpd?=X-ya|9Ek2G^c}#wI;JDs@ioG?J>T=5C z{FSqpSChT|6D_-fw3Bk}%c;lrD3??J^nB|CSN*NhZ>qeE^PlSRyFQYo;v1=jU`#%F z{~wB=qV}=QW8!CX{WY2GW5@O)m*0L`;_vp#E&Zv9rKVKl-~hJD+phR=KX>2+)Sa7# zki?u^`Xj3t*Li%dJ1IfdTr{X4AD!qTVpiE9jrV8Cd$4xmVVgj@2!P)!=3)@DmX&F% zZ*f4*@SJinxIx-&$`dMxn)>9GWSx8As;%Mrb->Yup0J)PzqqELXL#HY1bH=8PCdxs zR`(#nqr;nBRH(IB8>U4qSDU$8c`0bZeEhv>Qhe0&LiX||Li3uKN8GO+n@qgXJXh?> z`~nP^qhOZWJNe0rnEPe!^W&WjAd+$1=D2fv--~O`*lZ~6PL_^*{%?Q!x$vvbb zi%tTiQXo?uF|FWLGCloviEWs}$7q^sm458+dn+|mSrgQk%^QDzP;)lS6%MhDmbqg4 zW2AM1-?pM?A>sUWOvlBi-NPkj3qRhQvV1Acc+bprGA1IED0zACxVbxYIb|!VF`9-Q zNzA&3Y&{@ve8wzQCg8a(kc{t7 zDJf{tBkIlz1xCyP?eMksr33k@#G=`ADxnR$W0(^=lc|!Z^hjc@M@e&i^>u=?2Hgyr z)YY9-LZ&>Wpb}#Gl#MMe)NROB2a1FOMWB5qM7S5B*)Ye3oR1-LUP@mpLkd#a%0&iZ z-Gs&=W3^)*k?GPW4f!b8>o8zS@Ra=K@wd&S*>jOZ!_7M|nKEzv>N0ux~l? zSTwbG6^|{bUwcp{YwXysIb_5xaF3mPzCFSZ_`9~> zz5z3BVKd&a9sg5Xw^xxIT&COn@B2?E_TS~LE3Ge}K&><2#vE(Op?j|M_tmV`DTfU$ z&-hAkaYk(cB4TshlIT*@x@9`|ig5K#kQswt~Ctqzh|%jsUECu1D@#4&l) zUK=Y@Aj$aNU-+kH$c3$RWQZ>u*DGZW?b3-Fm6S0K%z2%ocfVAR9@=vObuHj*dG5NlH8E()NP&4}){ryehRIy;nnfUMnJ-EN+H$SpFZQG!| zIue4A%nqDx(#OM&6yb+#2SSojZKABb08ly;vUGsMeO~<5#AxYe9B^FKrGXixO^b>X zY{j>yPw*eTYW2b#(A!>>#9R7FlJYGi>i(wzCc>Xzp0diT&{|#B0G7txMr&+vv8JN;TJgNG>Wk6G>ZnrCB4--4FvZ=(_63{3N+ZuxscEoB9`&nCnTZ`r0O2iweeNB^=YN<8g@lDpaPG} z^OI99l&yzvntf@~y;hE8l@lVCD?Ip*hcq9ZSm6H9Jq@oI+CW@)RKlj`>T@Q6^7oj$?XH8Sg_5HgNoUx+F##gndMWED@h0oU; z3``91R175egY>`c^IpC)9?t!WpGeduQNkM^Y=brQS7%&DHiKxwtv*i};ZfhYV_ZO~6A*SLqYvs@ zc)~A@vO=HsO5~wqd_$|7+?Yg@jI=~$1CYIQvtt?-)iAvZ*Qf#b#Y@#=lSVUgXjU-d zT793LewweyW8*y&0E6(lnZ-KLdV|b0AY{dXQDsL|Q^UpcTd4YJGA=44(MH9BZ{uwC z`of+{GM75#)7nAD7n24ro$Sow8#KDeai(#Mw3>KZD@(hytK$<%+86~$?XQ5Wl702? z0B1+|satrd-M?MA`7H*KTb1ImX}wfB(jM~hCwm@M(&1Bl!ZyD()^Bibt1o=1aMb&i zcoI7Wb*sylt1O?KYQxYn^CqR=X3Uv%T{VWJ?Yd#0mx_y zE!}zkPTtQK*OmHr`z^Qim+TPw4H1+`?SiZA-O)kU5hi=SMCK_L0%+GPMy=?&*m_;{ z>=fNH*Eo6}`OxC~l9HMxTg4R3vQfBQ;#cDOk0GDt6BGMwLDx3|(6%Q6LY=ZwnTr2% z0sXyclbp?ZTfBzMfePiij;uk_`IM8Fs_g(%NC`71VaZIm8En8Ec_$wZw_)4lp%&;i z7X-nB;5i7FJjcF);ZPv?8Wqs)g-GGG(MW!8`tU`$i{ako=zbaY1IlwkW!Zk@d@p&{ zdnnVEZsVLvuEpC&Mb)*puVvtTCqeXxAwv~skEra0oBTra}SF* z>gC)nH7v$+OxQ$KSe{p86O*)11Asa^adf^0_`1JmW@bTRt-Eb8vPRP?CJAlh!7+7) zzk8<(IFaqws3Yh(BtJei(z_Lybm_pSB~n2|v8M&)+k`wR?Oz3*ao4K4M0+QArIIzh z&2OSVv)MQQdRf==i4yAHt(bazy@4?r2nFdQ(7_dCh6fa4wB96W+tUBVJ18o&nAVW3 z$CnVw{I%-%^b{q>1KSY$gJpm7lSc*1i$Zk&$L#Xka?Wto&wSn~Sk6Aq+h z*y+4UUz$G9+l-%>I<#V%l-9dLo3<%P@`h2GL?82@q%YkK%oI~bHN|r_;a1C<-Z_uO z`oWkVyUH;r28jXKSDZPnETicNI$4Dt83{>E$iPFT;L3!S_LZS3Yy^&p`%3U{(inbNn*}Z;rzi4&268_Ms%URahQpcC3$I9$uE~2fwJ@K&(4dBcMB|zoNd~tXrnn(mx10I zm+x0>;Yo4GG^O-b>&$l8tfG8E#K?c24s+h9pMU;)l$YO^O;+M94`+wdO>(72;}&lYt>%T2hD*rvT+P9pWIKL` zAyQzI7sBE#v2U~j4P;qla0QbZZh=vDHDl=5*nwO(j#Eh=(Lc1Nx97N`_^=>U_rglZ z_WX8_m^xxl=yGhy4;c^cR6X)Lvf2+}h9)lt%KK9s;A}WRHcSQAP8??Tr59hB!B8U-Xm>bu8GMcw$+CbSf9r=W@*7is` zu{M)?5IH&sloIA2s0gSSDqprQWx6Aremqquh4itPAmdhEPbQJN{R{V=f5SA47 zz;)R*Pk~)H6EBypu2I+(8Q)k+w_Cy4`}tMi3^Nz8c*i;yb-P~2@Tsw7fjTZWq}+)0 zlmW03-bB=YYE4lBZ7I9$wqZMTxD5lir!n-&q6g% zNspI$`Hkujj#Q98EM&kw0nVz4E;dR)Bk9xrR~2SRv(br0gJzf%*hx-vt@{z0+4zL| z$i=WHZ|HKGQh^3OOkV(GQ9oj{ECpGSZ-tT1Vy3#}l9353H_CTtr~>*sfpBur_@4))L!B2V+d`H@Fq_9h?7FCSE%OGNj#`X7dG8jJ0QpFR zZlH{ZF`Zs$t6e>?5!^geHyp*Wk47iP>!VHN*1a~DS>$<20w^7BGmQjIQ}_fqPCl3~ zkDnBFMbAYsJMd$&eyaGTlpVo)^Xc?hxWk9hHGay z(?Ab(2cOc_i`^g@Lq`Ohx0iu&NRz69w(_CCVnq?RwQ=4Invgle>x-~C6*6KVFyt^z z;wr55-t8zdvK$F%p*(UC{#11ClO$thv@k!cogFhZvgL)ilo9X6cBa6ucW~#Tenawg zJcg=tZ#L}ShZ)~;D#L`&rT2d~yV(;GU=G2;z6HqSo@kWGjAxDO4o>sZA6gVofiRXgLY6L zM94($ZxwcTSeC(E3Y2|=&u}kvq~cRFy5Um7q{>x)5lup&XrF(3HcWmz46D`$klUI za`Ek~?l&=4d5dPy(=q&q4mxkIjl?lM&IQB^*B)?~HNqQC$hF5zzkUOqbd+81hjCK6 z$lU!!YAPZFxglC>Ec9^FUh4K*cwthR0ZOEwFz_s1CIqxV8{602&MTld>KnZK4si%@ zU91V1cAIk2MI8q8RI3Xr@wpjHP*MmC^0C5Wqo)ud@G{mbwbGuMW!~my+33xevm51r zshq^tP-6aNyRN~W^UYG;wSB>Yln>EUZ}k4r>0+y^H+R{sbBe|o57+X`HV*NhQe@Qu+_1_9Ceb`j=`7z#-$bJge|@ps2W>~r$}KG``M$EgloZ0u@t16^byXq4?9#)` zFnwjP*R}3-X^sP1>au4pk#Vu80BpoeYf5ic@SEdtdEmJUn`{ z8)$Zl@uOJu*?k|Ze+ef6Y7KY8p2A9PGBX2Q{epVP1ney zr8>}NmSj-YSU>5muy1qPo#CU$dv7p5TXD$<6&f+>00Hyw5+Aa{!WSd}79rGW>y$_2 zRD#BKFw>&k1~qm7_UCG|Pt%YnV`Ws-zT-jHT8gQe_t0=M;|sQC{u8hn`#2HQ3pGTW z4(iw6wAJ2$2&QGF)Td;tAq*{8F==m!UV+{Xou^EK5|a2+5?(&tLon>IV;Zm_{>=5i zmr$mml^1ukgq$DX6LjzvhvleY0FUwO?VIr)i=PU75cS4`?%iCv+x!RZ1HB{>F`UBy z0Qy-q<=A7I37ImK)YO>PJinpz(FFx)c-5ONikDW*{nz|r$BNzx(flDP=$kCTmyYrK z6(Zx2$aqM|5m7p(Z>NdSF^%j|+ekRM-;9!)E#6FP75ZYL&>Y?3O8+0 zk-i)^ul5qTn}56BO(5aQhndhuL2tv;M$$gvWEq`_cHFw~MK$rVuA5_GdC{<5dRtgx zwh|8KkxYu#8qh7Ci?{mGD)@0|B_w=y34D^C%|4vo?#a%O2OXk%}1ds&PmWd`?=ZhB@_(5=e&~ z%Vs)pvp?%yh$@@VTbd1Z*!>~t<7&W+eDQJJLNJx~x>Sc56>n9tar4qZaMYx;ghBkq z1I~aX^jtB-`Hsixa+cNi8CT2f_N%W$4=Gy;d~Q4bDDlEr)txAzzfA+j*ELNHW=H}T zEt!}^bKzpw5Vq`jDiI56z&KH&pWO_0%WNCa_RS*~#p(Nbc$vha+(UAPoA}1xJGv|_ z8*c%|XSQ15V&<&@)QM=R`ZukZ;IGe4N*@fqL~acZg$2NDKap>gpOue^kgC}6N-pk* z(ac4F)tbyr%us;~0QjECy#8>Y2fDl`VW3GL3?_sigPgFhrm+hiemBPVrMVm4K!7P2 z#>e))>+JB+UGwizSKJ7Jvt2@AOY6z;vV+zYF{3QE#Tn?dJ!JH`OoDlRR0ieFA+NRsYq#MJAbOJH@KPAZ<&pblL8 zk#u(00Jj)BNj^kN%gK^oh1?ddAvvWqe-b z>RG8Qc-$Z&Tg7kntt0h%G@Ym{+GOgw#Bh(dugplTs+dpP87ZUIxY7DrtL>Mdo20=o zLMAi;*#ajG51=bf8mRNxku$6cZFEXJ(U*ad#dJV3QQ8+2M;Q5$l!Os{3QRkCSvm8X zRN3&Zlw-9+PRSZoVr}m{ORLJhp|y?OjwJNoxP8!I?v5TgJA@I;`c5(IZ<2=>XQLw= zJLs|gY3_P8S=FoU8G~^8wkt!b1BERO!^M;aU~&q=(r!Gr=-H(QXO~izRl6K4$X3+V zUoE2E^iPaAxB9n^X~yKxt`Et>DZGC;i)JRO@}ezF*{85{_1)vrkh}|?fzwchpp6&c zh~_uwvHha>vRc_;MK{8wMk`l8y1qp8W{*8uzPgxanXe4=YX+^YkGX<^6PvYZ_&x7K zMU$9Sh;U9`SV*+P6*N?h4RG6M5QP zKYG#kbnk{X!M|t0U{-+?2~LZWHLh)SoJ!o_jl&R{7#D*&Pd7sQ_g&|MyvJV!Xf0%% z`;lo?(cc7X>2LWrDEJ833Kv^wLJGr6M?k$w9d|WPm$*Eov6n97FHd;<;^@UbYv*h)7qi??$Y;R{~!ZfEUs54+-Po0(N$YWygcP>O1C9Sq0Z!Y^3e zTaBM#QH{;Iry`qnD3pm1I(IEP_iXGTdb}q0_y##_CHCHbp`2@u?BA8hNcuzrOm1w!$V==yku+UPXx$TA(Qteu!Ruy62 z2eG>hgg?vo&a0)Q#IdhZ;tf53Uq}Yp)M15TwF}cJqbV(Pitlp@XWL0T67pJZWo$a} zmYb8{ruW3&g+m=f?U?ti9@{}IK_twj9?=n7K{ucq#Fz8uIxsH_Jk_A<<0lxJ`$FGB zh5gSNwvBbiY>b^*vifHVhk~%bW2N!X17$ThmN7Skvhn0V5jz^f z>$PpAPco_Wr=`rrj$0!e^MeDO^^QWJiO5>RZ9Tctjpr42+4AOW7;ArfHAd@?dw8O% zbiFLHh()#G42Q{QNiV<|#0rlp(?yXp;pk=PMv45?S{F~~YJ5*iPrWKP-mxRtt;5MF zAK3oMcWWd-wqbK_yx~_hb~Po#_ucwtIZelu)DctP$(jz*ir?_po1M9E76+>z{g75; z9o^weGmmii7xlEduq&vncqdn=t>E*m#cZJl=%VNh766IHgN=%2r){j*n9(&+n z=T=8);V}6`_Q-}|w7kr*nU@&J;YnKDu(12BV z)22g4Tnw)Ew6EW8?y{Xi`qo5_rNTaio{0E#*l6uEy6EhBz&cY(w$V01+t18puEjZI z^kxwvgOCsZ?xdnq=wuKqTr?|XB^UR0yG03C!`Guya&M_O)8J*Jb=2PU)fBHt&qgW} ztPjZ=gwaU_o`51d<=MFW#o;h=X}Lfpj+>_uF@S6TvDrq6Hj+}BC(f>gY0tmNSGKvu zXsXS?dIv^DW)?SjXwPiU;8Usfy_>Dy2LP;{dP@r<;*R0l4$k=@QLs-R?_P*XCn>(V zBkj844A-r^Y^!-OejOjC5{ZsPH%p7YNPAC91c7uU+R~TLG-_1d@jQ7*rBI z(W?nGazG$!Z)zZ>PuCy^II>Iw#->|OFH+uEDWXdVU1;1_3|ops6T8eJr9Fz1OFL>v zD*H?f5KCIVa&^rgoYUm!vb+OW#Lgt2uK~(^EIeycm1Jo;0GN7=pHCw3v%#~a>m0P8 z47?^?#~`OxUTiBBSdRu6NB{gRy&cI8ZC}V?_gCIlCJ0oTnHyJMt-YqFBDC1M?G>a3 zKz%O_(MID^Pxjtbs@pYczzy6MMokCO z>)V_tGj^4@Xp5mPK1oHJV4Qqe)$f+m6}#eo95LhH_z~ z{V(uyWQmz(x+Lk2n%YsKh6!=ajYvFi(m^FKylLm#g|EmZBiA$g(f~VZ5X>s*-E*S3 zR2%bAY#8NEdv#)!VMCAOZ34HFKkg^AgiK$u_XZ2SV1OlD;{a%&ouW%cy5gI4Rp(~7 zzwPGnp`RW?6GpR_E_XaCEBAmf-?qDT@$FB*+xPVJ`8enD*x7Cy8q=wGpWrHgag5Q( zX}5u2NOxnS^4&{jAqn0tzb-li$;aKAuFqFJ*0EPTZ?A@z$vJ@gxJHfj!K1J0YZCae zdT#QQxlvOAK~C_~5oCX%&2^>{2nxPTLhB_+>|zE&JFyo8@kAgbszdx+{td*-!RLNU z>K{?@gXQk7>NqI=yyGT}@b%H!HGHER6l8!vA3~s;Z}0S7XKFnlOdRGNJkgH&t%Yp1 z%FBW8sLo$+23SjHdpfHr zc!H;7U?t)F+}7UXai;n$GT8vu8jLGhsC+En2=8_5(hmQfIs$*kF%V-^N~s{D6j1CrWRyw4{1~1PGzL-88Vvd`${7kETIPql@EH!JF7) z{n>k2uiNh(Vvm~qI5#1yUn=>8-B*O_m|t`gCUMk{7sk%)i#l!NKv!!@za|L3Nwbm9 zQQ?BZ-5H>?S(9hKC`XX;;;pA`DpEsEh19471&!_IM%|JgXN>2eInQ(wnO6fwGKiDl z=Q+F%v*PUX+0ql4jRk{#PYCA(m1j}ssRJhaNF#z>z)|&nFb!d8ka;im9@%B3Tg&Y&DJso7)JqjrYED9Lkr>5U}>)6&T zBtHBCyWYjQ&6!s=Q7O(vTWW~7OFk=qhgf50PUY?YR85@8a5ST9r^o}hE+g*E zAfP@fc?^D5J>W9=jdpxgL|x$;K38%^k&UZK--~9LwPgPo0x#Aueog^1c*4c)$bupa zV(x3lZ{`!_h3~A6}RR;I%2W{UiOO)r z^&@#iPdTzqw(&>Sqc0=V*K$?@Bd8lxAokfhdG&Ho|6ZvyUQXTczw4MARwwH#Lts2n zObM7yspJ+H9+fc>P^SW3$Z10%P1*SR$njh+-P!Z?< zB+AFNQ7cJ9)u5+0%MH;QsH3Z#F#K2f#GuzRk?f@s)!Mig6TL#dXz>@8Lt}fGCslZs zFT9ajV5khY{|*`z4s2$9L~%ij%Zjjkuc&7J7YRSYoN3Zve}@M|fTFYsEz!aambRg0 zG|6&uZ%4`(-6aBjfL@rlu+rEuuQ{Mg3SRTTJwIKHI{S}Pu21X>fJka-B8-)N zb4;rYaT7^H0!b`7zSuyYRst+ znL>Uyp9m)g`Nl56efYVddRHYI^^PjkSfj!#jz4%|&A+Z;|T$P4SHR`fmr z4dg%tUkPP_FMPLCg)7}19zvkhHAWD`#Ek2%-r08C^nc*OyYuQ}yvP$r?G!QH+^ToO$UK_>WumN#1?Y4i0aI|2mHJjHf8-@m3qR;ThbigCUeV+O8;-Ve1<;3e?MmM}1;7+z;n>4)E)080F(Qozz+A#0I4pINfvgF3PXtDtZa#}Y@YOZAI^ zX{nOL)*V~TTE{!+o z*btS_cE-4emje=_@<~b_o@phvqxXwnkTeQ`70(Iwszh4^dIVu2TQRC5E6ZBC!I=Z| z4k9q}nWa8o1;h8zvRvm13P1m5uBTy0AzogM=!wRGAe+auM9`3QNg-A}JpBaz7*Y;O zJnzxD4apC^LP4~i-j`>iz6nuAy0|SZ*Zf)xw>0y^{RC@V zc#^dox2LNzJI2O~?r8wZ9%Sca;?Dbedf@*h_89plg054(U8fbzS4d>sC>u^#h$v1d z9xISNQn~rU(_lItSrlPoY5-NI#O?~egTx{v6{P7G?&d4eYU(a|u7Ua?aZmwcJJ9d!i3Skaj>K$tt}`&3op$LYO&n8QktXwAU$S;59utIt4Bj zZo1apY#wb)gQNw?AK_#pFm$+`sp2MYA?hw{Sj>zE6nyt!pj+KFNodX)14Qdrs_&GY z?l!U!wf{r5CsxT^Tim>L&+z?|`ZiDRciUUES+IGrzNd* z?D?jEYrjMYfeq_qD^*cQD1k;@mZ=cL8&N(2TinrCEw|Bq zx>V;yX4@Y`YjN*?h*nK}>oF4w_g0lLVCf$`tR{=O@7}T&T4e7bo9G*O?g#vANZhzH z^StxH6!-3h%RznLS!QS@DA$Yh)uC=?qZO)7mzGUry$K4s_fQ~FLIqJv!tp>pyz}hn z`~*~()j3*_AOVh7=nRE0GB+FiV&tDJ-~VQEJbCmK_xD`o+4#YNuI%fQPVthC<5N>E z59>)NZsRucP-MeNrDC~*tx)nG=6LN`51>=5r{hTb?h8#JQw=wiN&|P5Yi(8Zz5lIb zAuV&}~Yxt9{<7*hb&UC!}33YKMfI0JsZGu40 zB?>qK{2)C+rEK^)0-huXp4c;NmU{3y%u;^-nby^f$0){gO?Tx>m%L`O=FGMq)3*68 z``|osDQIci%40M=SGi|I8)<5PK$sOK+T)uy{wcH*>&9&F2HxBF&i?@?{RO~hU582j zFIX%c$yrY;PA7JpOSVhh!7iqT5CiDyvy6)(5k9bCjWuE^};$ z@XKa0m|g7jM^d{)u07s)%l)t8o=7Beej5YUSm%8}Nq93EP8ELtpK#@~9so8;)Fkmi zCE1qVM*dJuynV2)xP4j;SipOHU;erpDye$9DZs(P>^@f;_%JbjfzHnn@B|6?$qIu? z_f~M=D*>D?^Vjhr&$xvn(&m_&P)B{#Z3e(%np?fL6M$d9{LhiT)x*o!b=!yPO?WQ~ zR2X;JV682E>J;~jJ^pe#AB562kc5OZAGy65|2Z~Be$7mqUgtYe}9e@{a=J=g_ z?ZL|y#$bWLp&{8vb2id-!vnv+N!dku?b#dRk0G565YO&Xvncn3{NEVq8McDdb@~W> zm(+FkL~lA*eZBH5Hx0e<MWCj242 z9gTI4F|s^J^h=@{3}cEPW`G4$`GvcCqE{zRJK7m--l zpy=;9tC0!o{&O?M0}m5jG{Fz^sHSB<4gVnLuW&Y1-?Dx^K6%x3;pfbs##cnk4yWqQ zZPuPI_z%Rt3`{&w>S+JF{O_Ns>QDUtG+Bmj3=}^%hCNO&DEYDy^_5C z%X`CkPVEdxJ5?`w82leP|L2C=DcZt5?%~Hk%0IGZ-#`6Hn0w?^LfUS1q zmQvm?R4@LNvE=>rhxqc2`zcvG;hv5~`_8fO5b4L-f2jNAj>wy1vb8_To!d3|hj1ZQ z0(nKh*mD0z@!bFTTt1<-okh?u8!UD1zjTG)+O>ZL{Anr14g5cq+viApL8W)(EQDjc z3~t;^$xNGZ(#$ONkZVh5HbgP6$KlQDGo^5**?h6K-?fd^~EeJGgI9y+w@-r>5oHQN~K9~;Y0kUX0B z`OlMK)XpUEo-!tt0Dp^pK6rcLN<1$} z25q(n>fL4po&9Z<#*gPPJOI6g)3;Abh#h~{f84wktA^N!8@p?8#^IWJ$?T!*TNwZG z0C@5qVzU(Sy4UEw?wULQ<*3}^aJN#MpnIn!j_Oz#cse|NP6=h{WnD9haw8z_;y)T}5FwD! zl%hv`eRWNj^(4N1US_nh#KASh_20xm{sKG-1%g?WM77n~#uP+%scJeE%F8N9O{o%s7o+c{ zYR3^uhrQ-AE};8MsSMf$pnMe48twgtHFbsUDH3zF$^>;NEy>x5Wr4NSeO^!_dKDHE({i)x^XO-)cETY0%Xvx89R~_j};j<*Kw4 z((fyNi&eaDK~Givm+)AghVjJ}QoEz8AagNCcB*1yF8(WrH}4X#3HZx5fwWZfA#bC? zf34P$I*?+ssC_EVd-ftAx~ol*d03e5)^;RWWE^2*uUT45a%DC>k zvAyjv+?Agaqf(4wSH14<&52%ramPbVH+EdPrI;|1a;&#wMn4*ncvUVfKH@niuDd;t zO8;ymU0oiqsXEHcKYpX8^B>&mgFhDYbnu0-MNi+JF0W< z!U2Nf9qdlAcWH4C7Vozm*_~@NYjt2sb>4^D>A0Ag*Yi!=Yez_30W@`}IHrG}xZ_7D z;9l&%ugvGtDyo7K+lUb9s;0Ig4!` zT-(=Mq~{gZ3Tv#znP!;wYOm?uWb8*S4OQ}W9Hko^tL}iCb|xRF0b$UNvQA-ES#fyP zjLRYpNW9vcj;qor2b@N!Ssa+1>z4s4K5?v{a?reL>cYL1_BeUI`>$he?qj{hbG~E#30d{kjsN z$K;Z0;ybkuh#jxqkg~}O9A6*Y-AQ473+{F|z$1nhle_-a64W}T?fuMK$Q}S=vCP!S z)zeq*k^{SUQlIV_9;7Xxo+FlFY@;wSv5d`irgOE2lO}%1v*6q|9>6&0 z(|ugevcuh_f=t2n=dh)S+q)Nd)-M3an}`AM$^&%gvPnfYCu=;Jfsn4i(tW#JF5T4V z8-U(zse3&n-xpd;Y2gk%%3T$Ff53#>HFJTlM3jK%#rmlx^!JK%h=vM=Lg-Pgpz znTNKy$CQRD$aaQmyktb8X3r9I7{U$9IJ-nGQAQapNu?Q+u&biVuyBF;v7>@rWxdpf zb#bSK&Lv54EY1wYt_DAsCl<^B_EnJ0`aE7Nwn-3YQ|MI0;Y zJ50Ccj%5wXJEc46gC3AQZ|_vRKd$Lh)3B6h;z=_aD{*8zyZJr3i-qJs?-UxW6SaBb z>c*ox#LVC7+KqwF1waz-N#B{X?cZ0T(@2YbR&Tu-JQIXoomq@$exzT(F#Wn03l$-o zXEYPsGp1$2;^MnBUxk$4s-IO`GT=sh0)b_siPkz3+?|9o6W9r+*_K4D|x~q$taOKU=^DpEQ zp*0A^pu~>P4|9~$LUJ{+i?Y;$kM*1joLI$EX}cdW&H z#6UoxcAQ8{WyqANW!yLMCeb#tNupOO@vy`6Xn2ItOqcycUf0FZ`fN>WXpjyv2nD7V zEtRRAJd|hXxYnui-t`+&c_Fndp>%G7-MeuywBVIy@kP&2B=w*6TM5hosZcXK1K8i1 zL)S|D5}w?^n_F15Yo836RmYzVv3ehn=(xf$w@D)~!+rVu9j2*RFE5Vc|JB@kM>Vy5 z?ZPO6A_5*1P>^ygfb@=ZP!%Rx?#*6!TuFBXqtviGi?r0Mhzuy3|V>o7i}sz3J=SuLZC zB3_#%$uujlYDpV|n6!!ozP6TYJz8-|X;es>s*=8uF^5-AtV)uxd$%;YKE#iie&jpl zpK#T=isvOuDsIFUd~W*^O*9X=WmHak(qsxodo1pTo0wwqu@n(c+ip44P`a zYzDf`jQ#cmNpjm)F~JG)y5^}dS{+Dkdyq(`t9f$zhpQXb3d}=XJ^$D^Fe+`z6}he= z{HRyV4E>OTq6Y01g6=}kj28Umjb{Ma$n^;`WZE|miJ)TZ%2KRRr3yNzTM`K$nhD{=V)pr^b ze!p7U7H`mQ|GBhN(t|V1#5}Wac?XZu_|Vmh+N|!aM-dJuz=W;2@GF)A8+okHnxEdf zG0lOohgtgI@RgEW(i4$7&{}1A z+_L$|FLrsfyR^$C!4}Pbr8Xf=Gf&lBnrIgk@PYJNN@jh^D-oG=UJ8hYKnDpcBg!|m z(Xgt~wz76`KG+U)cY3~uEtKUE+jL(JT%i}&2vfqlYdp7D6=<OU% zE^ni!EyvfaKmtsX4?YiH?NWJYk0Y75&#@OckA+&DFi!IleL60x;9tMlVl+57=yE=9t6FLKlOpf?b_^skk zuCaLxtTss|NTC}Ug6hWy0F&-$*HuajVZVs+UJY1qnb2TUQ}cX@lgj^dMl%k*dO`>r z3{cOal*KD&PS*&dx+ZTZZAL3zfuKsU&MNNuZQ?0q2VDf1mg19zusz|-4t_%;?%^^~ z8F(x^`ks_=MLA0~d_a{DR+AFuytN)4zZ{xC&5TZlO#n7O(#v^%Y43(Dggf%vd!$B6 z@0o%y`=Z(lO^PU5;{i~naha`Lsa+V&@YSNdWnPzr{ocTOm!R@VjZ_Ox4PUy#ARVvs z&ueOL3Ff9a7iNzu?4_B-K6FNUdQRtyJm(j?$+2kKIUv$N(x`Sr52#^COBzzn3~~^vR!c~R(H#Ed}T;@rvamtSO%>b z6!dmnyz(y1TXp9IyMLI**0OqMef!L7E6Z|+hIODhYb#)ega!+>Y_Y})+a3E!?K9ld z1erjL%k)zvz?swFN2>ebVt=w7;fvD~4@EUy^C?WkanVOMPg~tB@P7I%+)pW-_#K{l zEE-(ZD%os^(;DS25*c+drtj+3V))ZjCdjoOdB&))Vr#xQ9ZBi<^mUoD_e$ZSk_l^N zd5@&*z_mM^IumnqPHy+4rZOp+?mAG!X8kq2`*~gM+jPY`pcc~55ls9C{QWBUoJ#zp zS?vQP?Z>ISf`R*~*ZJeBz2K85Bg4|qP8(fEyf#lvSVU z@87xe%)W$2iQBFmdwZ&rgyK^j>CZlTGgZzB*3Pw?p;K3dVj>}%VKBvx{PuUh;ulK! zK&T@BbnI{6$>c${2=zn{M4| z)h3A$Df7Jurb(NBtWqsWv>chHC2b=4EyWbkm6eFQQe?1Oidhi91U+;rk)wOfJXW?iebytx1a`Sb-ct&%Zg2`*{0r2O~%`JPm6}_p2kWt};>rNMEo8CmtPbt_l_eCKyQDs^FzV$q!Y z$91VIKO;z>OLQkZypZ10<$Fn_E4){qtnVbF3gYDqb$*%2R+t_bHffVj7s&jQ_*b5Z zP46x~AU~7cu@&SWxY7-&Vpx%zhEu-VTT0qb^To{tOY8-0nF;vmekM01p7~bXz|HT| zA+*L@e0aoeYXNXbhHFlbPVrY?sJdA*`bZVGwl9(6F@OWJ*ye}t$_>O8U<3zH(1OJ% zEl~47kZd5sPB}AyySP1#VJjuj)ny3OXn1K~UAvuVb=T)_3k@-K&{Wrd4J6@~`{~t| z?6e>PNtZY);zXic3aqX=^(i}O?bGe1N%3_2+8J+jxoiKn}HrH zKT`82WH(G;hTrBkb(E$<`vNibclQZ%PPXXdj(1*@A{`+5{^Y=Bp)Xx!C)5aT%%Hdf-7;jseKzo$q^V=NxMiX)yzt{^7#TA={`HCB`5s zaRUh1NsL2N zAs1F;V;Pt%uv;(BJ}8Fuf6)2SY_s4piW7iasz|<3HbBlEzx_NgGQ#TZEw;CN$AM;c zX`$Bye=RNXyP+B2xz7uY3};sVI^Z97*BE$1N3_cTSENsT!`=6^PVosRcl5AlgM2Za zksDmf#Jf(lDPeKiq}`}jj+c88Z}KZ`UHl5gm*&6cuXMA4jAXU2Wn2C z2#}Xb`5j^+ZTAW1n%Nsql-&hG@nbpVOaRk)0{KK=Iub^j|; z)ZPZ!&VIQs@Cd^#WKBwrT=z`P`x$xv86#TK_Zy=Ok?fO)F{DIU+2AdtEGQQU;Y?V2 zl2D>S+?81muVUn~a*P*w9y^l~CD2{OpEPhiacpm9xPKAy=bnHT@rpuKZad{8UW)7` zp-)WB%8|XGT&hQlb=IFA_j3nnZ@i=rP_Noh0UWjK3no1lzKc zErrf*>HZ4IWR6lMM`aL{-0M+4Wb9!)TQsx`>RZRZ;yvDMX7i;l^ZDp8{2`rw&ppif zB)TJap|r?j$xO6%0|Xvx7GO|cA|JS7`Q|Sm1lJy1v7I_4#UmAHYqNMn9fmDkql9XX zil-y;Dm0fONpjkfKYC7BS%93-LvfSgM|NXhFng(%US*Nm-a+KKd1X4ZC&i0^dtWfx z>Q%AMTgg2uWU}6*k+LxYDT*~l3ah5GzA9i#d`@SA#2}vAg+CU|5A+fIbYJ56 z%^DVLMN6p|L`oTW<6Tl%;zuEr?moM`&Qp}()j+?d9`zIiVbds!RQ=P_PA2t368>CZ1 z<}(_3pN-C8(4$Lzi#zzfhAXsMlBvP1-IT?m76``&u1%l-|I^IQBx&kQ&3I$fNv$Zz zV9TJ~VFj@#o_#|)4YLKFt!w&)&)nOWi4XRQ?5*FE6x@7W zw_JA6>D8cp*EG{RzT{>wrVH&6U4G1%YL^5ktbGO5k`AgJDF1|ucGBe+Jk_}VhU;)U!dcBLJm>OuLdxquRbfq zc@ulIXyy)=!df@o{h&Wk)O3}i(v>B^jY|Dqk0I?458lb$`uja;BhSaZbc**?YYih} zJ;|10f+4r{mz>Hi(+gll z%06*2yO(%s2dZ6(8KFVkcde*NN1bQWPaiZK_)FyaeWKvCMNsfq564P?+IY-AstMwG zzF|pE%quOXZ$j$Tj@s*Wo8#AMuxHP)zpInqfG$on_=K6>Ba$Cm)KNG-pOL2m?IO<> zr=lr|jZV(IoC8%pbI-kVq-Y+M$~3XXVu1+8S=f`en5o&if%9)(E1Z9Nue~&EPl{5x<1Kr{4xeq1!p$b%UF+#xQCy0fDzhKV0gf zb7^AHBQeFCj~u%XK5IBNge4Sx#{G>#mfx*g4rgaPX|B4z8yO#l@kojsshLZ$tn1L~ zGUg@9mAgEV{J(9g_#SB)*n+z@>%C0`HZ`EE$7_j65A4C#)}oyn_EMP`v=8gY5o6P3 zuO6vpl8wSEmFujX(NlRN2kAjuOsRGZOg(s>-FbYTT(3XADT0DXA)#Ep9ym@`0D@oE zM?(pd$HWJpW1FiKXyC0Msey%ieBFW+MBrx?a#>9=BRzL?-+j7WDy zR%_r_8roFKi^EO!FWVcrCbnNiPIX4vktA*X!c{I+({;|q13iY4m=&Fe=8vjq!P=Xu zIRWY&F<+Mu4o(%I7p-->&8wmq|P@iTvH-F1l1=?$D_5a>W3&_h~Y(>)(DH*&kMu+4rT%Dtv<#gVYf27aO zvV{eMe!f@I@ICpC1)KaWfYB0luOO7!0NV&$XN^I|=jc#kaCB4!aPNa>!zq z3>xC*Nf5av6XJOoP2Uv&vxyup$phsS9PUyN4{24k8bw6r3R?<<2!O4%3t`+5DB&sx zyVwF|Mn*JGO`P9|wZ9`lR53u}f;{m3+whWXy>^l3SM*AT>G1k}Pn$L&NHrIS`-Z6S z9yN_>D$4|^y2>y{r^|6g%;MsyM>RD=l~XMhiKh@W$E=mFraeb|Qzde}!a96;GGzRa2IYu z;3Xivi5pGSr%%gp4w zPK35bITr99smJX^U?->e`ueS>YJcrB%%%%8C^@Yg?@RUs8rx}lj7>vXxx2>+5u zHapn0rXkpTEq&?pZ_sKIDSRRFZ~4%vI=Pzn$A0*{)?uHQ185d}sAcVc-ZFyuL$eAH zUH2`c>*?q}-9IoM|5;TXTNJrE6`k`}0Aa-W3LIu||CTi)E|?9#@LmhJ7pvCIh){$4E!3uZ1Esy4_I6~8_TCeIE>LVX6{D=zB) z>K{eFEswu)>-vRa^DTkBJ$e7PYBc}6{5&QI4#w^9F`$19YO=R`1!B`>!9LRlK1yHRV8G>sS2x`fh$sPaFo zh!J;xyl}7Nikn`zCJEm#Vc`aplgA9tGyX+$F#wvY7XN97evvo6Ez+Cy%q8x`#K~p^ z5@{v#&ZZ=ij$I6Lu?yrmk(wkOvfxUM)Lsb=_j&uL3gO@wH5ChFK-4&b6y^%G;EMDH z#DJM57tKOIZ6kEp%p*GpD_@3F&O$4qoM5wagyy@1{lfW)F1$enR} z>W>)$Tp(z~Prwd`Pc#c4x_9;R$La-{bc&_8 zwv<=odZ9=R`7x{uAG9(lkSCc1LV?g9e#2$C!`JZQ;(|>#T7b1-HUqwjF6^u4B3mt8 zG7C{{8(GR19cl>Glj&zFQK<4-2z9oIrs1a0DAsi@VUl@@I;h>gaPTS>l8%dK%c?z( zb}a0Y2qQbAIkwz)SdN8$>JFxP1?YerM^`bCiKR>G0oo~}b=w^7GANP7@$$5F6c&flH@I5&Z-fWZ!;FR4LD@!Z0@P=W`B7WlHTDdVF9zdi^{l=D$}XM;PMbTC zB{_~A3#9_3d8H{+4~+RC?)i6X^n)9`nWMt2R`Hm4in5?}(Nz&uH7M0&Ah@u6UusI7 zN>#1_@zHcHALpO(rNW@i%*`GWOCca!KSpQ>VjF_MeBACbPBwI_S>h^8>|}s zg9-!LF4YO7)rqwTq^VOq-DgxE*65NqIk*-s4DYRpT|A`~qy0|w2nYZzW5AG_g;ZTL z$kl}ukVILT4zVPhHf=pS&fZhcnW0%A-Oxy++N-`lkZdE+!f|!TAY!~U`_xBi7;|D# zv3IomiFCX<=|hs@ah&Yvcvk!MZ;SN;ttc)FdU3yZ^R!M}}}-F?@)yCjmF6|5`9+&OPy6qS8qt!Op}6<+GxwF&Rg?|FQ#D!YO= z`MrOI_|3(7Y|YIvP8ut8LCDuctwNR^us0#URlVnhyoOik%PaE+Sa(K#EZ4JNglDNLl>U<}Io#AUhrY16PJ?@e^Q`P5wdf{q(7oo~&` z&4hvPLB*ZAEzRFj{609pq`OvC?1XGw^T%*jmnCPP#48ppiMIV`2C6_@nla1J)ZO@} zbaS&Wn*N^WaCD9$JX^7RWeNP#Fy*}oqD;pn;-OnbWC*r8hIf%>s!Ptp`w!0B+9*m1cKu(V1kz%7CPN4=>-_GO<3ywR+tHZ^ie7#B#9o6snV$Fiwyk;@E0Rlfh^3w9!!n>1YoB7+7eMW+# zarmw~l?D@#qAl7xrVX=SC{HLoz;gB(-fer}kl*OEX=)_Zy&E{$Fu&O_I#WP9n7trw zXAIKsJ&jKs+3ZyGOJ;ioBrP_QX7aF{d9&K1FSEHh;&a z|M>jNqFPEuRr8&Nv>vUby#q;Bwcb;1EylPWmmp-aP8+gEbNX@1;KDnX&@a%QJ~1_( z+L^-Y!1K{c^^WrLIMU3rMq%Fxy>exo#wL`?Ausg#iLsGGixoJ0HDXigS>TSb$M~Q1 z9m1vz4J5>_ZgipO1F};EI@~2DcjdTiX{c-0?QDU!JHH+PF_@b)vd5=5?7Qv!4rdG2 zclSM6RdEs5ZM|B(!9Oa381yVd=HE0P4n;dcm%NtG? zev5eI?JGnKQd4uvR`q(=QX3P{*3W)0CTHd3PgVw%8BY~eB;QKT@1zzKV3t@3nvB6R& zJO-3Vo=f^_26T7BJ9;nU?D>X=3YaS8VDJi26HW6YGrs7W`v%XY#~v|vLybr`DX&xG zxe{Zp?@czpYz~5VS_hjbrnBexY(yt%y*3itluoQR=T$hP0(za;vd0D+ns3#Wb;YdU zueps*dW25Gl8qMv4qmrN63VH%MVTCYf4Uz_zf2b6Fte+Z+z5Y|5*#RPCZc7qE`Uyb z^ZGX2r_9W3E680!s(CVhdXb5|iJxOjT70wX%6Gn3S9^wGx7Ovw9^Hr$zOf0TQaEzb zl>XWZ&Ir`O=Q8=ZXGkjJGv6KgeB;jPtCP(?q<50Ah>sMj8U7Ivfte3%(JC5|a66JA zvi!rjxm2#$^kh#Dw}rC~%6?#Akos`bV{Zt!du9tqt+YxMsvI^?-ingzYe0dDvDRl+ zJaMTgf$^2)V;fV9vVRIQA1r8bR@Sabv{MNnbB3rZ)wR1kV$k`)ct9nfI@2Ro93cEYWJgFC|s`ypLYh?@{UlFU~!lZj*=Ux_x)HJgs4?M{~B>{mUZj z$~T^QmXtra8G5?)v`PG&n*fb<0T}2460|1eUBCKeIucc{i}HWfDQFtrTex$<7F}`f z`jvI|>mCt{u*F0Q{#gI;yYR7)p)MIBWGjvPzK94xL}GJY%1P8VbffU|Yo94+vaP;R zbKjt^xq%X${Q|=cp)AijU+BSovvxv&nGPPviucA)6PxdTP!TnUV(IG(GVfs+B2>?N zfqT?A*Q~CUNQ!K&FSrJ?ZaF7s1nseZApe1p&c)Rs=a1Ml#8Eh zTS`dL#Pyj9o~7ZO)ok}y_2yO$Os^OiD|j^2#^fl3;8O(I=QSIqwjf|<2+~d}#=T1X zmP?ycGdxf@3;)xF$jk`32}$Z{j9<80%4C-PJZ~Y$5806XZWxWVor`Gp2Q{a@PoU4Y zcX{}OI&7`sH^7BkI`#LnI84pNj2XhyV!MbAdN_~h&sD9^gi0#)pQOBI%X`KJN8TII zbgZds=C$>-U_HYB&~SsQLYVQWm0z zIQr1HmYSaJsj&4)pepST{A@kcwzR)-&C_KGP?ANJED0wbGgb*!@WpTNDGY zk>=+l*lQIL0s)KISDqH%z6%Sqjr=llCb_&8u&vRal1v(ucNRYzYyo?TyDKHi1FzLWm2tAKME+Glmxi8 zs1Ln|OaAkB?kwP23XbHH!~5rM&Ku`A*$g>JYxOS5%{FeH6!z$mFJQ&mJ9%2*jzbRM z!x*ifDm7E)^XEWLQM=u+0cS4|Hw72SCe@9T?z$UPS!Dl+ZBWAOIK8WR5IEiAMKm{e*p_&*ZH5xe9k!+z0BU znE!8+S1+I<{YFY~hQtfIUOwCpL(#Gaf%W81RE4EY)l0aBASqbqBz0XbLN!2z%@Vla z*lI6}gKQO2mCel3mDN@UD8(gGY+a0*X@T;m;LG7^qef`ZtP}zPKJfdF(5U&})8>V- z#t}(fmA3fYsmQ10R?8jvPPe5By4E;3!ZYHtg-HWZ@6e8PUPAqebtv10kJ0?_Fn*)8 zMf||^dn1?dn*$@dxNVSPPuIf2^~bV^@n8zYa}Zs7D4h{*VtNKE+j(7VqK@S|$5%)1 z)`hC<^^f(=&N^HKxBBH4EXg1@`I`S?I}~DePmP(-W2*KXH!k=E^d9d;kGcyQjabCSd~&|5w;eyeOSA1+#L6}fFlJ^9TAHB z5vh@*d)#r@{AF#QX^@F`|H?0>o4cIc!WsNPR$o*|e(7qvL=4-w2~%hDoPA^M_YhnC2*5Hqqu%=2roa8?+5q8E-qV8{mSZdziFK5EXZxYAMw5IP+OEa(d%%60fhZ& zs;#T%;71VEE@<`P<6iN0l+T1DF0}sjMlNsjtyi?7a^Ps{K@Nw8{z8EgP3D(x^x6Z1 zE7yp!Ze=^-SZ_HDp=S!^ds{xF=`~@KCJ`!_cdTHw!s9fu2Px3UMkt=_KRXZ&kCybd z`BXLMKj~zux)sCktks_%oBOCmG_z~gY{->&yhwgY=6yKO*`jK>>_m!hQ}3O0U6^uN zFwrCt7T@*0ViNGk5GC2a!^jAtx=Q5F0Z`TR|E8Yij{EEoqeDzMqjdfmWKkOF%%x1H z&Kv=`20+lwAm7HjBTa0OcRkK~E;5?ds4P_%f+VcG%^pFsc3+^N$dDd#*ZenIwW?Wj znNG2ZFcIvLhFv_v;=#Trs4S)4sYb$|WwZUh{%V=*{;ZOl)ELL%_RLsOSyFvAl{>vn z@YIRQL0_}a;tyxz+q7PHK|ER9kWt5V3it@4bh3)Mw147NB5JRLVKudemczGHULi9K zTD5=CM>E&2 z^+Rl@W7vmm>3Knjdyz^jWkQms-I;8%W}mpsKze{GdFjupp6i&5Lq%5jw-c)ha?XsX z?s0_Bs9m7RPXc=-w-}b$!k(;ym?(|iBJ#W}TU52*I{jB83sg#GWBxrs>KA4u)+a&K zhL)-Td&a_B;rGP?G3GHVehVsNi~n}DC-r=_DI;?q4OndZQ<59O_2yO1`E+cbK4D*r zBFGzjo;z+3-3Qj;H#cK53=?;jeco0A#fG8$J(`u4M>8M7&6B8=G9Qvn&3$sUu$vC3 zi~P0|fa8UZ#R4I50Cnf-3Ab)sbC*0yexzTW&j?Xb_tFARVgwS||o^j;nasZku;&;;6Pi{UR7&D@} zXm_U_6wr4Qh8P=mDTFMb}IsFD~mv6OF*?h#zOb1PHe z7}8T(`m6fX&2HLCOF+Abyt9_}fDk=`?{)clNT*m~R`Q&!E`)mzqg->}@w;M6L zXAthSo3@mevqk3p)_Y9uU~`UP`Xih-7koGPce-eL_DSsbjea@|FVv{kd3Np!(S077 z;j)2EW>sjte0{G_ImgRX@VDjIbK-kE$D54c>9}ki!Br6~pQ;Jw0qjnbrLV!^dBpQCZeL zQ_O4;Xx)ZHQn%%LqhIpTccQh(4o9ekZy<*u>h_`TbPfezjf$b_ZhRMIre;Y=zS)H6 zvk1r|)vpHCv}${Ce-2SEb-5#cvKSF}O{DyWWl(HYUU3)#LEM;b=IZIrtlm90v>%$$ zuJ|GzA|4j4L};A6u6056cNz`}6|wYbg!f%rMtKU3+P!=vkrB0E?(|J~-gQn9@K8vu ztyezo4;__jn|D{6Q0rN}a!aa%J;rAfGBOO~tB2Py%KmEE9I(EQ~;S7}YsOctf=669vjE_Vu#8lGyoXtu_)K zd45(IKZDI^e?ogbwUg@DYRU>0a9Horchf01jL`q=Ywu?LW_Fu2sa5o;r`2*AU}u(u zGq+C3i&WWwC=H{6Rpgn6iC!rl<84cU$Hn&@94};S6uELCJH$gjPn-M3!=PX0K z{rg?r@^OkU_piv`P9C@9KR;=>4|>6JOBIuQM>C?p+D0{dZn|u39U-2c4$<{hPa%#3 zwL`k9LB((%pr;`QK+ckO3H{W&+pjNNYT`a&agjIKBOk%rx6O;VKQErU*bZ4CTxof*}mi{tnO#}Glb^j%at-pSm#%Ce9a9)8w-3ynC=pJj~2*v+jCENdrPQRD* zlS^Xd6t}ZCrl;sd%97(TISO?0BBX$ssl<)(sQt1|k3-`~HJ4%W!U4~A0f!Pk(_oj>>%tdelB8TkMH}!UbW%(M zy-2F@L%=DPboC;>SdKr_l*z0o1s6KS_i2hc`%kPm=8aHXsw!|8wKP34vnY@Cy3Mty zZy|!4wCidgYgYAshWgTgC8-0|LrNq&O3WLCP^SR3rDy3bpVPNBObyPIZW0>T{25}> zS4};VSqLiD7@FMpe8F8&aJ=ZR+TF5Y*wFkQ(pB0xuzmUPcMV%aMQBMP=!dvtlIj(W zol8Rcq2UNt*xb8@sKti7F8OK-Jhba~yZD_D(Jlh~GBf}vW00Edt9id5obq<{UMR~R zYG$F7J;zU;`4e@TuJQQ|-u_RQSAF{Vu_G+_^&NmyS*Accf9;#%)ZUVjo*5ftoH7j{M~-n=)NT`%4T+0DHG7DydSxeKU?%)+3lxB3eH zCYa)31FfJ1P%Or}Wx|R_55db)S@%R{9r?G5RFHbvw`g$x|HMUK zw&7%H3Z}|+a&pWr?ol+sq^TRsiGi-I7YC2_)@um$MHIhO!t`Lyph>-s{s4ETx(!A> zr+c(M62#uH;#gF51$k7CBKiLI_i7oP2|FZo+i>vN#C2R-)aBS&2S88EC{^WE0Ii_s z4jTTdNMTn~?2d>~%?NsAk)O&OR^Oakqh;DvYIxs5i1UW>YTT64Mwcrx1X@?>xMB-3 zYw!|Eg{Y5Z=#H4lR1IF6Oyd~Q>FHg)m*-b}4z$^x9Nq_G=5h_S$jtCNOOWW05*nI|Qc23=%Kf02&Bibvbf2Ur}S9IDxX8;t5&z}c_LMo;)R&Td!%7-J|h>rbN_a)GRArm?ZU6bSv@c*^qCd zS*Vc@)AUEfq3=cnNr%p&@0SjL%hL4uxa@qaJ6?QK{PEQ zuN=G1aI{i~3o?LM6#7t6__N#Mgmq<5d9i-XAR6g^CsqQGbY!&u0z_YO%Xs`{FYZs2 zxHwilaY-=xe*6DZ2mAeh=DhyfIop6K|83>ImlORzT|@l88B`xK)mVqU$Q}Z((!>7( z4E?7`?fvH!q>$#OY`-$XHRVaYBAE_?vAmyLgiQKeG9J|}W%3#pG%x>u^ZxAFewQ{!m&U|??my=8N$!coFnu2WN|t~5dLQi;Ir>W0 zI%jMdjEcTy3;{#~9EaG8ii+;XQC;4aCp9;ADmiJpoG+J|$bc@;qG$Ah9^Dg5h(4cga z(EhLTCBDpJ9=|AbZeC8eQa*0|L2G2Feq2e{oqNnB)xeu61MY{fp@ekQm+MqsWSVCT!6NC)}@nNjHO*i zn(yel`W(h@t%yj)axuEZU36Z*Po6hSK`GpWtR8EjYn}_~8tpK^2CpVKirG5^DO?_x z;knj84{`ugyH75ES-)T^+JaD7eBZhov&V1*D{pFQ5IbO8?x5@5!MR-icv)77ca=YE zUOj+2dX`L10~M~XGlm-Yi-V`EzzM8%G8Omg4QTCD%dMXbi#@?^>#kkx+0%J_%l{-} z*E7|6Q+d-dR;wo2a^l~^7E{3;>jFtkst4;@%!La&+Kgn|3h;g@OCJd%&uwyd*Y}sQ zu#wB3pSad7*R}t<-N*PF9|O;ap0)ytWE{|}VztTb$NG-iLGUhbfkm&zlN&H2+ac*)N~ac*y?hG`pLK}DloiEJ zq*2?J1FlbB3{y?Hckn2~azdZTXbHggduUV>Fn$UG*Go8mEB(7buFAHD_7m?I(=%w# zrq;*fjFbLF^*Jlvv(f1JD_A2oSDEqs3(JT&hWN`S%ygsNhJczhwE?UMM=tljg{T2n# znKeH4ky8Cvn}4o&GyBw=g^`LyDU$w4stAN$pmlcx*I)}==FxuNzLr1sn@|eNnkcAZ?kxPBgwipcroKQR)9cRN$b5Yi=1+7A1`0FUx`vNhM`aS^6p;R8>85A z4b5S}2PYNRhR;JT_g{TPFtF5AZ-U6OF0Bh1-h5ka#QxEMK+{P%f&m!z0DaW8Lo#MxmEv_zB+=#I19X7Kc*mZRrN+$VB-jf+ljX+eQk0RUTn<8j zXA}PuY;b4{vq_(A0}dY28OL*nZKU%p@%6PWGPX3!a{h!mylF}6>)E7)sm4OP0JKLPSLbg}2mSZhvum(Rt%7ayo7Xv&v8w|w_M E0I_@7h5!Hn literal 0 HcmV?d00001 diff --git a/stock_quant_manual_assign/static/description/step3.png b/stock_quant_manual_assign/static/description/step3.png new file mode 100644 index 0000000000000000000000000000000000000000..198c79eed9d88acb4818a9b39697711596e6c0e3 GIT binary patch literal 17700 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 literal 0 HcmV?d00001 diff --git a/stock_quant_manual_assign/static/description/step4.png b/stock_quant_manual_assign/static/description/step4.png new file mode 100644 index 0000000000000000000000000000000000000000..e800754edd696827ffac9bf504f190128a40e576 GIT binary patch literal 40613 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 p9~8SQr(OS;cpi8uh?u + + + stock.move.form + stock.move + + + + diff --git a/stock_quant_manual_assign/wizard/assign_manual_quants.py b/stock_quant_manual_assign/wizard/assign_manual_quants.py index ff0205381a79..cf3bf55e3b6f 100644 --- a/stock_quant_manual_assign/wizard/assign_manual_quants.py +++ b/stock_quant_manual_assign/wizard/assign_manual_quants.py @@ -3,8 +3,9 @@ # (c) 2015 Oihane Crucelaegui - AvanzOSC # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html -from odoo import _, api, exceptions, fields, models -import odoo.addons.decimal_precision as dp +from odoo import _, api, fields, models +from odoo.addons import decimal_precision as dp +from odoo.exceptions import UserError from odoo.tools.float_utils import float_compare @@ -20,7 +21,7 @@ def check_qty(self): for record in self.filtered('quants_lines'): if float_compare(record.lines_qty, move.product_qty, precision_digits=precision_digits) > 0: - raise exceptions.UserError( + raise UserError( _('Quantity is higher than the needed one')) @api.depends('quants_lines', 'quants_lines.qty') @@ -32,7 +33,6 @@ def _compute_qties(self): self.lines_qty = lines_qty self.move_qty = move.product_qty - lines_qty - name = fields.Char(string='Name') lines_qty = fields.Float( string='Reserved qty', compute='_compute_qties', digits=dp.get_precision('Product Unit of Measure')) @@ -43,17 +43,29 @@ def _compute_qties(self): @api.multi def assign_quants(self): + quant = self.env['stock.quant'] move = self.env['stock.move'].browse(self.env.context['active_id']) - move.picking_id.mapped('pack_operation_ids').unlink() - quants = [] - # Mark as recompute pack needed - if move.picking_id: # pragma: no cover - move.picking_id.recompute_pack_op = True - for quant_id in move.reserved_quant_ids.ids: - move.write({'reserved_quant_ids': [[3, quant_id]]}) - for line in self.quants_lines.filtered('selected'): - quants.append([line.quant, line.qty]) - self.env['stock.quant'].quants_reserve(quants, move) + move._do_unreserve() + precision_digits = self.env[ + 'decimal.precision'].precision_get('Product Unit of Measure') + for line in self.quants_lines: + if float_compare(line.qty, 0.0, + precision_digits=precision_digits) > 0: + available_quantity = quant._get_available_quantity( + move.product_id, + move.location_id, + lot_id=line.lot_id) + if float_compare(available_quantity, 0.0, + precision_digits=precision_digits) <= 0: + continue + move._update_reserved_quantity(line.qty, available_quantity, + move.location_id, + lot_id=line.lot_id, strict=True) + if move.has_move_lines: + for ml in move.move_line_ids: + ml.qty_done = ml.product_qty + move._recompute_state() + move.mapped('picking_id')._compute_state() return {} @api.model @@ -63,20 +75,29 @@ def default_get(self, fields): available_quants = self.env['stock.quant'].search([ ('location_id', 'child_of', move.location_id.id), ('product_id', '=', move.product_id.id), - ('qty', '>', 0), - '|', - ('reservation_id', '=', False), - ('reservation_id', '=', move.id) + ('quantity', '>', 0) ]) - quants_lines = [{ - 'quant': x.id, - 'lot_id': x.lot_id.id, - 'in_date': x.in_date, - 'package_id': x.package_id.id, - 'selected': x in move.reserved_quant_ids, - 'qty': x.qty if x in move.reserved_quant_ids else 0, - 'location_id': x.location_id.id, - } for x in available_quants] + + quants_lines = [] + for x in available_quants: + line = {} + line['quant'] = x.id + line['lot_id'] = x.lot_id.id + line['on_hand'] = x.quantity + line['in_date'] = x.in_date + line['package_id'] = x.package_id.id + line['selected'] = False + line['qty'] = 0 + move_lines = move.move_line_ids.filtered( + lambda ml: + ml.location_id == x.location_id and ml.lot_id == x.lot_id) + for ml in move_lines: + line['qty'] = line['qty'] + ml.ordered_qty + line['selected'] = True + line['reserved'] = x.reserved_quantity - line['qty'] + line['location_id'] = x.location_id.id + quants_lines.append(line) + res.update({'quants_lines': quants_lines}) res = self._convert_to_write(self._convert_to_cache(res)) return res @@ -93,7 +114,8 @@ def onchange_selected(self): if not record.selected: record.qty = False elif not record.qty: - quant_qty = record.quant.qty + quant = record.quant + quant_qty = quant.quantity - quant.reserved_quantity remaining_qty = record.assign_wizard.move_qty record.qty = (quant_qty if quant_qty < remaining_qty else remaining_qty) @@ -117,6 +139,11 @@ def onchange_selected(self): comodel_name='stock.quant.package', string='Package', related='quant.package_id', readonly=True, groups="stock.group_tracking_lot") + on_hand = fields.Float( + string='On Hand', digits=dp.get_precision('Product Unit of Measure')) + reserved = fields.Float( + string='Others Reserved', + digits=dp.get_precision('Product Unit of Measure')) + selected = fields.Boolean(string='Select') qty = fields.Float( string='QTY', digits=dp.get_precision('Product Unit of Measure')) - selected = fields.Boolean(string='Select') diff --git a/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml b/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml index cd5c28c80f58..9620f771fb72 100644 --- a/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml +++ b/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml @@ -8,11 +8,11 @@ - - - - - + + + + + From 45b7d5b48fbc447fd905a6c4b9a8935672dc26cd Mon Sep 17 00:00:00 2001 From: cubells Date: Mon, 12 Nov 2018 07:24:02 +0100 Subject: [PATCH 03/36] [MIG] stock_quant_manual_assign: Migration to 11.0 --- stock_quant_manual_assign/README.rst | 72 ++- stock_quant_manual_assign/__init__.py | 4 - stock_quant_manual_assign/__manifest__.py | 1 - .../readme/CONTRIBUTORS.rst | 8 + .../readme/DESCRIPTION.rst | 1 + stock_quant_manual_assign/readme/USAGE.rst | 5 + .../static/description/index.html | 440 ++++++++++++++++++ stock_quant_manual_assign/tests/__init__.py | 4 - .../tests/test_stock_quant_manual_assign.py | 13 +- stock_quant_manual_assign/wizard/__init__.py | 4 - .../wizard/assign_manual_quants.py | 42 +- .../wizard/assign_manual_quants_view.xml | 4 +- 12 files changed, 538 insertions(+), 60 deletions(-) create mode 100644 stock_quant_manual_assign/readme/CONTRIBUTORS.rst create mode 100644 stock_quant_manual_assign/readme/DESCRIPTION.rst create mode 100644 stock_quant_manual_assign/readme/USAGE.rst create mode 100644 stock_quant_manual_assign/static/description/index.html diff --git a/stock_quant_manual_assign/README.rst b/stock_quant_manual_assign/README.rst index 951dfa0829ef..06840b0a1e4e 100644 --- a/stock_quant_manual_assign/README.rst +++ b/stock_quant_manual_assign/README.rst @@ -1,13 +1,37 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl - :alt: License: AGPL-3 - =============================== Stock - Manual Quant Assignment =============================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--warehouse-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-warehouse/tree/11.0/stock_quant_manual_assign + :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-11-0/stock-logistics-warehouse-11-0-stock_quant_manual_assign + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/153/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + This module allows you to manually change the automatic quant selection. +**Table of contents** + +.. contents:: + :local: + Usage ===== @@ -17,46 +41,52 @@ To use this module, you need to: #. Open the wizard with the button "Manual Quants". #. Select the quants to assign (reserve), then Confirm. -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/153/11.0 - Bug Tracker =========== -Bugs are tracked on `GitHub Issues -`_. In case of trouble, please -check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed feedback. +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* AvanzOSC +* Tecnativa +* Eficent +* Fanha Giang Contributors ------------- +~~~~~~~~~~~~ * Mikel Arregi * Pedro M. Baeza * Ana Juaristi * Oihane Crucelaegui * Fanha Giang +* `Tecnativa `_: -Maintainer ----------- + * Vicent Cubells + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - 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. -To contribute to this module, please visit https://odoo-community.org. +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_quant_manual_assign/__init__.py b/stock_quant_manual_assign/__init__.py index cc3cf15e7bb3..40272379f721 100644 --- a/stock_quant_manual_assign/__init__.py +++ b/stock_quant_manual_assign/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## from . import wizard diff --git a/stock_quant_manual_assign/__manifest__.py b/stock_quant_manual_assign/__manifest__.py index 733228d53d2d..a442a715d83d 100644 --- a/stock_quant_manual_assign/__manifest__.py +++ b/stock_quant_manual_assign/__manifest__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2015 Mikel Arregi - AvanzOSC # Copyright 2016 Tecnativa - Pedro M. Baeza # Copyright 2017 Eficent - Jordi Ballester diff --git a/stock_quant_manual_assign/readme/CONTRIBUTORS.rst b/stock_quant_manual_assign/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..c551e9c6b2cb --- /dev/null +++ b/stock_quant_manual_assign/readme/CONTRIBUTORS.rst @@ -0,0 +1,8 @@ +* Mikel Arregi +* Pedro M. Baeza +* Ana Juaristi +* Oihane Crucelaegui +* Fanha Giang +* `Tecnativa `_: + + * Vicent Cubells diff --git a/stock_quant_manual_assign/readme/DESCRIPTION.rst b/stock_quant_manual_assign/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..59ef2218ceea --- /dev/null +++ b/stock_quant_manual_assign/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows you to manually change the automatic quant selection. diff --git a/stock_quant_manual_assign/readme/USAGE.rst b/stock_quant_manual_assign/readme/USAGE.rst new file mode 100644 index 000000000000..433722ecda4f --- /dev/null +++ b/stock_quant_manual_assign/readme/USAGE.rst @@ -0,0 +1,5 @@ +To use this module, you need to: + +#. Click on the tags icon at the end of move line. +#. Open the wizard with the button "Manual Quants". +#. Select the quants to assign (reserve), then Confirm. diff --git a/stock_quant_manual_assign/static/description/index.html b/stock_quant_manual_assign/static/description/index.html new file mode 100644 index 000000000000..4b73bcd243eb --- /dev/null +++ b/stock_quant_manual_assign/static/description/index.html @@ -0,0 +1,440 @@ + + + + + + +Stock - Manual Quant Assignment + + + +
+

Stock - Manual Quant Assignment

+ + +

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

+

This module allows you to manually change the automatic quant selection.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Click on the tags icon at the end of move line.
  2. +
  3. Open the wizard with the button “Manual Quants”.
  4. +
  5. Select the quants to assign (reserve), then Confirm.
  6. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • AvanzOSC
  • +
  • Tecnativa
  • +
  • Eficent
  • +
  • Fanha Giang
  • +
+
+
+

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_quant_manual_assign/tests/__init__.py b/stock_quant_manual_assign/tests/__init__.py index ba4c7dd5c19a..5193a99e4d4c 100644 --- a/stock_quant_manual_assign/tests/__init__.py +++ b/stock_quant_manual_assign/tests/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- -# (c) 2015 Oihane Crucelaegui - AvanzOSC -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html - from . import test_stock_quant_manual_assign diff --git a/stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py b/stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py index 2fdd0270ed66..f73494d54370 100644 --- a/stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py +++ b/stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py @@ -1,9 +1,8 @@ -# -*- coding: utf-8 -*- -# (c) 2015 Oihane Crucelaegui - AvanzOSC +# Copyright 2015 Oihane Crucelaegui - AvanzOSC # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html from odoo.tests.common import TransactionCase -from odoo import exceptions +from odoo.exceptions import ValidationError class TestStockQuantManualAssign(TransactionCase): @@ -58,6 +57,8 @@ def test_quant_assign_wizard(self): 'None of the quants must have been selected') self.assertEqual(wizard.lines_qty, 0.0, 'None selected must give 0') + self.assertEqual(sum(line.qty for line in wizard.quants_lines), + self.move.reserved_availability) self.assertEqual(wizard.move_qty, self.move.product_uom_qty) def test_quant_assign_wizard_constraint(self): @@ -70,7 +71,7 @@ def test_quant_assign_wizard_constraint(self): 'None of the quants must have been selected') self.assertEqual(wizard.lines_qty, 0.0, 'None selected must give 0') - with self.assertRaises(exceptions.ValidationError): + with self.assertRaises(ValidationError): wizard.write({'quants_lines': [(1, wizard.quants_lines[:1].id, {'selected': True, 'qty': 500})]}) @@ -91,6 +92,8 @@ def test_quant_manual_assign(self): self.assertEqual(wizard.lines_qty, 150.0) self.assertEqual(wizard.move_qty, 250.0) wizard.assign_quants() + self.assertAlmostEqual(len(self.move.move_line_ids), + len(wizard.quants_lines.filtered('selected'))) def test_quant_assign_wizard_after_availability_check(self): self.move._action_assign() @@ -105,3 +108,5 @@ def test_quant_assign_wizard_after_availability_check(self): self.assertEqual(wizard.move_qty, 100.0) self.assertEqual(len(wizard.quants_lines.filtered('selected')), len(self.move.move_line_ids)) + self.assertEqual(sum(line.qty for line in wizard.quants_lines), + self.move.reserved_availability) diff --git a/stock_quant_manual_assign/wizard/__init__.py b/stock_quant_manual_assign/wizard/__init__.py index a7dec37e7485..781c26d93427 100644 --- a/stock_quant_manual_assign/wizard/__init__.py +++ b/stock_quant_manual_assign/wizard/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## from . import assign_manual_quants diff --git a/stock_quant_manual_assign/wizard/assign_manual_quants.py b/stock_quant_manual_assign/wizard/assign_manual_quants.py index cf3bf55e3b6f..b31dfbcabd92 100644 --- a/stock_quant_manual_assign/wizard/assign_manual_quants.py +++ b/stock_quant_manual_assign/wizard/assign_manual_quants.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- -# (c) 2015 Mikel Arregi - AvanzOSC -# (c) 2015 Oihane Crucelaegui - AvanzOSC +# Copyright 2015 Mikel Arregi - AvanzOSC +# Copyright 2015 Oihane Crucelaegui - AvanzOSC # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html from odoo import _, api, fields, models @@ -14,7 +13,7 @@ class AssignManualQuants(models.TransientModel): @api.multi @api.constrains('quants_lines') - def check_qty(self): + def _check_qty(self): precision_digits = self.env[ 'decimal.precision'].precision_get('Product Unit of Measure') move = self.env['stock.move'].browse(self.env.context['active_id']) @@ -27,7 +26,6 @@ def check_qty(self): @api.depends('quants_lines', 'quants_lines.qty') def _compute_qties(self): move = self.env['stock.move'].browse(self.env.context['active_id']) - lines_qty = sum(quant_line.qty for quant_line in self.quants_lines if quant_line.selected) self.lines_qty = lines_qty @@ -40,11 +38,15 @@ def _compute_qties(self): digits=dp.get_precision('Product Unit of Measure')) quants_lines = fields.One2many('assign.manual.quants.lines', 'assign_wizard', string='Quants') + move_id = fields.Many2one( + comodel_name='stock.move', + string='Move', + ) @api.multi def assign_quants(self): quant = self.env['stock.quant'] - move = self.env['stock.move'].browse(self.env.context['active_id']) + move = self.move_id move._do_unreserve() precision_digits = self.env[ 'decimal.precision'].precision_get('Product Unit of Measure') @@ -53,14 +55,15 @@ def assign_quants(self): precision_digits=precision_digits) > 0: available_quantity = quant._get_available_quantity( move.product_id, - move.location_id, + line.location_id, lot_id=line.lot_id) if float_compare(available_quantity, 0.0, precision_digits=precision_digits) <= 0: continue move._update_reserved_quantity(line.qty, available_quantity, - move.location_id, + line.location_id, lot_id=line.lot_id, strict=True) + if move.has_move_lines: for ml in move.move_line_ids: ml.qty_done = ml.product_qty @@ -77,28 +80,27 @@ def default_get(self, fields): ('product_id', '=', move.product_id.id), ('quantity', '>', 0) ]) - quants_lines = [] - for x in available_quants: + for quant in available_quants: line = {} - line['quant'] = x.id - line['lot_id'] = x.lot_id.id - line['on_hand'] = x.quantity - line['in_date'] = x.in_date - line['package_id'] = x.package_id.id + line['quant'] = quant.id + line['lot_id'] = quant.lot_id.id + line['on_hand'] = quant.quantity + line['in_date'] = quant.in_date + line['package_id'] = quant.package_id.id line['selected'] = False line['qty'] = 0 move_lines = move.move_line_ids.filtered( lambda ml: - ml.location_id == x.location_id and ml.lot_id == x.lot_id) + ml.location_id == quant.location_id and + ml.lot_id == quant.lot_id) for ml in move_lines: line['qty'] = line['qty'] + ml.ordered_qty line['selected'] = True - line['reserved'] = x.reserved_quantity - line['qty'] - line['location_id'] = x.location_id.id + line['reserved'] = quant.reserved_quantity - line['qty'] + line['location_id'] = quant.location_id.id quants_lines.append(line) - - res.update({'quants_lines': quants_lines}) + res.update({'quants_lines': quants_lines, 'move_id': move.id}) res = self._convert_to_write(self._convert_to_cache(res)) return res diff --git a/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml b/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml index 9620f771fb72..f4f44342bf9f 100644 --- a/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml +++ b/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml @@ -13,8 +13,8 @@ - - + + From c559485d234d2bd6692bfedb179eb8ee746b630d Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Tue, 20 Nov 2018 22:37:12 +0100 Subject: [PATCH 04/36] [IMP] stock_quant_manual_assign: * Better layout * Remove active_id dependency in some computed fields * Clean code * Refine constraint * Take into account if the current line is previously reserved before clicking on the button. --- stock_quant_manual_assign/README.rst | 2 +- stock_quant_manual_assign/__manifest__.py | 4 +- .../readme/CONTRIBUTORS.rst | 2 +- .../static/description/index.html | 2 +- .../tests/test_stock_quant_manual_assign.py | 2 +- .../wizard/assign_manual_quants.py | 117 +++++++++++------- .../wizard/assign_manual_quants_view.xml | 27 ++-- 7 files changed, 93 insertions(+), 63 deletions(-) diff --git a/stock_quant_manual_assign/README.rst b/stock_quant_manual_assign/README.rst index 06840b0a1e4e..feb816a1a90e 100644 --- a/stock_quant_manual_assign/README.rst +++ b/stock_quant_manual_assign/README.rst @@ -66,12 +66,12 @@ Contributors ~~~~~~~~~~~~ * Mikel Arregi -* Pedro M. Baeza * Ana Juaristi * Oihane Crucelaegui * Fanha Giang * `Tecnativa `_: + * Pedro M. Baeza * Vicent Cubells Maintainers diff --git a/stock_quant_manual_assign/__manifest__.py b/stock_quant_manual_assign/__manifest__.py index a442a715d83d..b4e35283a2f3 100644 --- a/stock_quant_manual_assign/__manifest__.py +++ b/stock_quant_manual_assign/__manifest__.py @@ -1,6 +1,8 @@ # Copyright 2015 Mikel Arregi - AvanzOSC -# Copyright 2016 Tecnativa - Pedro M. Baeza # Copyright 2017 Eficent - Jordi Ballester +# Copyright 2018 Fanha Giang +# Copyright 2018 Tecnativa - Vicent Cubells +# Copyright 2016-2018 Tecnativa - Pedro M. Baeza # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html { diff --git a/stock_quant_manual_assign/readme/CONTRIBUTORS.rst b/stock_quant_manual_assign/readme/CONTRIBUTORS.rst index c551e9c6b2cb..828c173fabc8 100644 --- a/stock_quant_manual_assign/readme/CONTRIBUTORS.rst +++ b/stock_quant_manual_assign/readme/CONTRIBUTORS.rst @@ -1,8 +1,8 @@ * Mikel Arregi -* Pedro M. Baeza * Ana Juaristi * Oihane Crucelaegui * Fanha Giang * `Tecnativa `_: + * Pedro M. Baeza * Vicent Cubells diff --git a/stock_quant_manual_assign/static/description/index.html b/stock_quant_manual_assign/static/description/index.html index 4b73bcd243eb..6f1f34f7db4e 100644 --- a/stock_quant_manual_assign/static/description/index.html +++ b/stock_quant_manual_assign/static/description/index.html @@ -414,11 +414,11 @@

Authors

Contributors

  • Mikel Arregi <mikelarregi@avanzosc.es>
  • -
  • Pedro M. Baeza <pedro.baeza@tecnativa.com>
  • Ana Juaristi <anajuaristi@avanzosc.es>
  • Oihane Crucelaegui <oihanecrucelaegi@avanzosc.es>
  • Fanha Giang <fanha99@hotmail.com>
  • Tecnativa:
  • diff --git a/stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py b/stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py index f73494d54370..601d393fcbc6 100644 --- a/stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py +++ b/stock_quant_manual_assign/tests/test_stock_quant_manual_assign.py @@ -84,7 +84,7 @@ def test_quant_manual_assign(self): wizard.quants_lines[0].write({ 'selected': True, }) - wizard.quants_lines[0].onchange_selected() + wizard.quants_lines[0]._onchange_selected() wizard.quants_lines[1].write({ 'selected': True, 'qty': 50.0, diff --git a/stock_quant_manual_assign/wizard/assign_manual_quants.py b/stock_quant_manual_assign/wizard/assign_manual_quants.py index b31dfbcabd92..685f564aaae4 100644 --- a/stock_quant_manual_assign/wizard/assign_manual_quants.py +++ b/stock_quant_manual_assign/wizard/assign_manual_quants.py @@ -1,5 +1,8 @@ # Copyright 2015 Mikel Arregi - AvanzOSC # Copyright 2015 Oihane Crucelaegui - AvanzOSC +# Copyright 2018 Fanha Giang +# Copyright 2018 Tecnativa - Vicent Cubells +# Copyright 2018 Tecnativa - Pedro M. Baeza # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html from odoo import _, api, fields, models @@ -16,20 +19,19 @@ class AssignManualQuants(models.TransientModel): def _check_qty(self): precision_digits = self.env[ 'decimal.precision'].precision_get('Product Unit of Measure') - move = self.env['stock.move'].browse(self.env.context['active_id']) for record in self.filtered('quants_lines'): - if float_compare(record.lines_qty, move.product_qty, + if float_compare(record.lines_qty, record.move_id.product_qty, precision_digits=precision_digits) > 0: raise UserError( _('Quantity is higher than the needed one')) - @api.depends('quants_lines', 'quants_lines.qty') + @api.depends('move_id', 'quants_lines', 'quants_lines.qty') def _compute_qties(self): - move = self.env['stock.move'].browse(self.env.context['active_id']) - lines_qty = sum(quant_line.qty for quant_line in self.quants_lines - if quant_line.selected) - self.lines_qty = lines_qty - self.move_qty = move.product_qty - lines_qty + for record in self: + record.lines_qty = sum( + record.quants_lines.filtered('selected').mapped('qty') + ) + record.move_qty = record.move_id.product_qty - record.lines_qty lines_qty = fields.Float( string='Reserved qty', compute='_compute_qties', @@ -78,74 +80,99 @@ def default_get(self, fields): available_quants = self.env['stock.quant'].search([ ('location_id', 'child_of', move.location_id.id), ('product_id', '=', move.product_id.id), - ('quantity', '>', 0) + ('quantity', '>', 0), ]) quants_lines = [] for quant in available_quants: line = {} - line['quant'] = quant.id - line['lot_id'] = quant.lot_id.id + line['quant_id'] = quant.id line['on_hand'] = quant.quantity - line['in_date'] = quant.in_date - line['package_id'] = quant.package_id.id line['selected'] = False - line['qty'] = 0 move_lines = move.move_line_ids.filtered( - lambda ml: - ml.location_id == quant.location_id and - ml.lot_id == quant.lot_id) - for ml in move_lines: - line['qty'] = line['qty'] + ml.ordered_qty - line['selected'] = True + lambda ml: (ml.location_id == quant.location_id and + ml.lot_id == quant.lot_id) + ) + line['qty'] = sum(move_lines.mapped('ordered_qty')) + line['selected'] = bool(line['qty']) line['reserved'] = quant.reserved_quantity - line['qty'] - line['location_id'] = quant.location_id.id quants_lines.append(line) - res.update({'quants_lines': quants_lines, 'move_id': move.id}) - res = self._convert_to_write(self._convert_to_cache(res)) + res.update({ + 'quants_lines': [(0, 0, x) for x in quants_lines], + 'move_id': move.id, + }) return res class AssignManualQuantsLines(models.TransientModel): _name = 'assign.manual.quants.lines' - _rec_name = 'quant' - - @api.multi - @api.onchange('selected') - def onchange_selected(self): - for record in self: - if not record.selected: - record.qty = False - elif not record.qty: - quant = record.quant - quant_qty = quant.quantity - quant.reserved_quantity - remaining_qty = record.assign_wizard.move_qty - record.qty = (quant_qty if quant_qty < remaining_qty else - remaining_qty) + _rec_name = 'quant_id' assign_wizard = fields.Many2one( comodel_name='assign.manual.quants', string='Move', required=True, ondelete='cascade') - quant = fields.Many2one( + quant_id = fields.Many2one( comodel_name='stock.quant', string='Quant', required=True, - ondelete='cascade') + ondelete='cascade', oldname='quant') location_id = fields.Many2one( comodel_name='stock.location', string='Location', - related='quant.location_id', readonly=True) + related='quant_id.location_id', readonly=True) lot_id = fields.Many2one( comodel_name='stock.production.lot', string='Lot', - related='quant.lot_id', readonly=True, + related='quant_id.lot_id', readonly=True, groups="stock.group_production_lot") - in_date = fields.Date( - string='Incoming Date', readonly=True) package_id = fields.Many2one( comodel_name='stock.quant.package', string='Package', - related='quant.package_id', readonly=True, + related='quant_id.package_id', readonly=True, groups="stock.group_tracking_lot") + # This is not correctly shown as related or computed, so we make it regular on_hand = fields.Float( - string='On Hand', digits=dp.get_precision('Product Unit of Measure')) + readonly=True, + string='On Hand', + digits=dp.get_precision('Product Unit of Measure'), + ) reserved = fields.Float( string='Others Reserved', digits=dp.get_precision('Product Unit of Measure')) selected = fields.Boolean(string='Select') qty = fields.Float( string='QTY', digits=dp.get_precision('Product Unit of Measure')) + + @api.multi + @api.onchange('selected') + def _onchange_selected(self): + for record in self: + if not record.selected: + record.qty = 0 + elif not record.qty: + # This takes current "snapshot" situation, so that we don't + # have to compute each time if current reserved quantity is + # for this current move. If other operations change available + # quantity on quant, a constraint would be raised later on + # validation. + quant_qty = record.on_hand - record.reserved + remaining_qty = record.assign_wizard.move_qty + record.qty = min(quant_qty, remaining_qty) + + @api.multi + @api.constrains('qty') + def _check_qty(self): + precision_digits = self.env[ + 'decimal.precision' + ].precision_get('Product Unit of Measure') + for record in self.filtered('qty'): + quant = record.quant_id + move_lines = record.assign_wizard.move_id.move_line_ids.filtered( + lambda ml: (ml.location_id == quant.location_id and + ml.lot_id == quant.lot_id) + ) + reserved = ( + quant.reserved_quantity - sum(move_lines.mapped('ordered_qty')) + ) + if float_compare(record.qty, record.quant_id.quantity - reserved, + precision_digits=precision_digits) > 0: + raise UserError( + _('Selected line quantity is higher than the available ' + 'one. Maybe an operation with this product has been ' + 'done meanwhile or you have manually increased the ' + 'suggested value.') + ) diff --git a/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml b/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml index f4f44342bf9f..02485b89b0c4 100644 --- a/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml +++ b/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml @@ -4,21 +4,22 @@ assign.manual.quants.form assign.manual.quants -
    + + + + + + + + + + + + - - - - - - - - - - - +