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
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
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
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
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
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
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