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>

Reply via email to