diff --git a/setup/stock_report_quantity_by_location/odoo/addons/stock_report_quantity_by_location b/setup/stock_report_quantity_by_location/odoo/addons/stock_report_quantity_by_location new file mode 120000 index 0000000..86ae480 --- /dev/null +++ b/setup/stock_report_quantity_by_location/odoo/addons/stock_report_quantity_by_location @@ -0,0 +1 @@ +../../../../stock_report_quantity_by_location \ No newline at end of file diff --git a/setup/stock_report_quantity_by_location/setup.py b/setup/stock_report_quantity_by_location/setup.py new file mode 100644 index 0000000..28c57bb --- /dev/null +++ b/setup/stock_report_quantity_by_location/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/stock_report_quantity_by_location/README.rst b/stock_report_quantity_by_location/README.rst new file mode 100644 index 0000000..62f40bc --- /dev/null +++ b/stock_report_quantity_by_location/README.rst @@ -0,0 +1,79 @@ +================================= +Stock Report Quantity By Location +================================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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--reporting-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-reporting/tree/13.0/stock_report_quantity_by_location + :alt: OCA/stock-logistics-reporting +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-reporting-13-0/stock-logistics-reporting-13-0-stock_report_quantity_by_location + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/151/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds an additional reporting on Inventory side where warehouse +location quantities are shown by all stockable products. + +**Table of contents** + +.. contents:: + :local: + +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 +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* ForgeFlow, S.L. (https://www.forgeflow.com) + * Jordi Ballester Alomar + * Hector Villarreal + + * Ecosoft (http://ecosoft.co.th) + * Kranokporn Thongdoung + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/stock-logistics-reporting `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_report_quantity_by_location/__init__.py b/stock_report_quantity_by_location/__init__.py new file mode 100644 index 0000000..5cb1c49 --- /dev/null +++ b/stock_report_quantity_by_location/__init__.py @@ -0,0 +1 @@ +from . import wizards diff --git a/stock_report_quantity_by_location/__manifest__.py b/stock_report_quantity_by_location/__manifest__.py new file mode 100644 index 0000000..81d9362 --- /dev/null +++ b/stock_report_quantity_by_location/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2019-21 ForgeFlow, S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Stock Report Quantity By Location", + "summary": "Stock Report Quantity By Location", + "version": "14.0.1.0.0", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/stock-logistics-reporting", + "category": "Warehouse Management", + "license": "AGPL-3", + "depends": ["product", "stock"], + "data": [ + "wizards/stock_report_quantity_by_location_views.xml", + "security/ir.model.access.csv", + ], + "installable": True, +} diff --git a/stock_report_quantity_by_location/i18n/es_MX.po b/stock_report_quantity_by_location/i18n/es_MX.po new file mode 100644 index 0000000..c70834b --- /dev/null +++ b/stock_report_quantity_by_location/i18n/es_MX.po @@ -0,0 +1,187 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_report_quantity_by_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-02-26 15:13+0000\n" +"Last-Translator: Jesús Alan Ramos Rodríguez \n" +"Language-Team: none\n" +"Language: es_MX\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__availability +msgid "Availability" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_prepare_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__create_uid +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__create_date +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__display_name +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__display_name +msgid "Display Name" +msgstr "Nombre para Mostrar" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Group By" +msgstr "Agrupar Por" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Group by Location" +msgstr "Agrupar por Ubicación" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__id +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__id +msgid "ID" +msgstr "ID" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__default_code +msgid "Internal Reference" +msgstr "Referencia Interna" + +#. module: stock_report_quantity_by_location +#: model:ir.actions.act_window,name:stock_report_quantity_by_location.action_stock_report_quantity_by_location_prepare +msgid "Inventory By Location" +msgstr "Inventario por Ubicación" + +#. module: stock_report_quantity_by_location +#: model:ir.ui.menu,name:stock_report_quantity_by_location.menu_quantity_by_location +msgid "Inventory by Location" +msgstr "Inventario por Ubicación" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location____last_update +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare____last_update +msgid "Last Modified on" +msgstr "Última Modificación en" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__write_uid +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__write_uid +msgid "Last Updated by" +msgstr "Última Modificación por" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__write_date +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__write_date +msgid "Last Updated on" +msgstr "Ultima Modificación en" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__location_id +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Location" +msgstr "Ubicación" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__location_ids +msgid "Locations" +msgstr "Ubicaciones" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields.selection,name:stock_report_quantity_by_location.selection__stock_report_quantity_by_location_prepare__availability__on_hand +msgid "On Hand" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__product_id +msgid "Product" +msgstr "Producto" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__product_category_id +msgid "Product Category" +msgstr "Categoría de Producto" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__uom_id +msgid "Product UoM" +msgstr "UdM de Producto" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__quantity +msgid "Quantity" +msgstr "Cantidad" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__with_quantity +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Quantity > 0" +msgstr "Cantidad > 0" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_prepare_form_view +msgid "Retrieve the Inventory Quantities" +msgstr "Recuperar las Cantidades de Inventario" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Search Stock Report Quantity by Location" +msgstr "Buscar cantidad de informe de stock por ubicación" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,help:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__with_quantity +msgid "Show only the products that have existing quantity on hand" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model,name:stock_report_quantity_by_location.model_stock_report_quantity_by_location +msgid "Stock Report By Location" +msgstr "Informe de stock por ubicación" + +#. module: stock_report_quantity_by_location +#: model:ir.model,name:stock_report_quantity_by_location.model_stock_report_quantity_by_location_prepare +msgid "Stock Report Quantity By Location Prepare" +msgstr "Cantidad de informe de stock por ubicación Preparar" + +#. module: stock_report_quantity_by_location +#: code:addons/stock_report_quantity_by_location/wizards/stock_report_quantity_by_location.py:0 +#, python-format +msgid "Stock Report by Location" +msgstr "Informe de stock por ubicación" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_pivot_view +msgid "Stock by Location" +msgstr "Inventario por Ubicación" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields.selection,name:stock_report_quantity_by_location.selection__stock_report_quantity_by_location_prepare__availability__unreserved +msgid "Unreserved" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,help:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__availability +msgid "Unreserved is the Stock On Hand minus the reservations" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__wiz_id +msgid "Wiz" +msgstr "" diff --git a/stock_report_quantity_by_location/i18n/stock_report_quantity_by_location.pot b/stock_report_quantity_by_location/i18n/stock_report_quantity_by_location.pot new file mode 100644 index 0000000..5c34c66 --- /dev/null +++ b/stock_report_quantity_by_location/i18n/stock_report_quantity_by_location.pot @@ -0,0 +1,184 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_report_quantity_by_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__availability +msgid "Availability" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_prepare_form_view +msgid "Cancel" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__create_uid +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__create_date +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__create_date +msgid "Created on" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__display_name +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Group By" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Group by Location" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__id +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__id +msgid "ID" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__default_code +msgid "Internal Reference" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.actions.act_window,name:stock_report_quantity_by_location.action_stock_report_quantity_by_location_prepare +msgid "Inventory By Location" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.ui.menu,name:stock_report_quantity_by_location.menu_quantity_by_location +msgid "Inventory by Location" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location____last_update +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare____last_update +msgid "Last Modified on" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__write_uid +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__write_date +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__location_id +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Location" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__location_ids +msgid "Locations" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields.selection,name:stock_report_quantity_by_location.selection__stock_report_quantity_by_location_prepare__availability__on_hand +msgid "On Hand" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__product_id +msgid "Product" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__product_category_id +msgid "Product Category" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__uom_id +msgid "Product UoM" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__quantity +msgid "Quantity" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__with_quantity +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Quantity > 0" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_prepare_form_view +msgid "Retrieve the Inventory Quantities" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_search_view +msgid "Search Stock Report Quantity by Location" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,help:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__with_quantity +msgid "Show only the products that have existing quantity on hand" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model,name:stock_report_quantity_by_location.model_stock_report_quantity_by_location +msgid "Stock Report By Location" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model,name:stock_report_quantity_by_location.model_stock_report_quantity_by_location_prepare +msgid "Stock Report Quantity By Location Prepare" +msgstr "" + +#. module: stock_report_quantity_by_location +#: code:addons/stock_report_quantity_by_location/wizards/stock_report_quantity_by_location.py:0 +#, python-format +msgid "Stock Report by Location" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model_terms:ir.ui.view,arch_db:stock_report_quantity_by_location.stock_report_quantity_by_location_pivot_view +msgid "Stock by Location" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields.selection,name:stock_report_quantity_by_location.selection__stock_report_quantity_by_location_prepare__availability__unreserved +msgid "Unreserved" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,help:stock_report_quantity_by_location.field_stock_report_quantity_by_location_prepare__availability +msgid "Unreserved is the Stock On Hand minus the reservations" +msgstr "" + +#. module: stock_report_quantity_by_location +#: model:ir.model.fields,field_description:stock_report_quantity_by_location.field_stock_report_quantity_by_location__wiz_id +msgid "Wiz" +msgstr "" diff --git a/stock_report_quantity_by_location/readme/CONTRIBUTORS.rst b/stock_report_quantity_by_location/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..5b72712 --- /dev/null +++ b/stock_report_quantity_by_location/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* ForgeFlow, S.L. (https://www.forgeflow.com) + * Jordi Ballester Alomar + * Hector Villarreal + + * Ecosoft (http://ecosoft.co.th) + * Kranokporn Thongdoung diff --git a/stock_report_quantity_by_location/readme/DESCRIPTION.rst b/stock_report_quantity_by_location/readme/DESCRIPTION.rst new file mode 100644 index 0000000..e9de6ac --- /dev/null +++ b/stock_report_quantity_by_location/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module adds an additional reporting on Inventory side where warehouse +location quantities are shown by all stockable products. diff --git a/stock_report_quantity_by_location/security/ir.model.access.csv b/stock_report_quantity_by_location/security/ir.model.access.csv new file mode 100644 index 0000000..f027da0 --- /dev/null +++ b/stock_report_quantity_by_location/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_stock_report_quantity_by_location_prepare,access_stock_report_quantity_by_location_prepare,model_stock_report_quantity_by_location_prepare,base.group_user,1,1,1,0 +access_stock_report_quantity_by_location,access_stock_report_quantity_by_location,model_stock_report_quantity_by_location,base.group_user,1,1,1,0 diff --git a/stock_report_quantity_by_location/static/description/icon.png b/stock_report_quantity_by_location/static/description/icon.png new file mode 100644 index 0000000..3a0328b Binary files /dev/null and b/stock_report_quantity_by_location/static/description/icon.png differ diff --git a/stock_report_quantity_by_location/static/description/index.html b/stock_report_quantity_by_location/static/description/index.html new file mode 100644 index 0000000..b950568 --- /dev/null +++ b/stock_report_quantity_by_location/static/description/index.html @@ -0,0 +1,428 @@ + + + + + + +Stock Report Quantity By Location + + + +
+

Stock Report Quantity By Location

+ + +

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

+

This module adds an additional reporting on Inventory side where warehouse +location quantities are shown by all stockable products.

+

Table of contents

+ +
+

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

+
    +
  • ForgeFlow
  • +
+
+
+

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-reporting project on GitHub.

+

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

+
+
+
+ + diff --git a/stock_report_quantity_by_location/tests/__init__.py b/stock_report_quantity_by_location/tests/__init__.py new file mode 100644 index 0000000..8d06776 --- /dev/null +++ b/stock_report_quantity_by_location/tests/__init__.py @@ -0,0 +1 @@ +from . import test_stock_report_quantity_by_location diff --git a/stock_report_quantity_by_location/tests/test_stock_report_quantity_by_location.py b/stock_report_quantity_by_location/tests/test_stock_report_quantity_by_location.py new file mode 100644 index 0000000..a2e3f54 --- /dev/null +++ b/stock_report_quantity_by_location/tests/test_stock_report_quantity_by_location.py @@ -0,0 +1,21 @@ +# Copyright 2019-21 ForgeFlow, S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import SavepointCase + + +class TestStockReportQuantityByLocation(SavepointCase): + @classmethod + def setUpClass(cls): + super(TestStockReportQuantityByLocation, cls).setUpClass() + cls.stock_loc = cls.env.ref("stock.stock_location_stock") + + def test_wizard(self): + self.wizard = self.env["stock.report.quantity.by.location.prepare"].create( + {"location_ids": [(4, self.stock_loc.id)]} + ) + wiz_creator = self.wizard.open() + wizard_lines = self.env["stock.report.quantity.by.location"].search( + wiz_creator["domain"] + ) + self.assertFalse(any(wiz.location_id != self.stock_loc for wiz in wizard_lines)) diff --git a/stock_report_quantity_by_location/wizards/__init__.py b/stock_report_quantity_by_location/wizards/__init__.py new file mode 100644 index 0000000..6e08ce7 --- /dev/null +++ b/stock_report_quantity_by_location/wizards/__init__.py @@ -0,0 +1 @@ +from . import stock_report_quantity_by_location diff --git a/stock_report_quantity_by_location/wizards/stock_report_quantity_by_location.py b/stock_report_quantity_by_location/wizards/stock_report_quantity_by_location.py new file mode 100644 index 0000000..df64085 --- /dev/null +++ b/stock_report_quantity_by_location/wizards/stock_report_quantity_by_location.py @@ -0,0 +1,95 @@ +# Copyright 2019-21 ForgeFlow, S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import _, fields, models + + +class StockReportByLocationPrepare(models.TransientModel): + _name = "stock.report.quantity.by.location.prepare" + _description = "Stock Report Quantity By Location Prepare" + + location_ids = fields.Many2many( + comodel_name="stock.location", string="Locations", required=True + ) + with_quantity = fields.Boolean( + string="Quantity > 0", + default=True, + help="Show only the products that have existing quantity on hand", + ) + + def open(self): + self.ensure_one() + self._compute_stock_report_by_location() + action = { + "type": "ir.actions.act_window", + "view_mode": "pivot,tree", + "name": _("Stock Report by Location"), + "context": { + "search_default_quantity_gt_zero": 1, + "group_by_no_leaf": 1, + "group_by": [], + }, + "res_model": "stock.report.quantity.by.location", + "domain": [("wiz_id", "=", self.id)], + } + return action + + def _compute_stock_report_by_location(self): + self.ensure_one() + recs = [] + for loc in self.location_ids: + quant_groups = self.env["stock.quant"].read_group( + [("location_id", "child_of", [loc.id])], + ["quantity", "reserved_quantity", "product_id"], + ["product_id"], + ) + mapping = {} + for quant_group in quant_groups: + qty_on_hand = quant_group["quantity"] + qty_reserved = quant_group["reserved_quantity"] + qty_unreserved = qty_on_hand - qty_reserved + qty_dict = { + "quantity_on_hand": qty_on_hand, + "quantity_reserved": qty_reserved, + "quantity_unreserved": qty_unreserved, + } + mapping.setdefault(quant_group["product_id"][0], qty_dict) + products = self.env["product.product"].search([("type", "=", "product")]) + vals_list = [] + for product in products: + qty_dict = mapping.get(product.id, {}) + qty_on_hand = qty_dict.get("quantity_on_hand", 0.0) + qty_reserved = qty_dict.get("quantity_reserved", 0.0) + qty_unreserved = qty_dict.get("quantity_unreserved", 0.0) + if (self.with_quantity and qty_on_hand) or not self.with_quantity: + vals_list.append( + { + "product_id": product.id, + "product_category_id": product.categ_id.id, + "uom_id": product.uom_id.id, + "quantity_on_hand": qty_on_hand, + "quantity_reserved": qty_reserved, + "quantity_unreserved": qty_unreserved, + "location_id": loc.id, + "wiz_id": self.id, + "default_code": product.default_code, + } + ) + recs = self.env["stock.report.quantity.by.location"].create(vals_list) + return recs.ids + + +class StockReportQuantityByLocation(models.TransientModel): + _name = "stock.report.quantity.by.location" + _description = "Stock Report By Location" + + wiz_id = fields.Many2one(comodel_name="stock.report.quantity.by.location.prepare") + product_id = fields.Many2one(comodel_name="product.product", required=True) + product_category_id = fields.Many2one( + comodel_name="product.category", string="Product Category" + ) + location_id = fields.Many2one(comodel_name="stock.location", required=True) + quantity_on_hand = fields.Float(string="Qty On Hand") + quantity_reserved = fields.Float(string="Qty Reserved") + quantity_unreserved = fields.Float(string="Qty Unreserved") + uom_id = fields.Many2one(comodel_name="uom.uom", string="Product UoM") + default_code = fields.Char("Internal Reference") diff --git a/stock_report_quantity_by_location/wizards/stock_report_quantity_by_location_views.xml b/stock_report_quantity_by_location/wizards/stock_report_quantity_by_location_views.xml new file mode 100644 index 0000000..aeddbf5 --- /dev/null +++ b/stock_report_quantity_by_location/wizards/stock_report_quantity_by_location_views.xml @@ -0,0 +1,109 @@ + + + + + Stock Report Quantity By Location Prepare + stock.report.quantity.by.location.prepare + +
+ + + + + + + + +
+
+
+
+
+ + Inventory By Location + stock.report.quantity.by.location.prepare + form + + new + + + + + Stock Report Quantity By Location Form + stock.report.quantity.by.location + + + + + + + + + + + + + + Stock Report Quantity By Location Pivot + stock.report.quantity.by.location + + + + + + + + + + + + + Stock Report Quantity By Location Search + stock.report.quantity.by.location + + + + + + + + + + + + + + +