Sindbad~EG File Manager

Current Path : /home/numerotech/conference.numerotech.com/food_kit_scan_badges/core/controller/
Upload File :
Current File : /home/numerotech/conference.numerotech.com/food_kit_scan_badges/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.CMEScanModel import CMEScanModel
from core.model.BadgeModel import BadgeModel
from core.model.KitSessionModel import KitSessionModel
# Jan 10 ,2023
from core.model.BadgeUserModel import BadgeUserModel


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

app = Blueprint('signup', __name__)


@app.route('/<int:conf_id>/<conf_key>/signup_login', methods = ["GET", "POST"])
def SignupLogin(conf_id,conf_key):
	try:
		now = datetime.now()
		current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
		conf_data  = KitSessionModel().getkcConf(conf_id,conf_key,current_dt)
		if conf_data:
			conf_name  = conf_data['conf_name']
			return render_template('signup/signup_login.html',conf_id=conf_id,conf_key=conf_key,conf_data=conf_data,conf_name=conf_name)
		else:
			return "<h2 style= 'color:red;text-align:center' ; >Invalid Session </h2>"
	except Exception as e:
		# raise e
		msg = str(e)
		flash(msg,"errorMsg")
		return redirect(url_for('signup.SignupLogin',conf_id=conf_id,conf_key=conf_key))
	
	
@app.route('/<int:conf_id>/<conf_key>/post_signup_login', methods = ["GET", "POST"])
def postSignupLogin(conf_id,conf_key):
	if request.method == 'POST':
		username  = request.form['username']
		password  = request.form['password']
		get_conf  = BadgeModel().checkUsername(username,conf_id)
		if get_conf : 
			db_pass =  get_conf['badge_login_password']
			if password == db_pass:
				admin_id = get_conf['conf_id']
				session['signupsession']   =  get_conf
				return redirect (url_for('signup.getSearch',conf_id=conf_id ,conf_key = conf_key))
			else:
				flash("Password mismatch" , "errorMsg")
				return redirect (url_for('signup.SignupLogin',conf_id=conf_id ,conf_key= conf_key))
		else:
			flash("Username is not registered." , "errorMsg")
			return redirect (url_for('signup.SignupLogin',conf_id=conf_id ,conf_key= conf_key))
	else :
		return "Method not allowed"			

@app.route('/<int:conf_id>/<conf_key>/search', methods = ["GET", "POST"])
def getSearch(conf_id,conf_key):
	if session.get("signupsession") :
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name = get_conf["del_table_name"]
			count = SignUpModel().getCount(conf_id,del_table_name)
			return render_template('signup/search_delegate.html',conf_id=conf_id,conf_key=conf_key,total=count)
		else :
			return "<h4 style='color:red;'> Invalid URL </h4>"	
	else: 
		flash("Session Expired","errorMsg")
		return redirect(url_for('signup.SignupLogin' ,conf_id = conf_id,conf_key= conf_key))

@app.route('/<int:conf_id>/<conf_key>/post_search', methods = ["GET", "POST"])
def postSearch(conf_id,conf_key):
	if session.get("signupsession") :
		if request.method == 'POST':
			search_data = request.form['search_delegate']
			btn         = request.values.get('search_btn')
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			if get_conf :
				del_table_name = get_conf["del_table_name"]
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"
			
			search_data = search_data.strip()
			if btn == 'Search Del. No':
				delegatesData = SignUpModel().usp_search_regdesk(del_table_name,search_data,1,conf_id)
			else:
				delegatesData = SignUpModel().usp_search_regdesk(del_table_name,search_data,0,conf_id)
			if delegatesData :
				msg = None
			else: 
				msg = "No Data"

			count = SignUpModel().getCount(conf_id,del_table_name)
			return render_template('signup/search_delegate.html',members=delegatesData,msg=msg,conf_id=conf_id,conf_key=conf_key,total=count,search_data=search_data)
			
		else:
			return redirect(url_for('signup.getSearch',conf_id=conf_id,conf_key=conf_key))
	else: 
		flash("Session Expired","errorMsg")
		return redirect(url_for('signup.SignupLogin' ,conf_id = conf_id,conf_key= conf_key))

@app.route('/<int:conf_id>/<conf_key>/insert_signup', methods = ["GET", "POST"])
def InsertSignup(conf_id,conf_key):
	try:
		if session.get('signupsession'):
			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")
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			if get_conf :
				del_table_name = get_conf["del_table_name"]
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"
			total_count = SignUpModel().usp_save_signed_data(conf_id,delegate_no,signed_by,comments,del_table_name)
			total       = total_count[0]
			total_signed_on = total['total_signed_on']
			datas = {"msg" : "success" ,"status" : 1,'signup_date':dt_string,'total_signed_on':total_signed_on}
			json_data = json.dumps(datas,default=str)
			return json_data
		else:
			data = { "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,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>/signup_logout', methods = ["GET", "POST"])
def SignupLogout(conf_id,conf_key):
	if session.get("signupsession") :
		session.pop('signupsession', None)
	else :
		pass
	session.pop('_flashes', None)
	return redirect(url_for('signup.SignupLogin' ,conf_id = conf_id,conf_key= conf_key))

	# Average : {{((total.total_signed_on/total.total_count)*100)|round(2)}}


# Auto login option for  Singup  option
@app.route('/<int:conf_id>/<conf_key>/signup_auto_login/<conf_uuid>', methods = ["GET","POST"])
def SignupAutoLogin(conf_id,conf_key,conf_uuid):
	try:
		get_conf  = BadgeUserModel().checkConfUUID(conf_id,conf_uuid)
		if get_conf : 
			if session.get("signupsession") :
				session.pop('signupsession', None)

			session['signupsession']  =  get_conf
			encrypted_admin_id = Cryptography.encrypt(conf_id)
			return redirect (url_for('signup.getSearch',conf_id=conf_id ,conf_key = conf_key))
		else:
			flash("Username is not registered." , "errorMsg")
			return redirect (url_for('signup.SignupLogin',conf_id=conf_id ,conf_key= conf_key))
	except Exception as e:
		msg = str(e)
		flash(msg , "errorMsg")
		return redirect (url_for('signup.SignupLogin',conf_id=conf_id ,conf_key= conf_key))



# CME scan Controller


@app.route('/<int:conf_id>/<conf_key>/cmescan_login', methods = ["GET", "POST"])
def CMEScanLogin(conf_id,conf_key):
	try:
		now = datetime.now()
		current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
		conf_data  = KitSessionModel().getkcConf(conf_id,conf_key,current_dt)
		if conf_data:
			conf_name  = conf_data['conf_name']
			return render_template('cmescan/cme_signup_login.html',conf_id=conf_id,conf_key=conf_key,conf_data=conf_data,conf_name=conf_name)
		else:
			# flash("Invalid session. ","errorMsg")
			# return redirect(url_for('signup.SignupLogin',conf_id=conf_id,conf_key=conf_key))
			return "<h2 style= 'color:red;text-align:center' ; >Invalid Session </h2>"
	except Exception as e:
		msg = str(e)
		flash(msg,"errorMsg")
		return redirect(url_for('signup.CMEScanLogin',conf_id=conf_id,conf_key=conf_key))
	
	
@app.route('/<int:conf_id>/<conf_key>/post_cmescan_login', methods = ["GET", "POST"])
def postCMEScanLogin(conf_id,conf_key):
	if request.method == 'POST':
		username  = request.form['username']
		password  = request.form['password']
		get_conf  = BadgeModel().checkUsername(username,conf_id)
		if get_conf : 
			db_pass =  get_conf['badge_login_password']
			if password == db_pass:
				admin_id = get_conf['conf_id']
				session['cmescansession']   =  get_conf
				return redirect (url_for('signup.getCMEScan',conf_id=conf_id ,conf_key = conf_key))
			else:
				flash("Password is mismatch" , "errorMsg")
				return redirect (url_for('signup.CMEScanLogin',conf_id=conf_id ,conf_key= conf_key))
		else:
			flash("Username is not registered." , "errorMsg")
			return redirect (url_for('signup.CMEScanLogin',conf_id=conf_id ,conf_key= conf_key))
	else :
		return "Method not allowed"			

@app.route('/<int:conf_id>/<conf_key>/cme_search', methods = ["GET", "POST"])
def getCMESearch(conf_id,conf_key):
	if session.get("cmescansession") :
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		count = 0
		if get_conf :
			signup_table        = get_conf["signup_table"] # March 07 2023
			signup_for_alldays  = get_conf["signup_for_alldays"] # March 07 2023
			del_table_name      = get_conf["del_table_name"]
			now           = datetime.now()
			curr_dt       = now.strftime("%Y-%m-%d %H:%M:%S")
			curr_date     = now.strftime("%Y-%m-%d")
# 			curr_date = '2023-03-24'
			delegateData = CMEScanModel().delegateDataForCMEScan(conf_id,del_table_name,signup_for_alldays,signup_table,curr_date)
			
			if delegateData:
				for index,value in enumerate(delegateData):
					count_1 = value['signed_on']
					if count_1:
						count = count+1
			
			# count = SignUpModel().getCount(conf_id,del_table_name)
			return render_template('cmescan/cme_search_delegate.html',conf_id=conf_id,conf_key=conf_key,total=count)
		else :
			return "<h4 style='color:red;'> Invalid URL </h4>"	
	else: 
		flash("Session Expired","errorMsg")
		return redirect(url_for('signup.CMEScanLogin' ,conf_id = conf_id,conf_key= conf_key))

@app.route('/<int:conf_id>/<conf_key>/post_cme_search', methods = [ "POST"])
def postCMESearch(conf_id,conf_key):
	if session.get("cmescansession") :
		if request.method == 'POST':
			now          = datetime.now()
			curr_dt      = now.strftime("%Y-%m-%d %H:%M:%S")
			curr_date    = now.strftime("%Y-%m-%d")
# 			curr_date = '2023-03-24'
			search_data = request.form['search_delegate']
			btn         = request.values.get('search_btn')
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			signup_table        = get_conf["signup_table"] # March 07 2023
			signup_for_alldays  = get_conf["signup_for_alldays"] 
			if get_conf :
				del_table_name = get_conf["del_table_name"]
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"
			
			search_data = search_data.strip()
			if btn == 'Search Del. No':
				delegatesData = CMEScanModel().usp_search_regdesk_v1(del_table_name,search_data,1,conf_id,signup_table,signup_for_alldays,curr_date)
			else:
				delegatesData = CMEScanModel().usp_search_regdesk_v1(del_table_name,search_data,0,conf_id,signup_table,signup_for_alldays,curr_date)
			if delegatesData :
				msg = None
			else: 
				msg = "No Data"

			delegate_data_and_count = CMEScanModel().syncAllDataWithSignedCount(conf_id,del_table_name,curr_date,signup_for_alldays,signup_table)

			if delegate_data_and_count :
				for index,value in enumerate(delegate_data_and_count) :
					if index == 0 :
						delegate_data  = value

					if index == 1 :
						signed_count_1 = value	
				
				if signed_count_1 :
					signed_count = signed_count_1[0]["signed_count"]
			# count = 0
			# count = SignUpModel().getCount(conf_id,del_table_name)
			return render_template('cmescan/cme_search_delegate.html',members=delegatesData,msg=msg,conf_id=conf_id,conf_key=conf_key,total=signed_count,search_data=search_data)
			
		else:
			return redirect(url_for('signup.getCMESearch',conf_id=conf_id,conf_key=conf_key))
	else: 
		flash("Session Expired","errorMsg")
		return redirect(url_for('signup.CMEScanLogin' ,conf_id = conf_id,conf_key= conf_key))

@app.route('/<int:conf_id>/<conf_key>/insert_cme_signup', methods = ["GET", "POST"])
def InsertCMESignup(conf_id,conf_key):
	try:
		if session.get('cmescansession'):
			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()
			curr_dt      = now.strftime("%Y-%m-%d %H:%M:%S")
			curr_date     = now.strftime("%Y-%m-%d")
# 			curr_date = '2023-03-24'
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			signup_table        = get_conf["signup_table"] 
			signup_for_alldays  = get_conf["signup_for_alldays"]
			if get_conf :
				del_table_name = get_conf["del_table_name"]
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"


			update_and_get_count = CMEScanModel().updateAndGetSignedCount(conf_id,delegate_no,del_table_name,curr_dt,signed_by,comments,curr_date,signup_for_alldays,signup_table)
			# total_count = SignUpModel().usp_save_signed_data(conf_id,delegate_no,signed_by,comments,del_table_name)
			if update_and_get_count :
				for index,value in enumerate(update_and_get_count) :
					if index == 0 :
						is_valid_1 = value
					if index == 1 :
						signed_on_1 = value
					if index == 2 :
						signed_count_1 = value	


				
				if signed_count_1 :
					signed_count = signed_count_1[0]["signed_count"]


			datas = {"msg" : "success" ,"status" : 1,'signup_date':curr_date,'total_signed_on':signed_count}
			json_data = json.dumps(datas,default=str)
			return json_data
		else:
			data = { "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,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>/cme_scan_logout', methods = ["GET", "POST"])
def CMEScanLogout(conf_id,conf_key):
	if session.get("cmescansession") :
		session.pop('cmescansession', None)
	else :
		pass
	return redirect(url_for('signup.CMEScanLogin' ,conf_id = conf_id,conf_key= conf_key))
	# Average : {{((total.total_signed_on/total.total_count)*100)|round(2)}}


# Auto login option for  cmescan  option
@app.route('/<int:conf_id>/<conf_key>/cme_scan_auto_login/<conf_uuid>', methods = ["GET","POST"])
def CMEScanAutoLogin(conf_id,conf_key,conf_uuid):
	try:
		get_conf  = BadgeUserModel().checkConfUUID(conf_id,conf_uuid)
		if get_conf : 
			if session.get("cmescansession") :
				session.pop('cmescansession', None)

			session['cmescansession']  =  get_conf
			encrypted_admin_id = Cryptography.encrypt(conf_id)
			return redirect (url_for('signup.getCMESearch',conf_id=conf_id ,conf_key = conf_key))
		else:
			flash("Username is not registered." , "errorMsg")
			return redirect (url_for('signup.CMEScanLogin',conf_id=conf_id ,conf_key= conf_key))
	except Exception as e:
		msg = str(e)
		flash(msg , "errorMsg")
		return redirect (url_for('signup.CMEScanLogin',conf_id=conf_id ,conf_key= conf_key))
		
		
@app.route('/<int:conf_id>/<conf_key>/get_delegate_data_cme', methods = ["GET", "POST"])
def getDelegateDataCME(conf_id,conf_key):
	try:
		if session.get('cmescansession'):
			delegate_no = request.values.get('delegate_no')
			delegateData = CMEScanModel().getDelegateDataCMEScan(conf_id,delegate_no)
			datas = {'prefix':delegateData['prefix'],'full_name':delegateData['full_name'],'email':delegateData['email'],'mobile':delegateData['mobile'],'mc_number':delegateData['mc_number'],'mc_state_id':delegateData['mc_state_id'],'updated_at':delegateData['updated_at']}
			json_data = json.dumps(datas,default=str)
			return json_data
		else:
			data = { "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,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('/mc_state', methods = ["GET","POST"])
def MCState():
	country_id = request.values['country_id']
	data       = CMEScanModel().get_mcstates_of_india(country_id)
	return json.dumps(data)

@app.route('/<int:conf_id>/<conf_key>/update_delegatedata_cme', methods = ["GET", "POST"])
def updateDelegateDataCME(conf_id,conf_key):
	try:
		if session.get('cmescansession'):
			delegate_no = request.values.get('delegate_no') 
			prefix      = request.values.get('prefix') or None
			full_name   = request.values.get('full_name') or None
			email       = request.values.get('email') or " "
			mobile      = request.values.get('mobile') or " "
			mc_number   = request.values.get('mc_number') or None
			mc_state_id = request.values.get('mc_state_id') or None
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			del_table_name = get_conf['del_table_name']
			
			updated_data = CMEScanModel().updateDelegatedata_cme(del_table_name,prefix,full_name,email,mobile,mc_state_id,mc_number,delegate_no,conf_id)
			if updated_data:
				for index,value in enumerate(updated_data) :
					if index == 0:
						userData = value[0]
						if userData and userData['user_id']:
							total_count = CMEScanModel().count_email(userData['user_id'],userData['email'],get_conf['society_id'])
							total_count  = total_count["count"]
							if int(total_count) > 0 :
									msg="Email id already exist, upadated only in delegate table"
							else:
								data = {
									'full_name'         	 : full_name,
									'prefix'            	 : prefix,
									'email'             	 : email,
									'mobile'            	 : mobile,
									'mc_number'              : mc_number,
									'mc_state_id'            :mc_state_id,
									'updated_at'			 : datetime.now()
									}
								output = CMEScanModel().update_member(userData['user_id'],data)
								msg ="Successfully updated"
						else:
							msg="Successfully updated. "
			data = { "msg" : msg ,"status" :1}
			json_data = json.dumps(data,default=str)
			return json_data
						
		else:
			data = { "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,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>/cme_scan', methods = ["GET"])
def getCMEScan(conf_id,conf_key):
	if session.get("cmescansession") :
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		count = 0
		if get_conf :
			signup_table        = get_conf["signup_table"] # March 07 2023
			signup_for_alldays  = get_conf["signup_for_alldays"] # March 07 2023
			del_table_name      = get_conf["del_table_name"]
# 			return json.dumps(delegateData,default=str)
			now           = datetime.now()
			curr_dt       = now.strftime("%Y-%m-%d %H:%M:%S")
			curr_date     = now.strftime("%Y-%m-%d")
			# curr_date = '2023-03-23'
			delegateData = CMEScanModel().delegateDataForCMEScan(conf_id,del_table_name,signup_for_alldays,signup_table,curr_date)
			if delegateData:
				for index,value in enumerate(delegateData):
					count_1 = value['signed_on']
					if count_1:
						count = count+1
			
			return render_template('cmescan/cme_scan_to_signin.html',conf_id=conf_id,conf_key=conf_key,total=count)
		else :
			return "<h4 style='color:red;'> Invalid URL </h4>"	
	else: 
		flash("Session Expired","errorMsg")
		return redirect(url_for('signup.CMEScanLogin' ,conf_id = conf_id,conf_key= conf_key))



@app.route('/<int:conf_id>/<conf_key>/post_cme_scan', methods = [ "POST"])
def PostCMEScan(conf_id,conf_key):
	if session.get("cmescansession") :
		if request.method == 'POST':
			now          = datetime.now()
			curr_dt      = now.strftime("%Y-%m-%d %H:%M:%S")
			curr_date    = now.strftime("%Y-%m-%d")
# 			curr_date    = '2023-03-25'
# 			curr_dt      = '2023-03-25 13:40:00'
			delegate_no = request.values.get('delegate_no',0)
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			signup_table        = get_conf["signup_table"] # March 07 2023
			signup_for_alldays  = get_conf["signup_for_alldays"] 
			if get_conf :
				del_table_name = get_conf["del_table_name"]
			else :
				return "<h4 style='color:red;'> Invalid URL </h4>"
			
			try:
				int(delegate_no)
			except Exception as e:
				delegate_no = 0
			if int(delegate_no) >0 :
				delegatesData = CMEScanModel().usp_search_regdesk_v1(del_table_name,delegate_no,2,conf_id,signup_table,signup_for_alldays,curr_date)
				if delegatesData :
					msg = None
				else: 
					msg = "No Data"


				update_and_get_count = CMEScanModel().update_badge_scan_signup(conf_id,delegate_no,del_table_name,curr_dt,'delegate','Badge Scan',curr_date,signup_for_alldays,signup_table)
				# delegate_data_and_count = CMEScanModel().syncAllDataWithSignedCount(conf_id,del_table_name,curr_date,signup_for_alldays,signup_table)
				# return jsonify(update_and_get_count)
				get_cme_scandata = CMEScanModel().getCMEScanybydelegaateno(conf_id,signup_table,delegate_no)
				if update_and_get_count :
					for index,value in enumerate(update_and_get_count) :
						if index == 0 :
							statuscode  = value[0]["statuscode"]
						if index == 1 :
							msg  = value[0]["msg"]
						if index == 2 :
							signed_count = value[0]["signed_count"]	
						if index == 3:
							delegatesData = value
							if delegatesData:
								delegatesData = delegatesData[0]
							else:
								delegatesData = None
					
				return render_template('cmescan/result.html',delegate_no=delegate_no,statuscode=statuscode,msg=msg,signed_count=signed_count,conf_id=conf_id,data=delegatesData,get_cme_scandata=get_cme_scandata)
				
		return "Invalid Delegate number"
	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"])
def SignedDetails(conf_id,conf_key):
	get_conf  = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf :
		del_table_name = get_conf["del_table_name"]
		signed_data = SignUpModel().getsigned_data(conf_id,del_table_name)
		html_data =  render_template ('signup/unsignup_table.html',conf_id=conf_id,conf_key=conf_key,signed_data=signed_data)

		return render_template ('signup/unsign_delegates.html',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"])
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)
		get_conf    = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name       = get_conf["del_table_name"]
			signup_for_alldays   = get_conf["signup_for_alldays"]
			main_db              = "numerotech_primary_db"
			unsignupdata = SignUpModel().unsignupdata_andbackup(main_db,conf_id,delegate_no,del_table_name,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_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
	
# unsignup delegate number END		

# cme report start
@app.route('/<int:conf_id>/<conf_key>/cme_scan_report', methods = [ "POST","GET"])
def CMEScanReport(conf_id,conf_key):
	# '%Y-%m-%d'
	get_conf    = BadgeModel().GetConf(conf_id,conf_key)
	conf_start_time       = get_conf["conf_start_time"]
	conf_end_time         = get_conf["conf_end_time"]
	date_list = [{'conf_date': (conf_start_time + timedelta(days=i)).strftime('%d-%m-%Y')} for i in range((conf_end_time - conf_start_time).days + 1)]

	if date_list:
		return render_template("cmescan/cme_scan_report.html",conf_id= conf_id,conf_key= conf_key,date_list=date_list)
	else:
		return render_template("cmescan/cme_scan_report.html",conf_id= conf_id,conf_key= conf_key,date_list=date_list)

@app.route('/<int:conf_id>/<conf_key>/cme_scan_day_wise_report', methods = [ "POST","GET"])
def CMEScanDayWiseReport(conf_id,conf_key):
	try:
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf:
			signup_table   = get_conf["signup_table"] # March 07 202
			del_table_name = get_conf["del_table_name"]
			conf_date      = request.values.get("conf_date") or None
			conf_date      = "All" if conf_date == "All" else datetime.strptime(conf_date, "%d-%m-%Y").strftime("%Y-%m-%d")
			delegate_data  = CMEScanModel().getCMEScandelegateRecord(conf_id,del_table_name,signup_table,conf_date)	
			html_data      =  render_template("cmescan/cme_scan_report_table.html",conf_id= conf_id,conf_key= conf_key,delegate_data=delegate_data,conf_date=conf_date,itemgetter=itemgetter,groupby=groupby)
			data           = {"html_data":html_data,"msg" : "" ,"status" :1}
			return json.dumps(data,default=str)
		else:
			data = {"html_data":"","msg" : "INVALID LOGIN" ,"status" :2}
			return json.dumps(data,default=str)

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

@app.route('/<int:conf_id>/<conf_key>/cme_scan_single_day_report_download', methods = [ "POST","GET"])
def CMEScanDayWiseReportDownload(conf_id,conf_key):
	get_conf  = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf:
		signup_table   = get_conf["signup_table"] # March 07 202
		del_table_name = get_conf["del_table_name"]
		conf_name = get_conf["conf_name"]
		conf_date      = request.values.get("conf_date") or None
		delegate_data  = CMEScanModel().getCMEScandelegateRecord(conf_id,del_table_name,signup_table,conf_date)	
		if delegate_data:
			# column_values = column_names
			column_names = ["delegate_no","full_name","email","mobile","role","signin_date","signed_on","state","mc_number","membership_no"]
			column_names   = ["s_no"] + column_names 
			inc_val = 1
			for index,value in enumerate(delegate_data) : 
				value["s_no"] = inc_val
				inc_val = inc_val + 1
			
			return ExportDownloadXSL_single(delegate_data,column_names,conf_key,conf_name)
		else :
			flash("CME Scan Record does not exists." ,"errorMsg")
			return redirect(url_for('signup.CMEScanReport',conf_id=conf_id,conf_key=conf_key))
	else:
		flash("Record does not exists." ,"errorMsg")
		return redirect(url_for('signup.CMEScanReport',conf_id=conf_id,conf_key=conf_key))


def ExportDownloadXSL_single(result_data,sel_columns_for_xl,conf_key,conf_name):
	file_name  = "CME Scan Report"
	now      = datetime.now()
	date     = now.strftime("%Y-%m-%d %H:%M")
	output   = io.BytesIO()
	Workbook = xlwt.Workbook()
	sh       = Workbook.add_sheet('Report')
	idx      = 0
	a 		 = 0

	for row in sel_columns_for_xl:
		row_1 = row
		if row_1 :
			row_1 = row_1.replace("_", " ")
			row_1 = row_1.upper()
			row_1 = row_1.replace("FULL " , "") if "FULL" in row_1  else row_1
		sh.write(0,a,row_1)
		a+=1

	b=0
	for index,row in enumerate(result_data) :
		for i in sel_columns_for_xl:
			sh.write(idx+1, b, row[i])
			b+=1

		b=0
		idx+=1

	Workbook.save(output)
	output.seek(0)
	now     = datetime.now()
	curr_dt = now.strftime("%Y-%m-%d %H:%M")
	return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+conf_name+"-"+file_name+"-"+curr_dt+".xls"})
	
	# cme repot end 


@app.route('/<int:conf_id>/<conf_key>/back', methods = ["GET", "POST"])
def Back(conf_id,conf_key):
	if session.get("cmescansession") :
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			return render_template('cmescan/cme_scan_to_signin.html',conf_id=conf_id,conf_key=conf_key)
		else :
			return "<h4 style='color:red;'> Invalid URL </h4>"	
	else: 
		flash("Session Expired","errorMsg")
		return redirect(url_for('signup.CMEScanLogin' ,conf_id = conf_id,conf_key= conf_key))
		

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