diff --git a/res_partner_mails_count/__init__.py b/res_partner_mails_count/__init__.py new file mode 100644 index 0000000..c7a6ca6 --- /dev/null +++ b/res_partner_mails_count/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +import controllers +import models \ No newline at end of file diff --git a/res_partner_mails_count/__openerp__.py b/res_partner_mails_count/__openerp__.py new file mode 100644 index 0000000..0af6711 --- /dev/null +++ b/res_partner_mails_count/__openerp__.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +{ + 'name': "res_partner_mails_count", + + 'summary': """ + Short (1 phrase/line) summary of the module's purpose, used as + subtitle on modules listing or apps.openerp.com""", + + 'description': """ + Long description of module's purpose + """, + + 'author': "Your Company", + 'website': "http://www.yourcompany.com", + + # Categories can be used to filter modules in modules listing + # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml + # for the full list + 'category': 'Uncategorized', + 'version': '0.1', + + # any module necessary for this one to work correctly + 'depends': ['base', 'mail'], + + # always loaded + 'data': [ + # 'security/ir.model.access.csv', + 'views/res_partner_mails_count.xml', + 'templates.xml', + ], + # only loaded in demonstration mode + 'demo': [ + 'demo.xml', + ], +} \ No newline at end of file diff --git a/res_partner_mails_count/controllers.py b/res_partner_mails_count/controllers.py new file mode 100644 index 0000000..a1262c1 --- /dev/null +++ b/res_partner_mails_count/controllers.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from openerp import http + +# class ResPartnerMailsCount(http.Controller): +# @http.route('/res_partner_mails_count/res_partner_mails_count/', auth='public') +# def index(self, **kw): +# return "Hello, world" + +# @http.route('/res_partner_mails_count/res_partner_mails_count/objects/', auth='public') +# def list(self, **kw): +# return http.request.render('res_partner_mails_count.listing', { +# 'root': '/res_partner_mails_count/res_partner_mails_count', +# 'objects': http.request.env['res_partner_mails_count.res_partner_mails_count'].search([]), +# }) + +# @http.route('/res_partner_mails_count/res_partner_mails_count/objects//', auth='public') +# def object(self, obj, **kw): +# return http.request.render('res_partner_mails_count.object', { +# 'object': obj +# }) \ No newline at end of file diff --git a/res_partner_mails_count/demo.xml b/res_partner_mails_count/demo.xml new file mode 100644 index 0000000..94953d2 --- /dev/null +++ b/res_partner_mails_count/demo.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res_partner_mails_count/models.py b/res_partner_mails_count/models.py new file mode 100644 index 0000000..dcd036a --- /dev/null +++ b/res_partner_mails_count/models.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +from openerp import models, fields, api + + +class res_partner(models.Model): + _inherit = 'res.partner' + mails_to = fields.Integer(compute="_mails_to") + mails_from = fields.Integer(compute="_mails_from") + + @api.one + def _mails_to(self): + for r in self: + r.mails_to = self.env['mail.message'].sudo().search_count([('partner_ids', 'in', r.id)]) + + @api.one + def _mails_from(self): + for r in self: + r.mails_from = self.env['mail.message'].sudo().search_count([('author_id', '=', r.id)]) diff --git a/res_partner_mails_count/security/ir.model.access.csv b/res_partner_mails_count/security/ir.model.access.csv new file mode 100644 index 0000000..99d8f27 --- /dev/null +++ b/res_partner_mails_count/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_res_partner_mails_count_res_partner_mails_count,res_partner_mails_count.res_partner_mails_count,model_res_partner_mails_count_res_partner_mails_count,,1,0,0,0 \ No newline at end of file diff --git a/res_partner_mails_count/static/src/js/main.js b/res_partner_mails_count/static/src/js/main.js new file mode 100644 index 0000000..78fcd66 --- /dev/null +++ b/res_partner_mails_count/static/src/js/main.js @@ -0,0 +1,8 @@ +openerp.res_partner_mails_count = function(instance){ + instance.mail.Wall.include({ + init: function(){ + this._super.apply(this, arguments); + delete this.defaults.model; + } + }); +}; diff --git a/res_partner_mails_count/templates.xml b/res_partner_mails_count/templates.xml new file mode 100644 index 0000000..a429476 --- /dev/null +++ b/res_partner_mails_count/templates.xml @@ -0,0 +1,35 @@ + + + + + + res.partner.mails.count + res.partner + + + + + + + + + + + \ No newline at end of file diff --git a/res_partner_mails_count/tests/__init__.py b/res_partner_mails_count/tests/__init__.py new file mode 100644 index 0000000..300df16 --- /dev/null +++ b/res_partner_mails_count/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import test_mail diff --git a/res_partner_mails_count/tests/test_mail.py b/res_partner_mails_count/tests/test_mail.py new file mode 100644 index 0000000..4fc6383 --- /dev/null +++ b/res_partner_mails_count/tests/test_mail.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +from openerp.tests.common import TransactionCase + + +class test_message_count(TransactionCase): + post_install = True + def test_count(self): + new_partner1 = self.env['res.partner'].sudo().create({'name': 'rpmc Test Partner one', 'email': 'tt@tt', 'notify_email': 'always'}) + new_partner2 = self.env['res.partner'].sudo().create({'name': 'rpmc Test Partner two', 'email': 'rr@rr', 'notify_email': 'always'}) + self.assertEqual(new_partner1.mails_to, 0, 'rpmc: new partner have mails_to != 0') + mail_compose = self.env['mail.compose.message'] + compose = mail_compose.with_context( + { + 'default_composition_mode': 'comment', + 'default_model': 'res.partner', + 'default_res_id': new_partner1.id, + }).create( + { + 'subject': 'test subj', + 'body': 'test body', + 'partner_ids': [(4, new_partner2.id)], + 'email_from': 'tt@tt', + 'author_id': new_partner1.id + }) + compose.send_mail() + self.assertEqual(new_partner1.mails_to, 0) + self.assertEqual(new_partner1.mails_from, 1, 'rpmc: one message but mails_from != 1') + self.assertEqual(new_partner2.mails_to, 1, 'rpmc: one message but mails_to != 1') + self.assertEqual(new_partner2.mails_from, 0) + compose.send_mail() + self.assertEqual(new_partner1.mails_to, 0) + self.assertEqual(new_partner1.mails_from, 2, 'rpmc: one message but mails_from != 2') + self.assertEqual(new_partner2.mails_to, 2, 'rpmc: one message but mails_to != 2') + self.assertEqual(new_partner2.mails_from, 0) \ No newline at end of file diff --git a/res_partner_mails_count/views/res_partner_mails_count.xml b/res_partner_mails_count/views/res_partner_mails_count.xml new file mode 100644 index 0000000..ce339a6 --- /dev/null +++ b/res_partner_mails_count/views/res_partner_mails_count.xml @@ -0,0 +1,18 @@ + + + + + Mails + mail.wall + mail.message + { + 'ignore_search_model': True, + } + +

+ Mails not found. Probably, they exist, but you don't have access. +

+
+
+
+