def _prepare_project_sharing_session_info(self, project, task=None): session_info = request.env['ir.http'].session_info() user_context = dict(request.env.context) if request.session.uid else {} mods = conf.server_wide_modules or [] qweb_checksum = HomeStaticTemplateHelpers.get_qweb_templates_checksum( debug=request.session.debug, bundle="project.assets_qweb") lang = user_context.get("lang") translation_hash = request.env[ 'ir.translation'].get_web_translations_hash(mods, lang) cache_hashes = { "qweb": qweb_checksum, "translations": translation_hash, } project_company = project.company_id session_info.update( cache_hashes=cache_hashes, action_name='project.project_sharing_project_task_action', project_id=project.id, user_companies={ 'current_company': project_company.id, 'allowed_companies': { project_company.id: { 'id': project_company.id, 'name': project_company.name, }, }, }, # FIXME: See if we prefer to give only the currency that the portal user just need to see the correct information in project sharing currencies=request.env['ir.http'].get_currencies(), ) if task: session_info[ 'open_task_action'] = task.action_project_sharing_open_task() return session_info
def session_info(self): user = request.env.user result = super(IrHttp, self).session_info() if self.env.user.has_group('base.group_user'): result['notification_type'] = user.notification_type assets_discuss_public_hash = HomeStaticTemplateHelpers.get_qweb_templates_checksum(debug=request.session.debug, bundle='mail.assets_discuss_public') result['cache_hashes']['assets_discuss_public'] = assets_discuss_public_hash guest = self.env.context.get('guest') if not request.session.uid and guest: user_context = {'lang': guest.lang} mods = odoo.conf.server_wide_modules or [] lang = user_context.get("lang") translation_hash = request.env['ir.translation'].sudo().get_web_translations_hash(mods, lang) result['cache_hashes']['translations'] = translation_hash result.update({ 'name': guest.name, 'user_context': user_context, }) return result
def render_production_backend_view(self, picking_id): try: picking = self._document_check_access('stock.picking', picking_id) except (AccessError, MissingError): raise werkzeug.exceptions.NotFound session_info = request.env['ir.http'].session_info() user_context = dict(request.env.context) if request.session.uid else {} mods = conf.server_wide_modules or [] qweb_checksum = HomeStaticTemplateHelpers.get_qweb_templates_checksum( debug=request.session.debug, bundle="mrp_subcontracting.assets_qweb") lang = user_context.get("lang") translation_hash = request.env[ 'ir.translation'].get_web_translations_hash(mods, lang) cache_hashes = { "qweb": qweb_checksum, "translations": translation_hash, } production_company = picking.company_id session_info.update( cache_hashes=cache_hashes, action_name= 'mrp_subcontracting.subcontracting_portal_view_production_action', picking_id=picking.id, user_companies={ 'current_company': production_company.id, 'allowed_companies': { production_company.id: { 'id': production_company.id, 'name': production_company.name, }, }, }) return request.render( 'mrp_subcontracting.subcontracting_portal_embed', {'session_info': session_info}, )
def session_info(self): user = request.env.user session_uid = request.session.uid version_info = odoo.service.common.exp_version() if session_uid: user_context = dict(self.env['res.users'].context_get()) if user_context != request.session.context: request.session.context = user_context else: user_context = {} IrConfigSudo = self.env['ir.config_parameter'].sudo() max_file_upload_size = int(IrConfigSudo.get_param( 'web.max_file_upload_size', default=128 * 1024 * 1024, # 128MiB )) mods = odoo.conf.server_wide_modules or [] session_info = { "uid": session_uid, "is_system": user._is_system() if session_uid else False, "is_admin": user._is_admin() if session_uid else False, "user_context": user_context, "db": request.db, "server_version": version_info.get('server_version'), "server_version_info": version_info.get('server_version_info'), "support_url": "https://www.odoo.com/buy", "name": user.name, "username": user.login, "partner_display_name": user.partner_id.display_name, "company_id": user.company_id.id if session_uid else None, # YTI TODO: Remove this from the user context "partner_id": user.partner_id.id if session_uid and user.partner_id else None, "web.base.url": IrConfigSudo.get_param('web.base.url', default=''), "active_ids_limit": int(IrConfigSudo.get_param('web.active_ids_limit', default='20000')), 'profile_session': request.session.profile_session, 'profile_collectors': request.session.profile_collectors, 'profile_params': request.session.profile_params, "max_file_upload_size": max_file_upload_size, "home_action_id": user.action_id.id, "cache_hashes": { "translations": request.env['ir.translation'].sudo().get_web_translations_hash( mods, request.session.context['lang'] ) if session_uid else None, }, "currencies": self.sudo().get_currencies(), } if self.env.user.has_group('base.group_user'): # the following is only useful in the context of a webclient bootstrapping # but is still included in some other calls (e.g. '/web/session/authenticate') # to avoid access errors and unnecessary information, it is only included for users # with access to the backend ('internal'-type users) if request.db: mods = list(request.registry._init_modules) + mods qweb_checksum = HomeStaticTemplateHelpers.get_qweb_templates_checksum(debug=request.session.debug, bundle="web.assets_qweb") menus = request.env['ir.ui.menu'].load_menus(request.session.debug) ordered_menus = {str(k): v for k, v in menus.items()} menu_json_utf8 = json.dumps(ordered_menus, default=ustr, sort_keys=True).encode() session_info['cache_hashes'].update({ "load_menus": hashlib.sha512(menu_json_utf8).hexdigest()[:64], # sha512/256 "qweb": qweb_checksum, }) session_info.update({ # current_company should be default_company "user_companies": { 'current_company': user.company_id.id, 'allowed_companies': { comp.id: { 'id': comp.id, 'name': comp.name, 'sequence': comp.sequence, } for comp in user.company_ids }, }, "show_effect": True, "display_switch_company_menu": user.has_group('base.group_multi_company') and len(user.company_ids) > 1, }) return session_info