[MERGE] res.users inherits res.partner
bzr revid: al@openerp.com-20120815184804-54oh31i61thgmzmw
This commit is contained in:
commit
50275e9ec9
|
@ -19,10 +19,10 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
|
import partner
|
||||||
import account
|
import account
|
||||||
import installer
|
import installer
|
||||||
import project
|
import project
|
||||||
import partner
|
|
||||||
import account_invoice
|
import account_invoice
|
||||||
import account_bank_statement
|
import account_bank_statement
|
||||||
import account_bank
|
import account_bank
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
<!--Email template -->
|
<!--Email template -->
|
||||||
<record id="email_template_edi_invoice" model="email.template">
|
<record id="email_template_edi_invoice" model="email.template">
|
||||||
<field name="name">Automated Invoice Notification Mail</field>
|
<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="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="email_to">${object.partner_id.email or ''}</field>
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
<field name="model_id" ref="account.model_account_invoice"/>
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
% if object.origin:
|
% if object.origin:
|
||||||
Order reference: ${object.origin}<br />
|
Order reference: ${object.origin}<br />
|
||||||
% endif
|
% endif
|
||||||
Your contact: <a href="mailto:${object.user_id.user_email or ''}?subject=Invoice%20${object.number}">${object.user_id.name}</a>
|
Your contact: <a href="mailto:${object.user_id.email or ''}?subject=Invoice%20${object.number}">${object.user_id.name}</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
@ -133,7 +133,7 @@ A new invoice is available for ${object.partner_id.name}:
|
||||||
% if object.origin:
|
% if object.origin:
|
||||||
| Order reference: ${object.origin}
|
| Order reference: ${object.origin}
|
||||||
% endif
|
% 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:
|
You can view the invoice document, download it and pay online using the following link:
|
||||||
${ctx.get('edi_web_url_view') or 'n/a'}
|
${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}
|
${object.company_id.name}
|
||||||
% if object.company_id.street:
|
% if object.company_id.street:
|
||||||
${object.company_id.street or ''}
|
${object.company_id.street or ''}
|
||||||
|
|
|
@ -53,7 +53,7 @@ class analytic_account(osv.osv):
|
||||||
('name', 'not ilike', 'maintenance'),
|
('name', 'not ilike', 'maintenance'),
|
||||||
('partner_id', '!=', False),
|
('partner_id', '!=', False),
|
||||||
('user_id', '!=', False),
|
('user_id', '!=', False),
|
||||||
('user_id.user_email', '!=', False),
|
('user_id.email', '!=', False),
|
||||||
('state', 'in', ('draft', 'open')),
|
('state', 'in', ('draft', 'open')),
|
||||||
'|', ('date', '<', time.strftime('%Y-%m-%d')), ('date', '=', False),
|
'|', ('date', '<', time.strftime('%Y-%m-%d')), ('date', '=', False),
|
||||||
]
|
]
|
||||||
|
@ -70,7 +70,7 @@ class analytic_account(osv.osv):
|
||||||
for user, data in users.iteritems():
|
for user, data in users.iteritems():
|
||||||
subject = '[OPENERP] Reporting: Analytic Accounts'
|
subject = '[OPENERP] Reporting: Analytic Accounts'
|
||||||
body = Template(MAKO_TEMPLATE).render_unicode(user=user, partners=data)
|
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
|
return True
|
||||||
|
|
||||||
|
|
|
@ -255,7 +255,7 @@ class users(osv.osv):
|
||||||
cr, SUPERUSER_ID, conf, login, entry)
|
cr, SUPERUSER_ID, conf, login, entry)
|
||||||
if user_id:
|
if user_id:
|
||||||
cr.execute("""UPDATE res_users
|
cr.execute("""UPDATE res_users
|
||||||
SET date=now() AT TIME ZONE 'UTC'
|
SET login_date=now() AT TIME ZONE 'UTC'
|
||||||
WHERE login=%s""",
|
WHERE login=%s""",
|
||||||
(tools.ustr(login),))
|
(tools.ustr(login),))
|
||||||
cr.commit()
|
cr.commit()
|
||||||
|
|
|
@ -66,7 +66,7 @@ class res_users(osv.osv):
|
||||||
else:
|
else:
|
||||||
with utils.cursor(db) as cr:
|
with utils.cursor(db) as cr:
|
||||||
cr.execute("""UPDATE res_users
|
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""",
|
WHERE login=%s AND openid_key=%s AND active=%s RETURNING id""",
|
||||||
(tools.ustr(login), tools.ustr(password), True))
|
(tools.ustr(login), tools.ustr(password), True))
|
||||||
res = cr.fetchone()
|
res = cr.fetchone()
|
||||||
|
|
|
@ -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 res_config
|
||||||
import auth_signup
|
import auth_signup
|
||||||
|
|
|
@ -1,3 +1,24 @@
|
||||||
|
# -*- 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',
|
'name': 'Signup',
|
||||||
'description': 'Allow users to sign up',
|
'description': 'Allow users to sign up',
|
||||||
|
|
|
@ -1,12 +1,26 @@
|
||||||
|
# -*- 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
|
from openerp.osv import osv, fields
|
||||||
|
|
||||||
class res_users(osv.Model):
|
|
||||||
_inherit = 'res.users'
|
|
||||||
|
|
||||||
_sql_constraints = [
|
|
||||||
('email_uniq', 'UNIQUE (user_email)', 'You can not have two users with the same email!')
|
|
||||||
]
|
|
||||||
|
|
||||||
class signup_signup(osv.TransientModel):
|
class signup_signup(osv.TransientModel):
|
||||||
_name = 'auth.signup'
|
_name = 'auth.signup'
|
||||||
|
|
||||||
|
@ -24,7 +38,7 @@ class signup_signup(osv.TransientModel):
|
||||||
new_user = {
|
new_user = {
|
||||||
'name': values['name'],
|
'name': values['name'],
|
||||||
'login': values['email'],
|
'login': values['email'],
|
||||||
'user_email': values['email'],
|
'email': values['email'],
|
||||||
'password': values['password'],
|
'password': values['password'],
|
||||||
'active': True,
|
'active': True,
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
from openerp.osv import osv, fields
|
||||||
|
|
||||||
class base_config_settings(osv.TransientModel):
|
class base_config_settings(osv.TransientModel):
|
||||||
|
|
|
@ -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_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': 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 \
|
'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 \
|
'object_user_phone': hasattr(obj, 'partner_address_id') and (obj.partner_address_id and \
|
||||||
obj.partner_address_id.phone) or '/',
|
obj.partner_address_id.phone) or '/',
|
||||||
'partner': hasattr(obj, 'partner_id') and (obj.partner_id and obj.partner_id.name) 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')
|
mail_message = self.pool.get('mail.message')
|
||||||
body = self.format_mail(obj, body)
|
body = self.format_mail(obj, body)
|
||||||
if not emailfrom:
|
if not emailfrom:
|
||||||
if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.user_email:
|
if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email:
|
||||||
emailfrom = obj.user_id.user_email
|
emailfrom = obj.user_id.email
|
||||||
|
|
||||||
name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
|
name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
|
||||||
emailfrom = tools.ustr(emailfrom)
|
emailfrom = tools.ustr(emailfrom)
|
||||||
|
@ -419,7 +419,7 @@ the rule to mark CC(mail to any other person defined in actions)."),
|
||||||
emails = []
|
emails = []
|
||||||
if hasattr(obj, 'user_id') and action.act_mail_to_user:
|
if hasattr(obj, 'user_id') and action.act_mail_to_user:
|
||||||
if obj.user_id:
|
if obj.user_id:
|
||||||
emails.append(obj.user_id.user_email)
|
emails.append(obj.user_id.email)
|
||||||
|
|
||||||
if action.act_mail_to_watchers:
|
if action.act_mail_to_watchers:
|
||||||
emails += (action.act_email_cc or '').split(',')
|
emails += (action.act_email_cc or '').split(',')
|
||||||
|
|
|
@ -245,7 +245,7 @@ class calendar_attendee(osv.osv):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
result[id][name] = self._get_address(attdata.sent_by_uid.name, \
|
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 name == 'cn':
|
||||||
if attdata.user_id:
|
if attdata.user_id:
|
||||||
|
@ -289,7 +289,7 @@ class calendar_attendee(osv.osv):
|
||||||
|
|
||||||
if name == 'language':
|
if name == 'language':
|
||||||
user_obj = self.pool.get('res.users')
|
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('_', '-')
|
result[id][name] = lang.replace('_', '-')
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -434,7 +434,7 @@ property or property parameter."),
|
||||||
if not organizer:
|
if not organizer:
|
||||||
organizer = event_obj.user_id
|
organizer = event_obj.user_id
|
||||||
event_org.params['CN'] = [organizer.name]
|
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:
|
if event_obj.alarm_id:
|
||||||
# computes alarm data
|
# computes alarm data
|
||||||
|
@ -535,7 +535,7 @@ property or property parameter."),
|
||||||
return {'value': {'email': ''}}
|
return {'value': {'email': ''}}
|
||||||
usr_obj = self.pool.get('res.users')
|
usr_obj = self.pool.get('res.users')
|
||||||
user = usr_obj.browse(cr, uid, user_id, *args)
|
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):
|
def do_tentative(self, cr, uid, ids, context=None, *args):
|
||||||
""" Makes event invitation as Tentative
|
""" Makes event invitation as Tentative
|
||||||
|
@ -891,9 +891,9 @@ From:
|
||||||
|
|
||||||
""" % (alarm.name, alarm.trigger_date, alarm.description, \
|
""" % (alarm.name, alarm.trigger_date, alarm.description, \
|
||||||
alarm.user_id.name, alarm.user_id.signature)
|
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:
|
for att in alarm.attendee_ids:
|
||||||
mail_to.append(att.user_id.user_email)
|
mail_to.append(att.user_id.email)
|
||||||
if mail_to:
|
if mail_to:
|
||||||
mail_message.schedule_with_attach(cr, uid,
|
mail_message.schedule_with_attach(cr, uid,
|
||||||
tools.config.get('email_from', False),
|
tools.config.get('email_from', False),
|
||||||
|
@ -947,7 +947,7 @@ class calendar_event(osv.osv):
|
||||||
value['duration'] = duration
|
value['duration'] = duration
|
||||||
# change start_date's time to 00:00:00 in the user's timezone
|
# change start_date's time to 00:00:00 in the user's timezone
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid)
|
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 = 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.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
|
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_pool = self.pool.get('res.users')
|
||||||
user = user_pool.browse(cr, uid, uid, context=context)
|
user = user_pool.browse(cr, uid, uid, context=context)
|
||||||
res = user.name
|
res = user.name
|
||||||
if user.user_email:
|
if user.email:
|
||||||
res += " <%s>" %(user.user_email)
|
res += " <%s>" %(user.email)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
|
|
@ -99,12 +99,12 @@ send an Email to Invited Person')
|
||||||
user = user_obj.browse(cr, uid, user_id)
|
user = user_obj.browse(cr, uid, user_id)
|
||||||
res = {
|
res = {
|
||||||
'user_id': user_id,
|
'user_id': user_id,
|
||||||
'email': user.user_email
|
'email': user.email
|
||||||
}
|
}
|
||||||
res.update(ref)
|
res.update(ref)
|
||||||
vals.append(res)
|
vals.append(res)
|
||||||
if user.user_email:
|
if user.email:
|
||||||
mail_to.append(user.user_email)
|
mail_to.append(user.email)
|
||||||
|
|
||||||
elif type == 'external' and datas.get('email'):
|
elif type == 'external' and datas.get('email'):
|
||||||
res = {'email': datas['email']}
|
res = {'email': datas['email']}
|
||||||
|
@ -143,7 +143,7 @@ send an Email to Invited Person')
|
||||||
self._columns['type'].selection))
|
self._columns['type'].selection))
|
||||||
raise osv.except_osv(_('Error!'), _("%s must have an email address to send mail.") %(name[0]))
|
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, \
|
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'}
|
return {'type': 'ir.actions.act_window_close'}
|
||||||
|
|
||||||
|
|
|
@ -213,7 +213,7 @@ class users(osv.osv):
|
||||||
|
|
||||||
# Check if the encrypted password matches against the one in the db.
|
# Check if the encrypted password matches against the one in the db.
|
||||||
cr.execute("""UPDATE res_users
|
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
|
WHERE id=%s AND password=%s AND active
|
||||||
RETURNING id""",
|
RETURNING id""",
|
||||||
(int(id), encrypted_pw.encode('utf-8')))
|
(int(id), encrypted_pw.encode('utf-8')))
|
||||||
|
|
|
@ -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):
|
def make_translations(self, cr, uid, ids, name, type, src, value, res_id=0, context=None):
|
||||||
trans_obj = self.pool.get('ir.translation')
|
trans_obj = self.pool.get('ir.translation')
|
||||||
user_obj = self.pool.get('res.users')
|
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)])
|
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:
|
if existing_trans_ids:
|
||||||
trans_obj.write(cr, uid, existing_trans_ids, {'value': value}, context=context)
|
trans_obj.write(cr, uid, existing_trans_ids, {'value': value}, context=context)
|
||||||
|
|
|
@ -57,7 +57,7 @@ class base_stage(object):
|
||||||
if not context or not context.get('portal'):
|
if not context or not context.get('portal'):
|
||||||
return False
|
return False
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
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):
|
def _get_default_user(self, cr, uid, context=None):
|
||||||
""" Gives current user id
|
""" Gives current user id
|
||||||
|
@ -301,15 +301,15 @@ class base_stage(object):
|
||||||
for case in self.browse(cr, uid, ids, context=context):
|
for case in self.browse(cr, uid, ids, context=context):
|
||||||
if not destination and not case.email_from:
|
if not destination and not case.email_from:
|
||||||
return False
|
return False
|
||||||
if not case.user_id.user_email:
|
if not case.user_id.email:
|
||||||
return False
|
return False
|
||||||
if destination and case.section_id.user_id:
|
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:
|
else:
|
||||||
case_email = case.user_id.user_email
|
case_email = case.user_id.email
|
||||||
|
|
||||||
src = case_email
|
src = case_email
|
||||||
dest = case.user_id.user_email or ""
|
dest = case.user_id.email or ""
|
||||||
body = case.description or ""
|
body = case.description or ""
|
||||||
for message in case.message_ids:
|
for message in case.message_ids:
|
||||||
if message.email_from and message.body_text:
|
if message.email_from and message.body_text:
|
||||||
|
@ -366,8 +366,8 @@ class base_stage(object):
|
||||||
l=[]
|
l=[]
|
||||||
if case.email_cc:
|
if case.email_cc:
|
||||||
l.append(case.email_cc)
|
l.append(case.email_cc)
|
||||||
if case.user_id and case.user_id.user_email:
|
if case.user_id and case.user_id.email:
|
||||||
l.append(case.user_id.user_email)
|
l.append(case.user_id.email)
|
||||||
res[case.id] = l
|
res[case.id] = l
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ class base_state(object):
|
||||||
if not context or not context.get('portal'):
|
if not context or not context.get('portal'):
|
||||||
return False
|
return False
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
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):
|
def _get_default_user(self, cr, uid, context=None):
|
||||||
""" Gives current user id
|
""" Gives current user id
|
||||||
|
|
|
@ -49,8 +49,8 @@ class base_action_rule(osv.osv):
|
||||||
mail_message = self.pool.get('mail.message')
|
mail_message = self.pool.get('mail.message')
|
||||||
body = self.format_mail(obj, body)
|
body = self.format_mail(obj, body)
|
||||||
if not emailfrom:
|
if not emailfrom:
|
||||||
if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.user_email:
|
if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email:
|
||||||
emailfrom = obj.user_id.user_email
|
emailfrom = obj.user_id.email
|
||||||
|
|
||||||
name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
|
name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
|
||||||
emailfrom = tools.ustr(emailfrom)
|
emailfrom = tools.ustr(emailfrom)
|
||||||
|
|
|
@ -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_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),
|
'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),
|
'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),
|
'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
|
# 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.
|
#TOFIX: mail template should be used here instead of fix subject, body text.
|
||||||
message = self.pool.get('mail.message')
|
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:
|
if not email_to:
|
||||||
return False
|
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
|
partner = lead.partner_id and lead.partner_id.name or lead.partner_name
|
||||||
subject = "lead %s converted into opportunity" % lead.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)
|
body = "Info \n Id : %s \n Subject: %s \n Partner: %s \n Description : %s " % (lead.id, lead.name, lead.partner_id.name, lead.description)
|
||||||
|
|
|
@ -43,16 +43,13 @@ class crm_lead_forward_to_partner(osv.osv_memory):
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'send_to' : 'email',
|
'send_to' : 'email',
|
||||||
'history': 'latest',
|
'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, context=None):
|
||||||
|
|
||||||
def on_change_email(self, cr, uid, ids, user):
|
|
||||||
if not user:
|
if not user:
|
||||||
return {'value': {'email_to': False}}
|
return {'value': {'email_to': False}}
|
||||||
email = self.pool.get('res.users')._get_email_from(cr, uid, [user])[user]
|
return {'value': {'email_to': self.pool.get('res.users').browse(cr, uid, uid, context=context).email}}
|
||||||
return {'value': {'email_to': email}}
|
|
||||||
|
|
||||||
def on_change_history(self, cr, uid, ids, history_type, context=None):
|
def on_change_history(self, cr, uid, ids, history_type, context=None):
|
||||||
"""Gives message body according to type of history selected
|
"""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])
|
partner = partner_obj.browse(cr, uid, [partner_id])
|
||||||
user_id = partner and partner[0].user_id or False
|
user_id = partner and partner[0].user_id or False
|
||||||
data.update({'email_from': partner and partner[0].email or "",
|
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})
|
'user_id': user_id and user_id.id or False})
|
||||||
return {'value' : data}
|
return {'value' : data}
|
||||||
|
|
||||||
|
@ -185,7 +182,7 @@ class crm_lead_forward_to_partner(osv.osv_memory):
|
||||||
if partner_assigned_id:
|
if partner_assigned_id:
|
||||||
assigned_partner = partner.browse(cr, uid, partner_assigned_id, context=context)
|
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
|
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
|
email = assigned_partner.email
|
||||||
|
|
||||||
res.update({
|
res.update({
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<record id="confirmation_event" model="email.template">
|
<record id="confirmation_event" model="email.template">
|
||||||
<field name="name">Confirmation of the Event</field>
|
<field name="name">Confirmation of the Event</field>
|
||||||
<field name="model_id" ref="event.model_event_registration"/>
|
<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="email_to" >${object.email}</field>
|
||||||
<field name="subject">Your registration at ${object.event_id.name}</field>
|
<field name="subject">Your registration at ${object.event_id.name}</field>
|
||||||
<field name="body_text">
|
<field name="body_text">
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
<record id="confirmation_registration" model="email.template">
|
<record id="confirmation_registration" model="email.template">
|
||||||
<field name="name">Confirmation of the Registration</field>
|
<field name="name">Confirmation of the Registration</field>
|
||||||
<field name="model_id" ref="event.model_event_registration"/>
|
<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="email_to" >${object.email}</field>
|
||||||
<field name="subject">Your registration at ${object.event_id.name}</field>
|
<field name="subject">Your registration at ${object.event_id.name}</field>
|
||||||
<field name="body_text">
|
<field name="body_text">
|
||||||
|
|
|
@ -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])])
|
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
|
#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:
|
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:
|
else:
|
||||||
register_pool.write(cr, uid, curr_reg_ids, {'nb_register': num_of_seats}, context=context)
|
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)
|
return register_pool.confirm_registration(cr, SUPERUSER_ID, curr_reg_ids, context=context)
|
||||||
|
|
|
@ -252,7 +252,7 @@ class hr_employee(osv.osv):
|
||||||
def onchange_user(self, cr, uid, ids, user_id, context=None):
|
def onchange_user(self, cr, uid, ids, user_id, context=None):
|
||||||
work_email = False
|
work_email = False
|
||||||
if user_id:
|
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}}
|
return {'value': {'work_email' : work_email}}
|
||||||
|
|
||||||
def _get_default_image(self, cr, uid, context=None):
|
def _get_default_image(self, cr, uid, context=None):
|
||||||
|
|
|
@ -228,7 +228,7 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
multi='day_close', type="float", store=True),
|
multi='day_close', type="float", store=True),
|
||||||
'color': fields.integer('Color Index'),
|
'color': fields.integer('Color Index'),
|
||||||
'emp_id': fields.many2one('hr.employee', 'employee'),
|
'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 = {
|
_defaults = {
|
||||||
|
|
|
@ -877,7 +877,7 @@ class sugar_import(import_framework):
|
||||||
else:
|
else:
|
||||||
val['password'] = 'sugarcrm' #default password for all user #TODO needed in documentation
|
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
|
return val
|
||||||
|
|
||||||
def get_users_department(self, val):
|
def get_users_department(self, val):
|
||||||
|
@ -895,10 +895,10 @@ class sugar_import(import_framework):
|
||||||
'map' : {
|
'map' : {
|
||||||
'name': concat('first_name', 'last_name'),
|
'name': concat('first_name', 'last_name'),
|
||||||
'login': value('user_name', fallback='last_name'),
|
'login': value('user_name', fallback='last_name'),
|
||||||
'context_lang' : 'context_lang',
|
'lang' : 'context_lang',
|
||||||
'password' : 'password',
|
'password' : 'password',
|
||||||
'.id' : '.id',
|
'.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):
|
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):
|
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)
|
module_id = self.pool.get('ir.module.module').search(cr, uid, [('name', '=', model), ('state', "=", "installed")], context=context)
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_8">[[ user.name ]] </para>
|
<para style="terp_default_8">[[ user.name ]] </para>
|
||||||
<para style="terp_default_8">[[ user.login ]]</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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</blockTable>
|
</blockTable>
|
||||||
|
|
|
@ -25,8 +25,8 @@ import mail_thread
|
||||||
import mail_group
|
import mail_group
|
||||||
import mail_subscription
|
import mail_subscription
|
||||||
import ir_needaction
|
import ir_needaction
|
||||||
import res_users
|
|
||||||
import res_partner
|
import res_partner
|
||||||
|
import res_users
|
||||||
import report
|
import report
|
||||||
import wizard
|
import wizard
|
||||||
import res_config
|
import res_config
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<value>Welcome to OpenERP!</value>
|
<value>Welcome to OpenERP!</value>
|
||||||
<value>Your homepage is a summary of messages you received and key information about documents you follow.
|
<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 <i>Settings</i> 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 <i>Settings</i> 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>
|
To setup your preferences (name, email signature, avatar), click on the top right corner.</value>
|
||||||
</function>
|
</function>
|
||||||
|
|
|
@ -93,6 +93,9 @@ class mail_message_common(osv.TransientModel):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def name_get(self, cr, uid, ids, context=None):
|
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 = []
|
res = []
|
||||||
for message in self.browse(cr, uid, ids, context=context):
|
for message in self.browse(cr, uid, ids, context=context):
|
||||||
name = ''
|
name = ''
|
||||||
|
@ -208,12 +211,13 @@ class mail_message(osv.Model):
|
||||||
'partner_id': fields.many2one('res.partner', 'Related partner',
|
'partner_id': fields.many2one('res.partner', 'Related partner',
|
||||||
help="Deprecated field. Use partner_ids instead."),
|
help="Deprecated field. Use partner_ids instead."),
|
||||||
'partner_ids': fields.many2many('res.partner',
|
'partner_ids': fields.many2many('res.partner',
|
||||||
'mail_message_destination_partner_rel',
|
'mail_message_res_partner_rel',
|
||||||
'message_id', 'partner_id', 'Destination partners',
|
'message_id', 'partner_id', 'Destination partners',
|
||||||
help="When sending emails through the social network composition wizard"\
|
help="When sending emails through the social network composition wizard"\
|
||||||
"you may choose to send a copy of the mail to partners."),
|
"you may choose to send a copy of the mail to partners."),
|
||||||
'user_id': fields.many2one('res.users', 'Related User', readonly=1),
|
'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),
|
'mail_server_id': fields.many2one('ir.mail_server', 'Outgoing mail server', readonly=1),
|
||||||
'state': fields.selection([
|
'state': fields.selection([
|
||||||
('outgoing', 'Outgoing'),
|
('outgoing', 'Outgoing'),
|
||||||
|
@ -371,7 +375,8 @@ class mail_message(osv.Model):
|
||||||
}
|
}
|
||||||
email_msg_id = self.create(cr, uid, msg_vals, context)
|
email_msg_id = self.create(cr, uid, msg_vals, context)
|
||||||
attachment_ids = []
|
attachment_ids = []
|
||||||
for fname, fcontent in attachments.iteritems():
|
for attachment in attachments:
|
||||||
|
fname, fcontent = attachment
|
||||||
attachment_data = {
|
attachment_data = {
|
||||||
'name': fname,
|
'name': fname,
|
||||||
'datas_fname': fname,
|
'datas_fname': fname,
|
||||||
|
|
|
@ -794,7 +794,7 @@ class mail_thread(osv.Model):
|
||||||
for thread in self.browse(cr, uid, ids, context=context):
|
for thread in self.browse(cr, uid, ids, context=context):
|
||||||
l = set()
|
l = set()
|
||||||
for message in thread.message_ids:
|
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_from or '')
|
||||||
l.add(message.email_cc or '')
|
l.add(message.email_cc or '')
|
||||||
res[thread.id] = filter(None, l)
|
res[thread.id] = filter(None, l)
|
||||||
|
@ -1007,9 +1007,9 @@ class mail_thread(osv.Model):
|
||||||
if not user.notification_email_pref == 'all' and \
|
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):
|
not (user.notification_email_pref == 'to_me' and user.id in user_to_push_from_parse_ids):
|
||||||
continue
|
continue
|
||||||
if not user.user_email:
|
if not user.email:
|
||||||
continue
|
continue
|
||||||
email_to = '%s, %s' % (email_to, user.user_email)
|
email_to = '%s, %s' % (email_to, user.email)
|
||||||
email_to = email_to.lstrip(', ')
|
email_to = email_to.lstrip(', ')
|
||||||
|
|
||||||
# did not find any email address: not necessary to create an email
|
# 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]
|
current_user = res_users_obj.browse(cr, uid, [uid], context=context)[0]
|
||||||
email_from = new_msg_values.get('email_from')
|
email_from = new_msg_values.get('email_from')
|
||||||
if not 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)
|
# 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)
|
email_values = self.message_create_notify_get_email_dict(cr, uid, new_msg_values, email_from, email_to, context)
|
||||||
|
|
|
@ -20,20 +20,28 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from osv import osv
|
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 """
|
""" Inherits partner and adds CRM information in the partner form """
|
||||||
_name = "res.partner"
|
_name = "res.partner"
|
||||||
_inherit = ['res.partner', 'mail.thread']
|
_inherit = ['res.partner', 'mail.thread']
|
||||||
|
|
||||||
def message_search_get_domain(self, cr, uid, ids, context=None):
|
def message_search_get_domain(self, cr, uid, ids, context=None):
|
||||||
""" Override of message_search_get_domain for partner discussion page.
|
""" 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)
|
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
|
# 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)]
|
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
|
return search_domain
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -28,28 +28,27 @@ from tools.translate import _
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class res_users(osv.osv):
|
class res_users(osv.Model):
|
||||||
""" Update of res.users class
|
""" Update of res.users class
|
||||||
- add a preference about sending emails about notifications
|
- add a preference about sending emails about notifications
|
||||||
- make a new user follow itself
|
- make a new user follow itself
|
||||||
- add a welcome message
|
- add a welcome message
|
||||||
"""
|
"""
|
||||||
_name = 'res.users'
|
_name = 'res.users'
|
||||||
_inherit = ['res.users', 'mail.thread']
|
_inherit = ['res.users']
|
||||||
_inherits = {'mail.alias': 'alias_id'}
|
_inherits = {'mail.alias': 'alias_id'}
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'notification_email_pref': fields.selection([
|
'notification_email_pref': fields.selection([
|
||||||
('all', 'All feeds'),
|
('all', 'All Feeds'),
|
||||||
('comments', 'Only comments'),
|
('to_me', 'Only send directly to me'),
|
||||||
('to_me', 'Only when sent directly to me'),
|
|
||||||
('none', 'Never')
|
('none', 'Never')
|
||||||
], 'Receive Feeds by Email', required=True,
|
], 'Receive Feeds by Email', required=True,
|
||||||
help="Choose in which case you want to receive an email when you "\
|
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,
|
'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True,
|
||||||
help="Email address internally associated with this user. Incoming emails will appear "
|
help="Email address internally associated with this user. Incoming "\
|
||||||
"in the user's notifications."),
|
"emails will appear in the user's notifications."),
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
@ -100,25 +99,29 @@ class res_users(osv.osv):
|
||||||
|
|
||||||
self._columns['alias_id'].required = True
|
self._columns['alias_id'].required = True
|
||||||
|
|
||||||
|
|
||||||
def create(self, cr, uid, data, context=None):
|
def create(self, cr, uid, data, context=None):
|
||||||
# create default alias same as the login
|
# create default alias same as the login
|
||||||
mail_alias = self.pool.get('mail.alias')
|
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)
|
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['alias_id'] = alias_id
|
||||||
data.pop('alias_name', None) # prevent errors during copy()
|
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)
|
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)
|
user = self.browse(cr, uid, user_id, context=context)
|
||||||
# make user follow itself
|
self.pool.get('res.partner').message_subscribe(cr, uid, [user.partner_id.id], [user_id], context=context)
|
||||||
self.message_subscribe(cr, uid, [user_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
|
# create a welcome message
|
||||||
company_name = user.company_id.name if user.company_id else _('the company')
|
self.create_welcome_message(cr, uid, user, context=context)
|
||||||
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)
|
|
||||||
return user_id
|
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):
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
# User alias is sync'ed with login
|
# User alias is sync'ed with login
|
||||||
if vals.get('login'): vals['alias_name'] = vals['login']
|
if vals.get('login'): vals['alias_name'] = vals['login']
|
||||||
|
@ -132,27 +135,55 @@ class res_users(osv.osv):
|
||||||
alias_pool.unlink(cr, uid, alias_ids, context=context)
|
alias_pool.unlink(cr, uid, alias_ids, context=context)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def message_search_get_domain(self, cr, uid, ids, context=None):
|
# --------------------------------------------------
|
||||||
""" Override of message_search_get_domain for partner discussion page.
|
# Wrappers on partner methods for Chatter
|
||||||
The purpose is to add messages directly sent to user using
|
# #FIXME: another branch holds a refactoring of mail.thread
|
||||||
@user_login.
|
# that should help cleaning those wrappers
|
||||||
"""
|
# --------------------------------------------------
|
||||||
initial_domain = super(res_users, self).message_search_get_domain(cr, uid, ids, context=context)
|
|
||||||
custom_domain = []
|
|
||||||
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
|
|
||||||
|
|
||||||
class res_users_mail_group(osv.osv):
|
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):
|
||||||
|
return user.partner_id.message_search(fetch_ancestors, ancestor_ids, limit, offset, domain, count)
|
||||||
|
|
||||||
|
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
|
""" Update of res.groups class
|
||||||
- if adding/removing users from a group, check mail.groups linked to
|
- if adding/removing users from a group, check mail.groups linked to
|
||||||
this user group, and subscribe / unsubscribe them from the discussion
|
this user group, and subscribe / unsubscribe them from the discussion
|
||||||
group. This is done by overriding the write method.
|
group. This is done by overriding the write method.
|
||||||
"""
|
"""
|
||||||
_name = 'res.users'
|
_name = 'res.users'
|
||||||
_inherit = ['res.users', 'mail.thread']
|
_inherit = ['res.users']
|
||||||
|
|
||||||
def write(self, cr, uid, ids, vals, context=None):
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
write_res = super(res_users_mail_group, self).write(cr, uid, ids, vals, context=context)
|
write_res = super(res_users_mail_group, self).write(cr, uid, ids, vals, context=context)
|
||||||
|
@ -165,8 +196,7 @@ class res_users_mail_group(osv.osv):
|
||||||
mail_group_obj.message_subscribe(cr, uid, mail_group_ids, ids, context=context)
|
mail_group_obj.message_subscribe(cr, uid, mail_group_ids, ids, context=context)
|
||||||
return write_res
|
return write_res
|
||||||
|
|
||||||
|
class res_groups_mail_group(osv.Model):
|
||||||
class res_groups_mail_group(osv.osv):
|
|
||||||
""" Update of res.groups class
|
""" Update of res.groups class
|
||||||
- if adding/removing users from a group, check mail.groups linked to
|
- if adding/removing users from a group, check mail.groups linked to
|
||||||
this user group, and subscribe / unsubscribe them from the discussion
|
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_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)
|
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)
|
return super(res_groups_mail_group, self).write(cr, uid, ids, vals, context=context)
|
||||||
|
|
||||||
|
# vim:et:
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
|
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<data>
|
<data>
|
||||||
<field name="user_email" position="before">
|
<field name="email" position="before">
|
||||||
<field name="notification_email_pref" readonly="0"/>
|
<field name="notification_email_pref" readonly="0"/>
|
||||||
</field>
|
</field>
|
||||||
</data>
|
</data>
|
||||||
|
@ -23,15 +23,10 @@
|
||||||
<field name="inherit_id" ref="base.view_users_form"/>
|
<field name="inherit_id" ref="base.view_users_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<data>
|
<data>
|
||||||
<field name="user_email" position="before">
|
<field name="email" position="before">
|
||||||
<field name="notification_email_pref"/>
|
<field name="notification_email_pref"/>
|
||||||
</field>
|
</field>
|
||||||
<xpath expr="/form/sheet" position="after">
|
<field name="email" 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="alias_domain" invisible="1"/>
|
<field name="alias_domain" invisible="1"/>
|
||||||
<field name="alias_id" readonly="1" required="0" attrs="{'invisible': [('alias_domain', '=', False)]}"/>
|
<field name="alias_id" readonly="1" required="0" attrs="{'invisible': [('alias_domain', '=', False)]}"/>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -1021,7 +1021,6 @@ openerp.mail = function(session) {
|
||||||
if (this.compose_message_widget) {
|
if (this.compose_message_widget) {
|
||||||
this.compose_message_widget.destroy();
|
this.compose_message_widget.destroy();
|
||||||
}
|
}
|
||||||
debugger;
|
|
||||||
this.compose_message_widget = new mail.ComposeMessage(this, {
|
this.compose_message_widget = new mail.ComposeMessage(this, {
|
||||||
'extended_mode': false, 'uid': this.session.uid, 'res_model': this.params.res_model,
|
'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 });
|
'res_id': this.params.res_id, 'mode': mode || 'comment', 'msg_id': msg_id });
|
||||||
|
|
|
@ -100,7 +100,7 @@ class mail_compose_message(osv.TransientModel):
|
||||||
# Try to provide default email_from if not specified yet
|
# Try to provide default email_from if not specified yet
|
||||||
if not result.get('email_from'):
|
if not result.get('email_from'):
|
||||||
current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
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
|
return result
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
|
@ -133,7 +133,7 @@ class mail_compose_message(osv.TransientModel):
|
||||||
result.update({
|
result.update({
|
||||||
'model': model,
|
'model': model,
|
||||||
'res_id': res_id,
|
'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_html': False,
|
||||||
'body_text': False,
|
'body_text': False,
|
||||||
'subject': False,
|
'subject': False,
|
||||||
|
@ -223,7 +223,7 @@ class mail_compose_message(osv.TransientModel):
|
||||||
'dest_partner_ids': dest_partner_ids,
|
'dest_partner_ids': dest_partner_ids,
|
||||||
'model': message_data.model or False,
|
'model': message_data.model or False,
|
||||||
'res_id': message_data.res_id 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_to': message_data.reply_to or message_data.email_from or False,
|
||||||
'email_cc': message_data.email_cc or False,
|
'email_cc': message_data.email_cc or False,
|
||||||
'user_id': uid,
|
'user_id': uid,
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
|
|
||||||
import portal
|
import portal
|
||||||
import wizard
|
import wizard
|
||||||
import res_user
|
|
||||||
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -43,7 +43,6 @@ very handy when used in combination with the module 'share'.
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
'portal_view.xml',
|
'portal_view.xml',
|
||||||
'portal_data.xml',
|
'portal_data.xml',
|
||||||
'res_user_view.xml',
|
|
||||||
'wizard/portal_wizard_view.xml',
|
'wizard/portal_wizard_view.xml',
|
||||||
'wizard/share_wizard_view.xml',
|
'wizard/share_wizard_view.xml',
|
||||||
],
|
],
|
||||||
|
|
|
@ -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:
|
|
|
@ -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>
|
|
|
@ -26,7 +26,7 @@ from osv import osv, fields
|
||||||
from tools.misc import email_re
|
from tools.misc import email_re
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
|
|
||||||
from base.res.res_users import _lang_get
|
from base.res.res_partner import _lang_get
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,9 +62,9 @@ def random_password():
|
||||||
random.shuffle(chars)
|
random.shuffle(chars)
|
||||||
return ''.join(chars)
|
return ''.join(chars)
|
||||||
|
|
||||||
def extract_email(user_email):
|
def extract_email(email):
|
||||||
""" extract the email address from a user-friendly email address """
|
""" 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 ""
|
return m and m.group(0) or ""
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ class wizard(osv.osv_memory):
|
||||||
|
|
||||||
return{
|
return{
|
||||||
'name': address.name,
|
'name': address.name,
|
||||||
'user_email': extract_email(address.email),
|
'email': extract_email(address.email),
|
||||||
'lang': lang,
|
'lang': lang,
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ class wizard(osv.osv_memory):
|
||||||
|
|
||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
user = user_obj.browse(cr, ROOT_UID, uid, context0)
|
user = user_obj.browse(cr, ROOT_UID, uid, context0)
|
||||||
if not user.user_email:
|
if not user.email:
|
||||||
raise osv.except_osv(_('Email required'),
|
raise osv.except_osv(_('Email required'),
|
||||||
_('You must have an email address in your User Preferences'
|
_('You must have an email address in your User Preferences'
|
||||||
' to send emails.'))
|
' to send emails.'))
|
||||||
|
@ -144,7 +144,7 @@ class wizard(osv.osv_memory):
|
||||||
portal_obj = self.pool.get('res.portal')
|
portal_obj = self.pool.get('res.portal')
|
||||||
for wiz in self.browse(cr, uid, ids, context):
|
for wiz in self.browse(cr, uid, ids, context):
|
||||||
# determine existing users
|
# 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_uids = user_obj.search(cr, ROOT_UID, login_cond)
|
||||||
existing_users = user_obj.browse(cr, ROOT_UID, existing_uids)
|
existing_users = user_obj.browse(cr, ROOT_UID, existing_uids)
|
||||||
existing_logins = [u.login for u in existing_users]
|
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)
|
# create new users in portal (skip existing logins)
|
||||||
new_users_data = [ {
|
new_users_data = [ {
|
||||||
'name': u.name,
|
'name': u.name,
|
||||||
'login': u.user_email,
|
'login': u.email,
|
||||||
'password': random_password(),
|
'password': random_password(),
|
||||||
'user_email': u.user_email,
|
'email': u.email,
|
||||||
'context_lang': u.lang,
|
'lang': u.lang,
|
||||||
'share': True,
|
'share': True,
|
||||||
'action_id': wiz.portal_id.home_action_id and wiz.portal_id.home_action_id.id or False,
|
'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,
|
'partner_id': u.partner_id and u.partner_id.id,
|
||||||
'groups_id': [(6, 0, [])],
|
'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],
|
portal_obj.write(cr, ROOT_UID, [wiz.portal_id.id],
|
||||||
{'users': [(0, 0, data) for data in new_users_data]}, context0)
|
{'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_uids = user_obj.search(cr, ROOT_UID, login_cond)
|
||||||
dest_users = user_obj.browse(cr, ROOT_UID, dest_uids)
|
dest_users = user_obj.browse(cr, ROOT_UID, dest_uids)
|
||||||
for dest_user in dest_users:
|
for dest_user in dest_users:
|
||||||
context['lang'] = dest_user.context_lang
|
context['lang'] = dest_user.lang
|
||||||
data['login'] = dest_user.login
|
data['login'] = dest_user.login
|
||||||
data['password'] = dest_user.password
|
data['password'] = dest_user.password
|
||||||
data['name'] = dest_user.name
|
data['name'] = dest_user.name
|
||||||
|
|
||||||
email_from = user.user_email
|
email_from = user.email
|
||||||
email_to = dest_user.user_email
|
email_to = dest_user.email
|
||||||
subject = _(WELCOME_EMAIL_SUBJECT) % data
|
subject = _(WELCOME_EMAIL_SUBJECT) % data
|
||||||
body = _(WELCOME_EMAIL_BODY) % data
|
body = _(WELCOME_EMAIL_BODY) % data
|
||||||
res = mail_message_obj.schedule_with_attach(cr, uid, email_from , [email_to], subject, body, context=context)
|
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,
|
'name': fields.char(size=64, required=True,
|
||||||
string='User Name',
|
string='User Name',
|
||||||
help="The user's real name"),
|
help="The user's real name"),
|
||||||
'user_email': fields.char(size=64, required=True,
|
'email': fields.char(size=64, required=True,
|
||||||
string='Email',
|
string='Email',
|
||||||
help="Will be used as user login. "
|
help="Will be used as user login. "
|
||||||
"Also necessary to send the account information to new users"),
|
"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):
|
def _check_email(self, cr, uid, ids):
|
||||||
""" check syntax of email address """
|
""" check syntax of email address """
|
||||||
for wuser in self.browse(cr, uid, ids):
|
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
|
return True
|
||||||
|
|
||||||
_constraints = [
|
_constraints = [
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
editable in the web client 6.0 -->
|
editable in the web client 6.0 -->
|
||||||
<tree string="Portal Users" editable="bottom">
|
<tree string="Portal Users" editable="bottom">
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="user_email"/>
|
<field name="email"/>
|
||||||
<field name="partner_id"/>
|
<field name="partner_id"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
<form string="Portal User" version="7.0">
|
<form string="Portal User" version="7.0">
|
||||||
<group colspan="2" col="2">
|
<group colspan="2" col="2">
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="user_email"/>
|
<field name="email"/>
|
||||||
<field name="lang"/>
|
<field name="lang"/>
|
||||||
<field name="partner_id"/>
|
<field name="partner_id"/>
|
||||||
</group>
|
</group>
|
||||||
|
|
|
@ -50,7 +50,7 @@ class crm_contact_us(osv.TransientModel):
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||||
|
|
||||||
if (user.login != 'anonymous'):
|
if (user.login != 'anonymous'):
|
||||||
return user.user_email
|
return user.email
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,7 @@ class procurement_order(osv.osv):
|
||||||
|
|
||||||
Exceptions:\n""") % (start_date, end_date, report_total, report_except, report_later)
|
Exceptions:\n""") % (start_date, end_date, report_total, report_except, report_later)
|
||||||
summary += '\n'.join(report)
|
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:
|
if use_new_cursor:
|
||||||
cr.commit()
|
cr.commit()
|
||||||
|
@ -234,7 +234,6 @@ class procurement_order(osv.osv):
|
||||||
location_obj = self.pool.get('stock.location')
|
location_obj = self.pool.get('stock.location')
|
||||||
procurement_obj = self.pool.get('procurement.order')
|
procurement_obj = self.pool.get('procurement.order')
|
||||||
wf_service = netsvc.LocalService("workflow")
|
wf_service = netsvc.LocalService("workflow")
|
||||||
report = []
|
|
||||||
offset = 0
|
offset = 0
|
||||||
ids = [1]
|
ids = [1]
|
||||||
if automatic:
|
if automatic:
|
||||||
|
@ -288,9 +287,6 @@ class procurement_order(osv.osv):
|
||||||
offset += len(ids)
|
offset += len(ids)
|
||||||
if use_new_cursor:
|
if use_new_cursor:
|
||||||
cr.commit()
|
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:
|
if use_new_cursor:
|
||||||
cr.commit()
|
cr.commit()
|
||||||
cr.close()
|
cr.close()
|
||||||
|
|
|
@ -797,7 +797,7 @@ class task(base_stage, osv.osv):
|
||||||
'company_id': fields.many2one('res.company', 'Company'),
|
'company_id': fields.many2one('res.company', 'Company'),
|
||||||
'id': fields.integer('ID', readonly=True),
|
'id': fields.integer('ID', readonly=True),
|
||||||
'color': fields.integer('Color Index'),
|
'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 = {
|
_defaults = {
|
||||||
|
|
|
@ -256,7 +256,7 @@ class project_issue(base_stage, osv.osv):
|
||||||
'inactivity_days': fields.function(_compute_day, string='Days since last action', \
|
'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"),
|
multi='compute_day', type="integer", help="Difference in days between last action and current date"),
|
||||||
'color': fields.integer('Color Index'),
|
'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_last': fields.datetime('Last Action', readonly=1),
|
||||||
'date_action_next': fields.datetime('Next 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.",
|
'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
|
||||||
|
|
|
@ -73,7 +73,7 @@ class project_tasks(osv.osv):
|
||||||
followers = super(project_tasks,self).message_thread_followers(cr, uid, ids, context=context)
|
followers = super(project_tasks,self).message_thread_followers(cr, uid, ids, context=context)
|
||||||
for task in self.browse(cr, uid, followers.keys(), context=context):
|
for task in self.browse(cr, uid, followers.keys(), context=context):
|
||||||
task_followers = set(followers[task.id])
|
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)
|
followers[task.id] = filter(None, task_followers)
|
||||||
return followers
|
return followers
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,8 @@
|
||||||
-
|
-
|
||||||
!record {model: res.users, id: res_users_hrmanager0}:
|
!record {model: res.users, id: res_users_hrmanager0}:
|
||||||
company_id: base.main_company
|
company_id: base.main_company
|
||||||
context_lang: en_US
|
|
||||||
login: hr
|
|
||||||
name: HR Manager
|
name: HR Manager
|
||||||
|
login: hr
|
||||||
password: hr
|
password: hr
|
||||||
groups_id:
|
groups_id:
|
||||||
- base.group_hr_manager
|
- base.group_hr_manager
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
<!--Email template -->
|
<!--Email template -->
|
||||||
<record id="email_template_edi_purchase" model="email.template">
|
<record id="email_template_edi_purchase" model="email.template">
|
||||||
<field name="name">Automated Purchase Order Notification Mail</field>
|
<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="subject">${object.company_id.name} Order (Ref ${object.name or 'n/a' })</field>
|
||||||
<field name="email_to">${object.partner_id.email}</field>
|
<field name="email_to">${object.partner_id.email}</field>
|
||||||
<field name="model_id" ref="purchase.model_purchase_order"/>
|
<field name="model_id" ref="purchase.model_purchase_order"/>
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
% if object.partner_ref:
|
% if object.partner_ref:
|
||||||
Your reference: ${object.partner_ref}<br />
|
Your reference: ${object.partner_ref}<br />
|
||||||
% endif
|
% endif
|
||||||
Your contact: <a href="mailto:${object.validator.user_email or ''}?subject=Order%20${object.name}">${object.validator.name}</a>
|
Your contact: <a href="mailto:${object.validator.email or ''}?subject=Order%20${object.name}">${object.validator.name}</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
@ -121,7 +121,7 @@ Here is a ${object.state in ('draft', 'sent') and 'request for quotation' or 'pu
|
||||||
% if object.partner_ref:
|
% if object.partner_ref:
|
||||||
| Your reference: ${object.partner_ref}<br />
|
| Your reference: ${object.partner_ref}<br />
|
||||||
% endif
|
% 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:
|
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'}
|
${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}
|
${object.company_id.name}
|
||||||
% if object.company_id.street:
|
% if object.company_id.street:
|
||||||
${object.company_id.street or ''}
|
${object.company_id.street or ''}
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
<!--Email template -->
|
<!--Email template -->
|
||||||
<record id="email_template_edi_sale" model="email.template">
|
<record id="email_template_edi_sale" model="email.template">
|
||||||
<field name="name">Automated Sale Order Notification Mail</field>
|
<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="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="email_to">${object.partner_invoice_id.email}</field>
|
||||||
<field name="model_id" ref="sale.model_sale_order"/>
|
<field name="model_id" ref="sale.model_sale_order"/>
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
% if object.client_order_ref:
|
% if object.client_order_ref:
|
||||||
Your reference: ${object.client_order_ref}<br />
|
Your reference: ${object.client_order_ref}<br />
|
||||||
% endif
|
% endif
|
||||||
Your contact: <a href="mailto:${object.user_id.user_email or ''}?subject=Order%20${object.name}">${object.user_id.name}</a>
|
Your contact: <a href="mailto:${object.user_id.email or ''}?subject=Order%20${object.name}">${object.user_id.name}</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
@ -139,7 +139,7 @@ Here is your ${object.state in ('draft', 'sent') and 'quotation' or 'order confi
|
||||||
% if object.client_order_ref:
|
% if object.client_order_ref:
|
||||||
| Your reference: ${object.client_order_ref}<br />
|
| Your reference: ${object.client_order_ref}<br />
|
||||||
% endif
|
% 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:
|
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'}
|
${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}
|
${object.company_id.name}
|
||||||
% if object.company_id.street:
|
% if object.company_id.street:
|
||||||
${object.company_id.street or ''}
|
${object.company_id.street or ''}
|
||||||
|
|
|
@ -196,7 +196,7 @@ class share_wizard(osv.TransientModel):
|
||||||
}
|
}
|
||||||
|
|
||||||
def has_email(self, cr, uid, context=None):
|
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):
|
def go_step_1(self, cr, uid, ids, context=None):
|
||||||
wizard_data = self.browse(cr,uid,ids,context)[0]
|
wizard_data = self.browse(cr,uid,ids,context)[0]
|
||||||
|
@ -241,7 +241,7 @@ class share_wizard(osv.TransientModel):
|
||||||
if not wizard_data.invite:
|
if not wizard_data.invite:
|
||||||
existing = user_obj.search(cr, UID_ROOT, [('login', '=', new_user)])
|
existing = user_obj.search(cr, UID_ROOT, [('login', '=', new_user)])
|
||||||
else:
|
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)
|
existing_ids.extend(existing)
|
||||||
if existing:
|
if existing:
|
||||||
new_line = { 'user_id': existing[0],
|
new_line = { 'user_id': existing[0],
|
||||||
|
@ -253,7 +253,7 @@ class share_wizard(osv.TransientModel):
|
||||||
'login': new_user,
|
'login': new_user,
|
||||||
'password': new_pass,
|
'password': new_pass,
|
||||||
'name': new_user,
|
'name': new_user,
|
||||||
'user_email': new_user,
|
'email': new_user,
|
||||||
'groups_id': [(6,0,[group_id])],
|
'groups_id': [(6,0,[group_id])],
|
||||||
'share': True,
|
'share': True,
|
||||||
'message_email_pref': 'all',
|
'message_email_pref': 'all',
|
||||||
|
@ -825,12 +825,12 @@ class share_wizard(osv.TransientModel):
|
||||||
message_obj = self.pool.get('mail.message')
|
message_obj = self.pool.get('mail.message')
|
||||||
notification_obj = self.pool.get('mail.notification')
|
notification_obj = self.pool.get('mail.notification')
|
||||||
user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
|
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.'))
|
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
|
# TODO: also send an HTML version of this mail
|
||||||
for result_line in wizard_data.result_line_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:
|
if not email_to:
|
||||||
continue
|
continue
|
||||||
subject = _('Invitation to collaborate about %s') % (wizard_data.record_name)
|
subject = _('Invitation to collaborate about %s') % (wizard_data.record_name)
|
||||||
|
@ -849,20 +849,20 @@ class share_wizard(osv.TransientModel):
|
||||||
body += "--\n"
|
body += "--\n"
|
||||||
body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\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.")
|
"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)
|
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):
|
def send_emails(self, cr, uid, wizard_data, context=None):
|
||||||
_logger.info('Sending share notifications by email...')
|
_logger.info('Sending share notifications by email...')
|
||||||
mail_message = self.pool.get('mail.message')
|
mail_message = self.pool.get('mail.message')
|
||||||
user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
|
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.'))
|
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
|
# TODO: also send an HTML version of this mail
|
||||||
msg_ids = []
|
msg_ids = []
|
||||||
for result_line in wizard_data.result_line_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:
|
if not email_to:
|
||||||
continue
|
continue
|
||||||
subject = wizard_data.name
|
subject = wizard_data.name
|
||||||
|
@ -883,7 +883,7 @@ class share_wizard(osv.TransientModel):
|
||||||
body += "--\n"
|
body += "--\n"
|
||||||
body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\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.")
|
"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
|
# force direct delivery, as users expect instant notification
|
||||||
mail_message.send(cr, uid, msg_ids, context=context)
|
mail_message.send(cr, uid, msg_ids, context=context)
|
||||||
_logger.info('%d share notification(s) sent.', len(msg_ids))
|
_logger.info('%d share notification(s) sent.', len(msg_ids))
|
||||||
|
|
|
@ -740,7 +740,7 @@ class survey_request(osv.osv):
|
||||||
if user_id:
|
if user_id:
|
||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
user = user_obj.browse(cr, uid, user_id, context=context)
|
user = user_obj.browse(cr, uid, user_id, context=context)
|
||||||
return {'value': {'email': user.user_email}}
|
return {'value': {'email': user.email}}
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
survey_request()
|
survey_request()
|
||||||
|
|
|
@ -414,8 +414,8 @@ class survey_question_wiz(osv.osv_memory):
|
||||||
file.close()
|
file.close()
|
||||||
os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf")
|
os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf")
|
||||||
|
|
||||||
user_email = user_obj.browse(cr, uid, uid, context).user_email
|
user_email = user_obj.browse(cr, uid, uid, context).email
|
||||||
resp_email = survey_data.responsible_id and survey_data.responsible_id.user_email or False
|
resp_email = survey_data.responsible_id and survey_data.responsible_id.email or False
|
||||||
|
|
||||||
if user_email and resp_email:
|
if user_email and resp_email:
|
||||||
user_name = user_obj.browse(cr, uid, uid, context=context).name
|
user_name = user_obj.browse(cr, uid, uid, context=context).name
|
||||||
|
|
Loading…
Reference in New Issue