diff --git a/addons/account/data/account_data.xml b/addons/account/data/account_data.xml
index 8119e9f1002..723ec6da155 100644
--- a/addons/account/data/account_data.xml
+++ b/addons/account/data/account_data.xml
@@ -3,9 +3,15 @@
+ SAL
Sales
sale
+
+ PUR
+ Purchases
+ purchase
+
+
Leave Request
hr.holidays
- 1
-
-
-
-
-
- Allocation Request
- hr.holidays
-
-
diff --git a/addons/l10n_us/account.account.template.csv b/addons/l10n_us/account.account.template.csv
index c7431ce89a7..6e6435fcbea 100644
--- a/addons/l10n_us/account.account.template.csv
+++ b/addons/l10n_us/account.account.template.csv
@@ -119,3 +119,5 @@
"51100_general_product",51100,"Freight and Shipping Costs","other","l10n_us.user_type_cogs","cost_of_goods_sold","False","l10n_us.account_chart_template_general_product"
"52500_general_product",52500,"Purchase Discounts","other","l10n_us.user_type_cogs","cost_of_goods_sold","False","l10n_us.account_chart_template_general_product"
"52900_general_product",52900,"Purchases - Resale Items","other","l10n_us.user_type_cogs","cost_of_goods_sold","False","l10n_us.account_chart_template_general_product"
+"base_miscincome","49000","Miscellaneous Income","other","l10n_us.user_type_income","income","False","l10n_us.account_chart_template_basic"
+"base_miscexpense","69000","Miscellaneous Expense","other","l10n_us.user_type_expense","expense","False","l10n_us.account_chart_template_basic"
\ No newline at end of file
diff --git a/addons/l10n_us/account_chart_template_after.xml b/addons/l10n_us/account_chart_template_after.xml
index 4cd1472773d..8db22dd262a 100644
--- a/addons/l10n_us/account_chart_template_after.xml
+++ b/addons/l10n_us/account_chart_template_after.xml
@@ -9,6 +9,8 @@
+
+
diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py
index 1b9111d3040..59d2e5f81ee 100644
--- a/addons/mail/__openerp__.py
+++ b/addons/mail/__openerp__.py
@@ -81,16 +81,19 @@ Main Features
'css': [
'static/src/css/mail.css',
'static/src/css/mail_group.css',
+ 'static/src/css/announcement.css',
],
'js': [
'static/src/js/mail.js',
'static/src/js/mail_followers.js',
'static/src/js/many2many_tags_email.js',
+ 'static/src/js/announcement.js',
'static/src/js/suggestions.js',
],
'qweb': [
'static/src/xml/mail.xml',
'static/src/xml/mail_followers.xml',
+ 'static/src/xml/announcement.xml',
'static/src/xml/suggestions.xml',
],
}
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index 9dfec55b075..4d8d00ec7b9 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -201,7 +201,7 @@ class mail_message(osv.Model):
def _get_default_from(self, cr, uid, context=None):
this = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context)
- if this.alias_domain:
+ if this.alias_name and this.alias_domain:
return '%s <%s@%s>' % (this.name, this.alias_name, this.alias_domain)
elif this.email:
return '%s <%s>' % (this.name, this.email)
diff --git a/addons/mail/static/src/css/announcement.css b/addons/mail/static/src/css/announcement.css
new file mode 100644
index 00000000000..5d2a0ecba44
--- /dev/null
+++ b/addons/mail/static/src/css/announcement.css
@@ -0,0 +1,3 @@
+.openerp .annoucement_bar {
+ display: none;
+}
diff --git a/addons/mail/static/src/css/mail_group.css b/addons/mail/static/src/css/mail_group.css
index 9560a4765d0..39cdf5c0b4c 100644
--- a/addons/mail/static/src/css/mail_group.css
+++ b/addons/mail/static/src/css/mail_group.css
@@ -90,7 +90,9 @@
}
.openerp .oe_group_button {
- padding-top: 7px;
+ position: absolute;
+ padding-bottom: 50px;
+ bottom: 0;
}
.openerp .oe_group_button .oe_group_join {
diff --git a/addons/mail/static/src/js/announcement.js b/addons/mail/static/src/js/announcement.js
new file mode 100644
index 00000000000..0dd438d13af
--- /dev/null
+++ b/addons/mail/static/src/js/announcement.js
@@ -0,0 +1,42 @@
+openerp_announcement = function(instance) {
+ instance.web.WebClient.include({
+ show_application: function() {
+ return $.when(this._super.apply(this, arguments)).then(this.proxy('show_annoucement_bar'));
+ },
+ _ab_location: function(dbuuid) {
+ return _.str.sprintf('https://services.openerp.com/openerp-enterprise/ab/css/%s.css', dbuuid);
+ },
+ show_annoucement_bar: function() {
+ if (this.session.get_cookie('ab') === 'c') {
+ return;
+ }
+ var self = this;
+ var config_parameter = new instance.web.Model('ir.config_parameter');
+ var $bar = this.$el.find('.announcement_bar');
+ return config_parameter.call('get_param', ['database.uuid', false]).then(function(dbuuid) {
+ if (!dbuuid) {
+ return;
+ }
+ var $link = $bar.find('.url a');
+ $link.attr('href', _.str.sprintf('%s/%s', $link.attr('href'), dbuuid));
+ var $css = $('').attr({
+ rel : 'stylesheet',
+ type: 'text/css',
+ media: 'screen',
+ href: self._ab_location(dbuuid)
+ });
+ $css.on('load', function() {
+ var close = function() {
+ var ttl = 7*24*60*60;
+ self.session.set_cookie('ab', 'c', ttl);
+ $bar.slideUp('slow');
+ };
+ $bar.find('.close').on('click', close);
+ self.trigger('ab_loaded', $bar);
+ });
+
+ $('head').append($css);
+ });
+ }
+ });
+};
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index 269187df8cd..4378d2f75b5 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -6,6 +6,7 @@ openerp.mail = function (session) {
openerp_mail_followers(session, mail); // import mail_followers.js
openerp_FieldMany2ManyTagsEmail(session); // import manyy2many_tags_email.js
+ openerp_announcement(session);
/**
* ------------------------------------------------------------
diff --git a/addons/mail/static/src/xml/announcement.xml b/addons/mail/static/src/xml/announcement.xml
new file mode 100644
index 00000000000..84dfa426796
--- /dev/null
+++ b/addons/mail/static/src/xml/announcement.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+ |
+
+
+
diff --git a/addons/mass_mailing/__openerp__.py b/addons/mass_mailing/__openerp__.py
index b8ca21c60d7..92f8b1fc3e8 100644
--- a/addons/mass_mailing/__openerp__.py
+++ b/addons/mass_mailing/__openerp__.py
@@ -38,9 +38,9 @@ professional emails and reuse templates in a few clicks.
],
'data': [
'mail_data.xml',
- 'mass_mailing_view.xml',
'wizard/mail_compose_message_view.xml',
'wizard/mail_mass_mailing_create_segment.xml',
+ 'mass_mailing_view.xml',
'security/ir.model.access.csv',
],
'js': [
diff --git a/addons/mass_mailing/mass_mailing_view.xml b/addons/mass_mailing/mass_mailing_view.xml
index f0c27f42a4a..c9594179a72 100644
--- a/addons/mass_mailing/mass_mailing_view.xml
+++ b/addons/mass_mailing/mass_mailing_view.xml
@@ -252,6 +252,9 @@
Settings
+
+ New Wave
+
Delete
diff --git a/addons/mass_mailing/wizard/mail_mass_mailing_create_segment.py b/addons/mass_mailing/wizard/mail_mass_mailing_create_segment.py
index 9ea0d8aa1c5..0944e89f1de 100644
--- a/addons/mass_mailing/wizard/mail_mass_mailing_create_segment.py
+++ b/addons/mass_mailing/wizard/mail_mass_mailing_create_segment.py
@@ -36,7 +36,7 @@ class MailMassMailingCreate(osv.TransientModel):
required=True,
),
'model_id': fields.many2one(
- 'ir.model', 'Document',
+ 'ir.model', 'Document Type',
required=True,
help='Document on which the mass mailing will run. This must be a '
'valid OpenERP model.',
@@ -116,6 +116,8 @@ class MailMassMailingCreate(osv.TransientModel):
'default_template_id': wizard.template_id.id,
'default_use_mass_mailing_campaign': True,
'default_use_active_domain': True,
+ 'default_model': wizard.model_id.model,
+ 'default_res_id': False,
'default_active_domain': wizard.domain,
'default_mass_mailing_campaign_id': wizard.mass_mailing_campaign_id.id,
'default_mass_mailing_id': wizard.mass_mailing_id.id,
diff --git a/addons/mass_mailing/wizard/mail_mass_mailing_create_segment.xml b/addons/mass_mailing/wizard/mail_mass_mailing_create_segment.xml
index e307bdd8909..b2b48fb8618 100644
--- a/addons/mass_mailing/wizard/mail_mass_mailing_create_segment.xml
+++ b/addons/mass_mailing/wizard/mail_mass_mailing_create_segment.xml
@@ -42,7 +42,7 @@
-
+
-
+
Please choose the name of the mailing.
@@ -76,6 +75,7 @@
form
form
new
+
{'default_mass_mailing_campaign_id': active_id}
diff --git a/addons/mrp/report/price.py b/addons/mrp/report/price.py
index 5afd6b3ee49..ff3d5ff5c56 100644
--- a/addons/mrp/report/price.py
+++ b/addons/mrp/report/price.py
@@ -70,6 +70,8 @@ class report_custom(report_rml):
main_strd_price = str(std_price) + '\r\n'
sum_strd = prod_qtty*std_price
for seller_id in prod.seller_ids:
+ if seller_id.name.id == prod.seller_id.id:
+ continue
sellers += '-
'+ to_xml(seller_id.name.name) +'\r\n'
pricelist = seller_id.name.property_product_pricelist_purchase
price = pricelist_pool.price_get(cr,uid,[pricelist.id],
diff --git a/addons/note/note.py b/addons/note/note.py
index 00c67c37191..fe917531472 100644
--- a/addons/note/note.py
+++ b/addons/note/note.py
@@ -84,9 +84,10 @@ class note_note(osv.osv):
return ids and ids[0] or False
def _set_stage_per_user(self, cr, uid, id, name, value, args=None, context=None):
- note = self.browse(cr, uid, id, context=context)
- if not value: return False
- stage_ids = [value] + [stage.id for stage in note.stage_ids if stage.user_id.id != uid ]
+ if not value:
+ return False
+ note = self.browse(cr, SUPERUSER_ID, id, context=context) # do it as SUPERUSER because when creating, followers are not necessariliry set (another function field)
+ stage_ids = [value] + [stage.id for stage in note.stage_ids if stage.user_id.id != uid]
return self.write(cr, uid, [id], {'stage_ids': [(6, 0, set(stage_ids))]}, context=context)
def _get_stage_per_user(self, cr, uid, ids, name, args, context=None):
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index 144f672469e..fec66d0d602 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -714,13 +714,14 @@ class pos_order(osv.osv):
}, context=context)
self.write(cr, uid, [order.id], {'picking_id': picking_id}, context=context)
location_id = order.warehouse_id.lot_stock_id.id
- output_id = order.warehouse_id.lot_output_id.id
+ if order.partner_id:
+ destination_id = order.partner_id.property_stock_customer.id
+ else:
+ destination_id = partner_obj.default_get(cr, uid, ['property_stock_customer'], context=context)['property_stock_customer']
for line in order.lines:
if line.product_id and line.product_id.type == 'service':
continue
- if line.qty < 0:
- location_id, output_id = output_id, location_id
move_obj.create(cr, uid, {
'name': line.name,
@@ -732,11 +733,9 @@ class pos_order(osv.osv):
'product_qty': abs(line.qty),
'tracking_id': False,
'state': 'draft',
- 'location_id': location_id,
- 'location_dest_id': output_id,
+ 'location_id': location_id if line.qty >= 0 else destination_id,
+ 'location_dest_id': destination_id if line.qty >= 0 else location_id,
}, context=context)
- if line.qty < 0:
- location_id, output_id = output_id, location_id
picking_obj.signal_button_confirm(cr, uid, [picking_id])
picking_obj.force_assign(cr, uid, [picking_id], context)
diff --git a/addons/point_of_sale/static/src/js/devices.js b/addons/point_of_sale/static/src/js/devices.js
index 67fde81136a..7071a862413 100644
--- a/addons/point_of_sale/static/src/js/devices.js
+++ b/addons/point_of_sale/static/src/js/devices.js
@@ -560,6 +560,7 @@ function openerp_pos_devices(instance,module){ //module is instance.point_of_sal
this.handler = function(e){
if(e.which === 13){ //ignore returns
+ e.preventDefault();
return;
}
diff --git a/addons/project/project.py b/addons/project/project.py
index ea9c4492fa4..e42cd8d7247 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -479,7 +479,7 @@ def Project():
""" % (
project.id,
project.date_start or time.strftime('%Y-%m-%d'), working_days,
- '|'.join(['User_'+str(x) for x in puids])
+ '|'.join(['User_'+str(x) for x in puids]) or 'None'
)
vacation = calendar_id and tuple(resource_pool.compute_vacation(cr, uid, calendar_id, context=context)) or False
if vacation:
@@ -789,7 +789,7 @@ class task(osv.osv):
}),
'progress': fields.function(_hours_get, string='Working Time Progress (%)', multi='hours', group_operator="avg", help="If the task has a progress of 99.99% you should close the task if it's finished or reevaluate the time",
store = {
- 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours','state'], 10),
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours', 'state', 'stage_id'], 10),
'project.task.work': (_get_task, ['hours'], 10),
}),
'delay_hours': fields.function(_hours_get, string='Delay Hours', multi='hours', help="Computed as difference between planned hours by the project manager and the total hours of the task.",
diff --git a/addons/project/static/src/js/project.js b/addons/project/static/src/js/project.js
index ce8be146e54..a4e899a8714 100644
--- a/addons/project/static/src/js/project.js
+++ b/addons/project/static/src/js/project.js
@@ -32,12 +32,6 @@ openerp.project = function(openerp) {
if (self.dataset.model === 'project.project') {
self.project_display_members_names();
}
- },
- on_record_moved: function(record, old_group, old_index, new_group, new_index){
- var self = this;
- this._super.apply(this, arguments);
- if(new_group.state.folded)
- new_group.do_action_toggle_fold();
}
});
diff --git a/addons/project_issue_sheet/project_issue_sheet_view.xml b/addons/project_issue_sheet/project_issue_sheet_view.xml
index 4911cac8f25..6d813b44239 100644
--- a/addons/project_issue_sheet/project_issue_sheet_view.xml
+++ b/addons/project_issue_sheet/project_issue_sheet_view.xml
@@ -19,7 +19,7 @@
-
diff --git a/addons/project_mrp/process/project_mrp_process.xml b/addons/project_mrp/process/project_mrp_process.xml
index de2b2c1b4c8..ab0de03eee0 100644
--- a/addons/project_mrp/process/project_mrp_process.xml
+++ b/addons/project_mrp/process/project_mrp_process.xml
@@ -46,12 +46,15 @@
Process Transition
-->
-
-
+
subflow
@@ -66,7 +69,7 @@
-
+
diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml
index 909663f43bb..58270f0ccd1 100644
--- a/addons/purchase/report/purchase_report_view.xml
+++ b/addons/purchase/report/purchase_report_view.xml
@@ -71,10 +71,8 @@
-
-
diff --git a/addons/purchase/stock.py b/addons/purchase/stock.py
index be4169c4624..7671c4b3d86 100644
--- a/addons/purchase/stock.py
+++ b/addons/purchase/stock.py
@@ -140,6 +140,6 @@ class stock_picking_in(osv.osv):
_columns = {
'purchase_id': fields.many2one('purchase.order', 'Purchase Order',
ondelete='set null', select=True),
- 'warehouse_id': fields.related('purchase_id', 'warehouse_id', type='many2one', relation='stock.warehouse', string='Destination Warehouse'),
+ 'warehouse_id': fields.related('purchase_id', 'warehouse_id', type='many2one', relation='stock.warehouse', string='Destination Warehouse', readonly=True),
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 88cd20bd786..6584d25bdad 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -997,9 +997,9 @@ class mail_compose_message(osv.Model):
def send_mail(self, cr, uid, ids, context=None):
context = context or {}
- if context.get('active_model') == 'sale.order' and context.get('active_ids') and context.get('mark_so_as_sent'):
+ if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'):
context = dict(context, mail_post_autofollow=True)
- self.pool.get('sale.order').signal_quotation_sent(cr, uid, context['active_ids'])
+ self.pool.get('sale.order').signal_quotation_sent(cr, uid, [context['default_res_id']])
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
diff --git a/addons/sale_crm/sale_crm.py b/addons/sale_crm/sale_crm.py
index f1370841fe9..9bcb5adf6ae 100644
--- a/addons/sale_crm/sale_crm.py
+++ b/addons/sale_crm/sale_crm.py
@@ -26,6 +26,18 @@ from dateutil import relativedelta
from openerp import tools
from openerp.osv import osv, fields
+class res_users(osv.Model):
+ _inherit = 'res.users'
+ _columns = {
+ 'default_section_id': fields.many2one('crm.case.section', 'Default Sales Team'),
+ }
+
+ def __init__(self, pool, cr):
+ init_res = super(res_users, self).__init__(pool, cr)
+ # duplicate list to avoid modifying the original reference
+ self.SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS)
+ self.SELF_WRITEABLE_FIELDS.extend(['default_section_id'])
+ return init_res
class sale_order(osv.osv):
_inherit = 'sale.order'
@@ -35,6 +47,17 @@ class sale_order(osv.osv):
domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]", context="{'object_name': 'crm.lead'}")
}
+ def _get_default_section_id(self, cr, uid, context=None):
+ """ Gives default section by checking if present in the context """
+ section_id = self.pool.get('crm.lead')._resolve_section_id_from_context(cr, uid, context=context) or False
+ if not section_id:
+ section_id = self.pool.get('res.users').browse(cr, uid, uid, context).default_section_id.id or False
+ return section_id
+
+ _defaults = {
+ 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
+ }
+
def _prepare_invoice(self, cr, uid, order, lines, context=None):
invoice_vals = super(sale_order, self)._prepare_invoice(cr, uid, order, lines, context=context)
if order.section_id and order.section_id.id:
@@ -92,21 +115,6 @@ class crm_case_section(osv.osv):
def action_forecast(self, cr, uid, id, value, context=None):
return self.write(cr, uid, [id], {'invoiced_forecast': round(float(value))}, context=context)
-
-class res_users(osv.Model):
- _inherit = 'res.users'
- _columns = {
- 'default_section_id': fields.many2one('crm.case.section', 'Default Sales Team'),
- }
-
- def __init__(self, pool, cr):
- init_res = super(res_users, self).__init__(pool, cr)
- # duplicate list to avoid modifying the original reference
- self.SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS)
- self.SELF_WRITEABLE_FIELDS.extend(['default_section_id'])
- return init_res
-
-
class sale_crm_lead(osv.Model):
_inherit = 'crm.lead'
diff --git a/addons/sale_mrp/i18n/th.po b/addons/sale_mrp/i18n/th.po
new file mode 100644
index 00000000000..d055e4b93c8
--- /dev/null
+++ b/addons/sale_mrp/i18n/th.po
@@ -0,0 +1,43 @@
+# Thai translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:06+0000\n"
+"PO-Revision-Date: 2013-12-12 11:19+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Thai \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-12-13 05:52+0000\n"
+"X-Generator: Launchpad (build 16869)\n"
+
+#. module: sale_mrp
+#: model:ir.model,name:sale_mrp.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: sale_mrp
+#: help:mrp.production,sale_name:0
+msgid "Indicate the name of sales order."
+msgstr ""
+
+#. module: sale_mrp
+#: help:mrp.production,sale_ref:0
+msgid "Indicate the Customer Reference from sales order."
+msgstr ""
+
+#. module: sale_mrp
+#: field:mrp.production,sale_ref:0
+msgid "Sale Reference"
+msgstr ""
+
+#. module: sale_mrp
+#: field:mrp.production,sale_name:0
+msgid "Sale Name"
+msgstr ""
diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml
index e51f20c67c9..aaf4333ece7 100644
--- a/addons/stock/security/stock_security.xml
+++ b/addons/stock/security/stock_security.xml
@@ -10,7 +10,7 @@
Manager
-
+
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 69d2c6e4791..1484397b5a8 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -2106,7 +2106,7 @@ class stock_move(osv.osv):
})
new_moves.append(self.browse(cr, uid, [new_id])[0])
if pickid:
- self.signal_button_confirm(cr, uid, [pickid])
+ self.pool.get('stock.picking').signal_button_confirm(cr, uid, [pickid])
if new_moves:
new_moves += self.create_chained_picking(cr, uid, new_moves, context)
return new_moves
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 99f2e738709..0443b888ef7 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -1044,7 +1044,7 @@
-
+
diff --git a/addons/web_linkedin/__openerp__.py b/addons/web_linkedin/__openerp__.py
index 6ce78cfca47..508ca240780 100644
--- a/addons/web_linkedin/__openerp__.py
+++ b/addons/web_linkedin/__openerp__.py
@@ -10,7 +10,7 @@ OpenERP Web LinkedIn module.
This module provides the Integration of the LinkedIn with OpenERP.
""",
'data': ['web_linkedin_view.xml'],
- 'depends' : ['crm'],
+ 'depends' : ['web','crm'],
'js': ['static/src/js/*.js'],
'css': ['static/src/css/*.css'],
'qweb': ['static/src/xml/*.xml'],
diff --git a/addons/web_linkedin/web_linkedin.py b/addons/web_linkedin/web_linkedin.py
index a07dcd50ea0..83132511a17 100644
--- a/addons/web_linkedin/web_linkedin.py
+++ b/addons/web_linkedin/web_linkedin.py
@@ -24,6 +24,7 @@ import urllib2
from urlparse import urlparse, urlunparse
import openerp
+import openerp.addons.web
from openerp.osv import fields, osv
class Binary(openerp.http.Controller):
@@ -88,4 +89,4 @@ class web_linkedin_fields(osv.Model):
'linkedin_url': fields.char(string="LinkedIn url", size=100, store=True),
'linkedin_public_url': fields.function(_get_url, type='text', string="LinkedIn url",
help="This url is set automatically when you join the partner with a LinkedIn account."),
- }
\ No newline at end of file
+ }
|