Sindbad~EG File Manager

Current Path : /home/numerotech/hs.numerotech.com/scan_v1/core/controller/
Upload File :
Current File : //home/numerotech/hs.numerotech.com/scan_v1/core/controller/HallLogsController_old.py

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


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  = HallLogsModel().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')
			d_current_date = now.strftime('%d-%m-%Y')
			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'])
					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)
					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,d_current_date=d_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"]
				code = result["code"] or 0
				if int(code) == 1:
					bg_color = "green"
				else:
					bg_color = "orange"
				# if "Not" not  in msg :
				# 	audio_id = "thanku" 
				# 	if "Already" in msg :
				# 		bg_color = "orange"
				# 	else:	
				# 		bg_color = "green"
				

				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  = HallLogsModel().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)
			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  = HallLogsModel().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')
			asession_id  = request.values.get('asession_id') or None
			idt  = request.values.get('idt') or None
			current_session = None
			if asession_id:
				current_session = HallLogsModel().GetSession(conf_id,asession_id)
			session_data = HallLogsModel().gethallSessions(conf_id,abs_hall_id,current_date)
			report_data  = None 
			report_data = HallLogsModel().gethallreportHallsModel(conf_key,abs_hall_id,current_date,asession_id)
			# print(session_data)
			html_data      = render_template('hall_logs/hall_report_table_v2.html',session_data=session_data,hallData=report_data,conf_id=conf_id,conf_key=conf_key,asession_id=asession_id,current_date=current_date,current_session=current_session,idt=idt)
			# 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():
	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      = HallLogsModel().GetConf(conf_id,conf_key)
	conf_name 	 	= get_conf["conf_name"]
	b64_pin_number = request.form['b64_pin_number']

	curr_date = request.values.get('mail_current_date')
	asession_id  = request.values.get('mail_asession_id') or None
	idt  = request.values.get('mail_idt') or None


	# 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")
			current_session =  None
			if asession_id:
				current_session = HallLogsModel().GetSession(conf_id,asession_id)

			hall_detail = HallLogsModel().Gethall(conf_id,abs_hall_id)
			report_data = HallLogsModel().gethallreportHallsModel(conf_key,abs_hall_id,curr_date,asession_id)
			if report_data:
				mail_template = render_template('hall_logs/hall_report_mail.html' , hallData = report_data,conf_id=conf_id,current_session=current_session,idt=idt)
	# 			subject       = " "+ conf_name+"- Food counter Report on " + current_date
				subject       = f"{conf_name} - {idt} - {hall_detail.get('hall_name')} - All Day Count Report"
				if current_session:
					subject       = f"{conf_name} - {idt} - {hall_detail.get('hall_name')} - {current_session.get('session_name')} - 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))		


@app.route('/<int:conf_id>/<conf_key>/day_halls_reports',methods = [ "GET","POST"])
def DayHallsReports(conf_id,conf_key):
	now  = datetime.now()
	data_data = HallLogsModel().getconfdatesHallModel(conf_id)
	return render_template('hall_logs/day_report.html',conf_id=conf_id,conf_key=conf_key,data_data=data_data)

@app.route('/day_halls_reports_mail',methods = [ "GET","POST"])
def DayHallsReportsMail():
	total_count    = 0
	scan_count     = 0
	now            = datetime.now()
	current_dt     = now.strftime("%d-%m-%Y %H:%M:%S")
	mail_ids       = request.form['mail_id']
	get_btn_value  = request.values.get('get_btn_value')
	conf_id        = request.form['conf_id']
	conf_key       = request.form['conf_key']
	get_conf       = HallLogsModel().GetConf(conf_id,conf_key)
	conf_name 	   = get_conf["conf_name"]
	report_date    = request.values.get('report_date')
	display_date   = datetime.strptime(report_date, "%Y-%m-%d").strftime('%d-%m-%Y')
	curr_date      = datetime.strptime(report_date, "%Y-%m-%d").strftime('%d')
	
	abs_session_data = HallLogsModel().usp_get_overall_hall_sessions_report_by_date(conf_id,conf_key,int(curr_date),report_date)
	sessions = defaultdict(list) # sub list with key 
	if abs_session_data:
		for r in abs_session_data:

			sessions[r["asession_id"]].append(r)
		# return jsonify(sessions)	
		mail_template   = render_template('hall_logs/hall_report_mail_all_sessions.html' , hallData = sessions,conf_id=conf_id,display_date=display_date)
		if get_btn_value == "preview_btn":
			return mail_template
		if get_btn_value == "send_mail_btn":
			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(","))
				subject       = f"{conf_name} -  {display_date} - All Day Count Report"
				for email in mail_list:
					EMAIL.FcReportMail(subject,mail_template,email)
				flash("Report mail has been sent. ","successMsg")	
				return redirect(url_for('halllogs.DayHallsReports',conf_id=conf_id,conf_key=conf_key ))
			else :
				flash("Please enter atleast one mail-id ." ,"errorMsg")
				return redirect(url_for('halllogs.DayHallsReports' ,conf_id = conf_id , conf_key=conf_key))		
		if get_btn_value == "download_pdf_button":
			if is_windows_os == 1:  
				config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
			else:
				config = None
				# return html
			if mail_template:
				return Response(pdfkit.from_string(mail_template,configuration=config),
						   mimetype="application/pdf",
						   headers={"Content-Disposition":
								"attachment;filename= All Scan Count Report - "+display_date+".pdf"})
	else :
		flash("Data Not exist" ,"errorMsg")
		return redirect(url_for('halllogs.DayHallsReports' ,conf_id = conf_id , conf_key=conf_key))

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