Esempio n. 1
0
def categories():
    categories = Category.query().order(Category.name)
    form = CategoryForm()
    if form.validate_on_submit():
        new_cat = Category()
        form.populate_obj(new_cat)
        new_cat.put()
        return redirect(url_for('admin.product.categories'))
    return render_template('product/admin/category/all.html',
                           categories=categories,
                           form=form)
Esempio n. 2
0
def categories():
    categories = Category.query().order(Category.name)
    form = CategoryForm()
    if form.validate_on_submit():
        new_cat = Category()
        form.populate_obj(new_cat)
        new_cat.put()
        return redirect(url_for('admin.product.categories'))
    return render_template(
        'product/admin/category/all.html',
        categories=categories,
        form=form
    )
Esempio n. 3
0
def search_in_category(name, id_1c, parent=None, ):
    try:
        cat = Category.objects.get(title=name, id_1c=id_1c, parent=parent)
        return cat
    except Category.DoesNotExist:
        cat = Category()
        cat.title = name
        if parent:
            cat.parent = parent
        cat.id_1c = id_1c
        # cat.save()
        return None
    except Category.MultipleObjectsReturned:
        cats = Category.objects.filter(title=name, id_1c=id_1c, parent=parent)
        if len(cats) > 1:
            raise 'MultiCat'
        elif len(cats) == 1:
            return cats[0]
        elif len(cats) == 0:
            try:
                cat = Category.objects.get(title=name, parent=parent)
            except Category.DoesNotExist:
                cat = Category()
                cat.title = name
                if parent:
                    cat.parent = parent
                cat.id_1c = id_1c
                # cat.save()
            return None
Esempio n. 4
0
def category(key_id, page):
    view_type = util.param('product_view_type', int)
    session_view_type = flask.session.get('product_view_type', None)
    if session_view_type is None or session_view_type not in PRODUCT_VIEW_TYPES.itervalues(
    ):
        if view_type in PRODUCT_VIEW_TYPES.itervalues():
            flask.session['product_view_type'] = view_type
        else:
            flask.session['product_view_type'] = PRODUCT_VIEW_TYPES['tile']
    else:
        if view_type in PRODUCT_VIEW_TYPES.itervalues():
            flask.session['product_view_type'] = view_type
    category_obj = Category.retrieve_by_id(key_id)
    if not category_obj:
        return flask.redirect(flask.url_for('pages.index'))
    products = Product\
        .query(Product.category == category_obj.name)\
        .order(-Product.leftovers_on_way)\
        .order(-Product.leftovers)
    products = get_paginator(products, page)
    return flask.render_template('pages/category.html',
                                 title=u'{} "{}"'.format(
                                     u'Категория', category_obj.name),
                                 category=category_obj,
                                 products=products,
                                 key_id=key_id)
Esempio n. 5
0
def category(key_id, page):
    view_type = util.param('product_view_type', int)
    session_view_type = flask.session.get('product_view_type', None)
    if session_view_type is None or session_view_type not in PRODUCT_VIEW_TYPES.itervalues():
        if view_type in PRODUCT_VIEW_TYPES.itervalues():
            flask.session['product_view_type'] = view_type
        else:
            flask.session['product_view_type'] = PRODUCT_VIEW_TYPES['tile']
    else:
        if view_type in PRODUCT_VIEW_TYPES.itervalues():
            flask.session['product_view_type'] = view_type
    category_obj = Category.retrieve_by_id(key_id)
    if not category_obj:
        return flask.redirect(flask.url_for(
            'pages.index'
        ))
    products = Product\
        .query(Product.category == category_obj.name)\
        .order(-Product.leftovers_on_way)\
        .order(-Product.leftovers)
    products = get_paginator(products, page)
    return flask.render_template(
        'pages/category.html',
        title=u'{} "{}"'.format(u'Категория', category_obj.name),
        category=category_obj,
        products=products,
        key_id=key_id
    )
Esempio n. 6
0
def edit(key_id):
    product = Product.retrieve_by_id(key_id)
    if not product:
        return redirect(url_for('admin.config_update'))
    if request.method == 'POST' and 'delete_product' in request.form:
        category = None
        if product.category:
            category = Category.exist(product.category)
        product.key.delete()
        if category:
            return redirect(url_for('pages.category',
                                    key_id=category.key.id()))
        else:
            return redirect('pages.catalogue')
    form = ProductForm(obj=product)
    if form.validate_on_submit():
        form.populate_obj(product)
        product.put()
        if 'edit_images' in request.form:
            return redirect(url_for('admin.product.edit_images',
                                    key_id=key_id))
        return redirect(url_for('product.get_product', key_id=key_id))
    return render_template('product/admin/edit.html',
                           product=product,
                           form=form)
Esempio n. 7
0
def edit(key_id):
    product = Product.retrieve_by_id(key_id)
    if not product:
        return redirect(url_for('admin.config_update'))
    if request.method == 'POST' and 'delete_product' in request.form:
        category = None
        if product.category:
            category = Category.exist(product.category)
        product.key.delete()
        if category:
            return redirect(url_for('pages.category', key_id=category.key.id()))
        else:
            return redirect('pages.catalogue')
    form = ProductForm(obj=product)
    if form.validate_on_submit():
        form.populate_obj(product)
        product.put()
        if 'edit_images' in request.form:
            return redirect(url_for('admin.product.edit_images', key_id=key_id))
        return redirect(url_for('product.get_product', key_id=key_id))
    return render_template(
        'product/admin/edit.html',
        product=product,
        form=form
    )
Esempio n. 8
0
    def handle(self, *args, **options):

        self.clean()

        categories = loadFromJSON('categories')
        for category in categories:
            new_category = Category(**category)
            new_category.save()

        products = loadFromJSON('products')

        for product in products:
            product['category'] = Category.objects.get(
                name=product["category"])
            new_product = Product(**product)
            new_product.save()
Esempio n. 9
0
def index():
    available_product = Product.query(Product.is_available == True,
                                      Product.id_1c != '').get()
    available_category = Category.query().get()
    return render_template('api/v2/index.html',
                           available_product=available_product,
                           available_category=available_category)
Esempio n. 10
0
def search_categories(query):
    categories_q = Category.query().fetch(projection=[Category.name])
    categories_keys = [
        c.key for c in categories_q if query in c.name.lower()
    ]
    if categories_keys:
        return ndb.get_multi(categories_keys)
    return []
Esempio n. 11
0
 def validate(self, is_edit=False):
     rv = wtf.Form.validate(self)
     if not rv:
         return False
     name = self.name.data.lower()
     check_cat = Category.query(Category.name_lowercase == name).count()
     if check_cat and not is_edit:
         self.name.errors.append(
             u'Название категории должно быть уникальным')
         return False
     return True
Esempio n. 12
0
 def validate(self, is_edit=False):
     rv = wtf.Form.validate(self)
     if not rv:
         return False
     name = self.name.data.lower()
     check_cat = Category.query(Category.name_lowercase == name).count()
     if check_cat and not is_edit:
         self.name.errors.append(
             u'Название категории должно быть уникальным')
         return False
     return True
Esempio n. 13
0
def get_aside(active='category', key_id=None):
    sections = []
    if active == 'category':
        sections = Category.query(Category.is_public == True).order(
            Category.name)
        sections = [s for s in sections if s.products_count]
    if key_id:
        key_id = int(key_id)
    return render_template('aside.html',
                           active=active,
                           sections=sections,
                           key_id=key_id)
Esempio n. 14
0
def categories_stat():
    categories_obj = list(Category.query().order(Category.name))
    categories = []
    for c in categories_obj:
        if c.products_count:
            categories.append(c)
    categories_count = len(categories)

    if categories_count:
        categories_count = pytils.numeral.get_plural(
            categories_count, (u'категории', u'категорий', u'категорий'))
    return categories, categories_count
Esempio n. 15
0
def category_json():
    key_id = param('id')
    if not key_id:
        raise ApiException('Invalid request: category "id" not found.')
    category = Category.retrieve_by_id(key_id)
    if not category:
        raise ApiException(
            'Invalid request: Category with "id" == %s not found' % key_id)
    id_1c = param('id_1c')
    if id_1c is not None:
        category._PROPERTIES = category._PROPERTIES.union(
            ['products_by_id_1c'])
        return jsonify_model_db(category)
    return jsonify_model_db(category)
Esempio n. 16
0
def categories_stat():
    categories_obj = list(Category.query().order(Category.name))
    categories = []
    for c in categories_obj:
        if c.products_count:
            categories.append(c)
    categories_count = len(categories)

    if categories_count:
        categories_count = pytils.numeral.get_plural(
            categories_count,
            (u'категории', u'категорий', u'категорий')
        )
    return categories, categories_count
Esempio n. 17
0
def sitemap_xml():
    products = memcache.get('sitemap_xml')
    if not products:
        products = Product.query().fetch(keys_only=True)
        memcache.add('sitemap_xml', products, SITEMAP_XML_TIMEOUT)
    categories = memcache.get('sitemap_xml_categories')
    if not categories:
        categories = Category.query().fetch(keys_only=True)
        memcache.add('sitemap_xml_categories', categories, SITEMAP_XML_TIMEOUT)
    response = flask.make_response(
        flask.render_template('pages/sitemap.xml',
                              products=products,
                              categories=categories))
    response.headers['Content-Type'] = 'text/xml; charset=utf-8'
    return response
Esempio n. 18
0
def category_edit(key_id):
    category = Category.retrieve_by_id(key_id)
    if not category:
        return redirect(url_for('admin.product.categories'))
    form = CategoryForm(obj=category)
    if request.method == 'POST' and 'delete_category' in request.form:
        category.key.delete()
        return redirect(url_for('admin.product.categories'))
    if form.is_submitted() and form.validate(is_edit=True):
        form.populate_obj(category)
        category.put()
        return redirect(url_for('admin.product.categories'))
    return render_template('product/admin/category/edit.html',
                           category=category,
                           form=form)
Esempio n. 19
0
def get_aside(active='category', key_id=None):
    sections=[]
    if active == 'category':
        sections = Category.query(
            Category.is_public == True
        ).order(Category.name)
        sections = [s for s in sections if s.products_count]
    if key_id:
        key_id = int(key_id)
    return render_template(
        'aside.html',
        active=active,
        sections=sections,
        key_id=key_id
    )
Esempio n. 20
0
def category_edit(key_id):
    category = Category.retrieve_by_id(key_id)
    if not category:
        return redirect(url_for('admin.product.categories'))
    form = CategoryForm(obj=category)
    if request.method == 'POST' and 'delete_category' in request.form:
        category.key.delete()
        return redirect(url_for('admin.product.categories'))
    if form.is_submitted() and form.validate(is_edit=True):
        form.populate_obj(category)
        category.put()
        return redirect(url_for('admin.product.categories'))
    return render_template(
        'product/admin/category/edit.html',
        category=category,
        form=form
    )
Esempio n. 21
0
def sitemap_xml():
    products = memcache.get('sitemap_xml')
    if not products:
        products = Product.query().fetch(keys_only=True)
        memcache.add('sitemap_xml', products, SITEMAP_XML_TIMEOUT)
    categories = memcache.get('sitemap_xml_categories')
    if not categories:
        categories = Category.query().fetch(keys_only=True)
        memcache.add('sitemap_xml_categories', categories, SITEMAP_XML_TIMEOUT)
    response = flask.make_response(
        flask.render_template(
            'pages/sitemap.xml',
            products=products,
            categories=categories)
    )
    response.headers['Content-Type'] = 'text/xml; charset=utf-8'
    return response
Esempio n. 22
0
def search_categories(query):
    categories_q = Category.query().fetch(projection=[Category.name])
    categories_keys = [c.key for c in categories_q if query in c.name.lower()]
    if categories_keys:
        return ndb.get_multi(categories_keys)
    return []
Esempio n. 23
0
def categories_count_json():
    return jsonify_success(Category.query().count())
Esempio n. 24
0
def categories_json():
    categories = [key.id() for key in Category.query().fetch(keys_only=True)]
    return jsonify_success(categories)