Update the ranker belonging to the org of a student_proposal when the score changes.
Patch by: Lennard de Rijk
Reviewed by: to-be-reviewed
--- a/app/soc/logic/models/student_proposal.py Tue Mar 03 22:47:44 2009 +0000
+++ b/app/soc/logic/models/student_proposal.py Tue Mar 03 22:48:57 2009 +0000
@@ -23,6 +23,7 @@
from soc.logic.models import base
+from soc.logic.models import rankerroot as ranker_logic
from soc.logic.models import student as student_logic
import soc.models.linkable
@@ -41,5 +42,34 @@
super(Logic, self).__init__(model=model, base_model=base_model,
scope_logic=scope_logic)
+ def _onCreate(self, entity):
+ """Adds this proposal to the organization ranker entity
+ """
+
+ fields = {'link_id': self_model.DEF_RANKER_NAME,
+ 'scope': entity.org}
+
+ ranker_root = ranker_logic.logic.getForFields(fields, unique=True)
+ ranker = ranker_logic.logic.getRootFromEntity(ranker_root)
+ ranker.SetScore(entity.key().name(), [entity.score])
+
+ super(Logic, self)._onCreate(entity)
+
+ def _updateField(self, entity, entity_properties, name):
+ """Update the ranker if the score changes
+ """
+
+ value = entity_properties[name]
+
+ if name == 'score':
+ fields = {'link_id': self_model.DEF_RANKER_NAME,
+ 'scope': entity.org}
+
+ ranker_root = ranker_logic.logic.getForFields(fields, unique=True)
+ ranker = ranker_logic.logic.getRootFromEntity(ranker_root)
+ ranker.SetScore(entity.key().name(), [value])
+
+ return super(Logic, self)._updateField(entity, entity_properties, name)
+
logic = Logic()