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 )
def product_upload_image(key_id): product = Product.retrieve_by_id(key_id) if not product: return jsonify({"success": False, "msg": "Product id:%s not found" % key_id}) upload_files = get_uploads(request, "image") if len(upload_files): blob_info = upload_files[0] if blob_info.size and ProductImage.is_image_type(blob_info.content_type): img = ProductImage.create( blob_info.key(), size=blob_info.size, filename=os.path.basename(blob_info.filename.replace("\\", "/")), content_type=blob_info.content_type, ) if not len(product.images_list): img.is_master = True if img.get_cached_url(): product.images_list.append(img) product.put() else: file_size = blob_info.size content_type = blob_info.content_type blob_info.delete() return jsonify( {"success": False, "msg": "Unknown error. File size: %s. File type: %s" % (file_size, content_type)} ) else: return jsonify({"success": False, "msg": "Upload image not found."}) return jsonify({"success": True, "msg": "Upload image complete."})
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)
def get_product(key_id): product = Product.retrieve_by_id(key_id) if not product: return jsonify({"success": False, "msg": "Product with id:%s not found." % key_id}) if request.method == "DELETE": @check_write_permission def delete_product(): product.key.delete() return jsonify({"success": True, "msg": "Product id:%s deleted" % key_id}) return delete_product() if request.method == "PUT": @check_write_permission def put_product(): flag, model = load_data() if not flag: return model if model_populate(model, product) or param("force_save"): product.put() return jsonify({"success": True, "msg": "Product has been updated."}) else: return jsonify({"success": False, "msg": "Product has not been updated."}) return put_product() return jsonify_model_db(product)
def edit_images(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect('pages.catalogue') form = AddImageForm() add_img_url = blobstore.create_upload_url( url_for('admin.product.add_image', key_id=key_id)) return render_template('product/admin/images_edit.html', product=product, form=form, add_img_url=add_img_url)
def delete_image(key_id, img_uid): product = Product.retrieve_by_id(key_id) if not product: return redirect(url_for('admin.product.edit', key_id=key_id)) for i, img in enumerate(product.images_list): if img.uid == img_uid: img.delete_blob() del product.images_list[i] product.put() break return redirect(url_for('admin.product.edit_images', key_id=key_id))
def delete_image(key_id, img_uid): product = Product.retrieve_by_id(key_id) if not product: return redirect(url_for('admin.product.edit', key_id=key_id)) for i, img in enumerate(product.images_list): if img.uid == img_uid: img.delete_blob() del product.images_list[i] product.put() break return redirect(url_for('admin.product.edit_images', key_id=key_id))
def edit_images(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect('pages.catalogue') form = AddImageForm() add_img_url = blobstore.create_upload_url(url_for('admin.product.add_image', key_id=key_id)) return render_template( 'product/admin/images_edit.html', product=product, form=form, add_img_url=add_img_url )
def update_product(key_id, mem_key): res, obj = get_mem_obj(mem_key) if not res: return obj product = Product.retrieve_by_id(key_id) if not product: return jsonify({ 'success': False, 'msg': 'Product id:%s not found' % key_id }) model_populate(obj, product) product.put_async() return jsonify({'success': True, 'msg': 'Complete update of product'})
def update_product(key_id, mem_key): res, obj = get_mem_obj(mem_key) if not res: return obj product = Product.retrieve_by_id(key_id) if not product: return jsonify({ 'success': False, 'msg': 'Product id:%s not found' % key_id }) model_populate(obj, product) product.put_async() return jsonify({ 'success': True, 'msg': 'Complete update of product' })
def cart_view(): if request.method == 'POST' and 'order_delete' in request.form: clear_cart() return redirect(url_for('order.cart_view')) cart = session.get('cart', {}) price = cart.get('price', 0) products_count = cart.get('products_count', 0) un_products_count = cart.get('un_products_count', 0) cart_products = cart.get('products', {}) products = [] for product_key in cart_products.keys(): cart_product = cart_products.get(product_key, {}) product = Product.retrieve_by_id(product_key) if product: product.order = cart_product.get('count', 0) product.order_price = cart_product.get('price', 0) products.append(product) if request.method == 'POST' and 'order_accept': order = Order(customer=current_user.user_db.key) price = 0 for product in products: order_product = OrderProduct( name=product.name, img_url='%s=s100' % product.images[0] if product.images else '', product_key=product.key, count=product.order, price=product.order_price, ) price += product.order_price order.products.append(order_product) order.price = price order.put() clear_cart() return render_template( 'order/order_success.html', title=u'Предзаказ оформлен', order=order ) return render_template( 'order/cart.html', title=u'Оформление предзаказа', price=price, products_count=products_count, un_products_count=un_products_count, products=products )
def get_product(key_id): product = Product.retrieve_by_id(key_id) back_url = get_next_url() if not product: return redirect(url_for('pages.index')) category = CategoryProduct.query( CategoryProduct.product_key == product.key).get() if category: category = category.section_key.get() return render_template('product/get.html', html_class='product', title=product.strip_name, meta_keywords=product.meta_keywords or product.strip_name, product=product, category=category, back_url=back_url)
def get_product(key_id): product = Product.retrieve_by_id(key_id) back_url = get_next_url() if not product: return redirect(url_for('pages.index')) category = CategoryProduct.query(CategoryProduct.product_key == product.key).get() if category: category = category.section_key.get() return render_template( 'product/get.html', html_class='product', title=product.strip_name, meta_keywords=product.meta_keywords or product.strip_name, product=product, category=category, back_url=back_url )
def get_product(key_id): product = Product.retrieve_by_id(key_id) if not product: return jsonify({ 'success': False, 'msg': 'Product with id:%s not found.' % key_id }) if request.method == 'DELETE': @check_write_permission def delete_product(): product.key.delete() return jsonify({ 'success': True, 'msg': 'Product id:%s deleted' % key_id }) return delete_product() if request.method == 'PUT': @check_write_permission def put_product(): flag, model = load_data() if not flag: return model if model_populate(model, product) or param('force_save'): product.put() return jsonify({ 'success': True, 'msg': 'Product has been updated.' }) else: return jsonify({ 'success': False, 'msg': 'Product has not been updated.' }) return put_product() return jsonify_model_db(product)
def add_image(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect('pages.catalogue') upload_files = get_uploads(request, 'image') if len(upload_files): blob_info = upload_files[0] if blob_info.size and ProductImage.is_image_type(blob_info.content_type): img = ProductImage.create( blob_info.key(), size=blob_info.size, filename=os.path.basename(blob_info.filename.replace('\\','/')), content_type=blob_info.content_type) if not len(product.images_list): img.is_master = True if img.get_cached_url(): product.images_list.append(img) product.put() else: blob_info.delete() return redirect(url_for('admin.product.edit_images', key_id=key_id))
def product_upload_image(key_id): product = Product.retrieve_by_id(key_id) if not product: return jsonify({ 'success': False, 'msg': 'Product id:%s not found' % key_id }) upload_files = get_uploads(request, 'image') if len(upload_files): blob_info = upload_files[0] if blob_info.size and \ ProductImage.is_image_type(blob_info.content_type): img = ProductImage.create(blob_info.key(), size=blob_info.size, filename=os.path.basename( blob_info.filename.replace( '\\', '/')), content_type=blob_info.content_type) if not len(product.images_list): img.is_master = True if img.get_cached_url(): product.images_list.append(img) product.put() else: file_size = blob_info.size content_type = blob_info.content_type blob_info.delete() return jsonify({ 'success': False, 'msg': "Unknown error. File size: %s. File type: %s" % (file_size, content_type) }) else: return jsonify({'success': False, 'msg': 'Upload image not found.'}) return jsonify({'success': True, 'msg': 'Upload image complete.'})
def product_json(): key_id = param('id') id_1c = param('id_1c') if not key_id and not id_1c: raise ApiException( 'Invalid request: "id" or "id_1c" params not found.') if key_id is not None and id_1c is not None: raise ApiException('Invalid request: "id" and "id_1c" together.') product = None if key_id: product = Product.retrieve_by_id(key_id) if id_1c: product = Product.query(Product.id_1c == id_1c).get() if not product: if key_id: raise ApiException('Product with "%s" == %s not found' % ('id', key_id), status=404) raise ApiException('Product with "%s" == %s not found' % ('id_1c', id_1c), status=404) return jsonify_model_db(product)
def add_image(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect('pages.catalogue') upload_files = get_uploads(request, 'image') if len(upload_files): blob_info = upload_files[0] if blob_info.size and ProductImage.is_image_type( blob_info.content_type): img = ProductImage.create(blob_info.key(), size=blob_info.size, filename=os.path.basename( blob_info.filename.replace( '\\', '/')), content_type=blob_info.content_type) if not len(product.images_list): img.is_master = True if img.get_cached_url(): product.images_list.append(img) product.put() else: blob_info.delete() return redirect(url_for('admin.product.edit_images', key_id=key_id))
def get_order_box(key_id): store_links = StoreLink.query() if current_user.id <= 0: return render_template('order/login_require_box.html', store_links=store_links) if not current_user.is_order_box: return render_template('order/customer_require_box.html', store_links=store_links) product = Product.retrieve_by_id(key_id) if not product.is_available: return render_template('order/no_available_box.html', store_links=store_links) cart = session.get('cart', {}) products = cart.get('products', {}) order_product = products.get(key_id, {}) order_product_count = order_product.get('count', 0) order_product_price = order_product.get('price', 0) if request.method == 'POST' and 'order_clear' in request.form: if key_id in products: del products[key_id] cart['products'] = products cart['price'] = cart.get('price', order_product_price) - order_product_price session['count'] = cart.get('count', order_product_count) - order_product_count session['cart'] = cart return redirect(url_for('order.get_order_box', key_id=key_id)) order_product = products.get(key_id, {}) order_product_count = order_product.get('count', 0) order_product_price = order_product.get('price', 0) if order_product_count: form = OrderForm(count=order_product_count) form.count.description=\ u'В предзакаезе %s шт. данного товара на сумму %s рублей. Введите новое количество заказываемого товара.' \ % (order_product_count, order_product_price) change = True else: form = OrderForm() change = False count=0 if form.validate_on_submit(): count = form.count.data if product: price = product.price_trade * count cart['price'] = cart.get('price', order_product_price) - order_product_price + price cart['products_count'] = cart.get('products_count', order_product_count) - order_product_count + count order_product['count'] = order_product_count = count order_product['price'] = order_product_price = order_product['count'] * product.price_trade products[key_id] = order_product cart['products']=products cart['un_products_count'] = len(products) session['cart'] = cart if count: change = True form.count.description=\ u'В предзакаезе %s шт. данного товара на сумму %s рублей. Введите новое количество заказываемого товара.' \ % (order_product_count, order_product_price) return render_template( 'order/order_box.html', form=form, url=url_for('order.get_order_box', key_id=key_id), count=count, change=change, order_product_count=order_product_count, order_product_price=order_product_price, store_links=store_links )