Пример #1
0
def add_participants(event, newbies):
    """Add participants in event. Takes dict, where keys - is account
    models and values is participation part(int)."""

    if len(newbies) == 0:
        return
    # calc party-pay,
    participants = Participation.objects.filter(event=event, active=True)

    exist_parts = participants.aggregate(s=Sum('parts'))['s']
    exist_parts = 0.0 if exist_parts is None else exist_parts  # fix None
    all_parts = exist_parts + sum(newbies.values())

    party_pay = event.price / all_parts
    recalcers = participants.filter(~Q(account__in=newbies.keys()))
    parent_transactions = []
    # participate incomers
    for (acc, parts) in newbies.items():
        # if not already participated
        participation = Participation.objects.filter(account=acc, event=event,
                                                     active=False)
        if len(participation) == 0:
            participation = Participation(account=acc, parts=parts,
                                          event=event)
        else:
            participation = participation[0]

        participation.active = True
        participation.save()

        tr = Transaction(participation=participation,
                         type=Transaction.PARTICIPATE)
        tr.credit = party_pay * parts
        parent_transactions.append(tr)
        tr.save()

    # create diffs for old participants
    # if no recalcers(incomers if first participants) we have exist_parts = 0
    for newbie_transaction in parent_transactions:
        for participation in recalcers:
            assert (exist_parts != 0),\
                "On add participants when we need recalc exist participants\
                exist_parts should be positive(not zero)"
            debit = ((newbie_transaction.credit / exist_parts)
                     * participation.parts)
            return_money(participation, debit, newbie_transaction)
Пример #2
0
def add_participants(event, newbies):
    """Add participants in event. Takes dict, where keys - is account
    models and values is participation part(int)."""

    # calc party-pay,
    participants = Participation.objects.filter(event=event, active=True)

    exist_parts = participants.aggregate(s=Sum('parts'))['s']
    exist_parts = 0.0 if exist_parts is None else exist_parts  # fix None
    all_parts = exist_parts + sum(newbies.values())

    party_pay = event.price / all_parts
    recalcers = participants.filter(~Q(account__in=newbies.keys()))
    parent_transactions = []
    # participate incomers
    for (acc, parts) in newbies.items():
        # if not already participated
        participation = Participation.objects.filter(account=acc, active=False)
        if len(participation) == 0:
            participation = Participation(account=acc,
                                          parts=parts,
                                          event=event)
        else:
            participation = participation[0]

        participation.active = True
        participation.save()

        tr = Transaction(participation=participation,
                         type=Transaction.PARTICIPATE)
        tr.credit = party_pay * parts
        parent_transactions.append(tr)
        tr.save()

    # create diffs for old participants
    # if no recalcers(incomers if first participants) we have exist_parts = 0
    for newbie_transaction in parent_transactions:
        for participation in recalcers:
            assert (exist_parts != 0),\
                "On add participants when we need recalc exist participants\
                exist_parts should be positive(not zero)"

            debit = ((newbie_transaction.credit / exist_parts) *
                     participation.parts)
            return_money(participation, debit, newbie_transaction)
Пример #3
0
def delegate_debt(participation, credit, parent):
    """Make diff transactions for given participation(event,user) with given
    credit. This means, that we get money from user and spend it to event.

    @param participation:  Event-User link that for create transaction
    @type  participation:  Participation

    @param debit:  Money count that was returned
    @type  debit:  float

    @param parent:  Parent transaction, that initiate return(incomer for
                    example)
    @type  parent:  Transaction
    """
    t = Transaction(participation=participation, type=Transaction.DIFF,
                    parent=parent)
    t.credit = credit
    t.save()
Пример #4
0
def delegate_debt(participation, credit, parent):
    """Make diff transactions for given participation(event,user) with given
    credit. This means, that we get money from user and spend it to event.

    @param participation:  Event-User link that for create transaction
    @type  participation:  Participation

    @param debit:  Money count that was returned
    @type  debit:  float

    @param parent:  Parent transaction, that initiate return(incomer for
                    example)
    @type  parent:  Transaction
    """
    t = Transaction(participation=participation,
                    type=Transaction.DIFF,
                    parent=parent)
    t.credit = credit
    t.save()