Exemple #1
0
def remove_order(Req, Order):
     Encoder = json.JSONEncoder()
        
     FreqKey = "orders" + str(Req.user.id)
     if not check_freq(FreqKey, 3) :
        Response =   HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response        


     if not Req.user.is_authenticated():
                Dict = {"status":"auth_error","description":_("You must login")};
                RespJ  = Encoder.encode(Dict)
                Response =   HttpResponse(RespJ)
                Response['Content-Type'] = 'application/json'
                return Response
     else :
                if __inner_remove_order(Order, Req.user):
                      Dict = {"status":True };
                      RespJ  = Encoder.encode(Dict)
                      Response =   HttpResponse(RespJ)
                      Response['Content-Type'] = 'application/json'
                      return Response
                else :
                      Dict = {"status":False, "description": _("A mistake has been occured during removing try one more") };
                      RespJ  = Encoder.encode(Dict)
                      Response =   HttpResponse(RespJ)
                      Response['Content-Type'] = 'application/json'
                      return Response    
Exemple #2
0
def confirm_withdraw_currency(Req, S, PrivateKey):
    S = S.replace("\n", "").replace(" ", "")
    Transfer = CryptoTransfers.objects.get(status="created", confirm_key=S)
    ##add trans may be there
    AccountTo = Accounts.objects.get(user=Transfer.user, currency=Transfer.currency)
    ## if not by reference, but by users

    TradePair = TradePairs.objects.get(currency_on=Transfer.currency, currency_from=Transfer.currency)
    FreqKey = "orders" + str(Req.user.id)

    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response["Content-Type"] = "application/json"
        return Response

    order = Orders(
        user=Transfer.user,
        currency1=Transfer.currency,
        currency2=Transfer.currency,
        price=Transfer.amnt,
        sum1_history=Transfer.amnt + Transfer.comission,
        sum2_history=Transfer.amnt,
        sum1=Transfer.amnt + Transfer.comission,
        sum2=Transfer.amnt,
        transit_1=AccountTo,
        transit_2=TradePair.transit_from,
        trade_pair=TradePair,
        status="created",
    )
    order.save()

    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.status = "processing"
    Transfer.sign_record(PrivateKey)
    Transfer.save()
    # TODO add process exception in withdraw crypto currency
    add_trans(
        AccountTo,
        Transfer.amnt + Transfer.comission,
        Transfer.currency,
        TradePair.transit_from,
        order,
        "withdraw",
        S,
        True,
    )

    t = loader.get_template("ajax_simple_msg.html")
    Dict = {}
    Dict["title"] = settings.withdraw_ok
    Dict["simple_msg"] = settings.withdraw_msg_ok
    caching().delete("balance_" + str(Transfer.user.id))
    notify_admin_withdraw(withdraw_crypto(Transfer))
    return tmpl_context(Req, t, Dict)
Exemple #3
0
def emoney_transfer_withdraw_secure(Req, Form, provider):
    Key = generate_key("p2p_ahuihui")
    Wallet = Form.cleaned_data["wallet"]
    Wallet = Wallet.replace(" ", "")
    Transfer = TransOut(
        wallet=Wallet,
        currency=Form.currency_instance,
        amnt=Form.cleaned_data["amnt"],
        user=Req.user,
        pub_date=datetime.datetime.now(),
        confirm_key=Key,
        provider=provider,
    )
    FreqKey = "orders" + str(Req.user.id)
    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response["Content-Type"] = "application/json"
        return Response

    Transfer.save()

    AccountTo = Accounts.objects.get(user=Req.user, currency=Transfer.currency)
    ## if not by reference, but by users
    trade_pair_title = provider + "_" + Form.currency_instance.title.lower()
    TradePair = TradePairs.objects.get(url_title=trade_pair_title)
    order = Orders(
        user=Req.user,
        currency1=Transfer.currency,
        currency2=Transfer.currency,
        sum1_history=Transfer.amnt,
        sum2_history=Transfer.amnt,
        sum1=Transfer.amnt,
        price=Decimal("1"),
        sum2=Transfer.amnt,
        transit_1=AccountTo,
        transit_2=TradePair.transit_from,
        trade_pair=TradePair,
        status="created",
    )
    order.save()
    # TODO add process exception in withdraw p2p
    add_trans(AccountTo, Transfer.amnt, Transfer.currency, TradePair.transit_from, order, "withdraw", Key, True)
    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.save()

    # if settings.DEBUG is False:
    send_mail(
        _(u"Подтверждение вывода  ") + settings.BASE_HOST,
        confirm_emoney_withdraw_email(Form.cleaned_data, Key),
        settings.EMAIL_HOST_USER,
        [Req.user.email],
        fail_silently=False,
    )
Exemple #4
0
def p2p_transfer_withdraw_secure(Req, Form):
    Key = generate_key("p2p_ahuihui")
    CardNumber = Form.cleaned_data["CardNumber"]
    CardNumber = CardNumber.replace(" ", "")
    Transfer = CardP2PTransfers(
        debit_credit="out",
        CardName=Form.cleaned_data["CardName"],
        CardNumber=CardNumber,
        currency=Form.currency_instance,
        amnt=Form.cleaned_data["amnt"],
        user=Req.user,
        pub_date=datetime.datetime.now(),
        confirm_key=Key
    )
    FreqKey = "orders" + str(Req.user.id)
    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

    Transfer.save()

    AccountTo = get_account(user=Req.user, currency=Transfer.currency)
    ## if not by reference, but by users
    TradePair = TradePairs.objects.get(url_title="p2p_transfers")
    order = Orders(user=Req.user,
                   currency1=Transfer.currency,
                   currency2=Transfer.currency,
                   sum1_history=Transfer.amnt,
                   sum2_history=Transfer.amnt,
                   sum1=Transfer.amnt,
                   sum2=Transfer.amnt,
                   transit_1=AccountTo,
                   transit_2=TradePair.transit_from,
                   trade_pair=TradePair,
                   status="created"
    )
    order.save()
    # TODO add process exception in withdraw p2p
    add_trans(AccountTo.acc(), Transfer.amnt, Transfer.currency, TradePair.transit_from,
              order, "withdraw", Key, True)
    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.save()


    #if settings.DEBUG is False:
    send_mail(_(u'Подтверждение вывода  ') + settings.BASE_HOST,
              confirm_p2p_withdraw_email(Form.cleaned_data, Key),
              settings.EMAIL_HOST_USER,
              [Req.user.email],
              fail_silently=False)
Exemple #5
0
def emoney_transfer_withdraw_secure(Req, Form, provider):
    Key = generate_key("p2p_ahuihui")
    Wallet = Form.cleaned_data["wallet"]
    Wallet = Wallet.replace(" ", "")
    Transfer = TransOut(
        wallet=Wallet,
        currency=Form.currency_instance,
        amnt=Form.cleaned_data["amnt"],
        user=Req.user,
        pub_date=datetime.datetime.now(),
        confirm_key=Key,
        provider=provider
    )
    FreqKey = "orders" + str(Req.user.id)
    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

    Transfer.save()

    AccountTo = get_account(user=Req.user, currency=Transfer.currency)
    ## if not by reference, but by users
    trade_pair_title = provider + "_" + Form.currency_instance.title.lower()
    TradePair = TradePairs.objects.get(url_title=trade_pair_title)
    order = Orders(user=Req.user,
                   price=Decimal("1"),
                   currency1=Transfer.currency,
                   currency2=Transfer.currency,
                   sum1_history=Transfer.amnt,
                   sum2_history=Transfer.amnt,
                   sum1=Transfer.amnt,
                   sum2=Transfer.amnt,
                   transit_1=AccountTo.acc(),
                   transit_2=TradePair.transit_from,
                   trade_pair=TradePair,
                   status="created"
    )
    order.save()
    # TODO add process exception in withdraw p2p
    add_trans(AccountTo.acc(), Transfer.amnt, Transfer.currency, TradePair.transit_from,
              order, "withdraw", Key, False)
    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.save()


    #if settings.DEBUG is False:
    send_mail(_(u'Подтверждение вывода  ') + settings.BASE_HOST,
              confirm_emoney_withdraw_email(Form.cleaned_data, Key),
              [Req.user.email],
              fail_silently=False)
Exemple #6
0
def confirm_withdraw_currency(Req, S, PrivateKey=''):
    S = S.replace("\n", "").replace(" ", "")
    Transfer = CryptoTransfers.objects.get(status="created", confirm_key=S)
    ##add trans may be there
    AccountTo = get_account(user=Transfer.user, currency=Transfer.currency)
    ## if not by reference, but by users

    TradePair = TradePairs.objects.get(currency_on=Transfer.currency,
                                       currency_from=Transfer.currency)
    FreqKey = "orders" + str(Req.user.id)

    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

    order = Orders(price=Decimal("1"),
                   user=Transfer.user,
                   currency1=Transfer.currency,
                   currency2=Transfer.currency,
                   sum1_history=Transfer.amnt + Transfer.comission,
                   sum2_history=Transfer.amnt,
                   sum1=Transfer.amnt + Transfer.comission,
                   sum2=Transfer.amnt,
                   transit_1=AccountTo.acc(),
                   transit_2=TradePair.transit_from,
                   trade_pair=TradePair,
                   status="created",
    )
    order.save()

    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.status = "processing"
    Transfer.sign_record(PrivateKey)
    Transfer.save()
    # TODO add process exception in withdraw crypto currency
    add_trans(AccountTo.acc(), Transfer.amnt + Transfer.comission, Transfer.currency, TradePair.transit_from,
              order, "withdraw", S, False)

    t = loader.get_template("ajax_simple_msg.html")
    Dict = {}
    Dict["title"] = settings.withdraw_ok
    Dict["simple_msg"] = settings.withdraw_msg_ok
    caching().delete("balance_" + str(Transfer.user.id))
    notify_admin_withdraw(withdraw_crypto(Transfer))
    return tmpl_context(Req, t, Dict)
Exemple #7
0
def confirm_withdraw_liqpay(Req, S):
        

        Transfer = LiqPayTrans.objects.get(user = Req.user, 
                                           status = "created", 
                                           confirm_key = S)
        liqpay_class = liqpay("ru", Transfer.currency.title)     
        FreqKey = "orders" + str(Req.user.id)
        if not check_freq(FreqKey, 3) :
            Response =   HttpResponse('{"status":false}')
            Response['Content-Type'] = 'application/json'
            return Response

     ##add trans may be there     
        AccountTo = Accounts.objects.get(user = Req.user, currency = Transfer.currency)
                ## if not by reference, but by users
        TradePair = liqpay_class.get_traid_pair()
        order = Orders( user = Req.user,
                                currency1 = Transfer.currency,
                                currency2 = Transfer.currency, 
                                sum1_history = Transfer.amnt,
                                sum2_history = Transfer.amnt,
                                sum1 = Transfer.amnt, 
                                sum2 = Transfer.amnt,
                                transit_1 = AccountTo,
                                transit_2 = TradePair.transit_from ,
                                trade_pair = TradePair,
                                status = "created"
                        )
        order.save()
        add_trans(AccountTo, Transfer.amnt, Transfer.currency, TradePair.transit_from, 
                  order, "withdraw", S, True)
        order.status = "processing"
        order.save()
        Transfer.order = order
        Transfer.status = "processing"
        Transfer.save()
        t = loader.get_template("ajax_simple_msg.html")   
        Dict = {}
        Dict["title"] = settings.withdraw_ok
        Dict["simple_msg"] = settings.withdraw_msg_ok
        caching().delete("balance_" + str(Req.user.id) )

        return tmpl_context(Req, t, Dict)
Exemple #8
0
def confirm_withdraw_liqpay(Req, S):
    Transfer = LiqPayTrans.objects.get(user=Req.user,
                                       status="created",
                                       confirm_key=S)
    liqpay_class = liqpay("ru", Transfer.currency.title)
    FreqKey = "orders" + str(Req.user.id)
    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

        ##add trans may be there
    AccountTo = get_account(user=Req.user, currency=Transfer.currency)
    ## if not by reference, but by users
    TradePair = liqpay_class.get_traid_pair()
    order = Orders(user=Req.user,
                   price=Decimal("1"),
                   currency1=Transfer.currency,
                   currency2=Transfer.currency,
                   sum1_history=Transfer.amnt,
                   sum2_history=Transfer.amnt,
                   sum1=Transfer.amnt,
                   sum2=Transfer.amnt,
                   transit_1=AccountTo.acc(),
                   transit_2=TradePair.transit_from,
                   trade_pair=TradePair,
                   status="created"
    )
    order.save()
    add_trans(AccountTo.acc(), Transfer.amnt, Transfer.currency, TradePair.transit_from,
              order, "withdraw", S, False)
    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.status = "processing"
    Transfer.save()
    t = loader.get_template("ajax_simple_msg.html")
    Dict = {}
    Dict["title"] = settings.withdraw_ok
    Dict["simple_msg"] = settings.withdraw_msg_ok
    caching().delete("balance_" + str(Req.user.id))

    return tmpl_context(Req, t, Dict)
Exemple #9
0
def confirm_withdraw_bank(Req, S):
    Transfer = BankTransfers.objects.get(user=Req.user, status="created", confirm_key=S)
    ##add trans may be there
    AccountTo = get_account(user=Req.user, currency=Transfer.currency)

    FreqKey = "orders" + str(Req.user.id)
    if not check_freq(FreqKey, 2):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

        ## if not by reference, but by users
    TradePair = TradePairs.objects.get(url_title="bank_transfers")
    order = Orders(user=Req.user,
                   price=Decimal("1"),
                   currency1=Transfer.currency,
                   currency2=Transfer.currency,
                   sum1_history=Transfer.amnt,
                   sum2_history=Transfer.amnt,
                   sum1=Transfer.amnt,
                   sum2=Transfer.amnt,
                   transit_1=AccountTo.acc(),
                   transit_2=TradePair.transit_from,
                   trade_pair=TradePair,
                   status="created"
    )
    order.save()
    # TODO add process exception in withdraw crypto currency
    add_trans(AccountTo.acc(), Transfer.amnt, Transfer.currency,
              TradePair.transit_from, order, "withdraw", S, False)
    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.status = "processing"
    Transfer.save()
    t = loader.get_template("ajax_simple_msg.html")
    Dict = {}
    Dict["title"] = settings.withdraw_ok
    Dict["simple_msg"] = settings.withdraw_msg_ok
    return tmpl_context(Req, t, Dict)
Exemple #10
0
def confirm_withdraw_bank(Req, S):
    Transfer = BankTransfers.objects.get(user=Req.user, status="created", confirm_key=S)
    ##add trans may be there
    AccountTo = Accounts.objects.get(user=Req.user, currency=Transfer.currency)

    FreqKey = "orders" + str(Req.user.id)
    if not check_freq(FreqKey, 2):
        Response = HttpResponse('{"status":false}')
        Response["Content-Type"] = "application/json"
        return Response

        ## if not by reference, but by users
    TradePair = TradePairs.objects.get(url_title="bank_transfers")
    order = Orders(
        user=Req.user,
        currency1=Transfer.currency,
        currency2=Transfer.currency,
        sum1_history=Transfer.amnt,
        sum2_history=Transfer.amnt,
        sum1=Transfer.amnt,
        sum2=Transfer.amnt,
        transit_1=AccountTo,
        transit_2=TradePair.transit_from,
        trade_pair=TradePair,
        status="created",
    )
    order.save()
    # TODO add process exception in withdraw crypto currency
    add_trans(AccountTo, Transfer.amnt, Transfer.currency, TradePair.transit_from, order, "withdraw", S, True)
    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.status = "processing"
    Transfer.save()
    t = loader.get_template("ajax_simple_msg.html")
    Dict = {}
    Dict["title"] = settings.withdraw_ok
    Dict["simple_msg"] = settings.withdraw_msg_ok
    return tmpl_context(Req, t, Dict)
Exemple #11
0
def remove_order(Req, Order):
    Encoder = json.JSONEncoder()

    FreqKey = "orders" + str(Req.user.id)
    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

    if not Req.user.is_authenticated():
        Dict = {
            "status": "auth_error",
            "description": _("You must login")
        }
        RespJ = Encoder.encode(Dict)
        Response = HttpResponse(RespJ)
        Response['Content-Type'] = 'application/json'
        return Response
    else:
        if __inner_remove_order(Order, Req.user):
            Dict = {
                "status": True
            }
            RespJ = Encoder.encode(Dict)
            Response = HttpResponse(RespJ)
            Response['Content-Type'] = 'application/json'
            return Response
        else:
            Dict = {
                "status":
                False,
                "description":
                _("A mistake has been occured during removing try one more")
            }
            RespJ = Encoder.encode(Dict)
            Response = HttpResponse(RespJ)
            Response['Content-Type'] = 'application/json'
            return Response
Exemple #12
0
def buy(Req, Trade_pair):
    FreqKey = "orders" + str(Req.user.id)
    Start = time.time()
    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

    getcontext().prec = settings.TRANS_PREC
    try:
        Count = Req.REQUEST.get("count")
        Price = Req.REQUEST.get("price")
        Count = Decimal(Count.replace(",", ".").strip())
        Price = Decimal(Price.replace(",", ".").strip())
        Count = to_prec(Count, settings.TRANS_PREC)
        Price = to_prec(Price, settings.TRANS_PREC)

    except:
        Response = HttpResponse(process_mistake(Req, "invalid_params"))
        Response['Content-Type'] = 'application/json'
        return Response

    if Price <= 0:
        Response = HttpResponse(process_mistake(Req, "SumLess0"))
        Response['Content-Type'] = 'application/json'
        return Response

    if Count <= 0:
        Response = HttpResponse(process_mistake(Req, "CountLess0"))
        Response['Content-Type'] = 'application/json'
        return Response

    TradePair = TradePairs.objects.get(url_title=Trade_pair)
    LOCK = "trades" + TradePair.url_title

    if TradePair.min_trade_base > Count:
        Response = HttpResponse(process_mistake(Req, "MinCount"))
        Response['Content-Type'] = 'application/json'
        return Response

    Custom = "0.0005"  # Req.session["deal_comission"]
    Comission = Decimal(Custom)

    CurrencyOnS = Req.REQUEST.get("currency")
    CurrencyBaseS = Req.REQUEST.get("currency1")

    Amnt1 = Price * Count
    Amnt2 = Count

    CurrencyBase = Currency.objects.get(title=CurrencyBaseS)
    CurrencyOn = Currency.objects.get(title=CurrencyOnS)

    TradeLock = my_lock(LOCK)
    order = Orders(user=Req.user,
                   currency1=CurrencyBase,
                   currency2=CurrencyOn,
                   price=Price,
                   sum1_history=Amnt1,
                   sum2_history=Amnt2,
                   sum1=Amnt1,
                   sum2=Amnt2,
                   transit_1=TradePair.transit_from,
                   transit_2=TradePair.transit_on,
                   trade_pair=TradePair,
                   comission=Comission)
    order.save()

    try:
        FromAccount = Accounts.objects.get(user=Req.user,
                                           currency=CurrencyBase)
        add_trans(FromAccount, Amnt1, CurrencyBase, TradePair.transit_from,
                  order, "deposit")
        order.status = "processing"
        order.save()
        system_notify(deposit_funds(order), Req.user)

        ResAuto = make_auto_trade(order, TradePair, order.price, CurrencyBase,
                                  Amnt1, CurrencyOn, Amnt2)

        Response = HttpResponse(process_auto(Req, ResAuto, TradePair))

        my_release(TradeLock)
        Response['Content-Type'] = 'application/json'
        End = time.time()
        measure = OrderTimer(order=order, time_work=str(End - Start))
        measure.save()

        return Response
    except TransError as e:
        order.status = "canceled"
        order.save()
        Status = e.value
        Response = HttpResponse(process_mistake(Req, Status))
        Response['Content-Type'] = 'application/json'
        my_release(TradeLock)

        End = time.time()
        measure = OrderTimer(order=order, time_work=str(End - Start))
        measure.save()

        return Response
Exemple #13
0
def buy(Req, Trade_pair):
                FreqKey = "orders" + str(Req.user.id)
                Start = time.time()
                if not check_freq(FreqKey, 3) :
                        Response =   HttpResponse('{"status":false}')
                        Response['Content-Type'] = 'application/json'
                        return Response
                        
                 
                getcontext().prec = settings.TRANS_PREC
                try :
                        Count = Req.REQUEST.get("count")
                        Price = Req.REQUEST.get("price")
                        Count  = Decimal( Count.replace(",",".").strip() )
                        Price  = Decimal( Price.replace(",",".").strip() ) 
                        Count = to_prec(Count, settings.TRANS_PREC )                      
                        Price = to_prec(Price, settings.TRANS_PREC )     
                        
                except:
                        Response =   HttpResponse(process_mistake(Req, "invalid_params"))
                        Response['Content-Type'] = 'application/json'
                        return Response
               
                if Price <= 0:
                        Response =   HttpResponse(process_mistake(Req, "SumLess0"))
                        Response['Content-Type'] = 'application/json'
                        return Response
                        
                if Count<=0:
                        Response =   HttpResponse(process_mistake(Req, "CountLess0"))
                        Response['Content-Type'] = 'application/json'
                        return Response                
                
                TradePair =  TradePairs.objects.get(url_title = Trade_pair) 
                LOCK = "trades" + TradePair.url_title
                
                if TradePair.min_trade_base > Count:
                        Response =   HttpResponse(process_mistake(Req, "MinCount"))
                        Response['Content-Type'] = 'application/json'
                        return Response
                        
                Custom = "0.0005"# Req.session["deal_comission"]    
                Comission = Decimal(Custom)
                
                CurrencyOnS = Req.REQUEST.get("currency") 
                CurrencyBaseS  = Req.REQUEST.get("currency1")
                
                Amnt1 = Price * Count 
                Amnt2 = Count         
                
                
                
                CurrencyBase = Currency.objects.get(title =  CurrencyBaseS )
                CurrencyOn = Currency.objects.get(title =  CurrencyOnS )
                
                TradeLock = my_lock(LOCK)
                order = Orders(user = Req.user,
                                currency1 = CurrencyBase,
                                currency2 = CurrencyOn, 
                                price = Price,
                                sum1_history = Amnt1,
                                sum2_history = Amnt2,
                                sum1 = Amnt1, 
                                sum2 = Amnt2,
                                transit_1 = TradePair.transit_from,
                                transit_2 = TradePair.transit_on,
                                trade_pair = TradePair,
                                comission = Comission
                                )
                order.save()

                try: 
                        FromAccount = Accounts.objects.get(user = Req.user, currency = CurrencyBase)
                        add_trans(FromAccount, Amnt1, CurrencyBase, TradePair.transit_from, order, "deposit")                      
                        order.status = "processing"
                        order.save()
                        system_notify(deposit_funds(order), Req.user)                  
                        
                        ResAuto = make_auto_trade(order, TradePair, order.price, CurrencyBase, Amnt1, CurrencyOn, Amnt2)
                        
                        Response = HttpResponse(process_auto(Req, ResAuto, TradePair))

                        my_release(TradeLock)
                        Response['Content-Type'] = 'application/json'
                        End = time.time()
                        measure = OrderTimer(order = order,time_work = str(End - Start))
                        measure.save()
                        
                        return Response 
                except TransError as e: 
                        order.status = "canceled"
                        order.save()
                        Status = e.value
                        Response =   HttpResponse(process_mistake(Req, Status))
                        Response['Content-Type'] = 'application/json'
                        my_release(TradeLock)
                        
                        End = time.time()
                        measure = OrderTimer(order = order,time_work = str(End - Start))
                        measure.save()
                        
                        return Response 
Exemple #14
0
def p2p_transfer_withdraw_common_operation(Req, Form):

    Key = generate_key("p2p_ahuihui")
    CardNumber = Form.cleaned_data["CardNumber"]
    CardNumber = CardNumber.replace(" ", "")
    Amnt = Form.cleaned_data["amnt"]
    NewAmnt = get_comisP2P(CardNumber, Decimal(Amnt))
    Transfer = None
    FreqKey = "orders" + str(Req.user.id)

    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response["Content-Type"] = "application/json"
        return Response

    if NewAmnt < 0:
        Transfer = CardP2PTransfers(
            debit_credit="out",
            CardName=Form.cleaned_data["CardName"],
            CardNumber=CardNumber,
            currency=Form.currency_instance,
            amnt=Amnt,
            pub_date=datetime.datetime.now(),
            user=Req.user,
            confirm_key=Key,
            status="processing2",
        )
        Transfer.sign_record(settings.COMMON_SALT)

    if NewAmnt > 0:
        Transfer = CardP2PTransfers(
            debit_credit="out",
            CardName=Form.cleaned_data["CardName"],
            CardNumber=CardNumber,
            currency=Form.currency_instance,
            amnt=Amnt,
            pub_date=datetime.datetime.now(),
            user=Req.user,
            confirm_key=Key,
            status="auto",
        )
        Transfer.sign_record(settings.COMMON_SALT)

    AccountTo = Accounts.objects.get(user=Req.user, currency=Transfer.currency)
    ## if not by reference, but by users
    TradePair = TradePairs.objects.get(url_title="p2p_transfers")
    order = Orders(
        user=Req.user,
        currency1=Transfer.currency,
        currency2=Transfer.currency,
        sum1_history=Transfer.amnt,
        sum2_history=Transfer.amnt,
        sum1=Transfer.amnt,
        sum2=Transfer.amnt,
        transit_1=AccountTo,
        transit_2=TradePair.transit_from,
        trade_pair=TradePair,
        status="created",
    )
    order.save()
    # TODO add process exception in withdraw p2p
    add_trans(AccountTo, Transfer.amnt, Transfer.currency, TradePair.transit_from, order, "withdraw", Key, True)

    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.save()
    notify_admin_withdraw(withdraw_p2p_auto(Transfer))

    send_mail(
        _(u"Подтверждение вывода  ") + settings.BASE_HOST,
        confirm_p2p_withdraw_email_common(Form.cleaned_data, Key),
        settings.EMAIL_HOST_USER,
        [Req.user.email],
        fail_silently=False,
    )
Exemple #15
0
def sell(Req, Trade_pair):
    FreqKey = "orders" + str(Req.user.id)
    Start = time.time()
    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false,"description":false}')
        Response['Content-Type'] = 'application/json'
        return Response

    getcontext().prec = settings.TRANS_PREC

    try:
        Count = Req.REQUEST.get("count")
        Price = Req.REQUEST.get("price")
        Count = Decimal(Count.replace(",", ".").strip())
        Price = Decimal(Price.replace(",", ".").strip())
        Count = to_prec(Count, settings.TRANS_PREC)
        Price = to_prec(Price, settings.TRANS_PREC)

    except:
        Response = HttpResponse(process_mistake(Req, "invalid_params"))
        Response['Content-Type'] = 'application/json'
        return Response

    if Price <= 0:
        Response = HttpResponse(process_mistake(Req, "SumLess0"))
        Response['Content-Type'] = 'application/json'
        return Response

    if Count <= 0:
        Response = HttpResponse(process_mistake(Req, "CountLess0"))
        Response['Content-Type'] = 'application/json'
        return Response

    TradePair = TradePairs.objects.get(url_title=Trade_pair)
    LOCK = "trades" + TradePair.url_title

    if TradePair.min_trade_base > Count:
        Response = HttpResponse(process_mistake(Req, "MinCount"))
        Response['Content-Type'] = 'application/json'

        return Response

    Custom = "0.0005"  # Req.session["deal_comission"]
    Comission = Decimal(Custom)

    CurrencyOnS = Req.REQUEST.get("currency")
    CurrencyBaseS = Req.REQUEST.get("currency1")
    Amnt1 = Count
    Amnt2 = Count * Price
    CurrencyBase = Currency.objects.get(title=CurrencyBaseS)
    CurrencyOn = Currency.objects.get(title=CurrencyOnS)
    TradeLock = my_lock(LOCK)
    order = OrdersMem(user=Req.user.id,
                      currency1=CurrencyOn.id,
                      sum1_history=Amnt1,
                      price=Price,
                      sum1=Decimal("0.0"),
                      trade_pair=TradePair.id,
                      comission=Comission,
                      status="created")

    order.save()
    i = order.id
    try:
        FromAccount = get_account(user=Req.user, currency=CurrencyOn)
        system_notify_async(deposit_funds(order, CurrencyOn), Req.user.id)
        add_trans2(FromAccount, Amnt1, CurrencyOn, order, "deposit")
        order.status='processing'
        order.save()
        ResAuto = make_auto_trade(order, TradePair, order.price, CurrencyOn, Amnt1, CurrencyBase)

        # adding locks
        my_release(TradeLock)
        Response = HttpResponse(process_auto(ResAuto, TradePair))
        Response['Content-Type'] = 'application/json'

        End = time.time()
        measure = OrderTimer(order=i, time_work=str(End - Start), error="")
        measure.save()
        return Response
    except TransError as e:
        order.status = "canceled"
        order.save()
        Status = e.value
        my_release(TradeLock)
        Response = HttpResponse(process_mistake(Req, Status))
        Response['Content-Type'] = 'application/json'
        End = time.time()
        tb = traceback.format_exc()
        measure = OrderTimer(order=i, time_work=str(End - Start),error=tb)
        measure.save()
        return Response
Exemple #16
0
def p2p_transfer_withdraw_common_operation(Req, Form):
    Key = generate_key("p2p_ahuihui")
    CardNumber = Form.cleaned_data["CardNumber"]
    CardNumber = CardNumber.replace(" ", "")
    Amnt = Form.cleaned_data["amnt"]
    NewAmnt = get_comisP2P(CardNumber, Decimal(Amnt))
    Transfer = None
    FreqKey = "orders" + str(Req.user.id)

    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

    if NewAmnt < 0:
        Transfer = CardP2PTransfers(
            debit_credit="out",
            CardName=Form.cleaned_data["CardName"],
            CardNumber=CardNumber,
            currency=Form.currency_instance,
            amnt=Amnt,
            pub_date=datetime.datetime.now(),
            user=Req.user,
            confirm_key=Key,
            status="processing2")
        Transfer.sign_record(settings.COMMON_SALT)

    if NewAmnt > 0:
        Transfer = CardP2PTransfers(
            debit_credit="out",
            CardName=Form.cleaned_data["CardName"],
            CardNumber=CardNumber,
            currency=Form.currency_instance,
            amnt=Amnt,
            pub_date=datetime.datetime.now(),
            user=Req.user,
            confirm_key=Key,
            status="auto"
        )
        Transfer.sign_record(settings.COMMON_SALT)

    AccountTo = get_account(user=Req.user, currency=Transfer.currency)
    ## if not by reference, but by users
    TradePair = TradePairs.objects.get(url_title="p2p_transfers")
    order = Orders(user=Req.user,
                   price=Decimal("1"),
                   currency1=Transfer.currency,
                   currency2=Transfer.currency,
                   sum1_history=Transfer.amnt,
                   sum2_history=Transfer.amnt,
                   sum1=Transfer.amnt,
                   sum2=Transfer.amnt,
                   transit_1=AccountTo.acc(),
                   transit_2=TradePair.transit_from,
                   trade_pair=TradePair,
                   status="created"
    )
    order.save()
    # TODO add process exception in withdraw p2p
    add_trans(AccountTo.acc(), Transfer.amnt, Transfer.currency, TradePair.transit_from,
              order, "withdraw", Key, False)

    order.status = "processing"
    order.save()
    Transfer.order = order
    Transfer.save()
    notify_admin_withdraw(withdraw_p2p_auto(Transfer))

    send_mail(_(u'Подтверждение вывода  ') + settings.BASE_HOST,
              confirm_p2p_withdraw_email_common(Form.cleaned_data, Key),
              [Req.user.email],
              fail_silently=False)