def get_members(self):
     """Return an OrderedDict of member dicts.
     """
     takes = self.get_current_takes()
     nmembers = len(takes)
     last_week = self.get_takes_last_week()
     compute_max = self.throttle_takes and nmembers > 1 and last_week.sum
     members = OrderedDict()
     members.leftover = self.leftover
     zero = ZERO[self.main_currency]
     for take in takes:
         member = {}
         m_id = member['id'] = take['member_id']
         member['username'] = take['member_name']
         member['nominal_take'] = take['amount']
         member['actual_amount'] = take['actual_amount']
         member['last_week'] = last_week.get(m_id, zero)
         if compute_max:
             x = self.compute_max_this_week(m_id, last_week,
                                            take['amount'].currency)
         else:
             x = None
         member['max_this_week'] = x
         members[member['id']] = member
     return members
Example #2
0
 def compute_actual_takes(self, cursor=None):
     """Get the takes, compute the actual amounts, and return an OrderedDict.
     """
     actual_takes = OrderedDict()
     nominal_takes = self.get_current_takes(cursor=cursor)
     balance = self.receiving
     total_takes = sum(t['amount'] for t in nominal_takes)
     ratio = min(balance / total_takes, 1) if total_takes else 0
     for take in nominal_takes:
         nominal = take['nominal_take'] = take.pop('amount')
         actual = take['actual_amount'] = (nominal * ratio).quantize(CENT, rounding=ROUND_UP)
         balance -= actual
         actual_takes[take['member_id']] = take
     actual_takes.leftover = balance
     return actual_takes
Example #3
0
 def get_members(self):
     """Return an OrderedDict of member dicts.
     """
     takes = self.compute_actual_takes()
     last_week = self.get_takes_last_week()
     members = OrderedDict()
     members.leftover = takes.leftover
     for take in takes.values():
         member = {}
         m_id = member['id'] = take['member_id']
         member['username'] = take['member_name']
         member['nominal_take'] = take['nominal_take']
         member['actual_amount'] = take['actual_amount']
         member['last_week'] = last_week.get(m_id, ZERO)
         member['max_this_week'] = self.compute_max_this_week(m_id, last_week)
         members[member['id']] = member
     return members
Example #4
0
 def get_members(self):
     """Return an OrderedDict of member dicts.
     """
     takes = self.compute_actual_takes()
     last_week = self.get_takes_last_week()
     members = OrderedDict()
     members.leftover = takes.leftover
     for take in takes.values():
         member = {}
         m_id = member['id'] = take['member_id']
         member['username'] = take['member_name']
         member['nominal_take'] = take['nominal_take']
         member['actual_amount'] = take['actual_amount']
         member['last_week'] = last_week.get(m_id, ZERO)
         member['max_this_week'] = self.compute_max_this_week(
             m_id, last_week)
         members[member['id']] = member
     return members
Example #5
0
 def compute_actual_takes(self, cursor=None):
     """Get the takes, compute the actual amounts, and return an OrderedDict.
     """
     actual_takes = OrderedDict()
     nominal_takes = self.get_current_takes(cursor=cursor)
     balance = self.receiving
     total_takes = sum(t['amount'] for t in nominal_takes
                       if t['is_identified'])
     ratio = min(balance / total_takes, 1) if total_takes else 0
     for take in nominal_takes:
         nominal = take['nominal_take'] = take.pop('amount')
         actual = take['actual_amount'] = min(
             (nominal * ratio).quantize(CENT, rounding=ROUND_UP),
             balance) if take['is_identified'] else ZERO
         balance -= actual
         actual_takes[take['member_id']] = take
     actual_takes.leftover = balance
     return actual_takes
Example #6
0
 def get_members(self):
     """Return an OrderedDict of member dicts.
     """
     takes = self.get_current_takes()
     last_week = self.get_takes_last_week()
     members = OrderedDict()
     members.leftover = self.leftover
     zero = ZERO[self.main_currency]
     for take in takes:
         member = {}
         m_id = member['id'] = take['member_id']
         member['username'] = take['member_name']
         member['nominal_take'] = take['amount'].amount
         member['actual_amount'] = take['actual_amount']
         member['last_week'] = last_week.get(m_id, zero).amount
         x = self.compute_max_this_week(m_id, last_week)
         member['max_this_week'] = x
         members[member['id']] = member
     return members
Example #7
0
 def get_members(self):
     """Return an OrderedDict of member dicts.
     """
     takes = self.get_current_takes()
     last_week = self.get_takes_last_week()
     members = OrderedDict()
     members.leftover = self.leftover
     zero = ZERO[self.main_currency]
     for take in takes:
         member = {}
         m_id = member['id'] = take['member_id']
         member['username'] = take['member_name']
         member['nominal_take'] = take['amount'].amount
         member['actual_amount'] = take['actual_amount']
         member['last_week'] = last_week.get(m_id, zero).amount
         x = self.compute_max_this_week(m_id, last_week)
         member['max_this_week'] = x
         members[member['id']] = member
     return members
Example #8
0
 def get_members(self):
     """Return an OrderedDict of member dicts.
     """
     takes = self.get_current_takes()
     nmembers = len(takes)
     last_week = self.get_takes_last_week()
     compute_max = self.throttle_takes and nmembers > 1 and last_week.nonzero
     members = OrderedDict()
     members.leftover = self.leftover or MoneyBasket()
     for take in takes:
         member = {}
         m_id = member['id'] = take['member_id']
         member['username'] = take['member_name']
         member['nominal_take'] = take['amount']
         member['actual_amount'] = take['actual_amount']
         member['last_week'] = last_week.get(m_id)
         if compute_max:
             x = self.compute_max_this_week(m_id, last_week, take['amount'].currency)
         else:
             x = None
         member['max_this_week'] = x
         members[member['id']] = member
     return members