Exemplo n.º 1
0
    def xml(self):
        from gluon import current
        pages, rem = divmod(self.records, self.items_per_page)
        li = []
        if rem: pages += 1
        if self.page > 0:
            li.append(
                LI(
                    A(XML('<i class="glyphicon glyphicon-fast-backward"></i>'),
                      _href=URL(args=current.request.args,
                                vars=dict(page=0)))))
        else:
            li.append(
                LI(A(XML('<i class="glyphicon glyphicon-fast-backward"></i>'),
                     _href="#"),
                   _class="disabled"))
        if self.page >= 1:
            li.append(
                LI(
                    A(XML('<i class="glyphicon glyphicon-backward"></i>'),
                      _href=URL(args=current.request.args,
                                vars=dict(page=self.page - 1)))))
        else:
            li.append(
                LI(A(XML('<i class="glyphicon glyphicon-backward"></i>'),
                     _href="#"),
                   _class="disabled"))

        li.append(
            LI(A(
                XML('<i class="glyphicon glyphicon-file"></i>Página %s de %s' %
                    (self.page + 1,
                     int(self.records / self.items_per_page) + 1))),
               _class="disabled"))

        if self.page <= pages - 2:
            li.append(
                LI(A(XML('<i class="glyphicon glyphicon-forward"></i>'),
                     _href=URL(args=current.request.args,
                               vars=dict(page=self.page + 1))),
                   _class="next"))
        else:
            li.append(
                LI(A(XML('<i class="glyphicon glyphicon-forward"></i>'),
                     _href="#"),
                   _class="disabled"))
        if self.page < pages - 1:
            li.append(
                LI(
                    A(XML('<i class="glyphicon glyphicon-fast-forward"></i>'),
                      _href=URL(args=current.request.args,
                                vars=dict(page=pages - 1)))))
        else:
            li.append(
                LI(A(XML('<i class="glyphicon glyphicon-fast-forward"></i>'),
                     _href="#"),
                   _class="disabled"))
        div = DIV(UL(li, _class="pagination  pagination-sm"))
        return DIV.xml(div)
Exemplo n.º 2
0
def get_cms_intro(module, resource, name, cmsxml=False):
    """
        Get intro from CMS

        @param module: the module prefix
        @param resource: the resource name
        @param name: the post name
        @param cmsxml: whether to XML-escape the contents or not

        @returns: the post contents, or None if not available
    """

    # Get intro text from CMS
    db = current.db
    s3db = current.s3db

    ctable = s3db.cms_post
    ltable = s3db.cms_post_module
    join = ltable.on((ltable.post_id == ctable.id) & \
                        (ltable.module == module) & \
                        (ltable.resource == resource) & \
                        (ltable.deleted == False))

    query = (ctable.name == name) & \
            (ctable.deleted == False)
    row = db(query).select(ctable.body,
                            join = join,
                            cache = s3db.cache,
                            limitby = (0, 1),
                            ).first()
    if not row:
        return None

    return XML(row.body) if cmsxml else row.body
Exemplo n.º 3
0
 def preview(self, item):
     super(ContentPackage, self).preview(item)
     content = self.db.plugin_package_content(item_id=item.unique_id)
     return XML(
         self.response.render(
             'plugin_package/preview.html',
             dict(item=item, p_content=content))
     )
Exemplo n.º 4
0
 def preview(self, item):
     super(ContentPhotoset, self).preview(item)
     photoset_content = self.db.plugin_photoset_content(
         item_id=item.unique_id)
     return XML(
         self.response.render(
             'plugin_photoset/preview.html',
             dict(item=item, photoset_content=photoset_content)))
Exemplo n.º 5
0
 def comment_facebook(self):
     js = """
     <div id="fb-root"></div>
         <script>(function(d, s, id) {
         var js, fjs = d.getElementsByTagName(s)[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement(s); js.id = id;
         js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=%(facebook_appid)s";
         fjs.parentNode.insertBefore(js, fjs);
         }(document, 'script', 'facebook-jssdk'));</script>
     <div class="fb-comments" data-href="%(url)s" data-num-posts="%(facebook_numposts)s" data-width="700"></div>
     """ % dict(facebook_appid=self.config.comment.facebook_appid,
                facebook_numposts=self.config.comment.facebook_numposts,
                url=self.request.url)
     return XML(js)
Exemplo n.º 6
0
def button(merchant_id="123456789012345",
           products=[
               dict(name="shoes",
                    quantity=1,
                    price=23.5,
                    currency='USD',
                    description="running shoes black")
           ]):
    t = '<input name="item_%(key)s_%(k)s" type="hidden" value="%(value)s"/>\n'
    list_products = ''
    for k, product in enumerate(products):
        for key in ('name', 'description', 'quantity', 'price', 'currency'):
            list_products += t % dict(k=k + 1, key=key, value=product[key])
    button = """<form action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/%(merchant_id)s" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm" target="_top">\n%(list_products)s<input name="_charset_" type="hidden" value="utf-8"/>\n<input alt="" src="https://checkout.google.com/buttons/buy.gif?merchant_id=%(merchant_id)s&amp;w=117&amp;h=48&amp;style=white&amp;variant=text&amp;loc=en_US" type="image"/>\n</form>""" % dict(
        merchant_id=merchant_id, list_products=list_products)
    return XML(button)
Exemplo n.º 7
0
def list_dict_to_table_sortable(lista, nombre_archivo):
    '''recibe una lista de diccionarios(clave-valor iguales)
    y devuelve una tabla html'''
    if type(lista) == list:
        if type(lista[0]) == dict:
            claves = lista[0].keys()
            orden = [
                'dni', 'usuario', 'apellido y nombre', 'apellido', 'nombre',
                'nombre map', 'baja map', 'reparticion', 'Unif', 'Unif_creado',
                'Unif_modificado'
            ]
            for i in reversed(orden):
                try:
                    claves.insert(0, claves.pop(claves.index(i)))
                except Exception:
                    pass
                    # log(e)
            # cabecera tabla
            tabla = '<table data-toggle="table"> <thead> <tr>'
            for i in claves:
                fila = """<th data-field="%s" data-sortable="true">
                       %s</th>""" % (i, i)
                tabla = tabla + fila
            tabla = tabla + '</tr> </thead> <tbody>'
            # contenido tabla
            for i in lista:
                tabla = tabla + '<tr>'
                for j in claves:
                    tabla = tabla + '<td>%s</td>' % (i[j])
                tabla = tabla + '</tr>'
            tabla = tabla + '</tbody> </table>'
            cantidad = len(lista)
            leyenda_cantidad = (MARKMIN("Cantidad de dias registrados: " +
                                        str(cantidad)))
            session.nombre_archivo = list_of_dict_to_csv(
                nombre_archivo, lista)[1]
            # open_archivo = open(dir_files + session.nombre_archivo, "r")
            boton_csv = A('Descarga tabla como CSV...',
                          _href=URL('descarga_csv'),
                          _class='btn btn-default')
            # return CENTER(TABLE(boton_csv,XML(tabla)))
            return DIV(boton_csv, leyenda_cantidad, XML(tabla))
Exemplo n.º 8
0
def index():
    """
    Show notifications for the current user
    """
    tbl = db.notification
    query = (tbl.id > 0)
    query &= (tbl.to_user == auth.user.id)

    def p_seen_rpr(v, r):
        if v:
            return I(_class="fa fa-envelope-open-o")

        return I(_class="fa fa-envelope")

    tbl.seen.represent = p_seen_rpr

    if request.args(0) == 'view':
        tbl.seen.readable = False
        tbl.message_content.represent = lambda v, r: XML(v)
        msg = tbl(request.args(2))
        msg.update_record(seen=True)
        tbl.from_user.represent = lambda v, r: db.auth_user(v).email

    grid = SQLFORM.grid(
        query,
        fields=[tbl.subject, tbl.from_user, tbl.seen, tbl.msg_date],
        paginate=10,
        showbuttontext=False,
        editable=False,
        csv=False,
        maxtextlengths={'notification.subject': 100},
        create=False,
        searchable=False,
        orderby=[~tbl.msg_date],
        formstyle='bootstrap',
    )

    return dict(grid=grid)
Exemplo n.º 9
0
Arquivo: poems.py Projeto: ichem/ddj
def chapter(poem, db, uhdb):
    """ Return a bootstrap row for a poem row. """
    if not poem:
        raise Exception('No such poem')
    qry = ((db.verse.book == 1) & (db.verse.chapter == poem.chapter))
    verse = db(qry).select().first()
    title = H3(poem.chapter.title)
    subtitle = H4('Chapter %i' % poem.chapter.number)
    published = H5(poem.published.strftime(date_format))
    stanzas = verse.en.split('\r\n\r\n')
    content = []
    for stanza in stanzas:
        content.append(P(XML(stanza.replace('\r\n', '<br />'))))
    link = P(A(I('Go to the study version'),
               _href=URL('studies', 'chapter', args=[poem.chapter.number]),
               _style='color:inherit;',
               _title='Study version'),
             _style='font-size:0.9em;padding-top:1em')
    content.append(P(link))
    column = DIV(title, subtitle, published, *content, _class=poem_class)
    return DIV(column,
               _class='row',
               _style='font-size:1.12em;white-space:nowrap;')
Exemplo n.º 10
0
    def comment_intense(self):
        #  counterjs = """
        # <script>
        # var idcomments_acct = 'fe83a2e2af975dd1095a8e4e9ebe1902';
        # var idcomments_post_id;
        # var idcomments_post_url;
        # </script>
        # <script type="text/javascript" src="http://www.intensedebate.com/js/genericLinkWrapperV2.js"></script>
        # """

        js = """
        <script>
        var idcomments_acct = '%(intense_acct)s';
        var idcomments_post_id;
        var idcomments_post_url;
        </script>
        <span id="IDCommentsPostTitle" style="display:none"></span>
        <script type='text/javascript' src='http://www.intensedebate.com/js/genericCommentWrapperV2.js'></script>
        """ % dict(intense_acct=self.config.comment.intense_acct,
                   idcomments_post_id="%s/%s" %
                   (self.context.article.id, self.context.article.slug),
                   idcomments_post_url=self.request.url)
        return XML(js)
Exemplo n.º 11
0
 def comment_disqus(self):
     js = """
     <div id="disqus_thread"></div>
     <script type="text/javascript">
     /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
     var disqus_shortname = '%(disqus_shortname)s'; // required: replace example with your forum shortname
     var disqus_identifier = '%(disqus_identifier)s';
     //var disqus_url = '%(disqus_url)s';
     var disqus_developer = %(disqus_developer)s; // developer mode is on
     /* * * DON'T EDIT BELOW THIS LINE * * */
     (function() {
         var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
         dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
         (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
     })();
     </script>
     <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
     <a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
     """ % dict(disqus_shortname=self.config.comment.disqus_shortname,
                disqus_developer=self.config.comment.disqus_developer,
                disqus_identifier="%s/%s" %
                (self.context.article.id, self.context.article.slug),
                disqus_url=self.request.url)
     return XML(js)
Exemplo n.º 12
0
    def _render(cls, resource, data, meta_data, format=None):
        """
            Method to pre-render the contents for the message template

            @param resource: the S3Resource
            @param data: the data returned from S3Resource.select
            @param meta_data: the meta data for the notification
            @param format: the contents format ("text" or "html")
        """

        created_on_selector = resource.prefix_selector("created_on")
        created_on_colname = None
        notify_on = meta_data["notify_on"]
        last_check_time = meta_data["last_check_time"]
        rows = data["rows"]
        rfields = data["rfields"]
        output = {}
        new, upd = [], []

        if format == "html":
            # Pre-formatted HTML
            colnames = []

            new_headers = TR()
            mod_headers = TR()
            for rfield in rfields:
                if rfield.selector == created_on_selector:
                    created_on_colname = rfield.colname
                elif rfield.ftype != "id":
                    colnames.append(rfield.colname)
                    label = rfield.label
                    new_headers.append(TH(label))
                    mod_headers.append(TH(label))
            for row in rows:
                append_record = upd.append
                if created_on_colname:
                    try:
                        created_on = row["_row"][created_on_colname]
                    except (KeyError, AttributeError):
                        pass
                    else:
                        if s3_utc(created_on) >= last_check_time:
                            append_record = new.append
                tr = TR([TD(XML(row[colname])) for colname in colnames])
                append_record(tr)
            if "new" in notify_on and len(new):
                output["new"] = len(new)
                output["new_records"] = TABLE(THEAD(new_headers), TBODY(new))
            else:
                output["new"] = None
            if "upd" in notify_on and len(upd):
                output["upd"] = len(upd)
                output["upd_records"] = TABLE(THEAD(new_headers), TBODY(upd))
            else:
                output["upd"] = None

        else:
            # Standard text format
            labels = []
            append = labels.append

            for rfield in rfields:
                if rfield.selector == created_on_selector:
                    created_on_colname = rfield.colname
                elif rfield.ftype != "id":
                    append((rfield.colname, rfield.label))

            for row in rows:
                append_record = upd.append
                if created_on_colname:
                    try:
                        created_on = row["_row"][created_on_colname]
                    except (KeyError, AttributeError):
                        pass
                    else:
                        if s3_utc(created_on) >= last_check_time:
                            append_record = new.append

                record = []
                append_column = record.append
                for colname, label in labels:
                    append_column((label, row[colname]))
                append_record(record)

            if "new" in notify_on and len(new):
                output["new"] = len(new)
                output["new_records"] = new
            else:
                output["new"] = None
            if "upd" in notify_on and len(upd):
                output["upd"] = len(upd)
                output["upd_records"] = upd
            else:
                output["upd"] = None

        output.update(meta_data)
        return output
Exemplo n.º 13
0
    def __call__(self):

        T = current.T
        db = current.db
        s3db = current.s3db
        s3 = current.response.s3
        session_s3 = current.session.s3

        output = {}

        # Recent Updates
        etable = s3db.event_event
        stable = s3db.event_sitrep
        query = (stable.deleted == False)
        fields = [
            etable.name,
            stable.id,
            stable.date,
            stable.name,
            stable.summary,
        ]

        left = [etable.on(etable.id == stable.event_id)]

        language = session_s3.language
        if language != current.deployment_settings.get_L10n_default_language():
            ntable = s3db.event_event_name
            left.append(ntable.on((ntable.event_id == etable.id) & \
                                  (ntable.language == language)))
            fields.append(ntable.name_l10n)
            use_local_event_name = True
        else:
            use_local_event_name = False

        sitreps = db(query).select(left=left,
                                   limitby=(0, 3),
                                   orderby=~stable.date,
                                   *fields)
        len_sitreps = len(sitreps)
        if len_sitreps == 0:
            from s3 import S3CRUD
            recent_updates = DIV(S3CRUD.crud_string("event_sitrep",
                                                    "msg_list_empty"),
                                 _class="empty")
        else:
            recent_updates = DIV()
            rappend = recent_updates.append
            count = 0
            for s in sitreps:
                count += 1
                if use_local_event_name:
                    event_name = s["event_event_name.name_l10n"] or s[
                        "event_event.name"]
                else:
                    event_name = s["event_event.name"]
                if not event_name:
                    event_name = s["event_sitrep.name"]
                rappend(
                    H3(
                        A(
                            event_name,
                            _href=URL(
                                c="event",
                                f="sitrep",
                                args=[s["event_sitrep.id"]],
                            ),
                        )))
                rappend(P(XML(s["event_sitrep.summary"])))
                if count != len_sitreps:
                    rappend(HR())

        output["recent_updates"] = recent_updates

        map_btn = A(
            T("MAP OF CURRENT NEEDS"),
            #_href = URL(c="default",
            #            f="index",
            #            args="dashboard",
            #            ),
            _href=URL(
                c="req",
                f="need_line",
                args="map",
            ),
            _class="small primary button",
        )

        create_btn = A(
            T("CREATE A NEED"),
            _href=URL(
                c="req",
                f="need",
                args="create",
            ),
            _class="small primary button",
        )

        output["needs_btn"] = DIV(
            SPAN(map_btn),
            SPAN(create_btn),
            _class="button-group radius",
        )

        output["about_btn"] = A(
            "%s >" % T("Read More"),
            _href=URL(
                c="default",
                f="about",
            ),
        )

        # Resources section
        if current.deployment_settings.has_module("cms"):
            system_roles = current.auth.get_system_roles()
            ADMIN = system_roles.ADMIN in session_s3.roles
            table = s3db.cms_post
            ltable = s3db.cms_post_module
            module = "default"
            resource = "index"
            query = (ltable.module == module) & \
                    ((ltable.resource == None) | \
                     (ltable.resource == resource)) & \
                    (ltable.post_id == table.id) & \
                    (table.deleted != True)
            item = current.db(query).select(table.body,
                                            table.id,
                                            limitby=(0, 1)).first()
            if item:
                if ADMIN:
                    item = DIV(
                        XML(item.body), BR(),
                        A(T("Edit"),
                          _href=URL(c="cms",
                                    f="post",
                                    args=[item.id, "update"]),
                          _class="action-btn"))
                else:
                    item = DIV(XML(item.body))
            elif ADMIN:
                if s3.crud.formstyle == "bootstrap":
                    _class = "btn"
                else:
                    _class = "action-btn"
                item = A(T("Edit"),
                         _href=URL(c="cms",
                                   f="post",
                                   args="create",
                                   vars={
                                       "module": module,
                                       "resource": resource
                                   }),
                         _class="%s cms-edit" % _class)
            else:
                item = ""
        else:
            item = ""

        output["item"] = item

        # Inject D3 scripts
        from s3 import S3Report
        S3Report.inject_d3()

        # Inject charts-script
        appname = current.request.application
        scripts = s3.scripts
        if s3.debug:
            script = "/%s/static/scripts/S3/s3.ui.charts.js" % appname
            if script not in scripts:
                scripts.append(script)
        else:
            script = "/%s/static/scripts/S3/s3.ui.charts.min.js" % appname
            if script not in scripts:
                scripts.append(script)

        # Instantiate charts
        scriptopts = {
            # Standard SHARE theme color set:
            "colors": [
                '#0C9CD0',  # blue
                '#E03158',  # red
                '#FBA629',  # amber
                '#8ABC3F',  # green
                '#AFB8BF',  # grey
            ],
        }
        script = '''$('.homepage-chart').uiChart(%s)''' % json.dumps(
            scriptopts)
        s3.jquery_ready.append(script)

        # Add last update time of chart data
        last_update = HomepageStatistics.last_update()
        if last_update:
            output["last_stats_update"] = T("Updated on %(date)s") % {
                "date": last_update
            }
        else:
            output["last_stats_update"] = None

        self._view(THEME, "index.html")

        return output
Exemplo n.º 14
0
def found_pay_ins(db, curr_in, xcurr_in, addr, shop=None, shop_order=None):
    pays =[]
    #print '\n',curr_in and curr_in.abbrev or 'curr_in=None', '\nSHOP:',shop.id, '\nshop_order:',shop_order.id
    # все зачтенные за последний месяц
    # сначала выдадим все неоплоченные входы - они в стеке
    used = {}
    privat = not addr or len(addr) < 4
    no_addr = privat or addr == "????"
    
    for pay in db( (not privat)
               & (db.pay_ins.id == db.pay_ins_stack.ref_id)
               & (db.pay_ins.shop_order_addr_id == db.shop_order_addrs.id)
               & (no_addr or db.shop_order_addrs.addr==addr)
#               & (xcurr_in and xcurr_in.id == db.shop_order_addrs.xcurr_id)
               ).select(orderby=~db.pay_ins.created_on):
        xcurr = db.xcurrs[pay.shop_order_addrs.xcurr_id]
        #if xcurr_in and xcurr_in.id != xcurr.id: continue
        curr_in = db.currs[xcurr.curr_id]
        #print
        
        shop_order = shop_order or db.shop_orders[pay.shop_order_addrs.shop_order_id]
        shop = shop or db.shops[shop_order.shop_id]
        shop_name = shop.name or shop.url or shop.mail
        if not privat:
            # показать подробно мне
            shop_name = '%s %s' % (shop_name or '', shop_order.order)
        status = pay.pay_ins.status
        pay_out_info = T('статус: ') + (status or T('в обработке'))
        used[pay.pay_ins.id]=True
        mess_in = '%s [%s] %s -> %s' % (pay.pay_ins.amount, curr_in.abbrev, pay.pay_ins.created_on, shop_name)
        pays.append({
            T('Вход'): mess_in,
            T('Выход'): pay_out_info,
            })
    # теперь все выплаченные - их в стеке уже нет и тут глубина - 40 дней
    # если без адреса то только 1 сутки
    expired = datetime.datetime.now() - datetime.timedelta(no_addr and 1 or 40, 0)
    for pay in db(
               (no_addr or db.shop_order_addrs.addr==addr)
               & (db.pay_ins.shop_order_addr_id == db.shop_order_addrs.id)
               & (db.pay_ins.created_on > expired)
               & (xcurr_in and xcurr_in.id == db.shop_order_addrs.xcurr_id)
               ).select(orderby=~db.pay_ins.created_on):
        if pay.pay_ins.id in used: continue
        #print pay
        xcurr = db.xcurrs[pay.shop_order_addrs.xcurr_id]
        #if xcurr_in and xcurr_in.id != xcurr.id: continue
        curr_in = db.currs[pay.shop_order_addrs.curr_id]

        shop_order = shop_order or db.shop_orders[pay.shop_order_addrs.shop_order_id]
        shop = shop or db.shops[shop_order.shop_id]
        curr_out = db.currs[shop_order.curr_id]
        dn_url = URL('order','show', args=[order.id])
        order_info = None
        if pay.pay_ins.order_id:
            order = db.orders[pay.pay_ins.order_id]
            order_info = T('№%s от %s, курс:%s') % (order.id, order.created_on, round(order.volume_out/order.volume_in,8))
        status = pay.pay_ins.status
        if status and status == 'returned':
            pay_out_info = T('Возвращен обратно')
        else:
            pay_out_info = T('НЕ ВЫПЛАЧЕН, статус: ') + (status or T('в обработке'))
        payout = rate = None
        if pay.pay_ins.payout_id:
            payout = db.pay_outs[pay.pay_ins.payout_id]
            if payout and payout.shoper_order_id:
                #shop_order = db.shop_orders[payout.ref]
                #shop = db.shops[shop_order.shop_id]
                shoper_order = db.shopers_orders[payout.shoper_order_id]
                #curr_out = db.currs[shoper_order.curr_id]
                shoper = db.shopers[shoper_order.shoper_id]
                shoper_shop = db((db.shoper_shops.shop_id == shop.id) & (db.shoper_shops.shoper_id == shoper.id)).select().first()
                #if shoper_shop.p2p and shop.name != 'WALLET':
                #    # если это выплата в магазин то переопределим ссылку
                #    dn_url = URL('to_shop','index')
                p_i = json.loads(payout.info)
                rate = round(payout.amount/payout.amo_in,8)
                amo_out = round(pay.pay_ins.amount * payout.amount/payout.amo_in, 2)
                #if not 'payment_id' in p_i: print payout.info, amo_out
                if 'payment_id' in p_i: pay_out_info = privat and  T('%s [%s] -%s%s %s') % ( amo_out, curr_out.abbrev, shoper_shop.tax, '%', payout.created_on ) or \
                    T('%s [%s] -%s%s %s %s %s') % (  amo_out, curr_out.abbrev, shoper_shop.tax, '%', p_i['payment_id'], 'invoice_id' in p_i and p_i['invoice_id'] or 'payee' in p_i and p_i['payee'], payout.created_on )
        elif pay.pay_ins.clients_tran_id:
            # это выплатата клиенту
            cl_tr = db.clients_trans[pay.pay_ins.clients_tran_id]
            clnt = db.clients[cl_tr.client_id]
            amo_out = cl_tr.amo_in
            rate = None
            pay_out_info = ''
            if cl_tr.curr_in_id and cl_tr.curr_in_id != curr_in.id:
                # была конвертация
                pay_out_info = pay_out_info + '%s [%s] ' % (amo_out, curr_out.abbrev)
                #rate = cl_tr.amo_in
            pay_out_info = pay_out_info + T('зачтено')
            if privat:
                dn_url = URL('to_shop','index', args=[cl_tr.client_id])
            else:
                pay_out_info = pay_out_info + T(' транзакция №%s - %s') % (cl_tr.id, cl_tr.desc)
                # to_shop/index/2?order=UUWZNTYIR&sum=0.02&curr_out=BTC
                vvv = {'order':shop_order.order, 'curr_out':curr_out.abbrev}
                if amo_rest: vvv['sum'] = amo_rest
                dn_url = URL('to_shop','index', args=[cl_tr.client_id],
                    vars=vvv)

        if not order_info and rate:
            order_info = T('текущий курс:%s') % round(rate,8)
        shop_name = shop.name
        if not privat:
            shop_name = '%s %s' % (shop.name, shop_order.order)
        shop_name = XML(A(shop_name, _href=dn_url))
        rec_vals = {
            T('Вход'): '%s [%s] %s' % (pay.pay_ins.amount, curr_in.abbrev, pay.pay_ins.created_on),
            T('Для'): shop_name,
            T('Заказ'): order_info,
            T('Выход'): pay_out_info,
            }
        if payout:
            if payout.amo_gift and payout.amo_gift > 0:
                rec_vals[T('Подарок')] = T('Вы получили дополнительно %s [%s]') % (payout.amo_gift, curr_out.abbrev)
            if payout.amo_partner and payout.amo_partner > 0:
                rec_vals[T('Партёрские')] = T('Вы получили дополнительно %s [%s]') % (payout.amo_partner, curr_out.abbrev)


        pays.append(rec_vals)
    
    return pays
    def __call__(self):

        output = {}

        T = current.T
        request = current.request
        response = current.response
        s3 = response.s3

        # Check logged in and permissions
        auth = current.auth
        settings = current.deployment_settings
        roles = current.session.s3.roles
        system_roles = auth.get_system_roles()
        AUTHENTICATED = system_roles.AUTHENTICATED

        # Login/Registration forms
        self_registration = current.deployment_settings.get_security_registration_visible(
        )
        registered = False
        login_form = None
        login_div = None
        register_form = None
        register_div = None

        if AUTHENTICATED not in roles:

            login_buttons = DIV(A(T("Login"),
                                  _id="show-login",
                                  _class="tiny secondary button"),
                                _id="login-buttons")
            script = '''
$('#show-mailform').click(function(e){
 e.preventDefault()
 $('#intro').slideDown(400, function() {
   $('#login_box').hide()
 });
})
$('#show-login').click(function(e){
 e.preventDefault()
 $('#login_form').show()
 $('#register_form').hide()
 $('#login_box').show()
 $('#intro').slideUp()
})'''
            s3.jquery_ready.append(script)

            # This user isn't yet logged-in
            if "registered" in request.cookies:
                # This browser has logged-in before
                registered = True

            if self_registration is True:
                # Provide a Registration box on front page
                login_buttons.append(
                    A(T("Register"),
                      _id="show-register",
                      _class="tiny secondary button",
                      _style="margin-left:5px"))
                script = '''
$('#show-register').click(function(e){
 e.preventDefault()
 $('#login_form').hide()
 $('#register_form').show()
 $('#login_box').show()
 $('#intro').slideUp()
})'''
                s3.jquery_ready.append(script)

                register_form = auth.register()
                register_div = DIV(
                    H3(T("Register")),
                    P(
                        XML(
                            T("If you would like to help, then please <b>sign up now</b>"
                              ))))
                register_script = '''
$('#register-btn').click(function(e){
 e.preventDefault()
 $('#register_form').show()
 $('#login_form').hide()
})
$('#login-btn').click(function(e){
 e.preventDefault()
 $('#register_form').hide()
 $('#login_form').show()
})'''
                s3.jquery_ready.append(register_script)

            # Provide a login box on front page
            auth.messages.submit_button = T("Login")
            login_form = auth.login(inline=True)
            login_div = DIV(
                H3(T("Login")),
                #P(XML(T("Registered users can <b>login</b> to access the system"))),
            )
        else:
            login_buttons = ""

        output["login_buttons"] = login_buttons
        output["self_registration"] = self_registration
        output["registered"] = registered
        output["login_div"] = login_div
        output["login_form"] = login_form
        output["register_div"] = register_div
        output["register_form"] = register_form

        s3.stylesheets.append("../themes/%s/homepage.css" % THEME)
        self._view(settings.get_theme_layouts(), "index.html")

        return output
    def __call__(self):

        output = {}

        # Allow editing of page content from browser using CMS module
        ADMIN = current.auth.s3_has_role("ADMIN")

        s3db = current.s3db
        table = s3db.cms_post
        ltable = s3db.cms_post_module

        module = "default"
        resource = "Legal"

        query = (ltable.module == module) & \
                (ltable.resource == resource) & \
                (ltable.post_id == table.id) & \
                (table.deleted != True)
        item = current.db(query).select(table.body, table.id,
                                        limitby=(0, 1)).first()
        if item:
            if ADMIN:
                content = DIV(
                    XML(item.body),
                    BR(),
                    A(
                        current.T("Edit"),
                        _href=URL(
                            c="cms",
                            f="post",
                            args=[item.id, "update"],
                            vars={
                                "module": module,
                                "resource": resource,
                            },
                        ),
                        _class="action-btn",
                    ),
                )
            else:
                content = DIV(XML(item.body))
        elif ADMIN:
            content = A(
                current.T("Edit"),
                _href=URL(
                    c="cms",
                    f="post",
                    args="create",
                    vars={
                        "module": module,
                        "resource": resource,
                    },
                ),
                _class="action-btn cms-edit",
            )
        else:
            content = ""

        output["item"] = content

        self._view(THEME, "cmspage.html")
        return output
Exemplo n.º 17
0
def found_pay_ins(db, curr_in, xcurr_in, addr, pays, amo_rest):
    # все зачтенные за последний месяц
    #xcurr = None
    # сначала выдадим все неоплоченные входы - они в стеке
    used = {}
    privat = not addr or len(addr) < 4
    no_addr = privat or addr == "????"
    for pay in db((not privat)
                  & (db.pay_ins.id == db.pay_ins_stack.ref_)
                  & (db.pay_ins.ref_ == db.deal_acc_addrs.id)
                  & (no_addr or db.deal_acc_addrs.addr == addr)).select(
                      orderby=~db.pay_ins.created_on):
        xcurr = db.xcurrs[pay.deal_acc_addrs.xcurr_id]
        if xcurr_in and xcurr_in.id != xcurr.id: continue
        curr_in = db.currs[xcurr.curr_id]

        deal_acc = db.deal_accs[pay.deal_acc_addrs.deal_acc_id]
        deal = db.deals[deal_acc.deal_id]
        deal_name = deal.name
        if not privat:
            # показать подробно мне
            deal_name = '%s %s' % (deal.name, deal_acc.acc)
        st = pay.pay_ins.status
        if st == 'returned':
            pay_out_info = T('Возвращен обратно')
        else:
            pay_out_info = T('НЕ ВЫПЛАЧЕН, статус: ') + (st
                                                         or T('в обработке'))
        used[pay.pay_ins.id] = True
        mess_in = '%s [%s] %s -> %s' % (pay.pay_ins.amount, curr_in.abbrev,
                                        pay.pay_ins.created_on, deal_name)
        pays.append({
            T('Вход'): mess_in,
            T('Выход'): pay_out_info,
        })
    # теперь все выплаченные - их в стеке уже нет и тут глубина - 40 дней
    # если без адреса то только 1 сутки
    expired = datetime.datetime.now() - datetime.timedelta(
        no_addr and 1 or 40, 0)
    for pay in db((no_addr or db.deal_acc_addrs.addr == addr)
                  & (db.pay_ins.ref_ == db.deal_acc_addrs.id)
                  & (db.pay_ins.created_on > expired)).select(
                      orderby=~db.pay_ins.created_on):
        if pay.pay_ins.id in used: continue
        #print pay
        xcurr = db.xcurrs[pay.deal_acc_addrs.xcurr_id]
        if xcurr_in and xcurr_in.id != xcurr.id: continue
        curr_in = db.currs[xcurr.curr_id]

        deal_acc = db.deal_accs[pay.deal_acc_addrs.deal_acc_id]
        deal = db.deals[deal_acc.deal_id]
        curr_out = db.currs[deal_acc.curr_id]
        dn_url = None
        if deal.name == 'phone +7':
            dn_url = URL('to_phone', 'index')
        elif deal.name == 'WALLET':
            dn_url = URL('to_wallet', 'index')
        else:
            dn_url = URL('more', 'to_pay', args=[deal.id])
        order_info = None
        if pay.pay_ins.order_id:
            order = db.orders[pay.pay_ins.order_id]
            order_info = T('№%s от %s, курс:%s') % (
                order.id, order.created_on,
                round(order.volume_out / order.volume_in, 8))
        st = pay.pay_ins.status
        if st == 'returned':
            pay_out_info = T('Возвращен обратно')
        else:
            pay_out_info = T('НЕ ВЫПЛАЧЕН, статус: ') + (st
                                                         or T('в обработке'))
        payout = rate = None
        if pay.pay_ins.payout_id:
            payout = db.pay_outs[pay.pay_ins.payout_id]
            if payout and payout.dealer_acc_id:
                #deal_acc = db.deal_accs[payout.ref_]
                #deal = db.deals[deal_acc.deal_id]
                dealer_acc = db.dealers_accs[payout.dealer_acc_id]
                #curr_out = db.currs[dealer_acc.curr_id]
                dealer = db.dealers[dealer_acc.dealer_id]
                dealer_deal = db((db.dealer_deals.deal_id == deal.id) & (
                    db.dealer_deals.dealer_id == dealer.id)).select().first()
                #if dealer_deal.p2p and deal.name != 'WALLET':
                #    # если это выплата в магазин то переопределим ссылку
                #    dn_url = URL('to_shop','index')
                p_i = payout.vars or json.loads(payout.info or '{}')
                rate = round(payout.amount / payout.amo_in, 8)
                amo_out = round(
                    pay.pay_ins.amount * payout.amount / payout.amo_in, 2)
                #if not 'payment_id' in p_i: print payout.info, amo_out
                pay_out_info = T('%s [%s] -%s%s %s ') % (
                    amo_out, curr_out.abbrev, dealer_deal.tax, '%',
                    payout.created_on)
                if not privat:
                    if 'payment_id' in p_i:
                        pay_out_info = pay_out_info + T('%s %s') % (
                            p_i['payment_id'], p_i.get('invoice_id')
                            or p_i.get('payee'))
                    else:
                        pay_out_info = pay_out_info + '%s' % p_i
        elif pay.pay_ins.clients_tran_id:
            # это выплатата клиенту
            cl_tr = db.clients_trans[pay.pay_ins.clients_tran_id]
            clnt = db.clients[cl_tr.client_id]
            amo_out = cl_tr.amo_in
            rate = None
            pay_out_info = ''
            if cl_tr.curr_in_id and cl_tr.curr_in_id != curr_in.id:
                # была конвертация
                pay_out_info = pay_out_info + '%s [%s] ' % (amo_out,
                                                            curr_out.abbrev)
                #rate = cl_tr.amo_in
            pay_out_info = pay_out_info + T('зачтено')
            if privat:
                dn_url = URL('to_shop', 'index', args=[cl_tr.client_id])
            else:
                pay_out_info = pay_out_info + T(' транзакция №%s - %s') % (
                    cl_tr.id, cl_tr.desc_)
                # to_shop/index/2?order=UUWZNTYIR&sum=0.02&curr_out=BTC
                vvv = {'order': deal_acc.acc, 'curr_out': curr_out.abbrev}
                if amo_rest: vvv['sum'] = amo_rest
                dn_url = URL('to_shop',
                             'index',
                             args=[cl_tr.client_id],
                             vars=vvv)

        if not order_info and rate:
            order_info = T('текущий курс:%s') % round(rate, 8)
        deal_name = deal.name
        if not privat:
            deal_name = '%s %s' % (deal.name, deal_acc.acc)
        deal_name = XML(A(deal_name, _href=dn_url))
        rec_vals = {
            T('Вход'):
            '%s [%s] %s' %
            (pay.pay_ins.amount, curr_in.abbrev, pay.pay_ins.created_on),
            T('Для'):
            deal_name,
            T('Заказ'):
            order_info,
            T('Выход'):
            pay_out_info,
        }
        if payout:
            if payout.amo_gift and payout.amo_gift > 0:
                rec_vals[T(
                    'Подарок')] = T('Вы получили дополнительно %s [%s]') % (
                        payout.amo_gift, curr_out.abbrev)
            if payout.amo_partner and payout.amo_partner > 0:
                rec_vals[T('Партнёрские'
                           )] = T('Вы получили дополнительно %s [%s]') % (
                               payout.amo_partner, curr_out.abbrev)

        pays.append(rec_vals)
Exemplo n.º 18
0
 def preview(self, item):
     super(ContentPicture, self).preview(item)
     info = self.db.plugin_picture_info(item_id=item.unique_id)
     return XML(
         self.response.render('plugin_picture/preview.html',
                              dict(item=item, info=info)))
Exemplo n.º 19
0
    def __call__(self):

        T = current.T
        db = current.db
        s3db = current.s3db

        output = {}

        # Recent Updates
        etable = s3db.event_event
        stable = s3db.event_sitrep
        query = (stable.deleted == False)
        fields = [
            etable.name,
            stable.date,
            stable.name,
            stable.summary,
        ]

        left = [etable.on(etable.id == stable.event_id)]

        language = current.session.s3.language
        if language != current.deployment_settings.get_L10n_default_language():
            ntable = s3db.event_event_name
            left.append(ntable.on((ntable.event_id == etable.id) & \
                                  (ntable.language == language)))
            fields.append(ntable.name_l10n)
            use_local_event_name = True
        else:
            use_local_event_name = False

        sitreps = db(query).select(left=left,
                                   limitby=(0, 3),
                                   orderby=~stable.date,
                                   *fields)
        len_sitreps = len(sitreps)
        if len_sitreps == 0:
            from s3 import S3CRUD
            recent_updates = DIV(S3CRUD.crud_string("event_sitrep",
                                                    "msg_list_empty"),
                                 _class="empty")
        else:
            recent_updates = DIV()
            rappend = recent_updates.append
            count = 0
            for s in sitreps:
                count += 1
                if use_local_event_name:
                    event_name = s["event_event_name.name_l10n"] or s[
                        "event_event.name"]
                else:
                    event_name = s["event_event.name"]
                if not event_name:
                    event_name = s["event_sitrep.name"]
                rappend(H3(event_name))
                rappend(P(XML(s["event_sitrep.summary"])))
                if count != len_sitreps:
                    rappend(HR())

        output["recent_updates"] = recent_updates

        map_btn = A(
            T("MAP OF CURRENT NEEDS"),
            #_href = URL(c="default",
            #            f="index",
            #            args="dashboard",
            #            ),
            _href=URL(
                c="req",
                f="need_line",
                args="map",
            ),
            _class="small primary button",
        )

        create_btn = A(
            T("CREATE A NEED"),
            _href=URL(
                c="req",
                f="need",
                args="create",
            ),
            _class="small primary button",
        )

        output["needs_btn"] = DIV(
            SPAN(map_btn),
            SPAN(create_btn),
            _class="button-group radius",
        )

        output["about_btn"] = A(
            "%s >" % T("Read More"),
            _href=URL(
                c="default",
                f="about",
            ),
        )

        self._view(THEME, "index.html")

        # Inject D3 scripts
        from s3 import S3Report
        S3Report.inject_d3()

        # Inject charts-script
        appname = current.request.application
        s3 = current.response.s3
        scripts = s3.scripts
        if s3.debug:
            script = "/%s/static/scripts/S3/s3.ui.charts.js" % appname
            if script not in scripts:
                scripts.append(script)
        else:
            script = "/%s/static/scripts/S3/s3.ui.charts.min.js" % appname
            if script not in scripts:
                scripts.append(script)

        # Instantiate charts
        scriptopts = {
            # Standard SHARE theme color set:
            "colors": [
                '#0C9CD0',  # blue
                '#E03158',  # red
                '#FBA629',  # amber
                '#8ABC3F',  # green
                '#AFB8BF',  # grey
            ],
        }
        script = '''$('.homepage-chart').uiChart(%s)''' % json.dumps(
            scriptopts)
        s3.jquery_ready.append(script)

        # Add last update time of chart data
        last_update = HomepageStatistics.last_update()
        if last_update:
            output["last_stats_update"] = T("Updated on %(date)s") % {
                "date": last_update
            }
        else:
            output["last_stats_update"] = None

        return output
Exemplo n.º 20
0
    def comment_internal(self):
        is_author = False
        if self.session.auth and self.session.auth.user:
            is_author = True if self.session.auth.user.id == self.context.article.author else False
            self.db.Comments.article_id.default = self.context.article.id
            self.db.Comments.user_id.default = self.session.auth.user.id
            self.db.Comments.commenttime.default = self.request.now
            self.db.Comments.comment_text.label = self.T("Post your comment")
            from plugin_ckeditor import CKEditor
            ckeditor = CKEditor()
            self.db.Comments.comment_text.widget = ckeditor.basicwidget
            form = SQLFORM(self.db.Comments, formstyle='divs')
            if form.process(
                    message_onsuccess=self.T('Comment included')).accepted:
                self.new_article_event(
                    'new_article_comment',
                    self.session.auth.user,
                    data={
                        'event_text':
                        form.vars.comment_text,
                        'event_link':
                        "%s/%s#comment_%s" %
                        (self.context.article.id, self.context.article.slug,
                         form.vars.id)
                    })
        else:
            form = A(
                self.T("Login to post comments"),
                _class="button",
                _href=self.CURL(
                    'default',
                    'user',
                    args='login',
                    vars=dict(_next=self.CURL('article',
                                              'show',
                                              args=[
                                                  self.context.article.id,
                                                  self.context.article.slug
                                              ]))))

        comments = self.db(
            self.db.Comments.article_id == self.context.article.id).select(
                orderby=self.db.Comments.created_on)

        if comments and is_author:
            edit_in_place = ckeditor.bulk_edit_in_place(
                ["comment_%(id)s" % comment for comment in comments],
                URL('editcomment'))
        elif comments and self.session.auth and self.session.auth.user:
            usercomments = comments.find(
                lambda row: row.user_id == self.session.auth.user.id)
            if usercomments:
                edit_in_place = ckeditor.bulk_edit_in_place(
                    ["comment_%(id)s" % comment for comment in usercomments],
                    URL('editcomment'))
            else:
                edit_in_place = ('', '')
        else:
            edit_in_place = ('', '')

        return DIV(H4(
            IMG(_src=URL('static',
                         '%s/images/icons' % self.context.theme_name,
                         args='board.24.png')), self.T("Comments")),
                   UL(
                       *[
                           LI(H5(
                               A(self.T("%s %s" %
                                        (comment.nickname or comment.user_id,
                                         self.db.pdate(comment.commenttime))),
                                 _href=self.CURL('person',
                                                 'show',
                                                 args=comment.nickname
                                                 or comment.user_id))),
                              DIV(
                                  XML(comment.comment_text), **{
                                      '_class': 'editable commentitem',
                                      '_data-object': 'comment',
                                      '_data-id': comment.id,
                                      '_id': "comment_%s" % comment.id
                                  }),
                              _class="comment_li") for comment in comments
                       ], **dict(_class="comment_ul")),
                   edit_in_place[1],
                   form,
                   _class="internal-comments article-box")