You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.6 KiB
86 lines
3.6 KiB
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import api, fields, models, tools, SUPERUSER_ID, _
|
|
from odoo.exceptions import UserError
|
|
|
|
class SearchLine(models.Model):
|
|
_name = "search.line"
|
|
|
|
name = fields.Char(string="Model Name")
|
|
field_list = fields.Char(string="Fields Name")
|
|
model_id = fields.Many2one('ir.model',string="Found in Model")
|
|
record_id = fields.Integer(string="Record ID")
|
|
search_id = fields.Many2one("dpo.view",string="Search Terms")
|
|
record_name = fields.Char(string="Record Name", compute="_compute_record_name")
|
|
|
|
@api.multi
|
|
def open_record(self):
|
|
return {
|
|
'name': _('Found record'),
|
|
'view_type': 'form',
|
|
'view_mode': 'form',
|
|
'res_model': self.model_id.model,
|
|
'type': 'ir.actions.act_window',
|
|
'res_id': self.record_id,
|
|
'target': 'new'
|
|
}
|
|
|
|
@api.one
|
|
def _compute_record_name(self):
|
|
for record in self:
|
|
record_object = self.env[self.model_id.model].search([('id', '=', int(self.record_id))])
|
|
record.record_name = record_object.name
|
|
|
|
class ItisDpoView(models.Model):
|
|
_name = "dpo.view"
|
|
|
|
name = fields.Char(string="Search Term")
|
|
model_ids = fields.Many2many('ir.model','dpo_view_ir_model_rel',string="Search in Model")
|
|
search_lines = fields.One2many('search.line', 'search_id', string='Search Result')
|
|
|
|
@api.multi
|
|
def search_string(self):
|
|
search_line_ids = self.env['search.line'].search([('search_id', '=', self.id)])
|
|
search_line_ids.unlink()
|
|
self._cr.commit()
|
|
found = False
|
|
for model in self.model_ids:
|
|
table_name = model.model.replace(".","_")
|
|
query = '''select * from '''+table_name+''' where '''
|
|
field_list = self.env['ir.model.fields'].search([('model_id.id', '=', model.id),('ttype', 'in', ['char','html','text']),('store', '=', True)])
|
|
for field in field_list:
|
|
query = query +table_name+'''."'''+ field.name +'''" like '%'''+self.name+'''%' or '''
|
|
query = query[:-3]
|
|
query = query+''';'''
|
|
|
|
self._cr.execute(query)
|
|
colnames = [desc[0] for desc in self._cr.description]
|
|
id_index = colnames.index("id")
|
|
rec_id = 0
|
|
rows = self._cr.fetchall()
|
|
|
|
if rows:
|
|
for rec in rows:
|
|
ind = 0
|
|
rec_id = rec[id_index]
|
|
founded_col = []
|
|
for row in rec:
|
|
if str(row).find(self.name) >= 0:
|
|
founded_col.append(colnames[ind])
|
|
found = True
|
|
ind = ind + 1
|
|
fields_data = self.env['ir.model.fields'].search([('name', 'in', founded_col),('model_id', '=', model.id)])
|
|
field_desc = []
|
|
for field in fields_data:
|
|
field_desc.append(field.field_description)
|
|
create_id = self.env['search.line'].create({"field_list":str(field_desc),"name":model.name,"model_id":int(model.id),"search_id":int(self.id),"record_id":int(rec_id)})
|
|
if not found:
|
|
raise UserError(_("No record found with "+self.name+"."))
|
|
|
|
|
|
def _search_tables(self):
|
|
user_id = self.env['res.users'].browse('email', '=', self.email)
|
|
# field user_info could be an array containg the fields we want to display...
|
|
partner_id = self.env['res.partner'].browse('email', '=', self.email)
|
|
crm_id = self.env['crm.lead'].browse('email', '=', self.email)
|
|
mm_id = self.env['mail.mass_mailing'].browse('email', '=', self.email)
|