120 lines
6.1 KiB
Python
Executable File
120 lines
6.1 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class Resusers(models.Model):
|
|
_name = "res.users"
|
|
_inherit = "res.users"
|
|
|
|
# company_type = fields.Selection(selection_add=[('dss_client','Werbekunde'),('dss_partner','Partnerunternehmen')])
|
|
dss_projects = fields.Many2many('dss.projects',string='DigitalSignage Projekte')
|
|
phonecenter_view_mode = fields.Selection([
|
|
('callcenter', 'Callcenter'),
|
|
('projectmanagement', 'Projektmanagement'),
|
|
('aussendienst', 'Aussendienst'),
|
|
('administrator', 'Administrator'),
|
|
], string='Ansichtsmodus', default='callcenter')
|
|
portal_ranking_enabled = fields.Boolean('Im Ranking', compute='_compute_portal_profile_flags', inverse='_inverse_portal_ranking_enabled')
|
|
portal_ranking_position = fields.Integer('Ranking Position', compute='_compute_portal_profile_flags', inverse='_inverse_portal_ranking_position')
|
|
portal_ranking_sum = fields.Float('Ranking Summe', compute='_compute_portal_profile_flags', inverse='_inverse_portal_ranking_sum')
|
|
|
|
portal_right_contract_overview = fields.Boolean('Portal Recht: Vertragsanzeige', compute='_compute_portal_profile_flags', inverse='_inverse_portal_right_contract_overview')
|
|
portal_right_contract_detail = fields.Boolean('Portal Recht: Vertragsdetails', compute='_compute_portal_profile_flags', inverse='_inverse_portal_right_contract_detail')
|
|
portal_right_media_view = fields.Boolean('Portal Recht: Medienanzeige', compute='_compute_portal_profile_flags', inverse='_inverse_portal_right_media_view')
|
|
portal_right_ranking_view = fields.Boolean('Portal Recht: Rankinganzeige', compute='_compute_portal_profile_flags', inverse='_inverse_portal_right_ranking_view')
|
|
portal_right_graphic_examples = fields.Boolean('Portal Recht: Grafikbeispiele anzeigen/erstellen', compute='_compute_portal_profile_flags', inverse='_inverse_portal_right_graphic_examples')
|
|
show_graphic_examples = fields.Boolean('Grafikbeispiele anzeigen/erstellen', compute='_compute_portal_profile_flags', inverse='_inverse_show_graphic_examples')
|
|
|
|
def _get_or_create_portal_profile(self):
|
|
self.ensure_one()
|
|
profile_model = self.env['dss.portal.user.profile'].sudo()
|
|
profile = profile_model.search([('user_id', '=', self.id)], limit=1)
|
|
if profile:
|
|
return profile
|
|
return profile_model.create({
|
|
'user_id': self.id,
|
|
'ranking_enabled': False,
|
|
'ranking_position': 0,
|
|
'ranking_sum': 0.0,
|
|
'right_contract_overview': True,
|
|
'right_contract_detail': True,
|
|
'right_media_view': True,
|
|
'right_ranking_view': True,
|
|
'right_graphic_examples': False,
|
|
})
|
|
|
|
def _set_portal_profile_value(self, field_name, value):
|
|
for user in self:
|
|
profile = user._get_or_create_portal_profile()
|
|
profile.write({field_name: value})
|
|
|
|
def _compute_portal_profile_flags(self):
|
|
profile_model = self.env['dss.portal.user.profile'].sudo()
|
|
profiles = profile_model.search([('user_id', 'in', self.ids)])
|
|
profile_by_user = {profile.user_id.id: profile for profile in profiles}
|
|
|
|
for user in self:
|
|
profile = profile_by_user.get(user.id)
|
|
user.portal_ranking_enabled = bool(profile.ranking_enabled) if profile else False
|
|
user.portal_ranking_position = int(profile.ranking_position or 0) if profile else 0
|
|
user.portal_ranking_sum = float(profile.ranking_sum or 0.0) if profile else 0.0
|
|
|
|
user.portal_right_contract_overview = bool(profile.right_contract_overview) if profile else True
|
|
user.portal_right_contract_detail = bool(profile.right_contract_detail) if profile else True
|
|
user.portal_right_media_view = bool(profile.right_media_view) if profile else True
|
|
user.portal_right_ranking_view = bool(profile.right_ranking_view) if profile else True
|
|
user.portal_right_graphic_examples = bool(profile.right_graphic_examples) if profile else False
|
|
user.show_graphic_examples = bool(profile.right_graphic_examples) if profile else False
|
|
|
|
def _inverse_portal_ranking_enabled(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('ranking_enabled', bool(user.portal_ranking_enabled))
|
|
|
|
def _inverse_portal_ranking_position(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('ranking_position', int(user.portal_ranking_position or 0))
|
|
|
|
def _inverse_portal_ranking_sum(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('ranking_sum', float(user.portal_ranking_sum or 0.0))
|
|
|
|
def _inverse_portal_right_contract_overview(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('right_contract_overview', bool(user.portal_right_contract_overview))
|
|
|
|
def _inverse_portal_right_contract_detail(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('right_contract_detail', bool(user.portal_right_contract_detail))
|
|
|
|
def _inverse_portal_right_media_view(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('right_media_view', bool(user.portal_right_media_view))
|
|
|
|
def _inverse_portal_right_ranking_view(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('right_ranking_view', bool(user.portal_right_ranking_view))
|
|
|
|
def _inverse_portal_right_graphic_examples(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('right_graphic_examples', bool(user.portal_right_graphic_examples))
|
|
|
|
def _inverse_show_graphic_examples(self):
|
|
for user in self:
|
|
user._set_portal_profile_value('right_graphic_examples', bool(user.show_graphic_examples))
|
|
|
|
@api.model
|
|
def get_phone_center_profile(self):
|
|
user = self.env.user
|
|
mode = user.phonecenter_view_mode or 'callcenter'
|
|
can_see_all_projects = mode in ('projectmanagement', 'administrator')
|
|
return {
|
|
'user_id': user.id,
|
|
'view_mode': mode,
|
|
'can_see_all_projects': can_see_all_projects,
|
|
'assigned_project_ids': user.dss_projects.ids,
|
|
}
|
|
|
|
# dss_uuid = fields.Char('uuid')
|
|
|