Merge PR #178 into 12.0

Signed-off-by dreispt
This commit is contained in:
OCA-git-bot
2022-10-01 14:25:18 +00:00
21 changed files with 1160 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
============================
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)
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::
: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)'
* 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
===========
Bugs are tracked on `GitHub Issues <https://github.com/quentinDupont/stock-logistics-reporting/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 <https://github.com/quentinDupont/stock-logistics-reporting/issues/new?body=module:%20stock_picking_report_summary%0Aversion:%2012.0_ADD_picking_summary_report%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Grap
Contributors
~~~~~~~~~~~~
* Quentin DUPONT (quentin.dupont@grap.coop)
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 <https://github.com/quentinDupont/stock-logistics-reporting/tree/12.0_ADD_picking_summary_report/stock_picking_report_summary>`_ project on GitHub.
You are welcome to contribute.

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -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,
}

View File

@@ -0,0 +1,225 @@
# 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: 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"
"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_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
#: 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__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_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 "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
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: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 "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_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
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.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"
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 "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"

View File

@@ -0,0 +1,3 @@
from . import picking_summary_wizard
from . import picking_summary_wizard_picking
from . import picking_summary_wizard_product

View File

@@ -0,0 +1,94 @@
# 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'
# 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', []))
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']))
for product_id, name_qty in product_lines_sorted:
res.append((0, 0, {
'product_id': product_id,
'quantity_total': name_qty['qty'],
}))
return res
# 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'))

View File

@@ -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')

View File

@@ -0,0 +1,31 @@
# 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 = 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 Price'))
@api.multi
def _compute_standard_price_total(self):
for line in self:
line.standard_price_total =\
line.product_id.standard_price * line.quantity_total

View File

@@ -0,0 +1 @@
* Quentin DUPONT (quentin.dupont@grap.coop)

View File

@@ -0,0 +1,9 @@
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)
You can choose to print standard prices or not. It can be useful to check some
values when you prepare your pickings.

View File

@@ -0,0 +1,17 @@
To use this module, you need to
* go to Inventory
* Choose a Operation
* 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

View File

@@ -0,0 +1,23 @@
<?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

@@ -0,0 +1,11 @@
<?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"
/>
</odoo>

View File

@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<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>
<thead>
<tr>
<th>Product</th>
<th>Category</th>
<th class="align-center">Quantity</th>
<th class="align-center">Unity</th>
<th t-if="picking_w.print_prices" class="align-center">Standard Unit&#160;Price</th>
<th t-if="picking_w.print_prices" class="align-center">Total price</th>
</tr>
</thead>
<tbody>
<t t-foreach="picking_w.product_line_ids" t-as="product_line">
<tr>
<td><span 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">
<span t-field="product_line.quantity_total"/>
</td>
<td class="align-center">
<span t-field="product_line.product_id.uom_id.name"/>
</td>
<td t-if="picking_w.print_prices" class="align-center">
<span t-esc="product_line.product_id.standard_price"/>
</td>
<td t-if="picking_w.print_prices" class="align-center">
<span t-esc="product_line.standard_price_total"/>
</td>
</tr>
</t>
</tbody>
<tfoot t-if="picking_w.print_prices">
<tr>
<th colspan="5">Standard Price Total</th>
<td class="align-center">
<span t-esc="round(picking_w.standard_price_total,2)"/>
</td>
</tr>
</tfoot>
</table>
</p>
<!-- Detail Part -->
<p t-if="picking_w.print_detail">
<h1>Pickings List</h1>
<table>
<thead>
<tr>
<th>Product</th>
<th class="align-center">Quantity</th>
<th t-if="picking_w.print_unity_in_list" class="align-center">Unity</th>
</tr>
</thead>
<tbody>
<t t-foreach="picking_w.picking_line_ids" t-as="picking_line">
<tr class="line" style="background-color:#ddd">
<th colspan="3"><span 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 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;'"/>
<tr t-att-style="td_move_style">
<td>
<span t-field="move_line.product_id.name"/>
</td>
<td class="align-center">
<span t-field="move_line.product_qty"/>
</td>
<td t-if="picking_w.print_unity_in_list" class="align-center">
<span t-field="move_line.product_id.uom_id.name"/>
</td>
</tr>
</t>
<t t-if="picking_line.picking_id.note">
<tr class="line">
<td colspan="100%">
<span t-field="picking_line.picking_id.note" />
</td>
</tr>
</t>
</t>
</tbody>
</table>
</p>
</t>
</t>
</template>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1,444 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Stock Picking Report Summary</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="stock-picking-report-summary">
<h1 class="title">Stock Picking Report Summary</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" 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" 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" href="https://github.com/quentinDupont/stock-logistics-reporting/tree/12.0_ADD_picking_summary_report/stock_picking_report_summary"><img alt="quentinDupont/stock-logistics-reporting" src="https://img.shields.io/badge/github-quentinDupont%2Fstock--logistics--reporting-lightgray.png?logo=github" /></a></p>
<p>This module adds the possibility to select several Pickings and
print a Report 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>
</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><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="id1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id1">Usage</a></h1>
<p>To use this module, you need to</p>
<ul class="simple">
<li>go to Inventory</li>
<li>Choose a Operation</li>
<li>Select any pickings and click on Action / Print Picking Summary (PDF)</li>
<li>Choose your options</li>
</ul>
<div class="figure">
<img alt="https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/wizard.png" src="https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/wizard.png" />
</div>
<div class="figure">
<img alt="https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/pdf_report.png" src="https://raw.githubusercontent.com/quentinDupont/stock-logistics-reporting/12.0_ADD_picking_summary_report/stock_picking_report_summary/static/description/pdf_report.png" />
</div>
<p>Without prices :</p>
<div class="figure">
<img alt="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" src="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" />
</div>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/quentinDupont/stock-logistics-reporting/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/quentinDupont/stock-logistics-reporting/issues/new?body=module:%20stock_picking_report_summary%0Aversion:%2012.0_ADD_picking_summary_report%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id4">Authors</a></h2>
<ul class="simple">
<li>Grap</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul class="simple">
<li>Quentin DUPONT (<a class="reference external" href="mailto:quentin.dupont&#64;grap.coop">quentin.dupont&#64;grap.coop</a>)</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
<p>Current maintainer:</p>
<p><a class="reference external" href="https://github.com/quentinDupont"><img alt="quentinDupont" src="https://github.com/quentinDupont.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/quentinDupont/stock-logistics-reporting/tree/12.0_ADD_picking_summary_report/stock_picking_report_summary">quentinDupont/stock-logistics-reporting</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
</div>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -0,0 +1,18 @@
<?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_type">form</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

@@ -0,0 +1,35 @@
<?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>