[IMP] Bootstrapped PDF, test coverage, standard and i18n

This commit is contained in:
Quentin Dupont
2024-03-14 16:50:38 +01:00
parent 422118fdd6
commit 7bfb8ae61e
24 changed files with 253 additions and 530 deletions

View File

@@ -7,7 +7,7 @@ Stock Picking Report Summary
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:d293a0bb37cf2fd66f5a73a7efa579e56a48c14f1bdd59e615ba73a59e00e65a
!! source digest: sha256:55007a3115945f634dc0c35e3cc2e359b6ecb6f2ad8145726e87a3411af3c028
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -28,15 +28,14 @@ Stock Picking Report Summary
|badge1| |badge2| |badge3| |badge4| |badge5|
This module adds the possibility to select several Pickings and
print a Report summary with two sheets :
Select several Pickings to print a PDF summary with two sheets :
* Products Summary (where the total sum is calculated for each product)
* Detail Part (each Picking is shown)
* Detail Part (each delivery is detailed product by product, with lines at 0 printed in grey)
You can choose to print standard prices or not. It can be useful to check some
values when you prepare your pickings.
You can choose to print standard prices or not (can be useful to check some
values when you prepare your pickings).
**Table of contents**
@@ -48,11 +47,13 @@ Usage
To use this module, you need to
* go to Inventory
* Go to Inventory
* Choose a Operation
* Select any pickings and click on 'Action' / 'Print Picking Summary (PDF)'
* Select any pickings and click on 'Action' / 'Picking Summary'
.. figure:: https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/new_print_action.png
* Choose your options
@@ -60,10 +61,6 @@ To use this module, you need to
.. figure:: https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/pdf_report.png
Without prices :
.. figure:: https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/pdf_report_wo_prices.png
Bug Tracker
===========

View File

@@ -1 +1 @@
from . import models
from . import wizards

View File

@@ -15,11 +15,10 @@
"stock",
],
"data": [
"reports/report_paperformat.xml",
"security/ir.model.access.csv",
"reports/report_print_picking_summary.xml",
"reports/report_print_picking_summary_template.xml",
"views/view_picking_summary_wizard.xml",
"views/action.xml",
"wizards/view_picking_summary_wizard.xml",
],
"installable": True,
}

View File

@@ -4,13 +4,12 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 09:34+0000\n"
"PO-Revision-Date: 2022-05-11 09:34+0000\n"
"Last-Translator: <>\n"
"POT-Creation-Date: 2024-03-15 14:52+0000\n"
"PO-Revision-Date: 2024-03-15 14:52+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
@@ -31,16 +30,6 @@ msgstr "Catégorie"
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
@@ -64,8 +53,18 @@ 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"
msgid "For Pickings details"
msgstr "Pour les détails des livraisons"
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form
msgid "For Summary"
msgstr "Pour le résumé"
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form
msgid "General informations"
msgstr "Informations générales"
#. module: stock_picking_report_summary
#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__id
@@ -74,6 +73,17 @@ msgstr "Paramètres généraux"
msgid "ID"
msgstr ""
#. module: stock_picking_report_summary
#: model:ir.model.fields,help:stock_picking_report_summary.field_picking_summary_wizard_product__standard_price
msgid ""
"In Standard Price & AVCO: value of the product (automatically computed in AVCO).\n"
" In FIFO: value of the next unit that will leave the stock (automatically computed).\n"
" Used to value the product when the purchase cost is not known (e.g. inventory adjustment).\n"
" Used to compute margins on sale orders."
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____last_update
#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_picking____last_update
@@ -98,12 +108,12 @@ 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é"
msgstr "Quantité sélectionnée"
#. 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 "Opération de manutention"
msgstr "Livraison"
#. module: stock_picking_report_summary
#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__picking_line_ids
@@ -111,9 +121,10 @@ msgid "Picking Line"
msgstr "Ligne de bon de livraison"
#. module: stock_picking_report_summary
#: model:ir.actions.act_window,name:stock_picking_report_summary.action_picking_summary
#: model:ir.actions.report,name:stock_picking_report_summary.report_picking_summary
msgid "Picking Summary (PDF)"
msgstr "Résumé des opérations (PDF)"
msgid "Picking Summary"
msgstr "Résumé des livraisons"
#. module: stock_picking_report_summary
#: model:ir.model,name:stock_picking_report_summary.model_picking_summary_wizard
@@ -130,30 +141,20 @@ msgstr ""
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"
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)"
msgid "Pickings Details"
msgstr "Détails des livraisons"
#. 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"
msgid "Print PDF"
msgstr "Imprimer le PDF"
#. module: stock_picking_report_summary
#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__print_details
msgid "Print Picking Details"
msgstr "Imprimer le détail des livraisons"
#. module: stock_picking_report_summary
#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__print_prices
@@ -162,14 +163,13 @@ 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
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"
#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__print_unit_in_list
msgid "Print Units"
msgstr "Imprimer les unités de mesure"
#. module: stock_picking_report_summary
#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard_product__product_id
@@ -185,7 +185,7 @@ 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"
msgstr "Résumé des bons de livraison"
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
@@ -195,7 +195,7 @@ 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"
msgstr "Quantité totale"
#. module: stock_picking_report_summary
#: model:ir.model.fields,field_description:stock_picking_report_summary.field_picking_summary_wizard__standard_price_total
@@ -209,11 +209,6 @@ msgstr "Total prix de vente"
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"
msgstr "Résumé"
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Total price"
@@ -221,7 +216,7 @@ msgstr "Prix total"
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Unity"
msgid "Unit"
msgstr "Unité"
#. module: stock_picking_report_summary

View File

@@ -1,224 +0,0 @@
# 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"
"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 ""
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Category"
msgstr ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. module: stock_picking_report_summary
#: model:ir.actions.report,name:stock_picking_report_summary.report_picking_summary
msgid "Picking Summary (PDF)"
msgstr ""
#. 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"
msgstr ""
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Pickings List"
msgstr ""
#. 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 ""
#. module: stock_picking_report_summary
#: model:ir.actions.act_window,name:stock_picking_report_summary.action_picking_summary
msgid "Print Picking Summary (PDF)"
msgstr ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. 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 ""
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Products Summary"
msgstr ""
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Quantity"
msgstr ""
#. 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 ""
#. 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 ""
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Standard Unit Price"
msgstr ""
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.view_picking_summary_wizard_form
msgid "Summary"
msgstr ""
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Total price"
msgstr ""
#. module: stock_picking_report_summary
#: model_terms:ir.ui.view,arch_db:stock_picking_report_summary.picking_summary
msgid "Unity"
msgstr ""
#. 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 ""

View File

@@ -1,9 +1,8 @@
This module adds the possibility to select several Pickings and
print a Report summary with two sheets :
Select several Pickings to print a PDF summary with two sheets :
* Products Summary (where the total sum is calculated for each product)
* Detail Part (each Picking is shown)
* Detail Part (each delivery is detailed product by product, with lines at 0 printed in grey)
You can choose to print standard prices or not. It can be useful to check some
values when you prepare your pickings.
You can choose to print standard prices or not (can be useful to check some
values when you prepare your pickings).

View File

@@ -1,17 +1,15 @@
To use this module, you need to
* go to Inventory
* Go to Inventory
* Choose a Operation
* Select any pickings and click on 'Action' / 'Print Picking Summary (PDF)'
* Select any pickings and click on 'Action' / 'Picking Summary'
.. figure:: ../static/description/new_print_action.png
* Choose your options
.. figure:: ../static/description/wizard.png
.. figure:: ../static/description/pdf_report.png
Without prices :
.. figure:: ../static/description/pdf_report_wo_prices.png

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" ?>
<!-- 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).
-->
<odoo><data>
<record id="paperformat_picking_summary" model="report.paperformat">
<field name="name">Picking Report Summary</field>
<field name="format">A4</field>
<field name="page_height">0</field>
<field name="page_width">0</field>
<field name="orientation">Portrait</field>
<field name="margin_top">10</field>
<field name="margin_bottom">15</field>
<field name="margin_left">8</field>
<field name="margin_right">8</field>
<field name="header_line" eval="False" />
<field name="header_spacing">43</field>
<field name="dpi">90</field>
</record>
</data></odoo>

View File

@@ -1,11 +1,16 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<report
id="report_picking_summary"
string="Picking Summary (PDF)"
model="picking.summary.wizard"
report_type="qweb-pdf"
name="stock_picking_report_summary.picking_summary"
paperformat="paperformat_picking_summary"
/>
<record id="report_picking_summary" model="ir.actions.report">
<field name="name">Picking Summary</field>
<field name="model">picking.summary.wizard</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">stock_picking_report_summary.picking_summary</field>
<field name="report_file">stock_picking_report_summary.picking_summary</field>
<field
name="binding_model_id"
ref="stock_picking_report_summary.model_picking_summary_wizard"
/>
<field name="paperformat_id" ref="product.paperformat_label_sheet" />
<field name="binding_type">report</field>
</record>
</odoo>

View File

@@ -2,146 +2,123 @@
<odoo>
<template id="picking_summary">
<t t-call="web.basic_layout">
<t t-foreach="docs" t-as="picking_w">
<style type="text/css">
table,
th,
td {
border: 1px solid #4a4a4a;
width: 100%;
}
h1 {
text-align: center;
}
th,
td {
padding: 8px;
}
.align-center {
text-align: center;
}
</style>
<!-- Summary Part -->
<p t-if="picking_w.print_summary">
<h1>Products Summary</h1>
<table>
<t t-foreach="docs" t-as="picking">
<!-- Summary Part -->
<t t-if="picking.print_summary">
<div class="container mx-auto w-80 mt-5">
<div class="w-100 text-center">
<h1 class="display-1">Products Summary</h1>
</div>
<table class="table table-responsive table-bordered py-3">
<thead>
<tr>
<tr class="table-info">
<th>Product</th>
<th>Category</th>
<th class="align-center">Quantity</th>
<th class="align-center">Unity</th>
<th class="text-center">Quantity</th>
<th class="text-center">Unit</th>
<th
t-if="picking_w.print_prices"
class="align-center"
>Standard Unit&#160;Price</th>
t-if="picking.print_prices"
class="text-center"
>Standard Unit&#160;Price</th>
<th
t-if="picking_w.print_prices"
class="align-center"
>Total price</th>
t-if="picking.print_prices"
class="text-center"
>Total price</th>
</tr>
</thead>
<tbody>
<t
t-foreach="picking_w.product_line_ids"
t-as="product_line"
>
<t t-foreach="picking.product_line_ids" t-as="product_line">
<tr>
<td><span
t-field="product_line.product_id.name"
/></td>
t-field="product_line.product_id.name"
/></td>
<td><span
t-esc="product_line.product_id.categ_id.name.capitalize()"
/></td>
<td class="align-center">
t-out="product_line.product_id.categ_id.name.capitalize()"
/></td>
<td class="text-center">
<span t-field="product_line.quantity_total" />
</td>
<td class="align-center">
<td class="text-center">
<span
t-field="product_line.product_id.uom_id.name"
/>
t-field="product_line.product_id.uom_id.name"
/>
</td>
<td
t-if="picking_w.print_prices"
class="align-center"
>
<td t-if="picking.print_prices" class="text-center">
<span
t-esc="product_line.product_id.standard_price"
/>
t-out="product_line.product_id.standard_price"
/>
</td>
<td
t-if="picking_w.print_prices"
class="align-center"
>
<td t-if="picking.print_prices" class="text-center">
<span
t-esc="product_line.standard_price_total"
/>
t-out="product_line.standard_price_total"
/>
</td>
</tr>
</t>
</tbody>
<tfoot t-if="picking_w.print_prices">
<tfoot t-if="picking.print_prices">
<tr>
<th colspan="5">Standard Price Total</th>
<td class="align-center">
<td class="text-center table-dark">
<span
t-esc="round(picking_w.standard_price_total,2)"
/>
t-out="round(picking.standard_price_total,2)"
/>
</td>
</tr>
</tfoot>
</table>
</p>
</div>
</t>
<!-- Detail Part -->
<p t-if="picking_w.print_detail">
<h1>Pickings List</h1>
<table>
<!-- Detail Part -->
<t t-if="picking.print_details">
<div class="container mx-auto w-80 mt-5">
<div class="w-100 my-3 text-center">
<h1 class="display-1">Pickings Details</h1>
</div>
<table class="table table-responsive table-bordered my-2">
<thead>
<tr>
<tr class="table-info">
<th>Product</th>
<th class="align-center">Quantity</th>
<th class="text-center">Quantity</th>
<th
t-if="picking_w.print_unity_in_list"
class="align-center"
>Unity</th>
t-if="picking.print_unit_in_list"
class="text-center"
>Unit</th>
</tr>
</thead>
<tbody>
<t
t-foreach="picking_w.picking_line_ids"
t-as="picking_line"
>
<tr class="line" style="background-color:#ddd">
<t t-foreach="picking.picking_line_ids" t-as="picking_line">
<tr class="line table-active mt-2">
<th colspan="3"><span
t-field="picking_line.picking_id.partner_id.name"
/> - <span
t-field="picking_line.picking_id.name"
/></th>
t-field="picking_line.picking_id.partner_id.name"
/> - <span
t-field="picking_line.picking_id.name"
/></th>
</tr>
<t
t-foreach="picking_line.picking_id.move_lines"
t-as="move_line"
>
t-foreach="picking_line.picking_id.move_ids"
t-as="move"
>
<t
t-set="td_move_style"
t-value="move_line.product_qty == 0 and 'border:1px black solid; color:gray;' or 'border:1px black solid; color:black;'"
/>
t-set="td_move_style"
t-value="move.product_qty == 0 and 'color:gray;' or 'color:black;'"
/>
<tr t-att-style="td_move_style">
<td>
<span t-field="move_line.product_id.name" />
<span t-field="move.product_id.name" />
</td>
<td class="align-center">
<span t-field="move_line.product_qty" />
<td class="text-center">
<span t-field="move.product_qty" />
</td>
<td
t-if="picking_w.print_unity_in_list"
class="align-center"
>
t-if="picking.print_unit_in_list"
class="text-center"
>
<span
t-field="move_line.product_id.uom_id.name"
/>
t-field="move.product_id.uom_id.name"
/>
</td>
</tr>
</t>
@@ -150,8 +127,8 @@ td {
<tr class="line">
<td colspan="100%">
<span
t-field="picking_line.picking_id.note"
/>
t-field="picking_line.picking_id.note"
/>
</td>
</tr>
</t>
@@ -159,7 +136,8 @@ td {
</t>
</tbody>
</table>
</p>
</div>
</t>
</t>
</t>
</template>

View File

@@ -0,0 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
picking_summary_wizard,picking_summary_wizard,stock_picking_report_summary.model_picking_summary_wizard,stock.group_stock_user,1,1,1,0
picking_summary_wizard_product,picking_summary_wizard_product,stock_picking_report_summary.model_picking_summary_wizard_product,stock.group_stock_user,1,1,1,0
picking_summary_wizard_picking,picking_summary_wizard_picking,stock_picking_report_summary.model_picking_summary_wizard_picking,stock.group_stock_user,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 picking_summary_wizard picking_summary_wizard stock_picking_report_summary.model_picking_summary_wizard stock.group_stock_user 1 1 1 0
3 picking_summary_wizard_product picking_summary_wizard_product stock_picking_report_summary.model_picking_summary_wizard_product stock.group_stock_user 1 1 1 0
4 picking_summary_wizard_picking picking_summary_wizard_picking stock_picking_report_summary.model_picking_summary_wizard_picking stock.group_stock_user 1 1 1 0

View File

@@ -367,17 +367,16 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:d293a0bb37cf2fd66f5a73a7efa579e56a48c14f1bdd59e615ba73a59e00e65a
!! source digest: sha256:55007a3115945f634dc0c35e3cc2e359b6ecb6f2ad8145726e87a3411af3c028
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/stock-logistics-reporting/tree/16.0/stock_picking_report_summary"><img alt="OCA/stock-logistics-reporting" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--reporting-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/stock-logistics-reporting-16-0/stock-logistics-reporting-16-0-stock_picking_report_summary"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-reporting&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module adds the possibility to select several Pickings and
print a Report summary with two sheets :</p>
<p>Select several Pickings to print a PDF summary with two sheets :</p>
<ul class="simple">
<li>Products Summary (where the total sum is calculated for each product)</li>
<li>Detail Part (each Picking is shown)</li>
<li>Detail Part (each delivery is detailed product by product, with lines at 0 printed in grey)</li>
</ul>
<p>You can choose to print standard prices or not. It can be useful to check some
values when you prepare your pickings.</p>
<p>You can choose to print standard prices or not (can be useful to check some
values when you prepare your pickings).</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
@@ -395,9 +394,14 @@ values when you prepare your pickings.</p>
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>To use this module, you need to</p>
<ul class="simple">
<li>go to Inventory</li>
<li>Go to Inventory</li>
<li>Choose a Operation</li>
<li>Select any pickings and click on Action / Print Picking Summary (PDF)</li>
<li>Select any pickings and click on Action / Picking Summary</li>
</ul>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/new_print_action.png" src="https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/new_print_action.png" />
</div>
<ul class="simple">
<li>Choose your options</li>
</ul>
<div class="figure">
@@ -406,10 +410,6 @@ values when you prepare your pickings.</p>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/pdf_report.png" src="https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/pdf_report.png" />
</div>
<p>Without prices :</p>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/pdf_report_wo_prices.png" src="https://raw.githubusercontent.com/OCA/stock-logistics-reporting/16.0/stock_picking_report_summary/static/description/pdf_report_wo_prices.png" />
</div>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 105 KiB

View File

@@ -11,23 +11,30 @@ class TestModule(TransactionCase):
self.PickingReportWizard = self.env["picking.summary.wizard"]
self.StockPicking = self.env["stock.picking"]
self.outPickingType = self.env.ref("stock.picking_type_out")
self.ir_actions_report = self.env["ir.actions.report"]
self.report_name = "stock_picking_report_summary.report_picking_summary"
def _test_wizard(self, pickings):
wizard = self.PickingReportWizard.with_context(
active_model="stock.picking",
active_ids=pickings.ids,
).create({})
custom_note = "La Rabia Del Pueblo - Keny Arkana"
pickings[0].note = custom_note
report = self.env.ref("stock_picking_report_summary.report_picking_summary")
res = str(report.render_qweb_html(wizard.ids)[0])
self.assertIn(custom_note, res)
def test_wizard(self):
def test_01_wizard(self):
pickings = self.StockPicking.search(
[
("picking_type_id", "=", self.outPickingType.id),
]
)
self._test_wizard(pickings)
wizard = self.PickingReportWizard.with_context(
active_model="stock.picking",
active_ids=pickings.ids,
).create({})
# Test fields Compute
sum_th = sum(wizard.mapped("product_line_ids.standard_price_total"))
wizard._compute_standard_price_total()
self.assertEqual(sum_th, wizard.standard_price_total)
# Test PDF render
custom_note = "La Rabia Del Pueblo - Keny Arkana"
pickings[0].note = custom_note
res = str(
self.ir_actions_report._render_qweb_html(self.report_name, wizard.ids)[0]
)
self.assertIn(custom_note, res)

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (C) 2018 - 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).
-->
<odoo><data>
<record id="action_picking_summary" model="ir.actions.act_window">
<field name="name">Print Picking Summary (PDF)</field>
<field name="res_model">picking.summary.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="stock.model_stock_picking" />
</record>
</data></odoo>

View File

@@ -1,47 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (C) 2014 - Today: GRAP (http://www.grap.coop)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
@author: Quentin DUPONT (quentin.dupont@grap.coop)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<odoo><data>
<record id="view_picking_summary_wizard_form" model="ir.ui.view">
<field name="model">picking.summary.wizard</field>
<field name="arch" type="xml">
<form string="Print Product Summary">
<group colspan="4">
<group string="General Parameters">
<field name="picking_line_qty" />
</group>
<group string="Summary" colspan="2">
<field name="print_summary" />
<field
name="print_prices"
attrs="{'invisible': [('print_summary', '=', False)]}"
/>
</group>
<group string="Pickings Details" colspan="2">
<field name="print_detail" />
<field
name="print_unity_in_list"
attrs="{'invisible': [('print_detail', '=', False)]}"
/>
</group>
</group>
<footer>
<button
name="%(report_picking_summary)d"
string="Print Summary"
type="action"
icon="fa-print"
class="oe_highlight"
/>
<button icon="fa-ban" special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
</data></odoo>

View File

@@ -2,8 +2,7 @@
# @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 import fields, models
class PickingSummaryWizard(models.TransientModel):
@@ -11,13 +10,11 @@ class PickingSummaryWizard(models.TransientModel):
_description = "Picking Summary Wizard"
# Columns Section
print_summary = fields.Boolean(string="Print Summary", default=True)
print_summary = fields.Boolean(default=True)
print_detail = fields.Boolean(string="Print Detail", default=True)
print_details = fields.Boolean(string="Print Picking Details", default=True)
print_unity_in_list = fields.Boolean(
string="Print Unit in Pickings List", default=True
)
print_unit_in_list = fields.Boolean(string="Print Units", default=True)
print_prices = fields.Boolean(string="Print Standard Prices", default=False)
@@ -71,7 +68,7 @@ class PickingSummaryWizard(models.TransientModel):
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:
for move in picking.move_ids:
if move.product_id.id not in product_lines.keys():
product_lines[move.product_id.id] = {
"name": move.product_id.name,

View File

@@ -2,8 +2,7 @@
# @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 import fields, models
class PickingSummaryWizardProduct(models.TransientModel):

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (C) 2014 - Today: GRAP (http://www.grap.coop)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
@author: Quentin DUPONT (quentin.dupont@grap.coop)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<odoo>
<record id="view_picking_summary_wizard_form" model="ir.ui.view">
<field name="model">picking.summary.wizard</field>
<field name="arch" type="xml">
<form>
<group colspan="4">
<group string="General informations">
<field name="picking_line_qty" />
</group>
<group string="For Summary" colspan="4">
<field name="print_summary" />
<field
name="print_prices"
attrs="{'invisible': [('print_summary', '=', False)]}"
/>
</group>
<group string="For Pickings details" colspan="4">
<field name="print_details" />
<field
name="print_unit_in_list"
attrs="{'invisible': [('print_details', '=', False)]}"
/>
</group>
</group>
<footer>
<button
name="%(report_picking_summary)d"
string="Print PDF"
type="action"
icon="fa-print"
class="oe_highlight"
/>
<button icon="fa-ban" special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="action_picking_summary" model="ir.actions.act_window">
<field name="name">Picking Summary</field>
<field name="res_model">picking.summary.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="stock.model_stock_picking" />
<field name="binding_type">report</field>
</record>
</odoo>