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
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)
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()
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)
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)
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
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