def ware_delete(warehouseId): try: get_db('warehouses').delete_one({"_id": ObjectId(warehouseId)}) except (Exception) as ex: return jsonify(status={'success': False}) else: return jsonify(status={'success': True})
def prod_delete(productId): try: get_db("products").delete_one({"_id": ObjectId(productId)}) except (Exception) as ex: return jsonify(status={'success': False}) else: return jsonify(status={'success': True})
def prod_edit(): products = get_db("products") product_id = request.form.get('productId') # if product_id := request.form.get('productId'): # product = products.find_one({"_id": ObjectId(product_id)}, {"_id": 0}) # return jsonify(data=product) # else: product_document = { 'name': request.form.get('name'), 'description': request.form.get('description'), 'category': request.form.get('category') } image_file = request.files.get('image') if image_file: filename = secure_filename(image_file.filename) image_file.save( os.path.join(current_app.config['UPLOAD_FOLDER'], filename)) image_url = url_for('uploads', filename=filename) product_document['image'] = image_url try: products = get_db('products').update({ObjectId(product_id)}, {"$set": product_document}) except (Exception) as ex: return jsonify(status={'status': False}) else: return jsonify(status={'status': True})
def quantity_edit(): products = get_db('products') product_id = request.form.get('productId') warehouse_id = request.form.get('warehouseId') product_name = request.form.get('product-name') warehouse_name = request.form.get('warehouse-name') product_price = request.form.get('product-price') product_quantity = request.form.get('product-quantity') try: products.update_one( { "_id": ObjectId(product_id), 'warehouses': { "$elemMatch": { "_id": ObjectId(warehouse_id) } } }, { "$set": { "name": product_name, 'warehouses.$': { '_id': ObjectId(warehouse_id), 'name': warehouse_name, 'price': product_price, 'quantity': product_quantity } } }) except (Exception) as ex: return jsonify(status={'success': False}) else: return jsonify(status={'success': True})
def get_single_category(): with open('instance/categories.json', encoding='utf-8') as f: json_categories = json.load(f) db = get_db() products = list(db.products.find()) categories_of_single = {} for group in json_categories: if group['subcategories']: for item in group['subcategories']: categories_of_single[item['name']] = [] for thing in products: thing_category = thing['category'].split('/')[-1] if categories_of_single[thing_category]: pro_details = { "id": thing["_id"], "name": thing["name"], "product_category": thing_category } categories_of_single[thing_category].append(pro_details) else: categories_of_single[thing_category] = [] pro_details = { "id": thing["_id"], "name": thing["name"], "product_category": thing_category } categories_of_single[thing_category].append(pro_details) return categories_of_single
def admin_product(): db = get_db() prods = list(db.products.find()) categories = get_categories() return render_template('admin/products.html', products=prods, categories=categories)
def admin_quantity(): db = get_db() prods = list(db.products.find()) warehouses = db.warehouses.find() return render_template('admin/quantities.html', products=prods, warehouses=warehouses)
def order_details(order_id): order = get_db('orders').find_one({'_id': ObjectId(order_id)}, {'_id': 0}) # aggregate( # [ # { # '$match': {'_id': ObjectId(order_id)} # }, # { # '$lookup': { # 'from': 'products', # 'localField': 'purchasedProductsId', # 'foreignField': '_id', # 'as': 'purchasedProductsId' # } # }, # { # '$project': { # '_id': 0 # } # } # ] # ) # data = order # data[''] return jsonify(data=order)
def order_final(): if session["order_products"]: data = request.form purchasedProductsId = [] for item in session["order_products"]: pro = get_product(item['id']) purchasedProductsId.append({ "productId": ObjectId(pro["_id"]), "name": pro['name'], "warehouseName": pro['warehouse_name'], "count": item['number'], "price": { "$numberDecimal": pro['price'] } }) total_price = sum([ get_product(order['id'])['price'] * order['number'] for order in session["order_products"] ]) product_document = { "customerFirstName": data.get['first_name'], "customerLastName": data.get['last_name'], "customerCellPhoneNum": data.get['telephone'], "address": data.get['address'], "deliveryDate": { "$date": data.get['date'] }, "amount": { "$numberDecimal": total_price }, "date": current_app.config['TEHRAN_TZ'].localize(datetime.now()), 'purchasedProductsId': purchasedProductsId } try: get_db('orders').insert_one(product_document) except Exception as ex: return jsonify({'status': "fail", 'exception': ex}) else: session.pop('order_products', None) return jsonify({'status': "success"})
def ware_add(): warehouse_name = request.form.get('name') try: warehouse_added = get_db("warehouses").insert_one( {'name': warehouse_name}) except (Exception) as ex: return jsonify(status={'success': False}) else: return jsonify(status={'success': True}, data={'warehouseId': warehouse_added['_id']})
def get_product(product_id): db = get_db() return db.products.aggregate([{ '$match': { '_id': ObjectId(product_id) } }, { '$unwind': { 'path': '$warehouses', 'preserveNullAndEmptyArrays': True } }, { '$match': { 'warehouses.quantity': { '$gt': 0 } } }, { '$sort': { 'warehouses.price': pymongo.ASCENDING } }, { '$limit': 1 }, { '$group': { '_id': '$_id', 'name': { '$first': '$name' }, 'description': { '$first': '$description' }, 'category': { '$first': '$category' }, 'image': { '$first': '$image' }, 'warehouse_name': { '$first': '$warehouses.name' }, 'price': { '$first': '$warehouses.price' }, 'quantity': { '$first': '$warehouses.quantity' } } }])
def quantity_list(): products = get_db("products") quantities = products.aggregate([{ '$unwind': { 'path': '$warehouses', 'preserveNullAndEmptyArrays': False } }, { '$project': { '_id': 0, 'name': 1, 'warehouses': 1 } }]) return jsonify(data=list(quantities))
def quantity_delete(): product_id = request.args.get('product') warehouse_id = request.args.get('warehouse') products = get_db("products") try: products.update_one( {"_id": ObjectId(product_id)}, {"$pull": { "warehouses": { "_id": ObjectId(warehouse_id) } }}) except (Exception) as ex: return jsonify(status={'success': False}) else: return jsonify(status={'success': True})
def prod_upload(): products_collection = get_db('products') products_file = request.files.get('file') products_lines = products_file.read() product_keys = next(products_lines) products = [] for i, product_line in enumerate(products_lines): products.append({}) for elem, key in zip(product_line, product_keys.split(',')): products[i][key] = elem try: products_collection.insert_many(products) except (Exception) as ex: return jsonify(status={'success': False}) else: return jsonify(status={'success': True})
def ware_edit(): warehouses = get_db('warehouses') warehouse_id = request.form.get('warehouseId') warehouse_name = request.form.get('name') # if warehouse_id := request.form.get('warehouseId'): # warehouse = warehouses.find({"_id": ObjectId(warehouse_id)}) # return jsonify(data=warehouse) # else: try: warehouses.update_one({"_id": ObjectId(warehouse_id)}, {"$set": { "name": warehouse_name }}) except (Exception) as ex: return jsonify(status={'success': False}) else: return jsonify(status={'success': True})
def get_products_by_category(cat): db = get_db() return db.products.aggregate([{ '$unwind': { 'path': '$warehouses', 'preserveNullAndEmptyArrays': True } }, { '$match': { 'warehouses.quantity': { '$gt': 0 }, 'category': { '$regex': cat } } }, { '$group': { '_id': '$_id', 'name': { '$first': '$name' }, 'price': { '$min': '$warehouses.price' }, 'category': { '$first': '$category' }, 'description': { '$first': '$description' }, 'image': { '$first': '$image' }, 'date': { '$first': '$date' } } }, { '$sort': { 'date': pymongo.DESCENDING } }])
def quantity_add(): products = get_db('products') # product_id = request.form.get('productId') warehouse_name = request.form.get('warehouseName') product_name = request.form.get('productName') # warehouse_id = request.form.get('warehouse-id') product_price = request.form.get('price') product_quantity = request.form.get('quantity') try: products.update_one({"_id": ObjectId(product_id)}, { "$push": { 'warehouses': { '_id': ObjectId(warehouse_id), 'name': warehouse_name, 'price': product_price, 'quantity': product_quantity } } }) except (Exception) as ex: return jsonify(status={'success': False}) else: return jsonify(status={'success': True})
def prod_add(): image_file = request.files.get('image') if image_file: filename = secure_filename(image_file.filename) image_file.save( os.path.join(current_app.config['UPLOAD_FOLDER'], filename)) image_url = url_for('uploads', filename=filename) else: image_url = url_for('uploads', filename='default_product_image.jpg') product_document = { 'name': request.form.get('name'), 'description': request.form.get('description'), 'category': request.form.get('category'), 'date': current_app.config['TEHRAN_TZ'].localize(datetime.now()), 'image': image_url } try: product_added = get_db('products').insert_one(product_document) except (Exception) as ex: return jsonify(status={'status': False}) else: return jsonify(status={'status': True}, data={'productId': product_added['_id']})
def admin_orders(): """get somethings from database """ orders = get_db().orders.find() return render_template("admin/orders.html", orders=orders)
def admin_warehouse(): db = get_db() warehouses = db.warehouses.find() return render_template('admin/warehouses.html', warehouses=warehouses)
def prod_list(): products = list(get_db('products').find()) return jsonify(data=products)
def prod_details(product_id): product = get_db('products').find_one({'_id': ObjectId(product_id)}) return jsonify(data=product)
def order_list(): orders = list(get_db('orders').find()) return jsonify(orders)
def ware_list(): warehouses = list(get_db('warehouses').find()) return jsonify(data=warehouses)