From 419377ab3d016ca27a5ea32b16b38433feed2dbd Mon Sep 17 00:00:00 2001 From: David Beguin Date: Tue, 10 May 2022 10:28:40 +0000 Subject: [PATCH] [IMP] knowledge: generate private tutorial article per user To ease onboarding on the knowledge application, this commit allows to generate one tutorial/welcome article in the private section of each existing or new user. That tutorial article can directly be edited by the users to test all the functionnality of the Knowledge App. To avoid generating those articles, a context key can be used: - knowledge_skip_onboarding_article Task-2674460 Part-of: odoo/odoo#82315 Co-authored-by: Damien Abeloos Co-authored-by: Julien Banken Co-authored-by: David Beguin Co-authored-by: Fabio Barbero Co-authored-by: Thibault Delavallee Co-authored-by: Aurelien Warnong --- addons/knowledge/__init__.py | 7 + addons/knowledge/__manifest__.py | 2 + addons/knowledge/data/article_templates.xml | 299 ++++++++++++++++++++ addons/knowledge/models/__init__.py | 1 + addons/knowledge/models/res_users.py | 49 ++++ once | 0 6 files changed, 358 insertions(+) create mode 100644 addons/knowledge/data/article_templates.xml create mode 100644 addons/knowledge/models/res_users.py create mode 100644 once diff --git a/addons/knowledge/__init__.py b/addons/knowledge/__init__.py index 88710707227..d1d1d566d49 100644 --- a/addons/knowledge/__init__.py +++ b/addons/knowledge/__init__.py @@ -4,3 +4,10 @@ from . import controllers from . import models from . import wizard + +from odoo import api, SUPERUSER_ID + + +def _init_private_article_per_user(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + env['res.users'].search([('partner_share', '=', False)])._generate_tutorial_articles() diff --git a/addons/knowledge/__manifest__.py b/addons/knowledge/__manifest__.py index ee9ab51b8f3..b2c13c5393b 100644 --- a/addons/knowledge/__manifest__.py +++ b/addons/knowledge/__manifest__.py @@ -14,6 +14,7 @@ 'portal' ], 'data': [ + 'data/article_templates.xml', 'data/knowledge_data.xml', 'data/ir_actions_data.xml', 'data/mail_templates.xml', @@ -32,6 +33,7 @@ 'application': True, 'auto_install': False, 'license': 'LGPL-3', + 'post_init_hook': '_init_private_article_per_user', 'assets': { 'web.assets_backend': [ ('remove', 'web_editor/static/src/scss/web_editor.backend.scss'), diff --git a/addons/knowledge/data/article_templates.xml b/addons/knowledge/data/article_templates.xml new file mode 100644 index 00000000000..e908e4a941b --- /dev/null +++ b/addons/knowledge/data/article_templates.xml @@ -0,0 +1,299 @@ + + + + + + + diff --git a/addons/knowledge/models/__init__.py b/addons/knowledge/models/__init__.py index a1793b669d8..0100fc90b42 100644 --- a/addons/knowledge/models/__init__.py +++ b/addons/knowledge/models/__init__.py @@ -5,3 +5,4 @@ from . import knowledge_article_favorite from . import knowledge_article_member from . import knowledge_article from . import res_partner +from . import res_users diff --git a/addons/knowledge/models/res_users.py b/addons/knowledge/models/res_users.py new file mode 100644 index 00000000000..d401b707ad4 --- /dev/null +++ b/addons/knowledge/models/res_users.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, api +from odoo.tools.translate import _lt + + +class Users(models.Model): + _name = 'res.users' + _inherit = 'res.users' + @api.model_create_multi + def create(self, vals_list): + users = super(Users, self).create(vals_list) + if not self.env.context.get('knowledge_skip_onboarding_article'): + users.filtered(lambda user: not user.partner_share)._generate_tutorial_articles() + return users + + def _generate_tutorial_articles(self): + articles_to_create = [] + for user in self: + self = self.with_context(lang=user.lang or self.env.user.lang) + render_ctx = {'object': user} + body = self.env['ir.qweb']._render( + 'knowledge.knowledge_article_user_onboarding', + render_ctx, + minimal_qcontext=True, + raise_if_not_found=False + ) + if not body: + break + + welcome = _lt('Welcome %s', user.name) + articles_to_create.append({ + 'article_member_ids': [(0, 0, { + 'partner_id': user.partner_id.id, + 'permission': 'write', + })], + 'body': body, + 'icon': "👋", + 'internal_permission': 'none', + 'favorite_ids': [(0, 0, { + 'sequence': 0, + 'user_id': user.id, + })], + 'name': welcome, + }) + + if articles_to_create: + self.env['knowledge.article'].sudo().create(articles_to_create) diff --git a/once b/once new file mode 100644 index 00000000000..e69de29bb2d