Sindbad~EG File Manager

Current Path : /home/numerotech/conf-regdesk.numerotech.com/reg_desk/core/controller/
Upload File :
Current File : //home/numerotech/conf-regdesk.numerotech.com/reg_desk/core/controller/SignupController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json
import datetime
from datetime import timedelta,date,datetime
from flask import session, app
from .. import Cryptography,Auth,RouteGroup,Helper
from core.model.SignUpModel import SignUpModel
from core.model.DashboardModel import DashboardModel
from core.model.LoginModel import LoginModel
from itertools import groupby
from operator import itemgetter
import datetime

import csv
from io import StringIO
import io
from flask import Response

import xlwt
from datetime import datetime
from collections import defaultdict

app = Blueprint('signup', __name__)
	

@app.route('/<int:conf_id>/<conf_key>/auto_signup/at/', methods = ["GET", "POST"])
@app.route('/<int:conf_id>/<conf_key>/auto_signup/at/<uuid>', methods = ["GET", "POST"])
def AutoSignupBadgeLogin(conf_id,conf_key,uuid=None):
	try:
		if uuid:
			user_id         = 113313
			is_post_signup  =  request.values.get("is_post_signup") or None
			signed_by       =  request.values.get("signup") or  "Delegate"
			comments        =  request.values.get("remarks") or  "Signed through Auto Signup Form"
			delegate_no     =  request.values.get("delegate_no") or None

			active_key = Helper.active_key
			conf_data  = LoginModel().GetConf(conf_id,conf_key,active_key)
			if conf_data :
				if int(conf_data.get("is_user_active") or 0) == 1: 
					del_table_name = conf_data["conf_schema"] +".delegates"
				else:
					return "<h3 style=\"color:red\"><center>The signup form is currently closed</center></h3>"
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"

			if int(is_post_signup or 0) == 1:
				scan_data     = SignUpModel().usp_save_scan_signed_data(conf_id,delegate_no,signed_by,comments,user_id)
				scan_data     = scan_data[0]
				status 	      = scan_data['status']
				msg 	      = scan_data['msg']
				# print(scan_data)


			delegates           = SignUpModel().get_uuid_delegates_table(del_table_name,uuid,conf_id)
			total_signup_count  = SignUpModel().get_signup_count(del_table_name,conf_id)
			if delegates:
				conf_schema   = conf_data["conf_schema"]
				delegates     = delegates[0]
				delegate_no   = delegates['delegate_no']
				# signed_by     = "Delegate"
				# comments      = "Signed through Auto Signup Form"
				now           = datetime.now()
				dt_string     = now.strftime("%d-%m-%Y %H:%M")

				sigup_dt 	   = delegates.get('signed_on').strftime("%d-%m-%Y %H:%M") if delegates.get('signed_on') else None
				if int(is_post_signup or 0) != 1:
					if sigup_dt:
						status 	      = 1
						msg 	      = f"#{delegate_no} - Already signed on {sigup_dt}."
					else:
						status 	      = 0
						msg           = ''


				return render_template('signup/auto_signup.html',msg=msg,conf=conf_data,status=status,delegate_no=delegate_no,conf_id=conf_id,conf_key=conf_key,delegates=delegates,total_signup_count=total_signup_count)	
			else :	
				return "<h2 style='color:red;text-align:center;'>No Badge Found</h2>"
		else:
			return "<h4 style='color:red;'> Invalid URL </h4>"
			# return redirect(url_for('digitalbatch.DigitalBadge',conf_id=conf_id,conf_key=conf_key))	
	except Exception as e:
		raise e


@app.route('/<int:conf_id>/<conf_key>/qr_signup/', methods = ["GET", "POST"])
@app.route('/<int:conf_id>/<conf_key>/qr_signup/<delegate_no>', methods = ["GET", "POST"])
def QRSignupBadge(conf_id,conf_key,delegate_no=None):
	try:
		if delegate_no:
			user_id         = 113313
			is_post_signup  =  request.values.get("is_post_signup") or None
			signed_by       =  request.values.get("signup") or  "Delegate"
			comments        =  request.values.get("remarks") or  "Signed through Auto Signup Form"

			active_key = Helper.active_key
			conf_data  = LoginModel().GetConf(conf_id,conf_key,active_key)
			if conf_data :
				if int(conf_data.get("is_user_active") or 0) == 1: 
					del_table_name = conf_data["conf_schema"] +".delegates"
				else:
					return "<h3 style=\"color:red\"><center>The signup form is currently closed</center></h3>"
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"

			delegate           = SignUpModel().get_delegate_no_delegates_table(del_table_name,delegate_no,conf_id)
			if delegate:
				uuid = delegate.get('user_uuid')
				return AutoSignupBadgeLogin(conf_id,conf_key,uuid)
			else :	
				return "<h2 style='color:red;text-align:center;'>No Badge Found</h2>"
		else:
			return "<h4 style='color:red;'> Invalid URL </h4>"
			# return redirect(url_for('digitalbatch.DigitalBadge',conf_id=conf_id,conf_key=conf_key))	
	except Exception as e:
		raise e


# @app.route('/<int:conf_id>/<conf_key>/auto_signup/at/', methods = ["GET", "POST"])
# @app.route('/<int:conf_id>/<conf_key>/auto_signup/at/<uuid>', methods = ["GET", "POST"])
# def AutoSignupBadgeLogin(conf_id,conf_key,uuid=None):
# 	try:
# 		if uuid:
# 			active_key = Helper.active_key
# 			conf_data  = LoginModel().GetConf(conf_id,conf_key,active_key)
# 			if conf_data :
# 				del_table_name = conf_data["conf_schema"] +".delegates"
# 			else :
# 				return "<h4 style='color:red;'> Invalid URL </h4>"
# 			delegates = SignUpModel().get_uuid_delegates_table(del_table_name,uuid,conf_id)
# 			if delegates:
# 				conf_schema   = conf_data["conf_schema"]
# 				delegates     = delegates[0]
# 				delegate_no   = delegates['delegate_no']
# 				signed_by     = "Delegate"
# 				comments      = "Signed through Auto Signup Form"
# 				now           = datetime.now()
# 				user_id       = 113313
# 				dt_string     = now.strftime("%d-%m-%Y %H:%M")
# 				scan_data     = SignUpModel().usp_save_scan_signed_data(conf_id,delegate_no,signed_by,comments,user_id)
# 				scan_data     = scan_data[0]
# 				status 	      = scan_data['status']
# 				msg 	      = scan_data['msg']
# 				print(status)
# 				return render_template('signup/auto_signup.html',msg=msg,conf=conf_data,status=status,delegate_no=delegate_no,conf_id=conf_id,conf_key=conf_key,delegates=delegates)	
# 			else :	
# 				return "<h2 style='color:red;text-align:center;'>No Badge Found</h2>"
# 		else:
# 			return "<h4 style='color:red;'> Invalid URL </h4>"
# 			# return redirect(url_for('digitalbatch.DigitalBadge',conf_id=conf_id,conf_key=conf_key))	
# 	except Exception as e:
# 		raise e

@app.route('/<int:conf_id>/<conf_key>/search', methods = ["GET", "POST"])
@RouteGroup.conf_required
# @RouteGroup.login_required
def getSearch(conf_id,conf_key):
	conf       = Auth.getConf(conf_id,conf_key)
	if conf :
		default_type   = request.values.get('default_type' or 'search') or 'search'
		schema_name    = conf["conf_schema"]
		del_table_name = conf["del_table_name"]
		count          = SignUpModel().getCount(conf_id,schema_name)
		total_registered_count,total_signed_on_count,total_pending_count = signup_count(conf_id,None,None,None)
		return render_template('signup/search_delegate.html',conf_id=conf_id,conf_key=conf_key,total=count,conf=conf,total_pending_count=total_pending_count,total_signed_on_count=total_signed_on_count,total_registered_count=total_registered_count,default_type=default_type)
	else :
		return "<h4 style='color:red;'> Invalid URL </h4>"	

def signup_count(conf_id,view_type,date,user_id):
	if conf_id :
		totl_count     = DashboardModel().get_reg_desk_count(conf_id,view_type,date,user_id)
		for index,value in enumerate(totl_count) :
			if index == 0 :
				days = value
			if index == 1:
				admins = value	
			if index == 2 :
				total_registered_count  = value
			if index == 3 :
				total_signed_on_count = value
			if index == 4 :
				total_pending_count = value
		
		total_registered_count = len(total_registered_count) if total_registered_count else 0
		total_signed_on_count = len(total_signed_on_count) if total_signed_on_count else 0
		total_pending_count = len(total_pending_count) if total_pending_count else 0
		return total_registered_count,total_signed_on_count,total_pending_count
	else :
		return 0,0,0

@app.route('/<int:conf_id>/<conf_key>/post_search', methods = ["GET", "POST"])
@RouteGroup.conf_required
# @RouteGroup.login_required
def postSearch(conf_id,conf_key):
	if request.method == 'POST':
		print(request.values)
		search_data = request.form['search_delegate']
		default_type='search'
		btn         = request.values.get('search_btn')
		conf        = Auth.getConf(conf_id,conf_key)
		if conf :
			conf_schema = conf["conf_schema"]
		else :
			return "<h4 style='color:red;'> Invalid URL </h4>"
		
		search_data = search_data.strip()
		print(btn)
		if btn == 'Search Del. No':
			delegatesData = SignUpModel().usp_search_regdesk(conf_schema,search_data,1,conf_id)
		else:
			delegatesData = SignUpModel().usp_search_regdesk(conf_schema,search_data,0,conf_id)

		if delegatesData :
			msg = None
		else: 
			msg = "No Data"

		total_registered_count,total_signed_on_count,total_pending_count = signup_count(conf_id,None,None,None)
		return render_template('signup/search_delegate.html',default_type=default_type,conf=conf,members=delegatesData,msg=msg,conf_id=conf_id,conf_key=conf_key,total=total_signed_on_count,search_data=search_data,total_pending_count=total_pending_count,total_signed_on_count=total_signed_on_count,total_registered_count=total_registered_count)
		
	else:
		return redirect(url_for('signup.getSearch',conf_id=conf_id,conf_key=conf_key))
	
@app.route('/<int:conf_id>/<conf_key>/insert_signup', methods = ["GET", "POST"])
@RouteGroup.conf_required
# @RouteGroup.login_required
def InsertSignup(conf_id,conf_key):
	try:
		conf       = Auth.getConf(conf_id,conf_key)
		if conf :
			conf_schema = conf["conf_schema"]
		else :
			return "<h4 style='color:red;'> Invalid URL </h4>"

		society_id  = conf['society_id']
		user        = Auth.user(society_id)
		user_id     = user['user_id']
		signed_by   = request.values.get('signup') or None
		comments    = request.values.get('remarks') or None
		delegate_no = request.values.get('delegate_no')
		now         = datetime.now()
		dt_string   = now.strftime("%d-%m-%Y %H:%M")
		scan_data   = SignUpModel().usp_save_scan_signed_data(conf_id,delegate_no,signed_by,comments,user_id)
		scan_data   = scan_data[0]
		msg 	    = scan_data['msg']
		status 	    = scan_data['status']
		

		total_registered_count,total_signed_on_count,total_pending_count = signup_count(conf_id,None,None,None)

		datas = {"msg" : msg ,"status" : status,'delegate_no':delegate_no,'signup_date':dt_string,'total_signed_on':total_signed_on_count,'total_signed_on_count':total_signed_on_count,'total_pending_count':total_pending_count,'total_registered_count':total_registered_count}
		json_data = json.dumps(datas,default=str)
		return json_data

	except Exception as e:
		data = {"msg" : str(e) ,"status" : 401}
		json_data = json.dumps(data,default=str)
		return json_data

	

@app.route('/<int:conf_id>/<conf_key>/post_scan', methods = [ "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def PostScan(conf_id,conf_key):
	conf       = Auth.getConf(conf_id,conf_key)
	if conf:
		if request.method == 'POST':
			now           = datetime.now()
			curr_dt       = now.strftime("%Y-%m-%d %H:%M:%S")
			curr_date     = now.strftime("%Y-%m-%d")
			default_type  = 'scan'
			delegate_no   = request.values.get('scan_delegate')
			conf_schema   = conf["conf_schema"]
			society_id    = conf['society_id']
			user          = Auth.user(society_id)
			user_id       = user['user_id']
			signed_by     = "From Scanning"
			comments      = ""
			now           = datetime.now()
			dt_string     = now.strftime("%d-%m-%Y %H:%M")
			scan_data     = SignUpModel().usp_save_scan_signed_data(conf_id,delegate_no,signed_by,comments,user_id)
			total_registered_count,total_signed_on_count,total_pending_count = signup_count(conf_id,None,None,None)
			scan_data     = scan_data[0]
			msg 	      = scan_data['msg']
			status 	      = scan_data['status']
			if int(status) == 2 :  
				flash(str(msg),'successMsg')
			else :
				flash(str(msg),'errorMsg')
		return redirect(url_for('signup.getSearch',conf_id=conf_id,conf_key=conf_key,default_type=default_type))

		return render_template('signup/search_delegate.html',conf=conf,default_type=default_type,conf_id=conf_id,conf_key=conf_key,total_pending_count=total_pending_count,total_signed_on_count=total_signed_on_count,total_registered_count=total_registered_count)
	else: 
		flash("Session Expired","errorMsg")
		return "Error"

# unsignup delegate number start --  To be moved to live Step 14,2023 Santhosh
@app.route('/<int:conf_id>/<conf_key>/signed_details', methods = [ "POST","GET"])
@RouteGroup.conf_required
@RouteGroup.bologin_required
def SignedDetails(conf_id,conf_key):
	conf       = Auth.getConf(conf_id,conf_key)
	if conf :
		conf_schema = conf["conf_schema"]
		signed_data = SignUpModel().getsigned_data(conf_id,conf_schema)
		html_data =  render_template ('signup/unsignup_table.html',conf=conf,conf_id=conf_id,conf_key=conf_key,signed_data=signed_data)

		return render_template ('signup/unsign_delegates.html',conf=conf,conf_id=conf_id,conf_key=conf_key,html_data=html_data)
	else :
		return "<h4 style='color:red;'> Invalid URL </h4>"

@app.route('/<int:conf_id>/<conf_key>/remove_signup', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.bologin_required
def RemoveSignup(conf_id,conf_key):
	status = 0
	signup_list= None
	try:
		now         = datetime.now()
		dt_string   = now.strftime("%d-%m-%Y %H:%M")
		delegate_no = request.values.get('delegate_no',None)
		reason 	    = request.values.get('reason',None)
		conf        = Auth.getConf(conf_id,conf_key)
		if conf :
			conf_schema          = conf["conf_schema"]
			signup_for_alldays   = conf["signup_for_alldays"]
			main_db              = "numerotech_primary_db"
			unsignupdata = SignUpModel().unsignupdata_andbackup(main_db,conf_id,delegate_no,conf_schema,reason)
			if unsignupdata:
				for index,value in enumerate(unsignupdata) :
					if index == 0 :
						msg  = value[0]
						msg  = msg["msg"]
					if index == 1 :
						status  = value[0]
						status  = status["status"]
					if index == 2 :
						signup_list  = value
						
				html_data = render_template ('signup/unsignup_table.html',conf=conf,conf_id=conf_id,conf_key=conf_key,signed_data=signup_list)
				datas = {"msg" : msg,"status":status,"html_data":html_data}
				json_data = json.dumps(datas,default=str)
				return json_data
			else:
				datas = {"msg" : "data not exist","status":3,"html_data":""}
				json_data = json.dumps(datas,default=str)
				return json_data
		else :
			msg = "Invalid URL"
			datas = {"msg" : msg,"status":5,"html_data":""}
			json_data = json.dumps(datas,default=str)
			return json_data
				
	except Exception as e:
		datas = {"msg" : str(e) ,"status" : 401,"html_data":""}
		json_data = json.dumps(datas,default=str)
		return json_data
	



@app.route("<int:conf_id>/<conf_key>/search_delegate",methods = ["GET", "POST"])
def SearchDelegate(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	if conf:
		conf_schema      = conf["conf_schema"]
		del_table_name   = conf_schema+".delegates"
		return render_template("signup/search_all_table_delegtes.html",conf_id = conf_id,conf_key=conf_key)
	else:
		flash("Invalid URL","errorMsg")
		return redirect(url_for('login.DashboardLoginPage',conf_id=conf_id,conf_key=conf_key))

# -------------------badge_collected_unsignup_list start-----------------

@app.route("<int:conf_id>/<conf_key>/badge_collected_unsignup_list",methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.bologin_required
def BadgeCollectedUnsignupList(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	if conf:
		conf_schema              = conf["conf_schema"]
		del_table_name           = conf_schema+".delegates"
		kc_entry_table           = conf_schema+".kc_sessions_entry"
		fc_entry_table           = conf_schema+".fc_sessions_entry"
		fcbackup_table           = None
		del_nos                  = None
		is_bulk_signup           = 0
		is_view_bulk_signup_data = 0
		is_manual_signup         = 0
		print(conf_id,del_nos,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table,is_bulk_signup,is_view_bulk_signup_data,is_manual_signup)
		attend_list = SignUpModel().UnsignupButScannedList(conf_id,del_nos,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table,is_bulk_signup,is_view_bulk_signup_data,is_manual_signup)
		
		if attend_list:
			html_data = render_template("signup/badge_collected_unsignup_list_table.html",conf_id=conf_id,conf_key=conf_key,attend_list=attend_list,is_view_bulk_signup_data=is_view_bulk_signup_data)
			return render_template("signup/badge_collected_unsignup_list.html",conf=conf,conf_id=conf_id,conf_key=conf_key,html_data=html_data,is_view_bulk_signup_data=is_view_bulk_signup_data,attend_list=attend_list)
		else:
			# flash("Attend data not exists","errorMsg")
			html_data = render_template("signup/badge_collected_unsignup_list_table.html",conf_id=conf_id,conf_key=conf_key,attend_list=attend_list,is_view_bulk_signup_data=is_view_bulk_signup_data)
			return render_template("signup/badge_collected_unsignup_list.html",conf=conf,conf_id=conf_id,conf_key=conf_key,html_data=html_data,is_view_bulk_signup_data=is_view_bulk_signup_data)
	else:
		flash("Invalid URL","errorMsg")
		return redirect(url_for('login.DashboardLoginPage',conf_id=conf_id,conf_key=conf_key))

@app.route("<int:conf_id>/<conf_key>/scan_records_bulk_signup",methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.bologin_required
def ScanRecordsBulkSighnup(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	try:
		if conf:
			conf_schema              = conf["conf_schema"]
			del_table_name           = conf_schema+".delegates"
			kc_entry_table           = conf_schema+".kc_sessions_entry"
			fc_entry_table           = conf_schema+".fc_sessions_entry"
			fcbackup_table           = None
			is_bulk_signup           = request.values.get('is_bulk_signup') or 0
			is_view_bulk_signup_data = request.values.get('is_view_bulk_signup_data') or 0
			is_manual_signup         = request.values.get('is_manual_signup') or 0
			is_bulk_signup           = int(is_bulk_signup) if is_bulk_signup else is_bulk_signup
			is_view_bulk_signup_data = int(is_view_bulk_signup_data) if is_view_bulk_signup_data else is_view_bulk_signup_data
			is_manual_signup         = int(is_manual_signup) if is_manual_signup else is_manual_signup
			del_nos                  = None
			if  is_bulk_signup == 1 and is_manual_signup == 0:
				attend_list              = SignUpModel().UnsignupButScannedList(conf_id,del_nos,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table,is_bulk_signup,is_view_bulk_signup_data,is_manual_signup)
				is_bulk_signup           = 0;
				is_view_bulk_signup_data = 0;
				is_manual_signup         = 0;
				attend_list              = SignUpModel().UnsignupButScannedList(conf_id,del_nos,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table,is_bulk_signup,is_view_bulk_signup_data,is_manual_signup)
				html_data                = render_template("signup/badge_collected_unsignup_list_table.html",conf=conf,conf_id=conf_id,conf_key=conf_key,attend_list=attend_list,is_view_bulk_signup_data=is_view_bulk_signup_data)
				
				data = {"html_data":html_data,"msg" : "Successfully uploaded", "status" : 1}
				return json.dumps(data,default = str)
			else:
				attend_list    = SignUpModel().UnsignupButScannedList(conf_id,del_nos,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table,is_bulk_signup,is_view_bulk_signup_data,is_manual_signup)
				html_data      = render_template("signup/badge_collected_unsignup_list_table.html",conf=conf,conf_id=conf_id,conf_key=conf_key,attend_list=attend_list,is_view_bulk_signup_data=is_view_bulk_signup_data)
				
				data = {"html_data":html_data,"msg" : "", "status" : 2}
				return json.dumps(data,default = str)
		else :
			data = {"html_data":"","msg" : " Invalid URL", "status" : 3}
			return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data":"","msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)

@app.route("<int:conf_id>/<conf_key>/view_and_update_custom_bulk_signup",methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.bologin_required
def ViewAndUpdateCostomeBulkSignup(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	try:
		if conf:
			conf_schema              = conf["conf_schema"]
			del_table_name           = conf_schema+".delegates"
			kc_entry_table           = conf_schema+".kc_sessions_entry"
			fc_entry_table           = conf_schema+".fc_sessions_entry"
			fcbackup_table           = None	
			is_bulk_signup           = request.values.get('is_bulk_signup') or 0
			is_view_bulk_signup_data = request.values.get('is_view_bulk_signup_data') or 0
			is_manual_signup         = request.values.get('is_manual_signup') or 0
			is_bulk_signup           = int(is_bulk_signup) if is_bulk_signup else is_bulk_signup
			is_view_bulk_signup_data = int(is_view_bulk_signup_data) if is_view_bulk_signup_data else is_view_bulk_signup_data
			is_manual_signup         = int(is_manual_signup) if is_manual_signup else is_manual_signup
			delegate_nos             = request.values.get('delegate_nos') or None

			if delegate_nos:
				delegate_nos = delegate_nos.replace(" ","")
				delegate_nos = delegate_nos.replace(".",",")
				delegate_nos = delegate_nos.replace(",,",",")
				delegate_nos = delegate_nos[:-1] if delegate_nos.endswith(",") else delegate_nos or None
				if  is_bulk_signup == 1 and is_manual_signup == 1:
					attend_list    = SignUpModel().UnsignupButScannedList(conf_id,delegate_nos,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table,is_bulk_signup,is_view_bulk_signup_data,is_manual_signup)
					is_bulk_signup           = 0;
					is_view_bulk_signup_data = 1;
					is_manual_signup         = 0;
					attend_list    = SignUpModel().UnsignupButScannedList(conf_id,delegate_nos,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table,is_bulk_signup,is_view_bulk_signup_data,is_manual_signup)
					html_data      = render_template("signup/badge_collected_unsignup_list_table.html",conf=conf,conf_id=conf_id,conf_key=conf_key,attend_list=attend_list,is_view_bulk_signup_data=is_view_bulk_signup_data)
					data = {"html_data":html_data,"msg" : " Successfully updated", "status" : 1}
					return json.dumps(data,default = str)
				else:
					attend_list    = SignUpModel().UnsignupButScannedList(conf_id,delegate_nos,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table,is_bulk_signup,is_view_bulk_signup_data,is_manual_signup)
					html_data      = render_template("signup/badge_collected_unsignup_list_table.html",conf=conf,conf_id=conf_id,conf_key=conf_key,attend_list=attend_list,is_view_bulk_signup_data=is_view_bulk_signup_data)
					data = {"html_data":html_data,"msg" : " ", "status" : 2}
					return json.dumps(data,default = str)
			else :
				data = {"html_data":"","msg" : "please enter delegate number ", "status" : 3}
				return json.dumps(data,default = str)
		else :
			data = {"html_data":"","msg" : " Invalid URL", "status" : 4}
			return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data":"","msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)

# -------------------badge_collected_unsignup_list end-----------------

@app.route("<int:conf_id>/<conf_key>/qr_scan_to_signup",methods = ["GET", "POST"])
def QRScanToSignup(conf_id,conf_key):
	active_key = Helper.active_key
	conf_data  = LoginModel().GetConf(conf_id,conf_key,active_key)
	if conf_data:
		if int(conf_data.get("is_user_active") or 0) == 1: 
			conf_schema      = conf_data["conf_schema"]
			del_table_name   = conf_schema+".delegates"
			url              = f"https://conf-regdesk.numerotech.com/{conf_id}/{conf_key}/qr_signup/"
			return render_template("signup/qr_scanner.html",conf = conf_data,conf_id = conf_id,conf_key=conf_key,url=url)
		else:
			return "<h3 style=\"color:red\"><center>The signup form is currently closed</center></h3>"
	else:
		flash("Invalid URL","errorMsg")
		return redirect(url_for('login.DashboardLoginPage',conf_id=conf_id,conf_key=conf_key))





# --------------------------------Bulk signup start --------------------------------------
@app.route('/<int:conf_id>/<conf_key>/bulk_signup', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.bologin_required
def BulkSignup(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	if conf:
		conf_schema        = conf["conf_schema"]
		del_table_name     = conf_schema+".delegates"
		total_signup_count = SignUpModel().get_signup_count(del_table_name,conf_id)
		return render_template('signup/bulk_signup.html',conf_id=conf_id,conf_key=conf_key,conf=conf,total_signup_count=total_signup_count)
	else:
		flash("Invalid URL","errorMsg")
		return redirect(url_for('login.DashboardLoginPage',conf_id=conf_id,conf_key=conf_key))



@app.route('/<int:conf_id>/<conf_key>/view_bulk_signup', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.bologin_required
def ViewBulkSignup(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	try:
		if conf:
			conf_schema              = conf["conf_schema"]
			del_table_name           = conf_schema+".delegates"
			delegate_nos             = request.values.get('delegate_nos') or None
			if delegate_nos:
				del_no = delegate_nos.rstrip(',') 
				del_datas = SignUpModel().getdelegate_data(conf_id,conf_schema,del_no)
				if del_datas:
					html_data      = render_template("signup/signup_delegate_view.html",conf=conf,conf_id=conf_id,conf_key=conf_key,del_datas=del_datas)
					data = {"html_data":html_data,"msg" : " ", "status" : 1}
					return json.dumps(data,default = str)
				else:
					data = {"html_data":"","msg" : "Data not exist", "status" : 2}
					return json.dumps(data,default = str)
			else :
				data = {"html_data":"","msg" : "please enter delegate number ", "status" : 3}
				return json.dumps(data,default = str)
		else :
			data = {"html_data":"","msg" : " Invalid URL", "status" : 4}
			return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data":"","msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)



@app.route('/<int:conf_id>/<conf_key>/post_bulk_signup', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.bologin_required
def PostBulkSignup(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	try:
		if conf:
			now            = datetime.now()
			dt_string      = now.strftime("%Y-%m-%d %H:%M:%S")
			conf_schema    = conf["conf_schema"]
			del_table_name = conf_schema+".delegates"
			delegate_nos   = request.values.get('delegate_nos') or None
			update_count   = 0
			if delegate_nos:
				del_no           = delegate_nos.rstrip(',')
				del_signup_datas,update_count = SignUpModel().updatedelegate_signup(conf_id,conf_schema,del_no,dt_string)
				del_datas        = SignUpModel().getdelegate_data(conf_id,conf_schema,del_no)
				total_signup_count = SignUpModel().get_signup_count(del_table_name,conf_id)
				html_data        = render_template("signup/signup_delegate_view.html",conf=conf,conf_id=conf_id,conf_key=conf_key,del_datas=del_datas)
				if update_count > 0 :
					data = {'total_signup_count':total_signup_count,"html_data":html_data,"msg" : str(update_count)+" delegates signed on successfully", "status" : 1}
				else :
					data = {'total_signup_count':total_signup_count,"html_data":html_data,"msg" : "Already Signed on updated", "status" : 1}

				# data = {"html_data":html_data,"msg" : " updated Successfully", "status" : 1}
				return json.dumps(data,default = str)
			else :
				total_signup_count = SignUpModel().get_signup_count(del_table_name,conf_id)
				data = {"total_signup_count":total_signup_count,"html_data":"","msg" : "please enter delegate number ", "status" : 2}
				return json.dumps(data,default = str)
		else :
			data = {"html_data":"","msg" : " Invalid URL", "status" : 3}
			return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data":"","msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)

# --------------------------------Bulk signup end --------------------------------------


@app.route("<int:conf_id>/<conf_key>/qr_scan_to_delno",methods = ["GET", "POST"])
def DelnoQRScan(conf_id,conf_key):
	active_key = Helper.active_key
	conf_data  = LoginModel().GetConf(conf_id,conf_key,active_key)
	if conf_data:
		if int(conf_data.get("is_user_active") or 0) == 1: 
			conf_schema      = conf_data["conf_schema"]
			del_table_name   = conf_schema+".delegates"
			form_name       = "T-Shirt Form"
			url              = f"https://conf-regdesk.numerotech.com/{conf_id}/{conf_key}/delno_qr_scan_view/"
			return render_template("signup/delno_qr_scanner.html",conf = conf_data,conf_id = conf_id,conf_key=conf_key,url=url)
		else:
			return "<h3 style=\"color:red\"><center>The "+str(form_name)+" is currently closed</center></h3>"
	else:
		flash("Invalid URL","errorMsg")
		return redirect(url_for('login.DashboardLoginPage',conf_id=conf_id,conf_key=conf_key))



@app.route('/<int:conf_id>/<conf_key>/delno_qr_scan_view/', methods = ["GET", "POST"])
@app.route('/<int:conf_id>/<conf_key>/delno_qr_scan_view/<delegate_no>', methods = ["GET", "POST"])
def DelNoQRScanView(conf_id,conf_key,delegate_no=None):
	try:
		if delegate_no:
			user_id         = 113313
			form_name       = "T-Shirt Form"
			active_key = Helper.active_key
			conf_data  = LoginModel().GetConf(conf_id,conf_key,active_key)
			if conf_data :
				if int(conf_data.get("is_user_active") or 0) == 1: 
					del_table_name = conf_data["conf_schema"] +".delegates"
				else:
					return "<h3 style=\"color:red\"><center>The "+str(form_name)+" is currently closed</center></h3>"
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"

			delegate           = SignUpModel().get_delegate_no_delegates_table(del_table_name,delegate_no,conf_id)
			if delegate:
				uuid = delegate.get('user_uuid')
				print(uuid)
				return PostDelnoQRScanView(conf_id,conf_key,uuid)
			else :	
				return "<h2 style='color:red;text-align:center;'>No Badge Found</h2>"
		else:
			return "<h4 style='color:red;'> Invalid URL </h4>"
			# return redirect(url_for('digitalbatch.DigitalBadge',conf_id=conf_id,conf_key=conf_key))	
	except Exception as e:
		raise e

@app.route('/<int:conf_id>/<conf_key>/post_delno_qr_scan_view/at/', methods = ["GET", "POST"])
@app.route('/<int:conf_id>/<conf_key>/post_delno_qr_scan_view/at/<uuid>', methods = ["GET", "POST"])
def PostDelnoQRScanView(conf_id,conf_key,uuid=None):
	try:
		if uuid:
			user_id         = 113313
			is_post_signup  =  request.values.get("is_post_signup") or None
			delegate_no     =  request.values.get("delegate_no") or None
			form_name       = "T-Shirt Form"

			active_key = Helper.active_key
			conf_data  = LoginModel().GetConf(conf_id,conf_key,active_key)
			if conf_data :
				if int(conf_data.get("is_user_active") or 0) == 1: 
					del_table_name = conf_data["conf_schema"] +".delegates"
				else:
					return "<h3 style=\"color:red\"><center>The "+str(form_name)+" is currently closed</center></h3>"
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"

			if int(is_post_signup or 0) == 1:
				scan_data     = SignUpModel().usp_conf_save_qr_scanned_data(conf_id,delegate_no)
				scan_data     = scan_data[0]
				status 	      = scan_data['status']
				msg 	      = scan_data['msg']

		
			delegates           = SignUpModel().get_uuid_delegates_table(del_table_name,uuid,conf_id)
			total_collected_count  = SignUpModel().get_tshirt_count(del_table_name,conf_id)

			if delegates:
				conf_schema   = conf_data["conf_schema"]
				delegates     = delegates[0]
				delegate_no   = delegates['delegate_no']
				now           = datetime.now()
				dt_string     = now.strftime("%d-%m-%Y %H:%M")
				sigup_dt 	   = delegates.get('tshirt_collected_at').strftime("%d-%m-%Y %H:%M") if delegates.get('tshirt_collected_at') else None
				if int(is_post_signup or 0) == 0:
					if sigup_dt:
						status 	      = 1
						msg 	      = "#"+str(delegate_no)+" - Already collected on "+str(sigup_dt)+"."
					else:
						print("else")
						status 	      = 0
						msg           = ''
			
				return render_template('signup/delno_qr_scan.html',msg=msg,conf=conf_data,status=status,delegate_no=delegate_no,conf_id=conf_id,conf_key=conf_key,delegates=delegates,total_collected_count=total_collected_count)	
			else :	
				return "<h2 style='color:red;text-align:center;'>No Badge Found</h2>"
		else:
			return "<h4 style='color:red;'> Invalid URL </h4>"
			# return redirect(url_for('digitalbatch.DigitalBadge',conf_id=conf_id,conf_key=conf_key))	
	except Exception as e:
		raise e



# Counter and Set wise Signup Starts here

@app.route('/<int:conf_id>/<conf_key>/counter_and_set_wise_signup', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def CounterAndSetWiseSignup(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	if conf:
		del_table_name = conf["conf_schema"]
		counter = defaultdict(list)
		counterList = None
		counter_1 = []
		get_data = SignUpModel().getCounterSetWise(del_table_name,conf_id)
		# print("get_data :",get_data)
		if get_data:
			for r in get_data:
				counter[r["counter"]].append(r['batch'])
	
				counter_1.append(r["counter"])
	
	
			counterList = list(set(counter_1))
			# a = [str(x) for x in counterList]	
			counterList.sort()
			print("counter :",counterList)

		return render_template('signup/signup_counter_set_wise.html',conf_id=conf_id,conf_key=conf_key,conf=conf,counterList=counterList,get_data=counter)
	else:
		flash("Invalid URL","errorMsg")
		return redirect(url_for('login.DashboardLoginPage',conf_id=conf_id,conf_key=conf_key))




@app.route('/<int:conf_id>/<conf_key>/get_counter_set_data', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def getCounterSetData(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	try:
		if conf:
			conf_schema              = conf["conf_schema"]
			del_table_name           = conf_schema+".delegates"
			counter                  = request.values.get('counter') or None
			set_for_badge            = request.values.get('set') or None
			del_datas                = SignUpModel().getDelegateDetails(conf_id,conf_schema,counter,set_for_badge)
			if del_datas:
				signed_on_count   = 0
				unsigned_on_count = 0
				for r in del_datas:
					if r['signed_on']:
						signed_on_count = signed_on_count+1
					else:
						unsigned_on_count = unsigned_on_count+1

				html_data  = render_template("signup/sigup_view_table.html",conf=conf,conf_id=conf_id,conf_key=conf_key,del_datas=del_datas,signed_on_count=signed_on_count,unsigned_on_count=unsigned_on_count)
				data = {"html_data":html_data,"msg" : " ", "status" : 1}
				return json.dumps(data,default = str)
			else:
				data = {"html_data":"","msg" : "Data not exist", "status" : 2}
				return json.dumps(data,default = str)
		else :
			data = {"html_data":"","msg" : " Invalid URL", "status" : 4}
			return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data":"","msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)



@app.route('/<int:conf_id>/<conf_key>/post_bulk_signin', methods = ["GET", "POST"])
@RouteGroup.conf_required
def PostBulkSignIn(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	try:
		if conf:
			now            = datetime.now()
			dt_string      = now.strftime("%Y-%m-%d %H:%M:%S")
			conf_schema    = conf["conf_schema"]
			del_table_name = conf_schema+".delegates"
			delegate_nos   = request.values.get('delegate_nos') or None
			counter        = request.values.get('counter') or None
			set_for_badge  = request.values.get('set') or None
			if delegate_nos:
				del_no           = delegate_nos.rstrip(',')
				del_signup_datas,msg = SignUpModel().updatedelegate_signup(conf_id,conf_schema,del_no,dt_string)
				del_datas        = SignUpModel().getDelegateDetails(conf_id,conf_schema,counter,set_for_badge)
				signed_on_count   = 0
				unsigned_on_count = 0
				if del_datas:
					for r in del_datas:
						if r['signed_on']:
							signed_on_count = signed_on_count+1
						else:
							unsigned_on_count = unsigned_on_count+1

				html_data        = render_template("signup/sigup_view_table.html",conf=conf,conf_id=conf_id,conf_key=conf_key,del_datas=del_datas,signed_on_count=signed_on_count,unsigned_on_count=unsigned_on_count)
				data = {"html_data":html_data,"msg" : str(msg)+' records updated..', "status" : 1}
				return json.dumps(data,default = str)
			else :
				data = {"html_data":"","msg" : "please enter delegate number ", "status" : 2}
				return json.dumps(data,default = str)
		else :
			data = {"html_data":"","msg" : " Invalid URL", "status" : 3}
			return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data":"","msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)


@app.route('/<int:conf_id>/<conf_key>/post_bulk_unsignup', methods = ["GET", "POST"])
@RouteGroup.conf_required
def PostBulkUnSignup(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	try:
		if conf:
			now            = datetime.now()
			dt_string      = now.strftime("%Y-%m-%d %H:%M:%S")
			conf_schema    = conf["conf_schema"]
			del_table_name = conf_schema+".delegates"
			delegate_nos   = request.values.get('delegate_nos') or None
			counter        = request.values.get('counter') or None
			set_for_badge  = request.values.get('set') or None
			if delegate_nos:
				del_no           = delegate_nos.rstrip(',')
				del_signup_datas,msg = SignUpModel().updatedelegate_unsignup(conf_id,conf_schema,del_no,dt_string)
				del_datas        = SignUpModel().getDelegateDetails(conf_id,conf_schema,counter,set_for_badge)
				signed_on_count   = 0
				unsigned_on_count = 0
				if del_datas:
					for r in del_datas:
						if r['signed_on']:
							signed_on_count = signed_on_count+1
						else:
							unsigned_on_count = unsigned_on_count+1

				html_data        = render_template("signup/sigup_view_table.html",conf=conf,conf_id=conf_id,conf_key=conf_key,del_datas=del_datas,signed_on_count=signed_on_count,unsigned_on_count=unsigned_on_count)
				data = {"html_data":html_data,"msg" : str(msg)+' records updated..', "status" : 1}
				return json.dumps(data,default = str)
			else :
				data = {"html_data":"","msg" : "please enter delegate number ", "status" : 2}
				return json.dumps(data,default = str)
		else :
			data = {"html_data":"","msg" : " Invalid URL", "status" : 3}
			return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data":"","msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)


@app.route('/<int:conf_id>/<conf_key>/get_delegates_no_data', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def getDelegateNosData(conf_id,conf_key):
	conf = Auth.getConf(conf_id,conf_key)
	try:
		if conf:
			conf_schema              = conf["conf_schema"]
			del_table_name           = conf_schema+".delegates"
			delegate_nos             = request.values.get('delegate_nos') or None
			del_datas                = SignUpModel().getDelegateNosDetails(conf_id,conf_schema,delegate_nos)
			if del_datas:
				signed_on_count   = 0
				unsigned_on_count = 0
				for r in del_datas:
					if r['signed_on']:
						signed_on_count = signed_on_count+1
					else:
						unsigned_on_count = unsigned_on_count+1

				html_data  = render_template("signup/sigup_view_table.html",conf=conf,conf_id=conf_id,conf_key=conf_key,del_datas=del_datas,signed_on_count=signed_on_count,unsigned_on_count=unsigned_on_count)
				data = {"html_data":html_data,"msg" : " ", "status" : 1}
				return json.dumps(data,default = str)
			else:
				data = {"html_data":"","msg" : "Data not exist", "status" : 2}
				return json.dumps(data,default = str)
		else :
			data = {"html_data":"","msg" : " Invalid URL", "status" : 4}
			return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data":"","msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)


# Counter and Set wise Signup Endss here

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists