def withdraw(request): form = WithdrawForm(data=request.POST or None) if request.method == 'POST' and form.is_valid(): ps = form.cleaned_data.get('ps') if not request.user.get_ps_account(ps): form.add_error('ps', _('Укажите аккаунт платежной системы в настройках')) else: try: amount = form.cleaned_data.get('amount') tr = UserTransaction() tr.do_transaction_withdraw( user=request.user, ps=ps, amount=amount ) if request.user.is_alerts_other: request.user.email_user(_('Запрос на вывод'), 'mail/withdraw_request.html', dict( ps=tr.transaction.get_ps_display(), amount=amount, balance=tr.balance_after, comission=settings.WITHDRAW_COMISSION_PERCENT, for_withdraw=calculate_withdraw_amount(amount) )) messages.success(request, _('Запрос на вывод отправлен')) return redirect('account_withdraw') except InsufficientBalance: form.add_error('amount', _('Недостаточно средств')) return render(request, 'default_set/withdraw.html', dict(form=form), )