changeset 3d4bfb528740 in modules/stock_package_shipping:default
details:
https://hg.tryton.org/modules/stock_package_shipping?cmd=changeset&node=3d4bfb528740
description:
Add wizard to print shipping labels
issue10834
review375701002
diffstat:
CHANGELOG | 2 +
__init__.py | 4 +++
carrier.py | 4 +++
stock.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++-
stock.xml | 34 ++++++++++++++++++++++++++++++
view/package_list.xml | 3 ++
6 files changed, 103 insertions(+), 1 deletions(-)
diffs (192 lines):
diff -r f12017696b77 -r 3d4bfb528740 CHANGELOG
--- a/CHANGELOG Thu Sep 23 23:12:35 2021 +0200
+++ b/CHANGELOG Mon Oct 11 18:50:11 2021 +0200
@@ -1,3 +1,5 @@
+* Add wizard to print shipping labels
+
Version 6.0.0 - 2021-05-03
* Bug fixes (see mercurial logs for details)
* Add tracking URL
diff -r f12017696b77 -r 3d4bfb528740 __init__.py
--- a/__init__.py Thu Sep 23 23:12:35 2021 +0200
+++ b/__init__.py Mon Oct 11 18:50:11 2021 +0200
@@ -17,4 +17,8 @@
module='stock_package_shipping', type_='model')
Pool.register(
stock.CreateShipping,
+ stock.PrintShippingLabel,
module='stock_package_shipping', type_='wizard')
+ Pool.register(
+ stock.ShippingLabel,
+ module='stock_package_shipping', type_='report')
diff -r f12017696b77 -r 3d4bfb528740 carrier.py
--- a/carrier.py Thu Sep 23 23:12:35 2021 +0200
+++ b/carrier.py Mon Oct 11 18:50:11 2021 +0200
@@ -11,3 +11,7 @@
shipping_service = fields.Selection([
(None, ''),
], 'Shipping Service')
+
+ @property
+ def shipping_label_mimetype(self):
+ return 'application/octet-stream'
diff -r f12017696b77 -r 3d4bfb528740 stock.py
--- a/stock.py Thu Sep 23 23:12:35 2021 +0200
+++ b/stock.py Mon Oct 11 18:50:11 2021 +0200
@@ -1,5 +1,7 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
+import mimetypes
+
from sql import Column
from trytond.config import config
@@ -8,8 +10,9 @@
from trytond.model.exceptions import AccessError
from trytond.pool import PoolMeta, Pool
from trytond.pyson import Eval, Bool, Id
+from trytond.report import Report
from trytond.transaction import Transaction
-from trytond.wizard import Wizard, StateTransition
+from trytond.wizard import Wizard, StateTransition, StateAction
from .exceptions import PackWarning
@@ -104,6 +107,8 @@
"Shipping Label", readonly=True,
file_id=file_id, store_prefix=store_prefix)
shipping_label_id = fields.Char("Shipping Label ID", readonly=True)
+ shipping_label_mimetype = fields.Char(
+ "Shipping Label MIME Type", readonly=True)
shipping_tracking_url = fields.Function(
fields.Char(
"Shipping Tracking URL",
@@ -116,6 +121,15 @@
return
@classmethod
+ def __setup__(cls):
+ super().__setup__()
+ cls._buttons.update(
+ print_shipping_label={
+ 'invisible': ~Eval('shipping_label'),
+ 'depends': ['shipping_label'],
+ })
+
+ @classmethod
def __register__(cls, module_name):
pool = Pool()
PackageType = pool.get('stock.package.type')
@@ -173,6 +187,11 @@
default.setdefault('shipping_label', None)
return super(Package, cls).copy(packages, default=default)
+ @classmethod
+ @ModelView.button_action('stock_package_shipping.report_shipping_label')
+ def print_shipping_label(cls, packages):
+ pass
+
class ShippingMixin:
__slots__ = ()
@@ -343,3 +362,39 @@
method_name = 'validate_packing_%s' % shipping_service
getattr(self.record, method_name)()
return 'end'
+
+
+class ShippingLabel(Report):
+ __name__ = 'stock.package.shipping_label'
+
+ @classmethod
+ def render(cls, report, report_context):
+ package = report_context['record']
+ if not package:
+ return '.bin', b''
+ extension = mimetypes.guess_extension(
+ package.shipping_label_mimetype or 'application/octet-stream')
+ # Return with extension so convert has it
+ return extension, package.shipping_label or b''
+
+ @classmethod
+ def convert(cls, report, data, **kwargs):
+ return data
+
+
+class PrintShippingLabel(Wizard):
+ "Print Shipping Label"
+ __name__ = 'stock.shipment.print_shipping_label'
+ start_state = 'print_'
+ print_ = StateAction('stock_package_shipping.report_shipping_label')
+
+ def do_print_(self, action):
+ package_ids = []
+ labels = set()
+ for shipment in self.records:
+ for package in shipment.packages:
+ if (package.shipping_label
+ and package.shipping_label not in labels):
+ package_ids.append(package.id)
+ labels.add(package.shipping_label)
+ return action, {'ids': package_ids}
diff -r f12017696b77 -r 3d4bfb528740 stock.xml
--- a/stock.xml Thu Sep 23 23:12:35 2021 +0200
+++ b/stock.xml Mon Oct 11 18:50:11 2021 +0200
@@ -21,6 +21,12 @@
<field name="name">package_list</field>
</record>
+ <record model="ir.model.button"
id="package_print_shipping_label_button">
+ <field name="name">print_shipping_label</field>
+ <field name="string">Shipping Label</field>
+ <field name="model" search="[('model', '=', 'stock.package')]"/>
+ </record>
+
<record model="ir.ui.view" id="shipment_out_view_form">
<field name="model">stock.shipment.out</field>
<field name="inherit" ref="stock.shipment_out_view_form"/>
@@ -51,5 +57,33 @@
<field name="name">Create Shipping</field>
<field name="wiz_name">stock.shipment.create_shipping</field>
</record>
+
+ <record model="ir.action.report" id="report_shipping_label">
+ <field name="name">Shipping Label</field>
+ <field name="model">stock.package</field>
+ <field name="report_name">stock.package.shipping_label</field>
+ <field name="single" eval="True"/>
+ <field name="template_extension">txt</field>
+ </record>
+ <record model="ir.action.keyword" id="report_shipping_label_keyword">
+ <field name="keyword">form_print</field>
+ <field name="model">stock.package,-1</field>
+ <field name="action" ref="report_shipping_label"/>
+ </record>
+
+ <record model="ir.action.wizard" id="wizard_print_shipping_label">
+ <field name="name">Shipping Labels</field>
+ <field name="wiz_name">stock.shipment.print_shipping_label</field>
+ </record>
+ <record model="ir.action.keyword"
id="wizard_print_shipping_label_keyword_shipment_out">
+ <field name="keyword">form_print</field>
+ <field name="model">stock.shipment.out,-1</field>
+ <field name="action" ref="wizard_print_shipping_label"/>
+ </record>
+ <record model="ir.action.keyword"
id="wizard_print_shipping_label_keyword_shipment_in_return">
+ <field name="keyword">form_print</field>
+ <field name="model">stock.shipment.in.return,-1</field>
+ <field name="action" ref="wizard_print_shipping_label"/>
+ </record>
</data>
</tryton>
diff -r f12017696b77 -r 3d4bfb528740 view/package_list.xml
--- a/view/package_list.xml Thu Sep 23 23:12:35 2021 +0200
+++ b/view/package_list.xml Mon Oct 11 18:50:11 2021 +0200
@@ -6,4 +6,7 @@
<field name="shipping_reference" expand="1"/>
<field name="shipping_tracking_url" widget="url"/>
</xpath>
+ <xpath expr="/tree/field[@name='state']" position="after">
+ <button name="print_shipping_label"/>
+ </xpath>
</data>