Sindbad~EG File Manager

Current Path : /home/numerotech/conference.numerotech.com/food_kit_scan_badges/core/controller/
Upload File :
Current File : //home/numerotech/conference.numerotech.com/food_kit_scan_badges/core/controller/BadgeController.py

from flask import request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json,render_template_string,Response
from core.model.BadgeModel import BadgeModel
from core.model.FoodSessionModel import FoodSessionModel
from core.model.KitSessionModel import KitSessionModel
from core.model.BadgeUserModel import BadgeUserModel
from core.library.email import EMAIL
from .. import Cryptography,Helper,path_wkhtmltopdf,is_windows_os
# from flask import session, app
from random import randint
import datetime
from datetime import timedelta,date,datetime,time
# import requests, json

from werkzeug.utils import secure_filename

from os.path import join, dirname, realpath
import os
import flask
import string
import boto3, botocore
import webbrowser
import re
 
from flask import Flask
import barcode
from barcode import EAN8
from barcode import EAN13
from barcode.writer import ImageWriter

# from Code128 import Code128
# from base64 import b64encode
from collections import defaultdict
import math
from core import app
import pyqrcode
import pdfkit

import ast

import io
import os
import base64
from PIL import Image

import boto3, botocore
from botocore.exceptions import ClientError
from core.library.BackgroundTasks import BackgroundTasks


# from flask_qrcode import QRcode
app = Blueprint('badge', __name__)




# JAN   01,2023
@app.route('/<int:conf_id>/<conf_key>/generate_counter_batch', methods = ["GET","POST"])
def GenerateCounterBatch(conf_id,conf_key):
	# del_table_name    = "delegates_karavali22" 
	now               = datetime.now()
	curr_dt           = now.strftime("%Y-%m-%d %H:%M:%S")
	set_list          = []
	total_delegates   = 0
	array_position    = 0
	loop_value        = -1
	total_counter     = 0
	update_stmt       = ""

	set_list          = ['A','B','C','D','E','F','G','H']
	i = -1
		
	count_per_counter = int(request.form['count_per_counter']) or  200  # form data
	count_per_set     = int(request.form['count_per_set']) or 25   # form data

	get_conf  = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf :
		del_table_name = get_conf["del_table_name"]
		delegate_ids   = BadgeModel().AllDelegageIds(conf_id,del_table_name)
		if delegate_ids :
			total_delegates = len(delegate_ids)
			total_counter = int(total_delegates/count_per_counter)
			total_counter = total_counter +1
			count_per_counter_1 = count_per_counter + 1
			# count_per_set       = count_per_set +1

			# For loop start 
			for max_inc in range (0,total_counter):
				for row in range(1,count_per_counter_1) :
					i = i+1

					if i <  total_delegates:
						for index,value in enumerate(delegate_ids) :

							if index == i :
								loop_value = loop_value+ 1
								delegate_no = value["delegate_no"]
								break

						# loop_value =loop_value +1
						if loop_value == count_per_set :
							# loop_value = 1
							loop_value = 0
							array_position = array_position+1
						if array_position <len(set_list) :
							# print(i,max_inc+1 , set_list[array_position])
							# update_stmt_1 = "update "+del_table_name+" set counter ="+str(max_inc+1)+ " , batch = '" +set_list[array_position]+"' , updated_at = '"+curr_dt+"' where delegate_no = " +str(i) + "  ;\n"
							update_stmt_1 = "update "+del_table_name+" set counter ="+str(max_inc+1)+ " , batch = '" +set_list[array_position]+"' , updated_at = '"+curr_dt+"' where delegate_no = " +str(delegate_no) + "  ;\n"
							update_stmt   = update_stmt + update_stmt_1
						else :
							array_position = 0
							# print(i,max_inc+1 , set_list[array_position])
							update_stmt_1 = "update "+del_table_name+" set counter = " +str(max_inc+1)+ " , batch = '" +set_list[array_position]+"' , updated_at = '"+curr_dt+"' where delegate_no = " +str(delegate_no) + "  ;\n"
							update_stmt   = update_stmt + update_stmt_1
						   
				array_position = -1
				if i%count_per_counter ==0:    
					pass
				else :  
					i = i+1-1

			# For loop end
			update_response = BadgeModel().updateCouterBatch(update_stmt )
			if update_response == "success" :
				flash( "Counter and batch updated .Total updated records :  " + str(total_delegates)  , "successMsg")
			else :
				flash(update_response , "errorMsg")	
			return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))

		else :
			flash("Delegates records not exist." ,"errorMsg")	
			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))	

# @app.route('/<int:conf_id>/<conf_key>/generate_counter_batch', methods = ["GET","POST"])
# def GenerateCounterBatch(conf_id,conf_key):
# 	batch_list        = []
# 	array_position    = 0
# 	loop_value        = 0
# 	delegate_list_len = 0

# 	update_stmt       = ""
# 	min_del_len       = 0
# 	del_id_index      = 0
# 	del_id            = 1
# 	now         = datetime.now()
# 	curr_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
		
# 	max_counter_val       = request.form['max_counter_val']
# 	count_per_counter     = request.form['count_per_counter']
# 	if max_counter_val :
# 		max_counter_val   = int(max_counter_val)
# 	if count_per_counter :
# 		count_per_counter = int(count_per_counter)	
	
# 	per_set_val = int(count_per_counter/max_counter_val)

# 	# create set list 
# 	for row in range(0,max_counter_val) :
# 		batch_list.append(string.ascii_uppercase[row])

# 	count_per_counter = count_per_counter + 1
# 	per_set_val       = per_set_val + 1

# 	get_conf  = BadgeModel().GetConf(conf_id,conf_key)
# 	if get_conf :
# 		del_table_name = get_conf["del_table_name"]
# 		delegate_ids = BadgeModel().AllDelegageIds(conf_id,del_table_name)
# 	else : 
# 		flash("Invalid URL" , "errorMsg")
# 		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))		
# 	if  delegate_ids :
# 		delegate_list_len = len(delegate_ids)
# 	else :
# 		delegate_list_len =  0	

# 	if delegate_list_len  > 0 :
# 		for max_inc in range (0,max_counter_val):
# 			for row in range(1,count_per_counter) :
# 				# quotient_val = row//per_set_val
# 				loop_value =loop_value +1
# 				if loop_value  == per_set_val : 
# 					loop_value = 1
# 					array_position = array_position+1
# 				if array_position  <len(batch_list) :
# 					min_del_len    = min_del_len +1
# 					if min_del_len <= delegate_list_len :

# 						del_id_index = min_del_len-1
# 						del_id       =  delegate_ids[del_id_index]["delegate_no"]
# 						# print(max_inc+1 ,row, batch_list[array_position] , min_del_len)
# 						update_stmt_1 = "update "+del_table_name+" set counter = " +str(max_inc+1)+ " , batch = '" +batch_list[array_position]+"' , updated_at = '"+curr_dt+"' where delegate_no = " +str(del_id) + "  ;\n"
# 						update_stmt   = update_stmt + update_stmt_1
# 				else :
# 					array_position = 0
# 					min_del_len    = min_del_len + 1
# 					if min_del_len <= delegate_list_len :

# 						del_id_index = min_del_len-1
# 						del_id       =  delegate_ids[del_id_index]["delegate_no"]
# 						# print(row,max_inc+1 , batch_list[array_position] ,min_del_len)
# 						# update_stmt_1 = "update delegates set counter = " +str(max_inc+1)+ " , batch = '" +batch_list[array_position]+"' ,updated_at = '"+curr_dt+"' where delegate_no = " +str(del_id) + " and conference_id ="+str(conf_id) +"  ;\n"
# 						update_stmt_1 = "update "+del_table_name+" set counter = " +str(max_inc+1)+ " , batch = '" +batch_list[array_position]+"' ,updated_at = '"+curr_dt+"' where delegate_no = " +str(del_id) +"  ;\n"
# 						update_stmt   = update_stmt + update_stmt_1

# 		update_response = BadgeModel().updateCouterBatch(update_stmt )
# 		if update_response == "success" :
# 			flash( "Counter and batch updated .Total updated records :  " + str(del_id_index+1)  , "successMsg")
# 		else :
# 			flash(update_response , "errorMsg")	
# 		return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))
# 	else :
# 		flash("Delegates records not exist." ,"errorMsg")
# 		return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))


@app.route('/<int:conf_id>/<conf_key>/delegate_batch', methods = ["GET","POST"])
def DelegateBatch(conf_id,conf_key):
	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"]
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name = get_conf["del_table_name"]
			get_batch_counter_role = BadgeModel().GetBatchCounterRole(conf_id,del_table_name)
			for index,value in enumerate(get_batch_counter_role) :
				if index == 0 :
					batch_data    = value
				if index == 1 :
					counter_data  = value  
				if index == 2 :
					role_data     = value  	
	
			return render_template('badge/delegate_badge.html' ,conf_id=  conf_id, conf_key =conf_key,batch_data = batch_data,counter_data = counter_data,role_data = role_data ,conf_name=conf_name,del_table_name=del_table_name)			

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


@app.route('/delegate_batch_print', methods = ["POST"])
def DelegateBatchPrint():
	if session.get('badge'):
		# aa = Helper.getQRCode("https://abs.numerotech.com/view/27/ksos23/FP/103")
		# return aa
		del_nos_array 		= []
		dic_name      		= {}
		badge_user    		= session.get('badge')
		conf_id       		= badge_user["conf_id"]
		conf_key      		= badge_user["conf_key"]

		role          		= request.values.get("role")  or None
		counter       		= request.values.get("counter") or None
		batch         		= request.values.get("batch") or None


		
		del_no_from   		= request.values.get("del_no_from") or None
		del_no_to     		= request.values.get("del_no_to") or None
		qr_code       		= request.values.get("qr_code") or 0
		static_qr_code      = request.values.get("static_qr_code") or 0
		print_center        = request.values.get("print_center") or 0
		is_commitment       = request.values.get("is_commitment") or None
		Delegate_badge_type = request.values.get("badge_type") or 'Delegate Badge'
# 		is_commitment = int(is_commitment)

		print_both_side     = request.values.get("print_both_side") or 'No' # set 'Yes' or 'No'
		del_table_name      = request.values.get("del_table_name") or None


		# abinav event use conf_id  = 55
		badge_photo         = request.values.get("badge_photo") or None
		badge_size_dim      = request.values.get("badge_size") or None

		del_no_single 	   = request.values.get("delegate_no") or None
		badge_background_img   = request.values.get("badge_background") or None	

		if del_no_single:
			del_no_from = del_no_single
			del_no_to 	= del_no_single


		badge_size          = BadgeModel().Get_badge_size(conf_id,Delegate_badge_type)
		if del_no_from and "," in del_no_from :
			del_nos     = del_no_from  
			data_for_print  = BadgeModel().dataForBadgePrintDelNos(conf_id,role,counter,batch,del_nos,del_table_name,is_kit=1)
		else :
			data_for_print  = BadgeModel().dataForBadgePrint(conf_id,role,counter,batch,del_no_from,del_no_to,del_table_name,is_commitment)

		# if conf_id == 55  and  "small_badge" == badge_size_dim  and "with_photo" == badge_photo :
		# print("data_for_print",data_for_print)
		if conf_id == 55  and  "small_badge" in badge_size_dim:
			pageWidth  = "57mm"
			pageHeight = "89mm"
			badge_size["badge_height"] = "634px"
			badge_size["badge_width"] = "408px"
			badge_size["padding_top"] = "56.6mm"
			badge_size["qr_code_size"] = "135px"
			badge_size["display_no_size"] = "1.3rem"
			badge_size["photo_width"] = "136px"
			badge_size["photo_height"] = "153px"
			badge_size["photo_out_height"] = "160px"	
			badge_size["photo_left"] = "31.35%"
			badge_size["name_font_size"] = "2.4rem"
			badge_size["name_heigth"] = "80px"
			
		
		elif conf_id == 55  and  "big_badge" in badge_size_dim:
			pageWidth  = "92.96mm"
			pageHeight = "134.96mm"
			badge_size["badge_height"] = "637.5px"
			badge_size["badge_width"] = "439.5px"
			badge_size["padding_top"] = "61mm"
			badge_size["qr_code_size"] = "135px"
			badge_size["display_no_size"] = "1.3rem"
			badge_size["photo_width"] = "145px"
			badge_size["photo_height"] = "165px"
			badge_size["photo_out_height"] = "169px"
			badge_size["photo_left"] = "31.35%"
			badge_size["name_font_size"] = "1.8rem"		
			badge_size["name_heigth"] = "61px"
				

		if data_for_print :
# 			return "please wait---"
			for index,value in enumerate(data_for_print) :
				del_no                  = value["delegate_no"]
				dic_name["delegate_no"] = del_no
				del_nos_array.append(dic_name["delegate_no"])
				value['base64code'] = ''
				if value['email']:
					value['base64code'] = Helper.base64encode(value['email'])    
				elif value['mobile']:
					value['base64code'] = Helper.base64encode(value['mobile'])    
					
				#for commmtment

				comm = value["commitment_content"]
				
				# if comm :
				# 	comm = comm.replace("*|" ,'<img src="{{qrcode("')
				# 	comm = comm.replace("|*" ,'",box_size=2)}}">')
				# 	value["commitment_content"] = render_template_string(comm)
				# 	return value["commitment_content"]
				# 	return comm
				# else :
				# 	value["commitment_content"] = None	
				if comm :
					# comm = comm.replace("*|" ,'<div class="cm-qrcode" data-qrcode="')
					# comm = comm.replace("|*" ,'"> </div>')

					comm = comm.replace("*|" ,'<img style="width:70px;" src="data:image/png;base64, {{ Helper.getQRCode(" ')
					comm = comm.replace("|*" ,'") }} " />')
					value["commitment_content"] = render_template_string(comm)
				else :
					value["commitment_content"] = None


				role    = value["role"]
				
				# print(role)
			
				
				# if conf_id == 46 : 
				# 	bg_url_front = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/ss23/Surgical_Strike_2023_Badge.jpg"
				# 	# spot
				# 	# bg_url_front = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/vrsi23/awardees_vrsi23_spot.jpg"
				# 	value["bg_url_front"] = bg_url_front
				# 	value["color_code"]   = [0xff , 0xff , 0xff]
				# 	value["font_color"]   = "black"
				# 	bg_url_commit_image = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/ss23/Surgical_Strike_2023_Badge.jpg"
				# if conf_id == 26 and role in ["" , ""]:  # For multiple role
				

				if conf_id == 56 and role in ["DELEGATE" , "ACCOM.DELEGATE","PG"]:  # For multiple role 
					bg_url_front = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/del_acc_del_pg_selsicon24_v1.jpg"
					value["bg_url_front"] = bg_url_front

					# value["color_code"]   = [0xfc, 0xe7, 0xce]
					value["color_code"]   = [0xff, 0xff, 0xff]
					bg_url_commit_image = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/del_acc_pg_back_selsi24_v1.jpg"
				
				elif conf_id == 56 and role in ["FACULTY" , "ORG.CHAIRMAN","ORG.COMMITTEE","ORG.SECRETARY","ORG.JOINT SECRETARY"]:  # For multiple role
					bg_url_front = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/org_comm_faculty_selsi24_v1.jpg"
					value["bg_url_front"] = bg_url_front
					# value["color_code"]   = [0xf0, 0xe1, 0xed]
					value["color_code"]   = [0xff, 0xff, 0xff]
					bg_url_commit_image = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/org_com_faculty_back_selsicon24_v1.jpg"
				
				elif conf_id == 56  and   "TRADE" in role: 
					bg_url_front = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/trade_selsi24_v1.jpg"
					value["bg_url_front"] = bg_url_front
					# value["color_code"]   = [0xf0, 0xe1, 0xed]
					value["color_code"]   = [0xff, 0xff, 0xff]
					bg_url_commit_image = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/trade_selsi24_v1.jpg"
				
				# elif conf_id == 56 and role in ["VOLUNTEER" ,"EVENT CO ORDINATOR"]:  # For multiple role
				# 	bg_url_front = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/others_selsi24_v1.jpg"
				# 	value["bg_url_front"] = bg_url_front
				# 	# value["color_code"]   = [0xf0, 0xe1, 0xed]
				# 	value["color_code"]   = [0xff, 0xff, 0xff]
				# 	bg_url_commit_image = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/trade_selsi24_v1.jpg"					

				else :
					# return "Else block " + role
					bg_url_front = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/others_selsi24_v1.jpg"
					value["bg_url_front"] = bg_url_front
					# value["color_code"]   = [0xe6, 0xdf, 0xed]
					value["color_code"]   = [0xff , 0xff , 0xff]
					bg_url_commit_image = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/selsicon24/others_selsi24_v1.jpg"


				if value["commitment_content"] :
					value["bg_url_back"] = bg_url_commit_image
				else :
					value["bg_url_back"] = bg_url_front	


				if request.values.get("print_spot"):
					badge_photo = "with_photo"
					value["bg_url_front"] = ""
					badge_size["badge_height"] = "13cm"
					badge_size["badge_width"] = "9.22cm"
					badge_size["padding_top"] = "44.5mm"
					badge_size["qr_code_size"] = "111px"
					badge_size["display_no_size"] = "1rem"
					badge_size["photo_width"] = "100px"
					badge_size["photo_height"] = "120px"
					badge_size["photo_out_height"] = "127px"
					badge_size["photo_left"] = "33%"
					badge_size["name_font_size"] = "1.5rem"
					badge_size["name_heigth"] = "55px"


				# if value["commitment_content"] :
				# 	value["bg_url_back"] = bg_url_commit_image
				# else :
				# 	value["bg_url_back"] = bg_url_front	

					

		static_links  = []			
# 		if int(static_qr_code) == 1:
			
				# static_links.append({'name':'Download App','link':'https://boaeyeadvance2023.com/mobile-app'})
				# static_links.append({'name':'Conference Website','link':'https://boaeyeadvance2023.com'})
				
				# static_links.append({'name':'Scientific Program','link':'https://delegateapp.s3.ap-southeast-1.amazonaws.com/phacoref_sci_program.pdf'})
				# static_links.append({'name':'Attendance Certificate','link':'https://phacorefcertificates.numerotech.com/22/phacoref23'})
				# static_links.append({'name':'Raise a Query','link':'https://conference.numerotech.com/1/iages23/query'})
					# value["static_qr_code"] = '<div class="cm-qrcode" data-qrcode="'
		
		# badge_size["qr_code_margin_left"] = "10px"
		# badge_size["qr_code_margin_top"] = "20px"	
		# badge_size["padding_top"] = "100px"
		# badge_size["qr_code_size"] = "200px"
		# badge_size["name_font_size"] = "30px"
		if data_for_print :
			if conf_id in [40,36] :
				# .html
				return render_template('badge/delegate_badge_print_download_barcode.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center ,str=str ) 
				# return render_template('badge/delegate_badge_print_barcode.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center)
			if conf_id in [26] :
				# return "TESTING" 
				# color_badge_both_side_same.html for download pdf
				html =  render_template('badge/color_badge_both_side_same.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
				# html =  render_template('badge/delegate_badge_print_sztnaoi23.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
				# vrsi23_color_print_both_side.html
				# html =  render_template('badge/delegate_badge_print_sztnaoi23.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
				# return html
			if conf_id in [55,56] :
				html =  render_template('badge/color_badge_both_side_same.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)

				#html =  render_template('badge/delegate_badge_print_biff24.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center ,str=str, badge_size=badge_size,badge_photo=badge_photo ) 
				# return html
				if request.values.get("print") or request.values.get("print_spot"):
					return html
				config = None

				pageWidth  = "95mm"
				pageHeight = "150mm"
				cert_name  = "badge_for_print.pdf"
				options = {
							'dpi': 300,
							# 'page-size': 'A4',
							'page-height': pageHeight , 
							'page-width': pageWidth ,
							'margin-top': '0.0in',
							'margin-right': '0.0in',
							'margin-bottom': '0.0in',
							'margin-left': '0.0in',
							"enable-local-file-access": ""
							# 'enable-javascript': True,
							# 'javascript-delay': 5000,
							# 'no-stop-slow-scripts': 'true',
							# 'encoding': 'UTF-8'
						} 

				if is_windows_os == 1:
					config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
				else:
					config = None
								
						
				return Response(pdfkit.from_string(html, options=options,configuration=config),
								   mimetype="application/pdf",
								   headers={"Content-Disposition":
												"attachment;filename="+str(cert_name)+""})

			
			return render_template('badge/color_badge_both_side_same.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
			#delegate_badge_print_frontback_same_content.html, delegate_badge_print_qronly_orgcomm.html , sztnaoi delegate_badge_print_qronly.html,delegate_badge_print_sztnaoi23.html,delegate_badge_print_phacof23
			#  return render_template('badge/color_badge_both_side_same.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,conf_id=conf_id,static_links=static_links,len =len)
		else :
			flash("record not exists.", "errorMsg")
			return redirect(url_for('badge.DelegateBatch' , conf_id= conf_id,conf_key =conf_key))
	else :
		flash("Invalid login" ,"errorMsg")	
		return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id ,conf_key = conf_key))	


@app.route('/delegate_batch_print_spot', methods = ["POST"])
def DelegateBatchPrintSpot():
	if session.get('badge'):
		del_nos_array 		= []
		dic_name      		= {}
		badge_user    		= session.get('badge')
		conf_id       		= badge_user["conf_id"]
		conf_key      		= badge_user["conf_key"]

		role          		= request.values.get("role")  or None
		counter       		= request.values.get("counter") or None
		batch         		= request.values.get("batch") or None


		
		del_no_from   		= request.values.get("del_no_from") or None
		del_no_to     		= request.values.get("del_no_to") or None
		qr_code       		= request.values.get("qr_code") or 0
		static_qr_code      = request.values.get("static_qr_code") or 0
		print_center        = request.values.get("print_center") or 0
		is_commitment       = request.values.get("is_commitment") or None
		Delegate_badge_type = request.values.get("badge_type") or 'Delegate Badge'
# 		is_commitment = int(is_commitment)

		print_both_side     = request.values.get("print_both_side") or 'No' # set 'Yes' or 'No'
		del_table_name      = request.values.get("del_table_name") or None


		# abinav event use conf_id  = 55
		badge_photo         = request.values.get("badge_photo") or None
		badge_size_dim      = request.values.get("badge_size") or None

		del_no_single 	   = request.values.get("delegate_no") or None
		badge_background_img   = request.values.get("badge_background") or None	


		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
		email         = request.values.get('email',None) or None
		mobile        = request.values.get('mobile',None) or None
		role          = request.values.get('role',None) or None
		
		now            = datetime.now()
		current_dt     = now.strftime("%Y-%m-%d %H:%M:%S")

		
		del_result			 =   BadgeModel().usp_gen_delegate_no_with_spot_data(full_name,email,mobile,role)
		
		if del_result:
			del_no_single = del_result[0].get('delegate_no') 	

		file_name = None
		if del_no_single:
			del_no_from = str(del_no_single)
			del_no_to 	= str(del_no_single)
			file_name   = str(del_no_single)+".png"
	
		if file_name and image_data:
			file_upload = AwsFileUpload(del_no_single,file_name,image_data)
		else:
			file_upload = None	
			
		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(del_no_single) + " ;"
					updated_data = BadgeModel().UpdateDelegatePhoto(update_stmt,del_no_single,conf_id)		
	
		badge_size          = BadgeModel().Get_badge_size(conf_id,Delegate_badge_type)
		if del_no_from and "," in del_no_from :
			del_nos     = del_no_from  
			data_for_print  = BadgeModel().dataForBadgePrintDelNos(conf_id,role,counter,batch,del_nos,del_table_name,is_kit=1)
		else :
			data_for_print  = BadgeModel().dataForBadgePrint(conf_id,role,counter,batch,del_no_from,del_no_to,del_table_name,is_commitment)

		# if conf_id == 55  and  "small_badge" == badge_size_dim  and "with_photo" == badge_photo :


		if data_for_print :
# 			return "please wait---"
			for index,value in enumerate(data_for_print) :
				del_no                  = value["delegate_no"]
				dic_name["delegate_no"] = del_no
				del_nos_array.append(dic_name["delegate_no"])
				value['base64code'] = ''
				if value['email']:
					value['base64code'] = Helper.base64encode(value['email'])    
				elif value['mobile']:
					value['base64code'] = Helper.base64encode(value['mobile'])    
					
				#for commmtment

				comm = value["commitment_content"]
				
				# if comm :
				# 	comm = comm.replace("*|" ,'<img src="{{qrcode("')
				# 	comm = comm.replace("|*" ,'",box_size=2)}}">')
				# 	value["commitment_content"] = render_template_string(comm)
				# 	return value["commitment_content"]
				# 	return comm
				# else :
				# 	value["commitment_content"] = None	
				if comm :
					# comm = comm.replace("*|" ,'<div class="cm-qrcode" data-qrcode="')
					# comm = comm.replace("|*" ,'"> </div>')

					comm = comm.replace("*|" ,'<img style="width:70px;" src="data:image/png;base64, {{ Helper.getQRCode(" ')
					comm = comm.replace("|*" ,'") }} " />')
					value["commitment_content"] = render_template_string(comm)
				else :
					value["commitment_content"] = None


				role    = value["role"]
				

			
				if request.values.get("print_spot"):
					badge_photo = "with_photo"
					value["bg_url_front"] = ""
					value["color_code"]   = [0xff , 0xff , 0xff]
					badge_size["badge_height"] = "13cm"
					badge_size["badge_width"] = "9.22cm"
					badge_size["padding_top"] = "44.5mm"
					badge_size["qr_code_size"] = "111px"
					badge_size["display_no_size"] = "1rem"
					badge_size["photo_width"] = "100px"
					badge_size["photo_height"] = "120px"
					badge_size["photo_out_height"] = "127px"
					badge_size["photo_left"] = "33%"
					badge_size["name_font_size"] = "1.5rem"
					badge_size["name_heigth"] = "55px"


				# if value["commitment_content"] :
				# 	value["bg_url_back"] = bg_url_commit_image
				# else :
				# 	value["bg_url_back"] = bg_url_front	

					

		static_links  = []			
# 		if int(static_qr_code) == 1:
			
				# static_links.append({'name':'Download App','link':'https://boaeyeadvance2023.com/mobile-app'})
				# static_links.append({'name':'Conference Website','link':'https://boaeyeadvance2023.com'})
				
				# static_links.append({'name':'Scientific Program','link':'https://delegateapp.s3.ap-southeast-1.amazonaws.com/phacoref_sci_program.pdf'})
				# static_links.append({'name':'Attendance Certificate','link':'https://phacorefcertificates.numerotech.com/22/phacoref23'})
				# static_links.append({'name':'Raise a Query','link':'https://conference.numerotech.com/1/iages23/query'})
					# value["static_qr_code"] = '<div class="cm-qrcode" data-qrcode="'
		
		# badge_size["qr_code_margin_left"] = "10px"
		# badge_size["qr_code_margin_top"] = "20px"	
		# badge_size["padding_top"] = "100px"
		# badge_size["qr_code_size"] = "200px"
		# badge_size["name_font_size"] = "30px"
		
		if data_for_print :
			if conf_id in [40,36] :
				# .html
				return render_template('badge/delegate_badge_print_download_barcode.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center ,str=str ) 
				# return render_template('badge/delegate_badge_print_barcode.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center)
			if conf_id in [26] :
				# return "TESTING" 
				# color_badge_both_side_same.html for download pdf
				html =  render_template('badge/color_badge_both_side_same.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
				# html =  render_template('badge/delegate_badge_print_sztnaoi23.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
				# vrsi23_color_print_both_side.html
				# html =  render_template('badge/delegate_badge_print_sztnaoi23.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
				# return html
			if conf_id in [55] :
				html =  render_template('badge/delegate_badge_print_biff24.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center ,str=str, badge_size=badge_size,badge_photo=badge_photo ) 
				# return html
				if request.values.get("print") or request.values.get("print_spot"):
					return html
				config = None

				# pageWidth  = "95mm"
				# pageHeight = "150mm"
				cert_name  = "badge_for_print.pdf"
				options = {
							'dpi': 300,
							# 'page-size': 'A4',
							'page-height': pageHeight if pageHeight else '134mm', 
							'page-width': pageWidth if pageWidth else '189mm',
							'margin-top': '0.0in',
							'margin-right': '0.0in',
							'margin-bottom': '0.0in',
							'margin-left': '0.0in',
							"enable-local-file-access": ""
							# 'enable-javascript': True,
							# 'javascript-delay': 5000,
							# 'no-stop-slow-scripts': 'true',
							# 'encoding': 'UTF-8'
						} 

				if is_windows_os == 1:
					config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
				else:
					config = None
								
						
				return Response(pdfkit.from_string(html, options=options,configuration=config),
								   mimetype="application/pdf",
								   headers={"Content-Disposition":
												"attachment;filename="+str(cert_name)+""})

			
			return render_template('badge/color_badge_both_side_same.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
			#delegate_badge_print_frontback_same_content.html, delegate_badge_print_qronly_orgcomm.html , sztnaoi delegate_badge_print_qronly.html,delegate_badge_print_sztnaoi23.html,delegate_badge_print_phacof23
			#  return render_template('badge/color_badge_both_side_same.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,conf_id=conf_id,static_links=static_links,len =len)
		else :
			flash("record not exists.", "errorMsg")
			return redirect(url_for('badge.DelegateBatch' , conf_id= conf_id,conf_key =conf_key))
	else :
		flash("Invalid login" ,"errorMsg")	
		return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id ,conf_key = conf_key))	


@app.route('/<int:conf_id>/<conf_key>/delegate_batch_print_from_reg', methods = ["GET","POST"])
def DelegateBatchPrintFromReg(conf_id,conf_key):
	static_qr_code =1
	del_nos_array = []
	dic_name      = {}
	role = request.values.get("role")  or None
	counter    = request.values.get("counter") or None
	batch      = request.values.get("batch") or None
	is_kit     = request.values.get("is_kit") or 1 # this line added  by ganesan on Nov 21 2022
	static_qr_code     = request.values.get("static_qr_code") or 1
	print_center     = request.values.get("print_center") or 1
	

	del_nos = request.values.get("del_nos") or None
	qr_code     = request.values.get("qr_code") or 1
	is_commitment = request.values.get("is_commitment") or 1
	is_commitment = int(is_commitment)

	# print_both_side = request.values.get("print_both_side") or 'Yes'
	print_both_side = request.values.get("print_both_side") or 'No'
	# del_table_name  = request.values.get("del_table_name") or None

	get_conf  = BadgeModel().GetConf(conf_id,conf_key)
	
	if get_conf :
		del_table_name  = get_conf["del_table_name"]
		kc_del_sess_tab = get_conf["kc_del_session_table_name"]
		fc_del_sess_tab = get_conf["fc_del_session_table_name"]
# 		return (kc_del_sess_tab + fc_del_sess_tab)
		# call usp_delegate_session_map(9,5001,'kc_sessions','kc_delegates_sessions_irc22' );	
		if is_kit and int(is_kit)  > 0 :
			session_table = "kc_sessions"
			del_ses_table = kc_del_sess_tab
		else : 
			session_table = "fc_sessions"
			del_ses_table = fc_del_sess_tab
			
		del_id_int = int(del_nos)
		#insert_session = BadgeModel().sessionMap(conf_id,del_id_int,session_table,del_ses_table)
	Delegate_badge_type      = request.values.get("badge_type") or 'Delegate Badge'
	badge_size      = BadgeModel().Get_badge_size(conf_id,Delegate_badge_type)
	data_for_print  = BadgeModel().dataForBadgePrintDelNos(conf_id,role,counter,batch,del_nos,del_table_name,is_kit)
# 	json_data =  json.dumps(data_for_print,default=str)
# 	return json_data
	if data_for_print :
		for index,value in enumerate(data_for_print) :
			del_no                  = value["delegate_no"]
			dic_name["delegate_no"] = del_no
			del_nos_array.append(dic_name["delegate_no"])
			value['base64code'] = ''
			if value['email']:
				value['base64code'] = Helper.base64encode(value['email'])    
			elif value['mobile']:
				value['base64code'] = Helper.base64encode(value['mobile'])    
		
			#for commmtment

			comm = value["commitment_content"]
			
			# if comm :
			# 	comm = comm.replace("*|" ,'<img src="{{qrcode("')
			# 	comm = comm.replace("|*" ,'",box_size=2)}}">')
				
			# 	value["commitment_content"] = render_template_string(comm)
			# 	return value["commitment_content"]
			# 	return comm
			# else :
			# 	value["commitment_content"] = None	
			if comm :
				comm = comm.replace("*|" ,'<div class="cm-qrcode" data-qrcode="')
				comm = comm.replace("|*" ,'"> </div>')
				value["commitment_content"] = render_template_string(comm)
			else :
				value["commitment_content"] = None				

	if data_for_print :
		qr_code = 1
		static_links  = []			
		if int(static_qr_code) == 1:
				# static_links.append({'name':'Conference Website','link':'https://boaeyeadvance2023.com'})
				# static_links.append({'name':'Download App','link':'https://boaeyeadvance2023.com/mobile-app'})
				# static_links.append({'name':'Scientific Program','link':'https://conference.numerotech.com/static/boa23/program_book.pdf'})
				# static_links.append({'name':'Download Certificate','link':'https://certificates.boaeyeadvance2023.com/18/boa23'})
				static_links.append({'name':'Scientific Program','link':'https://delegateapp.s3.ap-southeast-1.amazonaws.com/phacoref_sci_program.pdf'})
				static_links.append({'name':'Attendance Certificate','link':'https://phacorefcertificates.numerotech.com/22/phacoref23'})
		
		# return render_template('badge/delegate_badge_print.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,conf_id =conf_id,static_links= static_links)
		
		
		# return render_template('badge/delegate_badge_print_barcode.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,conf_id)
		# delegate_badge_print_qronly
		
		return render_template('badge/delegate_badge_print_frontback_same_content.html',int=int,len=len, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,conf_id=conf_id,static_links=static_links,badge_size=badge_size)
		# return render_template('badge/delegate_badge_print_qronly_vrsi22.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment)
	else :
		flash("record not exists.", "errorMsg")
		return redirect(url_for('badge.DelegateBatch' , conf_id= conf_id,conf_key =conf_key))
		
# Photo badge start
@app.route('/<int:conf_id>/<conf_key>/delegate_batch_print_with_photo', methods = ["GET","POST"])
def DelegateBatchPrintWithPhoto(conf_id,conf_key):
	if session.get('badge'):
		del_nos_array = []
		dic_name      = {}
		delegate_no = request.values.get("delegate_no") or 0
		badge_user  = session.get('badge')
		conf_id     = badge_user["conf_id"]
		conf_key    = badge_user["conf_key"]
		del_table_name = badge_user["del_table_name"]

		role = request.values.get("role")  or None
		counter             = None
		batch               = None

		del_no_from         = delegate_no
		del_no_to           = delegate_no
		qr_code             = 0
		static_qr_code      = 0
		print_center        = 1
		is_commitment       = None
		Delegate_badge_type =  "Delegate Badge"
		
		print_both_side = request.values.get("print_both_side") or 'Yes'

		# return "testing"
		
		badge_size      = BadgeModel().Get_badge_size(conf_id,Delegate_badge_type)
		if del_no_from and "," in del_no_from :
			del_nos     = del_no_from  
			data_for_print  = BadgeModel().dataForBadgePrintDelNos(conf_id,role,counter,batch,del_nos,del_table_name,is_kit=1)
		else :
			data_for_print  = BadgeModel().dataForBadgePrint(conf_id,role,counter,batch,del_no_from,del_no_to,del_table_name,is_commitment)
		if data_for_print :
# 			return "please wait---"
			for index,value in enumerate(data_for_print) :
				del_no                  = value["delegate_no"]
				dic_name["delegate_no"] = del_no
				del_nos_array.append(dic_name["delegate_no"])
				value['base64code'] = ''
				if value['email']:
					value['base64code'] = Helper.base64encode(value['email'])    
				elif value['mobile']:
					value['base64code'] = Helper.base64encode(value['mobile'])    
					
				#for commmtment
				comm = value["commitment_content"]
				if comm :
					comm = comm.replace("*|" ,'<div class="cm-qrcode" data-qrcode="')
					comm = comm.replace("|*" ,'"> </div>')
					value["commitment_content"] = render_template_string(comm)
				else :
					value["commitment_content"] = None
		static_links  = []			

		if data_for_print :
			print(badge_size)
			if conf_id in [40,36,45,55,8] :
				# .html
				return render_template('badge/delegate_badge_print_biff24.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center ,str=str ,badge_size=badge_size,len=len) 

				# return render_template('badge/barcode_download_with_photo.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center ,str=str ,badge_size=badge_size,len=len) 
				# return render_template('badge/delegate_badge_print_barcode.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center)
			
			if role and  role in ["TRADE","VOLUNTEER","AV - TEAM" , "SUPPORT - IT","EXHIBITOR","BANQUET - DAY 1","BANQUET - DAY 2"]:
				# delegate_badge_print_qronly_orgcomm.html , sztnaoi delegate_badge_print_qronly.html,delegate_badge_print_sztnaoi23.html,delegate_badge_print_phacof23
				return render_template('badge/delegate_badge_print_qronly.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
			else :
				   return render_template('badge/delegate_badge_print_qronly.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,badge_size=badge_size,len =len)
		
			return render_template('badge/delegate_badge_print_qronly.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,print_center=print_center,conf_id=conf_id,static_links=static_links,len =len)
		else :
			flash("record not exists.", "errorMsg")
			return redirect(url_for('badge.DelegateBatch' , conf_id= conf_id,conf_key =conf_key))
	else :
		flash("Invalid login" ,"errorMsg")	
		return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id ,conf_key = conf_key))	

# End		
		


###### exhibitor reg start
@app.route('/<int:conf_id>/<conf_key>/exhibitor_batch_print_from_reg', methods = ["GET","POST"])
def ExhibitorBatchPrintFromReg(conf_id,conf_key):
	static_qr_code =1
	now         = datetime.now()
	curr_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
	del_nos_array = []
	dic_name      = {}
	role = request.values.get("role")  or None
	counter    = request.values.get("counter") or None
	batch      = request.values.get("batch") or None
	is_kit     = request.values.get("is_kit") or 1 # this line added  by ganesan on Nov 21 2022

	del_nos = request.values.get("del_nos") or None
	qr_code     = request.values.get("qr_code") or 0
	is_commitment = request.values.get("is_commitment") or 1
	is_exhibitor = request.values.get("is_exhibitor") or 0
	is_commitment = int(is_commitment)
	if is_exhibitor :
		is_exhibitor = int(is_exhibitor)
		# updateExhibitor
		

	print_both_side = request.values.get("print_both_side") or 'Yes'
	# del_table_name  = request.values.get("del_table_name") or None

	get_conf  = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf :
		del_table_name  = get_conf["del_table_name"]
		kc_del_sess_tab = get_conf["kc_del_session_table_name"]
		fc_del_sess_tab = get_conf["fc_del_session_table_name"]
		if is_exhibitor and is_exhibitor > 0 : 
			pass
			update_stmt = "update " + del_table_name + " set is_exhibitor = 1 , updated_at = '"+curr_dt+"' where delegate_no = " + str(del_nos) + " ;" 
			BadgeModel().updateExhibitor(update_stmt)

		# return (kc_del_sess_tab + fc_del_sess_tab)
		# call usp_delegate_session_map(9,5001,'kc_sessions','kc_delegates_sessions_irc22' );	
		if is_kit and int(is_kit)  > 0 :
			session_table = "kc_sessions"
			del_ses_table = kc_del_sess_tab
		else : 
			session_table = "fc_sessions"
			del_ses_table = fc_del_sess_tab
			
		del_id_int = int(del_nos)
		# insert_session = BadgeModel().sessionMap(conf_id,del_id_int,session_table,del_ses_table)
	data_for_print  = BadgeModel().dataForBadgePrintDelNos(conf_id,role,counter,batch,del_nos,del_table_name,is_kit)
	if data_for_print :
		for index,value in enumerate(data_for_print) :
			del_no                  = value["delegate_no"]
			dic_name["delegate_no"] = del_no
			del_nos_array.append(dic_name["delegate_no"])

	if data_for_print :
		qr_code = 0
		static_links  = []			
		if int(static_qr_code) == 1:
				static_links.append({'name':'Conference Website','link':'https://boaeyeadvance2023.com'})
				static_links.append({'name':'Download App','link':'https://boaeyeadvance2023.com/mobile-app'})
				static_links.append({'name':'Scientific Program','link':'https://conference.numerotech.com/static/boa23/program_book.pdf'})
				static_links.append({'name':'Download Certificate','link':'https://certificates.boaeyeadvance2023.com/18/boa23'})
		return render_template('badge/delegate_badge_print.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,conf_id =conf_id,static_links= static_links)
		#return render_template('badge/delegate_badge_print_barcode.html',int=int, data_for_print =data_for_print,del_nos_array=del_nos_array ,qr_code=qr_code,print_both_side=print_both_side,is_commitment=is_commitment,conf_id)
	else :
		flash("record not exists.", "errorMsg")
		return redirect(url_for('badge.DelegateBatch' , conf_id= conf_id,conf_key =conf_key))


##### exhibitor reg end

@app.route('/<int:conf_id>/<conf_key>/empty_badge', methods = ["GET","POST"])
def EmptyBatch(conf_id,conf_key):
	try:
		if session.get('badge'):
			badge_user  = session.get('badge')
			conf_name   = badge_user["conf_name"]
			return render_template('badge/empty_badge.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))
	except Exception as e:
		raise e
		flash(str(e) ,"errorMsg")
	

@app.route('/<int:conf_id>/<conf_key>/empty_badge_print', methods = ["POST"])
def EmptyBatchPrint(conf_id,conf_key):
	try:
		del_nos_array = []
		dic_name      = {}
		print_both_side = 'Yes'
		
		badge_user   = 	request.values.get("badge_user") or None
		role   =  request.values.get("role") or None
		company_name =  request.values.get("company_name") or None
		region 		 =  request.values.get("region") or None
		del_no_from  =  request.values.get("del_no_from") or None
		del_no_to    =  request.values.get("del_no_to") or None
		qr_code      =  request.values.get("qr_code") or None
		del_no_prefix=  request.values.get("del_no_prefix") or  None
		is_food_coupon =  request.values.get("is_food_coupon") or  0
		Delegate_badge_type      = request.values.get("badge_type") or None
		badge_size      = BadgeModel().Get_badge_size(conf_id,Delegate_badge_type)

		data = {'badge_user' : badge_user,'role' : role,'company_name':company_name ,'region' : region,'del_no_from':del_no_from,'del_no_to':del_no_to}


		dic_name["del_no_from"]  = del_no_from
		del_no_from              = int(del_no_from)
		dic_name["del_no_to"]    = del_no_to
		del_no_to                = int(del_no_to)
		del_no_to                = del_no_to + 1
		for del_no in range(del_no_from,del_no_to):
			del_nos_array.append(del_no)
# 		return str(del_nos_array)
		if is_food_coupon and int(is_food_coupon) > 0 :
			return render_template('badge/empty_badge_print_smallsize_barcode.html' ,conf_id = conf_id, conf_key = conf_key, data = data,del_nos_array = del_nos_array,print_both_side=print_both_side)
		else :
			return render_template('badge/empty_badge_print_qronly.html' ,conf_id = conf_id, conf_key = conf_key, data = data,del_nos_array = del_nos_array,print_both_side=print_both_side,badge_size=badge_size)
			# return render_template('badge/empty_badge_print.html' ,conf_id = conf_id, conf_key = conf_key, data = data,del_nos_array = del_nos_array,print_both_side=print_both_side)

	except Exception as e:

		flash(str(e) ,"errorMsg")
		return redirect(url_for('badge.EmptyBatch',conf_id=conf_id ,conf_key = conf_key))

	

@app.route('/<int:conf_id>/<conf_key>/delegate_list', methods = ["GET","POST"])
def DelegateList(conf_id,conf_key):
	if session.get('badge'):
		badge_user     = session.get('badge')
		conf_id        = badge_user["conf_id"]
		conf_name      = badge_user["conf_name"]
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf  :
			del_table_name = get_conf["del_table_name"]
			get_batch_counter_role =BadgeModel().GetBatchCounterRole(conf_id,del_table_name)
			for index,value in enumerate(get_batch_counter_role) :
				if index == 0 :
					batch_data    = value
				if index == 1 :
					counter_data  = value  
				if index == 2 :
					role_data     = value  	

			return render_template('badge/delegate_list.html' ,conf_id=  conf_id, conf_key =conf_key,batch_data = batch_data,counter_data = counter_data,role_data = role_data,conf_name=conf_name )			
		else :
			flash("Invalid login" ,"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('/delegate_list_print', methods = ["GET","POST"])
def DelegateListPirnt():
	conf_id    = request.values.get("conf_id") or None
	conf_key   = request.values.get("conf_key") or None
	if session.get('badge'):
		count_per_set = 25
		# count_per_set = 10
		del_no_from = None
		del_no_to   = None

		badge_user = session.get('badge')
		conf_id    = request.values.get("conf_id") or None
		conf_id    = int(conf_id) if conf_id else conf_id
		conf_key   = request.values.get("conf_key") or None

		role = request.values.get("role")  or None
		counter    = request.values.get("counter") or None
		batch      = request.values.get("batch") or None

		print_title    = request.values.get("print_title") or None
		attendance_col = request.values.get("attendance_col") or None
		
		del_no_from  =  request.values.get("del_no_from") or None
		del_no_to    =  request.values.get("del_no_to") or None
		'''
		if del_no_from :
			del_no_from = int(del_no_from)
		if del_no_to :
			del_no_to  = int(del_no_to)
		'''	
			
		
		total_conf_days = 1 # this is generally conference 3 days only
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf  :
			del_table_name = get_conf["del_table_name"]
			
		# start dec 1,2023
		if del_no_from and "," in del_no_from :
			del_nos     = del_no_from  
			data_for_print  = BadgeModel().dataForBadgePrintDelNos(conf_id,role,counter,batch,del_nos,del_table_name,is_kit=1)
		else :
			is_commitment   = None
			data_for_print  = BadgeModel().dataForBadgePrint(conf_id,role,counter,batch,del_no_from,del_no_to,del_table_name,is_commitment)
		
		
		# end
		# data_for_print = BadgeModel().dataForBadgePrint(conf_id,role,counter,batch,del_no_from,del_no_to,del_table_name)
		# total_records  = len(data_for_print)

		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			conf_start_time = get_conf["conf_start_time"]
			conf_end_time   = get_conf["conf_end_time"]

			start_date      = conf_start_time.date()
			end_date        = conf_end_time.date()

			delta = end_date - start_date
			total_conf_days = delta.days+1
			if attendance_col : 
				if "One" in attendance_col :
					total_conf_days = 1
				else :
					pass	
			else :
				total_conf_days	= 1

		
		list_of_dict = []
		i = 0
		if data_for_print :
			total_records = len(data_for_print)
			s = data_for_print 
			a = [s[count_per_set*i:count_per_set*i+count_per_set] for i in range(0,math.ceil(len(s)/count_per_set))]	
			if role and role in ["Trade Delegate" , "Crew","Volunteer" ,"Associate Delegate"] :
				return render_template('badge/delegate_list_print_not_delegates.html',conf_id=conf_id, conf_key =conf_key,data_for_print = a ,total_conf_days=total_conf_days,print_title=print_title)			
			else :
				return render_template('badge/delegate_list_print.html',conf_id=conf_id, conf_key =conf_key,data_for_print = a ,total_conf_days=total_conf_days,print_title=print_title)			
		else :
			flash("Delegate records not exists", "errorMsg")
			return redirect(url_for('badge.DelegateList' , conf_id= conf_id,conf_key = conf_key))
	else :
		flash("Sessin Expired", "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))




@app.route('/<int:conf_id>/<conf_key>/empty_list', methods = ["GET","POST"])
def EmptyList(conf_id,conf_key):
	if session.get('badge'):
		badge_user = session.get('badge')
		conf_id    = badge_user["conf_id"]
		conf_name  = badge_user["conf_name"]
		return render_template('badge/empty_list.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>/badge_print_settings', methods = ["GET","POST"])
def BadgePrintSettings(conf_id,conf_key):
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	return render_template('badge/badge_print_settings.html' ,conf_id=  conf_id, conf_key =conf_key,conf_data = get_conf)	


# @app.route('/<int:conf_id>/<conf_key>/badge_print_settings_table', methods = ["GET","POST"])
# def BadgePrintSettingsTable(conf_id,conf_key):
# 	role        = request.values.get("role")
# 	city        = request.values.get("city")
# 	state       = request.values.get("state")
# 	counter     = request.values.get("counter")
# 	counter_set = request.values.get("counter_set")
# 	data = {'role':role, 'city':city ,'state':state ,'counter':counter ,'counter_set':counter_set}
# 	return render_template('badge/badge_print_settings_table.html' ,conf_id=  conf_id, conf_key =conf_key,data=data)	

###### 
@app.route('/<int:conf_id>/<conf_key>/session_map', methods = ["GET","POST"])
def SessionMap(conf_id,conf_key):
	if session.get('badge'):
		badge_user = session.get('badge')
		conf_id    = badge_user["conf_id"]
		conf_name  = badge_user["conf_name"]
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf  :
			del_table_name = get_conf["del_table_name"]
			get_batch_counter_role =BadgeModel().GetBatchCounterRole(conf_id,del_table_name)
			for index,value in enumerate(get_batch_counter_role) :
				if index == 0 :
					batch_data    = value
				if index == 1 :
					counter_data  = value  
				if index == 2 :
					role_data     = value  	

			return render_template('badge/session_map.html' ,conf_id=  conf_id, conf_key =conf_key,batch_data = batch_data,counter_data = counter_data,role_data = role_data,conf_name=conf_name )			
		else :
			flash("Invalid login" ,"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('/post_session_map', methods = ["GET","POST"])
def PostSessionMap():
	conf_id    = request.values.get("conf_id")
	conf_key   = request.values.get("conf_key")
	session_id = request.values.get("session_id")

	roles = request.form.getlist("role")
	# check already session map if already mapped return with flash message
	# else get all delegate number using role with in query
	# step 2 : 
	# generate insert query and execute the query with session_id,delegate_number in delegates_sessions_table

	if roles :
		for role in roles :
			pass
	# data = {'role':role, 'city':city ,'state':state ,'counter':counter ,'counter_set':counter_set}
	return render_template('badge/badge_print_settings_table.html' ,conf_id=  conf_id, conf_key =conf_key,data=data)
	
# empty records min and max start


@app.route('/<int:conf_id>/<conf_key>/get_delgate_numbers_by_role', methods = ["GET","POST"])
def GetDelegateNumbersByRole(conf_id,conf_key):
	role_max_value = 0
	role_min_value = 0
	try:
		role           = request.values.get("role") or None
		del_table_name = request.values.get("del_table_name") or None
		role_min_max_value = BadgeModel().GetDelMaxNumberMinNumber(del_table_name,role,conf_id)

		if role_min_max_value :
			role_max_value = role_min_max_value['max_del_num']
			role_min_value = role_min_max_value['min_del_num']
			data = { "role_max_value":role_max_value,"role_min_value":role_min_value,"msg" : "" ,"status" : 1}
			return json.dumps(data,default=str)
		else:
			data = {"role_max_value":role_max_value,"role_min_value" : role_min_value ,"msg" : "Record(s) does not exists." ,"status" : 2}
			return json.dumps(data,default=str)

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

@app.route('/<int:conf_id>/<conf_key>/empty_records', methods = ["GET","POST"])
def EmptyRecords(conf_id,conf_key):
	if session.get('badge'):
		image_url  = None
		file_name  = None
		file_path  = None
		bs_id      = 0
		badge_user = session.get('badge')
		conf_id    = badge_user["conf_id"]
		conf_name  = badge_user["conf_name"]
		getConfData = BadgeModel().GetConf(conf_id,conf_key)
		if getConfData :
			del_table_name = getConfData["del_table_name"]
			get_role_data  = BadgeModel().getRole(conf_id)
			badge_setting_data = BadgeModel().getfilename_and_path(conf_id)
			if badge_setting_data :
				file_name      = badge_setting_data["file_name"]
				file_path      = badge_setting_data["file_path"]
				bs_id          = badge_setting_data["bs_id"]

			if file_name and file_path :
				image_url    = file_path+"/"+file_name

			return render_template('badge/empty_records.html',bs_id=bs_id,del_table_name=del_table_name ,conf_id=conf_id ,conf_key=conf_key, b_role=get_role_data,conf_name=conf_name,image_url=image_url)
		else :
			flash("Invalid login" ,"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('/post_empty_records', methods = ["GET","POST"])
def PostEmptyRecords():
	insert_stmt = ""
	count       = 0
	role_min_value = 0
	role_max_value = 0
	if request.method == "POST":
		del_table_name = request.form['del_table_name']
		del_no_from    = request.form['del_no_from']
		del_no_to      = request.form['del_no_to']
		full_name      = request.form['full_name']
		role           = request.form['role']
		conf_id        = request.form['conf_id']
		conf_key       = request.form['conf_key']

		del_no_from  = int(del_no_from) if del_no_from else del_no_from
		del_no_to    = int(del_no_to)   if del_no_to else del_no_to
		if del_no_to < del_no_from :
			flash("Please enter valid delegate number to insert. 'To' delegate number must be greater than 'From' delegate number" ,"errorMsg")
			return redirect (url_for('badge.EmptyRecords',conf_id=conf_id ,conf_key=conf_key))

		already_exists_data = BadgeModel().get_delegate_already_exists(del_table_name,del_no_from,del_no_to,conf_id)
		if already_exists_data:
			# role_max_value = already_exists_data['max_del_num']
			# role_min_value = already_exists_data['min_del_num']
			# msg  = "Already existing minumum delegate number :" + str(role_min_value) + " and maximum delegate number is " + str( role_max_value) + " for role ("+role+ ") .<br/> Your are entered delegate number from " + str(del_no_from) + "  to " + str(del_no_to)+". "

			errormsg = "Delegate number "+str(del_no_from)+" to "+str(del_no_to) + " Records already exists";
			flash(errormsg ,"errorMsg")
			return redirect (url_for('badge.EmptyRecords',conf_id=conf_id ,conf_key=conf_key))
		else:
			if full_name:
				for i in range(del_no_from,del_no_to+1):
					insert_stmt= "insert into "+del_table_name+"(delegate_no,conf_id,full_name,role) values("+str(i)+","+str(conf_id) +",'" +str(full_name)+"','"+str(role)+"');"
					# insert_stmt= "insert into "+del_table_name+"(delegate_no,full_name,role) values("+str(i)+",'"+str(full_name)+"','"+str(role)+"');"
					count=count+1
					insert_records = BadgeModel().insertEmptyRecords(insert_stmt)
			else:
				for i in range(del_no_from,del_no_to+1):
					# insert_stmt= "insert into "+del_table_name+"(delegate_no,role) values("+str(i)+",'"+str(role)+"');"
					insert_stmt= "insert into "+del_table_name+"(delegate_no,conf_id,role) values("+str(i)+","+str(conf_id) +",'" +str(role)+"');"
					count=count+1
					insert_records = BadgeModel().insertEmptyRecords(insert_stmt)
			
			if insert_records=="success":
				msg = count 
				flash(str(msg)  +"  Records Inserted succesfully "  ,"successMsg")
				return redirect (url_for('badge.EmptyRecords',conf_id=conf_id ,conf_key=conf_key,del_table_name=del_table_name))
			else:
				msg = insert_records
				flash(msg ,"errorMsg")
				return redirect (url_for('badge.EmptyRecords',conf_id=conf_id ,conf_key=conf_key,del_table_name=del_table_name))

# empty records min and max start

@app.route('/empty_list_print', methods = ["GET","POST"])
def EmptyListPirnt():
	if session.get('badge'):
		count_per_set   = 25
		total_conf_days = 1 
		data_for_print  = []
		del_nos         = {}

		badge_user      = session.get('badge')
		conf_id         = request.values.get("conf_id") or None
		conf_key        = request.values.get("conf_key") or None
		conf_id         = int(conf_id) if conf_id else conf_id

		role            = request.form['role']
		del_no_from     = request.form['del_no_from']
		del_no_to       = request.form['del_no_to']

		count_per_set   = request.form['count_per_set'] or 25
		attendance_col  = request.form['attendance_col'] 
		print_title     = request.form['print_title'] or None
		
		del_no_from = int(del_no_from)
		del_no_to   = int(del_no_to)
		if count_per_set :
			count_per_set = int(count_per_set)
		
		if role :
			role = role.upper()	

		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			conf_start_time = get_conf["conf_start_time"]
			conf_end_time   = get_conf["conf_end_time"]
			if not print_title : 
				print_title = get_conf["conf_name"]

			start_date      = conf_start_time.date()
			end_date        = conf_end_time.date()

			delta = end_date - start_date
			total_conf_days = delta.days+1
			if attendance_col : 
				if "One" in attendance_col :
					total_conf_days = 1
				else :
					pass	
			else :
				total_conf_days	= 1
				
		# code updagted by Ganesan on Nov 18 2022
		for row in range(del_no_from ,del_no_to + 1):
			# print(row)
			del_nos['delegate_no'] = row # added new key on empty dict 
			del_nos['role']        = role
			data_for_print.append(del_nos)  # add a new dict on list
			del_nos = {}

		s = data_for_print 
		a = [s[count_per_set*i:count_per_set*i+count_per_set] for i in range(0,math.ceil(len(s)/count_per_set))]
		#### end
		return render_template('badge/empty_list_print.html' ,conf_id=  conf_id, conf_key =conf_key,del_no_from=del_no_from,del_no_to=del_no_to,role=role,data_for_print= a,total_conf_days=total_conf_days,print_title=print_title)			
	else :
		flash("Delegate records not exists", "errorMsg")
		return redirect(url_for('badge.BadgeLogin' , conf_id= conf_id,conf_key = conf_key))	
		

# Dec 05 ,2022 

# Role option start - ----------------------------------- ------------------
@app.route('/<int:conf_id>/<conf_key>/role_index', methods = ["GET", "POST"])
def RoleIndex(conf_id,conf_key):
	if session.get('badge'):
		badge_user = session.get('badge')
		conf_id    = badge_user["conf_id"]
		conf_name  = badge_user["conf_name"]
		get_role_data =	BadgeModel().getRole(conf_id)
		return render_template('badge/role_index.html',conf_id= conf_id, conf_key =conf_key,data=get_role_data,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('/edit_role/<int:b_role_id>',methods = ["GET","POST"])
def EditRole(b_role_id):
	output = BadgeModel().getRole(conf_id) 
	return render_template('badge/role_index.html',data=output)

@app.route('/post_edit_record',methods = ["GET","POST"])
def PostEditRecord():
	if request.method == "POST":
		now         = datetime.now()
		curr_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
		conf_id     = request.form["conf_id"]
		conf_key    = request.form["conf_key"]
		b_role_id   = request.form["b_role_id"]
		role        = request.form["role"]
		# role = role.upper() if role else role

		data = {'b_role' : role,'updated_at' : curr_dt}
		output = BadgeModel().updateBadgeRole(b_role_id,data)
		if output == "success":
			flash("Updated !","successMsg")
			return redirect( url_for('badge.RoleIndex',conf_id=conf_id,conf_key=conf_key))
		else:
			return redirect (url_for('badge.EditRole'))

@app.route('/<int:conf_id>/<conf_key>/delete_role/<int:b_role_id>' ,methods = ["GET","POST"])
def DeleteRole(b_role_id,conf_key,conf_id):
	output = BadgeModel().deleteBadgeRole(b_role_id) 
	flash(' Data  Deleted ! ',"successMsg" )
	return redirect (url_for('badge.RoleIndex',conf_id=conf_id,conf_key=conf_key))

@app.route('/<int:conf_id>/<conf_key>/add_role',methods = ["GET","POST"])
def AddRole(conf_key,conf_id):
	return render_template('badge/role_index.html',conf_id=conf_id,conf_key=conf_key)

@app.route('/post_add_role',methods = ["GET","POST"])
def PostAddRole():
	if request.method == "POST":
		now         = datetime.now()
		curr_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
		role        = request.form["role"]
		conf_id     = request.form["conf_id"]
		conf_key    = request.form["conf_key"]
		# role = role.upper() if role else role

		data = {'b_role': role,'conf_id': conf_id,'created_at' : curr_dt}
		insert_role = BadgeModel().insertBadgeRole(data)
		flash("Role Added !","successMsg")
		return redirect( url_for('badge.RoleIndex',conf_id=conf_id,conf_key=conf_key))
# Role option end ------------------ ------------------	

#Dec 23, 2022 Siva Session Map
#FcSessionMapping 
@app.route('/<int:conf_id>/<conf_key>/fc_session_map',methods = ["GET","POST"])
def FCSessionMap(conf_id,conf_key):
	getConfData = BadgeModel().GetConf(conf_id,conf_key)
	if getConfData :
		del_table_name = getConfData["del_table_name"]
		
		get_role_data = BadgeModel().get_role_count(conf_id,del_table_name)	
		session_data  = FoodSessionModel().getFCBOSessionData(conf_id,conf_key)
		return render_template('badge/fc_session_map_screen_new.html',session_data=session_data,role_data=get_role_data,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('/fc_post_session_map', methods = ["GET", "POST"])
def FCPostSeessionMap():
	now = datetime.now()
	current_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
	role         = request.values.getlist('role')
	role         = (",".join(role))
	session_id   = request.form['session_id']
	conf_id      = request.form['conf_id']
	conf_key     = request.form['conf_key']
	getConfData = BadgeModel().GetConf(conf_id,conf_key)
	if getConfData :
		del_table_name = getConfData["del_table_name"]
		fc_del_session_table_name = getConfData["fc_del_session_table_name"]
		#usp_insert_delegate_sessions_map`(in_role ,in_session_id ,del_table_name ,in_del_session_table  )
		session_map = BadgeModel().usp_delegates_session_map(role,session_id,del_table_name,fc_del_session_table_name)
		if session_map :
			session_map  = session_map[0]
			total_count  = session_map["total_count"]
			session_id   = session_map["session_id"] 

			success_msg = "Session  succesfully mapped. Total existing count is " +  str(total_count)

			flash(success_msg ,"successMsg")
			return redirect (url_for('badge.FCSessionMap',conf_id=conf_id ,conf_key=conf_key))
		else:
			flash("Error Try again." ,"errorMsg")
			return redirect (url_for('badge.FCSessionMap',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('/delete_fcsessiondata' ,methods = ["GET","POST"])
def DeleteFcSessionData():
	conf_id       = request.values.get('conf_id')
	conf_key      = request.values.get('conf_key')
	role          = request.values.getlist('role')
	role          = (",".join(role))
	session_id    = request.values.get('session_id')
	getConfData = BadgeModel().GetConf(conf_id,conf_key)
	if getConfData :
		del_table_name = getConfData["del_table_name"]
		fc_del_session_table_name = getConfData["fc_del_session_table_name"]
		output        = BadgeModel().delete_sessiondata(role,session_id,del_table_name,fc_del_session_table_name)
		get_role_data = BadgeModel().get_role_count(conf_id,del_table_name)	
		session_data  = FoodSessionModel().getFCBOSessionData(conf_id,conf_key) 
		html_data     = render_template('badge/fc_session_map_screen_new.html',session_data=session_data,role_data=get_role_data,conf_id=conf_id,conf_key=conf_key)
		data = {"html_data" : html_data ,"status" : 1 , "msg" : "success"}
		return json.dumps(data)	
	else : 
		flash("Invalid URL" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))

#Dec 23, 2022 Siva Session Map
#kcSessionMapping 
@app.route('/<int:conf_id>/<conf_key>/kc_session_map',methods = ["GET","POST"])
def KCSessionMap(conf_id,conf_key):
	getConfData = BadgeModel().GetConf(conf_id,conf_key)
	if getConfData :
		del_table_name = getConfData["del_table_name"]
		
		get_role_data = BadgeModel().get_role_count(conf_id,del_table_name)	
		session_data  = KitSessionModel().getSessionData(conf_id,conf_key)
		return render_template('badge/kc_session_map_screen_new.html',session_data=session_data,role_data=get_role_data,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('/kc_post_session_map', methods = ["GET", "POST"])
def KCPostSeessionMap():
	now = datetime.now()
	current_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
	role         = request.values.getlist('role')
	role         = (",".join(role))
	session_id   = request.form['session_id']
	conf_id      = request.form['conf_id']
	conf_key     = request.form['conf_key']
	getConfData = BadgeModel().GetConf(conf_id,conf_key)
	if getConfData :
		del_table_name = getConfData["del_table_name"]
		kc_del_session_table_name = getConfData["kc_del_session_table_name"]
		#usp_insert_delegate_sessions_map`(in_role ,in_session_id ,del_table_name ,in_del_session_table  )
		session_map = BadgeModel().usp_delegates_session_map_kc(role,session_id,del_table_name,kc_del_session_table_name)
		if session_map :
			session_map  = session_map[0]
			total_count  = session_map["total_count"]
			session_id   = session_map["session_id"] 

			success_msg = "Session  succesfully mapped. Total existing count is " +  str(total_count)

			flash(success_msg ,"successMsg")
			return redirect (url_for('badge.KCSessionMap',conf_id=conf_id ,conf_key=conf_key))
		else:
			flash("Error Try again." ,"errorMsg")
			return redirect (url_for('badge.KCSessionMap',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('/delete_kcsessiondata' ,methods = ["GET","POST"])
def DeleteKcSessionData():
	conf_id       = request.values.get('conf_id')
	conf_key      = request.values.get('conf_key')
	role          = request.values.getlist('role')
	role          = (",".join(role))
	session_id    = request.values.get('session_id')
	getConfData   = BadgeModel().GetConf(conf_id,conf_key)
	if getConfData :
		del_table_name            = getConfData["del_table_name"]
		kc_del_session_table_name = getConfData["kc_del_session_table_name"]
		output        = BadgeModel().delete_sessiondata(role,session_id,del_table_name,kc_del_session_table_name)
		get_role_data = BadgeModel().get_role_count(conf_id,del_table_name)	
		session_data  = KitSessionModel().getSessionData(conf_id,conf_key) 
		html_data     = render_template('badge/kc_session_map_screen_new.html',session_data=session_data,role_data=get_role_data,conf_id=conf_id,conf_key=conf_key)
		data = {"html_data" : html_data ,"status" : 1 , "msg" : "success"}
		return json.dumps(data)
	else : 
		flash("Invalid URL" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))

# start badge adjestment setting module #santhosh
@app.route('/<int:conf_id>/<conf_key>/badge_setting_index' ,methods = ["GET","POST"])
def BadgeSettingIndex(conf_id,conf_key):
	if session.get('badge'):
		badge_user     = session.get('badge')
		conf_name      = badge_user["conf_name"]
		badge_adjest_data = BadgeModel().badgeSettingsData(conf_id)
		return render_template('badge/badge_setting_index.html',conf_id=conf_id,conf_key=conf_key,adjest_data=badge_adjest_data,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>/add_badge' ,methods = ["GET","POST"])
def AddBadge(conf_key,conf_id):
	try:
		html_data =  render_template('badge/add_badge_setting.html',conf_id=conf_id,conf_key=conf_key)
		data = {"html_data" : html_data,"msg" : "" , "status" :1 }
		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>/postadd_badge_setting' ,methods = ["GET","POST"])
def PostAddBadgeSetting(conf_id,conf_key):
	try:
		now = datetime.now()
		current_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
		conf_id             = request.values.get('conf_id') or None
		conf_key            = request.values.get('conf_key') or None
		badge_type          = request.values.get('badge_type') or None
		name_font_size      = request.values.get('name_font_size') or None
		role_font_size      = request.values.get('role_font_size') or None
		display_no_size     = request.values.get('display_no_size') or None
		padding_top         = request.values.get('padding_top') or None
		qr_code_size        = request.values.get('qr_code_size') or None
		qr_code_margin_left = request.values.get('qr_code_margin_left') or None
		qr_code_margin_top  = request.values.get('qr_code_margin_top') or None
		
		data_for_save = {
					'conf_id'            : conf_id,
					'badge_type'         : badge_type,
					'name_font_size'     : name_font_size,
					'role_font_size'     : role_font_size,
					'display_no_size'    : display_no_size,
					'padding_top'        : padding_top,
					'qr_code_size'        : qr_code_size,
					'qr_code_margin_left' : qr_code_margin_left,
					'qr_code_margin_top'  : qr_code_margin_top
				}
		badge_data = BadgeModel().Get_badge_size(conf_id,badge_type)

		if badge_data:
			data_for_save["updated_at"] = current_dt
			bs_id              = badge_data["bs_id"]
			update_badge       = BadgeModel().update_badge_data(bs_id,conf_id,data_for_save)
			html_data    	   = render_template('badge/add_badge_setting.html',conf_id=conf_id,conf_key=conf_key)
			
			if update_badge == "success" :
				data = {"html_data" : html_data,"msg" : "Successfully updated" , "status" :1 }
			else : 
				data = {"html_data" : "","msg" : update_badge , "status" :2 }
			
		else:
			data_for_save["created_at"] = current_dt
			insert_badge = BadgeModel().insert_badge_data(data_for_save)
			html_data    = render_template('badge/add_badge_setting.html',conf_id=conf_id,conf_key=conf_key)
			if insert_badge == "success" :
				data = {"html_data" : html_data,"msg" : "Successfully inserted" , "status" :1 }
			else : 
				data = {"html_data" : "","msg" : insert_badge , "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>/delete_badge/<int:bs_id>' ,methods = ["GET","POST"])
def DeleteBadge(bs_id,conf_key,conf_id):
	output = BadgeModel().deleteBadgeSize(bs_id,conf_id) 
	flash(' Data  Deleted ! ',"successMsg" )
	return redirect (url_for('badge.BadgeSettingIndex',conf_id=conf_id,conf_key=conf_key))

@app.route('/<int:conf_id>/<conf_key>/edit_badge/<int:bs_id>' ,methods = ["GET","POST"])
def EditBadge(bs_id,conf_key,conf_id):
		output = BadgeModel().editBadgeSize(conf_id,bs_id) 
		html_data =  render_template('badge/add_badge_setting.html',conf_id=conf_id,conf_key=conf_key,badge_data = output)
		data = {"html_data" : html_data,"msg" : "" , "status" :1 }
		return json.dumps(data,default = str)

# end badge adjestment setting module
# image upload option using empty_records page start
@app.route('/<int:conf_id>/<conf_key>/badge_printing_del_list_image_upload', methods = ["GET","POST"])
def BadgePrintingDelListImageUpload(conf_id,conf_key):
	now       = datetime.now()
	curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
	img_url   = " "
	file                = request.files['file'] or None
	file_name           = request.form['file_name'] or None
	bs_id               = request.form['bs_id'] or 0
	if file_name:
		split_tup       = os.path.splitext(file_name)
		file_extension  = split_tup[1]
		file_name_str   = conf_key+file_extension
		acl="public-read"
		s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
		try:
			bucket         = 'aws-s3store'
			foldername     = 'conf_app'
			response       = s3.upload_fileobj(file, bucket,foldername+'/'+ file_name_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})

			file_name        = file_name_str
			file_path_for_db = "https://"+bucket+".s3.ap-southeast-1.amazonaws.com/conf_app" 
			img_url          = file_path_for_db+"/"+file_name
			remove_path_name = foldername+"/"+file_name
			
			data_for_update  = {'file_path' :file_path_for_db,'file_name' :file_name,'updated_at':curr_dt}
			save_data        =  BadgeModel().update_file_nameand_path(conf_id,bs_id,data_for_update)


			if "sucess" in save_data :
				print(file_name,"",)
				data = {"file_name":file_name,"file_path" : img_url,'msg' : "Successfully uploaded",'status':1}
			else :
				data = {"file_name":file_name,"file_path" : img_url,'msg' : save_data,'status':2}

			return json.dumps(data,default = str)
		except ClientError as e:
			data_1      = {"file_name":"", "msg": str(e),"status":400}        
			return json.dumps(data_1,default = str)
	else :
		data_1      = {"file_name":"", "msg": "File does not exists.","status":3}        
		return json.dumps(data_1,default = str)	
		
		
		
		
@app.route('/<int:conf_id>/<conf_key>/remove_image_aws', methods = ["GET","POST"])
def RemoveImageAWS(conf_id,conf_key):
	now       = datetime.now()
	curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")


	image_name = request.values.get('image_name') or None
	image_name = image_name.split("?")[0]

	if image_name:
		acl="public-read"
		s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')

		bucket         = 'aws-s3store'
		foldername     = 'conf_app'
		path           = foldername+"/"+image_name
		try:
			response = s3.Object(bucket, path).delete()
			# response = s3.delete_object(Bucket=bucket, Prefix=path)
			print("Object deleted successfully")
		except Exception as e:
			print(f"An error occurred: {str(e)}")
		
		delete_in_db   =  BadgeModel().delete_file_nameand_path(conf_id)

		if delete_in_db == "success" :
			data = {'msg' : "Removed Successfully ",'status':1}
		else :
			data = {'msg' : delete_in_db,'status':2}
		return json.dumps(data,default = str)
	else :
		data_1      = {"msg": "File does not exists.","status":3}        
		return json.dumps(data_1,default = str)	

# image upload option using empty_records page end  

# Ganesan on Sep 20,2023
@app.route('/<int:conf_id>/<conf_key>/get_longest_name_data',methods = [ "GET","POST"])
def GetLongestNameData(conf_id,conf_key):
	html_data = " "
	del_nos   = ""
	try:
		role           = request.values.get("role") or None
		del_table_name = request.values.get("del_table_name") or None
		if del_table_name :
			del_data       = BadgeModel().GetLongestName(del_table_name,role,conf_id)
			if del_data :
				for index,value in enumerate(del_data) :
					del_no  = value["delegate_no"]
					del_nos = del_nos+","+str(del_no)

				x = del_nos.startswith(",")
				if x == True:
					del_nos = del_nos[1:]	

			html_data 	   = render_template("badge/longest_name_table.html" ,del_data = del_data )
			data           = {"html_data" : html_data ,"del_nos" : del_nos, "msg" : "success" ,"status" : 1}	
		else :
			data           = {"html_data" : "" ,"del_nos" : del_nos,"msg" : "Invalid conference Id or conference key" ,"status" :  2}	

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


@app.route('/<int:conf_id>/<conf_key>/get_longest_commetment_data',methods = [ "GET","POST"])
def GetLongestCommetmentData(conf_id,conf_key):
	html_data = " "
	del_nos   = ""
	try:
		role           = request.values.get("role") or None
		print(role)
		del_table_name = request.values.get("del_table_name") or None
		if del_table_name :
			del_data       = BadgeModel().GetLongestCommetment(del_table_name,role,conf_id)
			if del_data :
				for index,value in enumerate(del_data) :
					del_no  = value["delegate_no"]
					del_nos = del_nos+","+str(del_no)

				x = del_nos.startswith(",")
				if x == True:
					del_nos = del_nos[1:]	

			html_data 	   = render_template("badge/longest_commetment_table.html" ,del_data = del_data )
			data           = {"html_data" : html_data ,"del_nos" : del_nos, "msg" : "success" ,"status" : 1}	
		else :
			data           = {"html_data" : "" ,"del_nos" : del_nos,"msg" : "Invalid conference Id or conference key" ,"status" :  2}	

		json_data = json.dumps(data,default =str)
		return json_data
	except Exception as e:
		data      = {"html_data" : "" ,"del_nos" : del_nos,"msg" : str(e) ,"status" :  401}
		json_data = json.dumps(data,default =str)
		return json_data
		
# Food and Kid counter credential start 

@app.route('/<int:conf_id>/<conf_key>/view_mail_credentials', methods = ["GET","POST"])
def ViewMailCredentials(conf_id,conf_key):
	try:
		getConfData = BadgeModel().GetConf(conf_id,conf_key)
		if getConfData :
			conf_name          = getConfData["conf_name"]
			mail_header_logo   = getConfData["mail_header_logo"]
			fc_sessions_data   = FoodSessionModel().getFCBOSessionData(conf_id,conf_key)
			kc_sessions_data   = BadgeUserModel().getkCSessionData(conf_id,conf_key)
			html_data          = render_template('badge_users/email/fc_credentials_mail.html',conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,mail_header_logo=mail_header_logo,fc_sessions_data=fc_sessions_data,kc_sessions_data=kc_sessions_data)
			if fc_sessions_data:
				data = {"html_data":html_data,"msg" : "", "status" : 1}
				return json.dumps(data,default = str)
			else:
				data = {"html_data":html_data,"msg" : "Session not mapped", "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>/send_mail_credentials', methods = ["GET","POST"])
def SendMailCredentials(conf_id,conf_key):
	try:
		getConfData = BadgeModel().GetConf(conf_id,conf_key)
		if getConfData :
			conf_name          = getConfData["conf_name"]
			mail_header_logo   = getConfData["mail_header_logo"]
			from_name          = "Food and Kid counter credentials "
			subject            = conf_name+"- Food and Kid counter credentials"
			mail_ids           = request.values.get('email_id') or None
			
			fc_sessions_data   = FoodSessionModel().getFCBOSessionData(conf_id,conf_key)
			kc_sessions_data   = BadgeUserModel().getkCSessionData(conf_id,conf_key)
			mail_template      = render_template('badge_users/email/fc_credentials_mail.html',conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,mail_header_logo=mail_header_logo,fc_sessions_data=fc_sessions_data,kc_sessions_data=kc_sessions_data)
			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(","))
				try:
					for email in mail_list:
						# email = "santhosh@numerotec.com" this only testing purpose
						EMAIL.MandrillMailFunciton(subject,mail_template,email,from_name,getConfData )
					data = {"html_data":mail_template,"msg" : "Email sent successfully", "status" : 1}
					return json.dumps(data,default = str)
				except Exception as e:
					return str(e)
			else:
				data = {"html_data":"","msg" : "Please enter email", "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>/send_whatsapp_credentials', methods = ["GET","POST"])
def SendWhatsappCredentials(conf_id,conf_key):
	try:
		getConfData = BadgeModel().GetConf(conf_id,conf_key)
		if getConfData :
			conf_name          = getConfData["conf_name"]
			mail_header_logo   = getConfData["mail_header_logo"]
			from_name          = "Food and Kid counter credential "
			subject            = conf_name+" - Food and Kid counter credential"
			
			whatsapp_number    = request.values.get('whatsapp_number') or None
			fc_sessions_data   = FoodSessionModel().getFCBOSessionData(conf_id,conf_key)
			kc_sessions_data   = BadgeUserModel().getkCSessionData(conf_id,conf_key)
			html_data          = render_template('badge_users/email/fc_credentials_mail.html',conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,mail_header_logo=mail_header_logo,fc_sessions_data=fc_sessions_data,kc_sessions_data=kc_sessions_data)
			msg_content        = render_template('badge_users/credential_whatsapp.html',conf_id=conf_id,conf_key=conf_key,conf_name=conf_name,mail_header_logo=mail_header_logo,fc_sessions_data=fc_sessions_data,kc_sessions_data=kc_sessions_data)
			 
			if whatsapp_number:
				# whatsapp_number = "9597494106" testing perpose santhosh whatsapp number
				msg_content = "https://wa.me/91"+str(whatsapp_number)+"?text="+subject+"%0A%0A"+msg_content
				webbrowser.open(msg_content) # to send whatsapp via new tab
				print(whatsapp_number)
				data = {"html_data":html_data,"msg" : "Whatsapp sent successfully", "status" : 1}
				return json.dumps(data,default = str)
		
			else:
				data = {"html_data":html_data,"msg" : "Please enter whatsapp number", "status" : 2}
				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)

# Food and Kid counter credential



# update custom counter set start
@app.route("<int:conf_id>/<conf_key>/Update_custom_counter_set",methods = ["GET", "POST"])
def UpdateCustomCounterSet(conf_id,conf_key):
	try:
		getConfData = BadgeModel().GetConf(conf_id,conf_key)
		if getConfData :
			del_table_name     = getConfData["del_table_name"]
			start_del_number    = request.values.get('start_del_number') or None
			end_del_number     = request.values.get('end_del_number') or None
			batch              = request.values.get('batch') or None
			counter            = request.values.get('counter') or None

			update_stmt = "update " + del_table_name + " set batch ='"+batch+"', counter = "+str(counter)+"  where conf_id = "+str(conf_id)+" and delegate_no between "+str(start_del_number)+" and "+str(end_del_number)+" ;" 
			update_custom_set   = BadgeModel().update_custom_counter_set_data(conf_id,update_stmt)
			
			if update_custom_set:
				data = {"msg" : "Updated successfully", "status" : 1}
				return json.dumps(data,default = str)
			else:
				data = {"msg" : "Updated Failed", "status" : 2}
				return json.dumps(data,default = str)
		else:
			data = {"msg" : "Session invalid", "status" : 3}
	except Exception as e:
		data = {"msg" : str(e) , "status" : 401}
		return json.dumps(data,default = str)


# update custom counter set end 


# commitment generate and update created by Aravinth 17.11.2023 17:30

@app.route('/<int:conf_id>/<conf_key>/view_commitment',methods=["GET"])
def ViewCommitment(conf_id,conf_key):
	getConfData = BadgeModel().GetConf(conf_id,conf_key)

	if getConfData:
		return render_template('badge/view_commitment.html',conf_id=conf_id,conf_key=conf_key,conf_data=getConfData)

	else:
		return "<h4 style = 'color:red'; > Invalid URL </h4>"


@app.route('/<int:conf_id>/<conf_key>/generate_commitments',methods=["GET","POST"])
def GenerateCommitments(conf_id,conf_key):
	user_id     = None
	report_type = None
	start_date  = None
	end_date    = None
	try:
		getConfData = BadgeModel().GetConf(conf_id,conf_key)
		if getConfData :

			get_view_commitment = BadgeModel().getCommitment(user_id,report_type,start_date,end_date,conf_id)
			for index,value in enumerate(get_view_commitment):
				if index == 0:
					all_details = value
				if index == 1:
					commitments_data = value

			if commitments_data:
				generate_total_count = "Generated Commitment Count : "+str(len(commitments_data))
			else:
				generate_total_count = None

			data 	  = {"generate_total_count" : generate_total_count ,"status" : 1 , "msg" : "Successfully Generated."}
			return json.dumps(data,default=str)

		else:
			return "<h4 style= 'color:red' ; > Invalid URL </h4>"
	except Exception as e:
			data = {"generate_data" : "","msg" : str(e), "status" : 401}
			return json.dumps(data,default=str)
	

@app.route('/<int:conf_id>/<conf_key>/update_commitment',methods = ["GET","POST"])
def UpdateCommitment(conf_id,conf_key):
		now        	   = datetime.now()
		current_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
		count          = 0
		try:
			getConfData = BadgeModel().GetConf(conf_id,conf_key)
			if getConfData :
				del_table_name    = getConfData["del_table_name"]
				update_commitment = BadgeModel().UpdateCommitments(del_table_name)

				if update_commitment:
					updated_total_commitment_count = "Updated Commitment Count : "+str(update_commitment['total_commitment_count'])
				else:
					updated_total_commitment_count = None
	
				data 	  = {"updated_total_commitment_count" : updated_total_commitment_count ,"status" : 1 , "msg" : "Successfully updated."}
				return json.dumps(data,default=str)

			else:
				return "<h4 style= 'color:red' ; > Invalid URL </h4>"

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

# start session table view 

@app.route('/<int:conf_id>/<conf_key>/fc_session_table', methods = ["GET","POST"])
def FcSessionsTable(conf_id,conf_key):
	try:
		session_data  = FoodSessionModel().getFCBOSessionData(conf_id,conf_key)
		if session_data:
			html_data = render_template("badge/fc_sessions_table.html" ,session_data = session_data )
			data      = {"html_data" : html_data ,"msg" : "success" ,"status" : 1}	
		else :
			html_data = render_template("badge/fc_sessions_table.html" ,session_data = session_data )
			data      = {"html_data" : "" ,"msg" : "Invalid " ,"status" :  2}	
		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>/edit_fc_session_table',methods = ["GET","POST"])
def EditFcSessionTable(conf_id,conf_key):
	try:
		session_id        = request.values.get("session_id")
		edit_session_data = FoodSessionModel().edit_fcbo(conf_id,session_id) 
		# states = RegisterModel().get_states() # if we use state in edit form  un comment this line
		if edit_session_data :
			data = {'session_data' :edit_session_data ,'msg' : 'success' ,'status' : 1}
			return json.dumps(data,default=str)
		else :
			data = {'session_data' :"" ,'msg' : 'data not exist' ,'status' : 2} 
			return json.dumps(data,default=str)
	except Exception as e:
		data      = {"session_data":"","msg" : str(e) ,"status" :  401}
		return json.dumps(data,default =str)



@app.route('/<int:conf_id>/<conf_key>/update_fc_session_table', methods = ["GET","POST"])
def UpdateFcSessiontable(conf_id,conf_key):
	try:
		now = datetime.now()
		current_dt    = now.strftime("%Y-%m-%d %H:%M:%S")
		session_name  = request.values.get("session_name")  or None
		session_key   = request.values.get("session_key")  or None
		start_time    = request.values.get("start_time")  or None
		end_time      = request.values.get("end_time")  or None
		session_id    = request.values.get("session_id")  or None
		conf_id       = request.values.get("conf_id")
		conf_key      = request.values.get("conf_key")

		if session_id and int(session_id) > 0 :

			data_for_update = {
			'session_name': session_name,
			'session_key' : session_key,
			'start_time'  : start_time,
			'end_time'    : end_time,
			'updated_at'  : current_dt
			}

			update_and_getdata = FoodSessionModel().update_fcbo_and_getdata(data_for_update,session_id,conf_id,conf_key)
			if update_and_getdata :
				html_data = render_template('badge/fc_sessions_table.html',session_data =update_and_getdata)
				data = {"html_data" : html_data , "msg" : "Updated Successfully","status" : 1 }
				return json.dumps(data,default =str)
			else:
				html_data = render_template('badge/fc_sessions_table.html',session_data =update_and_getdata)
				data = {"html_data" : "" , "msg" : " Updated Failed .","status" : 2 }
				return json.dumps(data,default =str)
		else:
			data = {"html_data" : "" , "msg" : " Invalid session .","status" : 3 }
			return json.dumps(data,default =str)

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



@app.route('/<int:conf_id>/<conf_key>/post_fc_session', methods = ["GET", "POST"])
def PostFoodSession(conf_id,conf_key):
	data = None
	try:
		now         = datetime.now()
		current_dt  = now.strftime("%Y-%m-%d %H:%M:%S")
		session_name= request.values.get("session_name")  or None
		session_key = request.values.get("session_key")  or None
		start_time  = request.values.get("start_time")  or None
		end_time    = request.values.get("end_time")  or None
		conf_id     = request.values.get("conf_id")  or None
		conf_key    = request.values.get("conf_key")  or None
		# fetching data from form..
		data = {
			'session_name' : session_name,
			'session_key'  : session_key,
			'start_time'   : start_time,
			'end_time'     : end_time,
			'conf_id'      : conf_id,
			'conf_key'     : conf_key,
			'created_at'   : current_dt	
		}

		insert_session_data = FoodSessionModel().insert_fcbodata_and_getdata(data,conf_id,conf_key)
		if insert_session_data:
			html_data = render_template('badge/fc_sessions_table.html',session_data =insert_session_data)
			data = {"html_data" : html_data ,"msg" : "Inserted Successfully","status" : 1 }
			return json.dumps(data,default =str)
		else:
			html_data = render_template('badge/fc_sessions_table.html',session_data =insert_session_data)
			data = {"html_data" : ""  , "msg" : "Inserted Failed","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>/delete_fc_session_index', methods = ["GET", "POST"])
def DeleteFcbosessionIndex(conf_id,conf_key):
	try:
		now         = datetime.now()
		current_dt  = now.strftime("%Y-%m-%d %H:%M:%S")
		session_id  = request.values.get("session_id")  or None
		delete_session_data = FoodSessionModel().delete_fcbodata_and_getdata(conf_id,session_id)
		html_data = render_template('badge/fc_sessions_table.html',session_data =delete_session_data)
		data = {"html_data" : html_data ,"msg" : "Deleted Successfully","status" : 1 }
		return json.dumps(data,default =str)
	except Exception as e:
		data      = {"html_data":"","msg" : str(e) ,"status" :  401}
		return json.dumps(data,default =str)



# start session table view kit

@app.route('/<int:conf_id>/<conf_key>/kc_session_table', methods = ["GET","POST"])
def KcSessionsTable(conf_id,conf_key):
	try:
		session_data  = KitSessionModel().getSessionData(conf_id,conf_key)
		if session_data:
			html_data = render_template("badge/kc_sessions_table.html" ,session_data = session_data )
			data      = {"html_data" : html_data ,"msg" : "success" ,"status" : 1}	
		else :
			html_data = render_template("badge/kc_sessions_table.html" ,session_data = session_data )
			data      = {"html_data" : "" ,"msg" : "Invalid " ,"status" :  2}	
		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>/edit_kc_session_table',methods = ["GET","POST"])
def EditKcSessionTable(conf_id,conf_key):
	try:
		session_id        = request.values.get("session_id")
		edit_session_data = KitSessionModel().edit_kcbo(conf_id,session_id) 
		# states = RegisterModel().get_states() # if we use state in edit form  un comment this line
		if edit_session_data :
			data = {'session_data' :edit_session_data ,'msg' : 'success' ,'status' : 1}
			return json.dumps(data,default=str)
		else :
			data = {'session_data' :"" ,'msg' : 'data not exist' ,'status' : 2} 
			return json.dumps(data,default=str)
	except Exception as e:
		data      = {"session_data":"","msg" : str(e) ,"status" :  401}
		return json.dumps(data,default =str)



@app.route('/<int:conf_id>/<conf_key>/update_kc_session_table', methods = ["GET","POST"])
def UpdateKcSessiontable(conf_id,conf_key):
	try:
		now = datetime.now()
		current_dt    = now.strftime("%Y-%m-%d %H:%M:%S")
		session_name  = request.values.get("session_name")  or None
		session_key   = request.values.get("session_key")  or None
		start_time    = request.values.get("start_time")  or None
		end_time      = request.values.get("end_time")  or None
		session_id    = request.values.get("session_id")  or None
		conf_id       = request.values.get("conf_id")
		conf_key      = request.values.get("conf_key")

		if session_id and int(session_id) > 0 :

			data_for_update = {
			'session_name': session_name,
			'session_key' : session_key,
			'start_time'  : start_time,
			'end_time'    : end_time,
			'updated_at'  : current_dt
			}

			update_and_getdata = KitSessionModel().update_kitbo_and_getdata(data_for_update,session_id,conf_id,conf_key)
			print(update_and_getdata);
			if update_and_getdata:
				html_data = render_template('badge/kc_sessions_table.html',session_data =update_and_getdata)
				data = {"html_data" : html_data , "msg" : "Updated Successfully","status" : 1 }
				return json.dumps(data,default =str)
			else:
				html_data = render_template('badge/kc_sessions_table.html',session_data =update_and_getdata)
				data = {"html_data" : "" , "msg" : " Updated Failed .","status" : 2 }
				return json.dumps(data,default =str)
		else:
			data = {"html_data" : "" , "msg" : " Invalid session .","status" : 3 }
			return json.dumps(data,default =str)

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



@app.route('/<int:conf_id>/<conf_key>/post_kc_session', methods = ["GET", "POST"])
def PostKitSession(conf_id,conf_key):
	data = None
	try:
		now         = datetime.now()
		current_dt  = now.strftime("%Y-%m-%d %H:%M:%S")
		session_name= request.values.get("session_name")  or None
		session_key = request.values.get("session_key")  or None
		start_time  = request.values.get("start_time")  or None
		end_time    = request.values.get("end_time")  or None
		conf_id     = request.values.get("conf_id")  or None
		conf_key    = request.values.get("conf_key")  or None
		# fetching data from form..
		data = {
			'session_name' : session_name,
			'session_key'  : session_key,
			'start_time'   : start_time,
			'end_time'     : end_time,
			'conf_id'      : conf_id,
			'conf_key'     : conf_key,
			'created_at'   : current_dt	
		}

		insert_session_data = KitSessionModel().insert_kitdata_and_getdata(data,conf_id,conf_key)
		if insert_session_data:
			html_data = render_template('badge/kc_sessions_table.html',session_data =insert_session_data)
			data = {"html_data" : html_data ,"msg" : "Inserted Successfully","status" : 1 }
			return json.dumps(data,default =str)
		else:
			html_data = render_template('badge/kc_sessions_table.html',session_data =insert_session_data)
			data = {"html_data" : ""  , "msg" : "Inserted Failed","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>/delete_kc_session_index', methods = ["GET", "POST"])
def DeleteKcbosessionIndex(conf_id,conf_key):
	try:
		now         = datetime.now()
		current_dt  = now.strftime("%Y-%m-%d %H:%M:%S")
		session_id  = request.values.get("session_id")  or None
		delete_session_data = KitSessionModel().delete_kitbodata_and_getdata(conf_id,session_id)
		html_data = render_template('badge/kc_sessions_table.html',session_data =delete_session_data)
		data = {"html_data" : html_data ,"msg" : "Deleted Successfully","status" : 1 }
		return json.dumps(data,default =str)
	except Exception as e:
		data      = {"html_data":"","msg" : str(e) ,"status" :  401}
		return json.dumps(data,default =str)




# Create kit session option
@app.route('/<int:conf_id>/<conf_key>/create_kcsessions', methods = ["GET","POST"])
def CreateKcSessions(conf_id,conf_key):
	now        = datetime.now()
	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
	session_data_1 = []
	session_key    = 111

	getKcConfData = KitSessionModel().getKcConfData(conf_id,conf_key)
	if getKcConfData :
		conf_start_time = getKcConfData["conf_start_time"]
		conf_end_time   = getKcConfData["conf_end_time"]
		if not conf_start_time and not conf_end_time :
			flash('Cannot created sessions without conference start and end date.',"errorMsg")
			return redirect(url_for('badge.KCSessionMap' ,conf_id = conf_id,conf_key = conf_key))
		else:
			KcsessionData = KitSessionModel().getKcsessionData(conf_id,conf_key)
			if KcsessionData:
				flash('Already session created for kit counter',"errorMsg")
				return redirect(url_for('badge.KCSessionMap' ,conf_id = conf_id,conf_key = conf_key))
			else :
				kit_start_time = conf_start_time + timedelta(hours=6)					
				kit_start_time = kit_start_time.strftime("%Y-%m-%d %H:%M") # string format f
				kit_end_time   = conf_end_time.strftime("%Y-%m-%d %H:%M") # string format f

				session_data_1 = ("Delegate KIT ",session_key,kit_start_time,kit_end_time,current_dt,conf_id,conf_key)
				session_insert_stmt = "INSERT INTO kc_sessions ( session_name,session_key,start_time,end_time,created_at,conf_id,conf_key) VALUES"+str(session_data_1)+" ;" 

				KitSessionModel().insert_kit_session(session_insert_stmt)
				flash('Kit counter session(s) successfuylly created.',"successMsg")
				return redirect(url_for('badge.KCSessionMap' ,conf_id = conf_id,conf_key = conf_key))	
	else:
		flash('Invalid URL.',"errorMsg")
		return "<h2 style= 'color:red;text-align:center' ; >Invalid URL </h2>"


# Santhosh code integration for Food counter session create
@app.route('/<int:conf_id>/<conf_key>/create_fcsessions', methods = ["GET","POST"])
def CreateFcSessions(conf_id,conf_key):
	now              = datetime.now()
	current_dt       = now.strftime("%Y-%m-%d %H:%M:%S")
	conf_date_1      = []
	dateformat       = "%Y-%m-%d %H:%M:%S"
	day_diff         = 0
	session_key      = 111
	session_data_all = " "

	getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
	if getFcConfData :
		conf_start_time = getFcConfData["conf_start_time"]
		conf_end_time   = getFcConfData["conf_end_time"]
		fcSessions      = FoodSessionModel().getFcsessionData(conf_id,conf_key)
		if fcSessions :
			flash("Already food counter sessions created. ","errorMsg")
			return redirect(url_for('badge.FCSessionMap' ,conf_id = conf_id,conf_key = conf_key))

		if conf_start_time and conf_end_time :
			st_date = conf_start_time.strftime("%Y-%m-%d") # string format f
			day_diff = (conf_end_time.date() - conf_start_time.date()).days
			if day_diff  >= 0 :
				day_diff = day_diff + 1
			else :
				flash("Conference end date must be greater than start time" ,"errorMsg")
				return redirect(url_for('badge.FCSessionMap' ,conf_id = conf_id,conf_key = conf_key))

			# day_diff = 1 # For one day conference testing
			if  day_diff and day_diff == 1 : # For one day conference Block
				i = 1
				session_data_1 = ("Day "+str(i)+" Breakfast",session_key,st_date+' 06:00:00',st_date+' 11:45:00',current_dt,conf_id,conf_key)
				session_key=session_key+111
				session_data_2 = ("Day "+str(i)+" Lunch",session_key,st_date+' 11:46:00',st_date+' 17:45:00',current_dt,conf_id,conf_key)
				session_key=session_key+111
				session_data_3 = ("Day "+str(i)+" Dinner",session_key,st_date+' 17:46:00',st_date+' 23:59:00',current_dt,conf_id,conf_key)
				session_key=session_key+111
				session_data_all = str(session_data_all) + str(session_data_1) + "," + str(session_data_2)+","+str(session_data_3)+","
				
				session_insert_stmt = "INSERT INTO fc_sessions ( session_name,session_key,start_time,end_time,created_at,conf_id,conf_key) VALUES"+session_data_all+" ;" 
				session_insert_stmt = session_insert_stmt[:len(session_insert_stmt)-3]
				session_insert_stmt = session_insert_stmt + ';'   

			else : # For more than 1 day conference block   
				for i in range(0,day_diff):
					day_in_date = conf_start_time + timedelta(days=i)
					conf_date   = day_in_date.strftime("%Y-%m-%d")
					conf_date_1.append(conf_date)

				i = 0
				for conf_date in conf_date_1:
					conf_date = conf_date
					for  day in range(1,day_diff):
						i = i+1
						session_data_1 = ("Day "+str(i)+" Breakfast",session_key,conf_date+' 06:00:00',conf_date+' 11:45:00',current_dt,conf_id,conf_key)
						session_key=session_key+111
						session_data_2 = ("Day "+str(i)+" Lunch",session_key,conf_date+' 11:46:00',conf_date+' 17:45:00',current_dt,conf_id,conf_key)
						session_key=session_key+111
						session_data_3 = ("Day "+str(i)+" Dinner",session_key,conf_date+' 17:46:00',conf_date+' 23:59:00',current_dt,conf_id,conf_key)
						session_key=session_key+111
						session_data_all = str(session_data_all) + str(session_data_1) + "," + str(session_data_2)+","+str(session_data_3)+","
						break
			
				session_insert_stmt = "INSERT INTO fc_sessions ( session_name,session_key,start_time,end_time,created_at,conf_id,conf_key) VALUES"+session_data_all+" ;" 
				session_insert_stmt = session_insert_stmt[:len(session_insert_stmt)-3]
				session_insert_stmt = session_insert_stmt + ';' 

			FoodSessionModel().insert_food_session(session_insert_stmt)
			flash('Successfully inserted sessions.',"successMsg")
			return redirect(url_for('badge.FCSessionMap' ,conf_id = conf_id,conf_key = conf_key))
				
		else :
			flash("Conference start time and end time must to generate session(s)" ,"errorMsg")
			return redirect(url_for('badge.FCSessionMap' ,conf_id = conf_id,conf_key = conf_key))
	else:
		flash('Invalid URL  mismach.',"errorMsg")
		return "<h2 style= 'color:red;text-align:center' ; >Invalid URL </h2>"



# 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)

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