mirror of
https://gitlab.com/flectra-hq/flectra.git
synced 2026-11-02 09:58:50 -06:00
Master upstream patch
This commit is contained in:
1 parent
0c96298a5f
commit
2409bc60a8
497 files changed
+86066
-42956
No files matched your search
@@ -146,14 +146,25 @@ class GamificationBadge(models.Model):
|
||||
self.update(defaults)
|
||||
return
|
||||
|
||||
self.env.cr.execute("""
|
||||
SELECT badge_id, count(user_id) as granted_count,
|
||||
count(distinct(user_id)) as granted_users_count,
|
||||
array_agg(distinct(user_id)) as unique_owner_ids
|
||||
FROM gamification_badge_user
|
||||
WHERE badge_id in %s
|
||||
GROUP BY badge_id
|
||||
""", [tuple(self.ids)])
|
||||
Users = self.env["res.users"]
|
||||
query = Users._where_calc([])
|
||||
Users._apply_ir_rules(query)
|
||||
badge_alias = query.join("res_users", "id", "gamification_badge_user", "user_id", "badges")
|
||||
|
||||
tables, where_clauses, where_params = query.get_sql()
|
||||
|
||||
self.env.cr.execute(
|
||||
f"""
|
||||
SELECT {badge_alias}.badge_id, count(res_users.id) as stat_count,
|
||||
count(distinct(res_users.id)) as stat_count_distinct,
|
||||
array_agg(distinct(res_users.id)) as unique_owner_ids
|
||||
FROM {tables}
|
||||
WHERE {where_clauses}
|
||||
AND {badge_alias}.badge_id IN %s
|
||||
GROUP BY {badge_alias}.badge_id
|
||||
""",
|
||||
[*where_params, tuple(self.ids)]
|
||||
)
|
||||
|
||||
mapping = {
|
||||
badge_id: {
|
||||
|
||||
@@ -245,19 +245,13 @@ class Challenge(models.Model):
|
||||
# exclude goals for users that did not connect since the last update
|
||||
yesterday = fields.Date.to_string(date.today() - timedelta(days=1))
|
||||
self.env.cr.execute("""SELECT gg.id
|
||||
FROM gamification_goal as gg,
|
||||
gamification_challenge as gc,
|
||||
res_users as ru,
|
||||
res_users_log as log
|
||||
WHERE gg.challenge_id = gc.id
|
||||
AND gg.user_id = ru.id
|
||||
AND ru.id = log.create_uid
|
||||
AND gg.write_date < log.create_date
|
||||
FROM gamification_goal as gg
|
||||
JOIN res_users_log as log ON gg.user_id = log.create_uid
|
||||
WHERE gg.write_date < log.create_date
|
||||
AND gg.closed IS NOT TRUE
|
||||
AND gc.id IN %s
|
||||
AND gg.challenge_id IN %s
|
||||
AND (gg.state = 'inprogress'
|
||||
OR (gg.state = 'reached'
|
||||
AND (gg.end_date >= %s OR gg.end_date IS NULL)))
|
||||
OR (gg.state = 'reached' AND gg.end_date >= %s))
|
||||
GROUP BY gg.id
|
||||
""", [tuple(self.ids), yesterday])
|
||||
|
||||
@@ -360,7 +354,7 @@ class Challenge(models.Model):
|
||||
participant_user_ids = set(challenge.user_ids.ids)
|
||||
user_squating_challenge_ids = user_with_goal_ids - participant_user_ids
|
||||
if user_squating_challenge_ids:
|
||||
# users that used to match the challenge
|
||||
# users that used to match the challenge
|
||||
Goals.search([
|
||||
('challenge_id', '=', challenge.id),
|
||||
('user_id', 'in', list(user_squating_challenge_ids))
|
||||
@@ -451,7 +445,7 @@ class Challenge(models.Model):
|
||||
'action': <{True,False}>,
|
||||
'display_mode': <{progress,boolean}>,
|
||||
'target': <challenge line target>,
|
||||
'state': <gamification.goal state {draft,inprogress,reached,failed,canceled}>,
|
||||
'state': <gamification.goal state {draft,inprogress,reached,failed,canceled}>,
|
||||
'completeness': <percentage>,
|
||||
'current': <current value>,
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user