Update the ranker belonging to the org of a student_proposal when the score changes.
authorLennard de Rijk <ljvderijk@gmail.com>
Tue, 03 Mar 2009 22:48:57 +0000
changeset 1610 6f675b690f92
parent 1609 cd285bc524f1
child 1611 83e7b09ce959
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
app/soc/logic/models/student_proposal.py
--- 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()