diff --git a/addons/website_profile/controllers/main.py b/addons/website_profile/controllers/main.py index 1f9542f64b0..9dcc345cb0a 100644 --- a/addons/website_profile/controllers/main.py +++ b/addons/website_profile/controllers/main.py @@ -16,7 +16,7 @@ from odoo.osv import expression class WebsiteProfile(http.Controller): _users_per_page = 30 _pager_max_pages = 5 - + # Profile # --------------------------------------------------- @@ -189,16 +189,19 @@ class WebsiteProfile(http.Controller): # All Users Page # --------------------------------------------------- - def _prepare_all_users_values(self, user): - return { - 'id': user.id, - 'name': user.name, - 'company_name': user.partner_id.company_name, - 'rank': user.rank_id.name, - 'karma': user.karma, - 'badge_count': len(user.badge_ids), - 'website_published': user.website_published - } + def _prepare_all_users_values(self, users): + user_values = [] + for user in users: + user_values.append({ + 'id': user.id, + 'name': user.name, + 'company_name': user.company_id.name, + 'rank': user.rank_id.name, + 'karma': user.karma, + 'badge_count': len(user.badge_ids), + 'website_published': user.website_published + }) + return user_values @http.route(['/profile/users', '/profile/users/page/'], type='http', auth="public", website=True) @@ -219,7 +222,7 @@ class WebsiteProfile(http.Controller): scope=page_count if page_count < self._pager_max_pages else self._pager_max_pages) users = User.sudo().search(dom, limit=self._users_per_page, offset=pager['offset'], order='karma DESC') - user_values = [self._prepare_all_users_values(user) for user in users] + user_values = self._prepare_all_users_values(users) # Get karma position for users (only website_published) position_domain = [('karma', '>', 1), ('website_published', '=', True)] diff --git a/addons/website_slides_survey/controllers/slides.py b/addons/website_slides_survey/controllers/slides.py index 5fb80c15097..53d280d5b88 100644 --- a/addons/website_slides_survey/controllers/slides.py +++ b/addons/website_slides_survey/controllers/slides.py @@ -10,6 +10,7 @@ from odoo import http from odoo.http import request from odoo.addons.website_slides.controllers.main import WebsiteSlides +from collections import defaultdict class WebsiteSlides(WebsiteSlides): @@ -44,24 +45,32 @@ class WebsiteSlides(WebsiteSlides): def _prepare_user_slides_profile(self, user): values = super(WebsiteSlides, self)._prepare_user_slides_profile(user) values.update({ - 'certificates': self._get_user_certificates(user), + 'certificates': self._get_users_certificates(user)[user.id] }) return values # All Users Page # --------------------------------------------------- - def _prepare_all_users_values(self, user): - result = super(WebsiteSlides, self)._prepare_all_users_values(user) - result.update({ - 'certification_count': len(self._get_user_certificates(user)) - }) + def _prepare_all_users_values(self, users): + result = super(WebsiteSlides, self)._prepare_all_users_values(users) + certificates_per_user = self._get_users_certificates(users) + for index, user in enumerate(users): + result[index].update({ + 'certification_count': len(certificates_per_user.get(user.id, [])) + }) return result - def _get_user_certificates(self, user): + def _get_users_certificates(self, users): + partner_ids = [user.partner_id.id for user in users] domain = [ - ('partner_id', '=', user.partner_id.id), + ('slide_partner_id.partner_id', 'in', partner_ids), ('quizz_passed', '=', True), ('slide_partner_id.survey_quizz_passed', '=', True) ] - certifications = request.env['survey.user_input'].sudo().search(domain) - return certifications + certificates = request.env['survey.user_input'].sudo().search(domain) + users_certificates = { + user.id: [ + certificate for certificate in certificates if certificate.partner_id == user.partner_id + ] for user in users + } + return users_certificates diff --git a/addons/website_slides_survey/views/website_profile.xml b/addons/website_slides_survey/views/website_profile.xml index 114120fcb11..105a5843861 100644 --- a/addons/website_slides_survey/views/website_profile.xml +++ b/addons/website_slides_survey/views/website_profile.xml @@ -19,9 +19,9 @@
-
+
- Score : % + Score : %