[MIG] base_search_mail_content: Migration to 10.0
This commit is contained in:
parent
de8e9a20b1
commit
fcf2fc696f
@ -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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
perform the searches on mail messages.
|
||||
@ -40,12 +39,12 @@ perform the searches on mail messages.
|
||||
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'.
|
||||
|
||||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
||||
: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
|
||||
===========
|
||||
@ -71,7 +70,6 @@ Contributors
|
||||
* Lois Rilo Antelo <lois.rilo@eficent.com>
|
||||
* Aaron Henriquez <ahenriquez@eficent.com>
|
||||
|
||||
|
||||
Maintainer
|
||||
----------
|
||||
|
||||
|
@ -6,16 +6,15 @@
|
||||
|
||||
{
|
||||
"name": "Base Search Mail Content",
|
||||
"version": "9.0.1.0.0",
|
||||
"version": "10.0.1.0.0",
|
||||
"author": "Eficent,"
|
||||
"SerpentCS,"
|
||||
"Odoo Community Association (OCA)",
|
||||
"website": "http://www.eficent.com",
|
||||
"website": "https://github.com/OCA/social",
|
||||
"category": "Social",
|
||||
"data": ["data/trgm_index_data.xml",
|
||||
"views/trgm_index_view.xml"],
|
||||
"depends": ["mail",
|
||||
"base_search_fuzzy"],
|
||||
"depends": ["mail", "base_search_fuzzy"],
|
||||
"license": "AGPL-3",
|
||||
'installable': True,
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record id="subject_gin_idx" model="trgm.index">
|
||||
<field name="index_type">gin</field>
|
||||
@ -32,5 +31,4 @@
|
||||
search="[('model','=','mail.message'),('name','=','reply_to')]"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</odoo>
|
||||
|
@ -3,15 +3,14 @@
|
||||
# * base_search_mail_content
|
||||
#
|
||||
# Translators:
|
||||
# OCA Transbot <transbot@odoo-community.org>, 2017
|
||||
# Pedro M. Baeza <pedro.baeza@gmail.com>, 2017
|
||||
# enjolras <yo@miguelrevilla.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 9.0c\n"
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-03-28 08:19+0000\n"
|
||||
"PO-Revision-Date: 2017-03-28 08:19+0000\n"
|
||||
"Last-Translator: Pedro M. Baeza <pedro.baeza@gmail.com>, 2017\n"
|
||||
"POT-Creation-Date: 2018-02-26 01:46+0000\n"
|
||||
"PO-Revision-Date: 2018-02-26 01:46+0000\n"
|
||||
"Last-Translator: enjolras <yo@miguelrevilla.com>, 2018\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -23,26 +22,35 @@ msgstr ""
|
||||
#: model:ir.ui.view,arch_db:base_search_mail_content.trgm_index_view_form
|
||||
#: model:ir.ui.view,arch_db:base_search_mail_content.trgm_index_view_tree
|
||||
msgid "\"You can either select a field of type 'text', 'char' or 'html'.\""
|
||||
msgstr "\"Puede seleccionar un campo de tipo 'text', 'char' o 'html'.\""
|
||||
msgstr "\"Puede elegir un campo de tipo 'text', 'char' o 'html'.\""
|
||||
|
||||
#. module: base_search_mail_content
|
||||
#: model:ir.model,name:base_search_mail_content.model_mail_thread
|
||||
msgid "Email Thread"
|
||||
msgstr "Hilo correo electrónico"
|
||||
msgstr "Hilo de email"
|
||||
|
||||
#. module: base_search_mail_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_event_event_message_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_event_registration_message_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_mail_channel_message_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_mail_mass_mailing_contact_message_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_mail_test_message_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_mail_thread_message_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_mail_unsubscription_message_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_res_partner_message_content
|
||||
#: model:ir.model.fields,field_description:base_search_mail_content.field_res_users_message_content
|
||||
msgid "Message Content"
|
||||
msgstr "Contenido del mensaje"
|
||||
|
||||
#. module: base_search_mail_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_event_event_message_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_event_registration_message_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_mail_channel_message_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_mail_mass_mailing_contact_message_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_mail_test_message_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_mail_thread_message_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_mail_unsubscription_message_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_res_partner_message_content
|
||||
#: model:ir.model.fields,help:base_search_mail_content.field_res_users_message_content
|
||||
msgid "Message content, to be used only in searches"
|
||||
msgstr "Contenido del mensaje, para ser usado sólo en búsquedas"
|
||||
|
||||
#. module: base_search_mail_content
|
||||
#: model:ir.model,name:base_search_mail_content.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "Empresa"
|
||||
msgstr "Contenido del mensaje, para usarse en búsquedas"
|
||||
|
@ -1,8 +1,7 @@
|
||||
# -*- 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)
|
||||
# © 2016 Serpent Consulting Services Pvt. Ltd. (<http://www.serpentcs.com>)
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import mail_thread
|
||||
from . import res_partner
|
||||
|
@ -1,13 +1,13 @@
|
||||
# -*- 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)
|
||||
# © 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 api, fields, models
|
||||
from odoo import api, fields, models
|
||||
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):
|
||||
@ -16,64 +16,52 @@ class MailThread(models.AbstractModel):
|
||||
|
||||
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(
|
||||
string='Message Content',
|
||||
help='Message content, to be used only in searches',
|
||||
compute="_compute_message_content",
|
||||
compute=lambda self: False,
|
||||
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
|
||||
|
@ -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
Normal file
BIN
base_search_mail_content/static/description/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.2 KiB |
3
base_search_mail_content/tests/__init__.py
Normal file
3
base_search_mail_content/tests/__init__.py
Normal file
@ -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
|
@ -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")
|
@ -1,29 +1,27 @@
|
||||
<?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>
|
||||
</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>
|
||||
</record>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</odoo>
|
||||
|
Loading…
Reference in New Issue
Block a user