'Get the takes, compute the actual amounts, and return an OrderedDict.'

def compute_actual_takes(self, cursor=None):

    actual_takes = OrderedDict()
    nominal_takes = self.get_current_takes(cursor=cursor)
    available = balance = self.available
    for take in nominal_takes:
        nominal_amount = take[u'nominal_amount'] = take.pop(u'amount')
        actual_amount = take[u'actual_amount'] = min(nominal_amount, balance)
        take[u'balance'] = balance = (balance - actual_amount)
        take[u'percentage'] = (actual_amount / available)
        actual_takes[take[u'participant'].id] = take
    return actual_takes
