Merge lp:~camptocamp/carriers-deliveries/7.0-add-base_delivery_carrier_label-yvr into lp:~stock-logistic-core-editors/carriers-deliveries/7.0

Proposed by Yannick Vaucher @ Camptocamp
Status: Merged
Merged at revision: 8
Proposed branch: lp:~camptocamp/carriers-deliveries/7.0-add-base_delivery_carrier_label-yvr
Merge into: lp:~stock-logistic-core-editors/carriers-deliveries/7.0
Diff against target: 1112 lines (+1060/-0)
10 files modified
base_delivery_carrier_label/__init__.py (+22/-0)
base_delivery_carrier_label/__openerp__.py (+62/-0)
base_delivery_carrier_label/delivery.py (+84/-0)
base_delivery_carrier_label/delivery_view.xml (+88/-0)
base_delivery_carrier_label/i18n/base_delivery_carrier_label.pot (+212/-0)
base_delivery_carrier_label/i18n/fr.po (+220/-0)
base_delivery_carrier_label/reports.xml (+15/-0)
base_delivery_carrier_label/security/ir.model.access.csv (+7/-0)
base_delivery_carrier_label/stock.py (+295/-0)
base_delivery_carrier_label/stock_view.xml (+55/-0)
To merge this branch: bzr merge lp:~camptocamp/carriers-deliveries/7.0-add-base_delivery_carrier_label-yvr
Reviewer Review Type Date Requested Status
Guewen Baconnier @ Camptocamp code review, test Approve
Joël Grand-Guillaume @ camptocamp code review, no tests Approve
Review via email: mp+196753@code.launchpad.net

Commit message

Port of delivery_base and deliver_shipping_label removing direct print logic

To post a comment you must log in.
Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Thanks!

I pushed some change regarding the pep-8 and pep-257 (docstrings).

On this change:

        'carrier_tracking_ref': fields.char(
            'Carrier Tracking Ref',
            size=32,
            states={'done': [('readonly', True)]}),

I think we shouldn't set the tracking number readonly once the picking is done.
My rationale: if it makes sense for carriers which get the tracking number from the API, one may still want to handle some carrier manually and would still need to edit the field afterwards.

pdf_list is not used, and a semantic detail: not only pdf could be returned (zpl for instance):

        pdf_list = []
        for pick in pickings:
            pdf = pick.generate_single_label()
            pdf_list.append(pdf)

In the access rights files, shouldn't it be stock.group_stock_user and stock.group_stock_manager instead of sales user / manager?

Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote :

Thanks for the review.

I fixed carrier_tracking_ref and the pdf_list variable

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Thanks for the change. You can totally remove the "carrier_tracking_ref" field: it is defined in "delivery". It was redefined only for the "states" attribute.

What about the access rights?

Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote :

For access rights, salesmens need an access to select carrier on the sale order.

It is arguable if sale manager can edit or not a carrier.

However, I agree I have to add stock groups as well.

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Thanks, looks good!

review: Approve (code review)
Revision history for this message
Joël Grand-Guillaume @ camptocamp (jgrandguillaume-c2c) wrote :

Thanks !

I just removed the unsued tree view in stock_view.xml.

LGTM now.

review: Approve (code review, no tests)
Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote :

I added tracking_id on shipping label in order to be able to create label per pack

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Thanks Yannick.

The docstring ":return: list of {tracking_id, file, file_type}" is confusing. What does it return? (it let me think of a set in the Python 2.7+ syntax: {1, 2}. Isn't it a tuple?

I think that tracking_id should not be mandatory, when we don't use the packs and only have a label per picking.
If you agree with that, 'tracking_id' returned by generate_pack_labels() could be False and the docstring should explain that. Also, I propose to rename generate_pack_labels() to generate_labels() as it can generate labels for packs or just the picking.

review: Needs Fixing
Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote :

Thanks for the review

Docstring improved, and code a bit adapted so tracking_id is not mandatory anymore in returned dict.

Plus renamed generate_pack_labels to generate_shipping_labels as it give some more accuracy than generate labels.

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Nice, thanks!

review: Approve (code review)
Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

The security file was not loaded, fixed.

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

I get this error:

    Traceback (most recent call last):
      File "/path/to/server/openerp/netsvc.py", line 292, in dispatch_rpc
        result = ExportService.getService(service_name).dispatch(method, params)
      File "/path/to/server/openerp/service/web_services.py", line 626, in dispatch
        res = fn(db, uid, *params)
      File "/path/to/server/openerp/osv/osv.py", line 188, in execute_kw
        return self.execute(db, uid, obj, method, *args, **kw or {})
      File "/path/to/server/openerp/osv/osv.py", line 131, in wrapper
        return f(self, dbname, *args, **kwargs)
      File "/path/to/server/openerp/osv/osv.py", line 197, in execute
        res = self.execute_cr(cr, uid, obj, method, *args, **kw)
      File "/path/to/server/openerp/osv/osv.py", line 185, in execute_cr
        return getattr(object, method)(cr, uid, *args, **kw)
      File "/path/to/carriers-deliveries/base_delivery_carrier_label/stock.py", line 245, in action_generate_carrier_label

      File "/path/to/carriers-deliveries/base_delivery_carrier_label/stock.py", line 99, in action_generate_carrier_label
        'res_id': pick.id,
    TypeError: 'type' object is unsubscriptable

When I use the button "Create Shipping Label" on a delivery order whose delivery method has no label configured.

The problem is in action_generate_carrier_label() which calls generate_shipping_labels() which returns a list with the result of calls generate_default_label(), the latter returning a NotImplementedError (it returns the type, it does not raise). I propose to raise an orm.except_orm error in generate_default_label() when there is no label configured instead of returning an Exception type.

review: Needs Fixing
Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote :

Thanks for the review I fixed that issue

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Neat, thanks for the new error message.

review: Approve (code review, test)
Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

> Neat, thanks for the new error message.
And for the options on create() ;-)

Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote :

Fixed an issue of newly created delivery orders from sale order to set the options from the carrier_id

Plus improved the error message to be more generic if we don't want to install default labels.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory 'base_delivery_carrier_label'
=== added file 'base_delivery_carrier_label/__init__.py'
--- base_delivery_carrier_label/__init__.py 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/__init__.py 2014-01-15 13:14:41 +0000
@@ -0,0 +1,22 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Yannick Vaucher
5# Copyright 2013 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21from . import delivery
22from . import stock
023
=== added file 'base_delivery_carrier_label/__openerp__.py'
--- base_delivery_carrier_label/__openerp__.py 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/__openerp__.py 2014-01-15 13:14:41 +0000
@@ -0,0 +1,62 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Yannick Vaucher
5# Copyright 2013 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21{'name': 'Base module for carrier labels',
22 'version': '1.0',
23 'author': 'Camptocamp,Akretion',
24 'maintainer': 'Camptocamp',
25 'category': 'version',
26 'complexity': 'normal',
27 'depends': ['stock', 'delivery'],
28 'description': """
29Base module for carrier labels
30==============================
31
32This module adds a button on delivery orders to generate a label as an
33attachement.
34
35.. tip::
36 It doesn't implement a label. To add a default label, you can install
37 the module `delivery_carrier_label_default_webkit`
38
39It can be used to print specific labels per carrier.
40
41.. note::
42 Inspired by Akretion module delivery_base and delivery_shipping_label
43
44Contributors
45------------
46
47* David BEAL <david.beal@akretion.com>
48* Sébastien BEAU <sebastien.beau@akretion.com>
49* Yannick Vaucher <yannick.vaucher@camptocamp.com>
50
51 """,
52 'website': 'http://www.camptocamp.com/',
53 'data': ['delivery_view.xml',
54 'stock_view.xml',
55 'security/ir.model.access.csv',
56 ],
57 'tests': [],
58 'installable': True,
59 'auto_install': False,
60 'license': 'AGPL-3',
61 'application': True,
62}
063
=== added file 'base_delivery_carrier_label/delivery.py'
--- base_delivery_carrier_label/delivery.py 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/delivery.py 2014-01-15 13:14:41 +0000
@@ -0,0 +1,84 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Sébastien BEAU <sebastien.beau@akretion.com>
5# Copyright (C) 2012-TODAY Akretion <http://www.akretion.com>.
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21from openerp.osv import orm, fields
22
23
24class DeliveryCarrierTemplateOption(orm.Model):
25 """ Available options for a carrier (partner) """
26 _name = 'delivery.carrier.template.option'
27 _description = 'Delivery carrier template option'
28
29 _columns = {
30 'partner_id': fields.many2one('res.partner', 'Partner Carrier'),
31 'name': fields.char('Name', size=64),
32 'code': fields.char('Code', size=64),
33 }
34
35
36class DeliveryCarrierOption(orm.Model):
37 """ Option selected for a carrier method
38
39 Those options define the list of available pre-added and available
40 to be added on delivery orders
41
42 """
43 _name = 'delivery.carrier.option'
44 _description = 'Delivery carrier option'
45 _inherits = {'delivery.carrier.template.option': 'tmpl_option_id'}
46
47 _columns = {
48 'state': fields.selection(
49 (('mandatory', 'Mandatory'),
50 ('default_option', 'Optional by Default'),
51 ('option', 'Optional'),
52 ),
53 string='Option Configuration',
54 help="Ensure you add and define correctly all your options or those won't "
55 "be available for the packager\n"
56 "- Mandatory: This option will be copied on carrier and cannot be removed\n"
57 "- Optional by Default: This option will be copied but can be removed\n"
58 "- Optional: This option can be added later by the user on the Delivery Order."),
59 'tmpl_option_id': fields.many2one(
60 'delivery.carrier.template.option',
61 string='Option', required=True, ondelete="cascade"),
62 'carrier_id': fields.many2one('delivery.carrier', 'Carrier'),
63 }
64
65
66class DeliveryCarrier(orm.Model):
67 _inherit = 'delivery.carrier'
68
69 def _get_carrier_type_selection(self, cr, uid, context=None):
70 """ To inherit to add carrier type """
71 return []
72
73 _columns = {
74 'type': fields.selection(
75 _get_carrier_type_selection, 'Type',
76 help="Carrier type (combines several delivery methods)"),
77 'code': fields.char(
78 'Code', size=10,
79 help="Delivery Method Code (according to carrier)"),
80 'description': fields.text('Description'),
81 'available_option_ids': fields.one2many(
82 'delivery.carrier.option',
83 'carrier_id', 'Option'),
84 }
085
=== added file 'base_delivery_carrier_label/delivery_view.xml'
--- base_delivery_carrier_label/delivery_view.xml 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/delivery_view.xml 2014-01-15 13:14:41 +0000
@@ -0,0 +1,88 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<openerp>
3 <data>
4
5 <!-- VIEW FOR THE OBJECT : delivery_carrier_template_option -->
6 <record id="delivery_carrier_template_option_view_form" model="ir.ui.view">
7 <field name="name">delivery_base.delivery_carrier_option.view_form</field>
8 <field name="model">delivery.carrier.template.option</field>
9 <field name="arch" type="xml">
10 <form string="delivery_carrier_option">
11 <field name="partner_id" />
12 <field name="code"/>
13 <field name="name"/>
14 </form>
15 </field>
16 </record>
17
18 <record id="delivery_carrier_template_option_view_tree" model="ir.ui.view">
19 <field name="name">delivery_base.delivery_carrier_template_option.view_tree</field>
20 <field name="model">delivery.carrier.template.option</field>
21 <field name="arch" type="xml">
22 <tree string="delivery_carrier_option">
23 <field name="partner_id" />
24 <field name="code"/>
25 <field name="name"/>
26 </tree>
27 </field>
28 </record>
29
30 <!-- VIEW FOR THE OBJECT : delivery_carrier_option -->
31 <record id="delivery_carrier_option_view_form" model="ir.ui.view">
32 <field name="name">delivery_base.delivery_carrier_option.view_form</field>
33 <field name="model">delivery.carrier.option</field>
34 <field name="arch" type="xml">
35 <form string="delivery_carrier_option">
36 <field name="state"/>
37 <field name="tmpl_option_id"/>
38 </form>
39 </field>
40 </record>
41
42 <record id="delivery_carrier_option_view_tree" model="ir.ui.view">
43 <field name="name">delivery_base.delivery_carrier_option.view_tree</field>
44 <field name="model">delivery.carrier.option</field>
45 <field name="type">tree</field>
46 <field name="arch" type="xml">
47 <tree string="delivery_carrier_option">
48 <field name="state" />
49 <field name="tmpl_option_id" />
50 <field name="code" readonly="1"/>
51 </tree>
52 </field>
53 </record>
54
55 <!-- INHERITED VIEW FOR THE OBJECT : delivery.carrier -->
56
57 <record id="view_delivery_carrier_form" model="ir.ui.view">
58 <field name="name">delivery_base.delivery.carrier.view_form</field>
59 <field name="model">delivery.carrier</field>
60 <field name="inherit_id" ref="delivery.view_delivery_carrier_form"/>
61 <field name="arch" type="xml">
62 <field name="pricelist_ids" position="after">
63 <separator string="Options" colspan="4"/>
64 <field name="available_option_ids" nolabel="1" colspan="4"/>
65 </field>
66 <field name="active" position="after">
67 <field name="type"/>
68 <field name="code"/>
69 <separator name='description' colspan="4" string="Description"/>
70 <field name="description" colspan="4" nolabel="1"/>
71 </field>
72 </field>
73 </record>
74
75 <record id="view_delivery_carrier_tree" model="ir.ui.view">
76 <field name="name">delivery_carrier_base.tree</field>
77 <field name="model">delivery.carrier</field>
78 <field name="inherit_id" ref="delivery.view_delivery_carrier_tree"/>
79 <field name="arch" type="xml">
80 <field name="name" position="after">
81 <field name="type"/>
82 <field name="code"/>
83 </field>
84 </field>
85 </record>
86
87 </data>
88</openerp>
089
=== added directory 'base_delivery_carrier_label/i18n'
=== added file 'base_delivery_carrier_label/i18n/base_delivery_carrier_label.pot'
--- base_delivery_carrier_label/i18n/base_delivery_carrier_label.pot 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/i18n/base_delivery_carrier_label.pot 2014-01-15 13:14:41 +0000
@@ -0,0 +1,212 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * base_delivery_carrier_label
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2013-12-06 13:11+0000\n"
10"PO-Revision-Date: 2013-12-06 13:11+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: base_delivery_carrier_label
19#: view:stock.picking.out:0
20msgid "Carrier Info"
21msgstr ""
22
23#. module: base_delivery_carrier_label
24#: model:ir.model,name:base_delivery_carrier_label.model_shipping_label
25msgid "Shipping Label"
26msgstr ""
27
28#. module: base_delivery_carrier_label
29#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier_option
30msgid "Delivery carrier option"
31msgstr ""
32
33#. module: base_delivery_carrier_label
34#: model:ir.model,name:base_delivery_carrier_label.model_stock_picking
35msgid "Picking List"
36msgstr ""
37
38#. module: base_delivery_carrier_label
39#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_carrier_type
40#: field:stock.picking.out,carrier_type:0
41msgid "Carrier type"
42msgstr ""
43
44#. module: base_delivery_carrier_label
45#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_shipping_label_attachment_id
46#: field:shipping.label,attachment_id:0
47msgid "Automatically created field to link to parent ir.attachment"
48msgstr ""
49
50#. module: base_delivery_carrier_label
51#: field:delivery.carrier,type:0
52#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_type
53msgid "Type"
54msgstr ""
55
56#. module: base_delivery_carrier_label
57#: help:delivery.carrier,type:0
58msgid "Carrier type (combines several delivery methods)"
59msgstr ""
60
61#. module: base_delivery_carrier_label
62#: code:addons/base_delivery_carrier_label/stock.py:143
63#, python-format
64msgid "You can not remove a mandatory option.\n"
65"Options are reset to default."
66msgstr ""
67
68#. module: base_delivery_carrier_label
69#: view:delivery.carrier:0
70#: field:delivery.carrier,description:0
71#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_description
72msgid "Description"
73msgstr ""
74
75#. module: base_delivery_carrier_label
76#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_shipping_label_file_type
77#: field:shipping.label,file_type:0
78msgid "File type"
79msgstr ""
80
81#. module: base_delivery_carrier_label
82#: view:stock.picking.out:0
83msgid "Delivery"
84msgstr ""
85
86#. module: base_delivery_carrier_label
87#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_carrier_code
88#: field:stock.picking.out,carrier_code:0
89msgid "Delivery Method Code"
90msgstr ""
91
92#. module: base_delivery_carrier_label
93#: help:delivery.carrier,code:0
94msgid "Delivery Method Code (according to carrier)"
95msgstr ""
96
97#. module: base_delivery_carrier_label
98#: selection:delivery.carrier.option,state:0
99msgid "Optional"
100msgstr ""
101
102#. module: base_delivery_carrier_label
103#: field:delivery.carrier.template.option,name:0
104#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_name
105msgid "Name"
106msgstr ""
107
108#. module: base_delivery_carrier_label
109#: code:addons/base_delivery_carrier_label/stock.py:142
110#, python-format
111msgid "User Error !"
112msgstr ""
113
114#. module: base_delivery_carrier_label
115#: view:stock.picking.out:0
116msgid "Create Label"
117msgstr ""
118
119#. module: base_delivery_carrier_label
120#: field:delivery.carrier.option,carrier_id:0
121#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier
122#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_carrier_id
123msgid "Carrier"
124msgstr ""
125
126#. module: base_delivery_carrier_label
127#: field:delivery.carrier.option,state:0
128#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_state
129msgid "Option Configuration"
130msgstr ""
131
132#. module: base_delivery_carrier_label
133#: view:delivery.carrier:0
134#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_option_ids
135#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_option_ids_4475
136#: field:stock.picking,option_ids:0
137#: view:stock.picking.out:0
138#: field:stock.picking.out,option_ids:0
139msgid "Options"
140msgstr ""
141
142#. module: base_delivery_carrier_label
143#: field:delivery.carrier,available_option_ids:0
144#: field:delivery.carrier.option,tmpl_option_id:0
145#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_available_option_ids
146#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_tmpl_option_id
147msgid "Option"
148msgstr ""
149
150#. module: base_delivery_carrier_label
151#: help:stock.picking.out,carrier_code:0
152msgid "Delivery Method Code (from carrier)"
153msgstr ""
154
155#. module: base_delivery_carrier_label
156#: field:delivery.carrier,code:0
157#: field:delivery.carrier.template.option,code:0
158#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_code
159#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_code
160msgid "Code"
161msgstr ""
162
163#. module: base_delivery_carrier_label
164#: selection:delivery.carrier.option,state:0
165msgid "Mandatory"
166msgstr ""
167
168#. module: base_delivery_carrier_label
169#: help:stock.picking.out,carrier_type:0
170msgid "Carrier type ('group')"
171msgstr ""
172
173#. module: base_delivery_carrier_label
174#: view:delivery.carrier.option:0
175#: view:delivery.carrier.template.option:0
176msgid "delivery_carrier_option"
177msgstr ""
178
179#. module: base_delivery_carrier_label
180#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier_template_option
181msgid "Delivery carrier template option"
182msgstr ""
183
184#. module: base_delivery_carrier_label
185#: help:delivery.carrier.option,state:0
186msgid "Ensure you add and define correctly all your options or those won't be available for the packager\n"
187"- Mandatory: This option will be copied on carrier and cannot be removed\n"
188"- Optional by Default: This option will be copied but can be removed\n"
189"- Optional: This option can be added later by the user on the Delivery Order."
190msgstr ""
191
192#. module: base_delivery_carrier_label
193#: field:delivery.carrier.template.option,partner_id:0
194#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_partner_id
195msgid "Partner Carrier"
196msgstr ""
197
198#. module: base_delivery_carrier_label
199#: model:ir.model,name:base_delivery_carrier_label.model_stock_picking_out
200msgid "Delivery Orders"
201msgstr ""
202
203#. module: base_delivery_carrier_label
204#: view:stock.picking.out:0
205msgid "carrier_id_change(carrier_id, context)"
206msgstr ""
207
208#. module: base_delivery_carrier_label
209#: selection:delivery.carrier.option,state:0
210msgid "Optional by Default"
211msgstr ""
212
0213
=== added file 'base_delivery_carrier_label/i18n/fr.po'
--- base_delivery_carrier_label/i18n/fr.po 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/i18n/fr.po 2014-01-15 13:14:41 +0000
@@ -0,0 +1,220 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * base_delivery_carrier_label
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2013-12-06 13:11+0000\n"
10"PO-Revision-Date: 2013-12-06 14:33+0100\n"
11"Last-Translator: Yannick Vaucher <yannick.vaucher@camptocamp.com>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"Plural-Forms: \n"
17
18#. module: base_delivery_carrier_label
19#: view:stock.picking.out:0
20msgid "Carrier Info"
21msgstr "Info transporteur"
22
23#. module: base_delivery_carrier_label
24#: model:ir.model,name:base_delivery_carrier_label.model_shipping_label
25msgid "Shipping Label"
26msgstr "Etiquette logistique"
27
28#. module: base_delivery_carrier_label
29#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier_option
30msgid "Delivery carrier option"
31msgstr ""
32
33#. module: base_delivery_carrier_label
34#: model:ir.model,name:base_delivery_carrier_label.model_stock_picking
35msgid "Picking List"
36msgstr "Liste de livraison"
37
38#. module: base_delivery_carrier_label
39#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_carrier_type
40#: field:stock.picking.out,carrier_type:0
41msgid "Carrier type"
42msgstr ""
43
44#. module: base_delivery_carrier_label
45#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_shipping_label_attachment_id
46#: field:shipping.label,attachment_id:0
47msgid "Automatically created field to link to parent ir.attachment"
48msgstr ""
49
50#. module: base_delivery_carrier_label
51#: field:delivery.carrier,type:0
52#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_type
53msgid "Type"
54msgstr "Type"
55
56#. module: base_delivery_carrier_label
57#: help:delivery.carrier,type:0
58msgid "Carrier type (combines several delivery methods)"
59msgstr ""
60
61#. module: base_delivery_carrier_label
62#: code:addons/base_delivery_carrier_label/stock.py:143
63#, python-format
64msgid ""
65"You can not remove a mandatory option.\n"
66"Options are reset to default."
67msgstr ""
68"Vous ne pouvez pas supprimer une option obligatoire.\n"
69"Les options seront réinitialisées."
70
71#. module: base_delivery_carrier_label
72#: view:delivery.carrier:0
73#: field:delivery.carrier,description:0
74#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_description
75msgid "Description"
76msgstr "Description"
77
78#. module: base_delivery_carrier_label
79#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_shipping_label_file_type
80#: field:shipping.label,file_type:0
81msgid "File type"
82msgstr "Type de fichier"
83
84#. module: base_delivery_carrier_label
85#: view:stock.picking.out:0
86msgid "Delivery"
87msgstr "Livraison"
88
89#. module: base_delivery_carrier_label
90#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_carrier_code
91#: field:stock.picking.out,carrier_code:0
92msgid "Delivery Method Code"
93msgstr "Code de méthode de livraison"
94
95#. module: base_delivery_carrier_label
96#: help:delivery.carrier,code:0
97msgid "Delivery Method Code (according to carrier)"
98msgstr "Code de méthode de livraison (en fonction du transporteur)"
99
100#. module: base_delivery_carrier_label
101#: selection:delivery.carrier.option,state:0
102msgid "Optional"
103msgstr "Optionnel"
104
105#. module: base_delivery_carrier_label
106#: field:delivery.carrier.template.option,name:0
107#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_name
108msgid "Name"
109msgstr "Nom"
110
111#. module: base_delivery_carrier_label
112#: code:addons/base_delivery_carrier_label/stock.py:142
113#, python-format
114msgid "User Error !"
115msgstr "Erreur utilisateur !"
116
117#. module: base_delivery_carrier_label
118#: view:stock.picking.out:0
119msgid "Create Label"
120msgstr "Créer un label"
121
122#. module: base_delivery_carrier_label
123#: field:delivery.carrier.option,carrier_id:0
124#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier
125#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_carrier_id
126msgid "Carrier"
127msgstr "Transporteur"
128
129#. module: base_delivery_carrier_label
130#: field:delivery.carrier.option,state:0
131#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_state
132msgid "Option Configuration"
133msgstr "Option de configuration"
134
135#. module: base_delivery_carrier_label
136#: view:delivery.carrier:0
137#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_option_ids
138#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_option_ids_4475
139#: field:stock.picking,option_ids:0
140#: view:stock.picking.out:0
141#: field:stock.picking.out,option_ids:0
142msgid "Options"
143msgstr "Options"
144
145#. module: base_delivery_carrier_label
146#: field:delivery.carrier,available_option_ids:0
147#: field:delivery.carrier.option,tmpl_option_id:0
148#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_available_option_ids
149#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_tmpl_option_id
150msgid "Option"
151msgstr "Option"
152
153#. module: base_delivery_carrier_label
154#: help:stock.picking.out,carrier_code:0
155msgid "Delivery Method Code (from carrier)"
156msgstr "Code de méthode de livraison (du transporteur)"
157
158#. module: base_delivery_carrier_label
159#: field:delivery.carrier,code:0
160#: field:delivery.carrier.template.option,code:0
161#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_code
162#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_code
163msgid "Code"
164msgstr "Code"
165
166#. module: base_delivery_carrier_label
167#: selection:delivery.carrier.option,state:0
168msgid "Mandatory"
169msgstr "Obligatoire"
170
171#. module: base_delivery_carrier_label
172#: help:stock.picking.out,carrier_type:0
173msgid "Carrier type ('group')"
174msgstr ""
175
176#. module: base_delivery_carrier_label
177#: view:delivery.carrier.option:0
178#: view:delivery.carrier.template.option:0
179msgid "delivery_carrier_option"
180msgstr ""
181
182#. module: base_delivery_carrier_label
183#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier_template_option
184msgid "Delivery carrier template option"
185msgstr "Option de méthode de livraison"
186
187#. module: base_delivery_carrier_label
188#: help:delivery.carrier.option,state:0
189msgid ""
190"Ensure you add and define correctly all your options or those won't be available for the packager\n"
191"- Mandatory: This option will be copied on carrier and cannot be removed\n"
192"- Optional by Default: This option will be copied but can be removed\n"
193"- Optional: This option can be added later by the user on the Delivery Order."
194msgstr ""
195"Assurez vous que vous avez défini correctement vos options ou celle ci ne sont pas disponible pour l'emballeur\n"
196"- Obligatoire: Cette option sera copiée sur la méthode de transport et ne peut pas être retirée\n"
197"- Optionnel par défaut: Cet option sera copiée mais peut être retirée\n"
198"- Optionnel: Cet option sera disponible pour être ajouté par l'utilisateur sur le Bon de livraison."
199
200#. module: base_delivery_carrier_label
201#: field:delivery.carrier.template.option,partner_id:0
202#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_partner_id
203msgid "Partner Carrier"
204msgstr "Partenaire transporteur"
205
206#. module: base_delivery_carrier_label
207#: model:ir.model,name:base_delivery_carrier_label.model_stock_picking_out
208msgid "Delivery Orders"
209msgstr "Bons de livraison"
210
211#. module: base_delivery_carrier_label
212#: view:stock.picking.out:0
213msgid "carrier_id_change(carrier_id, context)"
214msgstr ""
215
216#. module: base_delivery_carrier_label
217#: selection:delivery.carrier.option,state:0
218msgid "Optional by Default"
219msgstr "Optionnel par défaut"
220
0221
=== added file 'base_delivery_carrier_label/reports.xml'
--- base_delivery_carrier_label/reports.xml 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/reports.xml 2014-01-15 13:14:41 +0000
@@ -0,0 +1,15 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4 <report
5 auto="False"
6 id="delivery.shipping_label"
7 model="stock.picking"
8 name="delivery.shipping.label"
9 file="base_delivery_carrier_label/report/template/shipping_label.mako"
10 string="Shipping Label"
11 attachment_use="1"
12 multi="False"
13 report_type="webkit"/>
14 </data>
15</openerp>
016
=== added directory 'base_delivery_carrier_label/security'
=== added file 'base_delivery_carrier_label/security/ir.model.access.csv'
--- base_delivery_carrier_label/security/ir.model.access.csv 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/security/ir.model.access.csv 2014-01-15 13:14:41 +0000
@@ -0,0 +1,7 @@
1id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2access_delivery_carrier_option_salesman,delivery.carrier.option.salesman,model_delivery_carrier_option,base.group_sale_salesman,1,0,0,0
3access_delivery_carrier_option_sale_manager,delivery.carrier.option.sale.manager,model_delivery_carrier_option,base.group_sale_manager,1,1,1,1
4access_delivery_carrier_template_option_salesman,delivery.carrier.relation.option.salesman,model_delivery_carrier_template_option,base.group_sale_salesman,1,0,0,0
5access_delivery_carrier_template_option_sales_manager,delivery.carrier.relation.option.sale.manager,model_delivery_carrier_template_option,base.group_sale_manager,1,1,1,1
6access_shipping_label_user,shipping.label user,model_shipping_label,stock.group_stock_user,1,1,1,0
7access_shipping_label_manager,shipping.label manager,model_shipping_label,stock.group_stock_manager,1,1,1,1
08
=== added file 'base_delivery_carrier_label/stock.py'
--- base_delivery_carrier_label/stock.py 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/stock.py 2014-01-15 13:14:41 +0000
@@ -0,0 +1,295 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Authors: David BEAL <david.beal@akretion.com>
5# Sébastien BEAU <sebastien.beau@akretion.com>
6# Copyright (C) 2012-TODAY Akretion <http://www.akretion.com>.
7# Author: Yannick Vaucher <yannick.vaucher@camptocamp.com>
8# Copyright 2013 Camptocamp SA
9#
10# This program is free software: you can redistribute it and/or modify
11# it under the terms of the GNU Affero General Public License as
12# published by the Free Software Foundation, either version 3 of the
13# License, or (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU Affero General Public License for more details.
19#
20# You should have received a copy of the GNU Affero General Public License
21# along with this program. If not, see <http://www.gnu.org/licenses/>.
22#
23##############################################################################
24from openerp.osv import orm, fields
25from openerp.tools.translate import _
26
27
28class stock_picking(orm.Model):
29 _inherit = 'stock.picking'
30
31 def _get_carrier_type_selection(self, cr, uid, context=None):
32 carrier_obj = self.pool.get('delivery.carrier')
33 return carrier_obj._get_carrier_type_selection(cr, uid, context=context)
34
35 _columns = {
36 'carrier_id': fields.many2one(
37 'delivery.carrier', 'Carrier',
38 states={'done': [('readonly', True)]}),
39 'carrier_type': fields.related(
40 'carrier_id', 'type',
41 string='Carrier type',
42 readonly=True,
43 type='selection',
44 selection=_get_carrier_type_selection,
45 help="Carrier type ('group')"),
46 'carrier_code': fields.related(
47 'carrier_id', 'code',
48 string='Delivery Method Code',
49 readonly=True,
50 type='char',
51 help="Delivery Method Code (from carrier)"),
52 'option_ids': fields.many2many('delivery.carrier.option',
53 string='Options'),
54 }
55
56 def generate_default_label(self, cr, uid, ids, context=None):
57 """ Abstract method
58
59 :return: (file_binary, file_type)
60
61 """
62 raise orm.except_orm(
63 'Error',
64 'No label is configured for selected delivery method.')
65
66 def generate_shipping_labels(self, cr, uid, ids, context=None):
67 """Generate a shipping label by default
68
69 This method can be inherited to create specific shipping labels
70 a list of label must be return as we can have multiple
71 stock.tracking for a single picking representing packs
72
73 :return: list of dict containing
74 name: name to give to the attachement
75 file: file as string
76 file_type: string of file type like 'PDF'
77 (optional)
78 tracking_id: tracking_id if picking lines have tracking_id and
79 if label generator creates shipping label per
80 pack
81
82 """
83 return [self.generate_default_label(cr, uid, ids, context=None)]
84
85 def action_generate_carrier_label(self, cr, uid, ids, context=None):
86 shipping_label_obj = self.pool.get('shipping.label')
87
88 pickings = self.browse(cr, uid, ids, context=context)
89
90 for pick in pickings:
91 shipping_labels = pick.generate_shipping_labels()
92 for label in shipping_labels:
93 # map types with models
94 types = {'in': 'stock.picking.in',
95 'out': 'stock.picking.out',
96 'internal': 'stock.picking',
97 }
98 res_model = types[pick.type]
99 data = {
100 'name': label['name'],
101 'res_id': pick.id,
102 'res_model': res_model,
103 'datas': label['file'].encode('base64'),
104 'file_type': label['file_type'],
105 }
106 if label.get('tracking_id'):
107 data['tracking_id'] = label['tracking_id']
108 context_attachment = context.copy()
109 # remove default_type setted for stock_picking
110 # as it would try to define default value of attachement
111 if 'default_type' in context_attachment:
112 del context_attachment['default_type']
113 shipping_label_obj.create(cr, uid, data, context=context_attachment)
114 return True
115
116 def carrier_id_change(self, cr, uid, ids, carrier_id, context=None):
117 """ Inherit this method in your module """
118 carrier_obj = self.pool.get('delivery.carrier')
119 res = {}
120 if carrier_id:
121 carrier = carrier_obj.browse(cr, uid, carrier_id, context=context)
122 # This can look useless as the field carrier_code and
123 # carrier_type are related field. But it's needed to fill
124 # this field for using this fields in the view. Indeed the
125 # module that depend of delivery base can hide some field
126 # depending of the type or the code
127
128 default_option_ids = []
129 available_option_ids = []
130 for available_option in carrier.available_option_ids:
131 available_option_ids.append(available_option.id)
132 if available_option.state in ['default_option', 'mandatory']:
133 default_option_ids.append(available_option.id)
134 res = {
135 'value': {'carrier_type': carrier.type,
136 'carrier_code': carrier.code,
137 'option_ids': default_option_ids,
138 },
139 'domain': {'option_ids': [('id', 'in', available_option_ids)],
140 },
141 }
142 return res
143
144 def option_ids_change(self, cr, uid, ids, option_ids, carrier_id, context=None):
145 carrier_obj = self.pool.get('delivery.carrier')
146 res = {}
147 if not carrier_id:
148 return res
149 carrier = carrier_obj.browse(cr, uid, carrier_id, context=context)
150 for available_option in carrier.available_option_ids:
151 if (available_option.state == 'mandatory'
152 and not available_option.id in option_ids[0][2]):
153 res['warning'] = {
154 'title': _('User Error !'),
155 'message': _("You can not remove a mandatory option."
156 "\nOptions are reset to default.")
157 }
158 default_value = self.carrier_id_change(cr, uid, ids,
159 carrier_id,
160 context=context)
161 res.update(default_value)
162 return res
163
164 def create(self, cr, uid, values, context=None):
165 """ Trigger carrier_id_change on create
166
167 To ensure options are setted on the basis of carrier_id copied from
168 Sale order or defined by default.
169
170 """
171 carrier_id = values.get('carrier_id')
172 if carrier_id:
173 picking_obj = self.pool.get('stock.picking')
174 res = picking_obj.carrier_id_change(cr, uid, [], carrier_id,
175 context=context)
176 option_ids = res.get('value', {}).get('option_ids')
177 if option_ids:
178 values.update(option_ids=[(6, 0, option_ids)])
179 picking_id = super(stock_picking, self
180 ).create(cr, uid, values, context=context)
181 return picking_id
182
183
184class stock_picking_in(orm.Model):
185 """ Add what isn't inherited from stock.picking """
186 _inherit = 'stock.picking.in'
187
188 def _get_carrier_type_selection(self, cr, uid, context=None):
189 carrier_obj = self.pool.get('delivery.carrier')
190 return carrier_obj._get_carrier_type_selection(cr, uid, context=context)
191
192 _columns = {
193 'carrier_id': fields.many2one(
194 'delivery.carrier', 'Carrier',
195 states={'done': [('readonly', True)]}),
196 'carrier_type': fields.related(
197 'carrier_id', 'type',
198 string='Carrier type',
199 readonly=True,
200 type='selection',
201 selection=_get_carrier_type_selection,
202 help="Carrier type ('group')"),
203 'carrier_code': fields.related(
204 'carrier_id', 'code',
205 string='Delivery Method Code',
206 readonly=True,
207 type='char',
208 help="Delivery Method Code (from carrier)"),
209 'option_ids': fields.many2many('delivery.carrier.option',
210 string='Options'),
211 }
212
213 def action_generate_carrier_label(self, cr, uid, ids, context=None):
214 picking_obj = self.pool.get('stock.picking')
215 return picking_obj.action_generate_carrier_label(cr, uid, ids,
216 context=context)
217
218 def carrier_id_change(self, cr, uid, ids, carrier_id, context=None):
219 """ Call stock.picking carrier_id_change """
220 picking_obj = self.pool.get('stock.picking')
221 return picking_obj.carrier_id_change(cr, uid, ids,
222 carrier_id, context=context)
223
224 def option_ids_change(self, cr, uid, ids,
225 option_ids, carrier_id, context=None):
226 """ Call stock.picking option_ids_change """
227 picking_obj = self.pool.get('stock.picking')
228 return picking_obj.option_ids_change(cr, uid, ids,
229 option_ids, carrier_id,
230 context=context)
231
232
233class stock_picking_out(orm.Model):
234 """ Add what isn't inherited from stock.picking """
235 _inherit = 'stock.picking.out'
236
237 def _get_carrier_type_selection(self, cr, uid, context=None):
238 carrier_obj = self.pool.get('delivery.carrier')
239 return carrier_obj._get_carrier_type_selection(cr, uid, context=context)
240
241 _columns = {
242 'carrier_id': fields.many2one(
243 'delivery.carrier', 'Carrier',
244 states={'done': [('readonly', True)]}),
245 'carrier_type': fields.related(
246 'carrier_id', 'type',
247 string='Carrier type',
248 readonly=True,
249 type='selection',
250 selection=_get_carrier_type_selection,
251 help="Carrier type ('group')"),
252 'carrier_code': fields.related(
253 'carrier_id', 'code',
254 string='Delivery Method Code',
255 readonly=True,
256 type='char',
257 help="Delivery Method Code (from carrier)"),
258 'option_ids': fields.many2many('delivery.carrier.option',
259 string='Options'),
260 }
261
262 def action_generate_carrier_label(self, cr, uid, ids, context=None):
263 picking_obj = self.pool.get('stock.picking')
264 return picking_obj.action_generate_carrier_label(cr, uid, ids,
265 context=context)
266
267 def carrier_id_change(self, cr, uid, ids, carrier_id, context=None):
268 """ Inherit this method in your module """
269 picking_obj = self.pool.get('stock.picking')
270 return picking_obj.carrier_id_change(cr, uid, ids, carrier_id, context=context)
271
272 def option_ids_change(self, cr, uid, ids, option_ids, carrier_id, context=None):
273 picking_obj = self.pool.get('stock.picking')
274 return picking_obj.option_ids_change(cr, uid, ids,
275 option_ids, carrier_id,
276 context=context)
277
278
279class ShippingLabel(orm.Model):
280 """ Child class of ir attachment to identify which are labels """
281 _inherits = {'ir.attachment': 'attachment_id'}
282 _name = 'shipping.label'
283 _description = "Shipping Label"
284
285 def _get_file_type_selection(self, cr, uid, context=None):
286 return [('pdf', 'PDF')]
287
288 _columns = {
289 'file_type': fields.selection(_get_file_type_selection, 'File type'),
290 'tracking_id': fields.many2one('stock.tracking', 'Pack'),
291 }
292
293 _defaults = {
294 'file_type': 'pdf'
295 }
0296
=== added file 'base_delivery_carrier_label/stock_view.xml'
--- base_delivery_carrier_label/stock_view.xml 1970-01-01 00:00:00 +0000
+++ base_delivery_carrier_label/stock_view.xml 2014-01-15 13:14:41 +0000
@@ -0,0 +1,55 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<openerp>
3 <data>
4 <!-- From DELIVERY module on STOCK.PICKING -->
5 <!-- FORM -->
6 <record id="view_picking_out_form" model="ir.ui.view">
7 <field name="name">delivery.stock.picking.out.form</field>
8 <field name="model">stock.picking.out</field>
9 <field name="inherit_id" ref="delivery.view_picking_withcarrier_out_form"/>
10 <field name="arch" type="xml">
11 <field name="state" position="before">
12 <button name="action_generate_carrier_label" states="assigned,confirmed,draft" string="Create Shipping Label" type="object"/>
13 </field>
14 <field name="carrier_id" position="attributes">
15 <attribute name="on_change">carrier_id_change(carrier_id, context)</attribute>
16 </field>
17 <notebook position='inside'>
18 <page name="carrier" string="Carrier Info">
19 <separator string="Delivery"/>
20 <field name="carrier_type"/>
21 <field name="carrier_code"/>
22 <separator string="Options"/>
23 <field name="option_ids" nolabel="1"
24 on_change="option_ids_change(option_ids, carrier_id, context)"/>
25 </page>
26 </notebook>
27 </field>
28 </record>
29
30 <!-- From DELIVERY module on STOCK.PICKING -->
31 <!-- FORM -->
32 <record id="view_picking_in_form" model="ir.ui.view">
33 <field name="name">delivery.stock.picking.in.form</field>
34 <field name="model">stock.picking.in</field>
35 <field name="inherit_id" ref="delivery.view_picking_withcarrier_in_form"/>
36 <field name="arch" type="xml">
37 <field name="state" position="before">
38 <button name="action_generate_carrier_label" states="assigned,confirmed,draft" string="Create Return Label" type="object"/>
39 </field>
40 <notebook position='inside'>
41 <page name="carrier" string="Carrier Info">
42 <separator string="Delivery"/>
43 <field name="carrier_id" on_change="carrier_id_change(carrier_id, context)"/>
44 <field name="carrier_type"/>
45 <field name="carrier_code"/>
46 <separator string="Options"/>
47 <field name="option_ids" nolabel="1"
48 on_change="option_ids_change(option_ids, carrier_id, context)"/>
49 </page>
50 </notebook>
51 </field>
52 </record>
53
54 </data>
55</openerp>

Subscribers

People subscribed via source and target branches