summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2012-08-15 20:48:04 +0200
committerAntony Lesuisse <al@openerp.com>2012-08-15 20:48:04 +0200
commit50275e9ec945ba6865a09e9cd708793018bed0dd (patch)
tree9e47100a9679ca6fa13ba2963774715dd35ece1d /addons
parentdd6371e2442804608de20583f58c098386b77721 (diff)
parent16719d3f5bfdfa993528a289f9ee06047944630e (diff)
[MERGE] res.users inherits res.partner
bzr revid: al@openerp.com-20120815184804-54oh31i61thgmzmw
Diffstat (limited to 'addons')
-rw-r--r--addons/account/__init__.py2
-rw-r--r--addons/account/edi/invoice_action_data.xml8
-rw-r--r--addons/account_analytic_analysis/cron_account_analytic_account.py4
-rw-r--r--addons/auth_ldap/users_ldap.py2
-rw-r--r--addons/auth_openid/res_users.py2
-rw-r--r--addons/auth_signup/__init__.py21
-rw-r--r--addons/auth_signup/__openerp__.py61
-rw-r--r--addons/auth_signup/auth_signup.py30
-rw-r--r--addons/auth_signup/res_config.py21
-rw-r--r--addons/base_action_rule/base_action_rule.py8
-rw-r--r--addons/base_calendar/base_calendar.py18
-rw-r--r--addons/base_calendar/wizard/base_calendar_invite_attendee.py8
-rw-r--r--addons/base_crypt/crypt.py2
-rw-r--r--addons/base_setup/base_setup.py2
-rw-r--r--addons/base_status/base_stage.py14
-rw-r--r--addons/base_status/base_state.py2
-rw-r--r--addons/crm/crm_action_rule.py4
-rw-r--r--addons/crm/crm_lead.py6
-rw-r--r--addons/crm_partner_assign/wizard/crm_forward_to_partner.py13
-rw-r--r--addons/event/email_template.xml4
-rw-r--r--addons/event/event.py2
-rw-r--r--addons/hr/hr.py2
-rw-r--r--addons/hr_recruitment/hr_recruitment.py2
-rw-r--r--addons/import_sugarcrm/import_sugarcrm.py8
-rw-r--r--addons/lunch/report/order.rml2
-rw-r--r--addons/mail/__init__.py2
-rw-r--r--addons/mail/data/mail_group_data.xml2
-rw-r--r--addons/mail/mail_message.py11
-rw-r--r--addons/mail/mail_thread.py8
-rw-r--r--addons/mail/res_partner.py18
-rw-r--r--addons/mail/res_users.py104
-rw-r--r--addons/mail/res_users_view.xml11
-rw-r--r--addons/mail/static/src/js/mail.js1
-rw-r--r--addons/mail/wizard/mail_compose_message.py6
-rw-r--r--addons/portal/__init__.py1
-rw-r--r--addons/portal/__openerp__.py1
-rw-r--r--addons/portal/res_user.py34
-rw-r--r--addons/portal/res_user_view.xml18
-rw-r--r--addons/portal/wizard/portal_wizard.py30
-rw-r--r--addons/portal/wizard/portal_wizard_view.xml4
-rw-r--r--addons/portal_crm/wizard/contact.py2
-rw-r--r--addons/procurement/schedulers.py6
-rw-r--r--addons/project/project.py2
-rw-r--r--addons/project_issue/project_issue.py2
-rw-r--r--addons/project_mailgate/project_mailgate.py2
-rw-r--r--addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml3
-rw-r--r--addons/purchase/edi/purchase_order_action_data.xml8
-rw-r--r--addons/sale/edi/sale_order_action_data.xml8
-rw-r--r--addons/share/wizard/share_wizard.py18
-rw-r--r--addons/survey/survey.py2
-rw-r--r--addons/survey/wizard/survey_answer.py4
51 files changed, 305 insertions, 251 deletions
diff --git a/addons/account/__init__.py b/addons/account/__init__.py
index 90fbdb83980..bc27e14380c 100644
--- a/addons/account/__init__.py
+++ b/addons/account/__init__.py
@@ -19,10 +19,10 @@
#
##############################################################################
+import partner
import account
import installer
import project
-import partner
import account_invoice
import account_bank_statement
import account_bank
diff --git a/addons/account/edi/invoice_action_data.xml b/addons/account/edi/invoice_action_data.xml
index ce837c6662b..0eec6d27785 100644
--- a/addons/account/edi/invoice_action_data.xml
+++ b/addons/account/edi/invoice_action_data.xml
@@ -38,7 +38,7 @@
<!--Email template -->
<record id="email_template_edi_invoice" model="email.template">
<field name="name">Automated Invoice Notification Mail</field>
- <field name="email_from">${object.user_id.user_email or object.company_id.email or 'noreply@localhost'}</field>
+ <field name="email_from">${object.user_id.email or object.company_id.email or 'noreply@localhost'}</field>
<field name="subject">${object.company_id.name} Invoice (Ref ${object.number or 'n/a' })</field>
<field name="email_to">${object.partner_id.email or ''}</field>
<field name="model_id" ref="account.model_account_invoice"/>
@@ -58,7 +58,7 @@
% if object.origin:
&nbsp;&nbsp;Order reference: ${object.origin}<br />
% endif
- &nbsp;&nbsp;Your contact: <a href="mailto:${object.user_id.user_email or ''}?subject=Invoice%20${object.number}">${object.user_id.name}</a>
+ &nbsp;&nbsp;Your contact: <a href="mailto:${object.user_id.email or ''}?subject=Invoice%20${object.number}">${object.user_id.name}</a>
</p>
<p>
@@ -133,7 +133,7 @@ A new invoice is available for ${object.partner_id.name}:
% if object.origin:
| Order reference: ${object.origin}
% endif
- | Your contact: ${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''}
+ | Your contact: ${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''}
You can view the invoice document, download it and pay online using the following link:
${ctx.get('edi_web_url_view') or 'n/a'}
@@ -160,7 +160,7 @@ Thank you for choosing ${object.company_id.name}!
--
-${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''}
+${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''}
${object.company_id.name}
% if object.company_id.street:
${object.company_id.street or ''}
diff --git a/addons/account_analytic_analysis/cron_account_analytic_account.py b/addons/account_analytic_analysis/cron_account_analytic_account.py
index caa9067b227..065fdc5b907 100644
--- a/addons/account_analytic_analysis/cron_account_analytic_account.py
+++ b/addons/account_analytic_analysis/cron_account_analytic_account.py
@@ -53,7 +53,7 @@ class analytic_account(osv.osv):
('name', 'not ilike', 'maintenance'),
('partner_id', '!=', False),
('user_id', '!=', False),
- ('user_id.user_email', '!=', False),
+ ('user_id.email', '!=', False),
('state', 'in', ('draft', 'open')),
'|', ('date', '<', time.strftime('%Y-%m-%d')), ('date', '=', False),
]
@@ -70,7 +70,7 @@ class analytic_account(osv.osv):
for user, data in users.iteritems():
subject = '[OPENERP] Reporting: Analytic Accounts'
body = Template(MAKO_TEMPLATE).render_unicode(user=user, partners=data)
- tools.email_send('noreply@openerp.com', [user.user_email, ], subject, body)
+ tools.email_send('noreply@openerp.com', [user.email, ], subject, body)
return True
diff --git a/addons/auth_ldap/users_ldap.py b/addons/auth_ldap/users_ldap.py
index e4615907c79..47fc41c3645 100644
--- a/addons/auth_ldap/users_ldap.py
+++ b/addons/auth_ldap/users_ldap.py
@@ -255,7 +255,7 @@ class users(osv.osv):
cr, SUPERUSER_ID, conf, login, entry)
if user_id:
cr.execute("""UPDATE res_users
- SET date=now() AT TIME ZONE 'UTC'
+ SET login_date=now() AT TIME ZONE 'UTC'
WHERE login=%s""",
(tools.ustr(login),))
cr.commit()
diff --git a/addons/auth_openid/res_users.py b/addons/auth_openid/res_users.py
index 3fb8cefcbd4..506c7e1c094 100644
--- a/addons/auth_openid/res_users.py
+++ b/addons/auth_openid/res_users.py
@@ -66,7 +66,7 @@ class res_users(osv.osv):
else:
with utils.cursor(db) as cr:
cr.execute("""UPDATE res_users
- SET date=now() AT TIME ZONE 'UTC'
+ SET login_date=now() AT TIME ZONE 'UTC'
WHERE login=%s AND openid_key=%s AND active=%s RETURNING id""",
(tools.ustr(login), tools.ustr(password), True))
res = cr.fetchone()
diff --git a/addons/auth_signup/__init__.py b/addons/auth_signup/__init__.py
index 2e404949550..1a120e52d18 100644
--- a/addons/auth_signup/__init__.py
+++ b/addons/auth_signup/__init__.py
@@ -1,2 +1,23 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA (<http://www.openerp.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/>
+#
+##############################################################################
+
import res_config
import auth_signup
diff --git a/addons/auth_signup/__openerp__.py b/addons/auth_signup/__openerp__.py
index a869c623db0..227d5f1017d 100644
--- a/addons/auth_signup/__openerp__.py
+++ b/addons/auth_signup/__openerp__.py
@@ -1,22 +1,43 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2009-today OpenERP SA (<http://www.openerp.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/>
+#
+##############################################################################
+
{
- 'name': 'Signup',
- 'description': 'Allow users to sign up',
- 'author': 'OpenERP SA',
- 'version': '1.0',
- 'category': 'Authentication',
- 'website': 'http://www.openerp.com',
- 'installable': True,
- 'depends': ['auth_anonymous', 'base_setup'],
- 'data': [
- 'res_config.xml',
- ],
- 'js': [
- 'static/src/js/auth_signup.js',
- ],
- 'css': [
- 'static/src/css/auth_signup.css',
- ],
- 'qweb': [
- 'static/src/xml/auth_signup.xml',
- ],
+ 'name': 'Signup',
+ 'description': 'Allow users to sign up',
+ 'author': 'OpenERP SA',
+ 'version': '1.0',
+ 'category': 'Authentication',
+ 'website': 'http://www.openerp.com',
+ 'installable': True,
+ 'depends': ['auth_anonymous', 'base_setup'],
+ 'data': [
+ 'res_config.xml',
+ ],
+ 'js': [
+ 'static/src/js/auth_signup.js',
+ ],
+ 'css': [
+ 'static/src/css/auth_signup.css',
+ ],
+ 'qweb': [
+ 'static/src/xml/auth_signup.xml',
+ ],
}
diff --git a/addons/auth_signup/auth_signup.py b/addons/auth_signup/auth_signup.py
index ebc72b3aeac..96d1ea132de 100644
--- a/addons/auth_signup/auth_signup.py
+++ b/addons/auth_signup/auth_signup.py
@@ -1,11 +1,25 @@
-from openerp.osv import osv, fields
-
-class res_users(osv.Model):
- _inherit = 'res.users'
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA (<http://www.openerp.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/>
+#
+##############################################################################
- _sql_constraints = [
- ('email_uniq', 'UNIQUE (user_email)', 'You can not have two users with the same email!')
- ]
+from openerp.osv import osv, fields
class signup_signup(osv.TransientModel):
_name = 'auth.signup'
@@ -24,7 +38,7 @@ class signup_signup(osv.TransientModel):
new_user = {
'name': values['name'],
'login': values['email'],
- 'user_email': values['email'],
+ 'email': values['email'],
'password': values['password'],
'active': True,
}
diff --git a/addons/auth_signup/res_config.py b/addons/auth_signup/res_config.py
index 2828a2b55fd..a9a490de8c5 100644
--- a/addons/auth_signup/res_config.py
+++ b/addons/auth_signup/res_config.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA (<http://www.openerp.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 osv, fields
class base_config_settings(osv.TransientModel):
diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py
index 7699256985c..b6eacda63c0 100644
--- a/addons/base_action_rule/base_action_rule.py
+++ b/addons/base_action_rule/base_action_rule.py
@@ -292,7 +292,7 @@ the rule to mark CC(mail to any other person defined in actions)."),
'object_description': hasattr(obj, 'description') and obj.description or False,
'object_user': hasattr(obj, 'user_id') and (obj.user_id and obj.user_id.name) or '/',
'object_user_email': hasattr(obj, 'user_id') and (obj.user_id and \
- obj.user_id.user_email) or '/',
+ obj.user_id.email) or '/',
'object_user_phone': hasattr(obj, 'partner_address_id') and (obj.partner_address_id and \
obj.partner_address_id.phone) or '/',
'partner': hasattr(obj, 'partner_id') and (obj.partner_id and obj.partner_id.name) or '/',
@@ -319,8 +319,8 @@ the rule to mark CC(mail to any other person defined in actions)."),
mail_message = self.pool.get('mail.message')
body = self.format_mail(obj, body)
if not emailfrom:
- if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.user_email:
- emailfrom = obj.user_id.user_email
+ if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email:
+ emailfrom = obj.user_id.email
name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
emailfrom = tools.ustr(emailfrom)
@@ -419,7 +419,7 @@ the rule to mark CC(mail to any other person defined in actions)."),
emails = []
if hasattr(obj, 'user_id') and action.act_mail_to_user:
if obj.user_id:
- emails.append(obj.user_id.user_email)
+ emails.append(obj.user_id.email)
if action.act_mail_to_watchers:
emails += (action.act_email_cc or '').split(',')
diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py
index b570c2ef011..be3244f8a5b 100644
--- a/addons/base_calendar/base_calendar.py
+++ b/addons/base_calendar/base_calendar.py
@@ -245,7 +245,7 @@ class calendar_attendee(osv.osv):
continue
else:
result[id][name] = self._get_address(attdata.sent_by_uid.name, \
- attdata.sent_by_uid.user_email)
+ attdata.sent_by_uid.email)
if name == 'cn':
if attdata.user_id:
@@ -289,7 +289,7 @@ class calendar_attendee(osv.osv):
if name == 'language':
user_obj = self.pool.get('res.users')
- lang = user_obj.read(cr, uid, uid, ['context_lang'], context=context)['context_lang']
+ lang = user_obj.read(cr, uid, uid, ['lang'], context=context)['lang']
result[id][name] = lang.replace('_', '-')
return result
@@ -434,7 +434,7 @@ property or property parameter."),
if not organizer:
organizer = event_obj.user_id
event_org.params['CN'] = [organizer.name]
- event_org.value = 'MAILTO:' + (organizer.user_email or organizer.name)
+ event_org.value = 'MAILTO:' + (organizer.email or organizer.name)
if event_obj.alarm_id:
# computes alarm data
@@ -535,7 +535,7 @@ property or property parameter."),
return {'value': {'email': ''}}
usr_obj = self.pool.get('res.users')
user = usr_obj.browse(cr, uid, user_id, *args)
- return {'value': {'email': user.user_email, 'availability':user.availability}}
+ return {'value': {'email': user.email, 'availability':user.availability}}
def do_tentative(self, cr, uid, ids, context=None, *args):
""" Makes event invitation as Tentative
@@ -891,9 +891,9 @@ From:
""" % (alarm.name, alarm.trigger_date, alarm.description, \
alarm.user_id.name, alarm.user_id.signature)
- mail_to = [alarm.user_id.user_email]
+ mail_to = [alarm.user_id.email]
for att in alarm.attendee_ids:
- mail_to.append(att.user_id.user_email)
+ mail_to.append(att.user_id.email)
if mail_to:
mail_message.schedule_with_attach(cr, uid,
tools.config.get('email_from', False),
@@ -947,7 +947,7 @@ class calendar_event(osv.osv):
value['duration'] = duration
# change start_date's time to 00:00:00 in the user's timezone
user = self.pool.get('res.users').browse(cr, uid, uid)
- tz = pytz.timezone(user.context_tz) if user.context_tz else pytz.utc
+ tz = pytz.timezone(user.tz) if user.tz else pytz.utc
start = pytz.utc.localize(start).astimezone(tz) # convert start in user's timezone
start = start.replace(hour=0, minute=0, second=0) # change start's time to 00:00:00
start = start.astimezone(pytz.utc) # convert start back to utc
@@ -1097,8 +1097,8 @@ rule or repeating pattern of time to exclude from the recurring rule."),
user_pool = self.pool.get('res.users')
user = user_pool.browse(cr, uid, uid, context=context)
res = user.name
- if user.user_email:
- res += " <%s>" %(user.user_email)
+ if user.email:
+ res += " <%s>" %(user.email)
return res
_defaults = {
diff --git a/addons/base_calendar/wizard/base_calendar_invite_attendee.py b/addons/base_calendar/wizard/base_calendar_invite_attendee.py
index b49c4219ce8..344056eb585 100644
--- a/addons/base_calendar/wizard/base_calendar_invite_attendee.py
+++ b/addons/base_calendar/wizard/base_calendar_invite_attendee.py
@@ -99,12 +99,12 @@ send an Email to Invited Person')
user = user_obj.browse(cr, uid, user_id)
res = {
'user_id': user_id,
- 'email': user.user_email
+ 'email': user.email
}
res.update(ref)
vals.append(res)
- if user.user_email:
- mail_to.append(user.user_email)
+ if user.email:
+ mail_to.append(user.email)
elif type == 'external' and datas.get('email'):
res = {'email': datas['email']}
@@ -143,7 +143,7 @@ send an Email to Invited Person')
self._columns['type'].selection))
raise osv.except_osv(_('Error!'), _("%s must have an email address to send mail.") %(name[0]))
att_obj._send_mail(cr, uid, attendees, mail_to, \
- email_from = current_user.user_email or tools.config.get('email_from', False))
+ email_from = current_user.email or tools.config.get('email_from', False))
return {'type': 'ir.actions.act_window_close'}
diff --git a/addons/base_crypt/crypt.py b/addons/base_crypt/crypt.py
index f7e200560a3..b27dad22363 100644
--- a/addons/base_crypt/crypt.py
+++ b/addons/base_crypt/crypt.py
@@ -213,7 +213,7 @@ class users(osv.osv):
# Check if the encrypted password matches against the one in the db.
cr.execute("""UPDATE res_users
- SET date=now() AT TIME ZONE 'UTC'
+ SET login_date=now() AT TIME ZONE 'UTC'
WHERE id=%s AND password=%s AND active
RETURNING id""",
(int(id), encrypted_pw.encode('utf-8')))
diff --git a/addons/base_setup/base_setup.py b/addons/base_setup/base_setup.py
index 9c1d7d9fa8e..e8e24969f2a 100644
--- a/addons/base_setup/base_setup.py
+++ b/addons/base_setup/base_setup.py
@@ -50,7 +50,7 @@ class specify_partner_terminology(osv.osv_memory):
def make_translations(self, cr, uid, ids, name, type, src, value, res_id=0, context=None):
trans_obj = self.pool.get('ir.translation')
user_obj = self.pool.get('res.users')
- context_lang = user_obj.browse(cr, uid, uid, context=context).context_lang
+ context_lang = user_obj.browse(cr, uid, uid, context=context).lang
existing_trans_ids = trans_obj.search(cr, uid, [('name','=',name), ('lang','=',context_lang), ('type','=',type), ('src','=',src), ('res_id','=',res_id)])
if existing_trans_ids:
trans_obj.write(cr, uid, existing_trans_ids, {'value': value}, context=context)
diff --git a/addons/base_status/base_stage.py b/addons/base_status/base_stage.py
index 44e9de89162..775de51394c 100644
--- a/addons/base_status/base_stage.py
+++ b/addons/base_status/base_stage.py
@@ -57,7 +57,7 @@ class base_stage(object):
if not context or not context.get('portal'):
return False
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- return user.user_email
+ return user.email
def _get_default_user(self, cr, uid, context=None):
""" Gives current user id
@@ -301,15 +301,15 @@ class base_stage(object):
for case in self.browse(cr, uid, ids, context=context):
if not destination and not case.email_from:
return False
- if not case.user_id.user_email:
+ if not case.user_id.email:
return False
if destination and case.section_id.user_id:
- case_email = case.section_id.user_id.user_email
+ case_email = case.section_id.user_id.email
else:
- case_email = case.user_id.user_email
+ case_email = case.user_id.email
src = case_email
- dest = case.user_id.user_email or ""
+ dest = case.user_id.email or ""
body = case.description or ""
for message in case.message_ids:
if message.email_from and message.body_text:
@@ -366,8 +366,8 @@ class base_stage(object):
l=[]
if case.email_cc:
l.append(case.email_cc)
- if case.user_id and case.user_id.user_email:
- l.append(case.user_id.user_email)
+ if case.user_id and case.user_id.email:
+ l.append(case.user_id.email)
res[case.id] = l
return res
diff --git a/addons/base_status/base_state.py b/addons/base_status/base_state.py
index 4247e67f435..8fa2f92e22a 100644
--- a/addons/base_status/base_state.py
+++ b/addons/base_status/base_state.py
@@ -55,7 +55,7 @@ class base_state(object):
if not context or not context.get('portal'):
return False
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- return user.user_email
+ return user.email
def _get_default_user(self, cr, uid, context=None):
""" Gives current user id
diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py
index 96d182113c8..3e3bdc90d08 100644
--- a/addons/crm/crm_action_rule.py
+++ b/addons/crm/crm_action_rule.py
@@ -49,8 +49,8 @@ class base_action_rule(osv.osv):
mail_message = self.pool.get('mail.message')
body = self.format_mail(obj, body)
if not emailfrom:
- if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.user_email:
- emailfrom = obj.user_id.user_email
+ if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email:
+ emailfrom = obj.user_id.email
name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
emailfrom = tools.ustr(emailfrom)
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index 6e1d3a7755b..a0ec728a4d8 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -243,7 +243,7 @@ class crm_lead(base_stage, osv.osv):
'partner_address_name': fields.related('partner_id', 'name', type='char', string='Partner Contact Name', readonly=True),
'partner_address_email': fields.related('partner_id', 'email', type='char', string='Partner Contact Email', readonly=True),
'company_currency': fields.related('company_id', 'currency_id', 'symbol', type='char', string='Company Currency', readonly=True),
- 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
+ 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True),
'user_login': fields.related('user_id', 'login', type='char', string='User Login', readonly=True),
# Fields for address, due to separation from crm and res.partner
@@ -692,11 +692,11 @@ class crm_lead(base_stage, osv.osv):
"""
#TOFIX: mail template should be used here instead of fix subject, body text.
message = self.pool.get('mail.message')
- email_to = lead.user_id and lead.user_id.user_email
+ email_to = lead.user_id and lead.user_id.email
if not email_to:
return False
- email_from = lead.section_id and lead.section_id.user_id and lead.section_id.user_id.user_email or email_to
+ email_from = lead.section_id and lead.section_id.user_id and lead.section_id.user_id.email or email_to
partner = lead.partner_id and lead.partner_id.name or lead.partner_name
subject = "lead %s converted into opportunity" % lead.name
body = "Info \n Id : %s \n Subject: %s \n Partner: %s \n Description : %s " % (lead.id, lead.name, lead.partner_id.name, lead.description)
diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
index 2bc2d67d00a..d479f8b1bd5 100644
--- a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
+++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
@@ -43,16 +43,13 @@ class crm_lead_forward_to_partner(osv.osv_memory):
_defaults = {
'send_to' : 'email',
'history': 'latest',
- 'email_from': lambda self, cr, uid, *a: self.pool.get('res.users')._get_email_from(cr, uid, uid)[uid],
+ 'email_from': lambda s, cr, uid, c: s.pool.get('res.users').browse(cr, uid, uid, c).email,
}
-
-
- def on_change_email(self, cr, uid, ids, user):
+ def on_change_email(self, cr, uid, ids, user, context=None):
if not user:
return {'value': {'email_to': False}}
- email = self.pool.get('res.users')._get_email_from(cr, uid, [user])[user]
- return {'value': {'email_to': email}}
+ return {'value': {'email_to': self.pool.get('res.users').browse(cr, uid, uid, context=context).email}}
def on_change_history(self, cr, uid, ids, history_type, context=None):
"""Gives message body according to type of history selected
@@ -80,7 +77,7 @@ class crm_lead_forward_to_partner(osv.osv_memory):
partner = partner_obj.browse(cr, uid, [partner_id])
user_id = partner and partner[0].user_id or False
data.update({'email_from': partner and partner[0].email or "",
- 'email_cc' : user_id and user_id.user_email or '',
+ 'email_cc' : user_id and user_id.user or '',
'user_id': user_id and user_id.id or False})
return {'value' : data}
@@ -185,7 +182,7 @@ class crm_lead_forward_to_partner(osv.osv_memory):
if partner_assigned_id:
assigned_partner = partner.browse(cr, uid, partner_assigned_id, context=context)
user_id = assigned_partner.user_id and assigned_partner.user_id.id or False
- email_cc = assigned_partner.user_id and assigned_partner.user_id.user_email or ''
+ email_cc = assigned_partner.user_id and assigned_partner.user_id.email or ''
email = assigned_partner.email
res.update({
diff --git a/addons/event/email_template.xml b/addons/event/email_template.xml
index 4485dfc785a..2666ece9921 100644
--- a/addons/event/email_template.xml
+++ b/addons/event/email_template.xml
@@ -4,7 +4,7 @@
<record id="confirmation_event" model="email.template">
<field name="name">Confirmation of the Event</field>
<field name="model_id" ref="event.model_event_registration"/>
- <field name="email_from" >${object.user_id.user_email or object.company_id.email or 'noreply@' + object.company_id.name + '.com'}</field>
+ <field name="email_from" >${object.user_id.email or object.company_id.email or 'noreply@' + object.company_id.name + '.com'}</field>
<field name="email_to" >${object.email}</field>
<field name="subject">Your registration at ${object.event_id.name}</field>
<field name="body_text">
@@ -24,7 +24,7 @@
<record id="confirmation_registration" model="email.template">
<field name="name">Confirmation of the Registration</field>
<field name="model_id" ref="event.model_event_registration"/>
- <field name="email_from" >${object.user_id.user_email or object.company_id.email or 'noreply@' + object.company_id.name + '.com'}</field>
+ <field name="email_from" >${object.user_id.email or object.company_id.email or 'noreply@' + object.company_id.name + '.com'}</field>
<field name="email_to" >${object.email}</field>
<field name="subject">Your registration at ${object.event_id.name}</field>
<field name="body_text">
diff --git a/addons/event/event.py b/addons/event/event.py
index 4279b8fcd7e..7f0c77661e4 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -230,7 +230,7 @@ class event_event(osv.osv):
curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', user.id), ('event_id', '=' , ids[0])])
#the subscription is done with SUPERUSER_ID because in case we share the kanban view, we want anyone to be able to subscribe
if not curr_reg_ids:
- curr_reg_ids = [register_pool.create(cr, SUPERUSER_ID, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id, 'nb_register': num_of_seats})]
+ curr_reg_ids = [register_pool.create(cr, SUPERUSER_ID, {'event_id': ids[0] ,'email': user.email, 'name':user.name, 'user_id': user.id, 'nb_register': num_of_seats})]
else:
register_pool.write(cr, uid, curr_reg_ids, {'nb_register': num_of_seats}, context=context)
return register_pool.confirm_registration(cr, SUPERUSER_ID, curr_reg_ids, context=context)
diff --git a/addons/hr/hr.py b/addons/hr/hr.py
index 47432e1f527..966c29cab07 100644
--- a/addons/hr/hr.py
+++ b/addons/hr/hr.py
@@ -252,7 +252,7 @@ class hr_employee(osv.osv):
def onchange_user(self, cr, uid, ids, user_id, context=None):
work_email = False
if user_id:
- work_email = self.pool.get('res.users').browse(cr, uid, user_id, context=context).user_email
+ work_email = self.pool.get('res.users').browse(cr, uid, user_id, context=context).email
return {'value': {'work_email' : work_email}}
def _get_default_image(self, cr, uid, context=None):
diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index 89a81a34c99..2e5b7b6403e 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -228,7 +228,7 @@ class hr_applicant(base_stage, osv.Model):
multi='day_close', type="float", store=True),
'color': fields.integer('Color Index'),
'emp_id': fields.many2one('hr.employee', 'employee'),
- 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
+ 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True),
}
_defaults = {
diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py
index 7e1ebe3c256..440a7b2b6f6 100644
--- a/addons/import_sugarcrm/import_sugarcrm.py
+++ b/addons/import_sugarcrm/import_sugarcrm.py
@@ -877,7 +877,7 @@ class sugar_import(import_framework):
else:
val['password'] = 'sugarcrm' #default password for all user #TODO needed in documentation
- val['context_lang'] = self.context.get('lang','en_US')
+ val['lang'] = self.context.get('lang','en_US')
return val
def get_users_department(self, val):
@@ -895,10 +895,10 @@ class sugar_import(import_framework):
'map' : {
'name': concat('first_name', 'last_name'),
'login': value('user_name', fallback='last_name'),
- 'context_lang' : 'context_lang',
+ 'lang' : 'context_lang',
'password' : 'password',
'.id' : '.id',
- 'user_email' : 'email1',
+ 'email' : 'email1',
}
}
@@ -964,7 +964,7 @@ class import_sugarcrm(osv.osv):
}
def _get_email_id(self, cr, uid, context=None):
- return self.pool.get('res.users').browse(cr, uid, uid, context=context).user_email
+ return self.pool.get('res.users').browse(cr, uid, uid, context=context).email
def _module_installed(self, cr, uid, model, context=None):
module_id = self.pool.get('ir.module.module').search(cr, uid, [('name', '=', model), ('state', "=", "installed")], context=context)
diff --git a/addons/lunch/report/order.rml b/addons/lunch/report/order.rml
index 30c16ad4894..b09b59bb96b 100644
--- a/addons/lunch/report/order.rml
+++ b/addons/lunch/report/order.rml
@@ -103,7 +103,7 @@
<td>
<para style="terp_default_8">[[ user.name ]] </para>
<para style="terp_default_8">[[ user.login ]]</para>
- <para style="terp_default_8">[[ user.user_email ]]</para>
+ <para style="terp_default_8">[[ user.email ]]</para>
</td>
</tr>
</blockTable>
diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py
index b19aad1afe3..d7a3d1a6fdb 100644
--- a/addons/mail/__init__.py
+++ b/addons/mail/__init__.py
@@ -25,8 +25,8 @@ import mail_thread
import mail_group
import mail_subscription
import ir_needaction
-import res_users
import res_partner
+import res_users
import report
import wizard
import res_config
diff --git a/addons/mail/data/mail_group_data.xml b/addons/mail/data/mail_group_data.xml
index 443b43b62d6..2152706d056 100644
--- a/addons/mail/data/mail_group_data.xml
+++ b/addons/mail/data/mail_group_data.xml
@@ -19,7 +19,7 @@
<value>Welcome to OpenERP!</value>
<value>Your homepage is a summary of messages you received and key information about documents you follow.
-The top menu bar contains all applications you installed. You can use this &lt;i&gt;Settings&lt;/i&gt; menu to intall more applications, activate others features or give access to new users.
+The top menu bar contains all applications you installed. You can use this &lt;i&gt;Settings&lt;/i&gt; menu to install more applications, activate others features or give access to new users.
To setup your preferences (name, email signature, avatar), click on the top right corner.</value>
</function>
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index 52a931c9d20..7801a9b42d9 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -93,6 +93,9 @@ class mail_message_common(osv.TransientModel):
return result
def name_get(self, cr, uid, ids, context=None):
+ # name_get may receive int id instead of an id list
+ if isinstance(ids, (int, long)):
+ ids = [ids]
res = []
for message in self.browse(cr, uid, ids, context=context):
name = ''
@@ -208,12 +211,13 @@ class mail_message(osv.Model):
'partner_id': fields.many2one('res.partner', 'Related partner',
help="Deprecated field. Use partner_ids instead."),
'partner_ids': fields.many2many('res.partner',
- 'mail_message_destination_partner_rel',
+ 'mail_message_res_partner_rel',
'message_id', 'partner_id', 'Destination partners',
help="When sending emails through the social network composition wizard"\
"you may choose to send a copy of the mail to partners."),
'user_id': fields.many2one('res.users', 'Related User', readonly=1),
- 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments'),
+ 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel',
+ 'message_id', 'attachment_id', 'Attachments'),
'mail_server_id': fields.many2one('ir.mail_server', 'Outgoing mail server', readonly=1),
'state': fields.selection([
('outgoing', 'Outgoing'),
@@ -371,7 +375,8 @@ class mail_message(osv.Model):
}
email_msg_id = self.create(cr, uid, msg_vals, context)
attachment_ids = []
- for fname, fcontent in attachments.iteritems():
+ for attachment in attachments:
+ fname, fcontent = attachment
attachment_data = {
'name': fname,
'datas_fname': fname,
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index d03dd8252d7..a6a8cc6146a 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -794,7 +794,7 @@ class mail_thread(osv.Model):
for thread in self.browse(cr, uid, ids, context=context):
l = set()
for message in thread.message_ids:
- l.add((message.user_id and message.user_id.user_email) or '')
+ l.add((message.user_id and message.user_id.email) or '')
l.add(message.email_from or '')
l.add(message.email_cc or '')
res[thread.id] = filter(None, l)
@@ -1007,9 +1007,9 @@ class mail_thread(osv.Model):
if not user.notification_email_pref == 'all' and \
not (user.notification_email_pref == 'to_me' and user.id in user_to_push_from_parse_ids):
continue
- if not user.user_email:
+ if not user.email:
continue
- email_to = '%s, %s' % (email_to, user.user_email)
+ email_to = '%s, %s' % (email_to, user.email)
email_to = email_to.lstrip(', ')
# did not find any email address: not necessary to create an email
@@ -1020,7 +1020,7 @@ class mail_thread(osv.Model):
current_user = res_users_obj.browse(cr, uid, [uid], context=context)[0]
email_from = new_msg_values.get('email_from')
if not email_from:
- email_from = current_user.user_email
+ email_from = current_user.email
# get email content, create it (with mail_message.create)
email_values = self.message_create_notify_get_email_dict(cr, uid, new_msg_values, email_from, email_to, context)
diff --git a/addons/mail/res_partner.py b/addons/mail/res_partner.py
index 3dc1f91d857..d3a61b31a8a 100644
--- a/addons/mail/res_partner.py
+++ b/addons/mail/res_partner.py
@@ -20,20 +20,28 @@
##############################################################################
from osv import osv
-from osv import fields
-class res_partner_mail(osv.osv):
+class res_partner_mail(osv.Model):
""" Inherits partner and adds CRM information in the partner form """
_name = "res.partner"
_inherit = ['res.partner', 'mail.thread']
def message_search_get_domain(self, cr, uid, ids, context=None):
""" Override of message_search_get_domain for partner discussion page.
- The purpose is to add messages directly sent to the partner.
+ The purpose is to add messages directly sent to the partner. It also
+ adds messages pushed to the related user, if any, using @login.
"""
initial_domain = super(res_partner_mail, self).message_search_get_domain(cr, uid, ids, context=context)
- if self._name == 'res.partner': # to avoid models inheriting from res.partner
- search_domain = ['|'] + initial_domain + ['|', ('partner_id', 'in', ids), ('partner_ids', 'in', ids)]
+ # to avoid models inheriting from res.partner
+ if self._name != 'res.partner':
+ return initial_domain
+ # add message linked to the partner
+ search_domain = ['|'] + initial_domain + ['|', ('partner_id', 'in', ids), ('partner_ids', 'in', ids)]
+ # if partner is linked to a user: find @login
+ res_users_obj = self.pool.get('res.users')
+ user_ids = res_users_obj.search(cr, uid, [('partner_id', 'in', ids)], context=context)
+ for user in res_users_obj.browse(cr, uid, user_ids, context=context):
+ search_domain = ['|'] + search_domain + ['|', ('body_text', 'like', '@%s' % (user.login)), ('body_html', 'like', '@%s' % (user.login))]
return search_domain
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py
index a2ca7207aa4..647be2bde6d 100644
--- a/addons/mail/res_users.py
+++ b/addons/mail/res_users.py
@@ -28,28 +28,27 @@ from tools.translate import _
_logger = logging.getLogger(__name__)
-class res_users(osv.osv):
+class res_users(osv.Model):
""" Update of res.users class
- add a preference about sending emails about notifications
- make a new user follow itself
- add a welcome message
"""
_name = 'res.users'
- _inherit = ['res.users', 'mail.thread']
+ _inherit = ['res.users']
_inherits = {'mail.alias': 'alias_id'}
-
+
_columns = {
'notification_email_pref': fields.selection([
- ('all', 'All feeds'),
- ('comments', 'Only comments'),
- ('to_me', 'Only when sent directly to me'),
+ ('all', 'All Feeds'),
+ ('to_me', 'Only send directly to me'),
('none', 'Never')
], 'Receive Feeds by Email', required=True,
help="Choose in which case you want to receive an email when you "\
- "receive new feeds."),
+ "receive new feeds."),
'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True,
- help="Email address internally associated with this user. Incoming emails will appear "
- "in the user's notifications."),
+ help="Email address internally associated with this user. Incoming "\
+ "emails will appear in the user's notifications."),
}
_defaults = {
@@ -70,13 +69,13 @@ class res_users(osv.osv):
def _auto_init(self, cr, context=None):
"""Installation hook to create aliases for all users and avoid constraint errors."""
-
+
# disable the unique alias_id not null constraint, to avoid spurious warning during
# super.auto_init. We'll reinstall it afterwards.
self._columns['alias_id'].required = False
super(res_users,self)._auto_init(cr, context=context)
-
+
registry = RegistryManager.get(cr.dbname)
mail_alias = registry.get('mail.alias')
res_users_model = registry.get('res.users')
@@ -100,25 +99,29 @@ class res_users(osv.osv):
self._columns['alias_id'].required = True
-
def create(self, cr, uid, data, context=None):
# create default alias same as the login
mail_alias = self.pool.get('mail.alias')
alias_id = mail_alias.create_unique_alias(cr, uid, {'alias_name': data['login']}, model_name=self._name, context=context)
data['alias_id'] = alias_id
data.pop('alias_name', None) # prevent errors during copy()
+ # create user that follows its related partner
user_id = super(res_users, self).create(cr, uid, data, context=context)
- mail_alias.write(cr, SUPERUSER_ID, [alias_id], {"alias_force_thread_id": user_id}, context)
-
user = self.browse(cr, uid, user_id, context=context)
- # make user follow itself
- self.message_subscribe(cr, uid, [user_id], [user_id], context=context)
+ self.pool.get('res.partner').message_subscribe(cr, uid, [user.partner_id.id], [user_id], context=context)
+ # alias
+ mail_alias.write(cr, SUPERUSER_ID, [alias_id], {"alias_force_thread_id": user_id}, context)
# create a welcome message
- company_name = user.company_id.name if user.company_id else _('the company')
- message = _('%s joined the %s network! Take a moment to welcome %s.') % (user.name, company_name, user.name)
- self.message_append_note(cr, uid, [user_id], body=message, type='comment', context=context)
+ self.create_welcome_message(cr, uid, user, context=context)
return user_id
-
+
+ def create_welcome_message(self, cr, uid, user, context=None):
+ company_name = user.company_id.name if user.company_id else _('the company')
+ subject = '''%s has joined %s.''' % (user.name, company_name)
+ body = '''Welcome to OpenERP !'''
+ return self.pool.get('res.partner').message_append_note(cr, user.id, [user.partner_id.id],
+ subject=subject, body=body, type='comment', content_subtype='html', context=context)
+
def write(self, cr, uid, ids, vals, context=None):
# User alias is sync'ed with login
if vals.get('login'): vals['alias_name'] = vals['login']
@@ -131,28 +134,56 @@ class res_users(osv.osv):
res = super(res_users, self).unlink(cr, uid, ids, context=context)
alias_pool.unlink(cr, uid, alias_ids, context=context)
return res
-
- def message_search_get_domain(self, cr, uid, ids, context=None):
- """ Override of message_search_get_domain for partner discussion page.
- The purpose is to add messages directly sent to user using
- @user_login.
- """
- initial_domain = super(res_users, self).message_search_get_domain(cr, uid, ids, context=context)
- custom_domain = []
+
+ # --------------------------------------------------
+ # Wrappers on partner methods for Chatter
+ # #FIXME: another branch holds a refactoring of mail.thread
+ # that should help cleaning those wrappers
+ # --------------------------------------------------
+
+ def message_append(self, cr, uid, threads, subject, body_text=None, body_html=None,
+ type='email', email_date=None, parent_id=False,
+ content_subtype='plain', state=None,
+ partner_ids=None, email_from=False, email_to=False,
+ email_cc=None, email_bcc=None, reply_to=None,
+ headers=None, message_id=False, references=None,
+ attachments=None, original=None, context=None):
+ for user in self.browse(cr, uid, threads, context=context):
+ user.partner_id.message_append(subject, body_text, body_html, type, email_date, parent_id,
+ content_subtype, state, partner_ids, email_from, email_to, email_cc, email_bcc, reply_to,
+ headers, message_id, references, attachments, original)
+
+ def message_read(self, cr, uid, ids, fetch_ancestors=False, ancestor_ids=None,
+ limit=100, offset=0, domain=None, context=None):
+ for user in self.browse(cr, uid, ids, context=context):
+ return user.partner_id.message_read(fetch_ancestors, ancestor_ids, limit, offset, domain)
+
+ def message_read_subscribers(self, cr, uid, ids, fields=['id', 'name', 'image_small'], context=None):
+ for user in self.browse(cr, uid, ids, context=context):
+ return user.partner_id.message_read_subscribers(fields)
+
+ def message_search(self, cr, uid, ids, fetch_ancestors=False, ancestor_ids=None,
+ limit=100, offset=0, domain=None, count=False, context=None):
for user in self.browse(cr, uid, ids, context=context):
- if custom_domain:
- custom_domain += ['|']
- custom_domain += ['|', ('body_text', 'like', '@%s' % (user.login)), ('body_html', 'like', '@%s' % (user.login))]
- return ['|'] + initial_domain + custom_domain
+ return user.partner_id.message_search(fetch_ancestors, ancestor_ids, limit, offset, domain, count)
-class res_users_mail_group(osv.osv):
+ def message_subscribe(self, cr, uid, ids, user_ids = None, context=None):
+ for user in self.browse(cr, uid, ids, context=context):
+ return user.partner_id.message_subscribe(user_ids)
+
+ def message_unsubscribe(self, cr, uid, ids, user_ids = None, context=None):
+ for user in self.browse(cr, uid, ids, context=context):
+ return user.partner_id.message_unsubscribe(user_ids)
+
+
+class res_users_mail_group(osv.Model):
""" Update of res.groups class
- if adding/removing users from a group, check mail.groups linked to
this user group, and subscribe / unsubscribe them from the discussion
group. This is done by overriding the write method.
"""
_name = 'res.users'
- _inherit = ['res.users', 'mail.thread']
+ _inherit = ['res.users']
def write(self, cr, uid, ids, vals, context=None):
write_res = super(res_users_mail_group, self).write(cr, uid, ids, vals, context=context)
@@ -164,9 +195,8 @@ class res_users_mail_group(osv.osv):
mail_group_ids = mail_group_obj.search(cr, uid, [('group_ids', 'in', user_group_ids)], context=context)
mail_group_obj.message_subscribe(cr, uid, mail_group_ids, ids, context=context)
return write_res
-
-class res_groups_mail_group(osv.osv):
+class res_groups_mail_group(osv.Model):
""" Update of res.groups class
- if adding/removing users from a group, check mail.groups linked to
this user group, and subscribe / unsubscribe them from the discussion
@@ -184,3 +214,5 @@ class res_groups_mail_group(osv.osv):
mail_group_ids = mail_group_obj.search(cr, uid, [('group_ids', 'in', ids)], context=context)
mail_group_obj.message_subscribe(cr, uid, mail_group_ids, user_ids, context=context)
return super(res_groups_mail_group, self).write(cr, uid, ids, vals, context=context)
+
+# vim:et:
diff --git a/addons/mail/res_users_view.xml b/addons/mail/res_users_view.xml
index 29fcea14a8a..005d71cb09f 100644
--- a/addons/mail/res_users_view.xml
+++ b/addons/mail/res_users_view.xml
@@ -9,7 +9,7 @@
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
<field name="arch" type="xml">
<data>
- <field name="user_email" position="before">
+ <field name="email" position="before">
<field name="notification_email_pref" readonly="0"/>
</field>
</data>
@@ -23,15 +23,10 @@
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<data>
- <field name="user_email" position="before">
+ <field name="email" position="before">
<field name="notification_email_pref"/>
</field>
- <xpath expr="/form/sheet" position="after">
- <div class="oe_chatter">
- <field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
- </div>
- </xpath>
- <field name="user_email" position="after">
+ <field name="email" position="after">
<field name="alias_domain" invisible="1"/>
<field name="alias_id" readonly="1" required="0" attrs="{'invisible': [('alias_domain', '=', False)]}"/>
</field>
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index c068074b457..ba8df2d1671 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -1021,7 +1021,6 @@ openerp.mail = function(session) {
if (this.compose_message_widget) {
this.compose_message_widget.destroy();
}
- debugger;
this.compose_message_widget = new mail.ComposeMessage(this, {
'extended_mode': false, 'uid': this.session.uid, 'res_model': this.params.res_model,
'res_id': this.params.res_id, 'mode': mode || 'comment', 'msg_id': msg_id });
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index d26511464f8..fe87b7584e0 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -100,7 +100,7 @@ class mail_compose_message(osv.TransientModel):
# Try to provide default email_from if not specified yet
if not result.get('email_from'):
current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- result['email_from'] = current_user.user_email or False
+ result['email_from'] = current_user.email or False
return result
_columns = {
@@ -133,7 +133,7 @@ class mail_compose_message(osv.TransientModel):
result.update({
'model': model,
'res_id': res_id,
- 'email_from': user.user_email or tools.config.get('email_from', False),
+ 'email_from': user.email or tools.config.get('email_from', False),
'body_html': False,
'body_text': False,
'subject': False,
@@ -223,7 +223,7 @@ class mail_compose_message(osv.TransientModel):
'dest_partner_ids': dest_partner_ids,
'model': message_data.model or False,
'res_id': message_data.res_id or False,
- 'email_from': current_user.user_email or message_data.email_to or False,
+ 'email_from': current_user.email or message_data.email_to or False,
'email_to': message_data.reply_to or message_data.email_from or False,
'email_cc': message_data.email_cc or False,
'user_id': uid,
diff --git a/addons/portal/__init__.py b/addons/portal/__init__.py
index 65b924183e1..9c6cc59be7d 100644
--- a/addons/portal/__init__.py
+++ b/addons/portal/__init__.py
@@ -21,7 +21,6 @@
import portal
import wizard
-import res_user
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/portal/__openerp__.py b/addons/portal/__openerp__.py
index 97183bccd9f..6669efbcf77 100644
--- a/addons/portal/__openerp__.py
+++ b/addons/portal/__openerp__.py
@@ -43,7 +43,6 @@ very handy when used in combination with the module 'share'.
'security/ir.model.access.csv',
'portal_view.xml',
'portal_data.xml',
- 'res_user_view.xml',
'wizard/portal_wizard_view.xml',
'wizard/share_wizard_view.xml',
],
diff --git a/addons/portal/res_user.py b/addons/portal/res_user.py
deleted file mode 100644
index 9ed95a8a740..00000000000
--- a/addons/portal/res_user.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2011 OpenERP S.A (<http://www.openerp.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 osv import osv, fields
-
-
-
-class res_users(osv.osv):
- _inherit = 'res.users'
- _columns = {
- 'partner_id': fields.many2one('res.partner',
- string='Related Partner'),
- }
-
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/portal/res_user_view.xml b/addons/portal/res_user_view.xml
deleted file mode 100644
index 7a576982541..00000000000
--- a/addons/portal/res_user_view.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
- <data>
-
- <!-- add partner field in user form -->
- <record id="view_users_form" model="ir.ui.view">
- <field name="name">res.portal.users.form</field>
- <field name="model">res.users</field>
- <field name="inherit_id" ref="base.view_users_form"/>
- <field name="arch" type="xml">
- <field name="active" position="before">
- <field name="partner_id"/>
- </field>
- </field>
- </record>
-
- </data>
-</openerp>
diff --git a/addons/portal/wizard/portal_wizard.py b/addons/portal/wizard/portal_wizard.py
index 64e24e408dd..0260ce338fc 100644
--- a/addons/portal/wizard/portal_wizard.py
+++ b/addons/portal/wizard/portal_wizard.py
@@ -26,7 +26,7 @@ from osv import osv, fields
from tools.misc import email_re
from tools.translate import _
-from base.res.res_users import _lang_get
+from base.res.res_partner import _lang_get
_logger = logging.getLogger(__name__)
@@ -62,9 +62,9 @@ def random_password():
random.shuffle(chars)
return ''.join(chars)
-def extract_email(user_email):
+def extract_email(email):
""" extract the email address from a user-friendly email address """
- m = email_re.search(user_email or "")
+ m = email_re.search(email or "")
return m and m.group(0) or ""
@@ -102,7 +102,7 @@ class wizard(osv.osv_memory):
return{
'name': address.name,
- 'user_email': extract_email(address.email),
+ 'email': extract_email(address.email),
'lang': lang,
'partner_id': partner_id,
}
@@ -136,7 +136,7 @@ class wizard(osv.osv_memory):
user_obj = self.pool.get('res.users')
user = user_obj.browse(cr, ROOT_UID, uid, context0)
- if not user.user_email:
+ if not user.email:
raise osv.except_osv(_('Email required'),
_('You must have an email address in your User Preferences'
' to send emails.'))
@@ -144,7 +144,7 @@ class wizard(osv.osv_memory):
portal_obj = self.pool.get('res.portal')
for wiz in self.browse(cr, uid, ids, context):
# determine existing users
- login_cond = [('login', 'in', [u.user_email for u in wiz.user_ids])]
+ login_cond = [('login', 'in', [u.email for u in wiz.user_ids])]
existing_uids = user_obj.search(cr, ROOT_UID, login_cond)
existing_users = user_obj.browse(cr, ROOT_UID, existing_uids)
existing_logins = [u.login for u in existing_users]
@@ -152,15 +152,15 @@ class wizard(osv.osv_memory):
# create new users in portal (skip existing logins)
new_users_data = [ {
'name': u.name,
- 'login': u.user_email,
+ 'login': u.email,
'password': random_password(),
- 'user_email': u.user_email,
- 'context_lang': u.lang,
+ 'email': u.email,
+ 'lang': u.lang,
'share': True,
'action_id': wiz.portal_id.home_action_id and wiz.portal_id.home_action_id.id or False,
'partner_id': u.partner_id and u.partner_id.id,
'groups_id': [(6, 0, [])],
- } for u in wiz.user_ids if u.user_email not in existing_logins ]
+ } for u in wiz.user_ids if u.email not in existing_logins ]
portal_obj.write(cr, ROOT_UID, [wiz.portal_id.id],
{'users': [(0, 0, data) for data in new_users_data]}, context0)
@@ -175,13 +175,13 @@ class wizard(osv.osv_memory):
dest_uids = user_obj.search(cr, ROOT_UID, login_cond)
dest_users = user_obj.browse(cr, ROOT_UID, dest_uids)
for dest_user in dest_users:
- context['lang'] = dest_user.context_lang
+ context['lang'] = dest_user.lang
data['login'] = dest_user.login
data['password'] = dest_user.password
data['name'] = dest_user.name
- email_from = user.user_email
- email_to = dest_user.user_email
+ email_from = user.email
+ email_to = dest_user.email
subject = _(WELCOME_EMAIL_SUBJECT) % data
body = _(WELCOME_EMAIL_BODY) % data
res = mail_message_obj.schedule_with_attach(cr, uid, email_from , [email_to], subject, body, context=context)
@@ -208,7 +208,7 @@ class wizard_user(osv.osv_memory):
'name': fields.char(size=64, required=True,
string='User Name',
help="The user's real name"),
- 'user_email': fields.char(size=64, required=True,
+ 'email': fields.char(size=64, required=True,
string='Email',
help="Will be used as user login. "
"Also necessary to send the account information to new users"),
@@ -222,7 +222,7 @@ class wizard_user(osv.osv_memory):
def _check_email(self, cr, uid, ids):
""" check syntax of email address """
for wuser in self.browse(cr, uid, ids):
- if not email_re.match(wuser.user_email): return False
+ if not email_re.match(wuser.email): return False
return True
_constraints = [
diff --git a/addons/portal/wizard/portal_wizard_view.xml b/addons/portal/wizard/portal_wizard_view.xml
index 7d572d09630..f3cd5c98bb4 100644
--- a/addons/portal/wizard/portal_wizard_view.xml
+++ b/addons/portal/wizard/portal_wizard_view.xml
@@ -41,7 +41,7 @@
editable in the web client 6.0 -->
<tree string="Portal Users" editable="bottom">
<field name="name"/>
- <field name="user_email"/>
+ <field name="email"/>
<field name="partner_id"/>
</tree>
</field>
@@ -55,7 +55,7 @@
<form string="Portal User" version="7.0">
<group colspan="2" col="2">
<field name="name"/>
- <field name="user_email"/>
+ <field name="email"/>
<field name="lang"/>
<field name="partner_id"/>
</group>
diff --git a/addons/portal_crm/wizard/contact.py b/addons/portal_crm/wizard/contact.py
index 505bb62bb16..036993e1720 100644
--- a/addons/portal_crm/wizard/contact.py
+++ b/addons/portal_crm/wizard/contact.py
@@ -50,7 +50,7 @@ class crm_contact_us(osv.TransientModel):
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
if (user.login != 'anonymous'):
- return user.user_email
+ return user.email
else:
return None
diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py
index 1ad1046efce..7a87697f5c8 100644
--- a/addons/procurement/schedulers.py
+++ b/addons/procurement/schedulers.py
@@ -131,7 +131,7 @@ class procurement_order(osv.osv):
Exceptions:\n""") % (start_date, end_date, report_total, report_except, report_later)
summary += '\n'.join(report)
- self.pool.get('res.users').message_append_note(cr, uid, [uid], body=summary, context=context)
+ procurement_obj.message_append_note(cr, uid, ids, body=summary, context=context)
if use_new_cursor:
cr.commit()
@@ -234,7 +234,6 @@ class procurement_order(osv.osv):
location_obj = self.pool.get('stock.location')
procurement_obj = self.pool.get('procurement.order')
wf_service = netsvc.LocalService("workflow")
- report = []
offset = 0
ids = [1]
if automatic:
@@ -288,9 +287,6 @@ class procurement_order(osv.osv):
offset += len(ids)
if use_new_cursor:
cr.commit()
- if user_id and report:
- # Chatter: old res.request is now a chatter on res.users, id=uid
- self.pool.get('res.users').message_append_note(cr, uid, [user_id], body='\n'.join(report), subject=_('Orderpoint report'), context=context)
if use_new_cursor:
cr.commit()
cr.close()
diff --git a/addons/project/project.py b/addons/project/project.py
index 7b848af06a3..fcc340d94ec 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -797,7 +797,7 @@ class task(base_stage, osv.osv):
'company_id': fields.many2one('res.company', 'Company'),
'id': fields.integer('ID', readonly=True),
'color': fields.integer('Color Index'),
- 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
+ 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True),
}
_defaults = {
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 89ef7687b95..74298223ed3 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -256,7 +256,7 @@ class project_issue(base_stage, osv.osv):
'inactivity_days': fields.function(_compute_day, string='Days since last action', \
multi='compute_day', type="integer", help="Difference in days between last action and current date"),
'color': fields.integer('Color Index'),
- 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
+ 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
diff --git a/addons/project_mailgate/project_mailgate.py b/addons/project_mailgate/project_mailgate.py
index 0ca2687b7f0..ba3cd702760 100644
--- a/addons/project_mailgate/project_mailgate.py
+++ b/addons/project_mailgate/project_mailgate.py
@@ -73,7 +73,7 @@ class project_tasks(osv.osv):
followers = super(project_tasks,self).message_thread_followers(cr, uid, ids, context=context)
for task in self.browse(cr, uid, followers.keys(), context=context):
task_followers = set(followers[task.id])
- task_followers.add(task.user_id.user_email)
+ task_followers.add(task.user_id.email)
followers[task.id] = filter(None, task_followers)
return followers
diff --git a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml
index 1e9c22f34d8..497ec9e3597 100644
--- a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml
+++ b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml
@@ -3,9 +3,8 @@
-
!record {model: res.users, id: res_users_hrmanager0}:
company_id: base.main_company
- context_lang: en_US
- login: hr
name: HR Manager
+ login: hr
password: hr
groups_id:
- base.group_hr_manager
diff --git a/addons/purchase/edi/purchase_order_action_data.xml b/addons/purchase/edi/purchase_order_action_data.xml
index 70d402de598..b97da91fa1d 100644
--- a/addons/purchase/edi/purchase_order_action_data.xml
+++ b/addons/purchase/edi/purchase_order_action_data.xml
@@ -38,7 +38,7 @@
<!--Email template -->
<record id="email_template_edi_purchase" model="email.template">
<field name="name">Automated Purchase Order Notification Mail</field>
- <field name="email_from">${object.validator.user_email or ''}</field>
+ <field name="email_from">${object.validator.email or ''}</field>
<field name="subject">${object.company_id.name} Order (Ref ${object.name or 'n/a' })</field>
<field name="email_to">${object.partner_id.email}</field>
<field name="model_id" ref="purchase.model_purchase_order"/>
@@ -61,7 +61,7 @@
% if object.partner_ref:
&nbsp;&nbsp;Your reference: ${object.partner_ref}<br />
% endif
- &nbsp;&nbsp;Your contact: <a href="mailto:${object.validator.user_email or ''}?subject=Order%20${object.name}">${object.validator.name}</a>
+ &nbsp;&nbsp;Your contact: <a href="mailto:${object.validator.email or ''}?subject=Order%20${object.name}">${object.validator.name}</a>
</p>
<p>
@@ -121,7 +121,7 @@ Here is a ${object.state in ('draft', 'sent') and 'request for quotation' or 'pu
% if object.partner_ref:
| Your reference: ${object.partner_ref}<br />
% endif
- | Your contact: ${object.validator.name} ${object.validator.user_email and '<%s>'%(object.validator.user_email) or ''}
+ | Your contact: ${object.validator.name} ${object.validator.email and '<%s>'%(object.validator.email) or ''}
You can view the ${object.state in ('draft', 'sent') and 'request for quotation' or 'order confirmation'} and download it using the following link:
${ctx.get('edi_web_url_view') or 'n/a'}
@@ -132,7 +132,7 @@ Thank you!
--
-${object.validator.name} ${object.validator.user_email and '<%s>'%(object.validator.user_email) or ''}
+${object.validator.name} ${object.validator.email and '<%s>'%(object.validator.email) or ''}
${object.company_id.name}
% if object.company_id.street:
${object.company_id.street or ''}
diff --git a/addons/sale/edi/sale_order_action_data.xml b/addons/sale/edi/sale_order_action_data.xml
index 2fe0a8cbfd3..181bd8183d7 100644
--- a/addons/sale/edi/sale_order_action_data.xml
+++ b/addons/sale/edi/sale_order_action_data.xml
@@ -37,7 +37,7 @@
<!--Email template -->
<record id="email_template_edi_sale" model="email.template">
<field name="name">Automated Sale Order Notification Mail</field>
- <field name="email_from">${object.user_id.user_email or ''}</field>
+ <field name="email_from">${object.user_id.email or ''}</field>
<field name="subject">${object.company_id.name} Order (Ref ${object.name or 'n/a' })</field>
<field name="email_to">${object.partner_invoice_id.email}</field>
<field name="model_id" ref="sale.model_sale_order"/>
@@ -60,7 +60,7 @@
% if object.client_order_ref:
&nbsp;&nbsp;Your reference: ${object.client_order_ref}<br />
% endif
- &nbsp;&nbsp;Your contact: <a href="mailto:${object.user_id.user_email or ''}?subject=Order%20${object.name}">${object.user_id.name}</a>
+ &nbsp;&nbsp;Your contact: <a href="mailto:${object.user_id.email or ''}?subject=Order%20${object.name}">${object.user_id.name}</a>
</p>
<p>
@@ -139,7 +139,7 @@ Here is your ${object.state in ('draft', 'sent') and 'quotation' or 'order confi
% if object.client_order_ref:
| Your reference: ${object.client_order_ref}<br />
% endif
- | Your contact: ${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''}
+ | Your contact: ${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''}
You can view the ${object.state in ('draft', 'sent') and 'quotation' or 'order confirmation'}, download it and even pay online using the following link:
${ctx.get('edi_web_url_view') or 'n/a'}
@@ -166,7 +166,7 @@ Thank you for choosing ${object.company_id.name}!
--
-${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''}
+${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''}
${object.company_id.name}
% if object.company_id.street:
${object.company_id.street or ''}
diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py
index b14da39633e..598bb085967 100644
--- a/addons/share/wizard/share_wizard.py
+++ b/addons/share/wizard/share_wizard.py
@@ -196,7 +196,7 @@ class share_wizard(osv.TransientModel):
}
def has_email(self, cr, uid, context=None):
- return bool(self.pool.get('res.users').browse(cr, uid, uid, context=context).user_email)
+ return bool(self.pool.get('res.users').browse(cr, uid, uid, context=context).email)
def go_step_1(self, cr, uid, ids, context=None):
wizard_data = self.browse(cr,uid,ids,context)[0]
@@ -241,7 +241,7 @@ class share_wizard(osv.TransientModel):
if not wizard_data.invite:
existing = user_obj.search(cr, UID_ROOT, [('login', '=', new_user)])
else:
- existing = user_obj.search(cr, UID_ROOT, [('user_email', '=', new_user)])
+ existing = user_obj.search(cr, UID_ROOT, [('email', '=', new_user)])
existing_ids.extend(existing)
if existing:
new_line = { 'user_id': existing[0],
@@ -253,7 +253,7 @@ class share_wizard(osv.TransientModel):
'login': new_user,
'password': new_pass,
'name': new_user,
- 'user_email': new_user,
+ 'email': new_user,
'groups_id': [(6,0,[group_id])],
'share': True,
'message_email_pref': 'all',
@@ -825,12 +825,12 @@ class share_wizard(osv.TransientModel):
message_obj = self.pool.get('mail.message')
notification_obj = self.pool.get('mail.notification')
user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
- if not user.user_email:
+ if not user.email:
raise osv.except_osv(_('Email required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.'))
# TODO: also send an HTML version of this mail
for result_line in wizard_data.result_line_ids:
- email_to = result_line.user_id.user_email
+ email_to = result_line.user_id.email
if not email_to:
continue
subject = _('Invitation to collaborate about %s') % (wizard_data.record_name)
@@ -849,20 +849,20 @@ class share_wizard(osv.TransientModel):
body += "--\n"
body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\n"
"It is open source and can be found on http://www.openerp.com.")
- msg_id = message_obj.schedule_with_attach(cr, uid, user.user_email, [email_to], subject, body, model='', context=context)
+ msg_id = message_obj.schedule_with_attach(cr, uid, user.email, [email_to], subject, body, model='', context=context)
notification_obj.create(cr, uid, {'user_id': result_line.user_id.id, 'message_id': msg_id}, context=context)
def send_emails(self, cr, uid, wizard_data, context=None):
_logger.info('Sending share notifications by email...')
mail_message = self.pool.get('mail.message')
user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
- if not user.user_email:
+ if not user.email:
raise osv.except_osv(_('Email required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.'))
# TODO: also send an HTML version of this mail
msg_ids = []
for result_line in wizard_data.result_line_ids:
- email_to = result_line.user_id.user_email
+ email_to = result_line.user_id.email
if not email_to:
continue
subject = wizard_data.name
@@ -883,7 +883,7 @@ class share_wizard(osv.TransientModel):
body += "--\n"
body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\n"
"It is open source and can be found on http://www.openerp.com.")
- msg_ids.append(mail_message.schedule_with_attach(cr, uid, user.user_email, [email_to], subject, body, model='share.wizard', context=context))
+ msg_ids.append(mail_message.schedule_with_attach(cr, uid, user.email, [email_to], subject, body, model='share.wizard', context=context))
# force direct delivery, as users expect instant notification
mail_message.send(cr, uid, msg_ids, context=context)
_logger.info('%d share notification(s) sent.', len(msg_ids))
diff --git a/addons/survey/survey.py b/addons/survey/survey.py
index 0a96d1fde1c..93bd48be30c 100644
--- a/addons/survey/survey.py
+++ b/addons/survey/survey.py
@@ -740,7 +740,7 @@ class survey_request(osv.osv):
if user_id:
user_obj = self.pool.get('res.users')
user = user_obj.browse(cr, uid, user_id, context=context)
- return {'value': {'email': user.user_email}}
+ return {'value': {'email': user.email}}
return {}
survey_request()
diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py
index b3f27ed2970..66098b45fa8 100644
--- a/addons/survey/wizard/survey_answer.py
+++ b/addons/survey/wizard/survey_answer.py
@@ -414,8 +414,8 @@ class survey_question_wiz(osv.osv_memory):
file.close()
os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf")
- user_email = user_obj.browse(cr, uid, uid, context).user_email
- resp_email = survey_data.responsible_id and survey_data.responsible_id.user_email or False
+ user_email = user_obj.browse(cr, uid, uid, context).email
+ resp_email = survey_data.responsible_id and survey_data.responsible_id.email or False
if user_email and resp_email:
user_name = user_obj.browse(cr, uid, uid, context=context).name