Example #1
0
def index():

    #common.page_stats(db, response['view'])
    #print request.args

    response.title = T(
        "Обмен биткоинов криптовалют на электронные деньги Яндекс")
    response.subtitle = T('Dogecoin Litecoin NEXT')

    if False and session.date_log:
        d_diff = datetime.datetime.today() - session.date_log
        if d_diff.seconds > 1200:
            session.date_log = None
            session.YD_acc = '-'

    acc = session.toDlrAcc
    title = acc and T(
        'Ваш кошелек') + ':' + acc[:3] + '***' + acc[-3:] or response.title
    subtitle = session.date_log and (T('Дата посещения %s') %
                                     session.date_log) or response.subtitle

    try:
        session.date_log = request.now
    except:
        print 'to_wallet session error .date_log:', type(
            request.now), request.now

    # берем только тех кто за рубли и для этого дела
    # причем по 1 аккаунту на диллера тут нужно - для писка
    # какой диллер вообще на кошельки принимает
    ed_name = None
    if request.vars:
        vn = 'ed'
        if vn in request.vars:
            ed_name = request.vars[vn]

    limit_bal, inp_dealers_tab = ed_common.get_edealers_for_to_wallet(
        db, deal, curr_out, ecurr_out_id, ed_name)

    if len(inp_dealers_tab) == 0:
        return err_dict(
            T('ОШИБКА: Нет доступных диллеров') +
            (ed_name and
             (' ' +
              T('или неправильно задано имя [%s] системы электронных денег!') %
              ed_name) or ''))

    inp_dealers = []
    for r in inp_dealers_tab:
        inp_dealers.append(
            [r[0], ('%s [%s], ' + T('доступно') + ' %s, %s...%s') % r[1]])

    from gluon.storage import Storage
    vars = Storage()
    if request.vars:
        vn = 'sum'
        if vn in request.vars:
            vars[vn] = test_vol(request.vars[vn])
        vn = 'acc'
        if vn in request.vars:
            acc = request.vars[vn]
            vars[vn] = acc
            if not ed_name:
                return err_dict(
                    T("ОШИБКА: Не задано имя системы электронных денег для данного кошелька %s! Пример ссылки: %s?ed=yandex&sum=1500&acc=423456780345"
                      ) % (acc, URL()), True)
        vn = 'mess'
        if 'mess' in request.vars:
            vars[vn] = request.vars[vn]

    h = CAT()
    dealer = None
    for rr in db_client.get_xcurrs_for_deal(db, 0, curr_out, deal, dealer):
        #print rr
        id = '%s' % rr['id']
        disabled = rr['expired']
        if disabled:
            memo = CAT(
                T('Курс не найден'), ', ',
                T('Когда курс будет получен платеж пройдёт автоматически'),
                '. ', T('Или попробуйте зайти позже'))
            _class = 'col sel_xcurrNRT'
        else:
            memo = CAT(
                SPAN(' ', T('по курсу'), (' %8g' % rr['price']), ' ',
                     T(' нужно оплатить около')), ' ',
                B(SPAN(_class='pay_vol')), ' ', rr['name'])
            _class = 'col sel_xcurrRTE'

        # пусть клики все равно будут
        onclick = '''
                      //$(this).css('z-index','0');
                      $('#tag%s').hide('fast');
                      $('#cvr%s').css('display','block'); // .css('z-index','10');
                      ajax('%s',['vol','acc','dealer'], 'tag%s');
                      ''' % (id, id, URL('get', args=[id]), id)
        #print rr
        h += DIV(
            DIV(
                DIV(
                    #T('Есть'), ': ', rr['bal_out'],' ',
                    IMG(_src=URL('static',
                                 'images/currs/' + rr['abbrev'] + '.png'),
                        _width=60,
                        __height=36,
                        _class='lst_icon',
                        _id='lst_icon' + id),
                    SPAN(rr['price'], _class='price hidden'),
                    SPAN(rr['abbrev'], _class='abbrev hidden'),
                    memo,
                    '. ',
                    SPAN(T('Всего было продаж:'), rr['used'], _class='small'),
                    _onclick=onclick if onclick else '',
                    _id='btn%s' % id,
                    _class=_class,
                ),
                DIV(TAG.i(_class='fa fa-spin fa-spinner right wait1'),
                    _id='cvr%s' % id,
                    _class='col sel_xcurrCVR'),
                _class='row sel_xcurr'),
            _class='container')
        h += DIV(_id='tag%s' % id, _class='blue-c')
    xcurrs_h = h

    _, reclams = recl.get(db, 2)

    #response.top_line = None

    return dict(
        title=title,
        subtitle=subtitle,
        acc=acc,
        inp_dealers=inp_dealers,
        limit_bal=limit_bal,
        # это для ограничения в поле ввода и пересчета в нем
        MIN=db_common.gMIN(deal, None),
        MAX=int(deal.MAX_pay or 2555),
        vars=vars,
        xcurrs_h=xcurrs_h,
        reclams=reclams)
Example #2
0
def index():
    #if not IS_LOCAL:
    #    redirect(URL('ipay','more','to_pay',args=request.args))

    #common.page_stats(db, response['view'])

    if len(request.args) == 0: redirect(URL('deal', 'index'))
    deal_id = request.args(0)
    if len(deal_id) > 10 or not deal_id.isdigit():
        redirect(URL('deal', 'index'))

    deal = db.deals[deal_id]
    if not deal:
        redirect(URL('deal', 'index'))

    deal.update_record(wants=deal.wants + 1)

    if not deal.used:
        redirect(URL('deal', 'index'))

    response.title = 'Платежи оплата биткоинами криптовалютой услуги %s' % deal.name

    client = db(db.clients.deal_id == deal.id).select().first()
    if client:
        # to_shop/index/2?order=12&user=eytu
        #redirect(URL('to_shop','index',args=[client.id], vars=request.vars))
        raise HTTP(200, T('ERROR: it is client "%s"') % client.email)

    vol = (deal.MIN_pay or 100) * 2
    dealer, dealer_acc, dealer_deal = ed_common.select_ed_acc(
        db, deal, ecurr_out, vol, True)
    if not dealer:
        raise HTTP(200, T('ERROR: not found dealer for "%s"') % deal.name)
    dealer_acc = ed_common.sel_acc_max_for_balance(db,
                                                   dealer,
                                                   ecurr_out,
                                                   vol,
                                                   unlim=True)

    #print dealer.info
    dealer_info = dealer.info and json.loads(dealer.info)
    shops_url = dealer_info['shops_url']
    #MAX = deal.MAX_pay or 777
    MIN = db_common.gMIN(deal, dealer)

    if not response.vars: response.vars = {}

    if deal.url and len(deal.url) > 0:
        shops_url = deal.url
    else:
        shops_url = dealer_info['shops_url'] + "%s" % dealer_deal.scid
    deal_img = make_img(deal, dealer_info, shops_url)

    title=XML(XML(T("Задайте параметры платежа для ") + '<BR>') + XML( deal_img or '' ) + ' ' +\
            XML( A(deal.name, _href=shops_url, _target="_blank")))
    title = XML(
        XML(deal_img or '') + ' <b>' + deal.name + '</b> ' +
        'оплата биткоинами и криптовалютой')
    deal_cat = db.deals_cat[deal.cat_id]
    subtitle = XML(
        'Другие услуги вида %s' %
        A(deal_cat.name, _href=URL('deal', 'index', args=[deal_cat.id])))

    response.vars['s_url'] = XML(A(T('тут'), _href=shops_url,
                                   _target="_blank"))
    response.vars['shops_url'] = shops_url

    acc_pars = None
    if dealer_deal.grab_form:
        # тут тырим форму с сайта яндекса напрямую
        #scid, name, img, form = ed_form.load_YD(...)
        response.vars['grab_form'] = ed_form.load_YD(shops_url,
                                                     URL('more', 'pay'))
        #print response.vars['grab_form']

    else:
        acc_pars = []
        ajax_vars = []
        if dealer_deal.p2p:
            if deal.template_ == '--':
                pay_pars_deal = []
                pay_pars_dealer = []
            else:
                pay_pars_deal = ed_common.PAY_PARS_P2P
                pay_pars_dealer = ed_YD.PAY_PARS_P2P
        else:
            pay_pars_deal = deal.template_ and json.loads(
                deal.template_) or ed_common.PAY_PARS
            pay_pars_dealer = dealer_deal.template_ and json.loads(
                dealer_deal.template_) or ed_YD.PAY_PARS
            #print dealer_deal.template_, json.loads(dealer_deal.template_)
        #print dealer_deal
        #print pay_pars_deal
        #print pay_pars_dealer
        calcs = dealer_deal.calcs_ or {}
        for p in pay_pars_deal:
            read_only = None
            if 'calc' in p: continue
            if type(p) == type([]): continue

            #print p
            p_n_name = p.get('n')
            p_t = p_n_name and pay_pars_dealer.get(p_n_name)
            def_val = subsel_parent = None
            add_pars = {}
            calc2 = calcs.get(p_n_name)
            #print 'calc2', calc2
            if calc2 != None and type(calc2) not in [
                    type(dict()), type([]), type({})
            ]:
                # тут простое вычисление - прпустим
                continue
            if calc2:
                # это поле вычисляется автоматически
                # или есть зависимые от него поля
                subsel_name = calc2.get('subsel')
                subsel_parent = calc2.get('parent')
                if subsel_name:
                    # это поле главное и у него есть подчиненное поле
                    add_pars[
                        '_onChange'] = 'ajax("../subsel_callback", ["%s", "deal_id", "dealer_deal_id"], "%s");' % (
                            p_n_name, 'div_' + subsel_name)
                    #_onChange="ajax('selsub2_callback', ['%s'], '%s');" % (sel1_name, sel2_div_name),
                if subsel_parent:
                    add_pars['_disabled'] = 'disabled'
                if not subsel_name and not subsel_parent:
                    # это поле обычное вычисляемое -- пропустим
                    continue

            # если параметры передаются как параметры после ?
            def_val = request.vars.get(p_n_name)
            if def_val:
                read_only = True

            sel = p_t and p_t.get('sel')
            lab_ = p.get('l')
            tip_ = p.get('m')
            if sel:
                lab_ = LABEL(lab_ and T(lab_) or p_n_name)
                opt = []
                for item in sel:
                    #for (v, l) in item.iteritems():
                    opt.append(OPTION(item['label'], _value=item['value']))
                #print opt
                inp = SELECT(opt,
                             _name=p_n_name,
                             _id=p_n_name,
                             _type="text",
                             _class='field blue-c',
                             **add_pars)
            elif p_n_name:
                lab_ = LABEL(lab_ and T(lab_) or p_n_name)
                # если имя поля задано то поле покажем
                inp = INPUT(
                    _name=p_n_name,
                    _id=p_n_name,  # тут имя поля указываем для диллера
                    _placeholder=p.get('ph', ''),
                    _value=def_val
                    or session.vars and session.vars.get(p.get('n'))
                    or p.get('v'),
                    _readonly=read_only,
                    #_size=('ln' in p and p['ln'] or 5)+1,
                    _onblur='ln' in p and 'get_acc(this, %s, "%s");' %
                    (p['ln'] or 0, 'символов %s'),
                    requires=IS_NOT_EMPTY(),
                    _class='field blue-c',
                    **add_pars)
            elif lab_:
                acc_pars.append({
                    'l':
                    HR(_align="center",
                       _width="auto",
                       _size="3",
                       _color="#ffffff"),
                    'i':
                    ''
                })
                ##lab_ = LABEL(lab_ and T(lab_) or '')
                lab_ = LABEL(H5(T(lab_)))
                inp = ''
            elif tip_:
                lab_ = LABEL(
                    H4(
                        TAG.i(_class='fa fa-exclamation-triangle',
                              _style='color:yellow; font-size:1.5em;'), ' ',
                        tip_))
                inp = ''

            if subsel_parent:
                # это подчиненное поле - результат аякса
                # то вложем его внутрь
                inp = DIV(inp, _id='div_' + p_n_name)

            item = {
                'l': lab_,
                'i': inp,
            }
            info = p.get('i')
            if info:
                item['l'] += '*'
                item['m'] = XML(info)
            acc_pars.append(item)

            if p_n_name:
                ## для полей АЯКСа
                ## причем надо от УНИКОДЕ строки избавиться - поэтому %
                _sss = p_n_name.encode('ascii')
                ##print _sss, type(_sss)
                ajax_vars.append(_sss)

        #print i_d, request.args
        #if False and len(request.args)>i_d+1:
        #    # цена тоже задана
        #    volume_out = float(request.args[i_d+1])
        #    response.vars['vol_readonly'] = True

    response.vars['e_bal'], MAX = get_e_bal(deal, dealer, dealer_acc)
    volume_out = 377
    if request.vars:
        #print request.vars
        if 'mess' in request.vars:
            response.vars['shop_mess'] = request.vars['mess']
        if 'sum' in request.vars:
            volume_out = test_vol(request.vars['sum'], MIN, MAX)
            response.vars['vol_readonly'] = True
        session.vol = volume_out

    response.vars['deal_id'] = deal_id
    response.vars['dealer_deal_id'] = dealer_deal.id
    response.vars['MIN'] = MIN
    response.vars['MAX'] = MAX
    response.vars['volume_out'] = volume_out
    response.vars['not_gifted'] = deal.not_gifted

    #  except Exception as e:
    #    db.deal_errs.insert( deal_id = deal.id, dealer_id = dealer.id, err = '%s' % e)

    # поля для передачи по запросу АЯКСа
    ajax_vars.append('vol')
    ajax_vars = '%s' % ajax_vars
    h = CAT()
    for rr in db_client.get_xcurrs_for_deal(db, 0, curr_out, deal, dealer):
        #print row
        id = '%s' % rr['id']
        disabled = rr['expired']
        #bgc = 'gold'
        if disabled:
            memo = CAT(
                T('Курс не найден'), ', ',
                T('Когда курс будет получен платеж пройдёт автоматически'),
                '. ', T('Или попробуйте зайти позже'))
            _class = 'col sel_xcurrNRT'
        else:
            memo = CAT(
                SPAN(' ', T('по курсу'), (' %8g' % rr['price']), ' ',
                     T('нужно оплатить примерно')), ' ',
                B(SPAN(_class='pay_vol')), ' ', rr['name'])
            _class = 'col sel_xcurrRTE'

        # пусть клики все равно будут
        onclick = '''
                      //$(this).css('z-index','0');
                      $('#tag%s').hide('fast');
                      $('#cvr%s').css('display','block'); // .css('z-index','10');
                      ajax('%s',%s,'tag%s');
                      ''' % (id, id, URL('get', args=[id, deal_id
                                                      ]), ajax_vars, id)
        #print row
        h += DIV(
            DIV(
                DIV(
                    #T('Есть'), ': ', rr['bal_out'],' ',
                    IMG(_src=URL('static',
                                 'images/currs/' + rr['abbrev'] + '.png'),
                        _width=60,
                        __height=36,
                        _class='lst_icon',
                        _id='lst_icon' + id),
                    SPAN(rr['price'], _class='price hidden'),
                    SPAN(rr['abbrev'], _class='abbrev hidden'),
                    memo,
                    '. ',
                    SPAN(T('Всего было оплат:'), rr['used'], _class='small'),
                    _onclick=onclick if onclick else '',
                    #_style=style,
                    _id='btn%s' % id,
                    _class=_class,
                ),
                DIV(TAG.i(_class='fa fa-spin fa-spinner right wait1'),
                    _id='cvr%s' % id,
                    _class='col sel_xcurrCVR'),
                _class='row sel_xcurr'),
            _class='container')
        h += DIV(_id='tag%s' % id, _class='blue-c')
    xcurrs_h = h

    #response.top_line = None

    return dict(
        title=title,
        subtitle=subtitle,
        deal_name=deal.name,
        deal_info=deal.show_text,
        deal_icon=make_img(deal, dealer_info),
        MIN=MIN,
        MAX=MAX,  #reclams=reclams,
        pars=acc_pars,
        xcurrs_h=xcurrs_h)
Example #3
0
def index():

    response.title = T("Перевод криптоденег в электронные деньги")

    if session.visitor_date_log:
        d_diff = datetime.datetime.today() - session.visitor_date_log
        if d_diff.seconds > 1200:
            session.visitor_date_log = None
            session.visitor_wallet = '-'

    h = CAT()

    for ecurr_out in db(db.ecurrs).select():
        curr = db.currs[ecurr_out.curr_id]
        hh = CAT(
            H3(
                IMG(_src=URL('default', 'download', args=['db', curr.icon]),
                    _width=42,
                    _height=42,
                    _class='lst_icon',
                    _id='lst_icon%s' % id),
                curr.name,
                ' ',
                INPUT(_name=curr.abbrev, _value='123'),
            ))
        for r in db((db.dealers_accs.ecurr_id == ecurr_out.id)
                    & (db.dealers_accs.used == True)
                    & (db.dealers.id == db.dealers_accs.dealer_id)
                    & (db.dealers.used == True)
                    & (db.dealer_deals.dealer_id == db.dealers.id)
                    & (db.dealer_deals.deal_id == deal.id)).select(
                        groupby=db.dealers_accs.dealer_id):

            min = 10
            dealer_acc = ed_common.sel_acc_max(db, r.dealers, ecurr_out, 0,
                                               True)
            bal, max = get_e_bal(deal, r.dealers, dealer_acc)

            _id = r.dealers.id
            tag = 'tag%s' % _id
            url = URL('to_wallet2', 'go2', args=[curr.id, _id])
            st = 'display: table-cell; vertical-align: middle;'
            fee = curr.fee_out
            tax = r.dealer_deals.tax + curr.tax_out

            hh += DIV(
                u(
                    r.dealers.name,
                    #URL('to_wallet2', 'go1', args=[curr.id, r.dealers.id]),
                    None,
                    'col-sm-5',
                    onclick="$('#%s').text('%s');ajax('%s', ['%s'], '%s')" %
                    (tag, T('Working...'), url, curr.abbrev, tag)),
                DIV(T('Min / Max'),
                    ': ',
                    min,
                    ' / ',
                    max,
                    BR(),
                    T('Is:'),
                    ' ',
                    bal,
                    BR(),
                    T('Fee & Tax'),
                    ' - ',
                    fee,
                    ' & ',
                    tax,
                    '%',
                    _class='btn_mc col-sm-5'),
                _class='row')
            hh += DIV(_id=tag, _class='row')
        h += hh

    return dict(h=h)

    if len(dd) == 0:
        response.subtitle = T("ОШИБКА: Нет подходящих работников!")
        return dict(vars=None)

    ed_sel = SELECT(dd, value='1', _name='dealer')

    volume_out = float(100)
    pairs = db_client.get_xcurrs_for_deal(db, volume_out, curr_out, deal, None)

    vars = {
        'phone': session.visitor_wallet or None,
        #'mess' = request.args,
        'MIN': deal.MIN_pay or 3,
        'MAX': deal.MAX_pay or 1333,
        'ed_sel': ed_sel,
        'last_visit': session.visitor_date_log
    }
    wallet = None
    if request.vars:
        vn = 'sum'
        if vn in request.vars:
            vars[vn] = request.vars[vn]
        vn = 'wallet'
        if vn in request.vars:
            wallet = request.vars[vn]
            vars[vn] = wallet
            if not ed_name:
                response.subtitle = T(
                    "ОШИБКА: Не задано имя системы электронных денег для данного кошелька %s!"
                ) % wallet
                return dict(vars=None)

        vn = 'mess'
        if 'mess' in request.vars:
            vars[vn] = request.vars[vn]

    title1 = wallet and T('Оплата на %s') % ed_name or T('Ваш кошелек')
    wallet = wallet or session.visitor_wallet or None
    if wallet:
        response.title = title1 + ':' + wallet[:3] + '****' + wallet[-3:]

    #print request.args
    if len(request.args) > 0: response.flash = ERRS[request.args[0]]

    _, reclams = recl.get(db, 2)

    # тут балансы у разных диллеров vars['e_bal'] = get_e_bal(deal, dealer, dealer_acc)

    return dict(reclams=reclams, vars=vars, xcurrs_list=pairs)
Example #4
0
def sel():

    addr_out = None

    h = CAT(SCRIPT('''
        $('.btn_sel').removeClass('disabled');
        $('html, body').animate( { scrollTop: $('#sel').offset().top - $('#aside1').height() }, 500 );
      '''))
    try:
        curr_out_id = request.args(0)
        curr_out_id = curr_out_id and int(curr_out_id)
        curr_out = db.currs[ curr_out_id ]
        curr_out_name = curr_out.name
    except:
        return h+'error curr_id'

    deal_name = 'to COIN'
    deal = db(db.deals.name == deal_name).select().first()
    if deal:
        deal_id = deal.id
    else:
        curr_rub = db(db.currs.abbrev=='RUB').select().first()
        deal_id = db.deals.insert(name = deal_name, name2 = deal_name, fee_curr_id = curr_rub.id,
                used = False, fee = 1, MIN_pay = 0, MAX_pay = 0)
        deal = db.deals[ deal_id ]

    from gluon.storage import Storage
    vars = Storage()
    if request.vars:
        vn = 'vol'
        if vn in request.vars:
            vars[vn] = test_vol(request.vars[vn])
        vn = 'addr'
        if vn in request.vars:
            addr_out = request.vars[vn]
            vars[vn] = addr_out
    
    dealer = None
    for rr in db_client.get_xcurrs_for_deal(db, 0, curr_out, deal, dealer):
        if rr['id'] == curr_out.id: continue
        #print rr
        id = '%s' % rr['id']
        disabled = rr['expired']
        if disabled:
            memo = CAT(T('Курс не найден'),', ', T('Когда курс будет получен платеж пройдёт автоматически'), '. ', T('Или попробуйте зайти позже'))
            _class = 'col sel_xcurrNRT'
        else:
            memo = CAT(SPAN(' ', T('по курсу'),  (' %8g' % rr['price']), ' ', T(' нужно оплатить около')),' ',
                    B(SPAN(_class='pay_vol')), ' ', rr['name'])
            _class = 'col sel_xcurrRTE'

        # пусть клики все равно будут
        onclick='''
                      //$(this).css('z-index','0');
                      $('#tag%s').hide('fast');
                      $('#cvr%s').css('display','block'); // .css('z-index','10');
                      ajax('%s',['vol','addr','curr_out'], 'tag%s');
                      ''' % (id, id, URL('get', args=[deal_id, id]), id)
        #print rr
        h += DIV(
            DIV(
                DIV(
                    #T('Есть'), ': ', rr['bal_out'],' ',
                    IMG(_src=URL('static','images/currs/' + rr['abbrev'] + '.png'),
                      _width=60, __height=36, _class='lst_icon', _id='lst_icon' + id),
                    SPAN(rr['price'], _class='price hidden'),
                    SPAN(rr['abbrev'], _class='abbrev hidden'),
                    memo,
                    '. ', SPAN(T('Всего было продаж:'), rr['used'], _class='small'),
                    _onclick=onclick if onclick else '',
                    _id='btn%s' % id,
                    _class=_class,
                ),
              DIV(TAG.i(_class='fa fa-spin fa-spinner right wait1'),
                  _id='cvr%s' % id,
                  _class='col sel_xcurrCVR'),
              _class='row sel_xcurr'),
            _class='container')
        h += DIV(_id='tag%s' % id, _class='blue-c')

    _, reclams = recl.get(db,2)

    #response.top_line = None
    return dict(curr_out_id = curr_out_id, addr=addr_out,
                img_url = URL('static','images/currs/' +  curr_out.abbrev + '.png'),
                curr_out_name = curr_out_name,
                vars=vars,
                xcurrs_h=h, reclams=reclams)
Example #5
0
def index():

    #common.page_stats(db, response['view'])

    response.title = T("Пополнить биткоинами телефон")
    response.subtitle = T('Оплатить телефон биткоинами')

    if False and session.date_log:
        d_diff = datetime.datetime.today() - session.date_log
        if d_diff.seconds > 1200:
            session.date_log = None
            session.toPhone = None

    #print request.vars
    if request.vars:
        #print 'reset'
        vol = test_vol(request.vars.sum)
        session.vol = vol if vol else None
        phone = request.vars.phone
        phone = phone and valid_phone(phone)
        print phone
        if phone: session.toPhone = phone
    else:
        phone = session.toPhone

    ##print 'phone, session.phone:', phone, session.toPhone
    if phone and len(phone) == 10:
        phone = session.toPhone = '7' + phone
    title = phone and CAT(
        T('Ваш телефон') + ':' + phone[:3] + '***' + phone[-3:] + ' ',
        SPAN(response.title, _class='small')) or response.title
    subtitle = session.date_log and (T('Дата посещения %s') %
                                     session.date_log) or response.subtitle

    try:
        session.date_log = request.now
    except:
        print 'to_phone session error .date_log:', type(
            request.now), request.now

    h = CAT()
    hh = CAT(H1(response.title), response.subtitle and H3(response.subtitle)
             or '')
    h += DIV(hh, _class='container')

    phone_deal7 = phone
    if phone and len(phone) == 11 and phone[0] == '7':
        phone_deal7 = phone[1:]

    h = CAT()
    for rr in db_client.get_xcurrs_for_deal(db, 0, curr_out, deal, dealer):
        #print row
        id = '%s' % rr['id']
        disabled = rr['expired']
        #bgc = 'gold'
        if disabled:
            memo = CAT(
                T('Курс не найден'), ', ',
                T('Когда курс будет получен платеж пройдёт автоматически'),
                '. ', T('Или попробуйте зайти позже'))
            _class = 'col sel_xcurrNRT'
        else:
            memo = CAT(
                SPAN(' ', T('по курсу'), (' %8g' % rr['price']), ' ',
                     T('нужно оплатить примерно')), ' ',
                B(SPAN(_class='pay_vol')), ' ', rr['name'])
            _class = 'col sel_xcurrRTE'

        # пусть клики все равно будут
        onclick = '''
                      //$(this).css('z-index','0');
                      $('#tag%s').hide('fast');
                      $('#cvr%s').css('display','block'); // .css('z-index','10');
                      ajax('%s',['vol', 'phone', 'gift_cod'], 'tag%s');
                      ''' % (id, id, URL('get', args=[id]), id)
        #print row
        h += DIV(
            DIV(
                DIV(
                    #T('Есть'), ': ', rr['bal_out'],' ',
                    IMG(_src=URL('static',
                                 'images/currs/' + rr['abbrev'] + '.png'),
                        _width=60,
                        __height=36,
                        _class='lst_icon',
                        _id='lst_icon' + id),
                    SPAN(rr['price'], _class='price hidden'),
                    SPAN(rr['abbrev'], _class='abbrev hidden'),
                    memo,
                    '. ',
                    SPAN(T('Всего было оплат:'), rr['used'], _class='small'),
                    _onclick=onclick if onclick else '',
                    #_style=style,
                    _id='btn%s' % id,
                    _class=_class,
                ),
                DIV(TAG.i(_class='fa fa-spin fa-spinner right wait1'),
                    _id='cvr%s' % id,
                    _class='col sel_xcurrCVR'),
                _class='row sel_xcurr'),
            _class='container')
        h += DIV(_id='tag%s' % id, _class='blue-c')
    xcurrs_h = h

    import recl
    _, reclams = recl.get(db, 2)
    '''
    response.top_line = DIV(
        TAG.center(tl),
        _id="top_line")
    '''
    response.top_line = None

    return dict(title=title,
                subtitle=subtitle,
                MIN=MIN,
                MAX=MAX,
                phone_deal7=phone_deal7,
                free_bal=free_bal,
                xcurrs_h=xcurrs_h,
                reclams=reclams)