diff --git a/store/backend.py b/store/backend.py index 73996e8daad8cdcb492e80da0e5d3708d1e45e79..b8ad6ec9c1c3fe8996ac74965574328a217fe700 100644 --- a/store/backend.py +++ b/store/backend.py @@ -321,3 +321,36 @@ class TransferLogic: if max_receivers >= 0: transfers = transfers[:max_receivers] return list(transfers) + + """ + Performs the transfer routine where a sender sends money to a receiver. + @param user_id: id of the user that wants to send money + @param receiver_id: id of the user that should get the money + @param amount: amount of money to be sent + @param token: unique token got by TokenLogic's getToken + """ + @staticmethod + def transfer(user_id, receiver_id, amount, token): + sender = list(User.objects.filter(id=user_id))[0] + receiver = list(User.objects.filter(id=receiver_id))[0] + try: + with transfer.atomic(): + transfer_id = TransferLogic.__createTransferTuple(sender, receiver, amount, token) + TransferLogic.__updateSenderMoney(sender, amount) + TransferLogic.__updateReceiverMoney(receiver, amount) + except IntegrityError: + return list(Transfers.objects.filter(token=token))[0] + return transfer_id + + + def __createTransferTuple(sender, receiver, amount, token): + transfer = Transfer(sender=sender, receiver=receiver, amount=amount, token=token, annulated=False) + transfer.save() + return transfer.id + + def __updateSenderMoney(sender, amount): + sender.updateMoney((-1) * amount) + + def __updateReceiverMoney(receiver, amount): + receiver.updateMoney(amount) + diff --git a/store/store_config.py b/store/store_config.py index b781ba6289d91f7aaab58659951a1320ae8cdcf6..6fdad4743b8283ecfb9e9cc59f76a2ac4d04c827 100644 --- a/store/store_config.py +++ b/store/store_config.py @@ -10,6 +10,8 @@ T_USERS_LOGIN_D: number of days in the past that are used as time intervall limi N_LAST_CHARGES: number of charges that should be shown in 'Letzte Aufladungen'. A negative number means 'all users are selected' T_ANNULLABLE_CHARGE_M: time of minutes a user has for a charge to undo it +N_TRANSFER_RECEIVERS: number of receivers that should be shown in 'alle Überweisungen'. A negative value means 'all +users are shown' """ KAFFEEKASSE = {'N_LAST_BOUGHT_PRODUCTS': 5, 'T_LAST_BOUGHT_PRODUCTS_D': 30, @@ -20,4 +22,5 @@ KAFFEEKASSE = {'N_LAST_BOUGHT_PRODUCTS': 5, 'T_USERS_LOGIN_D': 356, 'N_LAST_CHARGES': 10, 'T_ANNULLABLE_CHARGE_M': 60, + 'N_TRANSFER_RECEIVERS': -1, }