Sindbad~EG File Manager
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