Пример #1
0
def remove_participants(event, leavers):
    # check, that leaver is participated
    leavers = is_participated(event, leavers)
    if not leavers:
        return

    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
    party_pay = event.price / exist_parts

    rest_participations = participants.filter(~Q(account__in=leavers))

    leaver_participations = participants.filter(account__in=list(leavers))
    # return money

    for participation in leaver_participations:
        leaver_transaction = Transaction(participation=participation,
                                         type=Transaction.OUT)
        debit = party_pay * participation.parts
        leaver_transaction.debit = debit
        leaver_transaction.save()
        # create diffs
        # yep folks, you should pay for this leavers
        rest_parts = rest_participations.aggregate(s=Sum('parts'))['s']
        for victum in rest_participations:
            credit = ((leaver_transaction.debit / rest_parts)
                      * victum.parts)
            delegate_debt(victum, credit, leaver_transaction)

    leaver_participations.update(active=False)
Пример #2
0
def remove_participants(event, leavers):
    # check, that leaver is participated
    leavers = is_participated(event, leavers)
    if not leavers:
        return

    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
    party_pay = event.price / exist_parts

    rest_participations = participants.filter(~Q(account__in=leavers))

    leaver_participations = participants.filter(account__in=list(leavers))
    # return money

    for participation in leaver_participations:
        leaver_transaction = Transaction(participation=participation,
                                         type=Transaction.OUT)
        debit = party_pay * participation.parts
        leaver_transaction.debit = debit
        leaver_transaction.save()
        # create diffs
        # yep folks, you should pay for this leavers
        rest_parts = rest_participations.aggregate(s=Sum('parts'))['s']
        for victum in rest_participations:
            credit = ((leaver_transaction.debit / rest_parts) * victum.parts)
            delegate_debt(victum, credit, leaver_transaction)

    leaver_participations.update(active=False)
Пример #3
0
def return_money(participation, debit, parent):
    """Make diff transactions for given participation(event,user) with given
    debit. This means, that we get money from event and return it to user.

    @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.debit = debit
    t.save()
Пример #4
0
def return_money(participation, debit, parent):
    """Make diff transactions for given participation(event,user) with given
    debit. This means, that we get money from event and return it to user.

    @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.debit = debit
    t.save()