Sindbad~EG File Manager

Current Path : /home/numerotech/scans.numerotech.com/scan_v1/core/controller/
Upload File :
Current File : //home/numerotech/scans.numerotech.com/scan_v1/core/controller/FCController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json
from core.model.FCModel import FCModel
from core.model.FoodSessionModel import FoodSessionModel

from random import randint
import datetime,time
 
from datetime import timedelta,date,datetime
from .. import Auth,RouteGroup
from flask import session, app
from core.library.email import EMAIL
from os.path import join
import os
from os import path
import re
import webbrowser
import csv
from io import StringIO
import io
from flask import Response
# import base64
from urllib.parse import unquote
# from time import sleep
# import time


app = Blueprint('fc', __name__)

@app.route('/<int:conf_id>/<conf_key>/fclogin',methods = ["GET", "POST"])
def FCLogin(conf_id,conf_key):
	getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
	if getFcConfData :
		now = datetime.now()
		current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
		conf_name = getFcConfData["conf_name"]
		system_wise_scan = getFcConfData["system_wise_scan"]
		scan_system_list = None
		conf_end_time = getFcConfData["conf_end_time"]
		if datetime.strptime(current_dt, "%Y-%m-%d %H:%M:%S") < conf_end_time:
			if session.get("fcsession"):
				return redirect (url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))	
			else:
				if system_wise_scan > 0 :
					scan_system_list = FCModel().scanSystemName(conf_id)
				return render_template('foodcounter/fc_login.html',conf_id = conf_id , conf_key=conf_key,conf_name=conf_name,system_wise_scan=system_wise_scan,scan_system_list=scan_system_list)	
		else :
			return "<h2 style= 'color:red;text-align:center' ; >Conference Closed</h2>"
	else :
		return "<h4 style= 'color:red' ; >Invalid URL </h4>"


# @app.route('/<int:conf_id>/<conf_key>/fclogin',methods = ["GET", "POST"])
# def FCLogin(conf_id,conf_key):
# 	getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
# 	if getFcConfData :
# 		conf_name = getFcConfData["conf_name"]
# 		system_wise_scan = getFcConfData["system_wise_scan"]
# 		scan_system_list = None
# 		if session.get("fcsession"):
# 			return redirect (url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))	
# 		else:
# 			if system_wise_scan > 0 :
# 				scan_system_list = FCModel().scanSystemName(conf_id)
# 			return render_template('foodcounter/fc_login.html',conf_id = conf_id , conf_key=conf_key,conf_name=conf_name,system_wise_scan=system_wise_scan,scan_system_list=scan_system_list)	
# 	else :
# 		return "<h4 style= 'color:red' ; >Invalid URL </h4>"



@app.route('/post_fc_login', methods = ["GET","POST"])
def PostFCLogin():
	now = datetime.now()
	current_dt        = now.strftime("%Y-%m-%d %H:%M:%S")
	scan_system_name  = "System-All" # Added sep 11, 2023
	if request.method == "POST":
		session_key   = request.form['session_key']
		conf_id       = request.form['conf_id']
		conf_key      = request.form['conf_key']
		scan_system_name = request.form['scan_system_name'] or 'System-All'
		if  not session_key:
			flash('Please enter session_key',"errorMsg")
			return redirect (url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))
		else :
			us = FCModel()
			user_output = us.getDataBysession_keyFrontEnd(session_key,current_dt,conf_id,conf_key)
# 			json_data = json.dumps(user_output,default =str)
# 			return json_data
			if user_output:
				db_session_key = user_output['session_key']
				if session_key == db_session_key:
					user_output["scan_system_name"] = scan_system_name
					session_id                      = user_output['session_id']
					session["fcsession"]            = user_output

					# Auth.login(user_output)
					flash('Login Sucessfully.',"successMsg" )
					return redirect (url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key = conf_key))
				else :
					flash('Invalid Session Key.',"errorMsg" )
					return redirect (url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))

			else:
				flash('Invalid Session Key.',"errorMsg" )
				return redirect (url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))

@app.route('/<int:conf_id>/<conf_key>/fc_logout',methods = ["GET", "POST"])
def FcLogout(conf_id,conf_key):
	if session.get("fcsession") :
		session.pop('fcsession', None)
	else :
		pass
	return redirect(url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))


@app.route('/post_fc_scan_data', methods = ["POST"])
def PostFCScanData():
	try:
		# time.sleep(0.3)
		if session.get("fcsession") :
			session_data = session.get("fcsession")
			session_id   = session_data["session_id"]
			now = datetime.now()
			current_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
			delegate_no  = request.values.get("delegate_no")  or None # Added on step 11,2023
			session_id   = request.values.get("session_id")  or None  # Added on step 11,2023
			if delegate_no :
				delegate_no =delegate_no.lstrip('0')
			
			del_table_name              = request.values.get("del_table_name")
			fc_del_session_table_name   = request.values.get("fc_del_session_table_name")
			fc_session_entry_table_name = request.values.get("fc_session_entry_table_name")
			scan_system_name            = request.values.get("scan_system_name") or 'System-All' # updated on March 25 2023
			# print(session_id,delegate_no,del_table_name,fc_del_session_table_name,fc_session_entry_table_name,scan_system_name)
			insert_data = FCModel().insertFCScannedData1(session_id,delegate_no,del_table_name,fc_del_session_table_name,fc_session_entry_table_name,scan_system_name)
			data = insert_data
			json_data   = jsonify(data)
			return json_data
		else:
			data = {"delegate_no" :"", "full_name" : "" ,"role" : "" , "scan_at" : "","msg" : "INVALID LOGIN" ,"status" : 5}
			json_data = json.dumps(data,default=str)
			return json_data
	except Exception as e:
		data = {"delegate_no" : "", "full_name" : "" ,"role" : " ","scan_at" : "" ,"msg" : str(e) ,"status" : 401}
		json_data = json.dumps(data,default=str)
		return json_data		

@app.route('/<int:conf_id>/<conf_key>/fc_dashboard',methods = ["GET", "POST"])
def FCDashboard(conf_id,conf_key):
	scan_system_name =  'System-All' # sep 11, 2023
	role_wise_report = 0 # Addoed on Sep 16, 2023
	total_count      = 0
	start_time       = ""
	end_time         = ""
	session_name     = ""


	now          = datetime.now()
	current_dt   = now.strftime("%d-%m-%Y %H:%M:%S")
	current_dt_1 = now.strftime("%Y-%m-%d %H:%M:%S")
	getFCConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
	if getFCConfData :
		conf_name                   = getFCConfData["conf_name"]
		del_table_name              = getFCConfData["del_table_name"]
		fc_del_session_table_name   = getFCConfData["fc_del_session_table_name"]
		fc_session_entry_table_name = getFCConfData["fc_session_entry_table_name"]

		if session.get("fcsession") :
			session_data     = session.get("fcsession")
			session_id       = session_data["session_id"]
			scan_system_name = session_data["scan_system_name"]
			
			# check session is end or not 
			is_session_open = FCModel().checkFCSessionIsOpen(session_id,current_dt_1)

			if is_session_open :
				session_name = is_session_open["session_name"]
				start_time   = is_session_open["start_time"]
				end_time     = is_session_open["end_time"]

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

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

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

@app.route('/fc_reports', methods = ["GET", "POST"])
def FCReports():
	try:
		total_count = 0
		now         = datetime.now()
		current_dt  = now.strftime("%d-%m-%Y %H:%M:%S")
		if session.get("fcsession") :
			session_data = session.get("fcsession")
			session_id         = session_data["session_id"]
			scan_system_name   = session_data["scan_system_name"]
			conf_id            = request.values.get("conf_id") or 0
			conf_key           = request.values.get("conf_key") or None
			system_wise_report = request.values.get("system_wise_report") or 0
			role_wise_report   = request.values.get("role_wise_report") or 0 # Added on Sep 16, 2023

			system_wise_report = int(system_wise_report) if system_wise_report else system_wise_report
			role_wise_report   = int(role_wise_report) if role_wise_report else role_wise_report

			getFcConfData      = FoodSessionModel().getFcConfData(conf_id,conf_key)
			conf_name          = getFcConfData["conf_name"]
			del_table_name     = getFcConfData["del_table_name"]
			fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]
			
			system_wise_scan =  getFcConfData["system_wise_scan"] # Added on August 07,2023

			if system_wise_report > 0 :
				system_wise_scan = 1
			else :
				system_wise_scan = 0

			# print(session_id,conf_id,conf_key,del_table_name,fc_session_entry_table_name,system_wise_scan,scan_system_name,role_wise_report)
			scanned_data     = FCModel().getFCReport(session_id,conf_id,conf_key,del_table_name,fc_session_entry_table_name,system_wise_scan,scan_system_name,role_wise_report)
			
			if scanned_data : 
				for index,value in enumerate(scanned_data) :
					scan_count  = value["scanned_count"]
					total_count = total_count + scan_count 
							
			html_data = render_template('foodcounter/report_table.html' , scanned_data = scanned_data,total_count=total_count,system_wise_scan=system_wise_scan,int=int,role_wise_report=role_wise_report)
			role_data = render_template('foodcounter/fc_download_report_dropdown.html' , scanned_data = scanned_data)

			data = { 'html_data' : html_data ,'scanned_data' : scanned_data,'role_data' : role_data , 'msg' :'success'  ,'current_dt' : current_dt,'total_count': total_count ,'status' : 1 }
			json_data = json.dumps(data ,default =str)
			return json_data
		else :
			data = { 'html_data' : "" ,"scanned_data" : "" ,'role_data' : "", "msg" :"Invalid login",'current_dt' : current_dt,'total_count': total_count  ,"status" : 4}
			json_data = json.dumps(data,default =str)
			return json_data

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


@app.route('/send_fc_report_mail',methods = [ "POST"])
def SendFCReportMail():
	total_count = 0
	scan_count  = 0
	# system_wise_report=1&role_wise_report=1
	now = datetime.now()
	current_dt   = now.strftime("%d-%m-%Y %H:%M:%S")
	current_date = now.strftime("%d-%m-%Y")

	mail_ids     = request.form['mail_id']
	conf_id       = request.form['conf_id']
	conf_key      = request.form['conf_key']
	# role_wise_report = 1

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

		if session.get("fcsession") :
			session_data      = session.get("fcsession")
			session_id        = session_data["session_id"]
			scan_system_name  = session_data["scan_system_name"]
			getFcConfData     = FoodSessionModel().getFcConfData(conf_id,conf_key)
			conf_name         = getFcConfData["conf_name"]
			del_table_name = getFcConfData["del_table_name"]
			fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]
			
			system_wise_scan =  0 # Added on Sep 12, 2023 For report mail with all scanned count
			role_wise_scan   =  1 # Added on Sep 16, 2023 For report mail with all scanned count
			scanned_data 	 = FCModel().getFCReport(session_id,conf_id,conf_key,del_table_name,fc_session_entry_table_name,system_wise_scan,scan_system_name,role_wise_scan)

			if scanned_data : 
				for index,value in enumerate(scanned_data) :
					scan_count  = value["scanned_count"]
					total_count = total_count + scan_count 
							
			mail_template = render_template('foodcounter/fc_email/fc_report_mail.html' , scanned_data = scanned_data,total_count=total_count,system_wise_scan=system_wise_scan,conf_id=conf_id)
# 			subject       = " "+ conf_name+"- Food counter Report on " + current_date
			subject       = " "+ conf_name+"- Food counter Report"

			for email in mail_list:
				# parsing the element from a list using for loop
								# send mail here
				EMAIL.FcReportMail(subject,mail_template,email)

			flash("Report mail has been sent. ","successMsg")	
			return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))
		else :
			flash("Invalid  session" , "errorMsg")
			return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))
	else :
		flash("Please enter atleast one mail-id ." ,"errorMsg")
		return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))		


@app.route('/send_fc_report_whatsapp',methods = ["POST"])
def SendFCReportWhaatsapp():
	total_count = 0
	scan_count  = 0
	msg_content = ""
	mobile_no     = request.form['mobile_no']
	conf_id       = request.form['conf_id']
	conf_key      = request.form['conf_key']
	if mobile_no:
		last_char = mobile_no[-1:]
		# check last character is commma 
		if "," ==  last_char :
			mobile_no = re.sub(r".$", "", mobile_no)
		# check white spance in given inputs ,if exist then replace as empty
		if " " in mobile_no :
			mobile_no = mobile_no.replace(" " ,"")

		if session.get("fcsession") :
			session_data 	 = session.get("fcsession")
			session_id       = session_data["session_id"]
			scan_system_name = session_data["scan_system_name"]

			getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
			conf_name = getFcConfData["conf_name"]
			del_table_name = getFcConfData["del_table_name"]
			fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]

			system_wise_scan            =  getFcConfData["system_wise_scan"] # Added on August 07,2023
			scanned_data = FCModel().getFCReport(session_id,conf_id,conf_key,del_table_name,fc_session_entry_table_name,system_wise_scan,scan_system_name)
			if scanned_data :
				
				# msg_content = "KIT Counter Report - SESLI22%0a%0a"+session_name+"%0a%0a"
				msg_content = "*Food Counter Report - "+conf_name+"* %0a%0a" 
				for index,value in enumerate(scanned_data) :
					if index == 0 :
						session_name = value["session_name"]
						session_date   = value["start_time"]
						if session_date :
							session_date = session_date.strftime("%d/%m/%Y")
						else :
							session_date = ""	
						msg_content = "*Food Counter Report - SESLI22* %0a" +"*"+session_date+" - "+session_name+"*" +"%0a%0a"

					scan_count  = value["scanned_count"]
					role         = value["role"]

					total_count = total_count + scan_count 
					msg_content = msg_content + "*"+role+"*" +" : " + str(scan_count) +"%0a"

				
				msg_content = msg_content +"%0a*Total Scanned Count : "+ str(total_count)+"*"
				msg_content = "https://wa.me/91"+str(mobile_no)+"?text="+msg_content

				webbrowser.open(msg_content) # to send whatsapp via new tab
				flash("Food counter report has been sent sucessfully to " + mobile_no ,"successMsg")
				return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))	 # comment after testing
				# return  flask.redirect(msg_content)		

				# return redirect(url_for('kit.KcDashBoard'))
		else :
			flash("Invalid  session" , "errorMsg")
			return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))	
	else:	
		flash("Please enter the whatsapp number to sent the food counter report.")		
		return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))	

	return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))	


@app.route('/<int:conf_id>/<conf_key>/download_fc_report',methods = ["GET","POST"])
def DowloadFcReport(conf_id,conf_key):
	try:
		now = datetime.now()
		current_dt = now.strftime("%d-%m-%Y %H:%M:%S")
		if session.get("fcsession") :
			session_data  = session.get("fcsession")
			session_id    = session_data["session_id"]
			scan_system_name = session_data["scan_system_name"]
			# session_id    = 1
			# conf_id       = 3
			role          = request.values.get('role')

			getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
			conf_name     = getFcConfData["conf_name"]
			del_table_name              = getFcConfData["del_table_name"]
			fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]
			scanned_data = FCModel().getFcReportDownload(session_id,conf_id,fc_session_entry_table_name,role,del_table_name)
			if scanned_data :
				output = io.StringIO()
				writer = csv.writer(output)
				line = ['Name','Email', 'Mobile', 'Membership Number' , 'City' ,'Role']
				writer.writerow(line)
				for row in scanned_data:
					line = [row['full_name'],row['email'] or  '' , row['mobile'] or  '', row['membership_no'] or  '' , row['city'] or  '',row['role'] or  '' ]
					writer.writerow(line)

				output.seek(0)
				return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename=data_report.csv"})
			
			else :
				return "Record not exist"
	except Exception as e:
		data = { 'html_data' : "" ,"scanned_data" : "" , "msg" : str(e)  ,'current_dt' : current_dt,'total_count': total_count,"status" : 401}
		json_data = json.dumps(data,default=str)
		return json_data

@app.route('/<int:conf_id>/<conf_key>/download_fc_report_1',methods = ["GET","POST"])
def DownloadFCReport1(conf_id,conf_key):
	try:
		if session.get("fcsession") :
			session_data  = session.get("fcsession")
			session_id    = session_data["session_id"]
			role          = request.values.get('role') #query string
			getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
			conf_name     = getFcConfData["conf_name"]
			del_table_name           = getFcConfData["del_table_name"]
			# kc_del_session_table_name   = getFcConfData["fc_del_session_table_name"]
			fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]
			# role = None
			scanned_data = FCModel().getFcReportDownload(session_id,conf_id,fc_session_entry_table_name,role,del_table_name)
			if scanned_data :
				download_url = request.host_url+"/"+str(conf_id)+"/"+conf_key+"/download_fc_report?role="+role 
				webbrowser.open(download_url) # to send whatsapp via new tab
				data = {"msg" :"success" ,"status" : 1}
			else :
				data  = {"msg" :"Record not exists." ,"status" : 2}

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

		else :
			data  = {"msg" :"Invalid login." ,"status" : 3}

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


# @app.route('save_fc_token',methods = ["GET","POST"])
# def SaveFCToken():
# 	now = datetime.now()
# 	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
# 	if session.get("fcsession") :
# 		session_data = session.get("fcsession")
# 		session_id   = session_data["session_id"]
# 		scan_system_name = session_data["scan_system_name"] or 'System-All' # updated on July 07, 2023
# 		ref_delegate_no  =  request.values.get("ref_delegate_no") or 0
# 		ref_name         = request.values.get("ref_name") or ""
# 		ref_mobile       = request.values.get("ref_mobile") or ""
# 		conf_id          = request.values.get("conf_id") or 0
# 		conf_key         = request.values.get("conf_key") or ""
# 		no_of_mebers     = request.values.get("no_of_mebers") or 1
# 		conf_id          = int(conf_id) if conf_id else conf_id

# 		getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
# 		fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]
# 		if not ref_delegate_no and not ref_name and not ref_mobile  :
# 			flash('Please enter Ref Delegate Number or Name or mobile .','errorMsg')
# 			return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))
# 		else :
# 			data = {
# 				'ref_delegate_no' : ref_delegate_no,
# 				'ref_name'        : ref_name,
# 				'ref_mobile'      : ref_mobile,
# 				'conf_id'         : conf_id,
# 				'session_id'      : session_id,
# 				'created_at'      : current_dt,
# 				'is_token'        : 1
# 			}
# 			if no_of_mebers and int(no_of_mebers) > 1 :
# 				insert_stmt   = "insert into "+fc_session_entry_table_name+"(ref_delegate_no,ref_name,ref_mobile,session_id,created_at,is_token,scan_system_name) values"
# 				insert_values = "("
# 				no_of_mebers = int(no_of_mebers)
# 				for i in range(0, no_of_mebers) :
# 					insert_values = insert_values +  str(ref_delegate_no)+",'"+str(ref_name)+"','"+str(ref_mobile)+"',"+str(session_id)+",'"+current_dt+"','1','"+scan_system_name+"'" 
# 					insert_values = insert_values+"),("	

					
# 				insert_values = insert_values[:-2]	
# 				insert_query  = insert_stmt+insert_values	
# 				insert_users = FCModel().insert_token_data(insert_query)

# 			if no_of_mebers and int(no_of_mebers) == 1 :
# 				insert_stmt= "insert into "+fc_session_entry_table_name+"(ref_delegate_no,ref_name,ref_mobile,session_id,created_at,is_token) values("+str(ref_delegate_no)+",'"+str(ref_name)+"','"+str(ref_mobile)+"',"+str(session_id)+",'"+current_dt+"','1');"
# 				insert_users = FCModel().insert_token_data(insert_stmt)

# 			if insert_users == "success":
# 				flash('Token count updated.','successMsg')
# 				return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))	
# 			else :
# 				flash("Error .try again" , "errorMsg")  
# 				return redirect(url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key=conf_key))
# 	else :
# 		flash("Invalid login " , "errorMsg")
# 		return redirect (url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))

# Save FC TOKEN BY AJAX -  Ganesan J on Step 27, 2023
@app.route('save_fc_token_ajax',methods = ["GET","POST"])
def SaveFCTokenAjax():
	now = datetime.now()
	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
	try:
		if session.get("fcsession") :
			session_data = session.get("fcsession")
			session_id   = session_data["session_id"]
			scan_system_name = session_data["scan_system_name"] or 'System-All' # updated on July 07, 2023
			ref_delegate_no  =  request.values.get("ref_delegate_no") or 0
			ref_name         = request.values.get("ref_name") or ""
			ref_mobile       = request.values.get("ref_mobile") or ""
			conf_id          = request.values.get("conf_id") or 0
			conf_key         = request.values.get("conf_key") or ""
			no_of_mebers     = request.values.get("no_of_mebers") or 1
			conf_id          = int(conf_id) if conf_id else conf_id
			no_of_mebers     = int(no_of_mebers) if no_of_mebers else no_of_mebers
			

			getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
			fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]
			if not ref_delegate_no and not ref_name and not ref_mobile  :
				return_data = {"msg" : "Please enter Ref Delegate Number or Name or mobile ." , "status" : 2}
				json_data   = json.dumps(return_data ,default = str)
				return json_data
			else :
				if no_of_mebers and int(no_of_mebers) > 1 :
					insert_stmt   = "insert into "+fc_session_entry_table_name+"(ref_delegate_no,ref_name,ref_mobile,session_id,created_at,is_token,scan_system_name) values"
					insert_values = "("
					no_of_mebers  = int(no_of_mebers)
					for i in range(0, no_of_mebers) :
						insert_values = insert_values +  str(ref_delegate_no)+",'"+str(ref_name)+"','"+str(ref_mobile)+"',"+str(session_id)+",'"+current_dt+"','1','"+scan_system_name+"'" 
						insert_values = insert_values+"),("	

						
					insert_values = insert_values[:-2]	
					insert_query  = insert_stmt+insert_values	
					insert_users  = FCModel().insert_token_data(insert_query)

				if no_of_mebers and int(no_of_mebers) == 1 :
					insert_stmt  = "insert into "+fc_session_entry_table_name+"(ref_delegate_no,ref_name,ref_mobile,session_id,created_at,is_token,scan_system_name) values("+str(ref_delegate_no)+",'"+str(ref_name)+"','"+str(ref_mobile)+"',"+str(session_id)+",'"+current_dt+"','1', '"+scan_system_name+"');"
					insert_users = FCModel().insert_token_data(insert_stmt)

				if insert_users  == "success":
					return_data  = {"msg" : "Token count updated." , "status" : 1}	
				else :
					return_data  = {"msg" : str(insert_users) , "status" : 3}

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

# End


@app.route('/<int:conf_id>/<conf_key>/<int:session_id>/view_fc_completed_session_report',methods = ["GET","POST"])
def ViewFcCompletedSessionReport(conf_id,conf_key,session_id):
	try:
		total_count      = 0
		system_wise_scan = 0
		scan_system_name = None
		now = datetime.now()
		current_dt = now.strftime("%d-%m-%Y %H:%M:%S")
		if session.get("fcsession") :
			session_data = session.get("fcsession")
			conf_id       = request.form['conf_id']
			conf_key      = request.form['conf_key']

			getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
			conf_name = getFcConfData["conf_name"]
			del_table_name = getFcConfData["del_table_name"]
			fc_session_entry_table_name = getFcConfData["fc_session_entry_table_name"]

			
			scanned_data = FCModel().getFCReport(session_id,conf_id,conf_key,del_table_name,fc_session_entry_table_name,system_wise_scan,scan_system_name)
			
			if scanned_data : 
				for index,value in enumerate(scanned_data) :
					scan_count  = value["scanned_count"]
					total_count = total_count + scan_count 
							
			html_data = render_template('foodcounter/report_table.html' , scanned_data = scanned_data,total_count=total_count,system_wise_scan=system_wise_scan,int=int)
			role_data = render_template('foodcounter/fc_download_report_dropdown.html' , scanned_data = scanned_data)

			data = { 'html_data' : html_data ,'scanned_data' : scanned_data,'role_data' : role_data , 'msg' :'success'  ,'current_dt' : current_dt,'total_count': total_count ,'status' : 1 }
			json_data = json.dumps(data ,default =str)
			return json_data
		else :
			data = { 'html_data' : "" ,"scanned_data" : "" ,'role_data' : "", "msg" :"Invalid login",'current_dt' : current_dt,'total_count': total_count  ,"status" : 2}
			json_data = json.dumps(data,default=str)
			return json_data

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

# Food counte auto login -- Jan 10 ,2023
@app.route('/<int:conf_id>/<conf_key>/food_auto_login/<session_key>', methods = ["GET","POST"])
def FoodAutoLogin(conf_id,conf_key,session_key):
	try:
		now = datetime.now()
		current_dt  = now.strftime("%Y-%m-%d %H:%M:%S")
		user_output = FCModel().getDataBysession_key(session_key,current_dt,conf_id,conf_key)
		if user_output :
			if session.get("fcsession") :
				session.pop('fcsession', None)
			
			session_id  					= user_output['session_id']
			user_output["scan_system_name"] = "System-2" # updated on July 07, 2023
			session["fcsession"]            = user_output
			flash('Login sucessfully.',"successMsg" )
			return redirect (url_for('fc.FCDashboard' ,conf_id = conf_id , conf_key = conf_key))
		else :
			flash("Ivalid session key" ,"errorMsg")
			return redirect (url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))
		
	except Exception as e:
		msg = str(e)
		flash(msg , "errorMsg")
		return redirect (url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))
		
		
@app.route('/<int:conf_id>/<conf_key>/food_auto_login_2/<session_key>', methods = ["GET","POST"])
def FoodAutoLogin2(conf_id,conf_key,session_key):
	try:
		now = datetime.now()
		current_dt  = now.strftime("%Y-%m-%d %H:%M:%S")
		user_output = FCModel().getDataBysession_key(session_key,current_dt,conf_id,conf_key)
		if user_output :
			if session.get("fcsession") :
				session.pop('fcsession', None)
			
			session_id  = user_output['session_id']
			session["fcsession"] = user_output
			flash('Login sucessfully.',"successMsg" )
			return redirect (url_for('fc.FCDashboard_2' ,conf_id = conf_id , conf_key = conf_key))
		else :
			flash("Ivalid session key" ,"errorMsg")
			return redirect (url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))
		
	except Exception as e:
		msg = str(e)
		flash(msg , "errorMsg")
		return redirect (url_for('fc.FCLogin' ,conf_id = conf_id , conf_key=conf_key))		


@app.route('/<int:conf_id>/<conf_key>/fc_dashboard_2',methods = ["GET", "POST"])
def FCDashboard_2(conf_id,conf_key):
	total_count = 0
	start_time   = ""
	end_time     = ""
	session_name = ""

	now          = datetime.now()
	current_dt   = now.strftime("%d-%m-%Y %H:%M:%S")
	current_dt_1 = now.strftime("%Y-%m-%d %H:%M:%S")
	#start
	getFCConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
	if getFCConfData :
		conf_name                   = getFCConfData["conf_name"]
		del_table_name              = getFCConfData["del_table_name"]
		fc_del_session_table_name   = getFCConfData["fc_del_session_table_name"]
		fc_session_entry_table_name = getFCConfData["fc_session_entry_table_name"]

		if session.get("fcsession") :
			session_data 	 = session.get("fcsession")
			session_id       = session_data["session_id"]
			scan_system_name = session_data["scan_system_name"]
			# check session is end or not 
			is_session_open = FCModel().checkFCSessionIsOpen(session_id,current_dt_1)
			
# 			json_data= json.dumps(is_session_open,default =str)
# 			return json_data
			#get completed session list 
			completed_sessions = FCModel().completedSessions(conf_id,current_dt_1)

			if is_session_open :
				session_name = is_session_open["session_name"]
				start_time   = is_session_open["start_time"]
				end_time     = is_session_open["end_time"]

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

				system_wise_scan =  getFCConfData["system_wise_scan"] # Added on August 07,2023

				scanned_data = FCModel().getFCReport(session_id,conf_id,conf_key,del_table_name,fc_session_entry_table_name,system_wise_scan,scan_system_name)
				if scanned_data : 
					for index,value in enumerate(scanned_data) :
						scan_count   = value["scanned_count"]
						total_count  = total_count + scan_count

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

# 	
# Save FC Scan data from log table
@app.route('/<int:conf_id>/<conf_key>/fc_save_from_errorlogs',methods = ["GET", "POST"])
def FcSaveFromErrorLogs(conf_id,conf_key):
	now         = datetime.now()
	curr_date   = now.strftime("%Y-%m-%d")
	curr_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
	# curr_date   = "2023-09-02"
	no_of_rows  = 0
	primary_ids = []

	delegate_no 	 = 0
	session_id  	 = 0
	scan_system_name = "System-All"
	conf_data     = FCModel().getFcScanErrorLogs(conf_id,conf_key,curr_date,is_column_only=1)
	if not conf_data : 
		return "Invalid URL"

	scanErrorData = FCModel().getFcScanErrorLogs(conf_id,conf_key,curr_date,is_column_only=0)	

	if scanErrorData :	
		del_table_name 				= conf_data["del_table_name"]		
		fc_session_entry_table_name = conf_data["fc_session_entry_table_name"]
		fc_del_session_table_name   = conf_data["fc_del_session_table_name"]

		for index,value in enumerate(scanErrorData):
			no_of_rows = no_of_rows+1
			url        = value["url"]
			primary_id = value["id"]
			if url :
				query_params = 	url.split("?")
				query_params = query_params[1]
				
				query_params = query_params.replace("&" , ",")
				query_params = query_params.split(",")

				for row in query_params :
					values_1 = row.split("=")	
					col_name = values_1[0]
					if "session_id" in col_name :
						session_id = values_1[1] 
						session_id = int(session_id) if session_id else 0

					if "scan_system_name" in col_name :
						scan_system_name = values_1[1]

					if "delegate_no" in col_name :
						delegate_no = values_1[1]
						delegate_no = int(delegate_no) if delegate_no else 0	

					
				if delegate_no> 0 and session_id > 0 :
					insert_data = FCModel().insertFCScannedData1(session_id,delegate_no,del_table_name,fc_del_session_table_name,fc_session_entry_table_name,scan_system_name)
					primary_ids.append(primary_id)


		data_from_logs_table = {"conf_id" : conf_id, "scan_updated_at" : curr_dt }
		update_logs  = FCModel().saveFCScanDataFromLogs(primary_ids, data_from_logs_table)
			
		return "Total inserted records is "+ str(no_of_rows) + " ."			
	else :
		return "No Food scanning Records in error logs table !."

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