Skip to content

Commit

Permalink
⚡1️⃣0️⃣ mail_private New: added ability to select channels for privat…
Browse files Browse the repository at this point in the history
…e message sending
  • Loading branch information
Ommo73 committed Mar 21, 2019
1 parent d2b3982 commit f8a26ed
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 4 deletions.
2 changes: 1 addition & 1 deletion mail_private/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"summary": """Send private messages to specified recipients, regardless of who are in followers list.""",
"category": "Discuss",
"images": ['images/mail_private_image.png'],
"version": "10.0.1.0.1",
"version": "10.0.1.0.2",
"application": False,

"author": "IT-Projects LLC, Pavel Romanchenko",
Expand Down
5 changes: 5 additions & 0 deletions mail_private/doc/changelog.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
`1.0.2`
-------

- **New**: added ability to select channels for private message sending.

`1.0.1`
-------

Expand Down
52 changes: 52 additions & 0 deletions mail_private/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,55 @@ def send_mail(self, auto_commit=False):
for w in self:
w.is_log = True if w.is_private else w.is_log
super(MailComposeMessage, self).send_mail(auto_commit=False)


class MailMessage(models.Model):
_inherit = 'mail.message'

@api.multi
def _notify(self, force_send=False, send_after_commit=True, user_signature=True):
self_sudo = self.sudo()
if 'is_private' not in self_sudo._context or not self_sudo._context['is_private']:
super(MailMessage, self)._notify(force_send, send_after_commit, user_signature)
else:
self._notify_mail_private(force_send, send_after_commit, user_signature)

@api.multi
def _notify_mail_private(self, force_send=False, send_after_commit=True, user_signature=True):
""" Add the related record followers to the destination partner_ids if is not a private message.
Call mail_notification.notify to manage the email sending
"""
# have a sudoed copy to manipulate partners (public can go here with
# website modules like forum / blog / ...
self_sudo = self.sudo()

# TDE CHECK: add partners / channels as arguments to be able to notify a message with / without computation ??
self.ensure_one() # tde: not sure, just for testinh, will see
partners = self.env['res.partner'] | self.partner_ids
channels = self.env['mail.channel'].search([('id', '=', self._context['channel_ids'])])

# remove author from notified partners
if not self._context.get('mail_notify_author', False) and self_sudo.author_id:
partners = partners - self_sudo.author_id

# update message, with maybe custom values
message_values = {
'channel_ids': [(6, 0, channels.ids)],
'needaction_partner_ids': [(6, 0, partners.ids)]
}
if self.model and self.res_id and hasattr(self.env[self.model], 'message_get_message_notify_values'):
message_values.update(
self.env[self.model].browse(self.res_id).message_get_message_notify_values(self, message_values))
self.write(message_values)

# notify partners and channels
partners._notify(self, force_send=force_send, send_after_commit=send_after_commit,
user_signature=user_signature)
channels._notify(self)

# Discard cache, because child / parent allow reading and therefore
# change access rights.
if self.parent_id:
self.parent_id.invalidate_cache()

return True
56 changes: 53 additions & 3 deletions mail_private/static/src/js/mail_private.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,23 @@ Chatter.include({
}).fail(function () {
// todo: display notification
});
},
},

on_open_composer_private_message: function (event) {
var self = this;
this.private = true;
var def = $.Deferred();

this.get_recipients_for_internal_message().then(function (data) {
self.recipients_for_internal_message = data;
self.open_composer({is_private: true});
def.resolve();
});

this.get_channels_for_internal_message().then(function (data) {
self.channels_for_internal_message = data;
def.then(function() {
self.open_composer({is_private: true});
});
});
},

Expand Down Expand Up @@ -68,6 +77,15 @@ Chatter.include({
:'Follower'
});
});

_.each(self.channels_for_internal_message, function (channel) {
self.composer.suggested_channels.push({
checked: true,
channel_id: channel.id,
full_name: channel.name,
name: ('# ' + channel.name),
});
});
}
},

Expand Down Expand Up @@ -101,7 +119,39 @@ Chatter.include({
});
});
});
}
},

get_channels_for_internal_message: function () {
var self = this;
self.result = {};
return new Model(this.context.default_model).query(
['message_follower_ids', 'partner_id']).filter(
[['id', '=', self.context.default_res_id]]).all()
.then(function (thread) {
var follower_ids = thread[0].message_follower_ids;
self.result[self.context.default_res_id] = [];
self.customer = thread[0].partner_id;

// Fetch partner ids
return new Model('mail.followers').call(
'read', [follower_ids, ['channel_id']]).then(function (res_partners) {
// Filter result and push to array
var res_partners_filtered = _.map(res_partners, function (partner) {
if (partner.channel_id[0]) {
return partner.channel_id[0];
}
}).filter(function (partner) {
return typeof partner !== 'undefined';
});

return new Model('mail.channel').call(
'read', [res_partners_filtered, ['name', 'id']]
).then(function (recipients) {
return recipients;
});
});
});
},
});

MailComposer.include({
Expand Down
10 changes: 10 additions & 0 deletions mail_private/static/src/xml/mail_private.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@
</span>
</t>
<t t-jquery="div[class='o_composer_suggested_partners']" t-operation="after">
<div class="o_composer_suggested_partners">
<t t-foreach='widget.suggested_channels' t-as='channel'>
<div t-attf-title="Add as channel and follower">
<input type="checkbox"
t-att-checked="channel.checked ? 'checked' : undefined"
t-att-data-fullname="channel.full_name"/>
<t t-esc="channel.name"/>
</div>
</t>
</div>
<button class="btn btn-sm btn-link oe_composer_uncheck" t-if="widget.options.is_private">Uncheck all</button>
</t>
</t>
Expand Down

0 comments on commit f8a26ed

Please sign in to comment.