def tag():
    if 'user' in session:
        user_id = session['user']['id']
        tag_count, verify_count = get_tag_count(user_id)
        q = request.args.get('q')

        if (not session['is_admin']) and (q == 'verify' or q == '3-skips'):
            flash('Invalid credentials', 'error')
            return redirect(url_for('bp.login'))

        price_range_text_list = config.PRICE_RANGE_TEXT_LIST
        price_range_value_list = config.PRICE_RANGE_VALUE_LIST

        return render_template('tag_product.html',
                               vendors=get_vendors(),
                               available_cats=get_categories(),
                               available_cats1=get_categories(),
                               price_range_text_list=price_range_text_list,
                               price_range_value_list=price_range_value_list,
                               username=session['user']['name'],
                               tag_count=tag_count,
                               verify_count=verify_count,
                               q=q,
                               autoescape=False)
    else:
        return redirect(url_for('bp.login'))
def tag():
    if 'user' in session:
        user_id = session['user']['id']
        tag_count, verify_count = get_tag_count(user_id)
        q = request.args.get('q') 
        
        if (not session['is_admin']) and (q == 'verify' or q == '3-skips'):
            flash('Invalid credentials', 'error')
            return redirect(url_for('bp.login'))
        
        price_range_text_list = config.PRICE_RANGE_TEXT_LIST
        price_range_value_list = config.PRICE_RANGE_VALUE_LIST

        return render_template('tag_product.html',
                               vendors=get_vendors(),
                               available_cats=get_categories(),
                               available_cats1=get_categories(),
                               price_range_text_list=price_range_text_list,
                               price_range_value_list=price_range_value_list,
                               username=session['user']['name'],
                               tag_count=tag_count,
                               verify_count=verify_count,
                               q=q,
                               autoescape=False)
    else:
        return redirect(url_for('bp.login'))
def set_tags():
    posted_data = request.get_json()
    q = posted_data.pop('q', None)
    print('############posted_data###########', posted_data)
    id = posted_data.pop("id", None)
    user_id = session['user']['id']
    posted_data['tagged_by'] = user_id

    if posted_data['tags'] and (posted_data['is_dang']
                                or posted_data['is_xray']
                                or posted_data['is_dirty']):
        posted_data['done'] = True

    next_name = {}
    if 'category' in posted_data:
        next_name['category'] = posted_data.pop("category")
    if 'vendor' in posted_data:
        vendor = posted_data.pop("vendor")
        if vendor != 'All':
            next_name['vendor'] = vendor
    if 'price' in posted_data:
        next_name['price'] = ast.literal_eval(posted_data.pop('price'))

    undo = posted_data.pop("undo", None)
    if undo:
        next_name.clear()
        next_name['_id'] = ObjectId(id)

    elif posted_data.pop("is_skipped"):
        inc_skip_count(id)

    else:
        print('####id####data to be saved -- tagged -- ####', id, posted_data)
        db.products.update({'_id': ObjectId(id)}, {"$set": posted_data})
        inc_tag_count(user_id)

    #fetching next product tagging info
    tagging_info = get_product_tagging_details(next_name)

    if undo:
        db.products.update({'_id': ObjectId(id)}, {
            "$unset": {
                'is_dang': '',
                'is_dirty': '',
                'is_xray': '',
                'tags': '',
                'tagged_by': '',
                'epoch': '',
                'done': ''
            }
        })
        dcr_tag_count(user_id)

    tag_count, verify_count = get_tag_count(user_id)
    tagging_info['tag_count'] = tag_count
    tagging_info['verify_count'] = verify_count
    return json.dumps(tagging_info)
def get_tags():
    if 'user' in session:
        user_id = session['user']['id']
        tag_count, verify_count = get_tag_count(user_id)
        return render_template("tag_list.html",
                               tags=get_all_tags(),
                               username=session['user']['name'],
                               tag_count=tag_count,
                               verify_count=verify_count)
    else:
        return redirect(url_for('bp.login'))
def view_leaderboard():
    if 'user' in session:
        user_id = session['user']['id']
        tag_count, verify_count = get_tag_count(user_id)
        return render_template("leaderboard.html",
                               users=get_users(),
                               username=session['user']['name'],
                               tag_count=tag_count,
                               verify_count=verify_count)
    else:
        return redirect(url_for('bp.login'))
def get_tags():
    if 'user' in session:
        user_id = session['user']['id']
        tag_count, verify_count = get_tag_count(user_id)
        return render_template("tag_list.html",
                               tags=get_all_tags(),
                               username=session['user']['name'],
                               tag_count=tag_count,
                               verify_count=verify_count)
    else:
        return redirect(url_for('bp.login'))
def view_leaderboard():
    if 'user' in session:
        user_id = session['user']['id']
        tag_count, verify_count = get_tag_count(user_id)
        return render_template("leaderboard.html",
                               users=get_users(),
                               username=session['user']['name'],
                               tag_count=tag_count,
                               verify_count=verify_count)
    else:
        return redirect(url_for('bp.login'))
def set_verified_tags():
    posted_data = request.get_json()
    q = posted_data.pop('q', None)
    print('############posted_data###########', posted_data)
    id = posted_data.pop("id", None)
    user_id = session['user']['id']
    posted_data['verified_by'] = user_id
    posted_data['verified'] = True

    next_name = {}
    if 'category' in posted_data:
        next_name['category'] = posted_data.pop("category")
    if 'vendor' in posted_data:
        vendor = posted_data.pop("vendor")
        if vendor != 'All':
            next_name['vendor'] = vendor
    if 'price' in posted_data:
        next_name['price'] = ast.literal_eval(posted_data.pop('price'))

    undo = posted_data.pop("undo", None)
    if undo:
        print('i wanto see last product please........................................')
        next_name.clear()
        next_name['_id'] = ObjectId(id)
        
    elif posted_data.pop("is_skipped"):
        admin_skip_keys = ['verified_by', 'verified', 'admin_tags']
        admin_skip_data = dict(map(lambda key: (key, posted_data.get(key, None)), admin_skip_keys))
        admin_skip_data['dirty_by_admin'] = True
        db.products.update({'_id': ObjectId(id)}, {"$set": admin_skip_data})
    
    else:
        print('####id####data to be saved -- verified --####', id, posted_data)
        db.products.update({'_id': ObjectId(id)}, {"$set": posted_data})
        inc_tag_count(user_id, True)

    #fetching next product tagging info
    if q == 'verify':
        tagging_info = get_product_tagging_details(next_name, True)
    elif q == '3-skips':
        tagging_info = get_product_tagging_details(next_name, False, True)

    if undo:
        db.products.update({'_id': ObjectId(id)},{"$unset":{'admin_tags':'','verified_by':'','verified':'','dirty_by_admin':''}})
        dcr_tag_count(user_id, True)

    tag_count, verify_count = get_tag_count(user_id)
    tagging_info['tag_count'] = tag_count
    tagging_info['verify_count'] = verify_count
    print('----------------------------------------------',tagging_info)
    return json.dumps(tagging_info)
def set_tags():
    posted_data = request.get_json()
    q = posted_data.pop('q', None)
    print('############posted_data###########', posted_data)
    id = posted_data.pop("id", None)
    user_id = session['user']['id']
    posted_data['tagged_by'] = user_id

    if posted_data['tags'] and (posted_data['is_dang'] or posted_data['is_xray'] or posted_data['is_dirty']):
        posted_data['done'] = True

    next_name = {}
    if 'category' in posted_data:
        next_name['category'] = posted_data.pop("category")
    if 'vendor' in posted_data:
        vendor = posted_data.pop("vendor")
        if vendor != 'All':
            next_name['vendor'] = vendor
    if 'price' in posted_data:
        next_name['price'] = ast.literal_eval(posted_data.pop('price'))

    undo = posted_data.pop("undo", None)
    if undo:
        next_name.clear()
        next_name['_id'] = ObjectId(id)

    elif posted_data.pop("is_skipped"):
        inc_skip_count(id)

    else:
        print('####id####data to be saved -- tagged -- ####', id, posted_data)        
        db.products.update({'_id': ObjectId(id)}, {"$set": posted_data})
        inc_tag_count(user_id)

    #fetching next product tagging info
    tagging_info = get_product_tagging_details(next_name)

    if undo:
        db.products.update({'_id': ObjectId(id)},{"$unset":{'is_dang':'','is_dirty':'','is_xray':'',
                            'tags':'','tagged_by':'','epoch':'','done':''}})
        dcr_tag_count(user_id)

    tag_count, verify_count = get_tag_count(user_id)
    tagging_info['tag_count'] = tag_count
    tagging_info['verify_count'] = verify_count
    return json.dumps(tagging_info)
def add_subcat():
    if 'user' in session and session['is_admin']:
        subcat_status = 'Not Added'
        if request.form:
            if len(request.form['subcat']) and request.form['category'] != '-1':
                subcat_status = add_new_subcat( request.form['category'], request.form['subcat'] )
            else:
                subcat_status = 'Error'
        user_id = session['user']['id']
        tag_count, verify_count = get_tag_count(user_id)
        return render_template("add_sub_cat.html",
                               username=session['user']['name'],
                               tag_count=tag_count,
                               verify_count=verify_count,
                               available_cats=get_categories(),
                               subcat_status=subcat_status)
    else:
        flash('Invalid credentials', 'error')
        return redirect(url_for('bp.login'))
def add_subcat():
    if 'user' in session and session['is_admin']:
        subcat_status = 'Not Added'
        if request.form:
            if len(request.form['subcat']
                   ) and request.form['category'] != '-1':
                subcat_status = add_new_subcat(request.form['category'],
                                               request.form['subcat'])
            else:
                subcat_status = 'Error'
        user_id = session['user']['id']
        tag_count, verify_count = get_tag_count(user_id)
        return render_template("add_sub_cat.html",
                               username=session['user']['name'],
                               tag_count=tag_count,
                               verify_count=verify_count,
                               available_cats=get_categories(),
                               subcat_status=subcat_status)
    else:
        flash('Invalid credentials', 'error')
        return redirect(url_for('bp.login'))
def set_verified_tags():
    posted_data = request.get_json()
    q = posted_data.pop('q', None)
    print('############posted_data###########', posted_data)
    id = posted_data.pop("id", None)
    user_id = session['user']['id']
    posted_data['verified_by'] = user_id
    posted_data['verified'] = True

    next_name = {}
    if 'category' in posted_data:
        next_name['category'] = posted_data.pop("category")
    if 'vendor' in posted_data:
        vendor = posted_data.pop("vendor")
        if vendor != 'All':
            next_name['vendor'] = vendor
    if 'price' in posted_data:
        next_name['price'] = ast.literal_eval(posted_data.pop('price'))

    undo = posted_data.pop("undo", None)
    if undo:
        print(
            'i wanto see last product please........................................'
        )
        next_name.clear()
        next_name['_id'] = ObjectId(id)

    elif posted_data.pop("is_skipped"):
        admin_skip_keys = ['verified_by', 'verified', 'admin_tags']
        admin_skip_data = dict(
            map(lambda key: (key, posted_data.get(key, None)),
                admin_skip_keys))
        admin_skip_data['dirty_by_admin'] = True
        db.products.update({'_id': ObjectId(id)}, {"$set": admin_skip_data})

    else:
        print('####id####data to be saved -- verified --####', id, posted_data)
        db.products.update({'_id': ObjectId(id)}, {"$set": posted_data})
        inc_tag_count(user_id, True)

    #fetching next product tagging info
    if q == 'verify':
        tagging_info = get_product_tagging_details(next_name, True)
    elif q == '3-skips':
        tagging_info = get_product_tagging_details(next_name, False, True)

    if undo:
        db.products.update({'_id': ObjectId(id)}, {
            "$unset": {
                'admin_tags': '',
                'verified_by': '',
                'verified': '',
                'dirty_by_admin': ''
            }
        })
        dcr_tag_count(user_id, True)

    tag_count, verify_count = get_tag_count(user_id)
    tagging_info['tag_count'] = tag_count
    tagging_info['verify_count'] = verify_count
    print('----------------------------------------------', tagging_info)
    return json.dumps(tagging_info)