[MRG] merged branch with improvements for assigning badges on running challange,improved some badge data.

bzr revid: tpa@tinyerp.com-20140321091924-mc3acnpx66oar555
This commit is contained in:
Turkesh Patel (Open ERP) 2014-03-21 14:49:24 +05:30
commit 283af4b6e5
4 changed files with 113 additions and 47 deletions

View File

@ -2,7 +2,6 @@
<openerp>
<data>
<!--NOTE: Will have to test all-->
<!--NOTE: if we have to get no of votes on any post than we are using vote_count at this time-->
<record id="badge_1" model="gamification.badge">
<field name="name">Autobiographer</field>
@ -32,7 +31,7 @@
<field name="reward_id" eval="ref('badge_1')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_configure_profile">
@ -65,7 +64,7 @@
<field name="reward_id" eval="ref('badge_3')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_cleanup">
@ -98,7 +97,7 @@
<field name="reward_id" eval="ref('badge_4')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_commentator">
@ -131,7 +130,7 @@
<field name="reward_id" eval="ref('badge_5')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_critic">
@ -167,7 +166,7 @@
<field name="reward_id" eval="ref('badge_6')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_disciplined">
@ -200,7 +199,7 @@
<field name="reward_id" eval="ref('badge_7')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_editor">
@ -233,7 +232,7 @@
<field name="reward_id" eval="ref('badge_8')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_enlightened">
@ -275,7 +274,7 @@ result = get_counter(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_9')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_enthusiast">
@ -317,7 +316,7 @@ result = get_counter(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_10')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_expert">
@ -350,7 +349,7 @@ result = get_counter(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_11')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_famous_question">
@ -365,7 +364,7 @@ result = get_counter(cr, uid, context=context)
<field name="level">silver</field>
</record>
<!--NOTE: passing default value 1 for res otherwise it gives error in gamification, will improve in gamification -->
<!--NOTE: passing default value 1 for res forumwise it gives error in gamification, will improve in gamification -->
<record model="gamification.goal.definition" id="definition_favorite_question">
<field name="name">Favorite Question</field>
<field name="description">Ask a question which can be favorited by minimum 5 users</field>
@ -392,7 +391,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_12')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_favorite_question">
@ -425,7 +424,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_13')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_good_answer">
@ -458,7 +457,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_14')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_good_question">
@ -491,7 +490,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_15')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_great_answer">
@ -524,7 +523,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_16')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_great_question">
@ -557,7 +556,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_17')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_guru">
@ -601,12 +600,12 @@ result = get_posts(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_18')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_necromancer">
<field name="definition_id" eval="ref('definition_necromancer')" />
<field name="target_goal">1</field>
<field name="target_goal">2</field>
<field name="challenge_id" eval="ref('challenge_necromancer')" />
</record>
@ -634,7 +633,7 @@ result = get_posts(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_19')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_nice_answer">
@ -667,7 +666,7 @@ result = get_posts(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_20')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_nice_question">
@ -700,7 +699,7 @@ result = get_posts(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_21')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_notable_question">
@ -733,7 +732,7 @@ result = get_posts(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_22')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_notable_question">
@ -752,24 +751,24 @@ result = get_posts(cr, uid, context=context)
it should shange boolean field?. at this time we are showing post with 3 down vote(not deleted)
-->
<record model="gamification.goal.definition" id="definition_peer_pressure">
<field name="name">Discipline</field>
<field name="description">Delete own post with 3 or more upvotes</field>
<field name="name">Peer Pressure</field>
<field name="description">Delete own post with 3 or more down votes</field>
<field name="computation_mode">count</field>
<field name="display_mode">boolean</field>
<field name="model_id" eval="ref('website_forum.model_website_forum_post')" />
<field name="domain">[('user_id','=',user.id), ('vote_count', '>=', -3)]</field>
<field name="domain">[('user_id','=',user.id), ('vote_count', '&lt;=', -3)]</field>
<field name="condition">higher</field>
</record>
<record model="gamification.challenge" id="challenge_peer_pressure">
<field name="name">Disciplined</field>
<field name="name">Peer Pressure</field>
<field name="period">once</field>
<field name="visibility_mode">personal</field>
<field name="report_message_frequency">never</field>
<field name="reward_id" eval="ref('badge_23')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_peer_pressure">
@ -802,7 +801,7 @@ result = get_posts(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_24')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_popular_question">
@ -847,7 +846,7 @@ result = get_count(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_25')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_pundit">
@ -881,7 +880,7 @@ result = get_count(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_26')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_scholar">
@ -918,7 +917,7 @@ result = get_count(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_27')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_self_learner">
@ -933,7 +932,7 @@ result = get_count(cr, uid, context=context)
<field name="level">bronze</field>
</record>
<!--NOTE: passing default value 1 for res otherwise it gives error in gamification, will improve in gamification -->
<!--NOTE: passing default value 1 for res forumwise it gives error in gamification, will improve in gamification -->
<record model="gamification.goal.definition" id="definition_stellar_question">
<field name="name">Stellar Question</field>
<field name="description">Ask a question which can be favorited by minimum 25 users</field>
@ -960,7 +959,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_28')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_stellar_question">
@ -993,7 +992,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_29')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_associate_editor">
@ -1026,7 +1025,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_30')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_student">
@ -1059,7 +1058,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_31')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_supporter">
@ -1092,7 +1091,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_32')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_taxonomist">
@ -1125,7 +1124,7 @@ result = count_favorites(cr, uid, context=context)
<field name="reward_id" eval="ref('badge_33')" />
<field name="autojoin_group_id" eval="ref('base.group_user')" />
<field name="state">inprogress</field>
<field name="category">other</field>
<field name="category">forum</field>
</record>
<record model="gamification.challenge.line" id="line_teacher">

View File

@ -19,4 +19,5 @@
#
##############################################################################
import website_forum
import gamification
import forum

View File

@ -316,12 +316,6 @@ class Vote(osv.Model):
post.refresh()
return {'vote_count': post.vote_count}
class Badge(osv.Model):
_inherit = 'gamification.badge'
_columns = {
'level': fields.selection([('bronze', 'bronze'), ('silver', 'silver'), ('gold', 'gold')], 'Forum Badge Level'),
}
class MailMessage(osv.Model):
_inherit = 'mail.message'
_columns = {

View File

@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2013-Today OpenERP SA (<http://www.openerp.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import openerp
from openerp.osv import osv, fields
from openerp.tools.translate import _
class gamification_challenge(osv.Model):
_inherit = 'gamification.challenge'
def _get_categories(self, cr, uid, context=None):
res = super(gamification_challenge, self)._get_categories(cr, uid, context=context)
res.append(('forum', 'Website / Forum'))
return res
_columns = {
'category': fields.selection(lambda s, *a, **k: s._get_categories(*a, **k),
string="Appears in", help="Define the visibility of the challenge through menus", required=True),
}
def check_challenge_reward(self, cr, uid, ids, force=False, context=None):
"""NOTE: gamification module never assigns reward for and on going challenge,
here we need to assign badges to the users who have completed their goal."""
if isinstance(ids, (int,long)):
ids = [ids]
context = context or {}
badge_user_obj = self.pool.get('gamification.badge.user');
super(gamification_challenge, self).check_challenge_reward(cr, uid, ids, force=False, context=context)
for challenge in self.browse(cr, uid, ids, context=context):
if challenge.category == 'forum':
rewarded_users = []
for user in challenge.user_ids:
bages_user_ids = badge_user_obj.search(cr, uid, [('user_id', '=', user.id),('badge_id', '=', challenge.reward_id.id)],context=None)
# if user not rewarded before then give reward.
if not bages_user_ids:
reached_goal_ids = self.pool.get('gamification.goal').search(cr, uid, [
('challenge_id', '=', challenge.id),
('user_id', '=', user.id),
('state', '=', 'reached'),
], context=context)
if len(reached_goal_ids) == len(challenge.line_ids):
self.reward_user(cr, uid, user.id, challenge.reward_id.id, context)
rewarded_users.append(user)
if rewarded_users:
message_body = _("Reward (badge %s) for every succeeding user was sent to %s." % (challenge.reward_id.name, ", ".join([user.name for user in rewarded_users])))
self.message_post(cr, uid, challenge.id, body=message_body, context=context)
return True
class Badge(osv.Model):
_inherit = 'gamification.badge'
_columns = {
'level': fields.selection([('bronze', 'bronze'), ('silver', 'silver'), ('gold', 'gold')], 'Forum Badge Level'),
}