Пример #1
0
    def prodlist(self, doc, qsort):
        # SQL запрос - временная таблица 1 с ID товарами фильтра
        sqlpids = self.sqlpids(self.doc.view.pview, self.ppair)
        q = sql.temp(sqlpids, 'plist', sql.get(['count(*)'], '%s'), ['id_product'])

        # Блокируем DB для выполнения пакета запросов в одной сессии
        db = site.db.self()
        try:
            # Задаем кол-во товаров и страницы
            self.prodcount = db.fetchval(q)

            t = [self.doc.tproduct, sql.tempname('plist') + ' ps']
            f = ['ps.id_product = p.id']
            q = sql.get_f(['p.id'], t, f)
            q = sql.order(q, qsort)
            q = sql.limit(q, self.ppg * (self.page - 1), self.ppg)
            pids = db.fetchvals(q)
            if not pids:
                return []
            pl = self.__proddata(db, doc.view, pids)
            if not doc.view.iss:
                self.__prodhint(db, doc.view, pl)
        finally:
            pass
            #db.shunlock()

        prodlist = map(lambda pid: pl[pid], pids)
        return prodlist
Пример #2
0
    def SearchProducts(self, res, doc):
        keys = []
        for key in re.split(r'[,;\s]+', res.text):
            if key:
                keys.append(real_translit(key))
        qlist = []
        params = []
        db = self._db
        for field in ('id', 'partno1', 'partno2'):
            qlist.append(sql.get_f('id', 'product', sql.fin(field, keys, True)))
            params += keys
        idl = db.fetchvals(sql.union(qlist), params)
        if not idl:
            return False
        res.count = len(idl)

        f = ['ps.id_product = p.id', 'pv.id_cat = ps.id_prop1']
        q = sql.get_f('pv.id', ['pview pv', 'prop_set ps'], f)
        q = sql.order(q, 'pv.num')
        q = sql.limit(q, 0, 1)
        q = sql.get_f(['id', '(%s) AS id_view' % q], 'product p', sql.fin('id', idl))
        for (idp, id) in db.fetchall(q):
            if id in res.filters:
                view = res.filters[id]
            else:
                view = classes.View(doc, id)
                view.k = doc.getk([view.id_cat], 'id') + [None] * 7
                view.parsemap(view.k)
                view.products = []
                res.filters[id] = view
            view.products.append(idp)
        for view in res.filters.itervalues():
            view.frow = [sql.fin('id_product', view.products)]
            view.count = len(view.products)
Пример #3
0
def f():
    f = ['ps.id_product = p.id', 'pr.id_prop = ps.id_prop1', 'pr.name = "ETA"']
    q = sql.get_f('pr.val1', ['prop_set ps', 'param pr'], f)
    q = '(%s)' % sql.limit(q, 0, 1)
    q = sql.update('eta', 'product p') % q
    db.execute(q)

    f = ['s.id_product = p.id', 'pr.id_prop = s.id_store', 'pr.name = "ETA"']
    q = sql.get_f('pr.val1', ['store s', 'param pr'], f)
    q = sql.order(q, 'pr.val1')
    q = '(%s)' % sql.limit(q, 0, 1)
    fu = sql.get_f('id', 'store s', 's.id_product = p.id')
    fu = sql.exists(fu)
    q = sql.update('eta', 'product p', filter = fu) % q
    db.execute(q)
    db.commit()
Пример #4
0
 def prepare(self, doc):
     gid = db.pgbytr("advert")
     t = ['prop p', 'sysid s']
     f = ['p.id = s.id', 'p.id_group = %s']
     q = sql.get_f('p.*, s.*', t, f)
     q = sql.order(q, 's.addate DESC')
     q = sql.limit(q, 0, 1)
     adverts = []
     for row in db.fetchobj(q, [gid]):
         row = classes.Prop(doc, row)
         adverts.append(row)
     self.add(adverts = adverts)
Пример #5
0
    def prepare(self, doc):
        if self('static'):
            pid = site.config('STATIC_PRODUCT')
        else:
            idl = site.config('RANDOM_PRODUCTS')
            idl = idl.split(",")
            idx = random.randint(0, len(idl) - 1)
            pid = idl[idx]
        pid = toint(pid)
        product = classes.Product(doc, pid)
        self.add(product = product)

        gid = db.pgbytr("news")
        t = ['prop p', 'sysid s']
        f = ['p.id = s.id', 'p.id_group = %s']
        q = sql.get_f('p.*, s.*', t, f)
        q = sql.order(q, 's.addate DESC')
        q = sql.limit(q, 0, 3)
        news = []
        for row in db.fetchobj(q, [gid]):
            row = classes.Prop(doc, row)
            row.new = newmarker(row.addate)
            news.append(row)
        self.add(news = news)

        gid = db.pgbytr("articles")
        t = ['prop p', 'sysid s']
        f = ['p.id = s.id', 'p.id_group = %s']
        q = sql.get_f('p.*, s.*', t, f)
        q = sql.order(q, 's.addate DESC')
        q = sql.limit(q, 0, 3)
        articles = []
        for row in db.fetchobj(q, [gid]):
            row = classes.Prop(doc, row)
            row.new = newmarker(row.addate)
            row.url = doc.geturl([MOD_ARTICLE, row.translit], alwaysext = True)
            articles.append(row)
        self.add(articles = articles)
Пример #6
0
    def issingle(self):
        if self.doc.cat.isfiche:
            return False

        f = []
        i = 1
        for k in self.doc.k:
            if k:
                f.append("ps.id_prop%d = %d" % (i, k.id))
            i += 1
        f.append('ps.pview = %s')
        q = sql.get_f('*', self.doc.tpropset, f)
        q = sql.limit(q, 0, 2)

        data = self.db.fetchobj(q, [self.pview])
        if len(data) == 1:
            klist      = self.doc.getprops(data[0])
            self.doc.k = self.doc.getk(klist)
            return True
        else:
            return False
Пример #7
0
    def __proddata(self, db, view, pids):
        doc = self.doc
        view = doc.view0
        fields = ['p.id', 'p.partno1']
        tables = [doc.tpropset]

        k = len(view.groups) + 1
        for i in xrange(1, k):
            tables.append('LEFT JOIN prop p%d ON ps.id_prop%d = p%d.id' % (i, i, i))
            fields.append('MAX(p%d.translit) AS t%d' % (i, i))

        tables = ["\n  ".join(tables)]

        fields += ['p.name, p.note, p.price, p.price_in, p.price_out, p.currency, p.eta']
        fields += ['img.id AS id_img']
        tables.append(doc.tproduct + ' LEFT JOIN ' + doc.timage + ' ON p.id_image = img.id')
        fq = sql.get_f(['ids.id_image'], 'image_deps ids', 'ids.id_obj = p.id')
        fq = sql.order(fq, 'ids.id')
        fq = sql.limit(fq, 0, 1)
        fq = '(%s) AS id_img_big' % fq
        fields.append(fq)

        fstore = sql.get_f('SUM(s.quantity)', 'store s', ['s.id_product = p.id', 's.quantity > 0'])
        fstore = '(%s) AS stored' % fstore
        fields += [fstore]

        f = [sql.fin('p.id', pids)]
        f.append("p.id = ps.id_product")
        f.append("ps.pview = '%s'" % view.pview)
        q = sql.get_f(fields, tables, f)
        q = sql.group(q, 'p.id')
        pl = {}
        iml = []
        for (key, row) in db.fetchdic(q).iteritems():
            param = []
            for prop in xrange(1, k):
                param.append(row['t' + str(prop)])
            row.param = param
            row.smallprice = doc('list_view') == "store"

            p = classes.Product(doc, row)
            p.hints = []
            p.rates = []
            p.view  = view
            pl[key] = p

            iml.append(p.id_img)
            iml.append(p.id_img_big)

        iml = notemptylist(iml)
        if iml:
            f = sql.fin('id', iml)
            q = sql.get_f(['id', 'name', 'type', 'width', 'height', 'size'], 'image', f)
            images = db.fetchdic(q)
        else:
            images = {}
        crclist = []

        for p in pl.itervalues():
            p.img = doc.getimage(images.get(p.id_img, None), p, p.param, crclist = crclist)
            p.img_big = doc.getimage(images.get(p.id_img_big, None), p, p.param, 1, crclist = crclist)

        img_addcrclist(db, crclist)

        return pl