Exemplo n.º 1
1
    def handle(self, *args, **options):
        from sdk.liqpay import liqpay

        for DebCred in LiqPayTrans.objects.filter(status='processing', debit_credit='in'):
            order = DebCred.order
            OrderId = order.id
            d = liqpay("ru", "UAH")
            Dict = d.api("payment/status", {"version": "2", "order_id": str(OrderId)})
            print Dict
            if Dict["status"] == "success":
                if order.status != "processing":
                    DebCred.status = 'canceled'
                    DebCred.save()
                    continue
                order.status = "processing2"
                order.save()
                OutOrderId = Dict["liqpay_order_id"]
                from main.models import check_holds

                check_holds(order)
                add_trans(order.transit_1, order.sum1, d.currency,
                          order.transit_2, order,
                          "payin", OutOrderId, False)

                #hack if privat is wrong
                Comission = Decimal(Dict["receiver_commission"])
                Phone = Dict['sender_phone']
                Desc = Dict['description']
                Signature = Dict['liqpay_order_id']
                Amount = Dict['amount']
                add_trans(order.transit_2, Comission, d.currency,
                          order.transit_1, order,
                          "comission", OutOrderId, False)

                DebCred.status = 'processed'
                DebCred.save()
                order.status = "processed"
                order.save()
                #notify_email(order.user, "deposit_notify", DebCred )
        else:
            DebCred.status = 'canceled'
            DebCred.save()
Exemplo n.º 2
0
def __inner_remove_order(Order, User):
    Order2Remove  = Orders.objects.get(user = User, id = int(Order), status="processing" )
    Title =  Order2Remove.trade_pair.url_title
    LOCK = "trades" + Title
    TradeLock = my_lock(LOCK)

    try :
       Order2Remove.status = "canceled"
       Order2Remove.save()
       Account = Accounts.objects.get(user = User, currency = Order2Remove.currency1)
       add_trans(Order2Remove.transit_1, 
                 Order2Remove.sum1, 
                 Order2Remove.currency1,
                 Account,
                 Order2Remove,
                 "order_cancel")  
       cache = caching()
       
       
       cache.delete_many(["buy_list_" + Title, 
                          "sell_list_" + Title,
                          "balance_"  + str(User.id),
                          'client_orders_' + str(User.id) + "_" + Title])
       
       my_release(TradeLock)
       return True          
    except:

       my_release(TradeLock)
       return False
Exemplo n.º 3
0
def confirm_withdraw_p2p(Req, S, PrivateKey):

    Transfer = CardP2PTransfers.objects.get(user=Req.user, confirm_key=S, status="created")

    IsCancel = Req.REQUEST.get("do", None)
    if (
        Transfer.status == "processing" or Transfer.status == "auto" or Transfer.status == "created"
    ) and IsCancel is not None:
        Transfer.status = "order_cancel"
        Transfer.save()
        order = Transfer.order
        order.status = "order_cancel"
        order.save()
        add_trans(order.transit_2, Transfer.amnt, Transfer.currency, order.transit_1, order, "order_cancel", S, True)

        t = loader.get_template("simple_msg.html")
        Dict = {}
        Dict["title"] = settings.withdraw_cancel
        Dict["simple_msg"] = settings.withdraw_msg_cancel
        caching().delete("balance_" + str(Req.user.id))
        return tmpl_context(Req, t, Dict)

    if Transfer.status != "created":
        raise TransError("hacker " + Req.user.username)

    ##add trans may be there
    Transfer.status = "processing"
    Transfer.sign_record(PrivateKey)
    Transfer.save()
    t = loader.get_template("ajax_simple_msg.html")
    Dict = {}
    Dict["title"] = settings.withdraw_ok
    Dict["simple_msg"] = settings.withdraw_msg_ok
    notify_admin_withdraw(withdraw_p2p(Transfer))
    return tmpl_context(Req, t, Dict)
Exemplo n.º 4
0
def confirm_withdraw_emoney(Req, S, PrivateKey):
    Transfer = TransOut.objects.get(user=Req.user,
                                    confirm_key=S,
                                    status='created')

    IsCancel = Req.REQUEST.get("do", None)
    if Transfer.status == "created" and IsCancel is not None:
        Transfer.status = "canceled"
        Transfer.save()
        order = Transfer.order
        order.status = "canceled"
        order.save()
        add_trans(order.transit_2, Transfer.amnt, Transfer.currency, order.transit_1,
                  order, "canceled", S, False)

        t = loader.get_template("simple_msg.html")
        Dict = {}
        Dict["title"] = settings.withdraw_cancel
        Dict["simple_msg"] = settings.withdraw_msg_cancel
        caching().delete("balance_" + str(Req.user.id))
        return tmpl_context(Req, t, Dict)

    if Transfer.status != "created":
        raise TransError("hacker " + Req.user.username)
        ##add trans may be there
    Transfer.status = "processing"
    Transfer.sign_record(PrivateKey)
    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)
Exemplo n.º 5
0
def __inner_remove_order(Order, User):
    Order2Remove = Orders.objects.get(user=User,
                                      id=int(Order),
                                      status="processing")
    Title = Order2Remove.trade_pair.url_title
    LOCK = "trades" + Title
    TradeLock = my_lock(LOCK)

    try:
        Order2Remove.status = "canceled"
        Order2Remove.save()
        Account = Accounts.objects.get(user=User,
                                       currency=Order2Remove.currency1)
        add_trans(Order2Remove.transit_1, Order2Remove.sum1,
                  Order2Remove.currency1, Account, Order2Remove,
                  "order_cancel")
        cache = caching()

        cache.delete_many([
            "buy_list_" + Title, "sell_list_" + Title,
            "balance_" + str(User.id),
            'client_orders_' + str(User.id) + "_" + Title
        ])

        my_release(TradeLock)
        return True
    except:

        my_release(TradeLock)
        return False
Exemplo n.º 6
0
    def get(self, order_id):
        start = time.time()
        order = Orders.objects.get(id=order_id, status="processing")
        s = TornadoServer.get_instance()
        try:
            with transaction.atomic():

                add_trans(order.transit_1, order.sum1,
                          order.currency1, order.transit_2, order, "withdraw",
                          str(order), False)

                order.status = "processed"
                order.save()
                try:
                    i = order.user_id
                    s.keys4delete.append("balance_" + str(i))
                    print "got trans from %i" % i
                except:
                    traceback.print_exc()
                    print "problem in working with cache"
            end = time.time()
            print "add trans payin timing"
            print end - start
            self.write({"status": True, "time": end - start})
        except:
            traceback.print_exc()
            order.status = "core_error"
            print "add trans withdraw timing"
            end = time.time()
            print end - start
            order.save()
            self.set_status(500)
Exemplo n.º 7
0
def return_rest2acc(Order, AccumSumToSell):
           Account2Sell  = get_account(Order.user, Order.currency1)
           add_trans(Order.transit_1, 
           AccumSumToSell, 
           Order.currency1,
           Account2Sell,
           Order,
           "deal_return")
           system_notify( order_return_unused( Order, AccumSumToSell ), Order.user )  
Exemplo n.º 8
0
def cancel_trans(obj):
    add_trans(obj.user2,
              obj.amnt,
              obj.currency,
              obj.user1,
              None,
              "canceled",
              obj.id,
              False)
Exemplo n.º 9
0
def return_rest2acc(Order, AccumSumToSell):
           Account2Sell  = get_account(Order.user, Order.currency1)
           add_trans(Order.transit_1, 
           AccumSumToSell, 
           Order.currency1,
           Account2Sell,
           Order,
           "deal_return")
           system_notify( order_return_unused( Order, AccumSumToSell ), Order.user )  
Exemplo n.º 10
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)
Exemplo n.º 11
0
def process_in2(OrderId, Comis, FactAmnt):
    order = Orders.objects.get(id=int(OrderId), status="processing2")

    add_trans(order.transit_1, FactAmnt, order.currency1, order.transit_2, order, "payin", None, False)
    if Comis > 0:
        add_trans(order.transit_2, Comis, order.currency1, order.transit_1, order, "comission", None, False)

    order.status = "processed"
    order.save()
    return True
Exemplo n.º 12
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,
    )
Exemplo n.º 13
0
 def handle(self, *args, **options):
     ##hardcode UAH income
     CurIns = Currency.objects.get(id = 1)
     AccountFrom = Accounts.objects.get(user = PARTNERSHIP, 
                                          currency = CurIns)
     for icome in Partnership.objects.filter(status = "processing"):
         AccountTo = Accounts.objects.get(user = income.user, 
                                          currency = CurIns)
         income.status="processed"
         income.save()
         add_trans( AccountFrom, income.income, CurIns, AccountTo, None, "payin", str(income.id), False)
         
Exemplo n.º 14
0
def process_in2(OrderId, Comis, FactAmnt):
    order = Orders.objects.get(id=int(OrderId), status='processing2')

    add_trans(order.transit_1, FactAmnt, order.currency1, order.transit_2,
              order, "payin", None, False)
    if Comis > 0:
        add_trans(order.transit_2, Comis, order.currency1, order.transit_1,
                  order, "comission", None, False)

    order.status = "processed"
    order.save()
    return True
Exemplo n.º 15
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)
Exemplo n.º 16
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)
Exemplo n.º 17
0
def process_perfect_in2(OrderId, Comission):   
                     order = Orders.objects.get(id = int(OrderId), status='processing2' )            
                     
                     add_trans( order.transit_1 , order.sum1, order.currency1,
                                order.transit_2, order, 
                                "payin", None , False)
                     if Comission>0:       
                        add_trans(order.transit_2 , Comission, order.currency1,
                                  order.transit_1,  order, 
                                  "comission", None, False)

                     order.status = "processed"
                     order.save()
                     return True
Exemplo n.º 18
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)
Exemplo n.º 19
0
def process_deal(deal, t, cache):
    s = TornadoServer.get_instance()
    print "process order deal %i" % deal.id
    order = None
    try:
        order = deal.order2
    except:
        print "i cant find order %i" % deal.order2_id
        deal.status = "core_error"
        deal.save()
        return
    try:
        Title = order.trade_pair.url_title
        s.keys4delete.append("balance_" + str(order.user_id))
        s.keys4delete.append("sell_list_" + Title)
        s.keys4delete.append("deals_list_" + Title)

        Account = Accounts.objects.get(user_id=order.user_id,
                                       currency_id=order.currency2_id)
        add_trans(order.transit_2, deal.amnt, order.currency2, Account, order,
                  "deal", str(deal.order1_id))

        add_trans(Account, deal.amnt * Decimal("0.0005"), order.currency2,
                  order.transit_2, order, "comission", str(deal.order1_id))

        if order.sum1 / order.sum1_history < 0.0001:
            order.status = 'processed'
            order.save()
        deal.trade_pair_id = order.trade_pair.id
        deal.user2_id = order.user_id
        deal.user1_id = deal.order1.user_id
        deal.status = "processed"
        deal.save()
    except:
        deal.status = "core_error"
        deal.save()

    delete_user_state(order.user_id, cache)
    try:
        session = cache.get("user_" + str(order.user_id))
        if not session is None:
            s.keys4delete.append("balance_" + session)
    #    cache.delete("session_"+str(order.user_id), t, 60000)
    except:
        traceback.print_exc()
Exemplo n.º 20
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)
Exemplo n.º 21
0
    def get(self, order_id):
        start = time.time()
        order = Orders.objects.get(id=order_id, status="created")
        s = TornadoServer.get_instance()
        try:
            with transaction.atomic():

                FromAccount = Accounts.objects.get(user=order.user,
                                                   currency=order.currency1)
                add_trans(FromAccount, order.sum1_history, order.currency1,
                          order.transit_1, order, "deposit")
                order.status = "processing"
                order.save()
                cache = caching()
                try:
                    i = order.user_id

                    s.keys4delete.append("balance_" + str(i))
                    delete_user_state(i, start)
                    print "got trans from %i" % i
                    Title = order.trade_pair.url_title
                    CachedKey1 = 'client_orders_' + str(i) + "_" + Title
                    CachedKey2 = 'balance_' + str(i)
                    s.keys4delete.append(CachedKey1)
                    s.keys4delete.append(CachedKey2)
                    s.keys4delete.append("buy_list_" + Title)
                    s.keys4delete.append("sell_list_" + Title)
                except:
                    traceback.print_exc()
                    print "problem in working with cache"
            end = time.time()
            print "add trans timing"
            print end - start

            self.write({"status": True, "time": end - start})
        except:
            traceback.print_exc()
            order.status = "core_error"
            print "add trans timing"
            end = time.time()
            print end - start
            order.save()
            self.set_status(500)
Exemplo n.º 22
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)
Exemplo n.º 23
0
def process_out(CurrencyTitle):

        Crypton = CryptoAccount(CurrencyTitle, "trade_stock")
        user_system =   User.objects.get(id = 1)
        CurrencyInstance = Currency.objects.get(title = CurrencyTitle)
        if not 	check_crypto_currency(CurrencyInstance) :
            raise LockBusyException("global check crypto currency has raised")
	
#sys.exit(0)
        getcontext().prec = crypton.settings.TRANS_PREC
        for obj in CryptoTransfers.objects.filter(status="processing", 
                                                  debit_credit ="out",
                                                  currency = CurrencyInstance):
                
               print "sending funds of %s to %s amount %s"  % (obj.user.username,  obj.account, obj.amnt)
               
               
                   
               
               
               obj.status = "processed"
               obj.user_accomplished = user_system               
               obj.save()
               obj.order.status = "processed"
               obj.order.save() 
               Txid = None
               try:
                    InnerAccount = Accounts.objects.get( reference = obj.account )
                    Txid = "Move between accounts"
                    add_trans( obj.order.transit_1 , obj.order.sum1, obj.order.currency1,
                                InnerAccount, order, 
                                "payin", None )
                    
               except Accounts.DoesNotExist:
                    Txid = Crypton.sendto(obj.account, float(obj.amnt))
                    
               print "txid %s" % (Txid) 
                                     
               obj.crypto_txid = Txid
               obj.save()
               notify_email(obj.user, "withdraw_notify", obj)
Exemplo n.º 24
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)
Exemplo n.º 25
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)
Exemplo n.º 26
0
def __inner_remove_order(Order2Remove):
    if Order2Remove.trade_pair.status != 'processing':
        return False
    s = TornadoServer.get_instance()
    start = time.time()
    count_up = Orders.objects.filter(
        id=Order2Remove.id, status="canceling").update(status='canceled')
    if count_up < 1:
        return False
    Title = Order2Remove.trade_pair.url_title
    i = Order2Remove.user.id
    delete_user_state(i, start)
    CachedKey1 = 'client_orders_' + str(i) + "_" + Title
    CachedKey2 = 'balance_' + str(i)
    s.keys4delete.append(CachedKey1)
    s.keys4delete.append(CachedKey2)
    s.keys4delete.append("buy_list_" + Title)
    s.keys4delete.append("sell_list_" + Title)

    Account = Accounts.objects.get(user=Order2Remove.user,
                                   currency=Order2Remove.currency1)
    add_trans(Order2Remove.transit_1, Order2Remove.sum1,
              Order2Remove.currency1, Account, Order2Remove, "order_cancel")
Exemplo n.º 27
0
def process_order(AccountBuyer, ComisBuy, AccumSum, AccumSumToSell, item,
                  Order, TradePair, ComisSell):
    ##TODO move to settings for every user
    ComisPercentSeller = item.comission
    ComisPercentBuyer = Order.comission

    if item.sum1 > AccumSum:
        ## a danger of low overflow
        Diff = AccumSum / item.sum1
        TransSum = item.sum2 * Diff
        #TransSum = AccumSumToSell
        AccountSeller = get_account(item.user, item.currency2)
        add_trans(item.transit_2,
                  TransSum,
                  item.currency2,
                  AccountSeller,
                  item,
                  "deal",
                  Out_order_id=Order.id)

        add_trans(AccountSeller,
                  TransSum * ComisPercentSeller,
                  item.currency2,
                  ComisSell,
                  item,
                  "comission",
                  Out_order_id=Order.id)

        add_trans(item.transit_1,
                  AccumSum,
                  item.currency1,
                  AccountBuyer,
                  item,
                  "deal",
                  Out_order_id=Order.id)

        add_trans(AccountBuyer,
                  AccumSum * ComisPercentBuyer,
                  item.currency1,
                  ComisBuy,
                  Order,
                  "comission",
                  Out_order_id=Order.id)

        ##comission
        item.sum1 = item.sum1 - AccumSum
        item.sum2 = item.sum2 - TransSum
        item.save()
        try:
            system_notify(
                order_description_sell(AccumSum, TransSum, item, TradePair),
                AccountSeller.user)
            system_notify(
                order_description_buy(TransSum, AccumSum, Order, item,
                                      TradePair), AccountBuyer.user)
        except:
            pass

        return (0, AccumSumToSell - TransSum)

    if item.sum1 <= AccumSum:

        TransSum = item.sum2
        NotifySum = item.sum1
        AccountSeller = get_account(item.user, item.currency2)
        add_trans(item.transit_2,
                  TransSum,
                  item.currency2,
                  AccountSeller,
                  item,
                  "deal",
                  Out_order_id=Order.id)

        add_trans(AccountSeller,
                  TransSum * ComisPercentSeller,
                  item.currency2,
                  ComisSell,
                  item,
                  "comission",
                  Out_order_id=Order.id)

        add_trans(item.transit_1,
                  NotifySum,
                  item.currency1,
                  AccountBuyer,
                  item,
                  "deal",
                  Out_order_id=Order.id)

        add_trans(AccountBuyer,
                  NotifySum * ComisPercentBuyer,
                  item.currency1,
                  ComisBuy,
                  Order,
                  "comission",
                  Out_order_id=Order.id)

        ##comission
        item.status = "processed"
        item.sum1 = 0
        item.sum2 = 0
        item.save()

        try:
            system_notify(
                order_description_sell(NotifySum, TransSum, item, TradePair),
                AccountSeller.user)
            system_notify(
                order_description_buy(TransSum, NotifySum, Order, item,
                                      TradePair), AccountBuyer.user)
            system_notify(order_finish(item), AccountSeller.user)
        except:
            pass

        return (AccumSum - NotifySum, AccumSumToSell - TransSum)
Exemplo n.º 28
0
    def api_callback_pay(self, Params):
           PublicKey = Params["public_key"] 
           Amount =  Params["amount"] 
           CurrencyStr = Params["currency"] 
           Desc = Params["description"]
           Type = Params["type"]
           OrderId = Params["order_id"]
           Status = Params["status"]
           OutOrderId = Params["transaction_id"]
           Phone = Params["sender_phone"]
           Signature = Params["signature"]
           Comission = Decimal(Params["receiver_commission"])
           m = hashlib.sha1(self.__private_key + 
                         Amount +
                         CurrencyStr  +
                         self.__public_key +
                         OrderId +
                         self.__type +
                         self.__description +
                         Status +
                         OutOrderId +
                         Phone
                         )
           
           signature = b64encode( m.digest() )       
           if signature != Signature: 
                    raise TransError("Invalid Signature")
             
           if Status == "failure":
                     order = Orders.objects.get( id = int(OrderId) )
                     order.status = "order_cancel"
                     order.save()
                     Response =  HttpResponse( json.JSONEncoder().encode({"status":True,"signature":True}) )
                     Response['Content-Type'] = 'application/json'
                     return Response
             
           if Status == "wait_secure":
                     order = Orders.objects.get( id = int(OrderId), status="created" )
                     order.status = "wait_secure"
                     order.save()
                     Response =  HttpResponse( json.JSONEncoder().encode({"status":True,"signature":True}) )
                     Response['Content-Type'] = 'application/json'
                     return Response
           ##TODO add system message  
           if Status == "success":
                     order = Orders.objects.get(id = int(OrderId) )
                     if order.status !="created" and order.status !="wait_secure":
                             raise TransError("Invalid order")
                     order.status="processing"
                     order.save()
                     from main.models import check_holds
                     check_holds(order)
                     DebCred =   LiqPayTrans(   phone = Phone,
                                                description = Desc,
                                                  #pib = ,
                                                currency = self.__currency,
                                                amnt = Decimal(Amount) ,
                                                user = order.user,
                                                pub_date = datetime.now(),
                                                comission = self.__comis,
                                                user_accomplished_id =  1,
                                                status = "processed",
                                                debit_credit = "in",
                                                confirm_key = Signature,
                                                order = order
                                            )
                     DebCred.sign_record(self.__private_key)
                     DebCred.save()
                     add_trans(order.transit_1 , order.sum1, self.__currency,
                               order.transit_2, order,
                               "payin", DebCred.id, False)
                     
                     #hack if privat is wrong  
                     HackComis = order.sum1 * self.__comis
                     if Comission < HackComis:
                         Comission = HackComis

                     add_trans( order.transit_2 , Comission, self.__currency,
                                order.transit_1,  order, 
                                "comission", OutOrderId, False)


                     order.status = "processed"
                     order.save()
                     notify_email(order.user, "deposit_notify", DebCred ) 
                     Response =  HttpResponse( json.JSONEncoder().encode({"status":True,"signature":True}) )
                     Response['Content-Type'] = 'application/json'
                     return Response

           if Status == "sandbox":
                     raise TransError("hacker ")
                     order = Orders.objects.get(id = int(OrderId), status = "created")
                     order.status="processing"
                     order.save()
                     check_holds(order)

                     add_trans(order.transit_1, order.sum1, self.__currency,
                               order.transit_2, order, "payin", OutOrderId, False )
                     
                     
                     #Comission = order.sum1 * self.__comis
                     add_trans( order.transit_2, Comission , self.__currency,
                                order.transit_1,  order, 
                                "comission", OutOrderId, False)
                     DebCred =   LiqPayTrans(
                                                  phone = Phone,
                                                  description = Desc, 
                                                  currency = self.__currency, 
                                                  amnt = Decimal(Amount) , 
                                                  user = order.user ,
						                          pub_date = datetime.now(),
                                                  comission = self.__comis,
                                                  user_accomplished_id =  1,
                                                  status = "processed",
                                                  debit_credit = "in",
                                                  confirm_key = Signature,
                                                  order = order
                                                  
                                            )
                     DebCred.save()
                     order.status = "processed"
                     order.save()
                     Response =  HttpResponse( json.JSONEncoder().encode({"status":True,"signature":True}) )
                     Response['Content-Type'] = 'application/json'
                     return Response
Exemplo n.º 29
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,
    )
Exemplo n.º 30
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)
Exemplo n.º 31
0
def process_order(AccountBuyer, ComisBuy, AccumSum, AccumSumToSell,  item, Order, TradePair, ComisSell ):
        ##TODO move to settings for every user 
        ComisPercentSeller =  item.comission
        ComisPercentBuyer =  Order.comission

        if item.sum1 > AccumSum :
            ## a danger of low overflow    
            Diff =  AccumSum / item.sum1
            TransSum   = item.sum2*Diff 
            #TransSum = AccumSumToSell
            AccountSeller = get_account(item.user, item.currency2)
            add_trans(item.transit_2,
                      TransSum,
                      item.currency2,
                      AccountSeller,
                      item,
                      "deal",
                      Out_order_id = Order.id
                      )          
            
            add_trans(AccountSeller ,
                      TransSum*ComisPercentSeller,
                      item.currency2,
                      ComisSell,
                      item,
                      "comission",
                      Out_order_id = Order.id
                      )
            
                
            add_trans(item.transit_1,
                      AccumSum,
                      item.currency1,
                      AccountBuyer,
                      item,
                      "deal",
                      Out_order_id = Order.id
                      )
           
            add_trans(AccountBuyer,
                      AccumSum*ComisPercentBuyer,
                      item.currency1,
                      ComisBuy,
                      Order,
                      "comission",
                      Out_order_id = Order.id)           
            
            ##comission
            item.sum1  = item.sum1 - AccumSum
            item.sum2  = item.sum2 - TransSum
            item.save()  
            try:
                system_notify(order_description_sell(AccumSum, TransSum, item, TradePair), AccountSeller.user)  
                system_notify(order_description_buy(TransSum, AccumSum,  Order, item,  TradePair), AccountBuyer.user)
            except :
                pass

            return (0, AccumSumToSell - TransSum )
    
        if item.sum1 <= AccumSum :            
                
            TransSum   = item.sum2  
            NotifySum = item.sum1    
            AccountSeller = get_account(item.user, item.currency2)
            add_trans(item.transit_2,
                      TransSum,
                      item.currency2,
                      AccountSeller,
                      item,
                      "deal",
                      Out_order_id = Order.id)
            
            
            add_trans(AccountSeller ,
                      TransSum*ComisPercentSeller,
                      item.currency2,
                      ComisSell,
                      item,
                      "comission",
                      Out_order_id = Order.id)  
            

            add_trans(item.transit_1,
                      NotifySum,
                      item.currency1,
                      AccountBuyer,
                      item,
                     "deal",
                     Out_order_id = Order.id)
            
            add_trans(AccountBuyer,
                      NotifySum*ComisPercentBuyer,
                      item.currency1,
                      ComisBuy,
                      Order,
                     "comission",
                     Out_order_id = Order.id)
          

            ##comission            
            item.status = "processed"
            item.sum1  = 0
            item.sum2  = 0
            item.save()  
            
            try :
                system_notify(order_description_sell(NotifySum, TransSum, item, TradePair), AccountSeller.user)  
                system_notify(order_description_buy(TransSum,  NotifySum,  Order, item, TradePair), AccountBuyer.user)            
                system_notify(order_finish(item), AccountSeller.user)  
            except :
                pass
                     
            return  (AccumSum - NotifySum, AccumSumToSell - TransSum )                                 
Exemplo n.º 32
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 
Exemplo n.º 33
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
Exemplo n.º 34
0
def buy(Req, Trade_pair):
           
                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) 
              
                if TradePair.min_trade_base > Count:
                        Response =   HttpResponse(process_mistake(Req, "MinCount"))
                        Response['Content-Type'] = 'application/json'
                        return Response
                
                
                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 )
                
                
                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
                                )
                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))

                        Response['Content-Type'] = 'application/json'
                        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'
                        return Response