Browse Source

[MIG] base_search_mail_content: Migration to 10.0

pull/282/head
mreficent 7 years ago
committed by cubells
parent
commit
9e3726a179
  1. 12
      base_search_mail_content/README.rst
  2. 7
      base_search_mail_content/__manifest__.py
  3. 6
      base_search_mail_content/data/trgm_index_data.xml
  4. 3
      base_search_mail_content/models/__init__.py
  5. 102
      base_search_mail_content/models/mail_thread.py
  6. 13
      base_search_mail_content/models/res_partner.py
  7. BIN
      base_search_mail_content/static/description/icon.png
  8. 3
      base_search_mail_content/tests/__init__.py
  9. 25
      base_search_mail_content/tests/test_base_search_mail_content.py
  10. 44
      base_search_mail_content/views/trgm_index_view.xml

12
base_search_mail_content/README.rst

@ -17,7 +17,7 @@ associated, based on the feedback that the person responsible for the ticket
maintains, including conversations with the person that raised the issue. maintains, including conversations with the person that raised the issue.
A user may often want to find issues or tickets, based on the past A user may often want to find issues or tickets, based on the past
conversations that were recorded, as much as he/she needs to search
conversations that were recorded, as much as he or she needs to search
in their mail for past conversations. in their mail for past conversations.
This module will add dynamically a field 'message_content' to the search view of This module will add dynamically a field 'message_content' to the search view of
@ -30,9 +30,8 @@ Installation
============ ============
This module depends on the module 'base_search_fuzzy' to ensure that This module depends on the module 'base_search_fuzzy' to ensure that
searches on emails are based on indexes. Please read carefully the install
instructions:
https://github.com/OCA/server-tools/blob/9.0/base_search_fuzzy/README.rst
searches on emails are based on indexes. Please read carefully the
`install instructions <https://github.com/OCA/server-tools/blob/10.0/base_search_fuzzy/README.rst>`_.
This module installs by default the indexes that are required to This module installs by default the indexes that are required to
perform the searches on mail messages. perform the searches on mail messages.
@ -40,12 +39,12 @@ perform the searches on mail messages.
Usage Usage
===== =====
Go to any model that contains a chatter (e.g. Partners, Leads, ...). Search
Go to any model that contains a chatter (e.g. Contacts, ...). Search
for content in field 'Message Content'. for content in field 'Message Content'.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot :alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/server-tools/9.0
:target: https://runbot.odoo-community.org/runbot/server-tools/10.0
Bug Tracker Bug Tracker
=========== ===========
@ -71,7 +70,6 @@ Contributors
* Lois Rilo Antelo <lois.rilo@eficent.com> * Lois Rilo Antelo <lois.rilo@eficent.com>
* Aaron Henriquez <ahenriquez@eficent.com> * Aaron Henriquez <ahenriquez@eficent.com>
Maintainer Maintainer
---------- ----------

7
base_search_mail_content/__openerp__.py → base_search_mail_content/__manifest__.py

@ -6,16 +6,15 @@
{ {
"name": "Base Search Mail Content", "name": "Base Search Mail Content",
"version": "9.0.1.0.0",
"version": "10.0.1.0.0",
"author": "Eficent," "author": "Eficent,"
"SerpentCS," "SerpentCS,"
"Odoo Community Association (OCA)", "Odoo Community Association (OCA)",
"website": "http://www.eficent.com",
"website": "https://github.com/OCA/social",
"category": "Social", "category": "Social",
"data": ["data/trgm_index_data.xml", "data": ["data/trgm_index_data.xml",
"views/trgm_index_view.xml"], "views/trgm_index_view.xml"],
"depends": ["mail",
"base_search_fuzzy"],
"depends": ["mail", "base_search_fuzzy"],
"license": "AGPL-3", "license": "AGPL-3",
'installable': True, 'installable': True,
} }

6
base_search_mail_content/data/trgm_index_data.xml

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<odoo noupdate="1">
<record id="subject_gin_idx" model="trgm.index"> <record id="subject_gin_idx" model="trgm.index">
<field name="index_type">gin</field> <field name="index_type">gin</field>
@ -32,5 +31,4 @@
search="[('model','=','mail.message'),('name','=','reply_to')]"/> search="[('model','=','mail.message'),('name','=','reply_to')]"/>
</record> </record>
</data>
</openerp>
</odoo>

3
base_search_mail_content/models/__init__.py

@ -1,8 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016-17 Eficent Business and IT Consulting Services S.L.
# (http://www.eficent.com) # (http://www.eficent.com)
# © 2016 Serpent Consulting Services Pvt. Ltd. (<http://www.serpentcs.com>) # © 2016 Serpent Consulting Services Pvt. Ltd. (<http://www.serpentcs.com>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import mail_thread from . import mail_thread
from . import res_partner

102
base_search_mail_content/models/mail_thread.py

@ -1,13 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016-17 Eficent Business and IT Consulting Services S.L.
# (http://www.eficent.com) # (http://www.eficent.com)
# © 2016 Serpent Consulting Services Pvt. Ltd. (<http://www.serpentcs.com>) # © 2016 Serpent Consulting Services Pvt. Ltd. (<http://www.serpentcs.com>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from openerp import api, fields, models
from odoo import api, fields, models
from lxml import etree from lxml import etree
from openerp.osv import expression
from openerp.osv.orm import setup_modifiers
from odoo.osv import expression
from odoo.osv.orm import setup_modifiers
class MailThread(models.AbstractModel): class MailThread(models.AbstractModel):
@ -16,64 +16,52 @@ class MailThread(models.AbstractModel):
def _search_message_content(self, operator, value): def _search_message_content(self, operator, value):
main_operator = 'in'
if operator in expression.NEGATIVE_TERM_OPERATORS:
main_operator = 'not in'
operators = {'!=': '=', 'not like': 'like',
'not ilike': 'ilike', 'not in': 'in'}
operator = operators[operator]
domain = [('model', '=', self._name), '|', '|', '|', '|',
('record_name', operator, value),
('subject', operator, value), ('body', operator, value),
('email_from', operator, value),
('reply_to', operator, value)]
recs = self.env['mail.message'].search(domain)
return [('id', main_operator, recs.mapped('res_id'))]
@api.multi
def _compute_message_content(self):
""" We don't really need to show any content. This field is to be
used only by searches"""
return ''
model_domain = [('model', '=', self._name)]
if operator not in expression.NEGATIVE_TERM_OPERATORS:
model_domain += ["|"] * 4
model_domain += [
('record_name', operator, value),
('subject', operator, value),
('body', operator, value),
('email_from', operator, value),
('reply_to', operator, value)
]
recs = self.env['mail.message'].search(model_domain)
return [('id', 'in', recs.mapped('res_id'))]
message_content = fields.Text( message_content = fields.Text(
string='Message Content', string='Message Content',
help='Message content, to be used only in searches', help='Message content, to be used only in searches',
compute="_compute_message_content",
compute=lambda self: False,
search='_search_message_content') search='_search_message_content')
_base_fields_view_get = models.BaseModel.fields_view_get
@api.model
def _custom_fields_view_get(self, view_id=None, view_type='form',
toolbar=False, submenu=False):
"""
Override to add message_ids field in all the objects
that inherits mail.thread
"""
# Tricky super call
res = _base_fields_view_get(self, view_id=view_id, view_type=view_type,
toolbar=toolbar, submenu=submenu)
if view_type == 'search' and self._fields.get('message_content'):
doc = etree.XML(res['arch'])
res['fields'].update({
'message_content': {
'type': 'char',
'string': 'Message content',
}
})
for node in doc.xpath("//field[1]"):
# Add message_content in search view
elem = etree.Element('field', {
'name': 'message_content',
@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False,
submenu=False):
"""
Override to add message_content field in all the objects
that inherits mail.thread
"""
res = super(MailThread, self).fields_view_get(
view_id=view_id, view_type=view_type, toolbar=toolbar,
submenu=submenu)
if view_type == 'search' and self._fields.get('message_content'):
doc = etree.XML(res['arch'])
res['fields'].update({
'message_content': {
'type': 'char',
'string': 'Message Content',
}
}) })
setup_modifiers(elem)
node.addnext(elem)
res['arch'] = etree.tostring(doc)
return res
models.BaseModel.fields_view_get = _custom_fields_view_get
for node in doc.xpath("//field[1]"):
# Add message_content in search view
elem = etree.Element(
'field',
{
'name': 'message_content',
})
setup_modifiers(elem)
node.addnext(elem)
res['arch'] = etree.tostring(doc)
return res

13
base_search_mail_content/models/res_partner.py

@ -1,13 +0,0 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# (http://www.eficent.com)
# © 2016 Serpent Consulting Services Pvt. Ltd. (<http://www.serpentcs.com>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from openerp import models
class Partner(models.Model):
_name = 'res.partner'
_inherit = ['res.partner', 'mail.thread']

BIN
base_search_mail_content/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 9.2 KiB

3
base_search_mail_content/tests/__init__.py

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import test_base_search_mail_content

25
base_search_mail_content/tests/test_base_search_mail_content.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Eficent Business and IT Consulting Services S.L.
# (http://www.eficent.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.tests.common import TransactionCase
class TestBaseSearchMailContent(TransactionCase):
def setUp(self):
super(TestBaseSearchMailContent, self).setUp()
self.channel_obj = self.env["mail.channel"]
def test_base_search_mail_content_1(self):
res = self.channel_obj.search(
[('message_content', 'ilike', 'xxxyyyzzz')])
self.assertFalse(res, "You have a channel with xxxyyyzzz :O")
def test_base_search_mail_content_2(self):
res = self.channel_obj.load_views(
[[False, 'search']], {'load_fields': False,
'load_filters': True,
'toolbar': True})
self.assertIn(
'message_content', res['fields_views']['search']['fields'],
"message_content field was not detected")

44
base_search_mail_content/views/trgm_index_view.xml

@ -1,29 +1,27 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<record model="ir.ui.view" id="trgm_index_view_form">
<field name="name">trgm.index.view.form</field>
<field name="model">trgm.index</field>
<field name="inherit_id" ref="base_search_fuzzy.trgm_index_view_form"/>
<field name="arch" type="xml">
<field name="field_id" position="attributes">
<attribute name="domain">[('ttype', 'in', ['char', 'text', 'html'])]</attribute>
<attribute name="help">"You can either select a field of type 'text', 'char' or 'html'."</attribute>
</field>
<record model="ir.ui.view" id="trgm_index_view_form">
<field name="name">trgm.index.view.form</field>
<field name="model">trgm.index</field>
<field name="inherit_id" ref="base_search_fuzzy.trgm_index_view_form"/>
<field name="arch" type="xml">
<field name="field_id" position="attributes">
<attribute name="domain">[('ttype', 'in', ['char', 'text', 'html'])]</attribute>
<attribute name="help">"You can either select a field of type 'text', 'char' or 'html'."</attribute>
</field> </field>
</record>
</field>
</record>
<record model="ir.ui.view" id="trgm_index_view_tree">
<field name="name">trgm.index.view.tree</field>
<field name="model">trgm.index</field>
<field name="inherit_id" ref="base_search_fuzzy.trgm_index_view_tree"/>
<field name="arch" type="xml">
<field name="field_id" position="attributes">
<attribute name="help">"You can either select a field of type 'text', 'char' or 'html'."</attribute>
</field>
<record model="ir.ui.view" id="trgm_index_view_tree">
<field name="name">trgm.index.view.tree</field>
<field name="model">trgm.index</field>
<field name="inherit_id" ref="base_search_fuzzy.trgm_index_view_tree"/>
<field name="arch" type="xml">
<field name="field_id" position="attributes">
<attribute name="help">"You can either select a field of type 'text', 'char' or 'html'."</attribute>
</field> </field>
</record>
</field>
</record>
</data>
</openerp>
</odoo>
Loading…
Cancel
Save