From 10c59fc220c96de08d41cc4354a4781bc23edd33 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Wed, 8 Nov 2017 17:37:03 +0100 Subject: [PATCH] Added overtake remaining points + moved updateOrgContributionRank from zmq_subscribe to contributor_helper --- contributor_helper.py | 56 ++++++++++++++++++++++++++++++--- static/js/contrib.js | 22 ++++++++++++- templates/contrib.html | 8 +++++ templates/index.html | 11 ++++--- zmq_subscriber.py | 71 ++++++++++-------------------------------- 5 files changed, 103 insertions(+), 65 deletions(-) diff --git a/contributor_helper.py b/contributor_helper.py index 33f180c..ed675a3 100644 --- a/contributor_helper.py +++ b/contributor_helper.py @@ -88,11 +88,11 @@ class Contributor_helper: def giveContribRankToOrg(self, org, rankNum): keyname = 'CONTRIB_ORG:{org}:{orgCateg}' - serv_redis_db.set(keyname.format(org=orgName, orgCateg='CONTRIB_REQ_'+str(rankNum)), 1) + self.serv_redis_db.set(keyname.format(org=orgName, orgCateg='CONTRIB_REQ_'+str(rankNum)), 1) def removeContribRankFromOrg(self, org, rankNum): keyname = 'CONTRIB_ORG:{org}:{orgCateg}' - serv_redis_db.delete(keyname.format(org=orgName, orgCateg='CONTRIB_REQ_'+str(rankNum))) + self.serv_redis_db.delete(keyname.format(org=orgName, orgCateg='CONTRIB_REQ_'+str(rankNum))) # 1 for fulfilled, 0 for not fulfilled, -1 for not relevant def getCurrentContributionStatus(self, org): @@ -107,6 +107,52 @@ class Contributor_helper: to_ret[i] = -1 return to_ret + + def updateOrgContributionRank(self, orgName, pnts_to_add, contribType, eventTime, isLabeled): + keyname = 'CONTRIB_ORG:{org}:{orgCateg}' + #update total points + self.serv_redis_db.set(keyname.format(org=orgName, orgCateg='points'), pnts_to_add) + #update contribution Requirement + heavilyCount = self.heavilyCount + recentDays = self.recentDays + regularlyDays = self.regularlyDays + isRecent = (datetime.datetime.now() - eventTime).days > recentDays + + contrib = [] #[[contrib_level, contrib_ttl], [], ...] + if contribType == 'sighting': + #[contrib_level, contrib_ttl] + contrib.append([1, ONE_DAY*365]) + if contribType == 'attribute' or contribType == 'object': + contrib.append([2, ONE_DAY*365]) + if contribType == 'proposal' or contribType == 'discussion': + contrib.append([3, ONE_DAY*365]) + if contribType == 'sighting' and isRecent: + contrib.append([4, ONE_DAY*recentDays]) + if contribType == 'proposal' and isRecent: + contrib.append([5, ONE_DAY*recentDays]) + if contribType == 'event': + contrib.append([6, ONE_DAY*365]) + if contribType == 'event': + contrib.append([7, ONE_DAY*recentDays]) + if contribType == 'event': + contrib.append([8, ONE_DAY*regularlyDays]) + if contribType == 'event' and isLabeled: + contrib.append([9, ONE_DAY*regularlyDays]) + if contribType == 'sighting' and sightingWeekCount>heavilyCount: + contrib.append([10, ONE_DAY*regularlyDays]) + if (contribType == 'attribute' or contribType == 'object') and attributeWeekCount>heavilyCount: + contrib.append([11, ONE_DAY*regularlyDays]) + if contribType == 'proposal' and proposalWeekCount>heavilyCount: + contrib.append([12, ONE_DAY*regularlyDays]) + if contribType == 'event' and eventWeekCount>heavilyCount: + contrib.append([13, ONE_DAY*regularlyDays]) + if contribType == 'event' and eventWeekCount>heavilyCount and isLabeled: + contrib.append([14, ONE_DAY*regularlyDays]) + + for rankReq, ttl in contrib: + self.serv_redis_db.set(keyname.format(org=orgName, orgCateg='CONTRIB_REQ_'+str(rankReq)), 1) + self.serv_redis_db.expire(keyname.format(org=orgName, orgCateg='CONTRIB_REQ_'+str(i)), ttl) + ''' HONOR BADGES ''' def getOrgHonorBadges(self, org): keyname = 'CONTRIB_ORG:{org}:{orgCateg}' @@ -119,11 +165,11 @@ class Contributor_helper: def giveBadgeToOrg(self, org, badgeNum): keyname = 'CONTRIB_ORG:{org}:{orgCateg}' - serv_redis_db.set(keyname.format(org=orgName, orgCateg='BADGE_'+str(badgeNum)), 1) + self.serv_redis_db.set(keyname.format(org=orgName, orgCateg='BADGE_'+str(badgeNum)), 1) def removeBadgeFromOrg(self, org, badgeNum): keyname = 'CONTRIB_ORG:{org}:{orgCateg}' - serv_redis_db.delete(keyname.format(org=orgName, orgCateg='BADGE_'+str(badgeNum))) + self.serv_redis_db.delete(keyname.format(org=orgName, orgCateg='BADGE_'+str(badgeNum))) ''' MONTHLY CONTRIBUTION ''' def getOrgPntFromRedis(self, org, date): @@ -270,7 +316,9 @@ class Contributor_helper: return { 'remainingPts': 0, 'stepPts': self.rankMultiplier**self.levelMax } + ''' ''' ''' TEST DATA ''' + ''' ''' def TEST_getCategPerContribFromRedis(self, date): data2 = [] diff --git a/static/js/contrib.js b/static/js/contrib.js index b16c897..21aab6d 100644 --- a/static/js/contrib.js +++ b/static/js/contrib.js @@ -308,6 +308,7 @@ function addLastContributor(datatable, data, update) { } function updateProgressHeader(org) { + currOrg = org; // get Org rank $.getJSON( url_getOrgRank+'?org='+org, function( data ) { datatableTop.draw(); @@ -383,6 +384,25 @@ function updateProgressHeader(org) { } } }); + + //update overtake points + var prevOrg = ""; + var prevOrgPnts = 0; + datatableTop.rows().every( function() { + var row = this.node(); + if(this.data()[5] == currOrg) { + if(prevOrg == ""){ //already first + $('#orgToOverTake').text(this.data()[5]); + $('#pntsToOvertakeNext').text(0); + } else { + $('#orgToOverTake').text(prevOrg); + $('#pntsToOvertakeNext').text(parseInt(prevOrgPnts)-this.data()[0]); + } + } else { + prevOrg = this.data()[5]; + prevOrgPnts = this.data()[0]; + } + }); } function showOnlyOrg() { @@ -458,7 +478,7 @@ $(document).ready(function() { }); if(currOrg != "") // currOrg selected //FIXME: timeout used to wait that all datatables are draw. - setTimeout( function() { updateProgressHeader(currOrg); }, 200); + setTimeout( function() { updateProgressHeader(currOrg); }, 400); source_lastContrib = new EventSource(url_eventStreamLastContributor); source_lastContrib.onmessage = function(event) { diff --git a/templates/contrib.html b/templates/contrib.html index 6b84bdd..3567745 100644 --- a/templates/contrib.html +++ b/templates/contrib.html @@ -201,6 +201,14 @@
+
+ + Points to overtake + + : + + +
diff --git a/templates/index.html b/templates/index.html index 8e45eae..63b6f5a 100644 --- a/templates/index.html +++ b/templates/index.html @@ -107,7 +107,7 @@ table { } .textTopHeader { - height: 50px; + height: 50px; text-align: center; margin-left: 8px; float: left; @@ -132,6 +132,7 @@ small {
@@ -146,7 +147,7 @@ small {
- +
No map @@ -191,7 +192,7 @@ small {
- +
@@ -231,7 +232,7 @@ small {
- +
@@ -247,7 +248,7 @@ small { -