Sindbad~EG File Manager

Current Path : /proc/self/cwd/food_kit_scan_badges/core/controller/
Upload File :
Current File : //proc/self/cwd/food_kit_scan_badges/core/controller/BadgeUserController.py

from flask import request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json
from core.model.BadgeModel import BadgeModel
from core.model.FCModel import FCModel
from core.model.FoodSessionModel import FoodSessionModel
from core.model.BadgeUserModel import BadgeUserModel
from core.model.KitSessionModel import KitSessionModel
from core.library.email import EMAIL

from .. import Cryptography,Helper
from flask import  app
from random import randint
import datetime
from datetime import timedelta,date,datetime,time
from werkzeug.utils import secure_filename
from os.path import join, dirname, realpath
import os

import pandas as pd
import numpy as np
import ast

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

import xlwt

from flask import Flask, make_response
import pyexcel as pe
import boto3, botocore
from botocore.exceptions import ClientError
from core.library.BackgroundTasks import BackgroundTasks


# import for img upload
import os
import base64
from PIL import Image


app = Blueprint('badge_user', __name__)

# Testing 
@app.route('/background', methods = ["GET", "POST"])
def Background():
	print(" Background function calling ...")
	t = BackgroundTasks()
	t.start()
	return "success"
# Testing end


	
### ---------------------------------------------------------------------- ###
# @app.route('/<int:conf_id>/<conf_key>/badge_login', methods = ["GET"])
# def BadgeLogin(conf_id,conf_key):
# 	conf_name = None
# 	get_conf = BadgeModel().GetConf(conf_id,conf_key)
# 	if get_conf :
# 		conf_name = get_conf["conf_name"]
# 	else :	
# 		pass	
# 	if session.get('badge'): 
# 		if get_conf :
# 			return redirect(url_for('badge_user.BadgeDashborad' ,conf_id=conf_id,conf_key=conf_key)) 
# 		else:
# 			flash("Invalid URL" , "errorMsg")
# 			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))
# 	else:
# 		if get_conf :
# 			return render_template('badge_users/login_screen.html' ,conf_data = get_conf,conf_id=conf_id ,conf_key= conf_key,conf_name=conf_name)
# 		else:
# 			flash("Invalid URL" , "errorMsg")
# 			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))		

#  Updated on Jan 12 , 2023
@app.route('/<int:conf_id>/<conf_key>/badge_login', methods = ["GET"])
def BadgeLogin(conf_id,conf_key):
	conf_name = None
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf :
		conf_name = get_conf["conf_name"]
		now       = datetime.now()
		curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
		conf_end_time = get_conf["conf_end_time"]
		

		if datetime.strptime(curr_dt, "%Y-%m-%d %H:%M:%S") < conf_end_time:
			BadgeUserModel().createConfTables(conf_id,conf_key,curr_dt)
			
			if session.get('badge'): 
				return redirect(url_for('badge_user.BadgeDashborad' ,conf_id=conf_id,conf_key=conf_key)) 
			else:
				return render_template('badge_users/login_screen.html' ,conf_data = get_conf,conf_id=conf_id ,conf_key= conf_key,conf_name=conf_name)
		else:
			return "<h4 style='color:red;text-align:center;'>Conference Closed</h4>"
	else :	
		return "<h4 style='color:red;text-align:center;'>Invalid URL </h4>"	
		
# Post_login1 
@app.route('/badge_post_login', methods = ["POST"])
def BadgePostLogin():
	if request.method =="POST" :
		username  = request.form['username']
		password  = request.form['password']
		conf_id   = request.form['conf_id']
		conf_key  = request.form['conf_key']

		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['badge']   =  get_conf
				encrypted_admin_id = Cryptography.encrypt(conf_id)
				return redirect (url_for('badge_user.BadgeDashborad',conf_id=conf_id ,conf_key = conf_key))
			else:
				flash("Password is mismatch" , "errorMsg")
				return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key= conf_key))
		else:
			flash("Username is not registered." , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key= conf_key))
	else :
		return "Method not allowed"			

# logout route
@app.route('/<int:conf_id>/<conf_key>/badge_logout', methods = ["GET", "POST"])
def BadgeLogout(conf_id,conf_key):
	if session.get('badge'):
		session.pop('badge')
	else : 
		pass
		
	session.pop('_flashes', None)
	return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))			

@app.route('/<int:conf_id>/<conf_key>/badge_dashboard', methods = ["GET", "POST"])
def BadgeDashborad(conf_id,conf_key):
	if session.get('badge'):
		conf_data = session.get('badge') 
		conf_name = conf_data['conf_name']
		return render_template('badge_users/dashboard.html',conf_id=conf_id ,conf_key=conf_key,conf_name=conf_name)
	else:
		flash("Invalid Login" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))		


@app.route('/<int:conf_id>/<conf_key>/registered_users', methods = ["GET"])
def RegisteredUsers(conf_id,conf_key):
	if session.get('badge'):
		conf_data      = session.get('badge') 
		conf_name      = conf_data['conf_name']
		del_table_name = conf_data['del_table_name']
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		get_role_data =	BadgeModel().getRole(conf_id)
		if get_conf :
			registered_users = BadgeModel().AllRegUsers(conf_id,del_table_name)
			del_table_columns = BadgeUserModel().getDelegatesTableColumn(conf_id,del_table_name)
			return render_template('badge/registered_users.html' ,conf_data = get_conf,conf_id=conf_id ,conf_key= conf_key,registered_users =registered_users,conf_name=conf_name,b_role =get_role_data,del_table_columns=del_table_columns)
		else :
			flash("Invalid URL" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))				

	else : 
		flash("Invalid URL" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))				

@app.route('/<int:conf_id>/<conf_key>/edit_data/<int:delegate_id>', methods =  ["GET","POST"])
def EditData(conf_id,conf_key,delegate_id):
	if session.get('badge'):
		conf_data      = session.get('badge') 
		conf_name      = conf_data['conf_name']
		del_table_name = conf_data['del_table_name']

		states = BadgeModel().get_states()
		data   = BadgeModel().EditRegisteredData(conf_id,delegate_id,del_table_name)
		return render_template('badge/edit_data.html',data=data,states=states,conf_id=conf_id ,conf_key=conf_key,conf_name=conf_name)
	else :
		flash("Invalid URL" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))
		
@app.route('/<int:conf_id>/<conf_key>/post_edit_data',methods = ['POST', 'GET'])
def PostEditData(conf_id,conf_key):
	now = datetime.now()
	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
	main_db    = "numerotech_primary_db"
	if request.method=="POST":
		if session.get('badge'):
			conf_data      = session.get('badge') 
			conf_name      = conf_data['conf_name']
			# del_table_name = conf_data['del_table_name']
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			if get_conf :
				del_table_name = get_conf["del_table_name"]
			else :
				flash("Invalid login" , "errorMsg")
				return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))

			delegate_id   = request.values.get('delegate_id')
			delegate_id   = int(delegate_id)
			delegate_no   = request.values.get('delegate_no')
			delegate_no   = int(delegate_no)
			
			prefix        = request.values.get('prefix' ,'')  or ''
			full_name     = request.values.get('full_name' ,'')  or ''
			email		  = request.values.get('email'  ,'') or ''
			mobile		  = request.values.get('mobile'  ,'') or ''
			city          = request.values.get('city'  ,'') or ''
			state_name_state_id   = request.values.get('state_name'  ,'') or ''

			state_name    = ''.join(filter(lambda x: not x.isdigit(), state_name_state_id))
			state_id      = ''.join(filter(str.isdigit, state_name_state_id))
			company_name  = request.values.get('company_name') or ''
			counter       = request.values.get('counter') or 0
			batch         = request.values.get('batch'  ,'') or ''
			role          = request.values.get('role'  ,'') or ''
			role_in_cert  = request.values.get('role_in_cert'  ,'') or ''
			if  batch  :
				batch = batch.upper()
			# if  role :
			# 	role  = role.upper()
			#######
			insert_stmt    = "INSERT INTO delegates_logs SELECT NULL,d.*,'"+current_dt+"' FROM "+main_db+".delegates d WHERE d.delegate_no = "+str(delegate_no)+"  and d.conference_id = "+str(conf_id)+";"
			print(insert_stmt)
			update_stmt    = "update "+ del_table_name + " set  prefix = '"+prefix +"' ,full_name = '"+full_name +"' , email = '"+ email +"' , city = '"+city+"' , state = '"+state_name+"' ,mobile='"+mobile+"',company_name='"+company_name+"', counter = "+str(counter)+" , batch = '"+batch+"' , role = '"+role+"' ,updated_at = '"+current_dt+"',role_in_cert = '"+role_in_cert+"'    where delegate_id = " + str(delegate_id) + " ;"
			update_stmt_1  = "update "+ main_db + ".delegates set  prefix = '"+prefix +"' ,full_name = '"+full_name +"' , email = '"+ email +"' , city = '"+city+"' ,mobile='"+mobile+"', role = '"+role+"' , state_id = '"+state_id+"' ,updated_at = '"+current_dt+"'    where conference_id = " +str(conf_id)+ " and delegate_no = " +str(delegate_no)+ " ;"
			# update_stmt  = "update " + del_table_name + " fkd inner join "+ main_db +".delegates pd on fkd.conf_id = pd.conference_id  and fkd.delegate_no = pd.delegate_no set fkd.prefix = '"+prefix+"',pd.prefix = '"+prefix+"',fkd.full_name = '"+full_name+"',pd.full_name= '"+full_name+"', fkd.email = '"+ email +"' , fkd.city = '"+city+"' , fkd.state = '"+state_name+"' ,fkd.mobile='"+mobile+"',fkd.company_name='"+company_name+"', fkd.counter = "+str(counter)+" , fkd.batch = '"+batch+"' , fkd.role = '"+role+"' ,fkd.updated_at = '"+current_dt+"',fkd.role_in_cert = '"+role_in_cert+"' where fkd.conf_id = "+str(conf_id)+" and  fkd.delegate_no = " + str(delegate_no) + " ; " 
			insert_records = BadgeModel().insert_delegates_logs_recored(insert_stmt)
			updated_data   = BadgeModel().UpdateFKDelegates(update_stmt,delegate_id,conf_id)
			updated_data_1 = BadgeModel().UpdatePrimaryDelegates(update_stmt_1,delegate_no,conf_id)

			flash("Record updated ." , "successMsg")
			return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id ,conf_key= conf_key))
			####
			# check_email	=	BadgeModel().check_email_for_update(email,delegate_id,del_table_name)
			# if (check_email ['email_count'] >=1):
			# 	flash('Email Id Already Exists.','errorMsg')
			# 	return redirect (url_for ('badge_user.EditData',delegate_id=delegate_id,conf_id=conf_id ,conf_key= conf_key))
			# else:
			# 	update_stmt = "update "+ del_table_name + " set full_name = '"+full_name +"' , email = '"+ email +"' , city = '"+city+"' , state = '"+state_name+"' where delegate_id = " + str(delegate_id) + " ;"
			# 	updated_data = BadgeModel().UpdateDelegates(update_stmt,delegate_id,conf_id)
			# 	flash("Record updated ." , "successMsg")
			# 	return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id ,conf_key= conf_key))
		else :
			flash("Invalid URL" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))
	else:
		flash("Please try again")
		return redirect(url_for('badge_user.EditData',delegate_id=delegate_id,conf_id=conf_id ,conf_key= conf_key))



#Move delegate records from delegates table into conf-delegate table
@app.route('/<int:conf_id>/<conf_key>/move_delegates', methods = ["GET","POST"])
def MoveDelegates(conf_id,conf_key):
	now = datetime.now()
	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
	getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
	if getFcConfData :
		conf_del_table = getFcConfData["del_table_name"]
			
		checkMaxDelegate = BadgeModel().getMaxDelegateNo(conf_del_table)
		max_del_no = checkMaxDelegate['delegate_no']
		if max_del_no :
			pass 
		else :
			max_del_no = 0
		move_records = BadgeModel().delegateMoveToConfDelegate(conf_id,conf_del_table,max_del_no,current_dt)
		flash(move_records ,"successMsg")
		return redirect (url_for('badge_user.BadgeDashborad',conf_id=conf_id,conf_key=conf_key))
	else :
		return "Invalid URL"
		

##### # nov 07 2022
@app.route('/<int:conf_id>/<conf_key>/role_update', methods = ["GET","POST"])
def RoleUpdate(conf_id,conf_key):
	update_stmt         = ""
	counter   			= request.form['counter']
	batch   			= request.form['batch']
	role   				= request.form['role']
	delegate_no_from   	= request.form['delegate_no_from']
	delegate_no_to   	= request.form['delegate_no_to'] or 0
	delegate_no_from    = int(delegate_no_from)
	delegate_no_to      = int(delegate_no_to)
	batch               = batch.upper()
	# role                = role.upper() # commented on Jan 19,2023
	now                 = datetime.now()
	curr_dt             = now.strftime("%Y-%m-%d %H:%M:%S")
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf  :
		del_table_name = get_conf["del_table_name"]
	else : 
		flash("Invalid login" ,"errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))
	if delegate_no_from and delegate_no_to == 0 :
		update_stmt = update_stmt + " update  " + del_table_name + " set counter = "+(counter)+", batch ='"+str(batch)+"', role ='" +role+"' ,updated_at = '"+curr_dt+"'  where delegate_no >= "+str(delegate_no_from)+"; \n"
	else : 	
		if delegate_no_from < delegate_no_to :
			# if from delgate number is less than delegate to number
			update_stmt = update_stmt + " update  " + del_table_name + " set counter = "+(counter)+", batch ='"+str(batch)+"', role ='" +role+"', updated_at = '"+curr_dt+"'  where delegate_no between "+str(delegate_no_from)+" and  "+str(delegate_no_to)+"; \n"
		else : 
			flash("To delegate number must be  greater than from delegate number" ,"errorMsg")
			return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))
	 
	update_role = BadgeModel().updateCouterBatch(update_stmt)
	if update_role == "success" :
		flash("Successfully role updated" , "successMsg")
		return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))	
	else :
		msg = update_role
		flash(msg , "errorMsg")
		return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))		


# ------------ -------------- -------------
# csv import into conference-delegates records

@app.route('/<int:conf_id>/<conf_key>/bulk_upload', methods = ["GET","POST"])
def BulkUpload(conf_id,conf_key):
	conf_data = BadgeModel().GetConf(conf_id,conf_key)
	if conf_data :
		del_table_name    = conf_data["del_table_name"]
		del_table_columns = BadgeUserModel().getDelegatesTableColumn(conf_id,del_table_name)

		# if del_table_columns :
		return render_template('badge_users/upload_screen.html',conf_id=conf_id,conf_key=conf_key,conf_data=conf_data,del_table_columns=del_table_columns,del_table_name=del_table_name)
	else :
		flash("Invalid URL" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))


	
@app.route('/<int:conf_id>/<conf_key>/post_upload_excel_preview' , methods = ["POST"])
def PostUploadExcelPreview(conf_id,conf_key):
	try:
		data_2      = {}
		all_data    = []
		del_nos     = []
		dub_del_nos = []
		check_dublicate_records = None

		now       = datetime.now()
		curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
		columnss  = request.values.get("column_name", "None")

		file           = request.files['filess']
		del_table_name = request.values.get("del_table_name", "None")
		fileExtension  = request.values.get("fileExtension", "None")
		

		columns_1 = columnss.split(",")
		if fileExtension :
			fileExtension = fileExtension.lower()
			if fileExtension == "csv" :
				data = pd.read_csv(file)
			elif fileExtension == "xlsx" or fileExtension == "xls" :
				data = pd.read_excel(file)
			else :
				return_data = { "html_data" :"" ,"msg" : "CSV and xlsx file type only allowed to upload." ,"status" : 2}
				json_data = json.dumps(return_data,default=str)
				return json_data

					
		df    = data.to_dict('split')
		col_1 = df['columns']
		val_1 = df['data']
		
		delegate_no_index = columns_1.index('delegate_no')
		insert_values     = "("
		insert_stmt       = " INSERT INTO   bulk_upload  ("+columnss+",created_at,conf_id"+")"+"values" 

		if delegate_no_index >= 0  :
			for i in val_1:
				index_value = 0
				for column in columns_1 :
					if column   == "delegate_no" :
						del_no = i[index_value]
						del_nos.append(del_no)
					else :
						pass	

					values_1 = i[index_value]
					if pd.isnull(values_1) :
						# value_2 = None
						value_2 = ""
						insert_stmt = insert_stmt + " "
					else : 
						value_2     = str(values_1)

					data_2[column]  = value_2
					index_value     = index_value +1 
					# data_2["created_at"] = curr_dt

					if ".0" in value_2 :
						value_2 = value_2.replace(".0","")

					insert_values = insert_values+"'"+value_2+"',"

				insert_values = insert_values+ "'"+curr_dt+"','"+str(conf_id) +"'"	
				insert_values = insert_values+"),("		

				all_data.append(data_2)
				data_2 = {} # clear the temp dictionary

			insert_values = insert_values[:-2]	
			insert_query  = insert_stmt+insert_values

		else :
			return_data = { "html_data" :"" ,"msg" : "You must select  delegate Number field" ,"status" : 3}
			json_data = json.dumps(return_data,default=str)
			return json_data

		if len(del_nos) > 0 :
			columnss = columnss + ",created_at,conf_id"
			del_nos = str(del_nos)
			del_nos = del_nos.replace("[" ,"")
			del_nos = del_nos.replace("]" ,"")
		
			# preview_records = BadgeUserModel().insertBulkUploadTempTablePreview(conf_id,insert_query,columnss,del_table_name,del_nos)
			# for index ,value in enumerate(preview_records) :
			# 	if index == 0 :
			# 		all_data = value
			
			# 	if index == 1:
			# 		check_dublicate_records = value

			all_data                = BadgeUserModel().bulkuploadPreview1(conf_id,insert_query,columnss,del_table_name,del_nos)
			check_dublicate_records = BadgeUserModel().bulkuploadDublicatePreview2(conf_id,insert_query,columnss,del_table_name,del_nos)
		
		if  check_dublicate_records:
			for index,value  in enumerate(check_dublicate_records) :
				dub_del_no = value['delegate_no']	
				dub_del_nos.append(dub_del_no)

			if len(dub_del_nos)== 0 :
				dub_del_nos = None
			else:	
				pass	

		html_data = render_template('badge_users/excel_data_preview_table.html' ,all_data =all_data,columns_1 = columns_1,str=str, dulicate_records =check_dublicate_records,dub_del_nos=dub_del_nos,type=type)	
		return_data = { "html_data" :html_data ,"msg" : "success" ,"status" : 1,'dub_del_nos' : dub_del_nos}
		json_data = json.dumps(return_data,default=str)
		return json_data
	except Exception as e:
		msg = "Please select exact columns and correct order"
		return_data = { "html_data" :"" ,"msg" : str(e) ,"status" : 401,'dub_del_nos' : dub_del_nos}
		json_data = json.dumps(return_data,default=str)
		return json_data


@app.route('/<int:conf_id>/<conf_key>/save_excel_data' , methods = ["POST"])
def SaveExcelData(conf_id,conf_key):
	try:
		data_2   = {}
		all_data = []
		# Added on Jan 09, 2023
		del_nos     = []
		dub_del_nos = []
		check_dublicate_records = None

		now       = datetime.now()
		curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
		columnss  = request.values.get("column_name") or None
		file      = request.files['filess']
		del_table_name = request.values.get("del_table_name") or None
		fileExtension  = request.values.get("fileExtension") or None

		dub_del_nos     = request.values.get("common_del_nos") or None
		checked_del_nos = request.values.get("checked_del_nos") or None

		columns_1 = columnss.split(",")
		if fileExtension :
			fileExtension = fileExtension.lower()
			if fileExtension == "csv" :
				data = pd.read_csv(file)
			elif fileExtension == "xlsx" or fileExtension == "xls" :
				data = pd.read_excel(file)
			else :
				return_data = { "html_data" :"" ,"msg" : "CSV and xlsx file type only allowed to upload." ,"status" : 2}
				json_data = json.dumps(return_data,default=str)
				return json_data

					
		df    = data.to_dict('split')
		col_1 = df['columns']
		val_1 = df['data']

		delegate_no_index = columns_1.index('delegate_no')
		insert_values = "("

		insert_stmt = " INSERT INTO  bulk_upload ("+columnss+",created_at,conf_id"+")"+"values" 
		# insert_stmt = " INSERT INTO " + del_table_name + "("+columnss+",created_at,conf_id"+")"+"values" 
		for i in val_1:
			index_value = 0
			for column in columns_1 :
				values_1 = i[index_value]
				if pd.isnull(values_1) :
					# value_2 = None
					value_2 = ""

					insert_stmt = insert_stmt + " "
				else : 
					value_2     = str(values_1)

				data_2[column]  = value_2
				index_value     = index_value +1 

				if ".0" in value_2 :
					value_2 = value_2.replace(".0","")
				insert_values = insert_values+"'"+value_2+"',"


			insert_values = insert_values+ "'"+curr_dt+"','"+str(conf_id) +"'"	
			# insert_values = insert_values[:-1]	
			insert_values = insert_values+"),("	
			
			all_data.append(data_2)

			data_2 = {} # clear the temp dictionary


		insert_values = insert_values[:-2]	
		insert_query  = insert_stmt+insert_values
		columnss      = columnss + ",created_at,conf_id"

		insert_to_db  = BadgeUserModel().bulkuploadSelected(conf_id,insert_query,columnss,del_table_name,checked_del_nos)

		# upload = BadgeUserModel().insertBulkUpload(conf_id,insert_query,columnss,del_table_name,checked_del_nos)
		if insert_to_db == "success" :
			return_data = { "html_data" :"" ,"msg" : "Successfully uploaded." ,"status" : 1}
		else : 	
			return_data = { "html_data" :"" ,"msg" : str(insert_to_db) ,"status" : 2}

		json_data = json.dumps(return_data,default=str)
		return json_data
	except Exception as e:
		msg = "Please select exact columns and correct order"
		return_data = { "html_data" :"" ,"msg" : str(e) ,"status" : 401}
		json_data = json.dumps(return_data,default=str)
		return json_data



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

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

# Remove delegate records on the conf-delegate table only
@app.route('/<int:conf_id>/<conf_key>/remove_delegate_records', methods = ["POST"])
def RemoveDelegateRecords(conf_id,conf_key):
	try:
		dub_del_nos         = request.values.get("dub_del_nos") or None
		remove_delegate_nos = request.values.get("remove_del_nos")  or None
		del_table_name      = request.values.get("del_table_name") or None
		columnss 		    = request.values.get("col_names") or None

		remove_and_get_remain_records = BadgeUserModel().removeAndGetRemainRecords(conf_id,del_table_name,dub_del_nos,columnss,remove_delegate_nos)
		GetAllRecordsFromFile         = BadgeUserModel().GetAllRecordsFromFile(conf_id,del_table_name,dub_del_nos,columnss,remove_delegate_nos)
		
		columns_1 = columnss.split(",")

		if dub_del_nos and remove_delegate_nos :
			dub_del_nos_list         = dub_del_nos.split(",")
			remove_delegate_nos_list = remove_delegate_nos.split(",")
			l3 = [x for x in dub_del_nos_list if x not in remove_delegate_nos_list]


			l3 = str(l3)
			dub_del_nos_1 = l3.replace("[" , "").replace("]" , "")

		html_data = render_template('badge_users/excel_data_delete_table.html' ,all_data =GetAllRecordsFromFile,columns_1 = columns_1,str=str, dulicate_records =remove_and_get_remain_records,dub_del_nos=dub_del_nos_1,type=type)	
		return_data = { "html_data" :html_data ,"msg" : "success" ,"status" : 1,'dub_del_nos' : dub_del_nos}
		json_data = json.dumps(return_data,default=str)
		return json_data
	except Exception as e:
		msg = "Please select exact columns and correct order"
		return_data = { "html_data" :"" ,"msg" : str(e) ,"status" : 401,'dub_del_nos' : dub_del_nos}
		json_data = json.dumps(return_data,default=str)
		return json_data

# remove test record fuction start
# santhosh
# 2023-08-18 12:46:00
@app.route('/<int:conf_id>/<conf_key>/fc_test_records',methods = ["GET","POST"])
def FcTestRecords(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if  get_conf :
		ses_entry_table = get_conf["fc_session_entry_table_name"]
		if ses_entry_table :
			fc_remove_data         = BadgeUserModel().FcScannedTestRecords(conf_id,ses_entry_table)
		else :
			flash("Invalid URL","errorMsg")
			return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))
				
	else :
		flash("Invalid URL","errorMsg")
		return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))	
	
	return render_template('badge_users/fc_remove_test_record.html',conf_id = conf_id,conf_key=conf_key,fc_remove_data=fc_remove_data)


@app.route('/<int:conf_id>/<conf_key>/fc_delete_records/<int:session_id>',methods = ["GET","POST"])
def FcDeleteRecords(conf_id,conf_key,session_id):
	try:
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if  get_conf :
			ses_entry_table = get_conf["fc_session_entry_table_name"]
			if ses_entry_table :
				del_stmt = " Delete from " + ses_entry_table + "  where session_id = "+ str(session_id) +" ;"
				remove_test_record         = BadgeUserModel().delete_test_record(del_stmt)
				html_data   =  render_template('badge_users/fc_remove_test_record.html',conf_id = conf_id,conf_key=conf_key)
				return_data = { "html_data" :html_data ,"msg" : "" ,"status" : 1}
				return json.dumps(return_data,default=str)
			else :
				return_data = { "html_data" :"" ,"msg" : "Session entry table not exists." ,"status" : 2}
				return json.dumps(return_data,default=str)
					
		else :
			return_data = { "html_data" :"" ,"msg" : "Invalid URL." ,"status" : 3}
			return json.dumps(return_data,default=str)	

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

# KIT Session view and delete block
@app.route('/<int:conf_id>/<conf_key>/kc_test_records',methods = ["GET","POST"])
def KcTestRecords(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if  get_conf :
		ses_entry_table = get_conf["kc_session_entry_table_name"]
		if ses_entry_table :
			kc_remove_data         = BadgeUserModel().KcScannedTestRecords(conf_id,ses_entry_table)
		else :
			flash("Invalid URL","errorMsg")
			return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))
				
	else :
		flash("Invalid URL","errorMsg")
		return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))	
	
	return render_template('badge_users/kc_remove_test_record.html',conf_id = conf_id,conf_key=conf_key,kc_remove_data=kc_remove_data)


@app.route('/<int:conf_id>/<conf_key>/kc_delete_records/<int:session_id>',methods = ["GET","POST"])
def KcDeleteRecords(conf_id,conf_key,session_id):
	try:
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if  get_conf :
			ses_entry_table = get_conf["kc_session_entry_table_name"]
			if ses_entry_table :
				del_stmt = " Delete from " + ses_entry_table + "  where session_id = "+ str(session_id) +" ;"
				remove_test_record         = BadgeUserModel().delete_test_record(del_stmt)
				
				html_data   =  render_template('badge_users/kc_remove_test_record.html',conf_id = conf_id,conf_key=conf_key)
				return_data = { "html_data" :html_data ,"msg" : "" ,"status" : 1}
				return json.dumps(return_data,default=str)
			else :
				return_data = { "html_data" :"" ,"msg" : "Session entry table not exists." ,"status" : 2}
				return json.dumps(return_data,default=str)
					
		else :
			return_data = { "html_data" :"" ,"msg" : "Invalid URL." ,"status" : 3}
			return json.dumps(return_data,default=str)	

	except Exception as e:
		return_data = { "html_data" :"" ,"msg" : str(e) ,"status" : 401}
		return json.dumps(return_data,default=str)	
# KIT Session end		
	
# remove test record fuction End
		
#role update by Aravinth
#17.08.2023

@app.route('/<int:conf_id>/<conf_key>/role_compare_update', methods = ["GET","POST"])
def RoleCompareUpdate(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if session.get('badge') and get_conf :
		del_table_name = get_conf["del_table_name"]
		delegates_data = BadgeUserModel().get_data_for_role_update(conf_id,del_table_name)
		return render_template('badge_users/role_update.html',conf_id=conf_id,conf_key=conf_key,conf_data=get_conf,delegates_data=delegates_data,del_table_name=del_table_name)
	else:
		flash("Invalid Login" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))

@app.route('/<int:conf_id>/<conf_key>/role_update_in_conf_del_table', methods = ["GET","POST"])
def RoleUpdateInConfDelTable(conf_id,conf_key):
	updated_at     = datetime.now()
	try:
		delegate_no    = request.values.get('delegate_no') or None
		del_table_name = request.values.get('del_table_name') or None
		if del_table_name :
			if delegate_no and len(delegate_no) > 0 :
				conf_del_update_data = BadgeUserModel().conf_del_update_in_data(conf_id,del_table_name,delegate_no,updated_at)
				return_data          = {"msg" : "success" ,"status" : 1}
				
			else:
				return_data     = {"msg" : "Please select atleast one delegate number" ,"status" : 2}
		else :
			return_data = {"msg" : "Conference delegate table does not exists." , "status" : 3}
		

		json_data   = json.dumps(return_data,default =str)
		return json_data

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

@app.route('/<int:conf_id>/<conf_key>/role_update_in_del_table', methods = ["GET","POST"])
def RoleUpdateInDelTable(conf_id,conf_key):
	updated_at     = datetime.now()
	try:
		delegate_no    = request.values.get('delegate_no') or None
		del_table_name = request.values.get('del_table_name') or None
		if del_table_name :
			if delegate_no and len(delegate_no) > 0 :
				del_update_data = BadgeUserModel().del_update_in_data(conf_id,del_table_name,delegate_no,updated_at)
				return_data     = {"msg" : "success" ,"status" : 1}
				
			else:
				return_data     = {"msg" : "Please select atleast one delegate number" ,"status" : 2}
		else :
			return_data = {"msg" : "Conference delegate table does not exists." , "status" : 3}		
			
		json_data       = json.dumps(return_data,default=str)
		return json_data
	except Exception as e:
		return_data     = {"msg" : str(e) ,"status" : 401}
		json_data       = json.dumps(return_data,default=str)
		return json_data
		
# create backup start
# santhosh, 22 august 2023

@app.route('/<int:conf_id>/<conf_key>/fc_data',methods = ["GET","POST"])
def FcData(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if  get_conf :
		ses_entry_table = get_conf["fc_session_entry_table_name"]
		conf_name = get_conf["conf_name"]
		fc_back_table = "numerotech_foodkit.fc_sessions_entry_backup_"+conf_key
		if ses_entry_table :
			backup_data = BadgeUserModel().getbackupscandata(conf_id,ses_entry_table)
			backup_table_data = BadgeUserModel().getbackupscandatabackup(conf_id,fc_back_table)

			return render_template('badge_users/backup_scan_data.html',conf_id = conf_id,conf_key=conf_key,backup_data=backup_data,conf_name=conf_name,backup_table_data=backup_table_data)
		else :
			flash("Session entry tabel not exists ","errorMsg")
			return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))		
	else :
		flash("Invalid URL","errorMsg")
		return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))	

@app.route('/<int:conf_id>/<conf_key>/backup_fc_data/<int:session_id>',methods = ["GET","POST"])
def BackupFcData(conf_id,conf_key,session_id):
	delegates_no_count   = 0
	delegate_entry_count = 0
	try:
		back_data = BadgeUserModel().create_backup(conf_id,conf_key,session_id)
		if back_data :
			for index,value  in enumerate(back_data) :
				if index == 0 :
					data  = value[0]
					delegates_no_count = data['del_no_count_in_session_table']
				if index == 1 :
					data_1    = value[0]
					delegate_entry_count = data_1['session_entry_del_count']

			# html_data = render_template('badge_users/backup_scan_data.html',conf_id = conf_id,conf_key=conf_key)
			data = { "delegates_no_count":delegates_no_count,"delegate_entry_count":delegate_entry_count,"msg" : "Successfully created backup " ,"status" : 1}
			return json.dumps(data,default=str)
		else :
			data = { "delegates_no_count":delegate_entry_count,"delegate_entry_count":delegate_entry_count,"msg" : "There is no food counter data for backup" ,"status" : 2}
			return json.dumps(data,default=str)
	except Exception as e:
		data = { "delegates_no_count":delegates_no_count,"delegate_entry_count":delegate_entry_count, "msg" : str(e) ,"status" : 401}
		return json.dumps(data,default=str)
# create backup end



# Backup table start
@app.route('/<int:conf_id>/<conf_key>/view_fc_backup_data',methods = ["GET", "POST"])
def ViewFcBackupData(conf_id,conf_key):
	total_count = 0
	start_time   = ""
	end_time     = ""
	session_name = ""
	session_key = request.values.get("session_key") or None
	if not session_key :
		flash("Invalid sessions" ,"errorMsg")
		return redirect(url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))
	else :
		now          = datetime.now()
		current_dt   = now.strftime("%d-%m-%Y %H:%M:%S")
		current_dt_1 = now.strftime("%Y-%m-%d %H:%M:%S")
		getFCConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
		if getFCConfData :
			conf_name                   = getFCConfData["conf_name"]
			del_table_name              = getFCConfData["del_table_name"]
			fc_del_session_table_name   = getFCConfData["fc_del_session_table_name"]
			# fc_session_entry_table_name = getFCConfData["fc_session_entry_table_name"]
			fc_session_entry_table_name = "numerotech_foodkit.fc_sessions_entry_backup_"+conf_key
			is_session_open = FCModel().getDataBysession_key(session_key,current_dt,conf_id,conf_key)
			if is_session_open :
				session_name = is_session_open["session_name"]
				start_time   = is_session_open["start_time"]
				end_time     = is_session_open["end_time"]
				session_id   = is_session_open["session_id"]

				if start_time :
					start_time = start_time.strftime("%d-%m-%Y %H:%M:%S")
				if end_time :
					end_time   = end_time.strftime("%d-%m-%Y %H:%M:%S")

				scan_system_name = "System-1"
				system_wise_scan =  getFCConfData["system_wise_scan"] # Added on August 07,2023
				scanned_data = FCModel().getFCReportbackup(session_id,conf_id,conf_key,del_table_name,fc_session_entry_table_name,system_wise_scan,scan_system_name,role_wise_report=1)
				if scanned_data : 
					for index,value in enumerate(scanned_data) :
						scan_count   = value["scanned_count"]
						total_count  = total_count + scan_count

				html_data = render_template('foodcounter/report_table.html' , scanned_data = scanned_data,total_count=total_count,system_wise_scan=system_wise_scan,int=int)
				role_data = render_template('foodcounter/fc_download_report_dropdown.html' , scanned_data = scanned_data)
				return render_template('foodcounter/fc_dashboard_report_only.html' ,html_data =html_data , scanned_data = scanned_data,total_count = total_count ,current_dt=current_dt,start_time =start_time ,end_time=end_time,session_name =session_name,conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,del_table_name=del_table_name,fc_del_session_table_name=fc_del_session_table_name,fc_session_entry_table_name=fc_session_entry_table_name,role_data=role_data,session_key=session_key)
			
			else:
				flash("Invalid session key","errorMsg")
				return redirect(url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))
		else :
			return "<h4 style= 'color:red' ; >Invalid URL </h4>"
	
	# end



@app.route('/send_fc_report_mail_backup/<int:session_key>',methods = [ "POST"])
def SendFCReportMailBackup(session_key):
	total_count = 0
	scan_count  = 0
	now = datetime.now()
	current_dt   = now.strftime("%d-%m-%Y %H:%M:%S")
	current_date = now.strftime("%d-%m-%Y")
	mail_ids      = request.form['mail_id']
	conf_id       = request.form['conf_id']
	conf_key      = request.form['conf_key']
	if not session_key :
		flash("Invalid sessions" ,"errorMsg")
		return redirect(url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))
	else:
		if mail_ids:
			last_char = mail_ids[-1:]
			# check last character is commma 
			if "," ==  last_char :
				mail_ids = re.sub(r".$", "", mail_ids)
			# check white spance in given inputs ,if exist then replace as empty
			if " " in mail_ids :
				mail_ids = mail_ids.replace(" " ,"")
			# set list from a string using comma character	
			mail_list = list(mail_ids.split(","))
			session_data = FCModel().getDataBysession_key(session_key,current_dt,conf_id,conf_key)
			if session_data:
				get_conf      = BadgeModel().GetConf(conf_id,conf_key)
				session_id   = session_data["session_id"]
				scan_system_name = 'System-2' # updated on July 07, 2023
				getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
				conf_name = getFcConfData["conf_name"]
				del_table_name = getFcConfData["del_table_name"]
				# fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]
				fc_session_entry_table_name = "numerotech_foodkit.fc_sessions_entry_backup_"+conf_key
				# scan_system_name = 'System-2'
				system_wise_scan            =  getFcConfData["system_wise_scan"] # Added on August 07,2023
				scanned_data = FCModel().getFCReport(session_id,conf_id,conf_key,del_table_name,fc_session_entry_table_name,system_wise_scan,scan_system_name,role_wise_report=1)
				if scanned_data : 
					for index,value in enumerate(scanned_data) :
						scan_count  = value["scanned_count"]
						total_count = total_count + scan_count 
								
				mail_template = render_template('foodcounter/fc_email/fc_report_mail.html' , scanned_data = scanned_data,total_count=total_count,system_wise_scan=system_wise_scan)
	# 			subject       = " "+ conf_name+"- Food counter Report on " + current_date
				subject       = " "+ conf_name+"- Food counter Report"
				try:
					for email in mail_list:
						# parsing the element from a list using for loop
						# send mail here
						EMAIL.FcReportMail(subject,mail_template,email,get_conf)
					flash("Report mail has been sent .","successMsg")
					return redirect(url_for('badge_user.ViewFcBackupData' ,conf_id = conf_id , conf_key=conf_key,session_key=session_key))
				except Exception as e:
					return str(e)
			else :
				flash("No session data" , "errorMsg")
				return redirect(url_for('badge_user.ViewFcBackupData' ,conf_id = conf_id , conf_key=conf_key,session_key=session_key))
		else :
			flash("Please enter atleast one mail-id ." ,"errorMsg")
			return redirect(url_for('badge_user.ViewFcBackupData' ,conf_id = conf_id , conf_key=conf_key,session_key=session_key))
			
# remove registered delegate start  ---------------------------------- Sep 12, 2023  To live ----------
@app.route('/<int:conf_id>/<conf_key>/conf-delegates', methods = ["GET","POST"])
def ConfDelegates(conf_id,conf_key):
	ConfData = BadgeUserModel().getConfData(conf_id,conf_key)
	if ConfData :
		del_table_name     = ConfData["del_table_name"]
		role_data          = BadgeUserModel().getDelegateRole(conf_id)
		return render_template('badge_users/conf_delegates.html',conf_id = conf_id,conf_key = conf_key,role_data=role_data,del_table_name=del_table_name)
	else:
		flash('Invalid URL  mismach.',"errorMsg")
		return "<h2 style= 'color:red;text-align:center' ; >Invalid URL </h2>"

@app.route('/<int:conf_id>/<conf_key>/view_conf_delegates', methods = ["GET","POST"])
def ViewConfDelegates(conf_id,conf_key):
	delegate_nos = None
	from_del_no  = None
	to_del_no    = None
	del_list     = []
	try:
		del_values_list = []
		b_role             		= request.values.get("b_role")  or None
		delegate_nos           	= request.values.get("delegate_nos")   or None
		del_table_name         	= request.values.get("del_table_name") 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 "-" in delegate_nos :
				result   = delegate_nos.split('-')
				if result and len(result)>0:
					from_del_no = result[0] if result[0] else None 
					to_del_no   = result[1] if result[1] else None
					from_del_no = int(from_del_no) if from_del_no else from_del_no
					to_del_no   = int(to_del_no) if to_del_no else to_del_no
					to_del_no   = to_del_no + 1 if to_del_no else to_del_no
					del_list = list(range(from_del_no, to_del_no))
					if len(del_list) > 0 :
						del_nos = str(del_list)
						del_nos  = del_nos.replace("[" , "")
						delegate_nos  = del_nos.replace("]" , "")
			else :
				pass			
		else :
			pass
		delegate_data = BadgeUserModel().get_data_for_remove(conf_id,del_table_name,b_role,delegate_nos)
		if delegate_data : 
			html_data  =  render_template('badge_users/conf_delegates_table.html',conf_id=conf_id,conf_key=conf_key,delegate_data=delegate_data,b_role=b_role,delegate_nos=delegate_nos)
			data       = { "html_data":html_data,"msg" : "" ,"status" : 1}
			return json.dumps(data,default=str)
		else:
			data       = { "html_data":"","msg" : " No record found." ,"status" : 2 }
			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>/remove_conf_delegates_by_delegate_id', methods = ["GET","POST"])
def RemoveConfDelegatesByDelegateId(conf_id,conf_key):
	try:
		ConfData = BadgeUserModel().getConfData(conf_id,conf_key)
		if ConfData :
			del_table_name          = ConfData["del_table_name"] or None
			b_role                  = request.values.get("b_role") or None
			delegate_ids            = request.values.get("delegate_ids")  or None
			all_delegate_nos        = request.values.get("all_delegate_nos")  or None
			if all_delegate_nos :
				all_delegate_nos    = all_delegate_nos[:-1] if all_delegate_nos.endswith(",") else all_delegate_nos or None
			removedbadge_delno      = BadgeUserModel().removeConfDelegatesByIds(conf_id,del_table_name,delegate_ids)
			delegate_data           = BadgeUserModel().get_data_for_remove(conf_id,del_table_name,b_role,all_delegate_nos)
			html_data               =  render_template('badge_users/conf_delegates_table.html',conf_id=conf_id,conf_key=conf_key,delegate_data=delegate_data,b_role=b_role,delegate_ids=delegate_ids)

			if removedbadge_delno == "success":
				data = {"html_data":html_data,"msg" : "Successfully Deleted ." ,"status" : 1}
			else:
				data = {"html_data":html_data,"msg" : "'Deleted Failed'" ,"status" : 2}

			return json.dumps(data,default=str)
		else:
			data = {"html_data":"","msg" : "'Invalid URL  mismach.'" ,"status" : 3}
		return json.dumps(data,default=str)
	except Exception as e:
		data = {"html_data":"","html_data":"","msg" : str(e) ,"status" : 401}
		return json.dumps(data,default=str)
		
		
@app.route('/<int:conf_id>/<conf_key>/truncate_conf_delegates', methods = ["GET","POST"])
def TruncateConfDelegates(conf_id,conf_key):
	try:
		del_table_name      = request.values.get("del_table_name")  or None
		conf_del_data       = BadgeUserModel().get_conf_delegate_details(del_table_name)
		if conf_del_data:
			truncate_del_table  = BadgeUserModel().truncateConfDelegates(del_table_name)
			if truncate_del_table == "success":
				data = {"msg" : "Successfully truncated" ,"status" : 1}
				return json.dumps(data,default=str)
			else:
				data = {"msg" : "truncate failed" ,"status" : 2}
				return json.dumps(data,default=str)
		else:
			data = {"msg" : "Data not exists in table or it is already truncated." ,"status" : 3}
			return json.dumps(data,default=str)
	except Exception as e:
		data = {"msg" : str(e) ,"status" : 401}
		return json.dumps(data,default=str)

# remove registered delegate end

# ----------------------------------------------------------------------------------
# Ganesan code start --------
@app.route('/<int:conf_id>/<conf_key>/custom_delegate_session_map', methods = ["GET","POST"])
def CustomDelegateSessionMap(conf_id,conf_key):
	ConfData = BadgeUserModel().getConfData(conf_id,conf_key)
	if ConfData :
		del_table_name            = ConfData["del_table_name"]
		fc_del_session_table_name = ConfData["fc_del_session_table_name"]
		kc_del_session_table_name = ConfData["kc_del_session_table_name"]
		return render_template('delegates_sessions/custom_delegates_sessions_map.html',conf_id = conf_id,conf_key = conf_key,fc_del_session_table_name=fc_del_session_table_name,kc_del_session_table_name=kc_del_session_table_name,del_table_name=del_table_name)
	else:
		flash('Invalid URL.',"errorMsg")
		return "<h2 style= 'color:red;text-align:center' ; >Invalid URL </h2>"

@app.route('/<int:conf_id>/<conf_key>/view_custom_delegate_session_map', methods = ["GET","POST"])
def ViewCustomDelegateSessionMap(conf_id,conf_key):
	try:
		del_values_list             = []
		delegate_nos           	    = request.values.get("delegate_nos")   or None
		full_name             		= request.values.get("full_name")  or None
		del_table_name         	    = request.values.get("del_table_name") or None
		
		fc_del_session_table_name   = request.values.get("fc_del_session_table_name") or None
		kc_del_session_table_name   = request.values.get("kc_del_session_table_name") or None
		session_for                 = request.values.get("session_for") 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 "fc" in session_for :
			session_data = BadgeUserModel().getFCSessionData(conf_id,conf_key)
		else :
			session_data = BadgeUserModel().getkCSessionData(conf_id,conf_key)
				
		delegate_data  = BadgeUserModel().get_delegate_nos_by_name_delno(conf_id,del_table_name,full_name,delegate_nos)
		if delegate_data : 
			html_data  =  render_template('delegates_sessions/custom_delegates_index.html',conf_id=conf_id,conf_key=conf_key,delegate_data=delegate_data,delegate_nos=delegate_nos,session_data=session_data,kc_del_session_table_name=kc_del_session_table_name,session_for=session_for)
			data       = { "html_data":html_data,"msg" : "" ,"status" : 1}
			return json.dumps(data,default=str)
		else:
			data       = { "html_data":"","msg" : "No  record found." ,"status" : 2 }
			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>/add_del_session_map', methods = ["GET","POST"])
def AddDelSessionMap(conf_id,conf_key):
	now       = datetime.now()
	curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
	save_or_delete = ""
	msg            = ""
	try:
		ConfData = BadgeUserModel().getConfData(conf_id,conf_key)
		if ConfData :
			session_id                = request.values.get("session_id") or None
			delegate_ids              = request.values.get("delegate_ids")  or None
			full_name                 = request.values.get("full_name")  or None
			all_delegate_nos          = request.values.get("all_delegate_nos")  or None
			del_table_name            = request.values.get("del_table_name")  or None
			fc_del_session_table_name = request.values.get("fc_del_session_table_name")  or None
			kc_del_session_table_name = request.values.get("kc_del_session_table_name") or None
			session_for               = request.values.get("session_for") or None
			is_delete                 = request.values.get("is_delete") or 0

			is_delete  = int(is_delete) if is_delete else  is_delete

			delegate_ids              = [delegate_ids]
			delegate_ids              = delegate_ids[0].split(',')
			if all_delegate_nos :
				all_delegate_nos      = all_delegate_nos[:-1] if all_delegate_nos.endswith(",") else all_delegate_nos or None

			if "fc" in session_for :
				del_session_table     = fc_del_session_table_name
				session_data          = BadgeUserModel().getFCSessionData(conf_id,conf_key)	
			else :
				del_session_table 	  = kc_del_session_table_name
				session_data      	  = BadgeUserModel().getkCSessionData(conf_id,conf_key)	
			 
			if is_delete > 0 :
				for del_id_1 in delegate_ids :
					remove_delegate = BadgeUserModel().remove_custom_delegate_no(del_table_name,del_session_table,session_id,del_id_1)
				
				save_or_delete = remove_delegate
				msg            = "Successfully removed ." 
			else : 
				delegate_ids = str(delegate_ids)
				delegate_ids = delegate_ids.replace("[","")
				delegate_ids = delegate_ids.replace("]","")	
				insert_delegate= BadgeUserModel().insert_custom_delegate_no(conf_id,del_session_table,del_table_name,session_id,delegate_ids,curr_dt) 
				
				msg = "Successfully Inserted ."    
				save_or_delete = insert_delegate

			delegate_data              = BadgeUserModel().get_delegate_nos_by_name_delno(conf_id,del_table_name,full_name,all_delegate_nos)
			html_data                  = render_template('delegates_sessions/custom_delegates_index.html',conf_id=conf_id,conf_key=conf_key,delegate_data=delegate_data,delegate_ids=delegate_ids,session_data=session_data)

			if save_or_delete == "success" :
				data = {"html_data":html_data,"msg" : msg ,"status" : 1}
				return json.dumps(data,default=str)
			else:
				data = {"html_data":html_data,"msg" : "'Inserted Failed'" ,"status" : 2}

			return json.dumps(data,default=str)
		else:
			data = {"html_data":"","msg" : "'Invalid URL  mismach.'" ,"status" : 3}

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

# end -------  --------	---------  -----------
			
# Kit counter report and signup report with filter day wise and role wise (send mail option and download)
# created by Aravinth 04-09-2023 12.05 PM

@app.route('/<int:conf_id>/<conf_key>/signup_reports',methods= ["GET","POST"])
def SignupReports(conf_id,conf_key):
	session_name  = None
	sel_columns   = []
	role_list     = ["All-Role"]
	my_list       = []
	signin_count  = []
	
	session_id         = request.values.get('session_id') or 0
	session_name       = request.values.get('session_name') or None		
	report_type        = request.values.get("report_type") or 'count_only'
	group_by_role      = request.values.get("group_by_role") or 0
	group_by_datewise  = request.values.get("group_by_datewise") or 0
	group_by_signedon  = group_by_datewise
	column_name        = request.values.getlist("column_name") or None
	order_by           = request.values.get("order_by") or None
	mail_ids           = request.values.get("email_list") or None
	date_1             = request.values.get("date_1") or "All-Days"
	role	           = request.values.getlist("select_role") or "'All-Role'"

	get_conf       	= BadgeModel().GetConf(conf_id,conf_key)
	if session.get('badge') and get_conf:
		del_table_name 	= get_conf["del_table_name"]
		ses_entry_table = None
		if del_table_name :
			del_table_columns = BadgeUserModel().getDelegatesColumnForReports(conf_id,del_table_name,ses_entry_table,report_name="SIGNUP")
			role_data         = BadgeUserModel().get_role(conf_id,del_table_name)
			email_data        = BadgeUserModel().get_email_ids(conf_id)

			if role_data:
				for index,value in enumerate(role_data):
					role = value["role"]
					role_list.append(role)

			if del_table_columns and len(del_table_columns) > 0 :
				del_table_columns = str(del_table_columns)
				del_table_columns = del_table_columns.replace("[","").replace("]","")
				resutls           = ast.literal_eval(del_table_columns) # This line for convert string to dict in python3
				
				
				# for key,value in resutls.items():
				# 	sel_columns.append(key)
				
				if sel_columns and len(sel_columns) >0 :
					pass
				else :
					sel_columns = None
		
				group_by_signedon = 1

				group_by_role = 0
				is_count_only = 1
				
				get_reports = BadgeUserModel().getSignupAndKitReport(conf_id,del_table_name,group_by_role,group_by_signedon,sel_columns,order_by,is_count_only,session_id,ses_entry_table,date_1,role)
				
				if get_reports  :
						if is_count_only > 0 :
							for index,value in enumerate(get_reports):
								count_1      = value["count_1"] or 0
								signin_count.append(count_1)
								role_col     = value["role"]
								# signin_count = signin_count + count_1

								date_1       = value["date_1"]
								my_list.append(date_1)

						else :
							signin_count  = len(get_reports)

				chart_data = {'labels': my_list,'Signup count': signin_count}
				
				return render_template('badge_users/signup_report_screen.html',conf_id=conf_id,conf_key=conf_key,conf_data=get_conf,del_table_columns=resutls,role_list=role_list,email_data=email_data,chart_data=chart_data)
			else :
				flash("Badge collected data does not exists." ,"errorMsg")
				return redirect(url_for("badge_user.BadgeLogin" , conf_id=conf_id,conf_key=conf_key))	

		else :
			flash("Delegate Table not exists.", "errorMsg" )
			return redirect(url_for("badge_user.BadgeLogin" , conf_id=conf_id,conf_key=conf_key))	
	else :
		flash("Invalid Login" , "errorMsg")
		return redirect(url_for("badge_user.BadgeLogin" , conf_id=conf_id,conf_key=conf_key))			

@app.route('/<int:conf_id>/<conf_key>/get_signup_reports_ajax',methods= ["GET","POST"])
def GetSignupReportsAjax(conf_id,conf_key):
	signin_count  = 0
	mail_list     = []
	role_for_template   = "'All-Role'"
	my_list       = []
	signup_count  = []
	try:
		sel_columns           = []
		column_name_for_tbody = []
		ses_entry_table    = None
		session_id         =  0
		report_type        = request.values.get("report_type") or 'count_only'
		group_by_role      = request.values.get("group_by_role") or 0
		group_by_datewise  = request.values.get("group_by_datewise") or 0
		group_by_signedon  = group_by_datewise
		column_name        = request.values.getlist("column_name") or None
		order_by           = request.values.get("order_by") or None
		mail_ids           = request.values.get("email_list") or None
		view_data 		   = request.values.get("view_data") or 1
		email_btn          = request.values.get("email_btn") or 1

		role	           = request.values.getlist("select_role") or "'All-Role'"

		if role and "All-Role" not in role:
			role  = str(role)
			role  = role.replace("[", "")
			role  = role.replace("]", "")

		if column_name :
			column_name_for_tbody = column_name
			selected_columns = len(column_name_for_tbody)
			for row in column_name :
				col_1 = "d."+row

				sel_columns.append(col_1)
		else:
			selected_columns = None
		if sel_columns :
			sel_columns = (",".join(sel_columns))

		if report_type and  "count_only" in report_type :
			is_count_only = 1
			sel_columns   = None
		else :
			is_count_only = 0	

		if mail_ids:
			last_char = mail_ids[-1:]
			# check last character is commma 
			if "," ==  last_char :
				mail_ids = re.sub(r".$", "", mail_ids)
			# check white spance in given inputs ,if exist then replace as empty
			if " " in mail_ids :
				mail_ids = mail_ids.replace(" " ,"")
			# set list from a string using comma character	
			mail_list = list(mail_ids.split(","))

		get_conf     = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name 	  = get_conf["del_table_name"]
			conf_name         = get_conf["conf_name"]
			if del_table_name :
				if sel_columns and len(sel_columns) >0 :
					
					pass
				else :
					sel_columns = None	

				get_reports = BadgeUserModel().getSignupAndKitReport(conf_id,del_table_name,group_by_role,group_by_signedon,sel_columns,order_by,is_count_only,session_id,ses_entry_table,date_1="All-Days",role=role)
				if get_reports  :
					if is_count_only > 0 :
						for index,value in enumerate(get_reports):
							count_1      = value["count_1"] or 0
							role_col     = value["role"]
							signin_count = signin_count + count_1
							date_1       = value["date_1"]
							
							if group_by_datewise :
								signup_count.append(count_1)
								my_list.append(date_1)
							else:
								signup_count.append(count_1)
								my_list.append(role_col)
					else :
						signin_count  = len(get_reports)		

				group_by_role     = int(group_by_role) if group_by_role else group_by_role
				group_by_datewise = int(group_by_datewise) if group_by_datewise else group_by_datewise
				
				chart_data = {'labels': my_list,'SignUp count': signup_count}
				
				if int(email_btn) == 1:
					html_data     =  render_template('badge_users/signup_report_email.html',reports=get_reports,group_by_role=group_by_role,group_by_datewise=group_by_datewise,signin_count=signin_count,is_count_only=is_count_only,column_name=column_name,column_name_for_tbody=column_name_for_tbody,role=role_for_template,conf_data=get_conf,selected_columns=selected_columns)
					mail_template = render_template('badge_users/email/badge_collected_report_mail_template.html',reports=get_reports,group_by_role=group_by_role,group_by_datewise=group_by_datewise,signin_count=signin_count,is_count_only=is_count_only,column_name=column_name,column_name_for_tbody=column_name_for_tbody,len=len,role=role_for_template)
					subject       = "BADGE DISBURSAL REPORT - " + conf_name
				else:
					html_data     =  render_template('badge_users/signup_report_table.html',reports=get_reports,group_by_role=group_by_role,group_by_datewise=group_by_datewise,signin_count=signin_count,is_count_only=is_count_only,column_name=column_name,column_name_for_tbody=column_name_for_tbody,role=role_for_template,conf_data=get_conf,chart_data=chart_data)
					
				if len(mail_list) > 0 and int(view_data) == 0:
					for email in mail_list:
						EMAIL.SignupReportMail(subject,mail_template,email,get_conf)
						
					data = {"html_data" : html_data , "msg" : "Mail has been sent sucessfully.." , "status" : 1}
				else:
					data = {"html_data" : html_data , "msg" : "Date view sucessfully.." , "status" : 1}
		else :
			data = {"html_data" : "html_data","msg" : "Invalid url" , "status" : 2}

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

		json_data = json.dumps(data,default = str)
		return json_data



# download option for signup reports start
@app.route('/<int:conf_id>/<conf_key>/signup_reports_download',methods= ["GET","POST"])
def SignupReportDownload(conf_id,conf_key):
	signin_count = 0
	role_for_template = "'All-Role'"
	try:
		sel_columns           = []
		column_name_for_tbody = []
		sel_columns_for_xl    = []
		ses_entry_table       = None
		session_id            =  0
		report_type           = request.values.get("report_type") or 'count_only'

		group_by_role      = request.values.get("group_by_role") or 0
		group_by_datewise  = request.values.get("group_by_datewise") or 0
		group_by_signedon  = group_by_datewise
		column_name        = request.values.getlist("column_name") or None
		order_by           = request.values.get("order_by") or None

		group_by_datewise  = int(group_by_datewise) if group_by_datewise else group_by_datewise
		group_by_role      = int(group_by_role)     if group_by_role else group_by_role

		role	           = request.values.getlist("select_role") or "'All-Role'"

		if role and "All-Role" not in role:
			role  = str(role)
			role  = role.replace("[", "")
			role  = role.replace("]", "")

		if column_name :
			column_name_for_tbody = column_name
			for row in column_name :
				col_1 = "d."+row
				sel_columns.append(col_1)

			for row_1 in column_name :
				col_na = row_1
				col_na = col_na.replace("_"," ")
				sel_columns_for_xl.append(col_na)

		if sel_columns :
			sel_columns = (",".join(sel_columns))		

		if report_type and  "count_only" in report_type :
			is_count_only = 1
			sel_columns   = None

			# Download option for count only 
			if group_by_datewise > 0 and group_by_role > 0 :
				sel_columns_for_xl = ["Date" ,"Role" ,"Count"] # 1,1
				export_value       = ["date_1","role","count_1"]
			elif group_by_datewise > 0 and group_by_role == 0 :
				sel_columns_for_xl = ["Date","Count"] # 1,0
				export_value       = ["date_1","count_1"]
			elif group_by_datewise == 0 and group_by_role > 0 :
				sel_columns_for_xl = ["Role","Count"] # 0,1	
				export_value       = ["role","count_1"]
			else :
				sel_columns_for_xl = ["Title","Count"] # 0,1
				export_value       = ["role","count_1"]	
		else :
			is_count_only = 0
		
		get_conf     = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name 	  = get_conf["del_table_name"]
			conf_name         = get_conf["conf_name"]
			if del_table_name :
				if sel_columns and len(sel_columns) >0 :
					pass
				else :
					sel_columns = None	
				get_reports = BadgeUserModel().getSignupAndKitReport(conf_id,del_table_name,group_by_role,group_by_signedon,sel_columns,order_by,is_count_only,session_id,ses_entry_table,date_1="All-Days",role=role)
	
				if get_reports  :
					if is_count_only > 0 :
						for index,value in enumerate(get_reports):
							count_1      = value["count_1"] or 0
							signin_count = signin_count + count_1
					else :
						signin_count  = len(get_reports)		

				group_by_role     = int(group_by_role) if group_by_role else group_by_role
				group_by_datewise = int(group_by_datewise) if group_by_datewise else group_by_datewise

				if report_type and  "count_only" in report_type :
					pass
				else :
					export_value = column_name

				return ExportDownloadXSL(get_reports,export_value,sel_columns_for_xl,conf_key,conf_name,report_type="BADGE DISBURSAL REPORT")
			
	except Exception as e:
		return str(e)
# end
# kc report function start
@app.route('/<int:conf_id>/<conf_key>/kc_reports',methods= ["GET","POST"])
def KCReports(conf_id,conf_key):
	session_name  = None
	sel_columns   = []
	days_list     = ["All-Days"]
	role_list     = ["All-Role"]
	my_list       = []
	kc_count      = [] 

	now = datetime.now()
	current_dt   = now.strftime("%d-%m-%Y %H:%M:%S")
	signin_count          = 0
	column_name_for_tbody = []
	ses_entry_table       = None
	session_id            =  0
	conf_name             = " "
	date_for_template     = "All-Days"
	role_for_template     = "'All-Role'"
	from_name 		      = ""
	
	session_id         = request.values.get('session_id') or 0
	session_name       = request.values.get('session_name') or None		
	report_type        = request.values.get("report_type") or 'count_only'
	group_by_role      = request.values.get("group_by_role") or 0
	group_by_datewise  = request.values.get("group_by_datewise") or 0
	group_by_signedon  = group_by_datewise

	column_name        = request.values.getlist("column_name") or None
	order_by           = request.values.get("order_by") or None
	mail_ids           = request.values.get("email_list") or None
	date_1             = request.values.get("date_1") or "All-Days"
	view_data 		   = request.values.get("view_data") or 1

	role	           = request.values.getlist("select_role") or "'All-Role'"

	email_btn          = request.values.get("email_btn") or 1


	group_by_datewise  = int(group_by_datewise) if group_by_datewise else group_by_datewise

	if report_type and  "count_only" in report_type :
		is_count_only = 1
	else :
		is_count_only = 0

	if session.get('badge'):
		get_conf      = BadgeModel().GetConf(conf_id,conf_key)

		if get_conf :
			del_table_name 	  = get_conf["del_table_name"]
			ses_entry_table   = get_conf["kc_session_entry_table_name"]
			conf_start_time   = get_conf["conf_start_time"]
			conf_end_time     = get_conf["conf_end_time"]

			if del_table_name :
				if sel_columns and len(sel_columns) >0 :
					pass
				else :
					sel_columns = None

				group_by_signedon = 1
				# session_id = 26
				 
				get_reports = BadgeUserModel().getSignupAndKitReport(conf_id,del_table_name,group_by_role,group_by_signedon,sel_columns,order_by,is_count_only,session_id,ses_entry_table,date_1,role)

			if get_reports  :
					if is_count_only > 0 :
						for index,value in enumerate(get_reports):
							count_1      = value["count_1"] or 0

							kc_count.append(count_1)
							role_col     = value["role"]
							signin_count = signin_count + count_1

							date_1       = value["date_1"]
							my_list.append(date_1)

							
					else :
						signin_count  = len(get_reports)


			if conf_start_time and conf_end_time :
				st_date = conf_start_time.strftime("%Y-%m-%d")
				day_diff = (conf_end_time.date() - conf_start_time.date()).days

				if day_diff  >= 0 :
					day_diff = day_diff + 1
					aa = ""
					i = 0 
					for i in range(i,day_diff) :
						aa = conf_start_time.date()+timedelta(days=i)
						days_list.append(aa.strftime("%d-%m-%Y"))

						# Convert the date to the desired format
						date_1 = datetime.strptime(aa.strftime("%Y-%m-%d"), "%Y-%m-%d").strftime("%d-%m-%Y")

				else :	
					flash("Conference end date must be greater than start time", "errorMsg")
					return redirect(url_for("badge_user.BadgeDashborad",conf_id=conf_id,conf_key=conf_key))


			if del_table_name :
				session_data = KitSessionModel().getSessionData(conf_id,conf_key)
				role_data    = BadgeUserModel().get_role(conf_id,del_table_name)
				email_data   = BadgeUserModel().get_email_ids(conf_id)

				if role_data:
					for index,value in enumerate(role_data):
						role = value["role"]
						role_list.append(role)
			
				if session_data :
					session_count     = len(session_data) if session_data else 0
					if session_count > 0 :
						for index,value in enumerate(session_data) :
							if index == 0 :
								session_name = value["session_name"]
								session_id   = value["session_id"]

					chart_data = {'labels': my_list,'Kit count': kc_count}
					
					del_table_columns = BadgeUserModel().getDelegatesColumnForReports(conf_id,del_table_name,ses_entry_table,report_name="KC")
					if del_table_columns and len(del_table_columns) > 0 :
						del_table_columns = str(del_table_columns)
						del_table_columns = del_table_columns.replace("[","").replace("]","")
					
						resutls = ast.literal_eval(del_table_columns) # This line for convert string to dict in python3
					
						return render_template('badge_users/kc_reports_screen.html',conf_id=conf_id,conf_key=conf_key,conf_data=get_conf,del_table_columns=resutls,session_data=session_data,session_name=session_name,session_id=session_id,days_list=days_list,date_1=date_1,role_list=role_list,email_data=email_data,chart_data=chart_data)
					else :
						flash("KIT Counter data does not exists.", "errorMsg")
						return redirect(url_for("badge_user.BadgeDashborad",conf_id=conf_id,conf_key=conf_key))
				else :
					flash("KIT Counter data does not exists.", "errorMsg")
					return redirect(url_for("badge_user.BadgeDashborad",conf_id=conf_id,conf_key=conf_key))
			else :
				return "Delegate Table not exists."
		else:
			return "<h4 style='color:red;text-align:center;'>Invalid URL </h4>"	
	else:
		flash("Invalid Login", "errorMsg")
		return redirect(url_for("badge_user.BadgeLogin" , conf_id=conf_id,conf_key=conf_key))
# get kc reports and report only email function start
@app.route('/<int:conf_id>/<conf_key>/get_kc_reports_ajax',methods= ["GET","POST"])
def GetKCReportsAjax(conf_id,conf_key):
	now = datetime.now()
	current_dt   = now.strftime("%d-%m-%Y %H:%M:%S")
	signin_count          = 0
	sel_columns           = []
	column_name_for_tbody = []
	ses_entry_table       = None
	session_id            =  0
	conf_name             = " "
	date_for_template     = "All-Days"
	role_for_template     = "'All-Role'"
	mail_list             = []
	from_name 		      = ""
	my_list       = []
	kc_count      = []
	
	try:
		session_id         = request.values.get('session_id') or 0
		session_name       = request.values.get('session_name') or None		
		report_type        = request.values.get("report_type") or 'count_only'
		group_by_role      = request.values.get("group_by_role") or 0
		group_by_datewise  = request.values.get("group_by_datewise") or 0
		group_by_signedon  = group_by_datewise
		column_name        = request.values.getlist("column_name") or None
		order_by           = request.values.get("order_by") or None
		mail_ids           = request.values.get("email_list") or None
		date_1             = request.values.get("date_1") or "All-Days"
		view_data 		   = request.values.get("view_data") or 1
		role	           = request.values.getlist("select_role") or "'All-Role'"

		email_btn          = request.values.get("email_btn") or 1

		if role and "All-Role" not in role:
			role  = str(role)
			role  = role.replace("[", "")
			role  = role.replace("]", "")
			# role  = '"'+role+'"'

		if "Days" not  in date_1:
			date_for_template = date_1
			datetime_object   = datetime.strptime(date_1, '%d-%m-%Y') # convert string into datetime format
			date_1            = datetime_object.strftime("%Y-%m-%d")  # dte format change into string format

		if column_name :
			column_name_for_tbody = column_name
			selected_columns = len(column_name_for_tbody)
			for row in column_name :
				col_1 = "d."+row

				sel_columns.append(col_1)
		else:
			selected_columns = None

		if sel_columns :
			sel_columns = (",".join(sel_columns))

			selected_col = list(sel_columns)

		if report_type and  "count_only" in report_type :
			is_count_only = 1
			sel_columns   = None
		else :
			is_count_only = 0	

		if mail_ids:
			last_char = mail_ids[-1:]
			# check last character is commma 
			if "," ==  last_char :
				mail_ids = re.sub(r".$", "", mail_ids)
			# check white spance in given inputs ,if exist then replace as empty
			if " " in mail_ids :
				mail_ids = mail_ids.replace(" " ,"")
			# set list from a string using comma character	
			mail_list = list(mail_ids.split(","))

		get_conf     = BadgeModel().GetConf(conf_id,conf_key)

		if get_conf :
			del_table_name 	= get_conf["del_table_name"]
			ses_entry_table = get_conf["kc_session_entry_table_name"]
			conf_name       = get_conf["conf_name"]
			if del_table_name :
				if sel_columns and len(sel_columns) >0 :
					pass
				else :
					sel_columns = None
				get_reports = BadgeUserModel().getSignupAndKitReport(conf_id,del_table_name,group_by_role,group_by_signedon,sel_columns,order_by,is_count_only,session_id,ses_entry_table,date_1,role)
				if get_reports  :
					if is_count_only > 0 :
						for index,value in enumerate(get_reports):
							count_1      = value["count_1"] or 0
							role_col     = value["role"]
							signin_count = signin_count + count_1
							date_1       = value["date_1"]
							
							if group_by_datewise :
								kc_count.append(count_1)
								my_list.append(date_1)
							else:
								kc_count.append(count_1)
								my_list.append(role_col)
					else :
						signin_count  = len(get_reports)	

				group_by_role     = int(group_by_role) if group_by_role else group_by_role
				group_by_datewise = int(group_by_datewise) if group_by_datewise else group_by_datewise
				
				chart_data = {'labels': my_list,'Kit count': kc_count}
				
				if int(email_btn) == 1:
					html_data     =  render_template('badge_users/kc_reports_email.html',type=type,reports=get_reports,group_by_role=group_by_role,group_by_datewise=group_by_datewise,signin_count=signin_count,is_count_only=is_count_only,column_name=column_name,column_name_for_tbody=column_name_for_tbody,date_1=date_for_template,role=role,conf_data=get_conf,selected_columns=selected_columns,session_name=session_name)
					mail_template = render_template('badge_users/email/kc_reports_mail_template.html',type=type,reports=get_reports,group_by_role=group_by_role,group_by_datewise=group_by_datewise,signin_count=signin_count,is_count_only=is_count_only,column_name=column_name,column_name_for_tbody=column_name_for_tbody,date_1=date_for_template,len=len,role=role_for_template) 
					subject       = " "+ conf_name+ "-" + session_name.upper() +" - DISBURSAL REPORT ON" + " " +current_dt
					from_name     = session_name.upper() + " DISBURSAL REPORT"
				else:
					html_data  =  render_template('badge_users/kc_reports_table.html',type=type,reports=get_reports,group_by_role=group_by_role,group_by_datewise=group_by_datewise,signin_count=signin_count,is_count_only=is_count_only,column_name=column_name,column_name_for_tbody=column_name_for_tbody,date_1=date_for_template,role=role,conf_data=get_conf,session_name=session_name,chart_data=chart_data)
				
				
						
				if len(mail_list) > 0 and int(view_data) == 0 :
					for email in mail_list:

						EMAIL.KcReportMail(subject,mail_template,email,from_name,get_conf)

					data = {"html_data" : html_data , "msg" : "Mail has been sent sucessfully.." , "status" : 1}
				else:
					data = {"html_data" : html_data , "msg" : "Data view sucessfully.." , "status" : 1}
		else :
			data = {"html_data" : "html_data","msg" : "Invalid url" , "status" : 2}

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

		json_data = json.dumps(data,default = str)
		return json_data
# end


# Download option for kc reports
@app.route('/<int:conf_id>/<conf_key>/kc_reports_download',methods= ["GET","POST"])
def KCReportDownload(conf_id,conf_key):
	signin_count          = 0
	sel_columns           = []
	sel_columns_for_xl    = []
	column_name_for_tbody = []
	ses_entry_table       = None
	session_id            =  0
	conf_name             = " " 
	date_for_template     = "All-Days"
	role_for_template     = "All-Role"
	try:
		session_id        = request.values.get('session_id') or 0
		session_name      = request.values.get('session_name') or None
		report_type       = request.values.get("report_type") or 'count_only'
		group_by_datewise = request.values.get("group_by_datewise") or 0
		group_by_role     = request.values.get("group_by_role") or 0
		group_by_signedon = group_by_datewise
		column_name       = request.values.getlist("column_name") or None
		order_by          = request.values.get("order_by") or None
		date_1            = request.values.get("date_1") or "All-Days"
		role              = request.values.get("select_role") or "All-Role"

		group_by_datewise = int(group_by_datewise) if group_by_datewise else group_by_datewise
		group_by_role     = int(group_by_role)     if group_by_role else group_by_role

		if "Days" not in date_1:
			date_for_template = date_1
			datetime_object   = datetime.strptime(date_1, '%d-%m-%Y') # convert string into datetime format
			date_1            = datetime_object.strftime("%Y-%m-%d")  # dte format change into string format

		if "Role" not in role:
			role_for_template = role
			role = "'"+role+"'"

		if column_name :
			column_name_for_tbody = column_name
			for row in column_name :
				if "created_at" in row :
					col_1 = "se."+row
				else :
					col_1 = "d."+row

				sel_columns.append(col_1)

			for row_1 in column_name :
				col_na = row_1
				col_na = col_na.replace("_"," ")
				sel_columns_for_xl.append(col_na)

		if sel_columns :
			sel_columns = (",".join(sel_columns))		

		if report_type and  "count_only" in report_type :
			is_count_only = 1
			sel_columns   = None

			# Download option for count only 
			if group_by_datewise > 0 and group_by_role > 0 :
				sel_columns_for_xl = ["Date" ,"Role" ,"Count"] # 1,1
				export_value       = ["date_1","role","count_1"]
			elif group_by_datewise > 0 and group_by_role == 0 :
				sel_columns_for_xl = ["Date","Count"] # 1,0
				export_value       = ["date_1","count_1"]
			elif group_by_datewise == 0 and group_by_role > 0 :
				sel_columns_for_xl = ["Role","Count"] # 0,1	
				export_value       = ["role","count_1"]
			else :
				sel_columns_for_xl = ["Title","Count"] # 0,1
				export_value       = ["role","count_1"]	
		else :
			is_count_only = 0	

		get_conf     = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name 	= get_conf["del_table_name"]
			ses_entry_table = get_conf["kc_session_entry_table_name"]
			conf_name       = get_conf["conf_name"]
			if del_table_name :
				if sel_columns and len(sel_columns) >0 :
					pass
				else :
					sel_columns = None	

				get_reports = BadgeUserModel().getSignupAndKitReport(conf_id,del_table_name,group_by_role,group_by_signedon,sel_columns,order_by,is_count_only,session_id,ses_entry_table,date_1,role)
				if get_reports  :
					if is_count_only > 0 :
						for index,value in enumerate(get_reports):
							count_1      = value["count_1"] or 0
							signin_count = signin_count + count_1
					else :
						signin_count  = len(get_reports)

					group_by_role     = int(group_by_role) if group_by_role else group_by_role
					group_by_datewise = int(group_by_datewise) if group_by_datewise else group_by_datewise

					if report_type and  "count_only" in report_type :
						pass
					else :
						export_value = column_name 

					return ExportDownloadXSL(get_reports,export_value,sel_columns_for_xl,conf_key,conf_name,report_type= session_name.upper() + " DISBURSAL REPORT ")
				else :
					flash("Record does not exists." ,"errorMsg")
					return redirect(url_for('badge_user.KCReports',conf_id=conf_id,conf_key=conf_key))
	except Exception as e:
		return str(e)

def ExportDownloadXSL(result_data,export_value,sel_columns_for_xl,conf_key,conf_name,report_type):
	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 row in result_data:
		for i in export_value:
			if "role" in  i :
				role_val  = row[i] if row[i] else 'Reference'
				sh.write(idx+1, b, role_val)
			else :
				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+"-"+report_type+"-"+curr_dt+".xls"})

# Backup start
# def ExportDownloadXSL(result_data,export_value,sel_columns_for_xl,conf_key,conf_name,report_type):
# 	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:
# 		sh.write(0,a,row)
# 		a+=1
# 	b=0
# 	sno_val = 0
	
# 	for row in result_data:
# 		for i in export_value:
# 			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+"-"+report_type+"-"+curr_dt+".xls"})

# Backup end

@app.route("<int:conf_id>/<conf_key>/post_email_attachment", methods=["GET", "POST"])
def PostEmailAttachment(conf_id,conf_key):
	try:
		from_name = " "
		get_conf      = BadgeModel().GetConf(conf_id,conf_key)
		files_1       = request.files['filess']
		mail_ids      = request.form['email_list']
		conf_name     = get_conf["conf_name"]
		is_kit        = request.values.get("is_kit") or 0
		is_signup     = request.values.get("is_signup") or 0
		is_food       = request.values.get("is_food") or 0
		session_name  = request.values.get("session_name") or None

		session_id    = request.values.get("session_id") or None

		is_kit        = int(is_kit) if is_kit else is_kit
		is_signup     = int(is_signup) if is_signup else is_signup
		is_food      = int(is_food) if is_food else is_food

		if mail_ids:
			last_char = mail_ids[-1:]
			# check last character is commma 
			if "," ==  last_char :
				mail_ids = re.sub(r".$", "", mail_ids)
			# check white spance in given inputs ,if exist then replace as empty
			if " " in mail_ids :
				mail_ids = mail_ids.replace(" " ,"")
			# set list from a string using comma character	
			mail_list = list(mail_ids.split(","))

		if files_1 :
			encoded_string = base64.b64encode(files_1.read())
			base64_str     = encoded_string.decode('utf-8')
			if is_kit > 0 :
				from_name      = session_name.upper() + " DISBURSAL REPORT"
				html_data      = session_name.upper() + " DISBURSAL REPORT"
				subject        = " "+ conf_name+ "-" + session_name.upper() +" - DISBURSAL REPORT"
			elif is_signup > 0 :  
				from_name      = "BADGE DISBURSAL REPORT"
				html_data      = "BADGE DISBURSAL REPORT"
				subject        = " "+ conf_name+"- BADGE DISBURSAL REPORT"
			else : 
				# For food counte report Not use . Just for testing 
				from_name      = "Food Counter - REPORT"
				html_data      = "Food Counter - REPORT"
				subject        = " "+ conf_name+"- Food counter - REPORT"		
			print("base64_str = ",base64_str)
			for email in mail_list:
				EMAIL.SendReportMail(subject,html_data,email,files_1,from_name,get_conf)

			data = {"html_data" : html_data , "msg" : "Mail has been sent sucessfully.." , "status" : 1}
		else :
			return "Files is invalid.."

		return json.dumps(data,default = str)
	except Exception as e:
		data = {"html_data" : "","msg" : str(e),"status" : 401}
		return json.dumps(data,default = str)
	
# -------------------- Santhosh. For Get counter wise start and end delegate Number
@app.route("<int:conf_id>/<conf_key>/delegate_no_counter_wise", methods=["GET", "POST"])
def DelegateNoCounterWise(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf :
		del_table_name      = get_conf["del_table_name"]
		conf_name           = get_conf["conf_name"]
		detegate_no_counter = BadgeUserModel().get_delegate_no_counter(conf_id,del_table_name)
		return render_template('badge_users/delegate_no_counter_wise.html',conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,detegate_no_counter=detegate_no_counter,del_table_name=del_table_name)
	else :
		return "<h2 style= 'color:red;text-align:center' ; >Invalid URL </h2>"

		
@app.route("<int:conf_id>/<conf_key>/view_delegate_no_counter_wise", methods=["GET", "POST"])
def ViewDelegateNoCounterWise(conf_id,conf_key):
	try:
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name      = get_conf["del_table_name"]
			conf_name      = get_conf["conf_name"]
			
			detegate_no_counter = BadgeUserModel().get_delegate_no_counter(conf_id,del_table_name)
			html_data           =  render_template('badge_users/delegate_no_counter_wise_table.html',conf_name=conf_name,conf_id=conf_id,conf_key=conf_key,detegate_no_counter=detegate_no_counter,del_table_name=del_table_name)
			data = {"html_data" : html_data,"msg" : "", "status" : 1}
			return json.dumps(data,default = str)
		else :
			data = {"html_data" : "html_data","msg" : "Invalid url" , "status" : 2}
			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>/delegate_no_counter_wise_mail",methods = [ "POST"])
def DelegateNoCounterWiseMail(conf_id,conf_key):
	try:
		now = datetime.now()
		current_dt   = now.strftime("%d-%m-%Y %H:%M:%S")
		current_date = now.strftime("%d-%m-%Y")
		mail_ids       = request.values.get('mail_ids') or None
		conf_id        = request.values.get('conf_id') or None
		conf_key       = request.values.get('conf_key') or None
		del_table_name = request.values.get('del_table_name') or None
		
		conf_name      = request.values.get('conf_name') or None
		getConfData = BadgeModel().GetConf(conf_id,conf_key)
		if mail_ids:
			last_char = mail_ids[-1:]
			if "," ==  last_char :
				mail_ids = re.sub(r".$", "", mail_ids)
			
			if " " in mail_ids :
				mail_ids = mail_ids.replace(" " ,"")
			
			mail_list = list(mail_ids.split(","))

			detegate_no_counter = BadgeUserModel().get_delegate_no_counter(conf_id,del_table_name)			
			mail_template       = render_template('badge_users/email/delegate_counter_mail.html',detegate_no_counter=detegate_no_counter,conf_name=conf_name)
			subject             = " "+ conf_name+"- Delegate number counter wise"
			from_name = "Delegate Number List counter wise"
			for email in mail_list:
				EMAIL.MandrillMailFunciton(subject,mail_template,email,from_name,getConfData)

			data = {"msg" : "Email has been sent. ", "status" : 1}
			return json.dumps(data,default = str)

		else :
			data = {"msg" : "Please enter atleast one mail-id ." , "status" : 2}
			return json.dumps(data,default = str)
	except Exception as e:
		data = { "msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)

@app.route("<int:conf_id>/<conf_key>/send_counter_report_whatsapp",methods = ["POST"])
def SendCounterReportWhatsapp(conf_id,conf_key):
	msg_content = ""
	min_del_no = 1
	max_del_no = 150
	msg_content = "" 
	main_cnt    = ""
	# print("----- send_counter_report_whatsapp    ---- function calling ...")
	try:
		mobile_no      = request.values.get('mobile_no') or None
		conf_key       = request.values.get('conf_key') or None
		del_table_name = request.values.get('del_table_name_1') or None
		conf_name      = request.values.get('conf_name') or None
		
		if mobile_no:
			last_char = mobile_no[-1:]

			if "," ==  last_char :
				mobile_no = re.sub(r".$", "", mobile_no)
			# check white spance in given inputs ,if exist then replace as empty
			if " " in mobile_no :
				mobile_no = mobile_no.replace(" " ,"")

			whatsappdata  = BadgeUserModel().get_delegate_no_counter(conf_id,del_table_name)
			if whatsappdata : 
				if whatsappdata :
					for index ,value in enumerate(whatsappdata):
						min_del_no = value["min_del_number"]
						max_del_no = value["max_del_number"]
						counter_no = value["counter"]
						main_cnt_1    = "%20%20Counter%20No.%20:%20"+str(counter_no)+"%20-%20Delegate%20Number%20:%20*"+str(min_del_no)+"*%20-%20*"+str(max_del_no)+"*%0A%0A"
						main_cnt 	  = main_cnt +main_cnt_1   
				
				msg_content = msg_content+main_cnt
				if " " in conf_name :
					conf_name = conf_name.replace(" " ,"%20")
				msg_content = "https://wa.me/91"+str(mobile_no)+"?text=*"+conf_name+"*%0A%0A"+msg_content	

				webbrowser.open(msg_content) # to send whatsapp via new tab

				data = {"msg" : "Delegate number counter wise has been sent sucessfully to " + mobile_no, "status" : 1}
				return json.dumps(data,default = str)
			else:
				data = {"msg" : "Data not exist", "status" : 2}
				return json.dumps(data,default = str)	
		else:	
			return "This is else block"
			data = {"msg" : "Please enter the whatsapp number to sent the kit counter report.", "status" : 3}
			return json.dumps(data,default = str)	
	except Exception as e:
		data = { "msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)
		
# Name Replace option start By Santhosh Step 26,2023
@app.route("<int:conf_id>/<conf_key>/delegate_name_replace",methods = ["GET", "POST"])
def DelegateNameReplace(conf_id,conf_key):
	table_list     = ["numerotech_primary_db.delegates"]
	if session.get('badge'):
		badge_user     = session.get('badge')
		conf_id        = badge_user["conf_id"]
		conf_name      = badge_user["conf_name"]
		del_table_name = badge_user["del_table_name"]
		if del_table_name :
			table_list.append(del_table_name)
			return	render_template('badge_users/delegate_name_replace.html',conf_id=conf_id,conf_key=conf_key,table_list=table_list)
		else :
			flash("Conference delegate table does not exists." ,"errorMsg")
			return redirect(url_for("badge_user.BadgeLogin" ,conf_id=conf_id,conf_key=conf_key))
	else :
		flash("Invalid login." ,"errorMsg")
		return redirect(url_for("badge_user.BadgeLogin" ,conf_id=conf_id,conf_key=conf_key))			


@app.route("<int:conf_id>/<conf_key>/view_delegate_name_replace",methods = ["GET", "POST"])
def ViewDelegateNameReplace(conf_id,conf_key):
	delegate_count = 0
	try:
		conf_key         = request.values.get('conf_key') or None
		conf_key         = request.values.get('conf_key') or None
		name_replace     = request.values.get('name_replace') or None
		del_table_name   = request.values.get('del_table_name') or None
		is_main_del_table= request.values.get('is_main_del_table') or  0
		is_main_del_table= int(is_main_del_table) if is_main_del_table else is_main_del_table
		detegate_details = BadgeUserModel().get_delegate_details(conf_id,del_table_name,name_replace,is_main_del_table)
		if detegate_details:
			delegate_count = len(detegate_details)
			html_data    = render_template('badge_users/delegate_name_replace_table.html',conf_id=conf_id,conf_key=conf_key,delegate_count=detegate_details,name_replace=name_replace,del_table_name=del_table_name,detegate_count=delegate_count,is_main_del_table=is_main_del_table)
			data      	 = {"html_data":html_data,"msg" : "Renamed Successfully" , "status" : 1}
			return json.dumps(data,default = str)
		else:	
			html_data    = render_template('badge_users/delegate_name_replace_table.html',conf_id=conf_id,conf_key=conf_key,delegate_count=detegate_details,name_replace=name_replace,del_table_name=del_table_name,detegate_count=delegate_count,is_main_del_table=is_main_del_table)
			data         = {"html_data":"","msg" : "Data not exist", "status" : 2}
			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>/update_delegate_name",methods = ["GET", "POST"])
def UpdateDelegateName(conf_id,conf_key):
	print("yes its calling ")
	del_table_name = None
	name_replace   = None
	now            = datetime.now()
	curr_dt        = now.strftime("%Y-%m-%d %H:%M:%S")
	delegate_count = 0
	try:
		delegate_ids     = request.values.get('delegate_ids') or None
		del_table_name   = request.values.get('del_table_name') or None
		name_replace     = request.values.get('name_replace') or None
		is_main_del_table= request.values.get('is_main_del_table') or 0
		is_main_del_table= int(is_main_del_table) if is_main_del_table else is_main_del_table
		update_detegates = BadgeUserModel().updateConfDelegatesByIds(del_table_name,conf_id,name_replace,delegate_ids,curr_dt,is_main_del_table)
		if update_detegates == "success":
			detegate_details = BadgeUserModel().get_delegate_details(conf_id,del_table_name,name_replace,is_main_del_table)
			if detegate_details :
				delegate_count = len(detegate_details)
			html_data        = render_template('badge_users/delegate_name_replace_table.html',conf_id=conf_id,conf_key=conf_key,detegate_details=detegate_details,del_table_name=del_table_name,name_replace=name_replace,delegate_count=delegate_count,is_main_del_table=is_main_del_table)
			data             = {"html_data":html_data,"msg" : "Renamed Successfully" , "status" : 1}
			return json.dumps(data,default = str)
		else:	
			html_data = render_template('badge_users/delegate_name_replace_table.html',conf_id=conf_id,conf_key=conf_key,detegate_details=detegate_details,del_table_name=del_table_name,name_replace=name_replace,delegate_count=delegate_count,is_main_del_table=is_main_del_table)
			data      = {"html_data":"","msg" : "Data not exist", "status" : 2}
			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 and kit not collect report start

@app.route("<int:conf_id>/<conf_key>/badge_kit_not_collect_report",methods = ["GET", "POST"])
def BadgeKitNotCollectReport(conf_id,conf_key):
	total_reg_count = 0
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if session.get('badge') and get_conf:
		del_table_name     = get_conf["del_table_name"]
		if del_table_name :
			get_total_delegates_count    = BadgeUserModel().confDelegateNotSignin(conf_id ,del_table_name ,is_count_only = 1)
			if get_total_delegates_count :
				total_reg_count = get_total_delegates_count["delegate_count"]
			
			return render_template('badge_users/badge_kit_not_collect_report.html',conf_id=conf_id,conf_key=conf_key,total_reg_count=total_reg_count)
		else :
			flash("Conference delegate table does not exists" , "errorMsg")
			return redirect(url_for("badge_user.BadgeLogin" ,conf_id=conf_id,conf_key=conf_key))		
	else :
		flash("Invalid login" , "errorMsg")
		return redirect(url_for("badge_user.BadgeLogin",conf_id=conf_id,conf_key=conf_key))	

@app.route("<int:conf_id>/<conf_key>/view_badge_kit_not_collect_report",methods = ["GET", "POST"])
def ViewBadgeKitNotCollectReport(conf_id,conf_key):
	delegate_count  = 0
	get_reports     = None
	msg 		    = " "
	total_reg_count = 0 
	collected_count = 0
	try:
		if session.get('badge'):
			badge_user           = session.get('badge')
			del_table_name       = badge_user["del_table_name"]
			ses_entry_table      = badge_user["kc_session_entry_table_name"]
			is_badge_not_collect = request.values.get('is_badge_not_collect') or 0
			total_reg_count      = request.values.get('total_reg_count') or 0
			is_badge_not_collect = int(is_badge_not_collect) if is_badge_not_collect else is_badge_not_collect
			total_reg_count      = int(total_reg_count) if total_reg_count else total_reg_count

			if is_badge_not_collect == 1 :
				is_kit_not_collect   =  0
			else :
				is_kit_not_collect = 1
			# print(conf_id,del_table_name,ses_entry_table,is_badge_not_collect,is_kit_not_collect)
			get_reports  = BadgeUserModel().badge_kit_not_collected_report(conf_id,del_table_name,ses_entry_table,is_badge_not_collect,is_kit_not_collect)
			if get_reports :
				delegate_count = len(get_reports)
				if is_badge_not_collect > 0 : # For badge not collected count
					collected_count = total_reg_count - delegate_count 
					msg = "Badge - not collected count : " + str(delegate_count) + " <br/> Badge collected count : " + str(collected_count)
				else  :		
					msg = "KIT - not collected count : " + str(delegate_count) 

			else :
				if is_badge_not_collect == 0 : # if no one signed in then get all delegates for kit- not collected reports
					# get_reports    = BadgeUserModel().confDelegateNotSignin(conf_id ,del_table_name,is_count_only = 0)
					delegate_count = total_reg_count - delegate_count
					collected_count= total_reg_count - delegate_count
					msg            = "KIT - not collected count : " + str(delegate_count) 

			html_data  = render_template('badge_users/badge_kit_not_collect_report_table.html',conf_id=conf_id,conf_key=conf_key,get_reports=get_reports,delegate_count=delegate_count,msg=msg)
			data       = {"html_data":html_data,"msg" : msg , "status" : 1}
			return json.dumps(data,default = str)
		else:
			data = {"html_data":"","msg" : "Session invalid", "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>/badge_kit_not_collect_mail",methods = [ "POST"])
def BadgeKitNotCollectMail(conf_id,conf_key):
	try:
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if session.get('badge') and get_conf:
			del_table_name    = get_conf["del_table_name"]
			conf_name         = get_conf["conf_name"]
			mail_header_logo  = get_conf["mail_header_logo"]
			delegate_ids      = request.values.get('delegate_ids') or None
			not_collect       = request.values.get('not_collect') or None

			if delegate_ids:
				delegate_ids       = list(delegate_ids.split(","))
				for delegate_id in delegate_ids:
					get_del_detail = BadgeUserModel().get_delegates(del_table_name,conf_id,delegate_id)
					delegate_no    = get_del_detail["delegate_no"]
					email          = get_del_detail["email"]
					name           = get_del_detail["full_name"]
					mail_template  = render_template('badge_users/email/badge_not_collect_mail.html',conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,delegate_no=delegate_no,name=name,not_collect=not_collect,mail_header_logo=mail_header_logo)
					if not_collect > '0':
						subject    = " "+ conf_name+"- Badge Not Collect"
						from_name  = "Badge Not Collect"
					else:
						subject    = " "+ conf_name+"- Kit Not Collect (Badge Only Collected )"
						from_name  = "Kit Not Collect (Badge Only Collected )"

					# email = 'santhosh@numerotec.com'
					EMAIL.MandrillMailFunciton(subject,mail_template,email,from_name )

				data = {"msg" : "Email has been sent. ", "status" : 1}
				return json.dumps(data,default = str)

			else :
				data = {"msg" : "Please enter atleast one checkbox ." , "status" : 2}
				return json.dumps(data,default = str)
		else:
			data = {"msg" : "Session invalid", "status" : 3}
			return json.dumps(data,default = str)
	except Exception as e:
		data = { "msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)

@app.route("<int:conf_id>/<conf_key>/View_mail_contant",methods = ["GET", "POST"])
def ViewMailContant(conf_id,conf_key):
	try:
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if  get_conf:
			del_table_name = get_conf["del_table_name"]
			conf_name      = get_conf["conf_name"]
			mail_header_logo = get_conf["mail_header_logo"]
			delegate_id    = request.values.get('delegate_id') or None
			not_collect    = request.values.get('get_value_not_collect') or None
			get_del_detail = BadgeUserModel().get_delegates(del_table_name,conf_id,delegate_id)
			delegate_no    = get_del_detail["delegate_no"]
			email          = get_del_detail["email"]
			name           = get_del_detail["full_name"]
			html_data      = render_template('badge_users/view_mail_contant_badge_and_kit.html',conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,delegate_no=delegate_no,name=name,not_collect=not_collect,mail_header_logo=mail_header_logo)

			if get_del_detail:
				data = {"html_data":html_data,"msg" : " Successfully" , "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" : 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>/badge_kit_not_collect_report_downloard",methods = ["GET", "POST"])
def BadgeKitNotCollectReportDownloard(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	try:
		if  get_conf:
			del_table_name       = get_conf["del_table_name"]
			conf_name            = get_conf["conf_name"]
			ses_entry_table      = get_conf["fc_session_entry_table_name"]
			is_badge_not_collect = request.values.get('not_collect') or 0
			is_badge_not_collect = int(is_badge_not_collect) if is_badge_not_collect else is_badge_not_collect
			total_reg_count      = request.values.get('total_reg_count') or 0
			total_reg_count      = int(total_reg_count) if total_reg_count else total_reg_count
			if is_badge_not_collect == 1 :
				is_kit_not_collect   =  0
			else :
				is_kit_not_collect = 1

			get_reports    = BadgeUserModel().badge_kit_not_collected_report(conf_id,del_table_name,ses_entry_table,is_badge_not_collect,is_kit_not_collect)
			if get_reports:
				export_columns = ["delegate_no","name","email","role"]
				col_name       = ['Delegate no', 'Name','Email','Role']
				return ExportDownloadXSL_1(get_reports,export_columns,col_name,conf_key,is_badge_not_collect)
			else :
				flash("Kit Not Collect (Badge Only Collected ) Record does not exists." ,"errorMsg")
				return redirect(url_for('badge_user.BadgeKitNotCollectReport',conf_id=conf_id,conf_key=conf_key))
		else :
			flash("Record does not exists." ,"errorMsg")
			return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))
	except Exception as e:
		return str(e)

def ExportDownloadXSL_1(data_name,export_columns,col_name,conf_key,is_badge_not_collect):
	if is_badge_not_collect > 0:
		file_name  = "_Badge Not Collect_"
	else:
		file_name  = "_Kit Not Collect (Badge Only Collected)_"

	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 col_name:
		sh.write(0,a,row)
		a+=1
	b=0
	sno_val = 0
	
	for row in data_name:
		for i in export_columns:
			sh.write(idx+1, b, row[i])
			b+=1
		b=0
		idx+=1
		
	Workbook.save(output)
	output.seek(0)
	now    = datetime.now()
	date   = now.strftime("%Y-%m-%d %H:%M")
	return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+str(conf_key)+file_name+str(date)+".xls"})

@app.route("<int:conf_id>/<conf_key>/badge_kit_not_collect_single_mail",methods = [ "POST"])
def BadgeKitNotCollectSingleMail(conf_id,conf_key):
	print("fun calling")
	try:
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if session.get('badge') and get_conf:
			del_table_name    = get_conf["del_table_name"]
			conf_name         = get_conf["conf_name"]
			mail_header_logo  = get_conf["mail_header_logo"]
			delegate_id       = request.values.get('delegate_id') or None
			not_collect       = request.values.get('get_value_not_collect') or None

			if delegate_id:
				get_del_detail = BadgeUserModel().get_delegates(del_table_name,conf_id,delegate_id)
				delegate_no    = get_del_detail["delegate_no"]
				name           = get_del_detail["full_name"]
				email           = get_del_detail["email"]
				mail_template  = render_template('badge_users/email/badge_not_collect_mail.html',conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,delegate_no=delegate_no,name=name,not_collect=not_collect,mail_header_logo=mail_header_logo)
				if not_collect > '0':
					subject    = " "+ conf_name+"- Badge Not Collect"
					from_name  = "Badge Not Collect"
				else:
					subject    = " "+ conf_name+"- Kit Not Collect "
					from_name  = "Kit Not Collect "

				# email = 'santhosh@numerotec.com'
				EMAIL.MandrillMailFunciton(subject,mail_template,email,from_name )

				data = {"msg" : "Email has been sent. ", "status" : 1}
				return json.dumps(data,default = str)

			else :
				data = {"msg" : "Please enter atleast one checkbox ." , "status" : 2}
				return json.dumps(data,default = str)
		else:
			data = {"msg" : "Session invalid", "status" : 3}
			return json.dumps(data,default = str)
	except Exception as e:
		data = { "msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)

# badge and kit not collect report end


# badge and kit not collect report end

# Karthick A Oct 26 2023
# Usage : for delegate image upload in badge module only update in bigtechshow conference
# Starts here 

		
# AWS File upload start
# def AwsFileUpload(user_id,file,filename_str,foldername,file_extension):
def AwsFileUpload(delegate_no,file_name,image_data):
	now             = datetime.now()
	curr_dt         = now.strftime("%Y-%m-%d %H:%M:%S")
	image_name      = None
	image_path      = None
	bucket          = "aws-s3store"
	try:
		if file_name:
			if image_data:
				split_tup       = os.path.splitext(file_name)
				file_name       = split_tup[0]
				file_extension  = split_tup[1]
				filename_str    = "delegate_image_"+ datetime.now().strftime("%Y%m%d-%H%M%S") +file_extension
				if " " in filename_str :
					filename_str = filename_str.replace(" ","")

				delegate_no  = str(delegate_no) if delegate_no else None
				foldername   = "bigtech23"
				acl          = "public-read"
				s3           = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
				

				image_data = base64.b64decode(image_data.split(',')[1])
				image = Image.open(io.BytesIO(image_data))
				if image.mode == 'RGBA':
					image = image.convert('RGB')

				image.save(os.path.join('core/static/temp_images', filename_str))
				img_path = os.path.join('core/static/temp_images/'+ filename_str)
				with open(img_path, 'rb') as f:
					response = s3.upload_fileobj(f,bucket,foldername+'/'+delegate_no+'/'+ filename_str, ExtraArgs={"ACL": acl, "ContentType": "image/jpeg"})        
				os.remove('core/static/temp_images/'+ filename_str) 
				data_1       = {'bucketname' : bucket,'foldername':foldername,'file_name':filename_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1} 
				file_path    = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/"+foldername+"/"+delegate_no+"/"
				image_path = file_path	
				image_name = filename_str
				
				msg = "Added Successfully"
				return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 1 }	

				
			else :
				msg = "File name is not exists."
				return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 2 }			
				
			return json.dumps(return_data,default =str)
			
				
		else :
			msg = "File not exists. Please try again"
			return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 3 }	
		
		return json.dumps(return_data,default =str)
	except ClientError as e:
		return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : str(e), "status" : 401 }
		return json.dumps(return_data,default =str)

@app.route('/<int:conf_id>/<conf_key>/photo_upload', methods =  ["GET","POST"])
def PhotoUpload(conf_id,conf_key):
	conf_data      = BadgeModel().GetConf(conf_id,conf_key)
	if	conf_data:
		conf_name      = conf_data['conf_name']
		del_table_name = conf_data['del_table_name']
		output         = BadgeModel().getRole(conf_id)
		return render_template('badge/photo_upload.html',conf_id=conf_id ,conf_key=conf_key,conf_name=conf_name,role=output,del_table_name=del_table_name)
	else :
		return "<h1>Invalid URL</h1>"
		
@app.route('/<int:conf_id>/<conf_key>/post_photo_upload',methods = ['POST', 'GET'])
def PostPhotoUpload(conf_id,conf_key):
	now            = datetime.now()
	current_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
	conf_data      = BadgeModel().GetConf(conf_id,conf_key)
	if conf_data:
		conf_name      = conf_data['conf_name']
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name = get_conf["del_table_name"]
		else :
			flash("Invalid login" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))

		delegate_no  = request.values.get('delegate_no')
		file_name     = request.values.get('file_name',None) or None
		image_data   = request.values.get('image_data',None) or None
		full_name     = request.values.get('full_name',None) or None
		print("full_name",full_name)
		email         = request.values.get('email',None) or None
		mobile        = request.values.get('mobile',None) or None
		role          = request.values.get('role',None) or None
		get_delegate_data = BadgeModel().check_delegate_by_del_no(del_table_name,delegate_no,conf_id)
		if get_delegate_data :
			image_name = None
			image_path = None	
			#######
			if file_name:
				file_upload = AwsFileUpload(delegate_no,file_name,image_data)
			else:
				file_upload = None	
			# If  file upload function call then this block will execute					
			if  file_upload :
				file_upload = ast.literal_eval(file_upload)
				file_upload_msg    = file_upload["msg"]
				file_upload_status = file_upload["status"]
				if file_upload_status  == 1 :
					image_path    = file_upload["image_path"] or None
					image_name    = file_upload["image_name"] or None
					update_stmt = "update "+ del_table_name + " set updated_at = '"+current_dt+"' , image_name = '"+str(image_name)+"' , image_path = '"+str(image_path)+"'   where delegate_no = " + str(delegate_no) + " ;"
				else :
					return file_upload_msg
			else:				
				if image_data:
					image_name = get_delegate_data['image_name'] or ''
					image_path = get_delegate_data['image_path']
					update_stmt = "update "+ del_table_name + " set updated_at = '"+current_dt+"' , image_name = '"+str(image_name)+"' , image_path = '"+str(image_path)+"'   where delegate_no = " + str(delegate_no) + " ;"
				else:	
					update_stmt = "update "+ del_table_name + " set updated_at = '"+current_dt+"' , image_name = NULL , image_path = NULL  where delegate_no = " + str(delegate_no) + " ;"
			updated_data = BadgeModel().UpdateDelegatePhoto(update_stmt,delegate_no,conf_id)
			update_data = { 'full_name':full_name, 'email':email,'mobile':mobile,'role':role }
			update_delegate_details = BadgeModel().UpdateDelegateDeatils(del_table_name,update_data,delegate_no)
			msg = "Updated Successfully"
			return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 1 }	
			return json.dumps(return_data,default =str)
		else :
			flash("Invalid Delegate Number" , "errorMsg")
			return redirect (url_for('badge_user.PhotoUpload',conf_id=conf_id ,conf_key=conf_key))
	else:
			return "<h1>Invalid URL</h1>"




@app.route('/<int:conf_id>/<conf_key>/check_del_no_exist',methods = ['POST', 'GET'])
def CheckDelNoExist(conf_id,conf_key):
	try:
		get_conf   = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name = get_conf["del_table_name"]
			
		else :
			flash("Invalid login" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))

		now               = datetime.now()
		current_dt        = now.strftime("%Y-%m-%d %H:%M:%S")
		delegate_no       = request.values.get('delegate_no')
		delegate_no       = int(delegate_no)
		get_delegate_data = BadgeModel().check_delegate_by_del_no(del_table_name,delegate_no,conf_id)
		if get_delegate_data :
			status = 1
			msg    = 'Exist'
			data   = get_delegate_data
			image_path = data['image_path']
			image_name = data['image_name']

			if image_path:
				image = image_path+(image_name or '')
			else:
				image = None	 

		else:
			status = 0
			msg    = 'Data not exists'
			data   = None
			image = None

		return_data = { "status" : status, "msg" : msg , 'data': data,'image':image}			
		return json.dumps(return_data,default =str)
					


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

# Ends here		
@app.route("<int:conf_id>/<conf_key>/del_no_prefix_update",methods = [ "GET", "POST"])
def DelNoPrefixUpdate(conf_id,conf_key):
	# now      = datetime.now()
	# curr_dt  = now.strftime("%Y-%m-%d %H:%M:%S")
	try:
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if session.get('badge') and get_conf:
			del_table_name = get_conf["del_table_name"]
			role           = request.values.get('role') or None
			del_no_prefix  = request.values.get('del_no_prefix') or None
			if del_no_prefix:
				update_prefix = BadgeUserModel().updateDelNoPrefix(conf_id,del_table_name, role,del_no_prefix)
				data = {"msg" : update_prefix, "status" : 1}
				return json.dumps(data,default = str)
			else :
				data = {"msg" : "Please enter prefix text ." , "status" : 2}
				return json.dumps(data,default = str)
		else:
			data = {"msg" : "Session invalid", "status" : 3}
			return json.dumps(data,default = str)
	except Exception as e:
		data = { "msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)
		
		
# registered delegates export  report start

@app.route("<int:conf_id>/<conf_key>/reg_report_downloard",methods = ["GET", "POST"])
def RegReportDownloard(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	try:
		if  get_conf:
			del_table_name = get_conf["del_table_name"]
			conf_name      = get_conf["conf_name"]
			column_names   = request.values.getlist('column_name') or None
			if column_names:
				sel_columns = str(column_names)
				sel_columns = sel_columns.replace("[","")
				sel_columns = sel_columns.replace("]","")
				sel_columns = sel_columns.replace("'","")
				get_reports    = BadgeUserModel().get_register_delegates(sel_columns,del_table_name,conf_id)
				if get_reports:
					column_values = column_names
					column_names  = ["s_no"] + column_names 
					inc_val = 1
					for index,value in enumerate(get_reports) : 
						value["s_no"] = inc_val
						inc_val = inc_val + 1

					return ExportDownloadXSL_3(get_reports,column_names,conf_key,conf_name)
					# return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id,conf_key=conf_key))
				else :
					flash(" Registered delegates  Record does not exists." ,"errorMsg")
					return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id,conf_key=conf_key))
			else:
				flash("Please select columns" ,"errorMsg")
				return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id,conf_key=conf_key))
		else :
			flash("Record does not exists." ,"errorMsg")
			return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))
	except Exception as e:
		return str(e)

def ExportDownloadXSL_3(result_data,sel_columns_for_xl,conf_key,conf_name):
	file_name  = "All registered delegates"
	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"})
	
	
# registered delegates export report end

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

@app.route("<int:conf_id>/<conf_key>/badge_collected_unsignup_list",methods = ["GET", "POST"])
def BadgeCollectedUnsignupList(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf:
		del_table_name = get_conf["del_table_name"]
		kc_entry_table = get_conf["kc_session_entry_table_name"]
		fc_entry_table = get_conf["fc_session_entry_table_name"]
		fcbackup_table = "numerotech_foodkit.fc_sessions_entry_backup_"+conf_key
		del_nos        = None
		
		is_bulk_signup           = 0
		is_view_bulk_signup_data = 0
		is_manual_signup         = 0

		attend_list = BadgeUserModel().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("badge_users/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("badge_users/badge_collected_unsignup_list.html",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("badge_users/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("badge_users/badge_collected_unsignup_list.html",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('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))

@app.route("<int:conf_id>/<conf_key>/scan_records_bulk_signup",methods = ["GET", "POST"])
def ScanRecordsBulkSighnup(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	try:
		if get_conf:
			del_table_name     = get_conf["del_table_name"]
			kc_entry_table     = get_conf["kc_session_entry_table_name"]
			fc_entry_table     = get_conf["fc_session_entry_table_name"]
			fcbackup_table     = "numerotech_foodkit.fc_sessions_entry_backup_"+conf_key	
			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              = BadgeUserModel().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              = BadgeUserModel().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("badge_users/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)
				
				data = {"html_data":html_data,"msg" : "Successfully uploaded", "status" : 1}
				return json.dumps(data,default = str)
			else:
				attend_list    = BadgeUserModel().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)
				# attend_list    = BadgeUserModel().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("badge_users/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)
				
				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"])
def ViewAndUpdateCostomeBulkSignup(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	try:
		if get_conf:
			del_table_name     = get_conf["del_table_name"]
			kc_entry_table     = get_conf["kc_session_entry_table_name"]
			fc_entry_table     = get_conf["fc_session_entry_table_name"]
			fcbackup_table     = "numerotech_foodkit.fc_sessions_entry_backup_"+conf_key	
			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    = BadgeUserModel().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    = BadgeUserModel().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("badge_users/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)
					data = {"html_data":html_data,"msg" : " Successfully updated", "status" : 1}
					return json.dumps(data,default = str)
				else:
					attend_list    = BadgeUserModel().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("badge_users/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)
					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>/search_delegate",methods = ["GET", "POST"])
def SearchDelegate(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf:
		del_table_name     = get_conf["del_table_name"]
		return render_template("badge_users/search_all_table_delegtes.html",conf_id = conf_id,conf_key=conf_key)
	else:
		flash("Invalid URL","errorMsg")
		return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))


@app.route("<int:conf_id>/<conf_key>/get_search_delegate",methods = ["GET", "POST"])
def GetSearchDelegate(conf_id,conf_key):
	delegate_table_data             = None
	kit_session_entry_table         = None
	food_session_entry_table        = None
	food_session_entry_backup_table = None
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	try:	
		if get_conf:
			del_table_name       = get_conf["del_table_name"]
			kc_entry_table       = get_conf["kc_session_entry_table_name"]
			fc_entry_table       = get_conf["fc_session_entry_table_name"]
			fcbackup_table       = "numerotech_foodkit.fc_sessions_entry_backup_"+conf_key	
			delegate_nos         = request.values.get('delegate_nos') or None
			search_data          = request.values.get('full_name') 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

			search_delegate_data = BadgeUserModel().Getsearch_delegate_data(conf_id,delegate_nos,search_data,del_table_name,kc_entry_table,fc_entry_table,fcbackup_table)
			if search_delegate_data:
				for index,value in enumerate(search_delegate_data) :
					if index == 0 :
						delegate_table_data    = value

					if index == 1 :
						kit_session_entry_table    = value
					if index == 2 :
						food_session_entry_table    = value
					if index == 3 :
						food_session_entry_backup_table    = value
				html_data      = render_template("badge_users/search_all_table_delegtes_table.html",conf_id=conf_id,conf_key=conf_key,delegate_table_data=delegate_table_data,kit_session_entry_table=kit_session_entry_table,food_session_entry_table=food_session_entry_table,food_session_entry_backup_table=food_session_entry_backup_table)
				data = {"html_data":html_data,"msg" : "", "status" : 1}
				return json.dumps(data,default = str)
			else :
				data = {"html_data":"","msg" : " Data not exists", "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>/spot_print', methods =  ["GET","POST"])
def SpotPrint(conf_id,conf_key):
	conf_data      = BadgeModel().GetConf(conf_id,conf_key)
	if	conf_data:
		conf_name      = conf_data['conf_name']
		del_table_name = conf_data['del_table_name']
		output         = BadgeModel().getRole(conf_id)
		return render_template('badge/spot_entry.html',conf_id=conf_id ,conf_key=conf_key,conf_name=conf_name,role=output,del_table_name=del_table_name)
	else :
		return "<h1>Invalid URL</h1>"
		
@app.route('/<int:conf_id>/<conf_key>/post_spot_print',methods = ['POST', 'GET'])
def PostSportPrint(conf_id,conf_key):
	now            = datetime.now()
	current_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
	conf_data      = BadgeModel().GetConf(conf_id,conf_key)
	if conf_data:
		conf_name      = conf_data['conf_name']
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name = get_conf["del_table_name"]
		else :
			flash("Invalid login" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))

		delegate_no  = request.values.get('delegate_no')
		file_name     = request.values.get('file_name',None) or None
		image_data   = request.values.get('image_data',None) or None
		full_name     = request.values.get('full_name',None) or None
		print("full_name",full_name)
		email         = request.values.get('email',None) or None
		mobile        = request.values.get('mobile',None) or None
		role          = request.values.get('role',None) or None
		get_delegate_data = BadgeModel().check_delegate_by_del_no(del_table_name,delegate_no,conf_id)
		if get_delegate_data :
			image_name = None
			image_path = None	
			#######
			if file_name:
				file_upload = AwsFileUpload(delegate_no,file_name,image_data)
			else:
				file_upload = None	
			# If  file upload function call then this block will execute					
			if  file_upload :
				file_upload = ast.literal_eval(file_upload)
				file_upload_msg    = file_upload["msg"]
				file_upload_status = file_upload["status"]
				if file_upload_status  == 1 :
					image_path    = file_upload["image_path"] or None
					image_name    = file_upload["image_name"] or None
					update_stmt = "update "+ del_table_name + " set updated_at = '"+current_dt+"' , image_name = '"+str(image_name)+"' , image_path = '"+str(image_path)+"'   where delegate_no = " + str(delegate_no) + " ;"
				else :
					return file_upload_msg
			else:				
				if image_data:
					image_name = get_delegate_data['image_name'] or ''
					image_path = get_delegate_data['image_path']
					update_stmt = "update "+ del_table_name + " set updated_at = '"+current_dt+"' , image_name = '"+str(image_name)+"' , image_path = '"+str(image_path)+"'   where delegate_no = " + str(delegate_no) + " ;"
				else:	
					update_stmt = "update "+ del_table_name + " set updated_at = '"+current_dt+"' , image_name = NULL , image_path = NULL  where delegate_no = " + str(delegate_no) + " ;"
			updated_data = BadgeModel().UpdateDelegatePhoto(update_stmt,delegate_no,conf_id)
			update_data = { 'full_name':full_name, 'email':email,'mobile':mobile,'role':role }
			update_delegate_details = BadgeModel().UpdateDelegateDeatils(del_table_name,update_data,delegate_no)
			msg = "Updated Successfully"
			return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 1 }	
			return json.dumps(return_data,default =str)
		else :
			flash("Invalid Delegate Number" , "errorMsg")
			return redirect (url_for('badge_user.PhotoUpload',conf_id=conf_id ,conf_key=conf_key))
	else:
			return "<h1>Invalid URL</h1>"


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