Skip to content
Snippets Groups Projects
Commit 75153e72 authored by qmo-odoo's avatar qmo-odoo
Browse files

[IMP] website_slides: Improve methods to get user certificates


This commit improves a few methods related to the user profiles:
- Change _prepare_all_users_values so that it
works with a batch of users
- Change the _get_user_certificates and rename it to _get_users_certificates
so that it works with a batch of users to avoid doing a search in a
list comprehension.
This method will also be used to get the number of certificates per users

TaskID: 1952064
PR: #32229

Signed-off-by: default avatarThibault Delavallee (tde) <tde@openerp.com>
parent 153de28c
Branches
Tags
No related merge requests found
......@@ -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/<int: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)]
......
......@@ -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
......@@ -19,9 +19,9 @@
<div class="card-body o_wprofile_slides_course_card_body p-0 d-flex">
<div class="pl-5 pr-4 rounded-left" t-attf-style="background-image:url(/web/image/slide.slide/#{certificate.slide_id.id}/image_medium); background-position: center"/>
<div class="p-2 w-100">
<h5 class="mt-0 mb-1" t-field="certificate.survey_id.title"/>
<h5 class="mt-0 mb-1" t-esc="certificate.survey_id.title"/>
<div t-if="user.id == uid">
<small class="font-weight-bold">Score : <span t-field="certificate.quizz_score"/> %</small>
<small class="font-weight-bold">Score : <span t-esc="certificate.quizz_score"/> %</small>
<a role="button" class="float-right" t-att-href="'/survey/%s/get_certification' % certificate.survey_id.id">
<i class="fa fa-download"/>
</a>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment