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), )
def accrual_balances(): users = UserProfile.objects.all() for user in users: for ps in user.get_ps_instances(): plan = Plan.objects.get_plan_by_amount(ps.balance) if plan: delta = timezone.now() - deltas[plan.period] accrual_transactions = user.transactions.filter(ps=ps.get_name, transaction_type=TRANSACTION_ACCRUAL, is_ended=True, created__gte=delta) if not accrual_transactions: utr = UserTransaction() utr.do_transaction_accrual(user, ps.get_name, ps.balance / Decimal(100) * plan.percent)
def deposit_result(request): if not request.method == 'POST': return HttpResponse('no') retval = 'error' if request.POST.get('m_operation_id', None) and request.POST.get( 'm_sign', None): arHash = (request.POST['m_operation_id'], request.POST['m_operation_ps'], request.POST['m_operation_date'], request.POST['m_operation_pay_date'], request.POST['m_shop'], request.POST['m_orderid'], request.POST['m_amount'], request.POST['m_curr'], request.POST['m_desc'], request.POST['m_status'], settings.PAYEER_SHOP_KEY) order_id = request.POST.get('m_orderid') sign_hash = hashlib.sha256( ':'.join(arHash).encode('utf-8')).hexdigest().upper() if request.POST.get('m_sign') == sign_hash and request.POST.get( 'm_status') == 'success': retval = order_id + '|success' tr = Transaction.objects.get(pk=int(request.POST.get('m_orderid'))) if tr.amount == Decimal(request.POST.get( 'm_amount')) and tr.ps == NAME and not tr.is_ended: transaction = UserTransaction() transaction.do_transaction_deposit( tr.user, tr, request.POST.get('m_operation_id')) else: retval = order_id + "|error" else: retval = order_id + "|error" return HttpResponse(retval)
def accrual_balances(): users = UserProfile.objects.all() for user in users: for ps in user.get_ps_instances(): plan = Plan.objects.get_plan_by_amount(ps.balance) if plan: delta = timezone.now() - deltas[plan.period] accrual_transactions = user.transactions.filter( ps=ps.get_name, transaction_type=TRANSACTION_ACCRUAL, is_ended=True, created__gte=delta) if not accrual_transactions: utr = UserTransaction() utr.do_transaction_accrual( user, ps.get_name, ps.balance / Decimal(100) * plan.percent)
def deposit_result(request): if not request.method == 'POST': return HttpResponse('no') outhash = hashlib.md5('{}:{}:{}:USD:{}:{}:{}:{}'.format( request.POST.get('PAYMENT_ID'), settings.PM_WALLET, request.POST.get('PAYMENT_AMOUNT'), request.POST.get('PAYMENT_BATCH_NUM'), request.POST.get('PAYER_ACCOUNT'), hashlib.md5(settings.PM_PASSPHRASE.encode('utf-8')).hexdigest().upper(), request.POST.get('TIMESTAMPGMT')).encode('utf-8')).hexdigest() if str(outhash).upper() == str(request.POST.get('V2_HASH')).upper(): tr = Transaction.objects.get(pk=int(request.POST.get('PAYMENT_ID'))) if tr.amount == Decimal(request.POST.get('PAYMENT_AMOUNT')) and tr.ps == NAME and not tr.is_ended: transaction = UserTransaction() transaction.do_transaction_deposit(tr.user, tr, request.POST['PAYMENT_BATCH_NUM']) return HttpResponse('ok')
def accrual_deposits(): deposits = Deposit.objects.filter(is_ended=False) for deposit in deposits: plan = deposit.plan time_elapsed = timezone.now() - deposit.last_update delta = deltas[plan.period] if time_elapsed >= delta: deposit.last_update = timezone.now() deposit.save() utr = UserTransaction() utr.do_transaction_accrual(deposit.user, deposit.ps, deposit.amount / Decimal(100) * plan.percent, deposit=deposit) if int((timezone.now() - deposit.created).total_seconds() / 3600) >= plan.end_period: deposit.is_ended = True deposit.save() if plan.deposit_return: utr = UserTransaction() utr.do_deposit_return(deposit)
def accrual_deposits(): deposits = Deposit.objects.filter(is_ended=False) for deposit in deposits: plan = deposit.plan time_elapsed = timezone.now()-deposit.last_update delta = deltas[plan.period] if time_elapsed >= delta: deposit.last_update = timezone.now() deposit.save() utr = UserTransaction() utr.do_transaction_accrual(deposit.user, deposit.ps, deposit.amount / Decimal(100) * plan.percent, deposit=deposit) if int((timezone.now()-deposit.created).total_seconds()/3600) >= plan.end_period: deposit.is_ended = True deposit.save() if plan.deposit_return: utr = UserTransaction() utr.do_deposit_return(deposit)