Files
DigitalSignage/models/dss_res_users.py
T
2026-07-23 08:54:44 +02:00

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')