]> asedeno.scripts.mit.edu Git - bluechips.git/blobdiff - bluechips/model/expenditure.py
Normalized the implementation of tags
[bluechips.git] / bluechips / model / expenditure.py
index 21172b9bcb046185e36e7c9ebf369651585623ac..d732fbe18328c9d6b909bbb52635f0f1775b6033 100644 (file)
@@ -1,7 +1,10 @@
+from sqlalchemy.ext.associationproxy import association_proxy
+
 from bluechips.model.user import User
 from bluechips.model.split import Split
 from bluechips.model import meta
 from bluechips.model.types import Currency
 from bluechips.model.user import User
 from bluechips.model.split import Split
 from bluechips.model import meta
 from bluechips.model.types import Currency
+from bluechips.model.tag import create_tag
 from decimal import Decimal
 from datetime import datetime
 import random
 from decimal import Decimal
 from datetime import datetime
 import random
@@ -15,6 +18,8 @@ class Expenditure(object):
         if self.date == None:
             self.date = datetime.now()
     
         if self.date == None:
             self.date = datetime.now()
     
+    tags = association_proxy('_tags', 'name', creator=create_tag)
+
     def __repr__(self):
         return '<Expenditure: spender: %s spent: %s>' % (self.spender,
                                                          self.amount)
     def __repr__(self):
         return '<Expenditure: spender: %s spent: %s>' % (self.spender,
                                                          self.amount)
@@ -28,7 +33,7 @@ class Expenditure(object):
         split_percentage = Decimal(100) / Decimal(residents.count())
         self.split(dict((resident, split_percentage) for resident in residents))
     
         split_percentage = Decimal(100) / Decimal(residents.count())
         self.split(dict((resident, split_percentage) for resident in residents))
     
-    def split(self, split_dict):
+    def split(self, split_dict, split_text_dict):
         """
         Split up an expenditure.
         
         """
         Split up an expenditure.
         
@@ -53,13 +58,11 @@ class Expenditure(object):
         for user, share in split_dict.items():
             if share == 0:
                 del split_dict[user]
         for user, share in split_dict.items():
             if share == 0:
                 del split_dict[user]
-            else:
-                split_dict[user] = share / total
             
         amounts_dict = dict()
         
         for user, share in split_dict.iteritems():
             
         amounts_dict = dict()
         
         for user, share in split_dict.iteritems():
-            amounts_dict[user] = Currency(split_dict[user] * self.amount)
+            amounts_dict[user] = Currency((share * self.amount) / total)
         
         difference = self.amount - sum(amounts_dict.itervalues())
         
         
         difference = self.amount - sum(amounts_dict.itervalues())
         
@@ -73,7 +76,7 @@ class Expenditure(object):
                 amounts_dict[winner] -= Currency(1)
         
         for user, share in amounts_dict.iteritems():
                 amounts_dict[winner] -= Currency(1)
         
         for user, share in amounts_dict.iteritems():
-            s = Split(self, user, share)
+            s = Split(self, user, share, split_text_dict[user])
             meta.Session.add(s)
 
     def involves(self, user):
             meta.Session.add(s)
 
     def involves(self, user):