[FIX] gamification: using batch mode to check rewards
bzr revid: mat@openerp.com-20140506134805-4nsurv82cg9anfvm
This commit is contained in:
parent
409bf269d3
commit
687d675de5
|
@ -712,34 +712,35 @@ class gamification_challenge(osv.Model):
|
||||||
rewarded_users = []
|
rewarded_users = []
|
||||||
challenge_ended = end_date == yesterday.strftime(DF) or force
|
challenge_ended = end_date == yesterday.strftime(DF) or force
|
||||||
if challenge.reward_id and challenge_ended or challenge.reward_realtime:
|
if challenge.reward_id and challenge_ended or challenge.reward_realtime:
|
||||||
for user in challenge.user_ids:
|
# not using start_date as intemportal goals have a start date but no end_date
|
||||||
reached_goal_ids = self.pool.get('gamification.goal').search(cr, uid, [
|
reached_goals = self.pool.get('gamification.goal').read_group(cr, uid, [
|
||||||
('challenge_id', '=', challenge.id),
|
('challenge_id', '=', challenge.id),
|
||||||
('user_id', '=', user.id),
|
('end_date', '=', end_date),
|
||||||
('start_date', '=', start_date),
|
('state', '=', 'reached')
|
||||||
('end_date', '=', end_date),
|
], fields=['user_id'], groupby=['user_id'], context=context)
|
||||||
('state', '=', 'reached')
|
for reach_goals_user in reached_goals:
|
||||||
], context=context)
|
if reach_goals_user['user_id_count'] == len(challenge.line_ids):
|
||||||
if len(reached_goal_ids) == len(challenge.line_ids):
|
|
||||||
# the user has succeeded every assigned goal
|
# the user has succeeded every assigned goal
|
||||||
|
user_id = reach_goals_user['user_id'][0]
|
||||||
if challenge.reward_realtime:
|
if challenge.reward_realtime:
|
||||||
badges = self.pool['gamification.badge.user'].search(cr, uid, [
|
badges = self.pool['gamification.badge.user'].search(cr, uid, [
|
||||||
('challenge_id', '=', challenge.id),
|
('challenge_id', '=', challenge.id),
|
||||||
('badge_id', '=', challenge.reward_id.id),
|
('badge_id', '=', challenge.reward_id.id),
|
||||||
('user_id', '=', user.id),
|
('user_id', '=', user_id),
|
||||||
], count=True, context=context)
|
], count=True, context=context)
|
||||||
if badges > 0:
|
if badges > 0:
|
||||||
# has already recieved the badge for this challenge
|
# has already recieved the badge for this challenge
|
||||||
continue
|
continue
|
||||||
self.reward_user(cr, uid, user.id, challenge.reward_id.id, challenge.id, context=context)
|
self.reward_user(cr, uid, user_id, challenge.reward_id.id, challenge.id, context=context)
|
||||||
rewarded_users.append(user)
|
rewarded_users.append(user_id)
|
||||||
|
|
||||||
if challenge_ended:
|
if challenge_ended:
|
||||||
# open chatter message
|
# open chatter message
|
||||||
message_body = _("The challenge %s is finished." % challenge.name)
|
message_body = _("The challenge %s is finished." % challenge.name)
|
||||||
|
|
||||||
if rewarded_users:
|
if rewarded_users:
|
||||||
message_body += _("<br/>Reward (badge %s) for every succeeding user was sent to %s." % (challenge.reward_id.name, ", ".join([user.name for user in rewarded_users])))
|
user_names = self.pool['res.users'].name_get(cr, uid, rewarded_users, context=context)
|
||||||
|
message_body += _("<br/>Reward (badge %s) for every succeeding user was sent to %s." % (challenge.reward_id.name, ", ".join([user for user in user_names])))
|
||||||
else:
|
else:
|
||||||
message_body += _("<br/>Nobody has succeeded to reach every goal, no badge is rewared for this challenge.")
|
message_body += _("<br/>Nobody has succeeded to reach every goal, no badge is rewared for this challenge.")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue