@ -1,3 +1,9 @@
/* Copyright 2016 x620 <https:/ / github . com / x620 >
Copyright 2016 Ivan Yelizariev < https : //it-projects.info/team/yelizariev>
Copyright 2016 manawi < https : //github.com/manawi>
Copyright 2017 Artyom Losev < https : //github.com/ArtyomLosev>
Copyright 2019 Artem Rafailov < https : //it-projects.info/team/Ommo73/>
License LGPL - 3.0 ( https : //www.gnu.org/licenses/lgpl.html). */
odoo . define ( 'mail_private' , function ( require ) {
odoo . define ( 'mail_private' , function ( require ) {
'use strict' ;
'use strict' ;
@ -22,6 +28,7 @@ Chatter.include({
var self = this ;
var self = this ;
if ( this . private ) {
if ( this . private ) {
message . subtype = false ;
message . subtype = false ;
message . channel_ids = this . get_checked_channels_ids ( ) ;
}
}
var options = { model : this . model , res_id : this . res_id } ;
var options = { model : this . model , res_id : this . res_id } ;
chat_manager . post_message ( message , options ) . then (
chat_manager . post_message ( message , options ) . then (
@ -33,32 +40,38 @@ Chatter.include({
} ) . fail ( function ( ) {
} ) . fail ( function ( ) {
// todo: display notification
// todo: display notification
} ) ;
} ) ;
} ,
} ,
on_open_composer_private_message : function ( event ) {
on_open_composer_private_message : function ( event ) {
var self = this ;
var self = this ;
this . private = true ;
this . private = true ;
this . get_recipients_for_internal_message ( ) . then ( function ( data ) {
this . get_recipients_for_internal_message ( ) . then ( function ( data ) {
self . recipients_for_internal_message = data ;
self . recipients_for_internal_message = data ;
self . open_composer ( { is_private : true } ) ;
return self . get_channels_for_internal_message ( ) ;
} ) . then ( function ( data ) {
self . channels_for_internal_message = data ;
self . get_internal_users_ids ( ) . then ( function ( res_ids ) {
self . open_composer ( { is_private : true , internal_ids : res_ids } ) ;
} ) ;
} ) ;
} ) ;
} ,
} ,
on_open_composer_new_message : function ( ) {
on_open_composer_new_message : function ( ) {
this . _super . apply ( this , arguments ) ;
this . _super . apply ( this , arguments ) ;
this . private = false ;
this . private = false ;
this . context . is_private = false ;
} ,
} ,
open_composer : function ( options ) {
open_composer : function ( options ) {
var self = this ;
var self = this ;
this . _super . apply ( this , arguments ) ;
this . _super . apply ( this , arguments ) ;
if ( options && options . is_private ) {
if ( options && options . is_private ) {
self . internal_users_ids = options . internal_ids ;
this . composer . options . is_private = options . is_private ;
this . composer . options . is_private = options . is_private ;
_ . each ( self . recipients_for_internal_message , function ( partner ) {
_ . each ( self . recipients_for_internal_message , function ( partner ) {
self . composer . suggested_partners . push ( {
self . composer . suggested_partners . push ( {
checked : ( partner . user_ids . length > 0 ) ,
checked : _ . intersection ( self . internal_users_ids , partner . user_ids ) . length > 0 ,
partner_id : partner . id ,
partner_id : partner . id ,
full_name : partner . name ,
full_name : partner . name ,
name : partner . name ,
name : partner . name ,
@ -68,6 +81,15 @@ Chatter.include({
: 'Follower'
: '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 ) ,
} ) ;
} ) ;
}
}
} ,
} ,
@ -101,13 +123,68 @@ 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 channels ids
return new Model ( 'mail.followers' ) . call (
'read' , [ follower_ids , [ 'channel_id' ] ] ) . then ( function ( res_channels ) {
// Filter result and push to array
var res_channels_filtered = _ . map ( res_channels , function ( channel ) {
if ( channel . channel_id [ 0 ] ) {
return channel . channel_id [ 0 ] ;
}
} ) . filter ( function ( channel ) {
return typeof channel !== 'undefined' ;
} ) ;
return new Model ( 'mail.channel' ) . call (
'read' , [ res_channels_filtered , [ 'name' , 'id' ] ]
) . then ( function ( recipients ) {
return recipients ;
} ) ;
} ) ;
} ) ;
} ,
get_internal_users_ids : function ( ) {
var ResUser = new Model ( 'mail.compose.message' ) ;
this . users_ids = ResUser . call ( 'get_internal_users_ids' , [ [ ] ] ) . then ( function ( users_ids ) {
return users_ids ;
} ) ;
return this . users_ids ;
} ,
get_checked_channels_ids : function ( ) {
var self = this ;
var checked_channels = [ ] ;
this . $ ( '.o_composer_suggested_channels input:checked' ) . each ( function ( ) {
var full_name = $ ( this ) . data ( 'fullname' ) . toString ( ) ;
_ . each ( self . channels_for_internal_message , function ( item ) {
if ( full_name === item . name ) {
checked_channels . push ( item . id ) ;
}
} ) ;
} ) ;
return checked_channels ;
} ,
} ) ;
} ) ;
MailComposer . include ( {
MailComposer . include ( {
init : function ( parent , dataset , options ) {
init : function ( parent , dataset , options ) {
this . _super ( parent , dataset , options ) ;
this . _super ( parent , dataset , options ) ;
this . events [ 'click .oe_composer_uncheck' ] = 'on_uncheck_recipients' ;
this . events [ 'click .oe_composer_uncheck' ] = 'on_uncheck_recipients' ;
this . suggested_channels = [ ] ;
} ,
} ,
@ -115,6 +192,17 @@ MailComposer.include({
this . $ ( '.o_composer_suggested_partners input:checked' ) . each ( function ( ) {
this . $ ( '.o_composer_suggested_partners input:checked' ) . each ( function ( ) {
$ ( this ) . prop ( 'checked' , false ) ;
$ ( this ) . prop ( 'checked' , false ) ;
} ) ;
} ) ;
this . $ ( '.o_composer_suggested_channels input:checked' ) . each ( function ( ) {
$ ( this ) . prop ( 'checked' , false ) ;
} ) ;
} ,
preprocess_message : function ( ) {
var self = this ;
if ( self . options . is_private ) {
self . context . is_private = true ;
}
return this . _super ( ) ;
} ,
} ,
on_open_full_composer : function ( ) {
on_open_full_composer : function ( ) {