From 44f9c3dde1c6aaa9fbaebddf48073a971c9155ff Mon Sep 17 00:00:00 2001 From: zimbora Date: Mon, 10 Apr 2017 05:54:18 +0100 Subject: [PATCH 01/35] Add portuguese translation (#89) --- mail_sent/i18n/pt.po | 67 +++++++++++++++++++++++++++++++++++++++++ mail_sent/i18n/pt_BR.po | 67 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 mail_sent/i18n/pt.po create mode 100644 mail_sent/i18n/pt_BR.po diff --git a/mail_sent/i18n/pt.po b/mail_sent/i18n/pt.po new file mode 100644 index 0000000..f798914 --- /dev/null +++ b/mail_sent/i18n/pt.po @@ -0,0 +1,67 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_sent +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-29 18:57+0000\n" +"PO-Revision-Date: 2017-03-29 18:57+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_sent +#: model:ir.actions.client,help:mail_sent.action_mail_sent_feeds +msgid "

\n" +" No message found and no message sent yet.\n" +"

\n" +" Click on the top-right icon to compose a message. This\n" +" message will be sent by email if it's an internal contact.\n" +"

\n" +" " +msgstr "

\n" +" Nenhuma mensagem encontrada e nenhuma enviada ainda.\n" +"

\n" +" Clique no ícone no canto superior direito para compor uma nova mensagem.\n" +" Esta mensagem será enviada por e-mail se não for um contato interno.\n" +"

\n" +" " + +#. module: mail_sent +#: model:ir.model,name:mail_sent.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Assistente de composição de Email" + +#. module: mail_sent +#: model:ir.model,name:mail_sent.model_mail_message +msgid "Message" +msgstr "Mensagem" + +#. module: mail_sent +#: model:ir.model,name:mail_sent.model_mail_notification +msgid "Notifications" +msgstr "Notificações" + +#. module: mail_sent +#: model:ir.actions.client,name:mail_sent.action_mail_sent_feeds +#: model:ir.ui.menu,name:mail_sent.mail_sentfeeds +#: field:mail.compose.message,sent:0 +#: field:mail.message,sent:0 +msgid "Sent" +msgstr "Enviados" + +#. module: mail_sent +#: help:mail.message,sent:0 +msgid "Was message sent to someone" +msgstr "Foi enviada mensagem para alguém" + +#. module: mail_sent +#: help:mail.compose.message,sent:0 +msgid "dummy field to fix inherit error" +msgstr "campo fictício para corrigir o erro da herança" + diff --git a/mail_sent/i18n/pt_BR.po b/mail_sent/i18n/pt_BR.po new file mode 100644 index 0000000..8cc602d --- /dev/null +++ b/mail_sent/i18n/pt_BR.po @@ -0,0 +1,67 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_sent +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-29 18:57+0000\n" +"PO-Revision-Date: 2017-03-29 18:57+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_sent +#: model:ir.actions.client,help:mail_sent.action_mail_sent_feeds +msgid "

\n" +" No message found and no message sent yet.\n" +"

\n" +" Click on the top-right icon to compose a message. This\n" +" message will be sent by email if it's an internal contact.\n" +"

\n" +" " +msgstr "

\n" +" Nenhuma mensagem encontrada e nenhuma enviada ainda.\n" +"

\n" +" Clique no ícone no canto superior direito para compor uma nova mensagem.\n" +" Esta mensagem será enviada por e-mail se não for um contato interno.\n" +"

\n" +" " + +#. module: mail_sent +#: model:ir.model,name:mail_sent.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Assistente de Composição de Email" + +#. module: mail_sent +#: model:ir.model,name:mail_sent.model_mail_message +msgid "Message" +msgstr "Mensagem" + +#. module: mail_sent +#: model:ir.model,name:mail_sent.model_mail_notification +msgid "Notifications" +msgstr "Notificações" + +#. module: mail_sent +#: model:ir.actions.client,name:mail_sent.action_mail_sent_feeds +#: model:ir.ui.menu,name:mail_sent.mail_sentfeeds +#: field:mail.compose.message,sent:0 +#: field:mail.message,sent:0 +msgid "Sent" +msgstr "Enviados" + +#. module: mail_sent +#: help:mail.message,sent:0 +msgid "Was message sent to someone" +msgstr "Foi enviada mensagem para alguém" + +#. module: mail_sent +#: help:mail.compose.message,sent:0 +msgid "dummy field to fix inherit error" +msgstr "campo fictício para corrigir o erro da herança" + From e7211e4145cce8cac6ff23d1facd885b157d2aa7 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 16 Jan 2015 12:03:40 +0200 Subject: [PATCH 02/35] upload im_notif --- im_notif/__init__.py | 1 + im_notif/__openerp__.py | 26 +++++ im_notif/im_notif_data.xml | 19 ++++ im_notif/im_notif_models.py | 154 +++++++++++++++++++++++++++++ im_notif/im_notif_views.xml | 12 +++ im_notif/static/src/js/im_notif.js | 31 ++++++ 6 files changed, 243 insertions(+) create mode 100644 im_notif/__init__.py create mode 100644 im_notif/__openerp__.py create mode 100644 im_notif/im_notif_data.xml create mode 100644 im_notif/im_notif_models.py create mode 100644 im_notif/im_notif_views.xml create mode 100644 im_notif/static/src/js/im_notif.js diff --git a/im_notif/__init__.py b/im_notif/__init__.py new file mode 100644 index 0000000..6ff86bc --- /dev/null +++ b/im_notif/__init__.py @@ -0,0 +1 @@ +import im_notif_models diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py new file mode 100644 index 0000000..90e3302 --- /dev/null +++ b/im_notif/__openerp__.py @@ -0,0 +1,26 @@ +{ + 'name' : 'IM Notifications', + 'version' : '1.0.0', + 'author' : 'Ivan Yelizariev', + 'category' : 'Sale', + 'website' : 'https://it-projects.info', + 'description': """ +Allows to sent nofitications via IM. + +Options for notifications: + +* Never +* Only IM (if online) +* IM (if online) + email (if offline) +* IM (if online) + email +* Only Emails + +Tested on Odoo 8.0 ab7b5d7732a7c222a0aea45bd173742acd47242d + """, + 'depends' : ['im_chat', 'mail'], + 'data':[ + 'im_notif_data.xml', + 'im_notif_views.xml', + ], + 'installable': True +} diff --git a/im_notif/im_notif_data.xml b/im_notif/im_notif_data.xml new file mode 100644 index 0000000..0d2f6b8 --- /dev/null +++ b/im_notif/im_notif_data.xml @@ -0,0 +1,19 @@ + + + + + Notifications + + Technical profile. You should not delete it. + + + Notifications + notifications + + + + + + + + diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py new file mode 100644 index 0000000..85ff60d --- /dev/null +++ b/im_notif/im_notif_models.py @@ -0,0 +1,154 @@ +import openerp +from openerp import api, models, fields, SUPERUSER_ID, tools +from openerp.osv import fields as old_fields +from openerp.tools import html2plaintext +from openerp.tools.translate import _ + +class res_partner(models.Model): + _inherit = 'res.partner' + _columns = { + 'notify_email': old_fields.selection([ + ('none', 'Never'), + ('im', 'Only IM (if online)'), + ('im_xor_email', 'IM (if online) + email (if offline)'), + ('im_and_email', 'IM (if online) + email'), + ('always', 'Only emails'), + ], 'Receive Inbox Notifications by Email, IM', required=True, + oldname='notification_email_send', + help="Policy to receive emails, IM for new messages pushed to your personal Inbox. IM can be used only for partners with odoo user account" + ), + } + + _defaults = { + 'notify_email': lambda *args: 'always' + } + +class mail_notification(models.Model): + _inherit = 'mail.notification' + + def get_recipients(self, cr, uid, ids, message, context=None): + # based on addons/mail/mail_followers.py::get_partners_to_email + """ Return the list of partners to notify, based on their preferences. + + :param browse_record message: mail.message to notify + :param list partners_to_notify: optional list of partner ids restricting + the notifications to process + """ + email_pids = [] + im_uids = [] + for notification in self.browse(cr, uid, ids, context=context): + if notification.is_read: + continue + partner = notification.partner_id + # Do not send to partners without email address defined + if not partner.email: + continue + # Do not send to partners having same email address than the author (can cause loops or bounce effect due to messy database) + if message.author_id and message.author_id.email == partner.email: + continue + # Partner does not want to receive any emails or is opt-out + n = partner.notify_email + if n == 'none': + continue + if n == 'always': + email_pids.append(partner.id) + continue + send_email = False + for user in partner.user_ids: + if user.im_status=='offline': + if n != 'im': + send_email = True + else: + im_uids.append(user.id) + if n == 'im_and_email': + send_email = True + if send_email: + email_pids.append(partner.id) + + return email_pids, im_uids + + def _message2im(self, message): + url = 'ODOO_REF#id=%s&model=%s&view_type=form' % ( + message.res_id, + message.model + ) + author = message.author_id and message.author_id.name_get() + author = author and author[0][1] or message.email_from + body = html2plaintext(message.body)[:100] or '' + mtype = {'email': _('Email'), + 'comment': _('Comment'), + 'notification': _('System notification'), + }.get(message.type, '') + + im_text = ['NEW %s FROM %s' % (message.type, author), + 'OPEN %s: %s' % (message.record_name or '', url) + ] + im_text = im_text + body.split('\n') + return im_text + + + def _notify_email(self, cr, uid, ids, message_id, force_send=False, user_signature=True, context=None): + # based on addons/mail/mail_followers.py::_notify_email + message = self.pool['mail.message'].browse(cr, SUPERUSER_ID, message_id, context=context) + + # compute partners + email_pids, im_uids = self.get_recipients(cr, uid, ids, message, context=None) + print 'recipients', email_pids, im_uids + if email_pids: + self._do_notify_email(cr, uid, email_pids, message, force_send, user_signature, context) + + if im_uids: + self._do_notify_im(cr, uid, im_uids, message, context) + + return True + + def _do_notify_im(self, cr, uid, im_uids, message, context=None): + im_text = self._message2im(message) + + user_from = self.pool['ir.model.data'].xmlid_to_res_id(cr, SUPERUSER_ID, 'im_notif.notif_user') + + session_obj = self.pool['im_chat.session'] + message_type = 'message' + for user_to in im_uids: + session = session_obj.session_get(cr, user_from, user_to, context=context) + uuid = session.get('uuid') + message_content = '\n'.join(im_text) + message_id = self.pool["im_chat.message"].post(cr, SUPERUSER_ID, user_from, uuid, message_type, message_content, context=context) + + return True + + + def _do_notify_email(self, cr, uid, email_pids, message, force_send=False, user_signature=True, context=None): + + # compute email body (signature, company data) + body_html = message.body + # add user signature except for mail groups, where users are usually adding their own signatures already + user_id = message.author_id and message.author_id.user_ids and message.author_id.user_ids[0] and message.author_id.user_ids[0].id or None + signature_company = self.get_signature_footer(cr, uid, user_id, res_model=message.model, res_id=message.res_id, context=context, user_signature=(user_signature and message.model != 'mail.group')) + if signature_company: + body_html = tools.append_content_to_html(body_html, signature_company, plaintext=False, container_tag='div') + # compute email references + references = message.parent_id.message_id if message.parent_id else False + + # custom values + custom_values = dict() + if message.model and message.res_id and self.pool.get(message.model) and hasattr(self.pool[message.model], 'message_get_email_values'): + custom_values = self.pool[message.model].message_get_email_values(cr, uid, message.res_id, message, context=context) + + # create email values + max_recipients = 50 + chunks = [email_pids[x:x + max_recipients] for x in xrange(0, len(email_pids), max_recipients)] + email_ids = [] + for chunk in chunks: + mail_values = { + 'mail_message_id': message.id, + 'auto_delete': True, + 'body_html': body_html, + 'recipient_ids': [(4, id) for id in chunk], + 'references': references, + } + mail_values.update(custom_values) + email_ids.append(self.pool.get('mail.mail').create(cr, uid, mail_values, context=context)) + if force_send and len(chunks) < 2: # for more than 50 followers, use the queue system + self.pool.get('mail.mail').send(cr, uid, email_ids, context=context) + return True diff --git a/im_notif/im_notif_views.xml b/im_notif/im_notif_views.xml new file mode 100644 index 0000000..ac90b0a --- /dev/null +++ b/im_notif/im_notif_views.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/im_notif/static/src/js/im_notif.js b/im_notif/static/src/js/im_notif.js new file mode 100644 index 0000000..523656e --- /dev/null +++ b/im_notif/static/src/js/im_notif.js @@ -0,0 +1,31 @@ + (function(){ + + "use strict"; + + var _t = openerp._t; + var _lt = openerp._lt; + var QWeb = openerp.qweb; + + openerp.im_chat.Conversation.include({ + escape_keep_url: function(str){ + //var url_regex = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi; + var url_regex = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?|ODOO_REF#[\w#!:.?+=&%@!\-\/]+)/gi; + var last = 0; + var txt = ""; + while (true) { + var result = url_regex.exec(str); + if (! result) + break; + txt += _.escape(str.slice(last, result.index)); + last = url_regex.lastIndex; + var is_odoo_ref = result[0].match(/^ODOO_REF/) + var url = _.escape(result[0].replace(/^ODOO_REF/, '')); + if (is_odoo_ref) + url += '&rnd='+parseInt(Math.random()*1000); + txt += '' + url + ''; + } + txt += _.escape(str.slice(last, str.length)); + return txt; + }, + }) + })() \ No newline at end of file From e95425bbf275a617e33fc5defcfa2c73ca2d149f Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 16 Jan 2015 12:28:31 +0200 Subject: [PATCH 03/35] format notification --- im_notif/im_notif_models.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index 85ff60d..ca95bdd 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -80,9 +80,12 @@ class mail_notification(models.Model): 'notification': _('System notification'), }.get(message.type, '') - im_text = ['NEW %s FROM %s' % (message.type, author), - 'OPEN %s: %s' % (message.record_name or '', url) - ] + im_text = [ + '_____________________', + '_____________________', + '%s FROM %s' % (message.type, author), + 'ABOUT %s: %s' % (message.record_name or '', url) + ] im_text = im_text + body.split('\n') return im_text From a59fee59a3d16b1d2de91db07bbcb74c50dd4832 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 16 Jan 2015 12:36:49 +0200 Subject: [PATCH 04/35] format notification --- im_notif/im_notif_models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index ca95bdd..c2cfa8e 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -83,8 +83,8 @@ class mail_notification(models.Model): im_text = [ '_____________________', '_____________________', - '%s FROM %s' % (message.type, author), - 'ABOUT %s: %s' % (message.record_name or '', url) + '%s [FROM] %s' % (message.type, author), + '[ABOUT] %s: %s' % (message.record_name or '', url) ] im_text = im_text + body.split('\n') return im_text From 1f0dcfd2451fa5340b241fad283ad06918354180 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 16 Jan 2015 12:55:49 +0200 Subject: [PATCH 05/35] update notification content --- im_notif/im_notif_models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index c2cfa8e..b85a85f 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -74,7 +74,7 @@ class mail_notification(models.Model): ) author = message.author_id and message.author_id.name_get() author = author and author[0][1] or message.email_from - body = html2plaintext(message.body)[:100] or '' + #body = html2plaintext(message.body)[:100] or '' mtype = {'email': _('Email'), 'comment': _('Comment'), 'notification': _('System notification'), @@ -84,9 +84,9 @@ class mail_notification(models.Model): '_____________________', '_____________________', '%s [FROM] %s' % (message.type, author), - '[ABOUT] %s: %s' % (message.record_name or '', url) + '[ABOUT] %s: %s' % (message.subject or message.record_name or '', url) ] - im_text = im_text + body.split('\n') + #im_text = im_text + body.split('\n') return im_text From 7e94b1233f61346c1d922334614b606686cc8506 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 16 Jan 2015 17:01:52 +0200 Subject: [PATCH 06/35] hashed url support --- im_notif/im_notif_models.py | 24 ++++++++++++++++-------- im_notif/static/src/js/im_notif.js | 25 +++++++++++++++++++------ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index b85a85f..8253d46 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -67,10 +67,14 @@ class mail_notification(models.Model): return email_pids, im_uids - def _message2im(self, message): - url = 'ODOO_REF#id=%s&model=%s&view_type=form' % ( - message.res_id, - message.model + def _message2im(self, cr, uid, message): + inbox_action = self.pool['ir.model.data'].xmlid_to_res_id(cr, SUPERUSER_ID, 'mail.action_mail_inbox_feeds') + inbox_url = '#action=%s' % inbox_action + url = None + if message.res_id: + url = '#id=%s&model=%s&view_type=form' % ( + message.res_id, + message.model ) author = message.author_id and message.author_id.name_get() author = author and author[0][1] or message.email_from @@ -80,11 +84,15 @@ class mail_notification(models.Model): 'notification': _('System notification'), }.get(message.type, '') + about = message.subject or message.record_name or 'UNDEFINED' + about = '[ABOUT] %s' % about + if url: + about = '%s' % (url, about) im_text = [ - '_____________________', - '_____________________', '%s [FROM] %s' % (message.type, author), - '[ABOUT] %s: %s' % (message.subject or message.record_name or '', url) + about, + '_____________________', + '_____[open_inbox]_____' % inbox_url, ] #im_text = im_text + body.split('\n') return im_text @@ -106,7 +114,7 @@ class mail_notification(models.Model): return True def _do_notify_im(self, cr, uid, im_uids, message, context=None): - im_text = self._message2im(message) + im_text = self._message2im(cr, uid, message) user_from = self.pool['ir.model.data'].xmlid_to_res_id(cr, SUPERUSER_ID, 'im_notif.notif_user') diff --git a/im_notif/static/src/js/im_notif.js b/im_notif/static/src/js/im_notif.js index 523656e..7994ca3 100644 --- a/im_notif/static/src/js/im_notif.js +++ b/im_notif/static/src/js/im_notif.js @@ -9,7 +9,7 @@ openerp.im_chat.Conversation.include({ escape_keep_url: function(str){ //var url_regex = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi; - var url_regex = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?|ODOO_REF#[\w#!:.?+=&%@!\-\/]+)/gi; + var url_regex = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?|(]*href="([^"]*)"[^>]*>([^<]*)<\/a>)/gi; var last = 0; var txt = ""; while (true) { @@ -18,11 +18,24 @@ break; txt += _.escape(str.slice(last, result.index)); last = url_regex.lastIndex; - var is_odoo_ref = result[0].match(/^ODOO_REF/) - var url = _.escape(result[0].replace(/^ODOO_REF/, '')); - if (is_odoo_ref) - url += '&rnd='+parseInt(Math.random()*1000); - txt += '' + url + ''; + var href = ''; + var content = ''; + var is_odoo_ref = false; + if (result[8]=='' + content + ''; } txt += _.escape(str.slice(last, str.length)); return txt; From 69ffb53681d9a1170d33db0380806f0733e0c434 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 16 Jan 2015 17:05:43 +0200 Subject: [PATCH 07/35] format notification --- im_notif/im_notif_models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index 8253d46..03858b6 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -89,10 +89,10 @@ class mail_notification(models.Model): if url: about = '%s' % (url, about) im_text = [ - '%s [FROM] %s' % (message.type, author), - about, '_____________________', '_____[open_inbox]_____' % inbox_url, + '%s [FROM] %s' % (message.type, author), + about, ] #im_text = im_text + body.split('\n') return im_text From 943f50f95ec4870500958fd018e0ea189bf8ecba Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 16 Jan 2015 17:15:23 +0200 Subject: [PATCH 08/35] open inbox by menu_id, because when it was by action web page is not refreshed inbox is already opened --- im_notif/im_notif_models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index 03858b6..48c3697 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -68,8 +68,8 @@ class mail_notification(models.Model): return email_pids, im_uids def _message2im(self, cr, uid, message): - inbox_action = self.pool['ir.model.data'].xmlid_to_res_id(cr, SUPERUSER_ID, 'mail.action_mail_inbox_feeds') - inbox_url = '#action=%s' % inbox_action + inbox_action = self.pool['ir.model.data'].xmlid_to_res_id(cr, SUPERUSER_ID, 'mail.mail_inboxfeeds') + inbox_url = '#menu_id=%s' % inbox_action url = None if message.res_id: url = '#id=%s&model=%s&view_type=form' % ( From e53dd579853bd3fdc808ec25d8b1dd6e3fb38a97 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Wed, 21 Jan 2015 16:24:45 +0200 Subject: [PATCH 09/35] make "IM (if online) + email" as default --- im_notif/im_notif_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index 48c3697..ef04c6f 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -20,7 +20,7 @@ class res_partner(models.Model): } _defaults = { - 'notify_email': lambda *args: 'always' + 'notify_email': lambda *args: 'im_and_email' } class mail_notification(models.Model): From 9f212059753157985a38042be28a77567523b6b8 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Thu, 5 Feb 2015 12:51:34 +0200 Subject: [PATCH 10/35] remove prints --- im_notif/im_notif_models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index ef04c6f..e1cff13 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -104,7 +104,6 @@ class mail_notification(models.Model): # compute partners email_pids, im_uids = self.get_recipients(cr, uid, ids, message, context=None) - print 'recipients', email_pids, im_uids if email_pids: self._do_notify_email(cr, uid, email_pids, message, force_send, user_signature, context) From 178612436ae39ed3e650590714141f38c1615cb7 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Thu, 19 Feb 2015 19:29:38 +0200 Subject: [PATCH 11/35] add links to blog --- im_notif/__openerp__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index 90e3302..d0e668a 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -16,6 +16,8 @@ Options for notifications: * Only Emails Tested on Odoo 8.0 ab7b5d7732a7c222a0aea45bd173742acd47242d + +Further information and discussion: https://yelizariev.github.io/odoo/module/2015/02/18/im-notifications.html """, 'depends' : ['im_chat', 'mail'], 'data':[ From bc7e870c3c41785ffeea836e660124f7a6668eb8 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Thu, 19 Feb 2015 19:36:02 +0200 Subject: [PATCH 12/35] new website https://yelizariev.github.io/ --- im_notif/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index d0e668a..3996c17 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -3,7 +3,7 @@ 'version' : '1.0.0', 'author' : 'Ivan Yelizariev', 'category' : 'Sale', - 'website' : 'https://it-projects.info', + 'website' : 'https://yelizariev.github.io', 'description': """ Allows to sent nofitications via IM. From f3bb8ce217f034c4d28d5d1f1a333ac17cfe05ed Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Tue, 17 Mar 2015 23:34:11 +0200 Subject: [PATCH 13/35] move module description to README.rst file --- im_notif/README.rst | 13 +++++++++++++ im_notif/__openerp__.py | 15 --------------- 2 files changed, 13 insertions(+), 15 deletions(-) create mode 100644 im_notif/README.rst diff --git a/im_notif/README.rst b/im_notif/README.rst new file mode 100644 index 0000000..88a0860 --- /dev/null +++ b/im_notif/README.rst @@ -0,0 +1,13 @@ +Allows to sent nofitications via IM. + +Options for notifications: + +* Never +* Only IM (if online) +* IM (if online) + email (if offline) +* IM (if online) + email +* Only Emails + +Tested on Odoo 8.0 ab7b5d7732a7c222a0aea45bd173742acd47242d + +Further information and discussion: https://yelizariev.github.io/odoo/module/2015/02/18/im-notifications.html diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index 3996c17..2ba211f 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -4,21 +4,6 @@ 'author' : 'Ivan Yelizariev', 'category' : 'Sale', 'website' : 'https://yelizariev.github.io', - 'description': """ -Allows to sent nofitications via IM. - -Options for notifications: - -* Never -* Only IM (if online) -* IM (if online) + email (if offline) -* IM (if online) + email -* Only Emails - -Tested on Odoo 8.0 ab7b5d7732a7c222a0aea45bd173742acd47242d - -Further information and discussion: https://yelizariev.github.io/odoo/module/2015/02/18/im-notifications.html - """, 'depends' : ['im_chat', 'mail'], 'data':[ 'im_notif_data.xml', From 2394290297a583e5850002c3040b46b4bc81d2db Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Thu, 19 Mar 2015 14:42:00 +0200 Subject: [PATCH 14/35] send notification to partner, that doesn't have odoo account, but has "IM ..." value in Notifications settings --- im_notif/im_notif_models.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index e1cff13..fa8ba72 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -62,6 +62,11 @@ class mail_notification(models.Model): im_uids.append(user.id) if n == 'im_and_email': send_email = True + + if not len(partner.user_ids): + # send notification to partner, that doesn't have odoo account, but has "im*" value in notify_email + send_email = True + if send_email: email_pids.append(partner.id) From 0bc09e93c85bf369658d0ca2af482feb812e18d3 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 27 Mar 2015 14:38:43 +0200 Subject: [PATCH 15/35] description for im_notif --- im_notif/README.rst | 13 ++-- im_notif/__openerp__.py | 3 +- im_notif/images/my-pref.png | Bin 0 -> 37547 bytes im_notif/static/description/im-chat.png | Bin 0 -> 28634 bytes im_notif/static/description/index.html | 65 ++++++++++++++++++ .../static/description/my-pref-button.png | Bin 0 -> 15972 bytes 6 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 im_notif/images/my-pref.png create mode 100644 im_notif/static/description/im-chat.png create mode 100644 im_notif/static/description/index.html create mode 100644 im_notif/static/description/my-pref-button.png diff --git a/im_notif/README.rst b/im_notif/README.rst index 88a0860..f6a7d08 100644 --- a/im_notif/README.rst +++ b/im_notif/README.rst @@ -1,13 +1,8 @@ -Allows to sent nofitications via IM. +IM Notifications +================ -Options for notifications: +Description: https://apps.odoo.com/apps/modules/8.0/im_notif/ -* Never -* Only IM (if online) -* IM (if online) + email (if offline) -* IM (if online) + email -* Only Emails +Further information and discussion: https://yelizariev.github.io/odoo/module/2015/02/18/im-notifications.html Tested on Odoo 8.0 ab7b5d7732a7c222a0aea45bd173742acd47242d - -Further information and discussion: https://yelizariev.github.io/odoo/module/2015/02/18/im-notifications.html diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index 2ba211f..e902cf9 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -2,9 +2,10 @@ 'name' : 'IM Notifications', 'version' : '1.0.0', 'author' : 'Ivan Yelizariev', - 'category' : 'Sale', + 'category' : 'Tools', 'website' : 'https://yelizariev.github.io', 'depends' : ['im_chat', 'mail'], + 'images': ['images/my-pref.png'], 'data':[ 'im_notif_data.xml', 'im_notif_views.xml', diff --git a/im_notif/images/my-pref.png b/im_notif/images/my-pref.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d8616838c7d5f6cad1623e7cb4b270b0e18626 GIT binary patch literal 37547 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�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 literal 0 HcmV?d00001 diff --git a/im_notif/static/description/index.html b/im_notif/static/description/index.html new file mode 100644 index 0000000..fc94f2d --- /dev/null +++ b/im_notif/static/description/index.html @@ -0,0 +1,65 @@ +
+
+
+

IM Notifications

+

Get instant notification inside odoo

+
+ +
+

+ A user is able to select option for notifications: + +

    +
  • Never
  • +
  • Only IM (if online)
  • +
  • IM (if online) + email (if offline)
  • +
  • IM (if online) + email
  • +
  • Only Emails
+

+
+ +
+
+ +
+
+
+
+ +
+
+
+

+ Each notification includes: +

    +
  • Message type: email, comment or notification
  • +
  • Author's name
  • +
  • Subject with a link to related record (if exists)
  • +
  • Link to inbox
  • +
+

+
+ +
+
+ +
+
+
+
+ +
+
+
+

News & updates

+

+ To get information about new interesting modules and updates, subscribe to our website RSS or follow @yelizariev on twitter. +

+ +
+
+
diff --git a/im_notif/static/description/my-pref-button.png b/im_notif/static/description/my-pref-button.png new file mode 100644 index 0000000000000000000000000000000000000000..601e6a823b9f3fab6759c853a43f26c286d04efc GIT binary patch literal 15972 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 literal 0 HcmV?d00001 From 972e38b215085e0bbf4d2635c6ca0e3b52abb866 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 27 Mar 2015 14:42:07 +0200 Subject: [PATCH 16/35] add price tag --- im_notif/__openerp__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index e902cf9..f499887 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -4,6 +4,8 @@ 'author' : 'Ivan Yelizariev', 'category' : 'Tools', 'website' : 'https://yelizariev.github.io', + 'price': 9.00, + 'currency': 'EUR', 'depends' : ['im_chat', 'mail'], 'images': ['images/my-pref.png'], 'data':[ From 339a2a4f8b391f89780670006d0424cab233dcb1 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 10 Apr 2015 16:49:02 +0200 Subject: [PATCH 17/35] keep built-in default value for notify_email field, because im_and_email value can bring a problems after uninstalling the module. --- im_notif/im_notif_models.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index fa8ba72..840f14f 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -19,10 +19,6 @@ class res_partner(models.Model): ), } - _defaults = { - 'notify_email': lambda *args: 'im_and_email' - } - class mail_notification(models.Model): _inherit = 'mail.notification' From ddb713e2617cca2f2f1407775333b63eb733aef7 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Fri, 10 Apr 2015 17:08:30 +0200 Subject: [PATCH 18/35] add link to blog --- im_notif/static/description/index.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/im_notif/static/description/index.html b/im_notif/static/description/index.html index fc94f2d..ee93f74 100644 --- a/im_notif/static/description/index.html +++ b/im_notif/static/description/index.html @@ -45,6 +45,12 @@ + + From 97a2fb53a534a77af9b45aae6c3659b8c9000181 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Tue, 19 May 2015 15:08:11 +0200 Subject: [PATCH 19/35] Hide Notifications user --- im_notif/__openerp__.py | 2 +- im_notif/doc/changelog.rst | 9 +++++++++ im_notif/im_notif_data.xml | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 im_notif/doc/changelog.rst diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index f499887..ea0fe72 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -1,6 +1,6 @@ { 'name' : 'IM Notifications', - 'version' : '1.0.0', + 'version': '1.0.1', 'author' : 'Ivan Yelizariev', 'category' : 'Tools', 'website' : 'https://yelizariev.github.io', diff --git a/im_notif/doc/changelog.rst b/im_notif/doc/changelog.rst new file mode 100644 index 0000000..e189573 --- /dev/null +++ b/im_notif/doc/changelog.rst @@ -0,0 +1,9 @@ +.. _changelog: + +Changelog +========= + +`1.0.1` +------- + +- Hide Notifications user diff --git a/im_notif/im_notif_data.xml b/im_notif/im_notif_data.xml index 0d2f6b8..a1468bd 100644 --- a/im_notif/im_notif_data.xml +++ b/im_notif/im_notif_data.xml @@ -13,7 +13,7 @@ - + From 857d4d3f70a3b79a93f6faba1f603413321a0a2a Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Sat, 27 Jun 2015 10:56:40 +0500 Subject: [PATCH 20/35] set active field back to True --- im_notif/im_notif_data.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/im_notif/im_notif_data.xml b/im_notif/im_notif_data.xml index a1468bd..0d2f6b8 100644 --- a/im_notif/im_notif_data.xml +++ b/im_notif/im_notif_data.xml @@ -13,7 +13,7 @@ - + From eb6315dd02b055725bbc9c3898f5b6c61f9037ce Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Thu, 2 Jul 2015 16:35:12 +0500 Subject: [PATCH 21/35] add icon --- im_notif/static/description/icon.png | Bin 0 -> 3035 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 im_notif/static/description/icon.png diff --git a/im_notif/static/description/icon.png b/im_notif/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b43a0a135f903a4c0c401f03a8690fbbd021a2ab GIT binary patch literal 3035 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 Date: Sun, 27 Sep 2015 10:22:56 +0500 Subject: [PATCH 22/35] add IT-Projects LLC to authors --- im_notif/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index ea0fe72..7ff691a 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -1,7 +1,7 @@ { 'name' : 'IM Notifications', 'version': '1.0.1', - 'author' : 'Ivan Yelizariev', + 'author' : 'IT-Projects LLC, Ivan Yelizariev', 'category' : 'Tools', 'website' : 'https://yelizariev.github.io', 'price': 9.00, From 07fd496f45ffc9e6a46367ec5179a1647c2cc7fa Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Tue, 3 Nov 2015 10:22:20 +0500 Subject: [PATCH 23/35] add license tag --- im_notif/__openerp__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index 7ff691a..19d5ea0 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -2,6 +2,7 @@ 'name' : 'IM Notifications', 'version': '1.0.1', 'author' : 'IT-Projects LLC, Ivan Yelizariev', + 'license': 'LGPL-3', 'category' : 'Tools', 'website' : 'https://yelizariev.github.io', 'price': 9.00, From b791b4bdcdcf023e3c3b53ab0ce17969bb4f01bf Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Mon, 9 Nov 2015 11:26:31 +0500 Subject: [PATCH 24/35] update license to GPL-3 --- im_notif/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index 19d5ea0..ee688a9 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -2,7 +2,7 @@ 'name' : 'IM Notifications', 'version': '1.0.1', 'author' : 'IT-Projects LLC, Ivan Yelizariev', - 'license': 'LGPL-3', + 'license': 'GPL-3', 'category' : 'Tools', 'website' : 'https://yelizariev.github.io', 'price': 9.00, From f8e41cbd0a5fc82eacdee8bf3db29af424961b3d Mon Sep 17 00:00:00 2001 From: app Date: Fri, 4 Dec 2015 18:10:05 +0000 Subject: [PATCH 25/35] Fix partner notify_email before uninstall --- im_notif/__init__.py | 7 +++++++ im_notif/__openerp__.py | 1 + 2 files changed, 8 insertions(+) diff --git a/im_notif/__init__.py b/im_notif/__init__.py index 6ff86bc..38fa180 100644 --- a/im_notif/__init__.py +++ b/im_notif/__init__.py @@ -1 +1,8 @@ import im_notif_models + + +def pre_uninstall(cr, registry): + query = ("UPDATE res_partner " + "SET notify_email = 'always' " + "WHERE notify_email LIKE 'im%';") + cr.execute(query) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index ee688a9..9dcc6d6 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -14,4 +14,5 @@ 'im_notif_views.xml', ], 'installable': True + 'uninstall_hook': 'pre_uninstall', } From d81f03463eebbb8f01d5e640e96da5ea34d48507 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Sun, 6 Dec 2015 12:14:55 +0500 Subject: [PATCH 26/35] update website --- im_notif/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index 9dcc6d6..0700897 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -4,7 +4,7 @@ 'author' : 'IT-Projects LLC, Ivan Yelizariev', 'license': 'GPL-3', 'category' : 'Tools', - 'website' : 'https://yelizariev.github.io', + 'website' : 'https://twitter.com/yelizariev', 'price': 9.00, 'currency': 'EUR', 'depends' : ['im_chat', 'mail'], From a4ff45304a91e775a978036a883de7a5498d25ae Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Sun, 6 Dec 2015 13:18:16 +0500 Subject: [PATCH 27/35] --- im_notif/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index 0700897..6e481d6 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -13,6 +13,6 @@ 'im_notif_data.xml', 'im_notif_views.xml', ], - 'installable': True + 'installable': True, 'uninstall_hook': 'pre_uninstall', } From f19561fe2b67132fd7270ec3f46eadf7e0a43983 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Sun, 6 Dec 2015 14:16:37 +0500 Subject: [PATCH 28/35] update contact us section --- im_notif/static/description/index.html | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/im_notif/static/description/index.html b/im_notif/static/description/index.html index ee93f74..c67c76d 100644 --- a/im_notif/static/description/index.html +++ b/im_notif/static/description/index.html @@ -57,14 +57,12 @@
-

News & updates

-

- To get information about new interesting modules and updates, subscribe to our website RSS or follow @yelizariev on twitter. -

+

Need our service?

+

Contact us by email or fill out request form

From 4a1cd26e97468490c8114cadaf39569bc24a7178 Mon Sep 17 00:00:00 2001 From: x620 Date: Mon, 15 Aug 2016 19:18:39 +0500 Subject: [PATCH 29/35] Fix lint errors --- im_notif/__init__.py | 3 ++- im_notif/__openerp__.py | 15 ++++++++------- im_notif/im_notif_data.xml | 2 +- im_notif/im_notif_models.py | 25 +++++++++++++------------ im_notif/im_notif_views.xml | 2 +- im_notif/static/src/js/im_notif.js | 4 ++-- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/im_notif/__init__.py b/im_notif/__init__.py index 38fa180..e8cfb16 100644 --- a/im_notif/__init__.py +++ b/im_notif/__init__.py @@ -1,4 +1,5 @@ -import im_notif_models +# -*- coding: utf-8 -*- +from . import im_notif_models def pre_uninstall(cr, registry): diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py index 6e481d6..a4c3c5e 100644 --- a/im_notif/__openerp__.py +++ b/im_notif/__openerp__.py @@ -1,18 +1,19 @@ +# -*- coding: utf-8 -*- { - 'name' : 'IM Notifications', + 'name': 'IM Notifications', 'version': '1.0.1', - 'author' : 'IT-Projects LLC, Ivan Yelizariev', + 'author': 'IT-Projects LLC, Ivan Yelizariev', 'license': 'GPL-3', - 'category' : 'Tools', - 'website' : 'https://twitter.com/yelizariev', + 'category': 'Tools', + 'website': 'https://twitter.com/yelizariev', 'price': 9.00, 'currency': 'EUR', - 'depends' : ['im_chat', 'mail'], + 'depends': ['im_chat', 'mail'], 'images': ['images/my-pref.png'], - 'data':[ + 'data': [ 'im_notif_data.xml', 'im_notif_views.xml', - ], + ], 'installable': True, 'uninstall_hook': 'pre_uninstall', } diff --git a/im_notif/im_notif_data.xml b/im_notif/im_notif_data.xml index 0d2f6b8..fb8a164 100644 --- a/im_notif/im_notif_data.xml +++ b/im_notif/im_notif_data.xml @@ -15,5 +15,5 @@ - + diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index 840f14f..58d06c1 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -1,9 +1,11 @@ -import openerp -from openerp import api, models, fields, SUPERUSER_ID, tools +# -*- coding: utf-8 -*- +from openerp import SUPERUSER_ID +from openerp import models +from openerp import tools from openerp.osv import fields as old_fields -from openerp.tools import html2plaintext from openerp.tools.translate import _ + class res_partner(models.Model): _inherit = 'res.partner' _columns = { @@ -13,12 +15,13 @@ class res_partner(models.Model): ('im_xor_email', 'IM (if online) + email (if offline)'), ('im_and_email', 'IM (if online) + email'), ('always', 'Only emails'), - ], 'Receive Inbox Notifications by Email, IM', required=True, + ], 'Receive Inbox Notifications by Email, IM', required=True, oldname='notification_email_send', help="Policy to receive emails, IM for new messages pushed to your personal Inbox. IM can be used only for partners with odoo user account" - ), + ), } + class mail_notification(models.Model): _inherit = 'mail.notification' @@ -51,7 +54,7 @@ class mail_notification(models.Model): continue send_email = False for user in partner.user_ids: - if user.im_status=='offline': + if user.im_status == 'offline': if n != 'im': send_email = True else: @@ -79,26 +82,25 @@ class mail_notification(models.Model): ) author = message.author_id and message.author_id.name_get() author = author and author[0][1] or message.email_from - #body = html2plaintext(message.body)[:100] or '' + # body = html2plaintext(message.body)[:100] or '' mtype = {'email': _('Email'), 'comment': _('Comment'), 'notification': _('System notification'), - }.get(message.type, '') + }.get(message.type, '') about = message.subject or message.record_name or 'UNDEFINED' about = '[ABOUT] %s' % about if url: - about = '%s' % (url, about) + about = '%s' % (url, about) im_text = [ '_____________________', '_____[open_inbox]_____' % inbox_url, '%s [FROM] %s' % (message.type, author), about, ] - #im_text = im_text + body.split('\n') + # im_text = im_text + body.split('\n') return im_text - def _notify_email(self, cr, uid, ids, message_id, force_send=False, user_signature=True, context=None): # based on addons/mail/mail_followers.py::_notify_email message = self.pool['mail.message'].browse(cr, SUPERUSER_ID, message_id, context=context) @@ -128,7 +130,6 @@ class mail_notification(models.Model): return True - def _do_notify_email(self, cr, uid, email_pids, message, force_send=False, user_signature=True, context=None): # compute email body (signature, company data) diff --git a/im_notif/im_notif_views.xml b/im_notif/im_notif_views.xml index ac90b0a..38ee97f 100644 --- a/im_notif/im_notif_views.xml +++ b/im_notif/im_notif_views.xml @@ -8,5 +8,5 @@ - + diff --git a/im_notif/static/src/js/im_notif.js b/im_notif/static/src/js/im_notif.js index 7994ca3..cf9eaff 100644 --- a/im_notif/static/src/js/im_notif.js +++ b/im_notif/static/src/js/im_notif.js @@ -40,5 +40,5 @@ txt += _.escape(str.slice(last, str.length)); return txt; }, - }) - })() \ No newline at end of file + }); + })(); \ No newline at end of file From 4ccbea83af667885505106e65901ea5063f1960d Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Tue, 16 Aug 2016 17:54:27 +0500 Subject: [PATCH 30/35] fix lint errors --- im_notif/doc/changelog.rst | 4 ++-- im_notif/im_notif_models.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/im_notif/doc/changelog.rst b/im_notif/doc/changelog.rst index e189573..981e0e8 100644 --- a/im_notif/doc/changelog.rst +++ b/im_notif/doc/changelog.rst @@ -1,7 +1,7 @@ .. _changelog: -Changelog -========= +Updates +======= `1.0.1` ------- diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index 58d06c1..f45e50d 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -6,7 +6,7 @@ from openerp.osv import fields as old_fields from openerp.tools.translate import _ -class res_partner(models.Model): +class ResPartner(models.Model): _inherit = 'res.partner' _columns = { 'notify_email': old_fields.selection([ @@ -22,7 +22,7 @@ class res_partner(models.Model): } -class mail_notification(models.Model): +class MailNotification(models.Model): _inherit = 'mail.notification' def get_recipients(self, cr, uid, ids, message, context=None): From 34cd2750ec15eb7cc0695ece62547eaef106c377 Mon Sep 17 00:00:00 2001 From: manawi Date: Tue, 4 Oct 2016 11:31:14 +0500 Subject: [PATCH 31/35] fixes for travis (#264) [FIX] lint fixes * [FIX] web_calendar_repeat_form: remove duplicate description form __openerp__.py * [FIX] web_calendar_quick_navigation: remove duplicate key 'description' * [FIX] project_description: remove duplicate key 'demo_xml' * [FIX] web_session_managment: relative import http * [FIX] product_image_filestore: '\' changed to '/' * [FIX] currency_rate_update: don't use {} as argument * [FIX] web_logo/contrillers: remove Unreacheble code * [FIX] res_partner_phone: do not assign a lambda expression * [FIX] currency_rate_update: continuation line unaligned for hanging indent * [FIX] flake8 E302 * [FIX] flake8 F841 * [FIX] flake8 F841 * [FIX] currency_rate_update: Use of eval * [FIX] delivery_special: Use of eval * [FIX] autopep8 * [FIX] unused imports * [FIX] fix comments * [FIX] rst-files * [FIX] flake8 * [FIX] flake8: product_image_filestore --- im_notif/im_notif_models.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py index f45e50d..d12752a 100644 --- a/im_notif/im_notif_models.py +++ b/im_notif/im_notif_models.py @@ -3,7 +3,6 @@ from openerp import SUPERUSER_ID from openerp import models from openerp import tools from openerp.osv import fields as old_fields -from openerp.tools.translate import _ class ResPartner(models.Model): @@ -82,11 +81,6 @@ class MailNotification(models.Model): ) author = message.author_id and message.author_id.name_get() author = author and author[0][1] or message.email_from - # body = html2plaintext(message.body)[:100] or '' - mtype = {'email': _('Email'), - 'comment': _('Comment'), - 'notification': _('System notification'), - }.get(message.type, '') about = message.subject or message.record_name or 'UNDEFINED' about = '[ABOUT] %s' % about @@ -126,7 +120,7 @@ class MailNotification(models.Model): session = session_obj.session_get(cr, user_from, user_to, context=context) uuid = session.get('uuid') message_content = '\n'.join(im_text) - message_id = self.pool["im_chat.message"].post(cr, SUPERUSER_ID, user_from, uuid, message_type, message_content, context=context) + self.pool["im_chat.message"].post(cr, SUPERUSER_ID, user_from, uuid, message_type, message_content, context=context) return True From 4a36f47c785fbde3969ca2f1fb4472ce032d0676 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Mon, 16 Jan 2017 14:55:22 +0500 Subject: [PATCH 32/35] add line break at the end of file --- im_notif/static/src/js/im_notif.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/im_notif/static/src/js/im_notif.js b/im_notif/static/src/js/im_notif.js index cf9eaff..7e2c6e5 100644 --- a/im_notif/static/src/js/im_notif.js +++ b/im_notif/static/src/js/im_notif.js @@ -41,4 +41,4 @@ return txt; }, }); - })(); \ No newline at end of file + })(); From d1c2ec327e68043817db6ac4f92db55bbd8c2555 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Wed, 25 Jan 2017 20:04:37 +0500 Subject: [PATCH 33/35] don't use header in changelog.rst --- im_notif/doc/changelog.rst | 5 ----- 1 file changed, 5 deletions(-) diff --git a/im_notif/doc/changelog.rst b/im_notif/doc/changelog.rst index 981e0e8..9ae06bd 100644 --- a/im_notif/doc/changelog.rst +++ b/im_notif/doc/changelog.rst @@ -1,8 +1,3 @@ -.. _changelog: - -Updates -======= - `1.0.1` ------- From b6e89267b5e364737984c6f07100e24bfb732247 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Tue, 26 Sep 2017 10:18:12 +0500 Subject: [PATCH 34/35] [DOC] note for 9.0+ users --- im_notif/README.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/im_notif/README.rst b/im_notif/README.rst index f6a7d08..b3ef2c7 100644 --- a/im_notif/README.rst +++ b/im_notif/README.rst @@ -6,3 +6,8 @@ Description: https://apps.odoo.com/apps/modules/8.0/im_notif/ Further information and discussion: https://yelizariev.github.io/odoo/module/2015/02/18/im-notifications.html Tested on Odoo 8.0 ab7b5d7732a7c222a0aea45bd173742acd47242d + +Odoo 9.0+ +========= + +For newer version the module is not needed, cause there is similar built-in feature From 982f8fe9218350c59d432f69121e6259f0b14a2e Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Wed, 27 Sep 2017 07:10:12 +0000 Subject: [PATCH 35/35] [REM] im_notif - it is only for 8.0 --- im_notif/README.rst | 13 -- im_notif/__init__.py | 9 - im_notif/__openerp__.py | 19 --- im_notif/doc/changelog.rst | 4 - im_notif/im_notif_data.xml | 19 --- im_notif/im_notif_models.py | 160 ------------------ im_notif/im_notif_views.xml | 12 -- im_notif/images/my-pref.png | Bin 37547 -> 0 bytes im_notif/static/description/icon.png | Bin 3035 -> 0 bytes im_notif/static/description/im-chat.png | Bin 28634 -> 0 bytes im_notif/static/description/index.html | 69 -------- .../static/description/my-pref-button.png | Bin 15972 -> 0 bytes im_notif/static/src/js/im_notif.js | 44 ----- 13 files changed, 349 deletions(-) delete mode 100644 im_notif/README.rst delete mode 100644 im_notif/__init__.py delete mode 100644 im_notif/__openerp__.py delete mode 100644 im_notif/doc/changelog.rst delete mode 100644 im_notif/im_notif_data.xml delete mode 100644 im_notif/im_notif_models.py delete mode 100644 im_notif/im_notif_views.xml delete mode 100644 im_notif/images/my-pref.png delete mode 100644 im_notif/static/description/icon.png delete mode 100644 im_notif/static/description/im-chat.png delete mode 100644 im_notif/static/description/index.html delete mode 100644 im_notif/static/description/my-pref-button.png delete mode 100644 im_notif/static/src/js/im_notif.js diff --git a/im_notif/README.rst b/im_notif/README.rst deleted file mode 100644 index b3ef2c7..0000000 --- a/im_notif/README.rst +++ /dev/null @@ -1,13 +0,0 @@ -IM Notifications -================ - -Description: https://apps.odoo.com/apps/modules/8.0/im_notif/ - -Further information and discussion: https://yelizariev.github.io/odoo/module/2015/02/18/im-notifications.html - -Tested on Odoo 8.0 ab7b5d7732a7c222a0aea45bd173742acd47242d - -Odoo 9.0+ -========= - -For newer version the module is not needed, cause there is similar built-in feature diff --git a/im_notif/__init__.py b/im_notif/__init__.py deleted file mode 100644 index e8cfb16..0000000 --- a/im_notif/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -from . import im_notif_models - - -def pre_uninstall(cr, registry): - query = ("UPDATE res_partner " - "SET notify_email = 'always' " - "WHERE notify_email LIKE 'im%';") - cr.execute(query) diff --git a/im_notif/__openerp__.py b/im_notif/__openerp__.py deleted file mode 100644 index a4c3c5e..0000000 --- a/im_notif/__openerp__.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -{ - 'name': 'IM Notifications', - 'version': '1.0.1', - 'author': 'IT-Projects LLC, Ivan Yelizariev', - 'license': 'GPL-3', - 'category': 'Tools', - 'website': 'https://twitter.com/yelizariev', - 'price': 9.00, - 'currency': 'EUR', - 'depends': ['im_chat', 'mail'], - 'images': ['images/my-pref.png'], - 'data': [ - 'im_notif_data.xml', - 'im_notif_views.xml', - ], - 'installable': True, - 'uninstall_hook': 'pre_uninstall', -} diff --git a/im_notif/doc/changelog.rst b/im_notif/doc/changelog.rst deleted file mode 100644 index 9ae06bd..0000000 --- a/im_notif/doc/changelog.rst +++ /dev/null @@ -1,4 +0,0 @@ -`1.0.1` -------- - -- Hide Notifications user diff --git a/im_notif/im_notif_data.xml b/im_notif/im_notif_data.xml deleted file mode 100644 index fb8a164..0000000 --- a/im_notif/im_notif_data.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Notifications - - Technical profile. You should not delete it. - - - Notifications - notifications - - - - - - - - diff --git a/im_notif/im_notif_models.py b/im_notif/im_notif_models.py deleted file mode 100644 index d12752a..0000000 --- a/im_notif/im_notif_models.py +++ /dev/null @@ -1,160 +0,0 @@ -# -*- coding: utf-8 -*- -from openerp import SUPERUSER_ID -from openerp import models -from openerp import tools -from openerp.osv import fields as old_fields - - -class ResPartner(models.Model): - _inherit = 'res.partner' - _columns = { - 'notify_email': old_fields.selection([ - ('none', 'Never'), - ('im', 'Only IM (if online)'), - ('im_xor_email', 'IM (if online) + email (if offline)'), - ('im_and_email', 'IM (if online) + email'), - ('always', 'Only emails'), - ], 'Receive Inbox Notifications by Email, IM', required=True, - oldname='notification_email_send', - help="Policy to receive emails, IM for new messages pushed to your personal Inbox. IM can be used only for partners with odoo user account" - ), - } - - -class MailNotification(models.Model): - _inherit = 'mail.notification' - - def get_recipients(self, cr, uid, ids, message, context=None): - # based on addons/mail/mail_followers.py::get_partners_to_email - """ Return the list of partners to notify, based on their preferences. - - :param browse_record message: mail.message to notify - :param list partners_to_notify: optional list of partner ids restricting - the notifications to process - """ - email_pids = [] - im_uids = [] - for notification in self.browse(cr, uid, ids, context=context): - if notification.is_read: - continue - partner = notification.partner_id - # Do not send to partners without email address defined - if not partner.email: - continue - # Do not send to partners having same email address than the author (can cause loops or bounce effect due to messy database) - if message.author_id and message.author_id.email == partner.email: - continue - # Partner does not want to receive any emails or is opt-out - n = partner.notify_email - if n == 'none': - continue - if n == 'always': - email_pids.append(partner.id) - continue - send_email = False - for user in partner.user_ids: - if user.im_status == 'offline': - if n != 'im': - send_email = True - else: - im_uids.append(user.id) - if n == 'im_and_email': - send_email = True - - if not len(partner.user_ids): - # send notification to partner, that doesn't have odoo account, but has "im*" value in notify_email - send_email = True - - if send_email: - email_pids.append(partner.id) - - return email_pids, im_uids - - def _message2im(self, cr, uid, message): - inbox_action = self.pool['ir.model.data'].xmlid_to_res_id(cr, SUPERUSER_ID, 'mail.mail_inboxfeeds') - inbox_url = '#menu_id=%s' % inbox_action - url = None - if message.res_id: - url = '#id=%s&model=%s&view_type=form' % ( - message.res_id, - message.model - ) - author = message.author_id and message.author_id.name_get() - author = author and author[0][1] or message.email_from - - about = message.subject or message.record_name or 'UNDEFINED' - about = '[ABOUT] %s' % about - if url: - about = '%s' % (url, about) - im_text = [ - '_____________________', - '_____[open_inbox]_____' % inbox_url, - '%s [FROM] %s' % (message.type, author), - about, - ] - # im_text = im_text + body.split('\n') - return im_text - - def _notify_email(self, cr, uid, ids, message_id, force_send=False, user_signature=True, context=None): - # based on addons/mail/mail_followers.py::_notify_email - message = self.pool['mail.message'].browse(cr, SUPERUSER_ID, message_id, context=context) - - # compute partners - email_pids, im_uids = self.get_recipients(cr, uid, ids, message, context=None) - if email_pids: - self._do_notify_email(cr, uid, email_pids, message, force_send, user_signature, context) - - if im_uids: - self._do_notify_im(cr, uid, im_uids, message, context) - - return True - - def _do_notify_im(self, cr, uid, im_uids, message, context=None): - im_text = self._message2im(cr, uid, message) - - user_from = self.pool['ir.model.data'].xmlid_to_res_id(cr, SUPERUSER_ID, 'im_notif.notif_user') - - session_obj = self.pool['im_chat.session'] - message_type = 'message' - for user_to in im_uids: - session = session_obj.session_get(cr, user_from, user_to, context=context) - uuid = session.get('uuid') - message_content = '\n'.join(im_text) - self.pool["im_chat.message"].post(cr, SUPERUSER_ID, user_from, uuid, message_type, message_content, context=context) - - return True - - def _do_notify_email(self, cr, uid, email_pids, message, force_send=False, user_signature=True, context=None): - - # compute email body (signature, company data) - body_html = message.body - # add user signature except for mail groups, where users are usually adding their own signatures already - user_id = message.author_id and message.author_id.user_ids and message.author_id.user_ids[0] and message.author_id.user_ids[0].id or None - signature_company = self.get_signature_footer(cr, uid, user_id, res_model=message.model, res_id=message.res_id, context=context, user_signature=(user_signature and message.model != 'mail.group')) - if signature_company: - body_html = tools.append_content_to_html(body_html, signature_company, plaintext=False, container_tag='div') - # compute email references - references = message.parent_id.message_id if message.parent_id else False - - # custom values - custom_values = dict() - if message.model and message.res_id and self.pool.get(message.model) and hasattr(self.pool[message.model], 'message_get_email_values'): - custom_values = self.pool[message.model].message_get_email_values(cr, uid, message.res_id, message, context=context) - - # create email values - max_recipients = 50 - chunks = [email_pids[x:x + max_recipients] for x in xrange(0, len(email_pids), max_recipients)] - email_ids = [] - for chunk in chunks: - mail_values = { - 'mail_message_id': message.id, - 'auto_delete': True, - 'body_html': body_html, - 'recipient_ids': [(4, id) for id in chunk], - 'references': references, - } - mail_values.update(custom_values) - email_ids.append(self.pool.get('mail.mail').create(cr, uid, mail_values, context=context)) - if force_send and len(chunks) < 2: # for more than 50 followers, use the queue system - self.pool.get('mail.mail').send(cr, uid, email_ids, context=context) - return True diff --git a/im_notif/im_notif_views.xml b/im_notif/im_notif_views.xml deleted file mode 100644 index 38ee97f..0000000 --- a/im_notif/im_notif_views.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/im_notif/images/my-pref.png b/im_notif/images/my-pref.png deleted file mode 100644 index a3d8616838c7d5f6cad1623e7cb4b270b0e18626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37547 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�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 diff --git a/im_notif/static/description/index.html b/im_notif/static/description/index.html deleted file mode 100644 index c67c76d..0000000 --- a/im_notif/static/description/index.html +++ /dev/null @@ -1,69 +0,0 @@ -
-
-
-

IM Notifications

-

Get instant notification inside odoo

-
- -
-

- A user is able to select option for notifications: - -

    -
  • Never
  • -
  • Only IM (if online)
  • -
  • IM (if online) + email (if offline)
  • -
  • IM (if online) + email
  • -
  • Only Emails
-

-
- -
-
- -
-
-
-
- -
-
-
-

- Each notification includes: -

    -
  • Message type: email, comment or notification
  • -
  • Author's name
  • -
  • Subject with a link to related record (if exists)
  • -
  • Link to inbox
  • -
-

-
- -
-
- -
-
- - -
-
- -
-
- -
-
diff --git a/im_notif/static/description/my-pref-button.png b/im_notif/static/description/my-pref-button.png deleted file mode 100644 index 601e6a823b9f3fab6759c853a43f26c286d04efc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15972 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 diff --git a/im_notif/static/src/js/im_notif.js b/im_notif/static/src/js/im_notif.js deleted file mode 100644 index 7e2c6e5..0000000 --- a/im_notif/static/src/js/im_notif.js +++ /dev/null @@ -1,44 +0,0 @@ - (function(){ - - "use strict"; - - var _t = openerp._t; - var _lt = openerp._lt; - var QWeb = openerp.qweb; - - openerp.im_chat.Conversation.include({ - escape_keep_url: function(str){ - //var url_regex = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi; - var url_regex = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?|(]*href="([^"]*)"[^>]*>([^<]*)<\/a>)/gi; - var last = 0; - var txt = ""; - while (true) { - var result = url_regex.exec(str); - if (! result) - break; - txt += _.escape(str.slice(last, result.index)); - last = url_regex.lastIndex; - var href = ''; - var content = ''; - var is_odoo_ref = false; - if (result[8]=='' + content + ''; - } - txt += _.escape(str.slice(last, str.length)); - return txt; - }, - }); - })();