309 lines
13 KiB
Python
309 lines
13 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Softhealer Technologies.
|
|
from odoo import models,fields,api
|
|
from odoo.http import request
|
|
from operator import itemgetter
|
|
|
|
class Lang(models.Model):
|
|
_inherit = "res.lang"
|
|
|
|
@api.model
|
|
def sh_get_installed_lang(self):
|
|
""" Return the installed languages as a list of (code, name) sorted by name. """
|
|
langs = self.with_context(active_test=True).search([])
|
|
return sorted([(lang.code, lang.name, lang.flag_image_url) for lang in langs], key=itemgetter(1))
|
|
|
|
|
|
class sh_wqm_quick_menu(models.Model):
|
|
_name = "sh.wqm.quick.menu"
|
|
_description = "quick / Shortcut menu model"
|
|
_order = "id desc"
|
|
|
|
menu_id = fields.Many2one(comodel_name = "ir.ui.menu",
|
|
string = "Menu",
|
|
ondelete='cascade')
|
|
user_id = fields.Many2one(comodel_name = "res.users",
|
|
string = "User",
|
|
required = True,
|
|
ondelete='cascade')
|
|
|
|
parent_menu_id = fields.Integer(string = "Parent Menu ID")
|
|
|
|
sh_url = fields.Char("Url ")
|
|
name = fields.Char("Name")
|
|
|
|
@api.model
|
|
def get_search_result(self,query):
|
|
search_quick_menu = self.sudo().search([
|
|
('name', 'ilike', query[0].lower()),
|
|
('user_id', '=', self.env.uid)
|
|
])
|
|
final_quick_menu_list = []
|
|
if search_quick_menu:
|
|
for rec in search_quick_menu:
|
|
type = 'other'
|
|
if len(rec.sh_url.split("view_type=")) >1:
|
|
type = rec.sh_url.split("view_type=")[1]
|
|
if len(type.split("&")) > 1:
|
|
type = type.split("&")[0]
|
|
|
|
vals = {
|
|
'id' : rec.id,
|
|
'name' : rec.name,
|
|
'sh_url' : rec.sh_url,
|
|
'type' :type
|
|
}
|
|
final_quick_menu_list.append(vals)
|
|
|
|
return final_quick_menu_list
|
|
|
|
def prepare_result(self):
|
|
final_quick_menu_list = []
|
|
search_quick_menu = self.sudo().search([
|
|
('user_id', '=', self.env.user.id),
|
|
])
|
|
if search_quick_menu:
|
|
for rec in search_quick_menu:
|
|
type = 'other'
|
|
if len(rec.sh_url.split("view_type=")) >1:
|
|
type = rec.sh_url.split("view_type=")[1]
|
|
if len(type.split("&")) > 1:
|
|
type = type.split("&")[0]
|
|
vals = {
|
|
'id' : rec.id,
|
|
'name' : rec.name,
|
|
'sh_url' : rec.sh_url,
|
|
'type' :type
|
|
}
|
|
final_quick_menu_list.append(vals)
|
|
return final_quick_menu_list
|
|
|
|
|
|
def set_quick_menu(self, action_id,parent_menu_id):
|
|
if action_id:
|
|
menu = self.env['ir.ui.menu'].sudo().search([('action', 'like', '%,' + str(action_id))], limit=1)
|
|
if not menu:
|
|
action = self.env['ir.actions.actions'].sudo().browse(int(action_id))
|
|
if action:
|
|
menu = self.env['ir.ui.menu'].sudo().search([('name', '=', action.name), ('action', '!=', '')], limit=1)
|
|
|
|
|
|
if menu:
|
|
rec = self.sudo().search(
|
|
[('menu_id', '=', menu.id),
|
|
('user_id', '=', self.env.user.id)])
|
|
if (rec):
|
|
if (rec.sudo().unlink()):
|
|
return {
|
|
'is_set_quick_menu': False
|
|
}
|
|
else:
|
|
if (menu and menu.action):
|
|
if (self.sudo().create({
|
|
'menu_id': menu.id,
|
|
'user_id': self.env.user.id,
|
|
'parent_menu_id' : int(parent_menu_id),
|
|
})):
|
|
return {
|
|
'is_set_quick_menu': True
|
|
}
|
|
return {}
|
|
|
|
def set_quick_url(self, url, model, res_id, action_id):
|
|
bookmark_name = ''
|
|
if model and res_id:
|
|
read_data = self.env[model].sudo().search_read([('id','=',res_id)],[],order='id')
|
|
if len(read_data) > 0:
|
|
if 'name' in read_data[0]:
|
|
bookmark_name = read_data[0]['name']
|
|
elif 'display_name' in read_data[0]:
|
|
bookmark_name = read_data[0]['display_name']
|
|
elif 'reference' in read_data[0]:
|
|
bookmark_name = read_data[0]['reference']
|
|
elif 'id' in read_data[0]:
|
|
bookmark_name = read_data[0]['id']
|
|
|
|
|
|
|
|
elif action_id and model != 'mail.box_inbox':
|
|
action = self.env['ir.actions.act_window'].sudo().browse(int(action_id))
|
|
if action:
|
|
bookmark_name = action.name
|
|
|
|
if model == 'mail.box_inbox':
|
|
bookmark_name = 'Discuss'
|
|
|
|
if url:
|
|
|
|
|
|
rec = self.sudo().search(
|
|
[('sh_url', '=', url),
|
|
('user_id', '=', self.env.user.id)])
|
|
if (rec):
|
|
if (rec.sudo().unlink()):
|
|
final_quick_menu_list = self.prepare_result()
|
|
return {
|
|
'is_set_quick_menu': False,
|
|
'final_quick_menu_list':final_quick_menu_list
|
|
}
|
|
else:
|
|
if (url):
|
|
if (self.sudo().create({
|
|
'sh_url': url,
|
|
'name': bookmark_name,
|
|
'user_id': self.env.user.id,
|
|
})):
|
|
final_quick_menu_list = self.prepare_result()
|
|
return {
|
|
'is_set_quick_menu': True,
|
|
'final_quick_menu_list':final_quick_menu_list
|
|
}
|
|
|
|
return {}
|
|
|
|
def is_quick_menu_avail(self, action_id):
|
|
if action_id:
|
|
menu = self.env['ir.ui.menu'].sudo().search([('action', 'like', '%,' + str(action_id))], limit=1)
|
|
# menu = False
|
|
if not menu:
|
|
action = self.env['ir.actions.actions'].sudo().browse(int(action_id))
|
|
if action:
|
|
menu = self.env['ir.ui.menu'].sudo().search([('name', '=', action.name), ('action', '!=', '')], limit=1)
|
|
|
|
if menu:
|
|
result = self.is_already_have_in_quick_menu(menu.id)
|
|
return result
|
|
|
|
def is_quick_menu_avail_url(self, url):
|
|
if url:
|
|
|
|
result = self.is_already_have_in_quick_url(url)
|
|
return result
|
|
|
|
def is_already_have_in_quick_menu(self, menu_id):
|
|
menu = self.env['ir.ui.menu'].sudo().browse(int(menu_id))
|
|
if (menu and menu.action):
|
|
rec = self.sudo().search(
|
|
[('menu_id', '=', menu_id),
|
|
('user_id', '=', self.env.user.id)])
|
|
if (rec):
|
|
return True
|
|
return False
|
|
|
|
def is_already_have_in_quick_url(self, url):
|
|
if (url):
|
|
rec = self.sudo().search(
|
|
[('sh_url', '=', url),
|
|
('user_id', '=', self.env.user.id)])
|
|
if (rec):
|
|
return True
|
|
return False
|
|
|
|
def get_quick_menu_data(self, fields=[]):
|
|
final_quick_menu_list = self.prepare_result()
|
|
return final_quick_menu_list
|
|
|
|
def remove_quick_menu_data(self, menu_id):
|
|
if menu_id:
|
|
rec = self.sudo().search(
|
|
[('id', '=', menu_id),
|
|
('user_id', '=', self.env.user.id)])
|
|
if rec:
|
|
json = {
|
|
'id': rec.id,
|
|
'name': rec.name,
|
|
'sh_url': rec.sh_url,
|
|
}
|
|
|
|
rec.sudo().unlink()
|
|
final_quick_menu_list = self.prepare_result()
|
|
json.update({'final_quick_menu_list':final_quick_menu_list})
|
|
return json
|
|
return False
|
|
|
|
|
|
class res_users(models.Model):
|
|
_inherit = "res.users"
|
|
|
|
sh_wqm_web_quick_menu_line = fields.One2many(comodel_name="sh.wqm.quick.menu",
|
|
inverse_name="user_id",
|
|
string = "Quick Menu",
|
|
)
|
|
|
|
sh_enable_night_mode = fields.Boolean('Night Mode')
|
|
sh_enable_language_selection = fields.Boolean('Language Selection',default=True)
|
|
sh_enable_zoom = fields.Boolean('Zoom View',default=False)
|
|
sh_enable_multi_tab = fields.Boolean('Multi Tab View',default=False)
|
|
sh_enable_calculator_mode = fields.Boolean('Calculator Mode')
|
|
sh_enable_gloabl_search_mode = fields.Boolean('Global Search Mode')
|
|
sh_enable_quick_menu_mode = fields.Boolean("Quick Menu Mode")
|
|
sh_enable_todo_mode = fields.Boolean("To Do Feature")
|
|
sh_disable_auto_edit_model = fields.Boolean("Disable Auto Edit mode", default=False)
|
|
sh_enable_expand_collapse = fields.Boolean("Group by List View Expand/Collapse",default=False)
|
|
show_attachment_in_list_view = fields.Boolean(string="Show Attachment In List View")
|
|
sh_enable_open_record_in_new_tab = fields.Boolean("Open Record in New Tab",default=False)
|
|
multi_tab_ids = fields.One2many('biz.multi.tab', 'user_id', string="Multi Tabs")
|
|
sh_enable_recent_record_view = fields.Boolean(string="Enable Recent Record View")
|
|
recent_record_ids = fields.One2many('sh.recent.records','sh_user_id')
|
|
quick_create_view = fields.Boolean(string="Enable Quick Create View")
|
|
|
|
@property
|
|
def SELF_READABLE_FIELDS(self):
|
|
return super().SELF_READABLE_FIELDS + ['quick_create_view','sh_enable_recent_record_view','sh_disable_auto_edit_model','sh_enable_todo_mode','sh_enable_quick_menu_mode','sh_enable_gloabl_search_mode','sh_enable_night_mode', 'sh_enable_language_selection','sh_enable_zoom','sh_enable_multi_tab','sh_enable_calculator_mode','sh_enable_expand_collapse','show_attachment_in_list_view','sh_enable_open_record_in_new_tab']
|
|
|
|
@property
|
|
def SELF_WRITEABLE_FIELDS(self):
|
|
return super().SELF_WRITEABLE_FIELDS + ['quick_create_view','sh_enable_recent_record_view','sh_disable_auto_edit_model','sh_enable_todo_mode','sh_enable_quick_menu_mode','sh_enable_gloabl_search_mode','sh_enable_night_mode', 'sh_enable_language_selection','sh_enable_zoom','sh_enable_multi_tab','sh_enable_calculator_mode','sh_enable_expand_collapse','show_attachment_in_list_view','sh_enable_open_record_in_new_tab']
|
|
|
|
@api.model
|
|
def get_attachment_data(self,model,res_ids):
|
|
|
|
if model and res_ids and self.env.user.show_attachment_in_list_view:
|
|
self.env.cr.execute("""select id,mimetype,name,res_id from ir_attachment where res_model=%s and res_id in %s """,(model,tuple(res_ids)))
|
|
data_list = self.env.cr.fetchall()
|
|
|
|
attachment_data_dict = {}
|
|
|
|
for item in data_list:
|
|
if attachment_data_dict.get(item[3]):
|
|
attachment_data_dict.get(item[3]).append({
|
|
'attachment_id': item[0],
|
|
'attachment_mimetype': item[1],
|
|
'attachment_name': item[2],
|
|
})
|
|
else:
|
|
attachment_data_dict[item[3]] = [{
|
|
'attachment_id': item[0],
|
|
'attachment_mimetype': item[1],
|
|
'attachment_name': item[2]
|
|
}]
|
|
|
|
return [attachment_data_dict],True
|
|
|
|
else:
|
|
return [],False
|
|
|
|
class Http(models.AbstractModel):
|
|
_inherit = 'ir.http'
|
|
|
|
def session_info(self):
|
|
info = super().session_info()
|
|
user = request.env.user
|
|
info["sh_enable_night_mode"] = user.sh_enable_night_mode
|
|
info["sh_enable_language_selection"] = user.sh_enable_language_selection
|
|
info["sh_enable_zoom"] = user.sh_enable_zoom
|
|
info["sh_enable_multi_tab"] = user.sh_enable_multi_tab
|
|
info["sh_enable_calculator_mode"] =user.sh_enable_calculator_mode
|
|
info["sh_enable_gloabl_search_mode"] = user.sh_enable_gloabl_search_mode
|
|
info["sh_enable_quick_menu_mode"] = user.sh_enable_quick_menu_mode
|
|
info["sh_enable_todo_mode"] = user.sh_enable_todo_mode
|
|
info["sh_disable_auto_edit_model"] = user.sh_disable_auto_edit_model
|
|
info["sh_enable_expand_collapse"] = user.sh_enable_expand_collapse
|
|
info["sh_enable_open_record_in_new_tab"] = user.sh_enable_open_record_in_new_tab
|
|
info["show_attachment_in_list_view"] = user.show_attachment_in_list_view
|
|
info["sh_enable_recent_record_view"] = user.sh_enable_recent_record_view
|
|
info["quick_create_view"] = user.quick_create_view
|
|
return info
|
|
|
|
|
|
|