def list_orders(request): from libs.sites.sites import get_full_docs db = request.db # web_order = db.doc.find({'doc_type':'web_order'}) # web_order_ware = db.doc.find({'doc_type':'web_order_ware'}) web_order = get_full_docs(db.doc.find({'doc_type':'des:web_order'}).limit(60).sort('doc.date', -1)) web_order_ware = get_full_docs(db.doc.find({'doc_type':'des:web_order_ware'}).limit(60).sort('doc.date', -1)) ware = get_full_docs(db.doc.find({'doc_type':'des:ware'}).limit(60).sort('doc.date', -1)) return templ('libs.shop:list_orders', request, dict(web_order = web_order, web_order_ware = web_order_ware, ware=ware))
def ware_page(request, doc_id): u = urlparse(request.url) url = u.scheme + '://' + u.hostname + u.path data_tree = [] from libs.sites.sites import get_pagination, get_full_doc, get_full_docs db = request.db doc = get_full_doc(doc_id, img_ctr=4) req_attr = db.doc.find({'doc_type': 'des:ware_attr', 'owner': doc['_id']}) ware_attr = get_full_docs( db.doc.find({ 'doc_type': 'des:ware_attr', 'owner': doc['_id'] })) proc_id = doc['proc_id'] title = ct(doc['doc']['title']) if 'title' in doc['doc'] else '' cls = doc['doc']['class'] req = db.doc.find({ 'doc_type': 'des:ware', '_id': { '$ne': doc['_id'] }, 'doc.class': cls }).limit(6) similar = get_full_docs(req) url1 = url seo = db.doc.find_one({'doc.alias': 'ware_page_seo'}, { 'doc.description': 1, 'doc.tags': 1, 'doc.body': 1, 'doc.footer': 1, 'doc.add_title': 1 }) # if seo: # seo = seo # else: seo = '' return templ( 'ware_page', request, dict(doc=doc, url=url1, doc_id=doc_id, proc_id=proc_id, similar=similar, seo=seo, tree=data_tree, page_title=title, ware_attr=ware_attr)) #news_map=news_map, captcha=raw, hash=hash,
def list_class(request, cls): """ показывает список вложеных категорий и товаров для категорий """ from libs.sites.sites import get_pagination, get_full_docs, get_curr_img, get_full_doc from libs.files.files import get_nf db = request.db; clss = [] parent_id = db.doc.find_one({'doc_type':'des:ware_class', 'doc.alias':cls}) for doc in db.doc.find({'doc_type':'des:ware_class', 'parent':parent_id['_id']}).sort('doc.date', -1): proc_id = doc['doc_type'] d_img = doc['default_img'] if 'default_img' in doc and doc['default_img'] else None attachment = get_nf(proc_id, doc['_id'], 1) data = doc['doc'] try: count = count_ware(doc['_id']) except: count='1' full_doc = {"_id":doc['_id'], "id": doc['_id'], 'count':count, "doc": data, "att": attachment, "img":get_curr_img(doc, attachment), 'default_img':d_img, 'proc_id':proc_id} clss.append(full_doc) pages= '' docs = get_full_docs(db.doc.find({'doc_type':'des:ware', 'doc.class':parent_id['_id']}).sort('doc.date', -1)) # docs = get_full_docs(req).sort('doc.date', -1) filter = get_filters(parent_id['_id']) # filter = get_ware_cls(cls) parent_doc = get_full_doc(parent_id['_id']) # seo = db.doc.find_one({'doc.alias':'class_seo'}, {'doc.title':1, 'doc.tags':1, 'doc.body':1, 'doc.footer':1, 'doc.add_title':1 }) seo = db.doc.find_one({'_id':parent_id['_id']}, {'doc.description':1, 'doc.tags':1, 'doc.footer':1 }) # seo = seo if 'doc' in seo else '' return templ('list_class', request, dict(cls_docs = clss, cls=cls, docs = docs, proc_id='des:ware', pages = pages, path=get_navigate(parent_id['_id']), parent_doc=parent_doc, filter=filter, seo=seo) )
def list_ware_cls(request, full=False): """ получение колва докуентов Для каждого класса находим сколько в нем документов Назначаем их кол-во всем его родителям приплюсовыванием :param выводить с дополнительной информацией типа картинок или просто названия, с доп. информацией выводится олько для главной """ db = request.db docs = [ res for res in db.doc.find({ 'doc_type': 'des:ware_class' }, { 'doc.title.ru': 1, 'doc.alias': 1, 'parent': 1, 'child': 1 }).sort('doc.date', -1) ] # docs = [res for res in db.doc.find({'doc_type':'des:ware_class'}).sort('doc.date', -1) ] if full: docs = [ res for res in db.doc.find({ 'doc_type': 'des:ware_class' }).sort('doc.date', -1) ] from libs.sites.sites import get_full_docs docs = get_full_docs(docs) return form_tree_(docs)
def tree_data(request, proc_id, owner): """ Берет из базы данные формирует из них json и возвращает в нужный шаблон""" # proc_id = первый раз сom:des:obj doc = get_doc_tree(request, owner, proc_id) proc_id = doc['_id'] def translate_(branch): new_children = [] branch['title'] = ct(request, branch['title']) branch['descr'] = ct(request, branch['descr']) if 'descr' in branch else '' for child in branch['children']: new_children.append(translate_(child)) branch['children'] = new_children return branch docs = [ res for res in request.db.doc.find({ 'doc_type': 'des:comments', 'doc.owner': owner }).sort('doc.date', -1) ] from libs.sites.sites import get_full_docs docs = get_full_docs(request, docs) value = form_tree_comm(request, docs) # value = translate_(form_tree(db.tree.find_one({'_id':proc_id}))) return response_json(request, { "result": "ok", "content": value, "proc_id": proc_id })
def set_filters(request, cls, filters): db = request.db url = filters[1:] url = url.split(';') docs=[]; cond=[]; ds = {}; attr = []; data = [] for res in url: res = res.replace('%20', ' ') aaa = res.split('='); key = aaa[0]; val = aaa[1] if key in ds: if type(ds[key]) == list: ds[key].append(val) else: ds[key] = [ds[key], val] else: ds.update({key:val}) for res in ds: attr.append(res) for res in ds.items(): if type(res[1]) == list: pr = {'doc.title.ru':res[0], 'doc.attr_val.ru':{'$in':res[1]}} else: pr = {'doc.title.ru':res[0], 'doc.attr_val.ru':res[1]} docs.append(pr) cursor = db.doc.aggregate([ { '$match' : { 'doc_type' : "des:ware_attr", 'doc.class':cls, '$or': docs} }, { '$group' : { '_id': "$owner", "attr": { '$push': "$doc.title.ru" } } }, { '$match' : { "attr": { '$all': attr } } }, { '$project': {"_id":1 } } ]) for res in cursor: cond.append(res) if not len(cond): return None from libs.sites.sites import get_full_docs docs = get_full_docs(db.doc.find({ '$or':cond }).sort('doc.date', -1)) return docs
def set_filters(request, cls, filters): db = request.db url = filters[1:] url = url.split(';') docs = [] cond = [] ds = {} attr = [] data = [] for res in url: res = res.replace('%20', ' ') aaa = res.split('=') key = aaa[0] val = aaa[1] if key in ds: if type(ds[key]) == list: ds[key].append(val) else: ds[key] = [ds[key], val] else: ds.update({key: val}) for res in ds: attr.append(res) for res in ds.items(): if type(res[1]) == list: pr = {'doc.title.ru': res[0], 'doc.attr_val.ru': {'$in': res[1]}} else: pr = {'doc.title.ru': res[0], 'doc.attr_val.ru': res[1]} docs.append(pr) cursor = db.doc.aggregate([{ '$match': { 'doc_type': "des:ware_attr", 'doc.class': cls, '$or': docs } }, { '$group': { '_id': "$owner", "attr": { '$push': "$doc.title.ru" } } }, { '$match': { "attr": { '$all': attr } } }, { '$project': { "_id": 1 } }]) for res in cursor: cond.append(res) if not len(cond): return None from libs.sites.sites import get_full_docs docs = get_full_docs(db.doc.find({'$or': cond}).sort('doc.date', -1)) return docs
def list_clips(request): """ show list clips """ if not user_has_permission('des:clips', 'edit') and not 'daoerp' in get_host(): return 'ERROR 404' db = request.db req = db.doc.find({'doc_type':'des:clips', 'head_field.user': get_current_user(True)}) from libs.sites.sites import get_full_docs dv = get_full_docs(req) return templ('libs.clip:list_clips.tpl', request, dict(docs=dv))
def list_orders(request): from libs.sites.sites import get_full_docs db = request.db # web_order = db.doc.find({'doc_type':'web_order'}) # web_order_ware = db.doc.find({'doc_type':'web_order_ware'}) web_order = get_full_docs( db.doc.find({ 'doc_type': 'des:web_order' }).limit(60).sort('doc.date', -1)) web_order_ware = get_full_docs( db.doc.find({ 'doc_type': 'des:web_order_ware' }).limit(60).sort('doc.date', -1)) ware = get_full_docs( db.doc.find({ 'doc_type': 'des:ware' }).limit(60).sort('doc.date', -1)) return templ( 'libs.shop:list_orders', request, dict(web_order=web_order, web_order_ware=web_order_ware, ware=ware))
def list_ware(request, cls): """ вызывается для показа списка товаров """ #ware_class_cat-справочник где хранятся категории которые относятся к классу ( класс-смартфон у него категория диагональ экрана ) # cats = [res['_id'] for res in db.doc.find({'doc_type':'ware_class_cat'})] cond = {'doc_type':'des:ware', 'doc.class': cls, 'doc.pub':'true'} if request.method == 'POST': cond.update(ware_filter(get_post('cat', []))) # cond = {'attr.diagonal: {$in: [15, 17]}} from libs.sites.sites import get_pagination, get_full_docs pages, req = get_pagination(cond) sort = ('doc.date', -1) if sort: req.sort(*sort) dv = get_full_docs(req) filter = get_ware_cls(cls) return templ('libs.shop:list_ware', request, dict(cls = cls, docs = dv, proc_id='des:ware', pages = pages, filter=filter) )
def ware_page(request, doc_id): u = urlparse(request.url) url = u.scheme + '://' + u.hostname + u.path data_tree = [] from libs.sites.sites import get_pagination, get_full_doc, get_full_docs db = request.db doc = get_full_doc(doc_id, img_ctr=4) req_attr = db.doc.find({'doc_type':'des:ware_attr', 'owner':doc['_id']}) ware_attr = get_full_docs( db.doc.find({'doc_type':'des:ware_attr', 'owner':doc['_id']}) ) proc_id = doc['proc_id'] title = ct(doc['doc']['title']) if 'title' in doc['doc'] else '' cls = doc['doc']['class'] req = db.doc.find( {'doc_type':'des:ware', '_id':{'$ne':doc['_id']}, 'doc.class':cls} ).limit(6) similar = get_full_docs( req ) url1 = url seo = db.doc.find_one({'doc.alias':'ware_page_seo'}, {'doc.description':1, 'doc.tags':1, 'doc.body':1, 'doc.footer':1, 'doc.add_title':1}) # if seo: # seo = seo # else: seo = '' return templ('ware_page', request, dict(doc = doc, url = url1, doc_id=doc_id, proc_id=proc_id, similar = similar, seo=seo, tree = data_tree, page_title=title, ware_attr=ware_attr)) #news_map=news_map, captcha=raw, hash=hash,
def list_ware_cls(request, full=False): """ получение колва докуентов Для каждого класса находим сколько в нем документов Назначаем их кол-во всем его родителям приплюсовыванием :param выводить с дополнительной информацией типа картинок или просто названия, с доп. информацией выводится олько для главной """ db = request.db docs = [res for res in db.doc.find({'doc_type':'des:ware_class'}, {'doc.title.ru':1, 'doc.alias':1, 'parent':1, 'child':1 }).sort('doc.date', -1) ] # docs = [res for res in db.doc.find({'doc_type':'des:ware_class'}).sort('doc.date', -1) ] if full: docs = [res for res in db.doc.find({'doc_type':'des:ware_class'}).sort('doc.date', -1) ] from libs.sites.sites import get_full_docs docs = get_full_docs(docs) return form_tree_( docs )
def list_ware(request, cls): """ вызывается для показа списка товаров """ #ware_class_cat-справочник где хранятся категории которые относятся к классу ( класс-смартфон у него категория диагональ экрана ) # cats = [res['_id'] for res in db.doc.find({'doc_type':'ware_class_cat'})] cond = {'doc_type': 'des:ware', 'doc.class': cls, 'doc.pub': 'true'} if request.method == 'POST': cond.update(ware_filter(get_post( 'cat', []))) # cond = {'attr.diagonal: {$in: [15, 17]}} from libs.sites.sites import get_pagination, get_full_docs pages, req = get_pagination(cond) sort = ('doc.date', -1) if sort: req.sort(*sort) dv = get_full_docs(req) filter = get_ware_cls(cls) return templ( 'libs.shop:list_ware', request, dict(cls=cls, docs=dv, proc_id='des:ware', pages=pages, filter=filter))
def tree_data(request, proc_id, owner): """ Берет из базы данные формирует из них json и возвращает в нужный шаблон""" # proc_id = первый раз сom:des:obj doc = get_doc_tree(request, owner, proc_id) proc_id = doc['_id'] def translate_(branch): new_children = [] branch['title'] = ct(request, branch['title']) branch['descr'] = ct(request, branch['descr'] )if 'descr' in branch else '' for child in branch['children']: new_children.append(translate_(child)) branch['children'] = new_children return branch docs = [res for res in request.db.doc.find({'doc_type':'des:comments', 'doc.owner':owner}).sort('doc.date', -1) ] from libs.sites.sites import get_full_docs docs = get_full_docs(request, docs) value = form_tree_comm(request, docs ) # value = translate_(form_tree(db.tree.find_one({'_id':proc_id}))) return response_json(request, {"result":"ok", "content":value, "proc_id":proc_id})
def user(request, u): db = request.db uu = u u_id = db.doc.find_one({'doc_type':'des:users', '_id':'user:'******'doc_type':'des:users', 'doc.nickname':uu}) u_name = db.doc.find_one({'doc_type':'des:users', 'doc.name.ru':uu}) if u_id: u = u_id elif u_alias: u = u_alias elif u_name: u = u_name dv = get_full_doc( u['_id'] ) req = db.doc.find({'doc_type':'des:obj', 'doc.user':u['_id']}) docs = get_full_docs(req) friends = json.loads(json.dumps(u['friends'])) if 'friends' in u else [] followers = json.loads(json.dumps(u['followers'])) if 'followers' in u else [] js_friends = json.dumps(u['friends']) if 'friends' in u else [] js_followers = json.dumps(u['followers']) if 'followers' in u else [] return templ('user_page', request, dict( doc = dv, docs=docs, doc_id=u['_id'], user_name=ct( u['doc']['name'] ), proc_id='des:users', friends=friends, followers=followers, js_friends=js_friends, js_followers=js_followers) )
def list_class(request, cls): """ показывает список вложеных категорий и товаров для категорий """ from libs.sites.sites import get_pagination, get_full_docs, get_curr_img, get_full_doc from libs.files.files import get_nf db = request.db clss = [] parent_id = db.doc.find_one({ 'doc_type': 'des:ware_class', 'doc.alias': cls }) for doc in db.doc.find({ 'doc_type': 'des:ware_class', 'parent': parent_id['_id'] }).sort('doc.date', -1): proc_id = doc['doc_type'] d_img = doc['default_img'] if 'default_img' in doc and doc[ 'default_img'] else None attachment = get_nf(proc_id, doc['_id'], 1) data = doc['doc'] try: count = count_ware(doc['_id']) except: count = '1' full_doc = { "_id": doc['_id'], "id": doc['_id'], 'count': count, "doc": data, "att": attachment, "img": get_curr_img(doc, attachment), 'default_img': d_img, 'proc_id': proc_id } clss.append(full_doc) pages = '' docs = get_full_docs( db.doc.find({ 'doc_type': 'des:ware', 'doc.class': parent_id['_id'] }).sort('doc.date', -1)) # docs = get_full_docs(req).sort('doc.date', -1) filter = get_filters(parent_id['_id']) # filter = get_ware_cls(cls) parent_doc = get_full_doc(parent_id['_id']) # seo = db.doc.find_one({'doc.alias':'class_seo'}, {'doc.title':1, 'doc.tags':1, 'doc.body':1, 'doc.footer':1, 'doc.add_title':1 }) seo = db.doc.find_one({'_id': parent_id['_id']}, { 'doc.description': 1, 'doc.tags': 1, 'doc.footer': 1 }) # seo = seo if 'doc' in seo else '' return templ( 'list_class', request, dict(cls_docs=clss, cls=cls, docs=docs, proc_id='des:ware', pages=pages, path=get_navigate(parent_id['_id']), parent_doc=parent_doc, filter=filter, seo=seo))
def list_users(request): req = request.db.doc.find({'doc_type':'des:users'}) docs = get_full_docs(req) return templ('list_users', request, dict(docs=docs))