diff --git a/addons/portal/portal_data.xml b/addons/portal/portal_data.xml
index 273d1a8c463..deaba0bebf2 100644
--- a/addons/portal/portal_data.xml
+++ b/addons/portal/portal_data.xml
@@ -7,5 +7,49 @@
+
+ Welcome New Portal User
+
+ ${(user.email or '')|safe}
+ ${object.partner_id.email}
+ Your Odoo account at ${user.company_id.name|safe}
+ ${object.partner_id.lang}
+
+
+
+ Dear ${object.user_id.name or ''},
+
+
+ You have been given access to ${user.company_id.name}'s ${object.wizard_id.portal_id.name}.
+
+
+ Your login account data is:
+
+
+ - Username: ${object.user_id.login or ''}
+
+
+
+ - Database: ${'dbname' in ctx and ctx['dbname'] or ''}
+
+
+ You can set or change your password via the following url:
+
+
+
+ ${object.wizard_id.welcome_message or ''}
+
+ ---
+ Odoo - Open Source Business Applications
+ http://www.odoo.com
+
+ ]]>
+
+
diff --git a/addons/portal/wizard/portal_wizard.py b/addons/portal/wizard/portal_wizard.py
index 08234e35596..161ba96827a 100644
--- a/addons/portal/wizard/portal_wizard.py
+++ b/addons/portal/wizard/portal_wizard.py
@@ -13,25 +13,6 @@ _logger = logging.getLogger(__name__)
# welcome email sent to portal users
# (note that calling '_' has no effect except exporting those strings for translation)
-WELCOME_EMAIL_SUBJECT = _("Your Odoo account at %(company)s")
-WELCOME_EMAIL_BODY = _("""Dear %(name)s,
-
-You have been given access to %(company)s's %(portal)s.
-
-Your login account data is:
- Username: %(login)s
- Portal: %(portal_url)s
- Database: %(db)s
-
-You can set or change your password via the following url:
- %(signup_url)s
-
-%(welcome_message)s
-
---
-Odoo - Open Source Business Applications
-http://www.openerp.com
-""")
def extract_email(email):
@@ -103,6 +84,7 @@ class wizard_user(osv.osv_memory):
'partner_id': fields.many2one('res.partner', string='Contact', required=True, readonly=True),
'email': fields.char(string='Email', size=240),
'in_portal': fields.boolean('In Portal'),
+ 'user_id': fields.many2one('res.users', string='Login User'),
}
def get_error_messages(self, cr, uid, ids, context=None):
@@ -113,7 +95,7 @@ class wizard_user(osv.osv_memory):
error_user = []
ctx = dict(context or {}, active_test=False)
for wizard_user in self.browse(cr, SUPERUSER_ID, ids, context):
- if wizard_user.in_portal and not self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context):
+ if wizard_user.in_portal and not wizard_user.user_id:
email = extract_email(wizard_user.email)
if not email:
error_empty.append(wizard_user.partner_id)
@@ -147,44 +129,34 @@ class wizard_user(osv.osv_memory):
for wizard_user in self.browse(cr, SUPERUSER_ID, ids, context):
portal = wizard_user.wizard_id.portal_id
- user = self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context)
if wizard_user.partner_id.email != wizard_user.email:
wizard_user.partner_id.write({'email': wizard_user.email})
if wizard_user.in_portal:
# create a user if necessary, and make sure it is in the portal group
- if not user:
- user = self._create_user(cr, SUPERUSER_ID, wizard_user, context)
- if (not user.active) or (portal not in user.groups_id):
- user.write({'active': True, 'groups_id': [(4, portal.id)]})
+ if not wizard_user.user_id:
+ user = self._create_user(cr, SUPERUSER_ID, wizard_user.id, context)
+ wizard_user.write({'user_id': user})
+ if (not wizard_user.user_id.active) or (portal not in wizard_user.user_id.groups_id):
+ wizard_user.user_id.write({'active': True, 'groups_id': [(4, portal.id)]})
# prepare for the signup process
- user.partner_id.signup_prepare()
+ wizard_user.user_id.partner_id.signup_prepare()
wizard_user.refresh()
- self._send_email(cr, uid, wizard_user, context)
+ self._send_email(cr, uid, wizard_user.id, context)
else:
# remove the user (if it exists) from the portal group
- if user and (portal in user.groups_id):
+ if wizard_user.user_id and (portal in wizard_user.user_id.groups_id):
# if user belongs to portal only, deactivate it
- if len(user.groups_id) <= 1:
- user.write({'groups_id': [(3, portal.id)], 'active': False})
+ if len(wizard_user.user_id.groups_id) <= 1:
+ wizard_user.user_id.write({'groups_id': [(3, portal.id)], 'active': False})
else:
- user.write({'groups_id': [(3, portal.id)]})
+ wizard_user.user_id.write({'groups_id': [(3, portal.id)]})
- def _retrieve_user(self, cr, uid, wizard_user, context=None):
- """ retrieve the (possibly inactive) user corresponding to wizard_user.partner_id
- @param wizard_user: browse record of model portal.wizard.user
- @return: browse record of model res.users
- """
- context = dict(context or {}, active_test=False)
- res_users = self.pool.get('res.users')
- domain = [('partner_id', '=', wizard_user.partner_id.id)]
- user_ids = res_users.search(cr, uid, domain, context=context)
- return user_ids and res_users.browse(cr, uid, user_ids[0], context=context) or False
-
- def _create_user(self, cr, uid, wizard_user, context=None):
+ def _create_user(self, cr, uid, ids, context=None):
""" create a new user for wizard_user.partner_id
@param wizard_user: browse record of model portal.wizard.user
@return: browse record of model res.users
"""
+ wizard_user = self.browse(cr, uid, ids[0], context=context)
res_users = self.pool.get('res.users')
create_context = dict(context or {}, noshortcut=True, no_reset_password=True) # to prevent shortcut creation
values = {
@@ -193,47 +165,32 @@ class wizard_user(osv.osv_memory):
'partner_id': wizard_user.partner_id.id,
'groups_id': [(6, 0, [])],
}
- user_id = res_users.create(cr, uid, values, context=create_context)
- return res_users.browse(cr, uid, user_id, context)
+ return res_users.create(cr, uid, values, context=create_context)
- def _send_email(self, cr, uid, wizard_user, context=None):
+ def _send_email(self, cr, uid, ids, context=None):
""" send notification email to a new portal user
@param wizard_user: browse record of model portal.wizard.user
@return: the id of the created mail.mail record
"""
+ wizard_user = self.browse(cr, uid, ids[0], context=context)
res_partner = self.pool['res.partner']
- this_context = context
this_user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context)
if not this_user.email:
raise UserError(_('You must have an email address in your User Preferences to send emails.'))
# determine subject and body in the portal user's language
- user = self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context)
- context = dict(this_context or {}, lang=user.lang)
+ user = wizard_user.user_id
+ context = dict(context or {}, lang=user.lang)
ctx_portal_url = dict(context, signup_force_type_in_url='')
portal_url = res_partner._get_signup_url_for_action(cr, uid,
[user.partner_id.id],
context=ctx_portal_url)[user.partner_id.id]
res_partner.signup_prepare(cr, uid, [user.partner_id.id], context=context)
- data = {
- 'company': this_user.company_id.name,
- 'portal': wizard_user.wizard_id.portal_id.name,
- 'welcome_message': wizard_user.wizard_id.welcome_message or "",
- 'db': cr.dbname,
- 'name': user.name,
- 'login': user.login,
- 'signup_url': user.signup_url,
- 'portal_url': portal_url,
- }
- mail_mail = self.pool.get('mail.mail')
- mail_values = {
- 'email_from': this_user.email,
- 'email_to': user.email,
- 'subject': _(WELCOME_EMAIL_SUBJECT) % data,
- 'body_html': '%s
' % (_(WELCOME_EMAIL_BODY) % data),
- 'state': 'outgoing',
- 'message_type': 'email',
- }
- mail_id = mail_mail.create(cr, uid, mail_values, context=this_context)
- return mail_mail.send(cr, uid, [mail_id], context=this_context)
+ context.update({'dbname': cr.dbname, 'portal_url': portal_url})
+ template_id = self.pool['ir.model.data'].xmlid_to_res_id(cr, uid, 'portal.mail_template_data_portal_welcome')
+ if template_id:
+ self.pool['mail.template'].send_mail(cr, uid, template_id, wizard_user.id, force_send=True, context=context)
+ else:
+ _logger.warning("No email template found for sending email to the portal user")
+ return True