From 0aac0598de9bcb32f26ec9121f4a2ac3f66648ec Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Thu, 30 Jul 2020 14:49:00 +0200 Subject: [PATCH 1/5] [ADD] stock_picking_report_undelivered_product: New module to display undelivered products in delivery slip report --- .../README.rst | 103 ++++ .../__init__.py | 2 + .../__manifest__.py | 22 + .../i18n/es.po | 115 +++++ ...ock_picking_report_undelivered_product.pot | 111 +++++ .../models/__init__.py | 4 + .../models/product_template.py | 13 + .../models/res_config_settings.py | 37 ++ .../models/res_partner.py | 13 + .../models/stock_move.py | 22 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 11 + .../readme/USAGE.rst | 13 + .../static/description/index.html | 454 ++++++++++++++++++ .../tests/__init__.py | 3 + ...tock_picking_report_undelivered_product.py | 172 +++++++ .../views/product_views.xml | 14 + .../views/report_deliveryslip.xml | 53 ++ .../views/res_config_settings_views.xml | 28 ++ .../views/res_partner_view.xml | 15 + 20 files changed, 1209 insertions(+) create mode 100644 stock_picking_report_undelivered_product/README.rst create mode 100644 stock_picking_report_undelivered_product/__init__.py create mode 100644 stock_picking_report_undelivered_product/__manifest__.py create mode 100644 stock_picking_report_undelivered_product/i18n/es.po create mode 100644 stock_picking_report_undelivered_product/i18n/stock_picking_report_undelivered_product.pot create mode 100644 stock_picking_report_undelivered_product/models/__init__.py create mode 100644 stock_picking_report_undelivered_product/models/product_template.py create mode 100644 stock_picking_report_undelivered_product/models/res_config_settings.py create mode 100644 stock_picking_report_undelivered_product/models/res_partner.py create mode 100644 stock_picking_report_undelivered_product/models/stock_move.py create mode 100644 stock_picking_report_undelivered_product/readme/CONTRIBUTORS.rst create mode 100644 stock_picking_report_undelivered_product/readme/DESCRIPTION.rst create mode 100644 stock_picking_report_undelivered_product/readme/USAGE.rst create mode 100644 stock_picking_report_undelivered_product/static/description/index.html create mode 100644 stock_picking_report_undelivered_product/tests/__init__.py create mode 100644 stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py create mode 100644 stock_picking_report_undelivered_product/views/product_views.xml create mode 100644 stock_picking_report_undelivered_product/views/report_deliveryslip.xml create mode 100644 stock_picking_report_undelivered_product/views/res_config_settings_views.xml create mode 100644 stock_picking_report_undelivered_product/views/res_partner_view.xml diff --git a/stock_picking_report_undelivered_product/README.rst b/stock_picking_report_undelivered_product/README.rst new file mode 100644 index 0000000..0769693 --- /dev/null +++ b/stock_picking_report_undelivered_product/README.rst @@ -0,0 +1,103 @@ +========================================= +Stock picking report undelivered products +========================================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/12.0/stock_picking_report_undelivered_product + :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-12-0/stock-logistics-reporting-12-0-stock_picking_report_undelivered_product + :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/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of stock module to allow to +display undelivered products in the delivery slip report. + +You have three options to display lines: + +* Display all undelivered product lines. +* Display only partially undelivered product lines. +* Display only completely undelivered product lines. + +You can choose by partner and product if you want to display undelivered +products. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +#. Go to *'Inventory > Configuration > Settings'*. +#. Select the option to display lines (All, only partially lines or only + completely lines). +#. Go to *'Sales > Orders > Customers'*. +#. Check "Display undelivered in picking" in a customer. +#. Go to *'Sales > Catalog > Products'*. +#. Check "Display undelivered in picking" in a product. +#. Go to *'Sales > Orders > Order'*. +#. Do a order for this customer with a product with the + "Display undelivered in picking" field checked. +#. Confirm the order. +#. Open the related picking and print the "Delivery slip". +#. Now you can view in report products that have not been sent. + +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 +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Sergio Teruel + * Carlos Dauden + +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_picking_report_undelivered_product/__init__.py b/stock_picking_report_undelivered_product/__init__.py new file mode 100644 index 0000000..6ed64d8 --- /dev/null +++ b/stock_picking_report_undelivered_product/__init__.py @@ -0,0 +1,2 @@ +# Copyright 2020 Sergio Teruel - Tecnativa +from . import models diff --git a/stock_picking_report_undelivered_product/__manifest__.py b/stock_picking_report_undelivered_product/__manifest__.py new file mode 100644 index 0000000..90ac16e --- /dev/null +++ b/stock_picking_report_undelivered_product/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2020 Sergio Teruel - Tecnativa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Stock picking report undelivered products", + "summary": "Display on picking report delivery slip undelivered products", + "version": "12.0.1.0.0", + "author": "Tecnativa,Odoo Community Association (OCA)", + "website": "https://www.tecnativa.com", + "category": "Warehouse", + "license": "AGPL-3", + "depends": [ + "stock", + ], + "data": [ + 'views/product_views.xml', + 'views/report_deliveryslip.xml', + 'views/res_config_settings_views.xml', + 'views/res_partner_view.xml', + ], + 'installable': True, +} diff --git a/stock_picking_report_undelivered_product/i18n/es.po b/stock_picking_report_undelivered_product/i18n/es.po new file mode 100644 index 0000000..cea33c6 --- /dev/null +++ b/stock_picking_report_undelivered_product/i18n/es.po @@ -0,0 +1,115 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_picking_report_undelivered_product +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-09-18 22:21+0000\n" +"PO-Revision-Date: 2020-09-19 00:26+0200\n" +"Last-Translator: Sergio Teruel \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.3\n" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.undeliverd_product +msgid "Product" +msgstr "Producto" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.undeliverd_product +msgid "Quantity" +msgstr "Cantidad" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.undeliverd_product +msgid "Reference" +msgstr "Referencia" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.undeliverd_product +msgid "Remaining products (not delivered yet)" +msgstr "Productos no enviados" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: stock_picking_report_undelivered_product +#: selection:res.company,undelivered_product_slip_report_method:0 +msgid "Display all undelivered product lines" +msgstr "Mostrar todas las líneas de productos no enviados en el albarán" + +#. module: stock_picking_report_undelivered_product +#: selection:res.company,undelivered_product_slip_report_method:0 +msgid "Display only completely undelivered product lines" +msgstr "Mostrar solo líneas de productos completamente no enviados en el albarán" + +#. module: stock_picking_report_undelivered_product +#: selection:res.company,undelivered_product_slip_report_method:0 +msgid "Display only partially undelivered product lines" +msgstr "Mostrar solo lineas de productos parcialmente no enviados en el albarán" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_product_product__display_undelivered_in_picking +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_product_template__display_undelivered_in_picking +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_res_partner__display_undelivered_in_picking +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_res_users__display_undelivered_in_picking +msgid "Display undelivered in picking" +msgstr "Mostrar productos no enviados en el albarán" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_res_company__undelivered_product_slip_report_method +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_res_config_settings__undelivered_product_slip_report_method +msgid "Method to display undelivered product lines in report picking" +msgstr "Método para mostrar los productos no enviados en el albarán" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.res_config_settings_view_form +msgid "Report picking undelivered products" +msgstr "Productos no enviados en el albarán" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.res_config_settings_view_form +msgid "Select method to display undelivered product lines" +msgstr "Seleccione el método para mostrar líneas de productos no enviados" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_stock_move__splitted_stock_move_orig_id +msgid "Splitted from" +msgstr "Dividido desde" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de stock" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.res_config_settings_view_form +msgid "Undelivered product lines in delivery slip report" +msgstr "Líneas de productos no enviados en el albarán" + +#~ msgid "Is splitted" +#~ msgstr "Es dividido" diff --git a/stock_picking_report_undelivered_product/i18n/stock_picking_report_undelivered_product.pot b/stock_picking_report_undelivered_product/i18n/stock_picking_report_undelivered_product.pot new file mode 100644 index 0000000..2e0c1e2 --- /dev/null +++ b/stock_picking_report_undelivered_product/i18n/stock_picking_report_undelivered_product.pot @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_picking_report_undelivered_product +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-09-18 22:21+0000\n" +"PO-Revision-Date: 2020-09-18 22:21+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_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.undeliverd_product +msgid "Product" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.undeliverd_product +msgid "Quantity" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.undeliverd_product +msgid "Reference" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.undeliverd_product +msgid "Remaining products (not delivered yet)" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_res_company +msgid "Companies" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: selection:res.company,undelivered_product_slip_report_method:0 +msgid "Display all undelivered product lines" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: selection:res.company,undelivered_product_slip_report_method:0 +msgid "Display only completely undelivered product lines" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: selection:res.company,undelivered_product_slip_report_method:0 +msgid "Display only partially undelivered product lines" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_product_product__display_undelivered_in_picking +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_product_template__display_undelivered_in_picking +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_res_partner__display_undelivered_in_picking +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_res_users__display_undelivered_in_picking +msgid "Display undelivered in picking" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_res_company__undelivered_product_slip_report_method +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_res_config_settings__undelivered_product_slip_report_method +msgid "Method to display undelivered product lines in report picking" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_product_template +msgid "Product Template" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.res_config_settings_view_form +msgid "Report picking undelivered products" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.res_config_settings_view_form +msgid "Select method to display undelivered product lines" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model.fields,field_description:stock_picking_report_undelivered_product.field_stock_move__splitted_stock_move_orig_id +msgid "Splitted from" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model:ir.model,name:stock_picking_report_undelivered_product.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_picking_report_undelivered_product +#: model_terms:ir.ui.view,arch_db:stock_picking_report_undelivered_product.res_config_settings_view_form +msgid "Undelivered product lines in delivery slip report" +msgstr "" + diff --git a/stock_picking_report_undelivered_product/models/__init__.py b/stock_picking_report_undelivered_product/models/__init__.py new file mode 100644 index 0000000..2096132 --- /dev/null +++ b/stock_picking_report_undelivered_product/models/__init__.py @@ -0,0 +1,4 @@ +from . import product_template +from . import res_config_settings +from . import res_partner +from . import stock_move diff --git a/stock_picking_report_undelivered_product/models/product_template.py b/stock_picking_report_undelivered_product/models/product_template.py new file mode 100644 index 0000000..6a1b0dd --- /dev/null +++ b/stock_picking_report_undelivered_product/models/product_template.py @@ -0,0 +1,13 @@ +# Copyright 2020 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + display_undelivered_in_picking = fields.Boolean( + string='Display undelivered in picking', + default=True, + ) diff --git a/stock_picking_report_undelivered_product/models/res_config_settings.py b/stock_picking_report_undelivered_product/models/res_config_settings.py new file mode 100644 index 0000000..0a4b3cb --- /dev/null +++ b/stock_picking_report_undelivered_product/models/res_config_settings.py @@ -0,0 +1,37 @@ +# Copyright 2020 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + undelivered_product_slip_report_method = fields.Selection( + [ + ('all', 'Display all undelivered product lines'), + ('partially_undelivered', + 'Display only partially undelivered product lines'), + ('completely_undelivered', + 'Display only completely undelivered product lines'), + ], + string='Method to display undelivered product lines in report picking', + related="company_id.undelivered_product_slip_report_method", + readonly=False, + ) + + +class Company(models.Model): + _inherit = "res.company" + + undelivered_product_slip_report_method = fields.Selection( + [ + ('all', 'Display all undelivered product lines'), + ('partially_undelivered', + 'Display only partially undelivered product lines'), + ('completely_undelivered', + 'Display only completely undelivered product lines'), + ], + string='Method to display undelivered product lines in report picking', + default='all' + ) diff --git a/stock_picking_report_undelivered_product/models/res_partner.py b/stock_picking_report_undelivered_product/models/res_partner.py new file mode 100644 index 0000000..fd76573 --- /dev/null +++ b/stock_picking_report_undelivered_product/models/res_partner.py @@ -0,0 +1,13 @@ +# Copyright 2020 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + display_undelivered_in_picking = fields.Boolean( + string='Display undelivered in picking', + default=True, + ) diff --git a/stock_picking_report_undelivered_product/models/stock_move.py b/stock_picking_report_undelivered_product/models/stock_move.py new file mode 100644 index 0000000..29419ab --- /dev/null +++ b/stock_picking_report_undelivered_product/models/stock_move.py @@ -0,0 +1,22 @@ +# Copyright 2020 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class StockMove(models.Model): + _inherit = 'stock.move' + + splitted_stock_move_orig_id = fields.Many2one( + comodel_name='stock.move', + string="Splitted from", + readonly=True, + ) + + def _prepare_move_split_vals(self, qty): + """ + Store origin stock move which create splitted move. + """ + vals = super(StockMove, self)._prepare_move_split_vals(qty) + vals['splitted_stock_move_orig_id'] = self.id + return vals diff --git a/stock_picking_report_undelivered_product/readme/CONTRIBUTORS.rst b/stock_picking_report_undelivered_product/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..ecbdebf --- /dev/null +++ b/stock_picking_report_undelivered_product/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Tecnativa `_: + + * Sergio Teruel + * Carlos Dauden diff --git a/stock_picking_report_undelivered_product/readme/DESCRIPTION.rst b/stock_picking_report_undelivered_product/readme/DESCRIPTION.rst new file mode 100644 index 0000000..71cd0e4 --- /dev/null +++ b/stock_picking_report_undelivered_product/readme/DESCRIPTION.rst @@ -0,0 +1,11 @@ +This module extends the functionality of stock module to allow to +display undelivered products in the delivery slip report. + +You have three options to display lines: + +* Display all undelivered product lines. +* Display only partially undelivered product lines. +* Display only completely undelivered product lines. + +You can choose by partner and product if you want to display undelivered +products. diff --git a/stock_picking_report_undelivered_product/readme/USAGE.rst b/stock_picking_report_undelivered_product/readme/USAGE.rst new file mode 100644 index 0000000..bbea5b6 --- /dev/null +++ b/stock_picking_report_undelivered_product/readme/USAGE.rst @@ -0,0 +1,13 @@ +#. Go to *'Inventory > Configuration > Settings'*. +#. Select the option to display lines (All, only partially lines or only + completely lines). +#. Go to *'Sales > Orders > Customers'*. +#. Check "Display undelivered in picking" in a customer. +#. Go to *'Sales > Catalog > Products'*. +#. Check "Display undelivered in picking" in a product. +#. Go to *'Sales > Orders > Order'*. +#. Do a order for this customer with a product with the + "Display undelivered in picking" field checked. +#. Confirm the order. +#. Open the related picking and print the "Delivery slip". +#. Now you can view in report products that have not been sent. diff --git a/stock_picking_report_undelivered_product/static/description/index.html b/stock_picking_report_undelivered_product/static/description/index.html new file mode 100644 index 0000000..c3892d3 --- /dev/null +++ b/stock_picking_report_undelivered_product/static/description/index.html @@ -0,0 +1,454 @@ + + + + + + +Stock picking report undelivered products + + + +
+

Stock picking report undelivered products

+ + +

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

+

This module extends the functionality of stock module to allow to +display undelivered products in the delivery slip report.

+

You have three options to display lines:

+
    +
  • Display all undelivered product lines.
  • +
  • Display only partially undelivered product lines.
  • +
  • Display only completely undelivered product lines.
  • +
+

You can choose by partner and product if you want to display undelivered +products.

+

Table of contents

+ +
+

Usage

+
    +
  1. Go to ‘Inventory > Configuration > Settings’.
  2. +
  3. Select the option to display lines (All, only partially lines or only +completely lines).
  4. +
  5. Go to ‘Sales > Orders > Customers’.
  6. +
  7. Check “Display undelivered in picking” in a customer.
  8. +
  9. Go to ‘Sales > Catalog > Products’.
  10. +
  11. Check “Display undelivered in picking” in a product.
  12. +
  13. Go to ‘Sales > Orders > Order’.
  14. +
  15. Do a order for this customer with a product with the +“Display undelivered in picking” field checked.
  16. +
  17. Confirm the order.
  18. +
  19. Open the related picking and print the “Delivery slip”.
  20. +
  21. Now you can view in report products that have not been sent.
  22. +
+
+
+

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

+
    +
  • Tecnativa
  • +
+
+
+

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_picking_report_undelivered_product/tests/__init__.py b/stock_picking_report_undelivered_product/tests/__init__.py new file mode 100644 index 0000000..d958c8f --- /dev/null +++ b/stock_picking_report_undelivered_product/tests/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2020 Sergio Teruel - Tecnativa + +from . import test_stock_picking_report_undelivered_product diff --git a/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py b/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py new file mode 100644 index 0000000..aa1a8b8 --- /dev/null +++ b/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py @@ -0,0 +1,172 @@ +# Copyright 2020 Sergio Teruel - Tecnativa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.tests import common +from odoo.tests.common import Form + + +class TestStockPickingReportUndeliveredProduct(common.TransactionCase): + + def setUp(self): + super().setUp() + self.ResPartner = self.env['res.partner'] + self.ProductProduct = self.env['product.product'] + self.StockPicking = self.env['stock.picking'] + self.StockQuant = self.env['stock.quant'] + + self.warehouse = self.env.ref('stock.warehouse0') + self.stock_location = self.env.ref('stock.stock_location_stock') + self.customer_location = self.env.ref('stock.stock_location_customers') + self.picking_type_out = self.env.ref('stock.picking_type_out') + + self.partner_display = self.ResPartner.create({ + 'name': 'Partner for test display', + 'customer': True, + 'display_undelivered_in_picking': True, + }) + self.partner_no_display = self.ResPartner.create({ + 'name': 'Partner for test on display', + 'customer': True, + 'display_undelivered_in_picking': False, + }) + + self.product_display = self.ProductProduct.create({ + 'name': 'Test product undelivered display', + 'display_undelivered_in_picking': True, + 'type': 'product', + }) + self.product_no_display = self.ProductProduct.create({ + 'name': 'Test product undelivered no display', + 'display_undelivered_in_picking': False, + 'type': 'product', + }) + self.product_no_display_wo_stock = self.ProductProduct.create({ + 'name': 'Test product undelivered no display without stock', + 'display_undelivered_in_picking': False, + 'type': 'product', + }) + self.StockQuant.create({ + 'product_id': self.product_no_display.id, + 'location_id': self.warehouse.lot_stock_id.id, + 'quantity': 2000, + }) + + def _create_picking(self, partner): + picking_form = Form(self.StockPicking) + picking_form.picking_type_id = self.picking_type_out + picking_form.partner_id = partner + + with picking_form.move_ids_without_package.new() as line: + line.product_id = self.product_display + line.product_uom_qty = 50.00 + with picking_form.move_ids_without_package.new() as line: + line.product_id = self.product_no_display + line.product_uom_qty = 20.00 + with picking_form.move_ids_without_package.new() as line: + line.product_id = self.product_no_display_wo_stock + line.product_uom_qty = 20.00 + return picking_form.save() + + def test_displayed_customer(self): + picking = self._create_picking(self.partner_display) + picking.action_confirm() + picking.action_assign() + picking.move_line_ids.qty_done = 10.00 + picking.action_done() + # Cancel backorder + picking.backorder_ids.action_cancel() + res = self.env['ir.actions.report']._get_report_from_name( + 'stock.report_deliveryslip' + ).render_qweb_html(picking.ids) + self.assertIn("undelivered_product", str(res[0])) + + def test_no_displayed_customer(self): + picking = self._create_picking(self.partner_no_display) + picking.action_confirm() + picking.action_assign() + picking.move_line_ids.qty_done = 10.00 + picking.action_done() + # Cancel backorder + picking.backorder_ids.action_cancel() + res = self.env['ir.actions.report']._get_report_from_name( + 'stock.report_deliveryslip' + ).render_qweb_html(picking.ids) + self.assertNotIn("undelivered_product", str(res[0])) + + def test_no_displayed_product(self): + picking = self._create_picking(self.partner_display) + picking.move_lines.filtered( + lambda l: l.product_id == self.product_display).unlink() + picking.action_confirm() + picking.action_assign() + picking.move_line_ids.qty_done = 10.00 + picking.action_done() + # Cancel backorder + picking.backorder_ids.action_cancel() + res = self.env['ir.actions.report']._get_report_from_name( + 'stock.report_deliveryslip' + ).render_qweb_html(picking.ids) + self.assertNotIn("undelivered_product", str(res[0])) + + def test_picking_report_method(self): + product = self.ProductProduct.create({ + 'name': 'test01', + 'display_undelivered_in_picking': True, + 'type': 'product', + }) + product2 = self.ProductProduct.create({ + 'name': 'test02', + 'display_undelivered_in_picking': True, + 'type': 'product', + }) + self.StockQuant.create({ + 'product_id': product.id, + 'location_id': self.warehouse.lot_stock_id.id, + 'quantity': 2000, + }) + picking_form = Form(self.StockPicking) + picking_form.picking_type_id = self.picking_type_out + picking_form.partner_id = self.partner_display + with picking_form.move_ids_without_package.new() as line: + line.product_id = product + line.product_uom_qty = 50.00 + with picking_form.move_ids_without_package.new() as line: + line.product_id = product2 + line.product_uom_qty = 20.00 + picking = picking_form.save() + + picking.action_confirm() + picking.action_assign() + picking.move_line_ids.qty_done = 10.00 + picking.action_done() + # Cancel backorder + picking.backorder_ids.action_cancel() + + # Empty setting method field + picking.company_id.undelivered_product_slip_report_method = False + res = self.env['ir.actions.report']._get_report_from_name( + 'stock.report_deliveryslip' + ).render_qweb_html(picking.ids) + self.assertIn("test02", str(res[0])) + + # Print all undelivered lines, partial and completely lines + picking.company_id.undelivered_product_slip_report_method = 'all' + res = self.env['ir.actions.report']._get_report_from_name( + 'stock.report_deliveryslip' + ).render_qweb_html(picking.ids) + self.assertIn("test02", str(res[0])) + + # Print only partial undelivered lines + picking.company_id.\ + undelivered_product_slip_report_method = 'partially_undelivered' + res = self.env['ir.actions.report']._get_report_from_name( + 'stock.report_deliveryslip' + ).render_qweb_html(picking.ids) + self.assertNotIn("test02", str(res[0])) + + # Print only completely undelivered lines + picking.company_id.\ + undelivered_product_slip_report_method = 'completely_undelivered' + res = self.env['ir.actions.report']._get_report_from_name( + 'stock.report_deliveryslip' + ).render_qweb_html(picking.ids) + self.assertNotIn("partially_undelivered_line", str(res[0])) diff --git a/stock_picking_report_undelivered_product/views/product_views.xml b/stock_picking_report_undelivered_product/views/product_views.xml new file mode 100644 index 0000000..fac875c --- /dev/null +++ b/stock_picking_report_undelivered_product/views/product_views.xml @@ -0,0 +1,14 @@ + + + + + product.template + + + + + + + + + diff --git a/stock_picking_report_undelivered_product/views/report_deliveryslip.xml b/stock_picking_report_undelivered_product/views/report_deliveryslip.xml new file mode 100644 index 0000000..f9093a2 --- /dev/null +++ b/stock_picking_report_undelivered_product/views/report_deliveryslip.xml @@ -0,0 +1,53 @@ + + + + + + + + diff --git a/stock_picking_report_undelivered_product/views/res_config_settings_views.xml b/stock_picking_report_undelivered_product/views/res_config_settings_views.xml new file mode 100644 index 0000000..30dc3d0 --- /dev/null +++ b/stock_picking_report_undelivered_product/views/res_config_settings_views.xml @@ -0,0 +1,28 @@ + + + + res.config.settings.view.form.inherit.undelivered.product + res.config.settings + + +
+

Report picking undelivered products

+
+
+
+
+
+
+
+
+
+
diff --git a/stock_picking_report_undelivered_product/views/res_partner_view.xml b/stock_picking_report_undelivered_product/views/res_partner_view.xml new file mode 100644 index 0000000..123d190 --- /dev/null +++ b/stock_picking_report_undelivered_product/views/res_partner_view.xml @@ -0,0 +1,15 @@ + + + + + res.partner + form + + + + + + + + + From 4368a030a32c6801724d23b5153f40ab069c0c4c Mon Sep 17 00:00:00 2001 From: oca-travis Date: Thu, 22 Oct 2020 10:37:17 +0000 Subject: [PATCH 2/5] [UPD] Update stock_picking_report_undelivered_product.pot --- .../i18n/stock_picking_report_undelivered_product.pot | 2 -- 1 file changed, 2 deletions(-) diff --git a/stock_picking_report_undelivered_product/i18n/stock_picking_report_undelivered_product.pot b/stock_picking_report_undelivered_product/i18n/stock_picking_report_undelivered_product.pot index 2e0c1e2..1d534cf 100644 --- a/stock_picking_report_undelivered_product/i18n/stock_picking_report_undelivered_product.pot +++ b/stock_picking_report_undelivered_product/i18n/stock_picking_report_undelivered_product.pot @@ -6,8 +6,6 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-09-18 22:21+0000\n" -"PO-Revision-Date: 2020-09-18 22:21+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" From a8076b1d8cfcb0440d79a889ae0566bb59b63f09 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 22 Oct 2020 11:01:18 +0000 Subject: [PATCH 3/5] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 stock_picking_report_undelivered_product/static/description/icon.png diff --git a/stock_picking_report_undelivered_product/static/description/icon.png b/stock_picking_report_undelivered_product/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From 0f917165508264e8baa00ba433191c31c9953a36 Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Wed, 17 Feb 2021 16:08:55 +0100 Subject: [PATCH 4/5] [IMP] stock_picking_report_undelivered_product: black, isort --- .../__manifest__.py | 14 +- .../models/product_template.py | 5 +- .../models/res_config_settings.py | 36 ++-- .../models/res_partner.py | 5 +- .../models/stock_move.py | 8 +- ...tock_picking_report_undelivered_product.py | 196 ++++++++++-------- 6 files changed, 150 insertions(+), 114 deletions(-) diff --git a/stock_picking_report_undelivered_product/__manifest__.py b/stock_picking_report_undelivered_product/__manifest__.py index 90ac16e..be63486 100644 --- a/stock_picking_report_undelivered_product/__manifest__.py +++ b/stock_picking_report_undelivered_product/__manifest__.py @@ -9,14 +9,12 @@ "website": "https://www.tecnativa.com", "category": "Warehouse", "license": "AGPL-3", - "depends": [ - "stock", - ], + "depends": ["stock"], "data": [ - 'views/product_views.xml', - 'views/report_deliveryslip.xml', - 'views/res_config_settings_views.xml', - 'views/res_partner_view.xml', + "views/product_views.xml", + "views/report_deliveryslip.xml", + "views/res_config_settings_views.xml", + "views/res_partner_view.xml", ], - 'installable': True, + "installable": True, } diff --git a/stock_picking_report_undelivered_product/models/product_template.py b/stock_picking_report_undelivered_product/models/product_template.py index 6a1b0dd..e9090d0 100644 --- a/stock_picking_report_undelivered_product/models/product_template.py +++ b/stock_picking_report_undelivered_product/models/product_template.py @@ -5,9 +5,8 @@ from odoo import fields, models class ProductTemplate(models.Model): - _inherit = 'product.template' + _inherit = "product.template" display_undelivered_in_picking = fields.Boolean( - string='Display undelivered in picking', - default=True, + string="Display undelivered in picking", default=True ) diff --git a/stock_picking_report_undelivered_product/models/res_config_settings.py b/stock_picking_report_undelivered_product/models/res_config_settings.py index 0a4b3cb..a67c968 100644 --- a/stock_picking_report_undelivered_product/models/res_config_settings.py +++ b/stock_picking_report_undelivered_product/models/res_config_settings.py @@ -5,17 +5,21 @@ from odoo import fields, models class ResConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' + _inherit = "res.config.settings" undelivered_product_slip_report_method = fields.Selection( [ - ('all', 'Display all undelivered product lines'), - ('partially_undelivered', - 'Display only partially undelivered product lines'), - ('completely_undelivered', - 'Display only completely undelivered product lines'), + ("all", "Display all undelivered product lines"), + ( + "partially_undelivered", + "Display only partially undelivered product lines", + ), + ( + "completely_undelivered", + "Display only completely undelivered product lines", + ), ], - string='Method to display undelivered product lines in report picking', + string="Method to display undelivered product lines in report picking", related="company_id.undelivered_product_slip_report_method", readonly=False, ) @@ -26,12 +30,16 @@ class Company(models.Model): undelivered_product_slip_report_method = fields.Selection( [ - ('all', 'Display all undelivered product lines'), - ('partially_undelivered', - 'Display only partially undelivered product lines'), - ('completely_undelivered', - 'Display only completely undelivered product lines'), + ("all", "Display all undelivered product lines"), + ( + "partially_undelivered", + "Display only partially undelivered product lines", + ), + ( + "completely_undelivered", + "Display only completely undelivered product lines", + ), ], - string='Method to display undelivered product lines in report picking', - default='all' + string="Method to display undelivered product lines in report picking", + default="all", ) diff --git a/stock_picking_report_undelivered_product/models/res_partner.py b/stock_picking_report_undelivered_product/models/res_partner.py index fd76573..9443efe 100644 --- a/stock_picking_report_undelivered_product/models/res_partner.py +++ b/stock_picking_report_undelivered_product/models/res_partner.py @@ -5,9 +5,8 @@ from odoo import fields, models class ResPartner(models.Model): - _inherit = 'res.partner' + _inherit = "res.partner" display_undelivered_in_picking = fields.Boolean( - string='Display undelivered in picking', - default=True, + string="Display undelivered in picking", default=True ) diff --git a/stock_picking_report_undelivered_product/models/stock_move.py b/stock_picking_report_undelivered_product/models/stock_move.py index 29419ab..d6efae3 100644 --- a/stock_picking_report_undelivered_product/models/stock_move.py +++ b/stock_picking_report_undelivered_product/models/stock_move.py @@ -5,12 +5,10 @@ from odoo import fields, models class StockMove(models.Model): - _inherit = 'stock.move' + _inherit = "stock.move" splitted_stock_move_orig_id = fields.Many2one( - comodel_name='stock.move', - string="Splitted from", - readonly=True, + comodel_name="stock.move", string="Splitted from", readonly=True ) def _prepare_move_split_vals(self, qty): @@ -18,5 +16,5 @@ class StockMove(models.Model): Store origin stock move which create splitted move. """ vals = super(StockMove, self)._prepare_move_split_vals(qty) - vals['splitted_stock_move_orig_id'] = self.id + vals["splitted_stock_move_orig_id"] = self.id return vals diff --git a/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py b/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py index aa1a8b8..568f0d6 100644 --- a/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py +++ b/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py @@ -5,50 +5,61 @@ from odoo.tests.common import Form class TestStockPickingReportUndeliveredProduct(common.TransactionCase): - def setUp(self): super().setUp() - self.ResPartner = self.env['res.partner'] - self.ProductProduct = self.env['product.product'] - self.StockPicking = self.env['stock.picking'] - self.StockQuant = self.env['stock.quant'] + self.ResPartner = self.env["res.partner"] + self.ProductProduct = self.env["product.product"] + self.StockPicking = self.env["stock.picking"] + self.StockQuant = self.env["stock.quant"] - self.warehouse = self.env.ref('stock.warehouse0') - self.stock_location = self.env.ref('stock.stock_location_stock') - self.customer_location = self.env.ref('stock.stock_location_customers') - self.picking_type_out = self.env.ref('stock.picking_type_out') + self.warehouse = self.env.ref("stock.warehouse0") + self.stock_location = self.env.ref("stock.stock_location_stock") + self.customer_location = self.env.ref("stock.stock_location_customers") + self.picking_type_out = self.env.ref("stock.picking_type_out") - self.partner_display = self.ResPartner.create({ - 'name': 'Partner for test display', - 'customer': True, - 'display_undelivered_in_picking': True, - }) - self.partner_no_display = self.ResPartner.create({ - 'name': 'Partner for test on display', - 'customer': True, - 'display_undelivered_in_picking': False, - }) + self.partner_display = self.ResPartner.create( + { + "name": "Partner for test display", + "customer": True, + "display_undelivered_in_picking": True, + } + ) + self.partner_no_display = self.ResPartner.create( + { + "name": "Partner for test on display", + "customer": True, + "display_undelivered_in_picking": False, + } + ) - self.product_display = self.ProductProduct.create({ - 'name': 'Test product undelivered display', - 'display_undelivered_in_picking': True, - 'type': 'product', - }) - self.product_no_display = self.ProductProduct.create({ - 'name': 'Test product undelivered no display', - 'display_undelivered_in_picking': False, - 'type': 'product', - }) - self.product_no_display_wo_stock = self.ProductProduct.create({ - 'name': 'Test product undelivered no display without stock', - 'display_undelivered_in_picking': False, - 'type': 'product', - }) - self.StockQuant.create({ - 'product_id': self.product_no_display.id, - 'location_id': self.warehouse.lot_stock_id.id, - 'quantity': 2000, - }) + self.product_display = self.ProductProduct.create( + { + "name": "Test product undelivered display", + "display_undelivered_in_picking": True, + "type": "product", + } + ) + self.product_no_display = self.ProductProduct.create( + { + "name": "Test product undelivered no display", + "display_undelivered_in_picking": False, + "type": "product", + } + ) + self.product_no_display_wo_stock = self.ProductProduct.create( + { + "name": "Test product undelivered no display without stock", + "display_undelivered_in_picking": False, + "type": "product", + } + ) + self.StockQuant.create( + { + "product_id": self.product_no_display.id, + "location_id": self.warehouse.lot_stock_id.id, + "quantity": 2000, + } + ) def _create_picking(self, partner): picking_form = Form(self.StockPicking) @@ -74,9 +85,11 @@ class TestStockPickingReportUndeliveredProduct(common.TransactionCase): picking.action_done() # Cancel backorder picking.backorder_ids.action_cancel() - res = self.env['ir.actions.report']._get_report_from_name( - 'stock.report_deliveryslip' - ).render_qweb_html(picking.ids) + res = ( + self.env["ir.actions.report"] + ._get_report_from_name("stock.report_deliveryslip") + .render_qweb_html(picking.ids) + ) self.assertIn("undelivered_product", str(res[0])) def test_no_displayed_customer(self): @@ -87,42 +100,53 @@ class TestStockPickingReportUndeliveredProduct(common.TransactionCase): picking.action_done() # Cancel backorder picking.backorder_ids.action_cancel() - res = self.env['ir.actions.report']._get_report_from_name( - 'stock.report_deliveryslip' - ).render_qweb_html(picking.ids) + res = ( + self.env["ir.actions.report"] + ._get_report_from_name("stock.report_deliveryslip") + .render_qweb_html(picking.ids) + ) self.assertNotIn("undelivered_product", str(res[0])) def test_no_displayed_product(self): picking = self._create_picking(self.partner_display) picking.move_lines.filtered( - lambda l: l.product_id == self.product_display).unlink() + lambda l: l.product_id == self.product_display + ).unlink() picking.action_confirm() picking.action_assign() picking.move_line_ids.qty_done = 10.00 picking.action_done() # Cancel backorder picking.backorder_ids.action_cancel() - res = self.env['ir.actions.report']._get_report_from_name( - 'stock.report_deliveryslip' - ).render_qweb_html(picking.ids) + res = ( + self.env["ir.actions.report"] + ._get_report_from_name("stock.report_deliveryslip") + .render_qweb_html(picking.ids) + ) self.assertNotIn("undelivered_product", str(res[0])) def test_picking_report_method(self): - product = self.ProductProduct.create({ - 'name': 'test01', - 'display_undelivered_in_picking': True, - 'type': 'product', - }) - product2 = self.ProductProduct.create({ - 'name': 'test02', - 'display_undelivered_in_picking': True, - 'type': 'product', - }) - self.StockQuant.create({ - 'product_id': product.id, - 'location_id': self.warehouse.lot_stock_id.id, - 'quantity': 2000, - }) + product = self.ProductProduct.create( + { + "name": "test01", + "display_undelivered_in_picking": True, + "type": "product", + } + ) + product2 = self.ProductProduct.create( + { + "name": "test02", + "display_undelivered_in_picking": True, + "type": "product", + } + ) + self.StockQuant.create( + { + "product_id": product.id, + "location_id": self.warehouse.lot_stock_id.id, + "quantity": 2000, + } + ) picking_form = Form(self.StockPicking) picking_form.picking_type_id = self.picking_type_out picking_form.partner_id = self.partner_display @@ -143,30 +167,40 @@ class TestStockPickingReportUndeliveredProduct(common.TransactionCase): # Empty setting method field picking.company_id.undelivered_product_slip_report_method = False - res = self.env['ir.actions.report']._get_report_from_name( - 'stock.report_deliveryslip' - ).render_qweb_html(picking.ids) + res = ( + self.env["ir.actions.report"] + ._get_report_from_name("stock.report_deliveryslip") + .render_qweb_html(picking.ids) + ) self.assertIn("test02", str(res[0])) # Print all undelivered lines, partial and completely lines - picking.company_id.undelivered_product_slip_report_method = 'all' - res = self.env['ir.actions.report']._get_report_from_name( - 'stock.report_deliveryslip' - ).render_qweb_html(picking.ids) + picking.company_id.undelivered_product_slip_report_method = "all" + res = ( + self.env["ir.actions.report"] + ._get_report_from_name("stock.report_deliveryslip") + .render_qweb_html(picking.ids) + ) self.assertIn("test02", str(res[0])) # Print only partial undelivered lines - picking.company_id.\ - undelivered_product_slip_report_method = 'partially_undelivered' - res = self.env['ir.actions.report']._get_report_from_name( - 'stock.report_deliveryslip' - ).render_qweb_html(picking.ids) + picking.company_id.undelivered_product_slip_report_method = ( + "partially_undelivered" + ) + res = ( + self.env["ir.actions.report"] + ._get_report_from_name("stock.report_deliveryslip") + .render_qweb_html(picking.ids) + ) self.assertNotIn("test02", str(res[0])) # Print only completely undelivered lines - picking.company_id.\ - undelivered_product_slip_report_method = 'completely_undelivered' - res = self.env['ir.actions.report']._get_report_from_name( - 'stock.report_deliveryslip' - ).render_qweb_html(picking.ids) + picking.company_id.undelivered_product_slip_report_method = ( + "completely_undelivered" + ) + res = ( + self.env["ir.actions.report"] + ._get_report_from_name("stock.report_deliveryslip") + .render_qweb_html(picking.ids) + ) self.assertNotIn("partially_undelivered_line", str(res[0])) From 89e4b7cd513336a8be952ef1e6009bf87b10354d Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Wed, 17 Feb 2021 16:08:56 +0100 Subject: [PATCH 5/5] [MIG] stock_picking_report_undelivered_product: Migration to v13.0 --- .../stock_picking_report_undelivered_product | 1 + .../setup.py | 6 ++ .../README.rst | 10 +-- .../__manifest__.py | 4 +- .../static/description/index.html | 6 +- ...tock_picking_report_undelivered_product.py | 30 +++---- .../views/product_views.xml | 6 +- .../views/report_deliveryslip.xml | 78 ++++++++++++++----- .../views/res_config_settings_views.xml | 21 +++-- .../views/res_partner_view.xml | 8 +- 10 files changed, 107 insertions(+), 63 deletions(-) create mode 120000 setup/stock_picking_report_undelivered_product/odoo/addons/stock_picking_report_undelivered_product create mode 100644 setup/stock_picking_report_undelivered_product/setup.py diff --git a/setup/stock_picking_report_undelivered_product/odoo/addons/stock_picking_report_undelivered_product b/setup/stock_picking_report_undelivered_product/odoo/addons/stock_picking_report_undelivered_product new file mode 120000 index 0000000..86e497d --- /dev/null +++ b/setup/stock_picking_report_undelivered_product/odoo/addons/stock_picking_report_undelivered_product @@ -0,0 +1 @@ +../../../../stock_picking_report_undelivered_product \ No newline at end of file diff --git a/setup/stock_picking_report_undelivered_product/setup.py b/setup/stock_picking_report_undelivered_product/setup.py new file mode 100644 index 0000000..28c57bb --- /dev/null +++ b/setup/stock_picking_report_undelivered_product/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/stock_picking_report_undelivered_product/README.rst b/stock_picking_report_undelivered_product/README.rst index 0769693..b11cc1b 100644 --- a/stock_picking_report_undelivered_product/README.rst +++ b/stock_picking_report_undelivered_product/README.rst @@ -14,13 +14,13 @@ Stock picking report undelivered products :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/12.0/stock_picking_report_undelivered_product + :target: https://github.com/OCA/stock-logistics-reporting/tree/13.0/stock_picking_report_undelivered_product :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-12-0/stock-logistics-reporting-12-0-stock_picking_report_undelivered_product + :target: https://translation.odoo-community.org/projects/stock-logistics-reporting-13-0/stock-logistics-reporting-13-0-stock_picking_report_undelivered_product :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/12.0 + :target: https://runbot.odoo-community.org/runbot/151/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -65,7 +65,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -98,6 +98,6 @@ 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. +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_picking_report_undelivered_product/__manifest__.py b/stock_picking_report_undelivered_product/__manifest__.py index be63486..692ea76 100644 --- a/stock_picking_report_undelivered_product/__manifest__.py +++ b/stock_picking_report_undelivered_product/__manifest__.py @@ -4,9 +4,9 @@ { "name": "Stock picking report undelivered products", "summary": "Display on picking report delivery slip undelivered products", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "author": "Tecnativa,Odoo Community Association (OCA)", - "website": "https://www.tecnativa.com", + "website": "https://github.com/OCA/stock-logistics-reporting", "category": "Warehouse", "license": "AGPL-3", "depends": ["stock"], diff --git a/stock_picking_report_undelivered_product/static/description/index.html b/stock_picking_report_undelivered_product/static/description/index.html index c3892d3..ca4ec8d 100644 --- a/stock_picking_report_undelivered_product/static/description/index.html +++ b/stock_picking_report_undelivered_product/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module extends the functionality of stock module to allow to display undelivered products in the delivery slip report.

You have three options to display lines:

@@ -414,7 +414,7 @@ completely lines).

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.

+feedback.

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

@@ -445,7 +445,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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.

+

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_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py b/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py index 568f0d6..7537e71 100644 --- a/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py +++ b/stock_picking_report_undelivered_product/tests/test_stock_picking_report_undelivered_product.py @@ -11,23 +11,18 @@ class TestStockPickingReportUndeliveredProduct(common.TransactionCase): self.ProductProduct = self.env["product.product"] self.StockPicking = self.env["stock.picking"] self.StockQuant = self.env["stock.quant"] - + self.BackOrderWiz = self.env["stock.backorder.confirmation"] self.warehouse = self.env.ref("stock.warehouse0") self.stock_location = self.env.ref("stock.stock_location_stock") self.customer_location = self.env.ref("stock.stock_location_customers") self.picking_type_out = self.env.ref("stock.picking_type_out") self.partner_display = self.ResPartner.create( - { - "name": "Partner for test display", - "customer": True, - "display_undelivered_in_picking": True, - } + {"name": "Partner for test display", "display_undelivered_in_picking": True} ) self.partner_no_display = self.ResPartner.create( { "name": "Partner for test on display", - "customer": True, "display_undelivered_in_picking": False, } ) @@ -77,14 +72,17 @@ class TestStockPickingReportUndeliveredProduct(common.TransactionCase): line.product_uom_qty = 20.00 return picking_form.save() + def _transfer_picking_no_backorder(self, picking): + # Transfer picking with no create backorder option + backorder_wizard = self.BackOrderWiz.create({"pick_ids": [(4, picking.id)]}) + backorder_wizard.process_cancel_backorder() + def test_displayed_customer(self): picking = self._create_picking(self.partner_display) picking.action_confirm() picking.action_assign() picking.move_line_ids.qty_done = 10.00 - picking.action_done() - # Cancel backorder - picking.backorder_ids.action_cancel() + self._transfer_picking_no_backorder(picking) res = ( self.env["ir.actions.report"] ._get_report_from_name("stock.report_deliveryslip") @@ -97,9 +95,7 @@ class TestStockPickingReportUndeliveredProduct(common.TransactionCase): picking.action_confirm() picking.action_assign() picking.move_line_ids.qty_done = 10.00 - picking.action_done() - # Cancel backorder - picking.backorder_ids.action_cancel() + self._transfer_picking_no_backorder(picking) res = ( self.env["ir.actions.report"] ._get_report_from_name("stock.report_deliveryslip") @@ -115,9 +111,7 @@ class TestStockPickingReportUndeliveredProduct(common.TransactionCase): picking.action_confirm() picking.action_assign() picking.move_line_ids.qty_done = 10.00 - picking.action_done() - # Cancel backorder - picking.backorder_ids.action_cancel() + self._transfer_picking_no_backorder(picking) res = ( self.env["ir.actions.report"] ._get_report_from_name("stock.report_deliveryslip") @@ -161,9 +155,7 @@ class TestStockPickingReportUndeliveredProduct(common.TransactionCase): picking.action_confirm() picking.action_assign() picking.move_line_ids.qty_done = 10.00 - picking.action_done() - # Cancel backorder - picking.backorder_ids.action_cancel() + self._transfer_picking_no_backorder(picking) # Empty setting method field picking.company_id.undelivered_product_slip_report_method = False diff --git a/stock_picking_report_undelivered_product/views/product_views.xml b/stock_picking_report_undelivered_product/views/product_views.xml index fac875c..3f324df 100644 --- a/stock_picking_report_undelivered_product/views/product_views.xml +++ b/stock_picking_report_undelivered_product/views/product_views.xml @@ -1,12 +1,12 @@ - + product.template - + - + diff --git a/stock_picking_report_undelivered_product/views/report_deliveryslip.xml b/stock_picking_report_undelivered_product/views/report_deliveryslip.xml index f9093a2..a220d0e 100644 --- a/stock_picking_report_undelivered_product/views/report_deliveryslip.xml +++ b/stock_picking_report_undelivered_product/views/report_deliveryslip.xml @@ -1,24 +1,41 @@ - + -