def transfer( request, group, account=None, transfer_type=None, is_admin=False, is_owner=False): """Deposit, withdraw or transfer money""" if request.method == 'POST': data = request.POST else: data = None if transfer_type == 'transfer': title = _('Transfer from account') form = TransferForm(data, account=account) elif transfer_type == 'deposit': title = _('Deposit to account') form = DepositWithdrawForm(data) elif transfer_type == 'withdraw': title = _('Withdrawal from account') form = DepositWithdrawForm(data) else: return HttpResponseForbidden(_('Forbidden if not group admin.')) if request.method == 'POST' and form.is_valid(): amount = form.cleaned_data['amount'] details = form.cleaned_data['details'].strip() if details == '': details = None bank_account = group.roleaccount_set.get( role=RoleAccount.BANK_ACCOUNT).account transaction = Transaction(group=group) # FIXME: save() shouldn't be need if we figure out a reasonable hack transaction.save() if transfer_type == 'deposit': # Deposit to user account transaction.entry_set.add( TransactionEntry(account=account, credit=amount)) transaction.entry_set.add( TransactionEntry(account=bank_account, debit=amount)) transaction.set_pending(user=request.user, message=details) elif transfer_type == 'withdraw': # Withdraw from user account transaction.entry_set.add( TransactionEntry(account=account, debit=amount)) transaction.entry_set.add( TransactionEntry(account=bank_account, credit=amount)) transaction.set_pending(user=request.user, message=details) elif transfer_type == 'transfer': # Transfer from user account to other user account credit_account = Account.objects.get( id=form.cleaned_data['credit_account']) transaction.entry_set.add( TransactionEntry(account=account, debit=amount)) transaction.entry_set.add( TransactionEntry(account=credit_account, credit=amount)) transaction.set_pending(user=request.user, message=details) if amount <= account.normal_balance() - (group.block_limit or 0): transaction.set_committed(user=request.user) else: messages.info(request, _( 'Your transaction has been added, ' 'but your group admin has to commit it.')) else: return HttpResponseForbidden(_('Forbidden if not group admin.')) messages.success(request, _('Added transaction: %s') % transaction) return HttpResponseRedirect(reverse( 'account-summary', args=[account.group.slug, account.slug])) return render_to_response('accounting/transfer.html', { 'is_admin': is_admin, 'is_owner': is_owner, 'account': account, 'type': transfer_type, 'title': title, 'form': form, 'group': group, }, context_instance=RequestContext(request))
def transfer( request, group, account=None, transfer_type=None, is_admin=False, is_owner=False, ): """Deposit, withdraw or transfer money""" if request.method == "POST": data = request.POST else: data = None if transfer_type == "transfer": title = _("Transfer from account") form = TransferForm(data, account=account) elif transfer_type == "deposit": title = _("Deposit to account") form = DepositWithdrawForm(data) elif transfer_type == "withdraw": title = _("Withdrawal from account") form = DepositWithdrawForm(data) else: return HttpResponseForbidden(_("Forbidden if not group admin.")) if request.method == "POST" and form.is_valid(): amount = form.cleaned_data["amount"] details = form.cleaned_data["details"].strip() if details == "": details = None bank_account = group.roleaccount_set.get( role=RoleAccount.BANK_ACCOUNT).account transaction = Transaction(group=group) # FIXME: save() shouldn't be need if we figure out a reasonable hack transaction.save() if transfer_type == "deposit": # Deposit to user account transaction.entry_set.create(account=account, credit=amount) transaction.entry_set.create(account=bank_account, debit=amount) transaction.set_pending(user=request.user, message=details) elif transfer_type == "withdraw": # Withdraw from user account transaction.entry_set.create(account=account, debit=amount) transaction.entry_set.create(account=bank_account, credit=amount) transaction.set_pending(user=request.user, message=details) elif transfer_type == "transfer": # Transfer from user account to other user account credit_account = Account.objects.get( id=form.cleaned_data["credit_account"]) transaction.entry_set.create(account=account, debit=amount) transaction.entry_set.create(account=credit_account, credit=amount) transaction.set_pending(user=request.user, message=details) if amount <= account.normal_balance() - (group.block_limit or 0): transaction.set_committed(user=request.user) else: messages.info( request, _("Your transaction has been added, " "but your group admin has to commit it."), ) else: return HttpResponseForbidden(_("Forbidden if not group admin.")) messages.success(request, _("Added transaction: %s") % transaction) return HttpResponseRedirect( reverse("account-summary", args=[account.group.slug, account.slug])) return render( request, "accounting/transfer.html", { "is_admin": is_admin, "is_owner": is_owner, "account": account, "type": transfer_type, "title": title, "form": form, "group": group, }, )