← Back to team overview

openerp-community-reviewer team mailing list archive

lp:~camptocamp/carriers-deliveries/7.0-add-base_delivery_carrier_label-yvr into lp:carriers-deliveries

 

Yannick Vaucher @ Camptocamp has proposed merging lp:~camptocamp/carriers-deliveries/7.0-add-base_delivery_carrier_label-yvr into lp:carriers-deliveries.

Commit message:
Port of delivery_base and deliver_shipping_label removing direct print logic

Requested reviews:
  Guewen Baconnier @ Camptocamp (gbaconnier-c2c): code review, test
  Joël Grand-Guillaume @ camptocamp (jgrandguillaume-c2c): code review, no tests

For more details, see:
https://code.launchpad.net/~camptocamp/carriers-deliveries/7.0-add-base_delivery_carrier_label-yvr/+merge/196753


-- 
https://code.launchpad.net/~camptocamp/carriers-deliveries/7.0-add-base_delivery_carrier_label-yvr/+merge/196753
Your team Stock and Logistic Core Editors is subscribed to branch lp:carriers-deliveries.
=== 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 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Author: Yannick Vaucher
+#    Copyright 2013 Camptocamp SA
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+from . import delivery
+from . import stock

=== 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 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Author: Yannick Vaucher
+#    Copyright 2013 Camptocamp SA
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+{'name': 'Base module for carrier labels',
+ 'version': '1.0',
+ 'author': 'Camptocamp,Akretion',
+ 'maintainer': 'Camptocamp',
+ 'category': 'version',
+ 'complexity': 'normal',
+ 'depends': ['stock', 'delivery'],
+ 'description': """
+Base module for carrier labels
+==============================
+
+This module adds a button on delivery orders to generate a label as an
+attachement.
+
+.. tip::
+   It doesn't implement a label. To add a default label, you can install
+   the module `delivery_carrier_label_default_webkit`
+
+It can be used to print specific labels per carrier.
+
+.. note::
+   Inspired by Akretion module delivery_base and delivery_shipping_label
+
+Contributors
+------------
+
+* David BEAL <david.beal@xxxxxxxxxxxx>
+* Sébastien BEAU <sebastien.beau@xxxxxxxxxxxx>
+* Yannick Vaucher <yannick.vaucher@xxxxxxxxxxxxxx>
+
+ """,
+ 'website': 'http://www.camptocamp.com/',
+ 'data': ['delivery_view.xml',
+          'stock_view.xml',
+          'security/ir.model.access.csv',
+          ],
+ 'tests': [],
+ 'installable': True,
+ 'auto_install': False,
+ 'license': 'AGPL-3',
+ 'application': True,
+}

=== 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 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Author: Sébastien BEAU <sebastien.beau@xxxxxxxxxxxx>
+#    Copyright (C) 2012-TODAY Akretion <http://www.akretion.com>.
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+from openerp.osv import orm, fields
+
+
+class DeliveryCarrierTemplateOption(orm.Model):
+    """ Available options for a carrier (partner) """
+    _name = 'delivery.carrier.template.option'
+    _description = 'Delivery carrier template option'
+
+    _columns = {
+        'partner_id': fields.many2one('res.partner', 'Partner Carrier'),
+        'name': fields.char('Name', size=64),
+        'code': fields.char('Code', size=64),
+    }
+
+
+class DeliveryCarrierOption(orm.Model):
+    """ Option selected for a carrier method
+
+    Those options define the list of available pre-added and available
+    to be added on delivery orders
+
+    """
+    _name = 'delivery.carrier.option'
+    _description = 'Delivery carrier option'
+    _inherits = {'delivery.carrier.template.option': 'tmpl_option_id'}
+
+    _columns = {
+        'state': fields.selection(
+            (('mandatory', 'Mandatory'),
+             ('default_option', 'Optional by Default'),
+             ('option', 'Optional'),
+             ),
+            string='Option Configuration',
+            help="Ensure you add and define correctly all your options or those won't "
+                 "be available for the packager\n"
+                 "- Mandatory: This option will be copied on carrier and cannot be removed\n"
+                 "- Optional by Default: This option will be copied but can be removed\n"
+                 "- Optional: This option can be added later by the user on the Delivery Order."),
+        'tmpl_option_id': fields.many2one(
+            'delivery.carrier.template.option',
+            string='Option', required=True, ondelete="cascade"),
+        'carrier_id': fields.many2one('delivery.carrier', 'Carrier'),
+    }
+
+
+class DeliveryCarrier(orm.Model):
+    _inherit = 'delivery.carrier'
+
+    def _get_carrier_type_selection(self, cr, uid, context=None):
+        """ To inherit to add carrier type """
+        return []
+
+    _columns = {
+        'type': fields.selection(
+            _get_carrier_type_selection, 'Type',
+            help="Carrier type (combines several delivery methods)"),
+        'code': fields.char(
+            'Code', size=10,
+            help="Delivery Method Code (according to carrier)"),
+        'description': fields.text('Description'),
+        'available_option_ids': fields.one2many(
+            'delivery.carrier.option',
+            'carrier_id', 'Option'),
+    }

=== 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+  <data>
+
+    <!-- VIEW FOR THE OBJECT : delivery_carrier_template_option -->
+    <record id="delivery_carrier_template_option_view_form" model="ir.ui.view">
+      <field name="name">delivery_base.delivery_carrier_option.view_form</field>
+      <field name="model">delivery.carrier.template.option</field>
+      <field name="arch" type="xml">
+        <form string="delivery_carrier_option">
+          <field name="partner_id" />
+          <field name="code"/>
+          <field name="name"/>
+        </form>
+      </field>
+    </record>
+
+    <record id="delivery_carrier_template_option_view_tree" model="ir.ui.view">
+      <field name="name">delivery_base.delivery_carrier_template_option.view_tree</field>
+      <field name="model">delivery.carrier.template.option</field>
+      <field name="arch" type="xml">
+        <tree string="delivery_carrier_option">
+          <field name="partner_id" />
+          <field name="code"/>
+          <field name="name"/>
+        </tree>
+      </field>
+    </record>
+
+    <!-- VIEW FOR THE OBJECT : delivery_carrier_option -->
+    <record id="delivery_carrier_option_view_form" model="ir.ui.view">
+      <field name="name">delivery_base.delivery_carrier_option.view_form</field>
+      <field name="model">delivery.carrier.option</field>
+      <field name="arch" type="xml">
+        <form string="delivery_carrier_option">
+          <field name="state"/>
+          <field name="tmpl_option_id"/>
+        </form>
+      </field>
+    </record>
+
+    <record id="delivery_carrier_option_view_tree" model="ir.ui.view">
+      <field name="name">delivery_base.delivery_carrier_option.view_tree</field>
+      <field name="model">delivery.carrier.option</field>
+      <field name="type">tree</field>
+      <field name="arch" type="xml">
+        <tree string="delivery_carrier_option">
+          <field name="state" />
+          <field name="tmpl_option_id" />
+          <field name="code" readonly="1"/>
+        </tree>
+      </field>
+    </record>
+
+    <!-- INHERITED VIEW FOR THE OBJECT : delivery.carrier -->
+
+    <record id="view_delivery_carrier_form" model="ir.ui.view">
+      <field name="name">delivery_base.delivery.carrier.view_form</field>
+      <field name="model">delivery.carrier</field>
+      <field name="inherit_id" ref="delivery.view_delivery_carrier_form"/>
+      <field name="arch" type="xml">
+        <field name="pricelist_ids" position="after">
+          <separator string="Options" colspan="4"/>
+          <field name="available_option_ids" nolabel="1" colspan="4"/>
+        </field>
+        <field name="active" position="after">
+          <field name="type"/>
+          <field name="code"/>
+          <separator name='description' colspan="4" string="Description"/>
+          <field name="description" colspan="4" nolabel="1"/>
+        </field>
+      </field>
+    </record>
+
+    <record id="view_delivery_carrier_tree" model="ir.ui.view">
+      <field name="name">delivery_carrier_base.tree</field>
+      <field name="model">delivery.carrier</field>
+      <field name="inherit_id" ref="delivery.view_delivery_carrier_tree"/>
+      <field name="arch" type="xml">
+        <field name="name" position="after">
+          <field name="type"/>
+          <field name="code"/>
+        </field>
+      </field>
+    </record>
+
+  </data>
+</openerp>

=== 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 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* base_delivery_carrier_label
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-12-06 13:11+0000\n"
+"PO-Revision-Date: 2013-12-06 13:11+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: base_delivery_carrier_label
+#: view:stock.picking.out:0
+msgid "Carrier Info"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_shipping_label
+msgid "Shipping Label"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier_option
+msgid "Delivery carrier option"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_stock_picking
+msgid "Picking List"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_carrier_type
+#: field:stock.picking.out,carrier_type:0
+msgid "Carrier type"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_shipping_label_attachment_id
+#: field:shipping.label,attachment_id:0
+msgid "Automatically created field to link to parent ir.attachment"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier,type:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_type
+msgid "Type"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: help:delivery.carrier,type:0
+msgid "Carrier type (combines several delivery methods)"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: code:addons/base_delivery_carrier_label/stock.py:143
+#, python-format
+msgid "You can not remove a mandatory option.\n"
+"Options are reset to default."
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: view:delivery.carrier:0
+#: field:delivery.carrier,description:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_description
+msgid "Description"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_shipping_label_file_type
+#: field:shipping.label,file_type:0
+msgid "File type"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: view:stock.picking.out:0
+msgid "Delivery"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_carrier_code
+#: field:stock.picking.out,carrier_code:0
+msgid "Delivery Method Code"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: help:delivery.carrier,code:0
+msgid "Delivery Method Code (according to carrier)"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: selection:delivery.carrier.option,state:0
+msgid "Optional"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier.template.option,name:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_name
+msgid "Name"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: code:addons/base_delivery_carrier_label/stock.py:142
+#, python-format
+msgid "User Error !"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: view:stock.picking.out:0
+msgid "Create Label"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier.option,carrier_id:0
+#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_carrier_id
+msgid "Carrier"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier.option,state:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_state
+msgid "Option Configuration"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: view:delivery.carrier:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_option_ids
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_option_ids_4475
+#: field:stock.picking,option_ids:0
+#: view:stock.picking.out:0
+#: field:stock.picking.out,option_ids:0
+msgid "Options"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier,available_option_ids:0
+#: field:delivery.carrier.option,tmpl_option_id:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_available_option_ids
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_tmpl_option_id
+msgid "Option"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: help:stock.picking.out,carrier_code:0
+msgid "Delivery Method Code (from carrier)"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier,code:0
+#: field:delivery.carrier.template.option,code:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_code
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_code
+msgid "Code"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: selection:delivery.carrier.option,state:0
+msgid "Mandatory"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: help:stock.picking.out,carrier_type:0
+msgid "Carrier type ('group')"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: view:delivery.carrier.option:0
+#: view:delivery.carrier.template.option:0
+msgid "delivery_carrier_option"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier_template_option
+msgid "Delivery carrier template option"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: help:delivery.carrier.option,state:0
+msgid "Ensure you add and define correctly all your options or those won't be available for the packager\n"
+"- Mandatory: This option will be copied on carrier and cannot be removed\n"
+"- Optional by Default: This option will be copied but can be removed\n"
+"- Optional: This option can be added later by the user on the Delivery Order."
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier.template.option,partner_id:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_partner_id
+msgid "Partner Carrier"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_stock_picking_out
+msgid "Delivery Orders"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: view:stock.picking.out:0
+msgid "carrier_id_change(carrier_id, context)"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: selection:delivery.carrier.option,state:0
+msgid "Optional by Default"
+msgstr ""
+

=== 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 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* base_delivery_carrier_label
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-12-06 13:11+0000\n"
+"PO-Revision-Date: 2013-12-06 14:33+0100\n"
+"Last-Translator: Yannick Vaucher <yannick.vaucher@xxxxxxxxxxxxxx>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+
+#. module: base_delivery_carrier_label
+#: view:stock.picking.out:0
+msgid "Carrier Info"
+msgstr "Info transporteur"
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_shipping_label
+msgid "Shipping Label"
+msgstr "Etiquette logistique"
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier_option
+msgid "Delivery carrier option"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_stock_picking
+msgid "Picking List"
+msgstr "Liste de livraison"
+
+#. module: base_delivery_carrier_label
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_carrier_type
+#: field:stock.picking.out,carrier_type:0
+msgid "Carrier type"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_shipping_label_attachment_id
+#: field:shipping.label,attachment_id:0
+msgid "Automatically created field to link to parent ir.attachment"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier,type:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_type
+msgid "Type"
+msgstr "Type"
+
+#. module: base_delivery_carrier_label
+#: help:delivery.carrier,type:0
+msgid "Carrier type (combines several delivery methods)"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: code:addons/base_delivery_carrier_label/stock.py:143
+#, python-format
+msgid ""
+"You can not remove a mandatory option.\n"
+"Options are reset to default."
+msgstr ""
+"Vous ne pouvez pas supprimer une option obligatoire.\n"
+"Les options seront réinitialisées."
+
+#. module: base_delivery_carrier_label
+#: view:delivery.carrier:0
+#: field:delivery.carrier,description:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_description
+msgid "Description"
+msgstr "Description"
+
+#. module: base_delivery_carrier_label
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_shipping_label_file_type
+#: field:shipping.label,file_type:0
+msgid "File type"
+msgstr "Type de fichier"
+
+#. module: base_delivery_carrier_label
+#: view:stock.picking.out:0
+msgid "Delivery"
+msgstr "Livraison"
+
+#. module: base_delivery_carrier_label
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_carrier_code
+#: field:stock.picking.out,carrier_code:0
+msgid "Delivery Method Code"
+msgstr "Code de méthode de livraison"
+
+#. module: base_delivery_carrier_label
+#: help:delivery.carrier,code:0
+msgid "Delivery Method Code (according to carrier)"
+msgstr "Code de méthode de livraison (en fonction du transporteur)"
+
+#. module: base_delivery_carrier_label
+#: selection:delivery.carrier.option,state:0
+msgid "Optional"
+msgstr "Optionnel"
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier.template.option,name:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_name
+msgid "Name"
+msgstr "Nom"
+
+#. module: base_delivery_carrier_label
+#: code:addons/base_delivery_carrier_label/stock.py:142
+#, python-format
+msgid "User Error !"
+msgstr "Erreur utilisateur !"
+
+#. module: base_delivery_carrier_label
+#: view:stock.picking.out:0
+msgid "Create Label"
+msgstr "Créer un label"
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier.option,carrier_id:0
+#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_carrier_id
+msgid "Carrier"
+msgstr "Transporteur"
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier.option,state:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_state
+msgid "Option Configuration"
+msgstr "Option de configuration"
+
+#. module: base_delivery_carrier_label
+#: view:delivery.carrier:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_option_ids
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_stock_picking_option_ids_4475
+#: field:stock.picking,option_ids:0
+#: view:stock.picking.out:0
+#: field:stock.picking.out,option_ids:0
+msgid "Options"
+msgstr "Options"
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier,available_option_ids:0
+#: field:delivery.carrier.option,tmpl_option_id:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_available_option_ids
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_option_tmpl_option_id
+msgid "Option"
+msgstr "Option"
+
+#. module: base_delivery_carrier_label
+#: help:stock.picking.out,carrier_code:0
+msgid "Delivery Method Code (from carrier)"
+msgstr "Code de méthode de livraison (du transporteur)"
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier,code:0
+#: field:delivery.carrier.template.option,code:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_code
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_code
+msgid "Code"
+msgstr "Code"
+
+#. module: base_delivery_carrier_label
+#: selection:delivery.carrier.option,state:0
+msgid "Mandatory"
+msgstr "Obligatoire"
+
+#. module: base_delivery_carrier_label
+#: help:stock.picking.out,carrier_type:0
+msgid "Carrier type ('group')"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: view:delivery.carrier.option:0
+#: view:delivery.carrier.template.option:0
+msgid "delivery_carrier_option"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_delivery_carrier_template_option
+msgid "Delivery carrier template option"
+msgstr "Option de méthode de livraison"
+
+#. module: base_delivery_carrier_label
+#: help:delivery.carrier.option,state:0
+msgid ""
+"Ensure you add and define correctly all your options or those won't be available for the packager\n"
+"- Mandatory: This option will be copied on carrier and cannot be removed\n"
+"- Optional by Default: This option will be copied but can be removed\n"
+"- Optional: This option can be added later by the user on the Delivery Order."
+msgstr ""
+"Assurez vous que vous avez défini correctement vos options ou celle ci ne sont pas disponible pour l'emballeur\n"
+"- Obligatoire: Cette option sera copiée sur la méthode de transport et ne peut pas être retirée\n"
+"- Optionnel par défaut: Cet option sera copiée mais peut être retirée\n"
+"- Optionnel: Cet option sera disponible pour être ajouté par l'utilisateur sur le Bon de livraison."
+
+#. module: base_delivery_carrier_label
+#: field:delivery.carrier.template.option,partner_id:0
+#: model:ir.model.fields,field_description:base_delivery_carrier_label.field_delivery_carrier_template_option_partner_id
+msgid "Partner Carrier"
+msgstr "Partenaire transporteur"
+
+#. module: base_delivery_carrier_label
+#: model:ir.model,name:base_delivery_carrier_label.model_stock_picking_out
+msgid "Delivery Orders"
+msgstr "Bons de livraison"
+
+#. module: base_delivery_carrier_label
+#: view:stock.picking.out:0
+msgid "carrier_id_change(carrier_id, context)"
+msgstr ""
+
+#. module: base_delivery_carrier_label
+#: selection:delivery.carrier.option,state:0
+msgid "Optional by Default"
+msgstr "Optionnel par défaut"
+

=== 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+  <data>
+    <report
+      auto="False"
+      id="delivery.shipping_label"
+      model="stock.picking"
+      name="delivery.shipping.label"
+      file="base_delivery_carrier_label/report/template/shipping_label.mako"
+      string="Shipping Label"
+      attachment_use="1"
+      multi="False"
+      report_type="webkit"/>
+  </data>
+</openerp>

=== 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 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_delivery_carrier_option_salesman,delivery.carrier.option.salesman,model_delivery_carrier_option,base.group_sale_salesman,1,0,0,0
+access_delivery_carrier_option_sale_manager,delivery.carrier.option.sale.manager,model_delivery_carrier_option,base.group_sale_manager,1,1,1,1
+access_delivery_carrier_template_option_salesman,delivery.carrier.relation.option.salesman,model_delivery_carrier_template_option,base.group_sale_salesman,1,0,0,0
+access_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
+access_shipping_label_user,shipping.label user,model_shipping_label,stock.group_stock_user,1,1,1,0
+access_shipping_label_manager,shipping.label manager,model_shipping_label,stock.group_stock_manager,1,1,1,1

=== 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 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Authors: David BEAL <david.beal@xxxxxxxxxxxx>
+#             Sébastien BEAU <sebastien.beau@xxxxxxxxxxxx>
+#    Copyright (C) 2012-TODAY Akretion <http://www.akretion.com>.
+#    Author: Yannick Vaucher <yannick.vaucher@xxxxxxxxxxxxxx>
+#    Copyright 2013 Camptocamp SA
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+from openerp.osv import orm, fields
+from openerp.tools.translate import _
+
+
+class stock_picking(orm.Model):
+    _inherit = 'stock.picking'
+
+    def _get_carrier_type_selection(self, cr, uid, context=None):
+        carrier_obj = self.pool.get('delivery.carrier')
+        return carrier_obj._get_carrier_type_selection(cr, uid, context=context)
+
+    _columns = {
+        'carrier_id': fields.many2one(
+            'delivery.carrier', 'Carrier',
+            states={'done': [('readonly', True)]}),
+        'carrier_type': fields.related(
+            'carrier_id', 'type',
+            string='Carrier type',
+            readonly=True,
+            type='selection',
+            selection=_get_carrier_type_selection,
+            help="Carrier type ('group')"),
+        'carrier_code': fields.related(
+            'carrier_id', 'code',
+            string='Delivery Method Code',
+            readonly=True,
+            type='char',
+            help="Delivery Method Code (from carrier)"),
+        'option_ids': fields.many2many('delivery.carrier.option',
+                                       string='Options'),
+    }
+
+    def generate_default_label(self, cr, uid, ids, context=None):
+        """ Abstract method
+
+        :return: (file_binary, file_type)
+
+        """
+        raise orm.except_orm(
+                'Error',
+                'No label is configured for selected delivery method.')
+
+    def generate_shipping_labels(self, cr, uid, ids, context=None):
+        """Generate a shipping label by default
+
+        This method can be inherited to create specific shipping labels
+        a list of label must be return as we can have multiple
+        stock.tracking for a single picking representing packs
+
+        :return: list of dict containing
+           name: name to give to the attachement
+           file: file as string
+           file_type: string of file type like 'PDF'
+           (optional)
+           tracking_id: tracking_id if picking lines have tracking_id and
+                        if label generator creates shipping label per
+                        pack
+
+        """
+        return [self.generate_default_label(cr, uid, ids, context=None)]
+
+    def action_generate_carrier_label(self, cr, uid, ids, context=None):
+        shipping_label_obj = self.pool.get('shipping.label')
+
+        pickings = self.browse(cr, uid, ids, context=context)
+
+        for pick in pickings:
+            shipping_labels = pick.generate_shipping_labels()
+            for label in shipping_labels:
+                # map types with models
+                types = {'in': 'stock.picking.in',
+                         'out': 'stock.picking.out',
+                         'internal': 'stock.picking',
+                         }
+                res_model = types[pick.type]
+                data = {
+                    'name': label['name'],
+                    'res_id': pick.id,
+                    'res_model': res_model,
+                    'datas': label['file'].encode('base64'),
+                    'file_type': label['file_type'],
+                }
+                if label.get('tracking_id'):
+                    data['tracking_id'] = label['tracking_id']
+                context_attachment = context.copy()
+                # remove default_type setted for stock_picking
+                # as it would try to define default value of attachement
+                if 'default_type' in context_attachment:
+                    del context_attachment['default_type']
+                shipping_label_obj.create(cr, uid, data, context=context_attachment)
+        return True
+
+    def carrier_id_change(self, cr, uid, ids, carrier_id, context=None):
+        """ Inherit this method in your module """
+        carrier_obj = self.pool.get('delivery.carrier')
+        res = {}
+        if carrier_id:
+            carrier = carrier_obj.browse(cr, uid, carrier_id, context=context)
+            # This can look useless as the field carrier_code and
+            # carrier_type are related field. But it's needed to fill
+            # this field for using this fields in the view. Indeed the
+            # module that depend of delivery base can hide some field
+            # depending of the type or the code
+
+            default_option_ids = []
+            available_option_ids = []
+            for available_option in carrier.available_option_ids:
+                available_option_ids.append(available_option.id)
+                if available_option.state in ['default_option', 'mandatory']:
+                    default_option_ids.append(available_option.id)
+            res = {
+                'value': {'carrier_type': carrier.type,
+                          'carrier_code': carrier.code,
+                          'option_ids': default_option_ids,
+                          },
+                'domain': {'option_ids': [('id', 'in', available_option_ids)],
+                           },
+            }
+        return res
+
+    def option_ids_change(self, cr, uid, ids, option_ids, carrier_id, context=None):
+        carrier_obj = self.pool.get('delivery.carrier')
+        res = {}
+        if not carrier_id:
+            return res
+        carrier = carrier_obj.browse(cr, uid, carrier_id, context=context)
+        for available_option in carrier.available_option_ids:
+            if (available_option.state == 'mandatory'
+                    and not available_option.id in option_ids[0][2]):
+                res['warning'] = {
+                    'title': _('User Error !'),
+                    'message':  _("You can not remove a mandatory option."
+                                  "\nOptions are reset to default.")
+                }
+                default_value = self.carrier_id_change(cr, uid, ids,
+                                                       carrier_id,
+                                                       context=context)
+                res.update(default_value)
+        return res
+
+    def create(self, cr, uid, values, context=None):
+        """ Trigger carrier_id_change on create
+
+        To ensure options are setted on the basis of carrier_id copied from
+        Sale order or defined by default.
+
+        """
+        carrier_id = values.get('carrier_id')
+        if carrier_id:
+            picking_obj = self.pool.get('stock.picking')
+            res = picking_obj.carrier_id_change(cr, uid, [], carrier_id,
+                                                context=context)
+            option_ids = res.get('value', {}).get('option_ids')
+            if option_ids:
+                values.update(option_ids=[(6, 0, option_ids)])
+        picking_id = super(stock_picking, self
+                    ).create(cr, uid, values, context=context)
+        return picking_id
+
+
+class stock_picking_in(orm.Model):
+    """ Add what isn't inherited from stock.picking """
+    _inherit = 'stock.picking.in'
+
+    def _get_carrier_type_selection(self, cr, uid, context=None):
+        carrier_obj = self.pool.get('delivery.carrier')
+        return carrier_obj._get_carrier_type_selection(cr, uid, context=context)
+
+    _columns = {
+        'carrier_id': fields.many2one(
+            'delivery.carrier', 'Carrier',
+            states={'done': [('readonly', True)]}),
+        'carrier_type': fields.related(
+            'carrier_id', 'type',
+            string='Carrier type',
+            readonly=True,
+            type='selection',
+            selection=_get_carrier_type_selection,
+            help="Carrier type ('group')"),
+        'carrier_code': fields.related(
+            'carrier_id', 'code',
+            string='Delivery Method Code',
+            readonly=True,
+            type='char',
+            help="Delivery Method Code (from carrier)"),
+        'option_ids': fields.many2many('delivery.carrier.option',
+                                       string='Options'),
+    }
+
+    def action_generate_carrier_label(self, cr, uid, ids, context=None):
+        picking_obj = self.pool.get('stock.picking')
+        return picking_obj.action_generate_carrier_label(cr, uid, ids,
+                                                         context=context)
+
+    def carrier_id_change(self, cr, uid, ids, carrier_id, context=None):
+        """ Call stock.picking carrier_id_change """
+        picking_obj = self.pool.get('stock.picking')
+        return picking_obj.carrier_id_change(cr, uid, ids,
+                                             carrier_id, context=context)
+
+    def option_ids_change(self, cr, uid, ids,
+                          option_ids, carrier_id, context=None):
+        """ Call stock.picking option_ids_change """
+        picking_obj = self.pool.get('stock.picking')
+        return picking_obj.option_ids_change(cr, uid, ids,
+                                             option_ids, carrier_id,
+                                             context=context)
+
+
+class stock_picking_out(orm.Model):
+    """ Add what isn't inherited from stock.picking """
+    _inherit = 'stock.picking.out'
+
+    def _get_carrier_type_selection(self, cr, uid, context=None):
+        carrier_obj = self.pool.get('delivery.carrier')
+        return carrier_obj._get_carrier_type_selection(cr, uid, context=context)
+
+    _columns = {
+        'carrier_id': fields.many2one(
+            'delivery.carrier', 'Carrier',
+            states={'done': [('readonly', True)]}),
+        'carrier_type': fields.related(
+            'carrier_id', 'type',
+            string='Carrier type',
+            readonly=True,
+            type='selection',
+            selection=_get_carrier_type_selection,
+            help="Carrier type ('group')"),
+        'carrier_code': fields.related(
+            'carrier_id', 'code',
+            string='Delivery Method Code',
+            readonly=True,
+            type='char',
+            help="Delivery Method Code (from carrier)"),
+        'option_ids': fields.many2many('delivery.carrier.option',
+                                       string='Options'),
+    }
+
+    def action_generate_carrier_label(self, cr, uid, ids, context=None):
+        picking_obj = self.pool.get('stock.picking')
+        return picking_obj.action_generate_carrier_label(cr, uid, ids,
+                                                         context=context)
+
+    def carrier_id_change(self, cr, uid, ids, carrier_id, context=None):
+        """ Inherit this method in your module """
+        picking_obj = self.pool.get('stock.picking')
+        return picking_obj.carrier_id_change(cr, uid, ids, carrier_id, context=context)
+
+    def option_ids_change(self, cr, uid, ids, option_ids, carrier_id, context=None):
+        picking_obj = self.pool.get('stock.picking')
+        return picking_obj.option_ids_change(cr, uid, ids,
+                                             option_ids, carrier_id,
+                                             context=context)
+
+
+class ShippingLabel(orm.Model):
+    """ Child class of ir attachment to identify which are labels """
+    _inherits = {'ir.attachment': 'attachment_id'}
+    _name = 'shipping.label'
+    _description = "Shipping Label"
+
+    def _get_file_type_selection(self, cr, uid, context=None):
+        return [('pdf', 'PDF')]
+
+    _columns = {
+        'file_type': fields.selection(_get_file_type_selection, 'File type'),
+        'tracking_id': fields.many2one('stock.tracking', 'Pack'),
+    }
+
+    _defaults = {
+        'file_type': 'pdf'
+    }

=== 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+  <data>
+    <!-- From DELIVERY module on STOCK.PICKING -->
+    <!-- FORM -->
+    <record id="view_picking_out_form" model="ir.ui.view">
+      <field name="name">delivery.stock.picking.out.form</field>
+      <field name="model">stock.picking.out</field>
+      <field name="inherit_id" ref="delivery.view_picking_withcarrier_out_form"/>
+      <field name="arch" type="xml">
+        <field name="state" position="before">
+          <button name="action_generate_carrier_label" states="assigned,confirmed,draft" string="Create Shipping Label" type="object"/>
+        </field>
+        <field name="carrier_id" position="attributes">
+          <attribute name="on_change">carrier_id_change(carrier_id, context)</attribute>
+        </field>
+        <notebook position='inside'>
+          <page name="carrier" string="Carrier Info">
+            <separator string="Delivery"/>
+            <field name="carrier_type"/>
+            <field name="carrier_code"/>
+            <separator string="Options"/>
+            <field name="option_ids" nolabel="1"
+              on_change="option_ids_change(option_ids, carrier_id, context)"/>
+          </page>
+        </notebook>
+      </field>
+    </record>
+
+    <!-- From DELIVERY module on STOCK.PICKING -->
+    <!-- FORM -->
+    <record id="view_picking_in_form" model="ir.ui.view">
+      <field name="name">delivery.stock.picking.in.form</field>
+      <field name="model">stock.picking.in</field>
+      <field name="inherit_id" ref="delivery.view_picking_withcarrier_in_form"/>
+      <field name="arch" type="xml">
+        <field name="state" position="before">
+          <button name="action_generate_carrier_label" states="assigned,confirmed,draft" string="Create Return Label" type="object"/>
+        </field>
+        <notebook position='inside'>
+          <page name="carrier" string="Carrier Info">
+            <separator string="Delivery"/>
+            <field name="carrier_id" on_change="carrier_id_change(carrier_id, context)"/>
+            <field name="carrier_type"/>
+            <field name="carrier_code"/>
+            <separator string="Options"/>
+            <field name="option_ids" nolabel="1"
+              on_change="option_ids_change(option_ids, carrier_id, context)"/>
+          </page>
+        </notebook>
+      </field>
+    </record>
+
+  </data>
+</openerp>


References