From 90b2e029b53dfe5cb0685f2f714cc6b161032c45 Mon Sep 17 00:00:00 2001 From: Quentin Dupont Date: Mon, 30 Nov 2020 18:13:36 +0100 Subject: [PATCH 1/2] [12.0][ADD] Report picking summary --- stock_picking_report_summary/README.rst | 77 ++++ stock_picking_report_summary/__init__.py | 1 + stock_picking_report_summary/__manifest__.py | 26 ++ stock_picking_report_summary/i18n/fr.po | 210 +++++++++ .../models/__init__.py | 3 + .../models/picking_summary_wizard.py | 92 ++++ .../models/picking_summary_wizard_picking.py | 14 + .../models/picking_summary_wizard_product.py | 27 ++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 6 + stock_picking_report_summary/readme/USAGE.rst | 11 + .../reports/report_paperformat.xml | 23 + .../reports/report_print_picking_summary.xml | 11 + .../report_print_picking_summary_template.xml | 115 +++++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 435 ++++++++++++++++++ .../static/description/pdf_report.png | Bin 0 -> 75743 bytes .../static/description/wizard.png | Bin 0 -> 22634 bytes stock_picking_report_summary/views/action.xml | 19 + .../views/view_picking_summary_wizard.xml | 34 ++ 20 files changed, 1105 insertions(+) create mode 100644 stock_picking_report_summary/README.rst create mode 100644 stock_picking_report_summary/__init__.py create mode 100644 stock_picking_report_summary/__manifest__.py create mode 100644 stock_picking_report_summary/i18n/fr.po create mode 100644 stock_picking_report_summary/models/__init__.py create mode 100644 stock_picking_report_summary/models/picking_summary_wizard.py create mode 100644 stock_picking_report_summary/models/picking_summary_wizard_picking.py create mode 100644 stock_picking_report_summary/models/picking_summary_wizard_product.py create mode 100644 stock_picking_report_summary/readme/CONTRIBUTORS.rst create mode 100644 stock_picking_report_summary/readme/DESCRIPTION.rst create mode 100644 stock_picking_report_summary/readme/USAGE.rst create mode 100644 stock_picking_report_summary/reports/report_paperformat.xml create mode 100644 stock_picking_report_summary/reports/report_print_picking_summary.xml create mode 100644 stock_picking_report_summary/reports/report_print_picking_summary_template.xml create mode 100644 stock_picking_report_summary/static/description/icon.png create mode 100644 stock_picking_report_summary/static/description/index.html create mode 100644 stock_picking_report_summary/static/description/pdf_report.png create mode 100644 stock_picking_report_summary/static/description/wizard.png create mode 100644 stock_picking_report_summary/views/action.xml create mode 100644 stock_picking_report_summary/views/view_picking_summary_wizard.xml diff --git a/stock_picking_report_summary/README.rst b/stock_picking_report_summary/README.rst new file mode 100644 index 0000000..2ecc8d6 --- /dev/null +++ b/stock_picking_report_summary/README.rst @@ -0,0 +1,77 @@ +============================ +Stock Picking Report Summary +============================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-quentinDupont%2Fstock--logistics--reporting-lightgray.png?logo=github + :target: https://github.com/quentinDupont/stock-logistics-reporting/tree/12.0_ADD_picking_summary_report/stock_picking_report_summary + :alt: quentinDupont/stock-logistics-reporting + +|badge1| |badge2| |badge3| + +This module adds the possibility to select several Pickings and +print a Report summary with two sheets : + +* Products Summary (where the total sum is calculated for each product) + +* Detail Part (each Picking is shown) + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to + +* go to Inventory + +* Choose a Operation + +* Select any pickings and click on 'Action' / 'Print Picking Summary (PDF)' + +.. figure:: https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/wizard.png + +.. figure:: https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/pdf_report.png + +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 +~~~~~~~ + +* Grap + +Contributors +~~~~~~~~~~~~ + +* Quentin DUPONT (quentin.dupont@grap.coop) + +Maintainers +~~~~~~~~~~~ + +This module is part of the `quentinDupont/stock-logistics-reporting `_ project on GitHub. + +You are welcome to contribute. diff --git a/stock_picking_report_summary/__init__.py b/stock_picking_report_summary/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/stock_picking_report_summary/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/stock_picking_report_summary/__manifest__.py b/stock_picking_report_summary/__manifest__.py new file mode 100644 index 0000000..a56555b --- /dev/null +++ b/stock_picking_report_summary/__manifest__.py @@ -0,0 +1,26 @@ +# Copyright (C) 2020 - Today: GRAP (http://www.grap.coop) +# @author: Quentin DUPONT (quentin.dupont@grap.coop) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Stock Picking Report Summary", + "summary": "Stock Picking Report Summary", + "version": "12.0.1.0.0", + "author": "Grap, " + "Odoo Community Association (OCA)", + "maintainers": ["quentinDupont"], + "website": "https://github.com/OCA/stock-logistics-reporting", + "category": "Warehouse Management", + "license": "AGPL-3", + "depends": [ + "stock", + ], + 'data': [ + 'reports/report_paperformat.xml', + 'reports/report_print_picking_summary.xml', + 'reports/report_print_picking_summary_template.xml', + 'views/view_picking_summary_wizard.xml', + 'views/action.xml', + ], + "installable": True, +} diff --git a/stock_picking_report_summary/i18n/fr.po b/stock_picking_report_summary/i18n/fr.po new file mode 100644 index 0000000..ac51d0e --- /dev/null +++ b/stock_picking_report_summary/i18n/fr.po @@ -0,0 +1,210 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_picking_report_summary +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-02 13:25+0000\n" +"PO-Revision-Date: 2020-12-02 13:25+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_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form +msgid "Cancel" +msgstr "Annuler" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Category" +msgstr "Catégorie" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__create_uid +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__create_uid +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__create_date +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__create_date +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__picking_line_qty +msgid "Number of Selected Picking" +msgstr "Quantité selectionné" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__display_name +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__display_name +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form +msgid "General Parameters" +msgstr "Paramètres généraux" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__id +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__id +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__id +msgid "ID" +msgstr "" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard____last_update +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking____last_update +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product____last_update +msgid "Last Modified on" +msgstr "Dernière Modification le" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__write_uid +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__write_uid +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__write_date +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__write_date +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__picking_id +msgid "Picking" +msgstr "Bon de livraison" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__picking_line_ids +msgid "Picking Line" +msgstr "Ligne de bon de livraison" + +#. module: stock_picking_report_summary +#: model:ir.actions.report,name:stock_picking_report_summary.report_picking_summary +msgid "Picking Summary (PDF)" +msgstr "Résumé des opérations (PDF)" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form +msgid "Pickings Details" +msgstr "Détails des opérations" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Pickings List" +msgstr "Liste des bons de livraison" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__print_detail +msgid "Print Detail" +msgstr "Imprimer le détail" + +#. module: stock_picking_report_summary +#: model:ir.actions.act_window,name:stock_picking_report_summary.action_picking_summary +msgid "Print Picking Summary (PDF)" +msgstr "Résumé des opérations (PDF)" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form +msgid "Print Product Summary" +msgstr "Imprimer le résumé des opérations" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__print_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form +msgid "Print Summary" +msgstr "Imprimer le résumé" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__print_unity_in_list +msgid "Print Unit in Pickings List" +msgstr "Afficher l'unité des produits" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__product_id +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Product" +msgstr "Article" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__product_line_ids +msgid "Product Line" +msgstr "Ligne de produit" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Products Summary" +msgstr "Synthèse des bons de livraison" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Quantity" +msgstr "Quantité" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__quantity_total +msgid "Quantity Total" +msgstr "Quantité total" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__standard_price_total +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__standard_price_total +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Standard Price Total" +msgstr "Total prix de vente" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form +msgid "Summary" +msgstr "Résumé" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Total price" +msgstr "Prix total" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Unit Price" +msgstr "Prix unitaire" + +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Unity" +msgstr "Unité" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__wizard_id +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__wizard_id +msgid "Wizard" +msgstr "Assistant" + +#. module: stock_picking_report_summary +#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard +msgid "picking.summary.wizard" +msgstr "" + +#. module: stock_picking_report_summary +#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard_picking +msgid "picking.summary.wizard.picking" +msgstr "" + +#. module: stock_picking_report_summary +#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard_product +msgid "picking.summary.wizard.product" +msgstr "" diff --git a/stock_picking_report_summary/models/__init__.py b/stock_picking_report_summary/models/__init__.py new file mode 100644 index 0000000..f8a9895 --- /dev/null +++ b/stock_picking_report_summary/models/__init__.py @@ -0,0 +1,3 @@ +from . import picking_summary_wizard +from . import picking_summary_wizard_picking +from . import picking_summary_wizard_product diff --git a/stock_picking_report_summary/models/picking_summary_wizard.py b/stock_picking_report_summary/models/picking_summary_wizard.py new file mode 100644 index 0000000..a9d38bd --- /dev/null +++ b/stock_picking_report_summary/models/picking_summary_wizard.py @@ -0,0 +1,92 @@ +# Copyright (C) 2015 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models +from odoo.addons import decimal_precision as dp + + +class PickingSummaryWizard(models.TransientModel): + _name = 'picking.summary.wizard' + _description = 'Picking Summary Wizard' + + # Default Section + def _default_picking_line_qty(self): + return len(self._context.get('active_ids', [])) + + def _default_picking_line_ids(self): + picking_obj = self.env['stock.picking'] + res = [] + picking_ids = self._context.get('active_ids', []) + for picking in picking_obj.browse(picking_ids): + res.append((0, 0, { + 'picking_id': picking.id, + })) + return res + + def _default_product_line_ids(self): + picking_obj = self.env['stock.picking'] + res = [] + product_lines = {} + picking_ids = self.env.context.get('active_ids', []) + # move.product_qty is real quantity with referent uom + for picking in picking_obj.browse(picking_ids): + for move in picking.move_lines: + if move.product_id.id not in product_lines.keys(): + product_lines[move.product_id.id] = { + 'name': move.product_id.name, + 'categ': move.product_id.categ_id.name.capitalize(), + 'qty': move.product_qty + } + else: + old_qty = product_lines[move.product_id.id]['qty'] + product_lines[move.product_id.id] = { + 'name': move.product_id.name, + 'categ': move.product_id.categ_id.name.capitalize(), + 'qty': old_qty + move.product_qty + } + # Arranged in alphabetical order for category then product name + product_lines_sorted = sorted( + product_lines.items(), key=lambda x: (x[1]['categ'], x[1]['name'])) + # product_lines_sorted = sorted( + # dict(product_lines_sorted).items(), + # key=lambda x: ) + for product_id, name_qty in product_lines_sorted: + res.append((0, 0, { + 'product_id': product_id, + 'quantity_total': name_qty['qty'], + })) + return res + + # Columns Section + print_summary = fields.Boolean( + string='Print Summary', default=True) + + print_detail = fields.Boolean( + string='Print Detail', default=True) + + print_unity_in_list = fields.Boolean( + string='Print Unit in Pickings List', default=True) + + product_line_ids = fields.One2many( + comodel_name='picking.summary.wizard.product', + inverse_name='wizard_id', default=_default_product_line_ids) + + standard_price_total = fields.Float( + compute='_compute_standard_price_total', + digits=dp.get_precision('Product Unit of Measure')) + + picking_line_ids = fields.One2many( + comodel_name='picking.summary.wizard.picking', + inverse_name='wizard_id', default=_default_picking_line_ids) + + picking_line_qty = fields.Integer( + string='Number of Selected Picking', readonly=True, + default=_default_picking_line_qty) + + # Compute Section + @api.multi + def _compute_standard_price_total(self): + self.ensure_one() + self.standard_price_total = sum( + self.mapped('product_line_ids.standard_price_total')) diff --git a/stock_picking_report_summary/models/picking_summary_wizard_picking.py b/stock_picking_report_summary/models/picking_summary_wizard_picking.py new file mode 100644 index 0000000..d0231b8 --- /dev/null +++ b/stock_picking_report_summary/models/picking_summary_wizard_picking.py @@ -0,0 +1,14 @@ +# Copyright (C) 2015 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import fields, models + + +class PickingSummaryWizardPicking(models.TransientModel): + _name = 'picking.summary.wizard.picking' + _description = 'Picking Summary Wizard Picking' + + wizard_id = fields.Many2one(comodel_name='picking.summary.wizard') + + picking_id = fields.Many2one(comodel_name='stock.picking') diff --git a/stock_picking_report_summary/models/picking_summary_wizard_product.py b/stock_picking_report_summary/models/picking_summary_wizard_product.py new file mode 100644 index 0000000..a50854a --- /dev/null +++ b/stock_picking_report_summary/models/picking_summary_wizard_product.py @@ -0,0 +1,27 @@ +# Copyright (C) 2015 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models +from odoo.addons import decimal_precision as dp + + +class PickingSummaryWizardProduct(models.TransientModel): + _name = 'picking.summary.wizard.product' + _description = 'Picking Summary Wizard Product' + + wizard_id = fields.Many2one(comodel_name='picking.summary.wizard') + + product_id = fields.Many2one(comodel_name='product.product') + + quantity_total = fields.Float() + + standard_price_total = fields.Float( + compute='_compute_standard_price_total', + digits=dp.get_precision('Product Unit of Measure')) + + @api.multi + def _compute_standard_price_total(self): + for line in self: + line.standard_price_total =\ + line.product_id.standard_price * line.quantity_total diff --git a/stock_picking_report_summary/readme/CONTRIBUTORS.rst b/stock_picking_report_summary/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..a5cc8a8 --- /dev/null +++ b/stock_picking_report_summary/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Quentin DUPONT (quentin.dupont@grap.coop) diff --git a/stock_picking_report_summary/readme/DESCRIPTION.rst b/stock_picking_report_summary/readme/DESCRIPTION.rst new file mode 100644 index 0000000..7bb0835 --- /dev/null +++ b/stock_picking_report_summary/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +This module adds the possibility to select several Pickings and +print a Report summary with two sheets : + +* Products Summary (where the total sum is calculated for each product) + +* Detail Part (each Picking is shown) diff --git a/stock_picking_report_summary/readme/USAGE.rst b/stock_picking_report_summary/readme/USAGE.rst new file mode 100644 index 0000000..492f478 --- /dev/null +++ b/stock_picking_report_summary/readme/USAGE.rst @@ -0,0 +1,11 @@ +To use this module, you need to + +* go to Inventory + +* Choose a Operation + +* Select any pickings and click on 'Action' / 'Print Picking Summary (PDF)' + +.. figure:: ../static/description/wizard.png + +.. figure:: ../static/description/pdf_report.png diff --git a/stock_picking_report_summary/reports/report_paperformat.xml b/stock_picking_report_summary/reports/report_paperformat.xml new file mode 100644 index 0000000..1687a82 --- /dev/null +++ b/stock_picking_report_summary/reports/report_paperformat.xml @@ -0,0 +1,23 @@ + + + + + + Picking Report Summary + A4 + 0 + 0 + Portrait + 10 + 15 + 8 + 8 + + 43 + 90 + + + diff --git a/stock_picking_report_summary/reports/report_print_picking_summary.xml b/stock_picking_report_summary/reports/report_print_picking_summary.xml new file mode 100644 index 0000000..0b718ff --- /dev/null +++ b/stock_picking_report_summary/reports/report_print_picking_summary.xml @@ -0,0 +1,11 @@ + + + + diff --git a/stock_picking_report_summary/reports/report_print_picking_summary_template.xml b/stock_picking_report_summary/reports/report_print_picking_summary_template.xml new file mode 100644 index 0000000..9021568 --- /dev/null +++ b/stock_picking_report_summary/reports/report_print_picking_summary_template.xml @@ -0,0 +1,115 @@ + + + + + + diff --git a/stock_picking_report_summary/static/description/icon.png b/stock_picking_report_summary/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/stock_picking_report_summary/static/description/index.html b/stock_picking_report_summary/static/description/index.html new file mode 100644 index 0000000..5b323f2 --- /dev/null +++ b/stock_picking_report_summary/static/description/index.html @@ -0,0 +1,435 @@ + + + + + + +Stock Picking Report Summary + + + +
+

Stock Picking Report Summary

+ + +

Beta License: AGPL-3 quentinDupont/stock-logistics-reporting

+

This module adds the possibility to select several Pickings and +print a Report summary with two sheets :

+
    +
  • Products Summary (where the total sum is calculated for each product)
  • +
  • Detail Part (each Picking is shown)
  • +
+

Table of contents

+ +
+

Usage

+

To use this module, you need to

+
    +
  • go to Inventory
  • +
  • Choose a Operation
  • +
  • Select any pickings and click on ‘Action’ / ‘Print Picking Summary (PDF)’
  • +
+
+https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/wizard.png +
+
+https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/pdf_report.png +
+
+
+

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

+
    +
  • Grap
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the quentinDupont/stock-logistics-reporting project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/stock_picking_report_summary/static/description/pdf_report.png b/stock_picking_report_summary/static/description/pdf_report.png new file mode 100644 index 0000000000000000000000000000000000000000..088b5eef1f085a3a1d423bc364328a4d7f1ddb5b GIT binary patch literal 75743 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/stock_picking_report_summary/static/description/wizard.png b/stock_picking_report_summary/static/description/wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..286fad8d2546eb7625fad707667b01f062688ac0 GIT binary patch literal 22634 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 + + + + + Print Picking Summary (PDF) + picking.summary.wizard + form + form + new + Pickings Summary + + + + diff --git a/stock_picking_report_summary/views/view_picking_summary_wizard.xml b/stock_picking_report_summary/views/view_picking_summary_wizard.xml new file mode 100644 index 0000000..b66f685 --- /dev/null +++ b/stock_picking_report_summary/views/view_picking_summary_wizard.xml @@ -0,0 +1,34 @@ + + + + + + picking.summary.wizard + +
+ + + + + + + + + + + + +
+
+
+
+
+ +
From 24ea3f880d4903ad9e23608136e579504cb24a95 Mon Sep 17 00:00:00 2001 From: Quentin Dupont Date: Wed, 11 May 2022 11:45:01 +0200 Subject: [PATCH 2/2] [IMP] stock_report_picking_summary: optional print prices --- stock_picking_report_summary/README.rst | 17 ++++ stock_picking_report_summary/i18n/fr.po | 75 +++++++++++------- .../models/picking_summary_wizard.py | 60 +++++++------- .../models/picking_summary_wizard_product.py | 6 +- .../readme/DESCRIPTION.rst | 3 + stock_picking_report_summary/readme/USAGE.rst | 6 ++ .../report_print_picking_summary_template.xml | 23 +++--- .../static/description/icon.png | Bin 9455 -> 20390 bytes .../static/description/index.html | 9 +++ .../static/description/pdf_report.png | Bin 75743 -> 91197 bytes .../description/pdf_report_wo_prices.png | Bin 0 -> 85584 bytes .../static/description/wizard.png | Bin 22634 -> 33240 bytes stock_picking_report_summary/views/action.xml | 1 - .../views/view_picking_summary_wizard.xml | 1 + 14 files changed, 128 insertions(+), 73 deletions(-) create mode 100644 stock_picking_report_summary/static/description/pdf_report_wo_prices.png diff --git a/stock_picking_report_summary/README.rst b/stock_picking_report_summary/README.rst index 2ecc8d6..f3ab7ea 100644 --- a/stock_picking_report_summary/README.rst +++ b/stock_picking_report_summary/README.rst @@ -26,6 +26,9 @@ print a Report summary with two sheets : * Detail Part (each Picking is shown) +You can choose to print standard prices or not. It can be useful to check some +values when you prepare your pickings. + **Table of contents** .. contents:: @@ -42,10 +45,16 @@ To use this module, you need to * Select any pickings and click on 'Action' / 'Print Picking Summary (PDF)' +* Choose your options + .. figure:: https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/wizard.png .. figure:: https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/pdf_report.png +Without prices : + +.. figure:: https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/pdf_report_wo_prices.png + Bug Tracker =========== @@ -72,6 +81,14 @@ Contributors Maintainers ~~~~~~~~~~~ +.. |maintainer-quentinDupont| image:: https://github.com/quentinDupont.png?size=40px + :target: https://github.com/quentinDupont + :alt: quentinDupont + +Current maintainer: + +|maintainer-quentinDupont| + This module is part of the `quentinDupont/stock-logistics-reporting `_ project on GitHub. You are welcome to contribute. diff --git a/stock_picking_report_summary/i18n/fr.po b/stock_picking_report_summary/i18n/fr.po index ac51d0e..a97b4e2 100644 --- a/stock_picking_report_summary/i18n/fr.po +++ b/stock_picking_report_summary/i18n/fr.po @@ -1,13 +1,13 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * stock_picking_report_summary +# * stock_picking_report_summary # msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-02 13:25+0000\n" -"PO-Revision-Date: 2020-12-02 13:25+0000\n" +"POT-Creation-Date: 2022-05-11 09:34+0000\n" +"PO-Revision-Date: 2022-05-11 09:34+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -25,6 +25,16 @@ msgstr "Annuler" msgid "Category" msgstr "Catégorie" +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__standard_price +msgid "Cost" +msgstr "Coût" + +#. module: stock_picking_report_summary +#: model:ir.model.fields,help:stock_picking_report_summary.field_picking_summary_wizard_product__standard_price +msgid "Cost used for stock valuation in standard price and as a first price to set in average/fifo. Also used as a base price for pricelists. Expressed in the default unit of measure of the product." +msgstr "Également utilisé comme prix de base pour les listes. Exprimé dans l'unité de mesure par défaut du produit." + #. module: stock_picking_report_summary #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__create_uid #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__create_uid @@ -39,11 +49,6 @@ msgstr "Créé par" msgid "Created on" msgstr "Créé le" -#. module: stock_picking_report_summary -#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__picking_line_qty -msgid "Number of Selected Picking" -msgstr "Quantité selectionné" - #. module: stock_picking_report_summary #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__display_name #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__display_name @@ -68,7 +73,7 @@ msgstr "" #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking____last_update #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product____last_update msgid "Last Modified on" -msgstr "Dernière Modification le" +msgstr "Dernière modification le" #. module: stock_picking_report_summary #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__write_uid @@ -84,10 +89,15 @@ msgstr "Dernière mise à jour par" msgid "Last Updated on" msgstr "Dernière mise à jour le" +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__picking_line_qty +msgid "Number of Selected Picking" +msgstr "Quantité selectionné" + #. module: stock_picking_report_summary #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking__picking_id msgid "Picking" -msgstr "Bon de livraison" +msgstr "Opération de manutention" #. module: stock_picking_report_summary #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__picking_line_ids @@ -99,6 +109,21 @@ msgstr "Ligne de bon de livraison" msgid "Picking Summary (PDF)" msgstr "Résumé des opérations (PDF)" +#. module: stock_picking_report_summary +#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard +msgid "Picking Summary Wizard" +msgstr "" + +#. module: stock_picking_report_summary +#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard_picking +msgid "Picking Summary Wizard Picking" +msgstr "" + +#. module: stock_picking_report_summary +#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard_product +msgid "Picking Summary Wizard Product" +msgstr "" + #. module: stock_picking_report_summary #: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form msgid "Pickings Details" @@ -124,6 +149,11 @@ msgstr "Résumé des opérations (PDF)" msgid "Print Product Summary" msgstr "Imprimer le résumé des opérations" +#. module: stock_picking_report_summary +#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__print_prices +msgid "Print Standard Prices" +msgstr "Imprimer les prix de revient" + #. module: stock_picking_report_summary #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__print_summary #: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form @@ -168,6 +198,11 @@ msgstr "Quantité total" msgid "Standard Price Total" msgstr "Total prix de vente" +#. module: stock_picking_report_summary +#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary +msgid "Standard Unit Price" +msgstr "Coût unitaire" + #. module: stock_picking_report_summary #: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form msgid "Summary" @@ -178,11 +213,6 @@ msgstr "Résumé" msgid "Total price" msgstr "Prix total" -#. module: stock_picking_report_summary -#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary -msgid "Unit Price" -msgstr "Prix unitaire" - #. module: stock_picking_report_summary #: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary msgid "Unity" @@ -193,18 +223,3 @@ msgstr "Unité" #: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__wizard_id msgid "Wizard" msgstr "Assistant" - -#. module: stock_picking_report_summary -#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard -msgid "picking.summary.wizard" -msgstr "" - -#. module: stock_picking_report_summary -#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard_picking -msgid "picking.summary.wizard.picking" -msgstr "" - -#. module: stock_picking_report_summary -#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard_product -msgid "picking.summary.wizard.product" -msgstr "" diff --git a/stock_picking_report_summary/models/picking_summary_wizard.py b/stock_picking_report_summary/models/picking_summary_wizard.py index a9d38bd..ba480c8 100644 --- a/stock_picking_report_summary/models/picking_summary_wizard.py +++ b/stock_picking_report_summary/models/picking_summary_wizard.py @@ -10,6 +10,37 @@ class PickingSummaryWizard(models.TransientModel): _name = 'picking.summary.wizard' _description = 'Picking Summary Wizard' + # Columns Section + print_summary = fields.Boolean( + string='Print Summary', default=True) + + print_detail = fields.Boolean( + string='Print Detail', default=True) + + print_unity_in_list = fields.Boolean( + string='Print Unit in Pickings List', default=True) + + print_prices = fields.Boolean( + string='Print Standard Prices', default=False) + + product_line_ids = fields.One2many( + comodel_name='picking.summary.wizard.product', + inverse_name='wizard_id', + default=lambda self: self._default_product_line_ids()) + + standard_price_total = fields.Float( + compute='_compute_standard_price_total', + digits=dp.get_precision('Product Price')) + + picking_line_ids = fields.One2many( + comodel_name='picking.summary.wizard.picking', + inverse_name='wizard_id', + default=lambda self: self._default_picking_line_ids()) + + picking_line_qty = fields.Integer( + string='Number of Selected Picking', readonly=True, + default=lambda self: self._default_picking_line_qty()) + # Default Section def _default_picking_line_qty(self): return len(self._context.get('active_ids', [])) @@ -48,9 +79,6 @@ class PickingSummaryWizard(models.TransientModel): # Arranged in alphabetical order for category then product name product_lines_sorted = sorted( product_lines.items(), key=lambda x: (x[1]['categ'], x[1]['name'])) - # product_lines_sorted = sorted( - # dict(product_lines_sorted).items(), - # key=lambda x: ) for product_id, name_qty in product_lines_sorted: res.append((0, 0, { 'product_id': product_id, @@ -58,32 +86,6 @@ class PickingSummaryWizard(models.TransientModel): })) return res - # Columns Section - print_summary = fields.Boolean( - string='Print Summary', default=True) - - print_detail = fields.Boolean( - string='Print Detail', default=True) - - print_unity_in_list = fields.Boolean( - string='Print Unit in Pickings List', default=True) - - product_line_ids = fields.One2many( - comodel_name='picking.summary.wizard.product', - inverse_name='wizard_id', default=_default_product_line_ids) - - standard_price_total = fields.Float( - compute='_compute_standard_price_total', - digits=dp.get_precision('Product Unit of Measure')) - - picking_line_ids = fields.One2many( - comodel_name='picking.summary.wizard.picking', - inverse_name='wizard_id', default=_default_picking_line_ids) - - picking_line_qty = fields.Integer( - string='Number of Selected Picking', readonly=True, - default=_default_picking_line_qty) - # Compute Section @api.multi def _compute_standard_price_total(self): diff --git a/stock_picking_report_summary/models/picking_summary_wizard_product.py b/stock_picking_report_summary/models/picking_summary_wizard_product.py index a50854a..db38042 100644 --- a/stock_picking_report_summary/models/picking_summary_wizard_product.py +++ b/stock_picking_report_summary/models/picking_summary_wizard_product.py @@ -16,9 +16,13 @@ class PickingSummaryWizardProduct(models.TransientModel): quantity_total = fields.Float() + standard_price = fields.Float( + related='product_id.standard_price', + digits=dp.get_precision('Product Price')) + standard_price_total = fields.Float( compute='_compute_standard_price_total', - digits=dp.get_precision('Product Unit of Measure')) + digits=dp.get_precision('Product Price')) @api.multi def _compute_standard_price_total(self): diff --git a/stock_picking_report_summary/readme/DESCRIPTION.rst b/stock_picking_report_summary/readme/DESCRIPTION.rst index 7bb0835..6792935 100644 --- a/stock_picking_report_summary/readme/DESCRIPTION.rst +++ b/stock_picking_report_summary/readme/DESCRIPTION.rst @@ -4,3 +4,6 @@ print a Report summary with two sheets : * Products Summary (where the total sum is calculated for each product) * Detail Part (each Picking is shown) + +You can choose to print standard prices or not. It can be useful to check some +values when you prepare your pickings. diff --git a/stock_picking_report_summary/readme/USAGE.rst b/stock_picking_report_summary/readme/USAGE.rst index 492f478..6c4be3d 100644 --- a/stock_picking_report_summary/readme/USAGE.rst +++ b/stock_picking_report_summary/readme/USAGE.rst @@ -6,6 +6,12 @@ To use this module, you need to * Select any pickings and click on 'Action' / 'Print Picking Summary (PDF)' +* Choose your options + .. figure:: ../static/description/wizard.png .. figure:: ../static/description/pdf_report.png + +Without prices : + +.. figure:: ../static/description/pdf_report_wo_prices.png diff --git a/stock_picking_report_summary/reports/report_print_picking_summary_template.xml b/stock_picking_report_summary/reports/report_print_picking_summary_template.xml index 9021568..b061044 100644 --- a/stock_picking_report_summary/reports/report_print_picking_summary_template.xml +++ b/stock_picking_report_summary/reports/report_print_picking_summary_template.xml @@ -4,16 +4,16 @@