Sindbad~EG File Manager

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

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json
import datetime
from datetime import timedelta,date,datetime
from flask import session, app
from .. import Cryptography,Auth,RouteGroup,Helper
from core.library.email import EMAIL
from core.model.HallLogsModel import HallLogsModel
from core.model.BadgeModel import BadgeModel
import base64
from urllib.parse import unquote

app = Blueprint('halllogs', __name__)


@app.route('/<int:conf_id>/<conf_key>/hall_login', methods = ["GET", "POST"])
def HallLogin(conf_id,conf_key):
	return render_template('hall_logs/login.html',conf_id=conf_id,conf_key=conf_key)
	
@app.route('/<int:conf_id>/<conf_key>/post_hall_login', methods = ["GET", "POST"])
def postHallLogin(conf_id,conf_key):
	if request.method == 'POST':
		pin_number = request.values.get('pin_number')
		pin_number_bytes = pin_number.encode("ascii")
		base64_bytes = base64.b64encode(pin_number_bytes)
		pin_number_string = base64_bytes.decode("ascii")
		return redirect(url_for('halllogs.ScanLogs',conf_id=conf_id,conf_key=conf_key ,pin= pin_number_string))
		
	else:
		return "Please Try again"

@app.route('/<int:conf_id>/<conf_key>/scan_logs', methods = ["GET", "POST"])
def ScanLogs(conf_id,conf_key):
	pin_number = request.values.get("pin")
	try:
		get_conf  = BadgeModel().GetConf(conf_id,conf_key)
		if get_conf :
			del_table_name = get_conf["del_table_name"]
		else :
			return "<h4 style='color:red;'> Invalid URL </h4>"	
		if pin_number :
			pin_number     = unquote(pin_number)
			b64_pin_number = unquote(pin_number)
			base64_bytes   = pin_number.encode("ascii") 
			sample_bytes   = base64.b64decode(base64_bytes) 
			pin_number_str = sample_bytes.decode("ascii")
			pin_number     = int(pin_number_str)
			now            = datetime.now()
			current_date   = now.strftime('%Y-%m-%d')
			current_dt   	= now.strftime('%Y-%m-%d %H:%M:%S')
# 			current_dt = '2023-08-04 09:40:00'
# 			current_date = '2023-08-04'
			if pin_number > 0 :
				hallData = HallLogsModel().gethall(conf_id,pin_number)

				session["hallsession"] = hallData
				if hallData:
					result = HallLogsModel().usp_generate_session_table_scan_logs(conf_id,hallData['abs_hall_id'])
					# print(result)
					msg = "Scan"
					currentsession = HallLogsModel().getActiveSessionHallsModel(get_conf['abs_ses_table_name'],conf_id,hallData['abs_hall_id'],current_date)
				# 	currentsession = HallLogsModel().getCurrentSessionHallsModel(get_conf['abs_ses_table_name'],conf_id,current_dt,hallData['abs_hall_id'],current_date)
					# print(currentsession)
					confdates = HallLogsModel().getconfdatesHallModel(conf_id)
					return render_template('hall_logs/scan_logs.html',conf_id=conf_id,conf_key=conf_key,hallData=hallData,del_table_name=del_table_name,msg=msg,current_date=current_date,currentsession=currentsession,now=now,confdates=confdates,b64_pin_number=b64_pin_number)
				else:
					flash("Invalid Pin number","errorMsg")
					return redirect(url_for('halllogs.HallLogin',conf_id=conf_id,conf_key=conf_key))
			else : 
				flash("Invalid Pin" , "errorMsg")
				return redirect(url_for('halllogs.HallLogin',conf_id=conf_id,conf_key=conf_key))
		else : 
			flash("Please try again" , "errorMsg")
			return redirect(url_for('halllogs.HallLogin',conf_id=conf_id,conf_key=conf_key))	
	except Exception as e:
		flash(str(e) , "errorMsg")
		return redirect(url_for('halllogs.HallLogin',conf_id=conf_id,conf_key=conf_key))
			

@app.route('/<int:conf_id>/<conf_key>/insert_scan_logs', methods = ["GET", "POST"])
def insertScanLogs(conf_id,conf_key):
	try:
		if session.get("hallsession") :
			msg = ""
			bg_color = "red"
			audio_id = "error_audio" 
			
			delegate_no    = request.values.get('delegate_no') or None
			if delegate_no : 
				delegate_no = int(delegate_no)
			hall_id        = request.values.get('hall_id') or None
			if hall_id : 
				hall_id = int(hall_id)
			del_table_name = request.values.get('del_table_name') or None
			now            = datetime.now()
			dt_string      = now.strftime("%Y-%m-%d")
			datas ={
			'delegate_no'   : delegate_no,
			'hall_id'       : hall_id,
			'scan_at'       : now,
			'created_date'  : dt_string,
			'created_at'    : now
			}
	
			data = HallLogsModel().usp_save_hall_scanned_data(conf_id,delegate_no,hall_id,del_table_name)
			
			if data:
				result = data[0]
				msg = result["msg"]
				if "Not" not  in msg :
					audio_id = "thanku" 
					if "Already" in msg :
						bg_color = "orange"
					else:	
						bg_color = "green"

				else :
					pass	


				data = {"bg_color":bg_color,"audio_id":audio_id,"msg":msg, 'status': 1}
				json_data = json.dumps(data,default=str)
				
			else: 
				data = {"bg_color" : bg_color,"audio_id":audio_id,"msg":"try again", 'status': 2}
				json_data = json.dumps(data,default=str)

				

			return json_data	
		else:
			audio_id = "error_audio" 
			bg_color = "red"
			data = {"bg_color" : bg_color,"audio_id":audio_id, "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,default=str)
			return json_data

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


@app.route('/<int:conf_id>/<conf_key>/refresh_session', methods = ["GET", "POST"])
def RefreshSession(conf_id,conf_key):
	try:
		if session.get("hallsession") :
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			abs_hall_id = request.values.get('hall_id')
			now            = datetime.now()
			current_date   = now.strftime('%Y-%m-%d')
			current_dt   	= now.strftime('%Y-%m-%d %H:%M:%S')
# 			currentsession = HallLogsModel().getCurrentSessionHallsModel(get_conf['abs_ses_table_name'],conf_id,current_dt,abs_hall_id,current_date)
			currentsession = HallLogsModel().getActiveSessionHallsModel(get_conf['abs_ses_table_name'],conf_id,abs_hall_id,current_date)

			html_data = render_template('hall_logs/display_session.html',currentsession=currentsession,conf_id=conf_id,conf_key=conf_key)
			print(html_data)
			data = { 'status': 1,'html_data':html_data}
			json_data = json.dumps(data,default=str)
			return json_data
		else:
			bg_color = "red"
			data = {"bg_color" : bg_color, "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,default=str)
			return json_data
	except Exception as e:
		raise e


@app.route('/<int:conf_id>/<conf_key>/close_session', methods = ["GET", "POST"])
def CloseSession(conf_id,conf_key):
	try:
		if session.get("hallsession") :
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			abs_hall_id = request.values.get('hall_id')
			current_date   = now.strftime('%Y-%m-%d')
			current_dt   	= now.strftime('%Y-%m-%d %H:%M:%S')
			# print(currentsession)
			
			data = { 'status': 1,'session_name':currentsession['session_name']}
			json_data = json.dumps(data,default=str)
			return json_data
		else:
			bg_color = "red"
			data = {"bg_color" : bg_color, "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,default=str)
			return json_data
	except Exception as e:
		raise e



@app.route('/<int:conf_id>/<conf_key>/hall_logout', methods = ["GET", "POST"])
def HallLogout(conf_id,conf_key):
	if session.get("hallsession") :
		session.pop('hallsession', None)
	else :
		pass
	return redirect(url_for('halllogs.HallLogin' ,conf_id = conf_id,conf_key= conf_key))


@app.route('/<int:conf_id>/<conf_key>/refresh_hall_report', methods = ["GET", "POST"])
def Refreshhallreport(conf_id,conf_key):
	try:
		if session.get("hallsession") :
			abs_hall_id = request.values.get('hall_id')
			current_date = request.values.get('current_date')
			report_data = HallLogsModel().gethallreportHallsModel(conf_key,abs_hall_id,current_date)
			html_data      = render_template('hall_logs/hall_report_table_v1.html',hallData=report_data,conf_id=conf_id,conf_key=conf_key)
			data           = { 'status': 1,'html_data':html_data}
			json_data      = json.dumps(data,default=str)
			return json_data
		else:
			bg_color = "red"
			data = {"bg_color" : bg_color, "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,default=str)
			return json_data
	except Exception as e:
		raise e

@app.route('/<int:conf_id>/<conf_key>/refresh_session_hall_report', methods = ["GET", "POST"])
def Refreshhallsessionreport(conf_id,conf_key):
	try:
		if session.get("hallsession") :
			abs_hall_id = request.values.get('hall_id')
			current_date = request.values.get('current_date')
			report_data = HallLogsModel().gethallsessionreportHallsModel(conf_key,abs_hall_id,current_date)
			html_data      = render_template('hall_logs/hall_session_report_table_v1.html',hallData=report_data,conf_id=conf_id,conf_key=conf_key)
			data           = { 'status': 1,'html_data':html_data}
			json_data      = json.dumps(data,default=str)
			return json_data
		else:
			bg_color = "red"
			data = {"bg_color" : bg_color, "msg" : "INVALID LOGIN" ,"status" :3}
			json_data = json.dumps(data,default=str)
			return json_data
	except Exception as e:
		raise e
		


@app.route('/send_hall_report_mail',methods = [ "POST"])
def SendHALLReportMail():
	print("yes comming ")
	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']
	abs_hall_id   = request.values.get('hall_id')
	curr_date     = now.strftime("%d")
	get_conf      = BadgeModel().GetConf(conf_id,conf_key)
	conf_name 	 	= get_conf["conf_name"]
	b64_pin_number = request.form['b64_pin_number']
	# 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("hallsession") :
			session_data      = session.get("hallsession")
			report_data       = HallLogsModel().gethallreportHallsModel(conf_key,abs_hall_id,curr_date)
# 			print("....................................",report_data)

			if report_data:
				mail_template = render_template('hall_logs/hall_report_mail.html' , hallData = report_data,conf_id=conf_id)
	# 			subject       = " "+ conf_name+"- Food counter Report on " + current_date
				subject       = f"{conf_name} - Hall Count 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('halllogs.ScanLogs',conf_id=conf_id,conf_key=conf_key ,pin= b64_pin_number))
		else :
			flash("Invalid  session" , "errorMsg")
			return redirect(url_for('halllogs.ScanLogs' ,conf_id = conf_id , conf_key=conf_key))
	else :
		flash("Please enter atleast one mail-id ." ,"errorMsg")
		return redirect(url_for('halllogs.ScanLogs' ,conf_id = conf_id , conf_key=conf_key))		

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