[IMP] auth_signup, mail: notify inviter user when invited user connects
Purpose of this commit is to improve the onboarding and the first steps of Odoo notably when using Discuss and inviting first people to join Odoo. When a new user connects the user who invited him will be notified with a desktop notification inviting him to have a chat in Discuss and talk together. This commit is linked to task ID 1838588 and PR #25075.
This commit is contained in:
committed by
Thibault Delavallée
parent
340e1c0219
commit
c446fb2001
@@ -81,6 +81,8 @@ class ResUsers(models.Model):
|
||||
values.pop('login', None)
|
||||
values.pop('name', None)
|
||||
partner_user.write(values)
|
||||
if not partner_user.login_date:
|
||||
partner_user._notify_inviter()
|
||||
return (self.env.cr.dbname, partner_user.login, values.get('password'))
|
||||
else:
|
||||
# user does not exist: sign up invited user
|
||||
@@ -92,7 +94,8 @@ class ResUsers(models.Model):
|
||||
if partner.company_id:
|
||||
values['company_id'] = partner.company_id.id
|
||||
values['company_ids'] = [(6, 0, [partner.company_id.id])]
|
||||
self._signup_create_user(values)
|
||||
partner_user = self._signup_create_user(values)
|
||||
partner_user._notify_inviter()
|
||||
else:
|
||||
# no token, sign up an external user
|
||||
values['email'] = values.get('email') or values.get('login')
|
||||
@@ -110,6 +113,20 @@ class ResUsers(models.Model):
|
||||
raise SignupError(_('Signup is not allowed for uninvited users'))
|
||||
return self._create_user_from_template(values)
|
||||
|
||||
@api.multi
|
||||
def _notify_inviter(self):
|
||||
for user in self:
|
||||
invite_partner = user.create_uid.partner_id
|
||||
if invite_partner:
|
||||
# notify invite user that new user is connected
|
||||
title = _("%s connected") % user.name
|
||||
message = _("This is his first connection. Wish him welcome")
|
||||
self.env['bus.bus'].sendone(
|
||||
(self._cr.dbname, 'res.partner', invite_partner.id),
|
||||
{'type': 'user_connection', 'title': title,
|
||||
'message': message, 'partner_id': user.partner_id.id}
|
||||
)
|
||||
|
||||
def _create_user_from_template(self, values):
|
||||
template_user_id = literal_eval(self.env['ir.config_parameter'].sudo().get_param('base.template_portal_user_id', 'False'))
|
||||
template_user = self.browse(template_user_id)
|
||||
|
||||
@@ -27,11 +27,12 @@ var BusService = CrossTab.extend(ServicesMixin, {
|
||||
*
|
||||
* @param {string} title
|
||||
* @param {string} content
|
||||
* @param {function} [callback] if given callback will be called when user clicks on notification
|
||||
*/
|
||||
sendNotification: function (title, content) {
|
||||
sendNotification: function (title, content, callback) {
|
||||
if (window.Notification && Notification.permission === "granted") {
|
||||
if (this.isMasterTab()) {
|
||||
this._sendNativeNotification(title, content);
|
||||
this._sendNativeNotification(title, content, callback);
|
||||
}
|
||||
} else {
|
||||
this.do_notify(title, content);
|
||||
@@ -76,8 +77,9 @@ var BusService = CrossTab.extend(ServicesMixin, {
|
||||
* @private
|
||||
* @param {string} title
|
||||
* @param {string} content
|
||||
* @param {function} [callback] if given callback will be called when user clicks on notification
|
||||
*/
|
||||
_sendNativeNotification: function (title, content) {
|
||||
_sendNativeNotification: function (title, content, callback) {
|
||||
var notification = new Notification(title, {body: content, icon: "/mail/static/src/img/odoo_o.png"});
|
||||
notification.onclick = function () {
|
||||
window.focus();
|
||||
@@ -86,6 +88,9 @@ var BusService = CrossTab.extend(ServicesMixin, {
|
||||
} else if (this.close) {
|
||||
this.close();
|
||||
}
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
@@ -165,13 +165,13 @@ MailManager.include({
|
||||
* Add or remove failure when receiving a failure update message
|
||||
*
|
||||
* @private
|
||||
* @param {Object} data
|
||||
* @param {Object[]} data.elements list of mail failure data
|
||||
* @param {string} data.elements[].message_id ID of related message that
|
||||
* @param {Object} datas
|
||||
* @param {Object[]} datas.elements list of mail failure data
|
||||
* @param {string} datas.elements[].message_id ID of related message that
|
||||
* has a mail failure.
|
||||
* @param {Array} data.elements[].notifications list of notifications
|
||||
* @param {Array} datas.elements[].notifications list of notifications
|
||||
* that is related to a mail failure.
|
||||
* @param {string} data.elements[].notifications[0] sending state of a mail
|
||||
* @param {string} datas.elements[].notifications[0] sending state of a mail
|
||||
* failure (e.g. 'exception').
|
||||
*/
|
||||
_handlePartnerMailFailureNotification: function (datas) {
|
||||
@@ -313,6 +313,8 @@ MailManager.include({
|
||||
this._handlePartnerActivityUpdateNotification(data);
|
||||
} else if (data.type === 'mail_failure') {
|
||||
this._handlePartnerMailFailureNotification(data);
|
||||
} else if (data.type === 'user_connection') {
|
||||
this._handlePartnerUserConnectionNotification(data);
|
||||
} else {
|
||||
this._handlePartnerChannelNotification(data);
|
||||
}
|
||||
@@ -402,8 +404,25 @@ MailManager.include({
|
||||
this._mailBus.trigger('unsubscribe_from_channel', data.id);
|
||||
this.do_notify(_("Unsubscribed"), message);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Shows a popup to notify a user connection
|
||||
*
|
||||
* @private
|
||||
* @param {Object} data
|
||||
* @param {Object[]} data.partner_id id of the connected partner
|
||||
* @param {string} data.title title to display on notification
|
||||
* @param {Array} data.messages message to display on notification
|
||||
*/
|
||||
_handlePartnerUserConnectionNotification: function (data) {
|
||||
var self=this;
|
||||
var partner_id = data.partner_id;
|
||||
this.call('bus_service', 'sendNotification', data.title, data.message, function(){
|
||||
self.call('mail_service', 'openDmWindow', partner_id);
|
||||
});
|
||||
},
|
||||
/**
|
||||
*
|
||||
* On receiving an update on user status (e.g. becoming 'online', 'offline',
|
||||
* 'idle', etc.).
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user