Sindbad~EG File Manager
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.model.CMEScanModel import CMEScanModel
from itertools import groupby
from operator import itemgetter
import datetime
import csv
from io import StringIO
import io
from flask import Response
import xlwt
from datetime import datetime
app = Blueprint('cme', __name__)
@app.route('<int:conf_id>/<conf_key>/dashboard_login',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def CMEDashboard(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
if conf:
conf_schema = conf['conf_schema']
conf_start_time = conf["conf_start_time"]
conf_end_time = conf["conf_end_time"]
date_list = [{'conf_date': (conf_start_time + timedelta(days=i)).strftime('%d-%m-%Y')} for i in range((conf_end_time - conf_start_time).days + 1)]
get_count = CMEScanModel().get_cme_dashboard_data(conf_id,conf_schema)
return render_template('cmescan/cme_dashboard.html',conf=conf,session_data=get_count,conf_id=conf_id,conf_key=conf_key,date_list=date_list)
else:
return "<h1>Invalid URL </h1>"
@app.route('/cme_reports_dashboard', methods = ["GET", "POST"])
def CMEReportsDashboard():
try:
conf_id = request.values.get("conf_id") or 0
conf_key = request.values.get("conf_key") or None
total_count = 0
conf = Auth.getConf(conf_id,conf_key)
conf_schema = conf["conf_schema"]
now = datetime.now()
current_dt = now.strftime("%d-%m-%Y %H:%M:%S")
delegate_data = CMEScanModel().get_cme_dashboard_view_data(conf_id,conf_schema)
html_data = render_template('cmescan/cme_scan_report_table.html' , delegate_data = delegate_data,total_count=total_count,conf=conf,conf_id=conf_id)
role_data = render_template('cmescan/cme_dashboard.html' , delegate_data = delegate_data,conf=conf,conf_id=conf_id)
data = { 'html_data' : html_data ,'delegate_data' : delegate_data, 'msg' :'success' ,'current_dt' : current_dt,'total_count': total_count ,'status' : 1 }
json_data = json.dumps(data ,default =str)
return json_data
except Exception as e:
data = { 'html_data' : "" ,"delegate_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>/cmescan_login', methods = ["GET", "POST"])
# def CMEScanLogin(conf_id,conf_key):
# try:
# now = datetime.now()
# current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
# conf_data = CMEScanModel().GetConf(conf_id,conf_key)
# if conf_data:
# conf_name = conf_data['conf_name']
# return render_template('cmescan/cme_signup_login.html',conf_id=conf_id,conf_key=conf_key,conf_data=conf_data,conf_name=conf_name)
# else:
# return "<h2 style= 'color:red;text-align:center' ; >Invalid Session </h2>"
# except Exception as e:
# msg = str(e)
# flash(msg,"errorMsg")
# return redirect(url_for('cme.CMEScanLogin',conf_id=conf_id,conf_key=conf_key))
# @app.route('/<int:conf_id>/<conf_key>/post_cmescan_login', methods = ["GET", "POST"])
# def postCMEScanLogin(conf_id,conf_key):
# if request.method == 'POST':
# username = request.form['username']
# password = request.form['password']
# conf = Auth.getConf(conf_id,conf_key)
# if conf :
# db_pass = conf['badge_login_password']
# if password == db_pass:
# admin_id = conf['conf_id']
# session['cmescansession'] = conf
# return redirect (url_for('cme.getCMEScan',conf_id=conf_id ,conf_key = conf_key))
# else:
# flash("Password is mismatch" , "errorMsg")
# return redirect (url_for('cme.CMEScanLogin',conf_id=conf_id ,conf_key= conf_key))
# else:
# flash("Username is not registered." , "errorMsg")
# return redirect (url_for('cme.CMEScanLogin',conf_id=conf_id ,conf_key= conf_key))
# else :
# return "Method not allowed"
@app.route('/<int:conf_id>/<conf_key>/cme_search', methods = ["GET", "POST"])
def getCMESearch(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
count = 0
if conf :
signup_for_alldays = conf["signup_for_alldays"] # March 07 2023
conf_schema = conf["conf_schema"]
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
curr_date = now.strftime("%Y-%m-%d")
# curr_date = '2023-03-24'
delegateData = CMEScanModel().delegateDataForCMEScan(conf_id,signup_for_alldays,curr_date,conf_schema)
if delegateData:
for index,value in enumerate(delegateData):
count_1 = value['signed_on']
if count_1:
count = count+1
return render_template('cmescan/cme_search_delegate.html',conf_id=conf_id,conf_key=conf_key,total=count)
else :
return "<h4 style='color:red;'> Invalid URL </h4>"
@app.route('/<int:conf_id>/<conf_key>/post_cme_search', methods = [ "POST"])
def postCMESearch(conf_id,conf_key):
if request.method == 'POST':
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
curr_date = now.strftime("%Y-%m-%d")
# curr_date = '2023-03-24'
search_data = request.form['search_delegate']
btn = request.values.get('search_btn')
conf = Auth.getConf(conf_id,conf_key)
signup_for_alldays = conf["signup_for_alldays"]
conf_schema = conf["conf_schema"]
search_data = search_data.strip()
if btn == 'Search Del. No':
delegatesData = CMEScanModel().usp_search_cme_points(search_data,1,conf_id,signup_for_alldays,curr_date,conf_schema)
else:
delegatesData = CMEScanModel().usp_search_cme_points(search_data,0,conf_id,signup_for_alldays,curr_date,conf_schema)
if delegatesData :
msg = None
else:
msg = "No Data"
delegate_data_and_count = CMEScanModel().syncAllDataWithSignedCount(conf_id,curr_date,signup_for_alldays,conf_schema)
if delegate_data_and_count :
for index,value in enumerate(delegate_data_and_count) :
if index == 0 :
delegate_data = value
if index == 1 :
signed_count_1 = value
if signed_count_1 :
signed_count = signed_count_1[0]["signed_count"]
# count = 0
return render_template('cmescan/cme_search_delegate.html',members=delegatesData,msg=msg,conf_id=conf_id,conf_key=conf_key,total=signed_count,search_data=search_data)
else:
return redirect(url_for('cme.getCMESearch',conf_id=conf_id,conf_key=conf_key))
# else:
# flash("Session Expired","errorMsg")
# return redirect(url_for('cme.CMEScanLogin' ,conf_id = conf_id,conf_key= conf_key))
@app.route('/<int:conf_id>/<conf_key>/insert_cme_signup', methods = ["GET", "POST"])
@RouteGroup.login_required
def InsertCMESignup(conf_id,conf_key):
try:
signed_by = request.values.get('signup') or None
comments = request.values.get('remarks') or None
delegate_no = request.values.get('delegate_no')
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
curr_date = now.strftime("%Y-%m-%d")
# curr_date = '2023-03-24'
conf = Auth.getConf(conf_id,conf_key)
signup_for_alldays = conf["signup_for_alldays"]
if conf :
conf_schema = conf["conf_schema"]
else :
return "<h4 style='color:red;'> Invalid URL</h4>"
update_and_get_count = CMEScanModel().updateAndGetSignedCount(conf_id,delegate_no,curr_dt,signed_by,comments,curr_date,signup_for_alldays,conf_schema)
if update_and_get_count :
for index,value in enumerate(update_and_get_count) :
if index == 0 :
is_valid_1 = value
if index == 1 :
signed_on_1 = value
if index == 2 :
signed_count_1 = value
if signed_count_1 :
signed_count = signed_count_1[0]["signed_count"]
datas = {"msg" : "success" ,"status" : 1,'signup_date':curr_date,'total_signed_on':signed_count}
json_data = json.dumps(datas,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('/<int:conf_id>/<conf_key>/cme_scan_logout', methods = ["GET", "POST"])
def CMEScanLogout(conf_id,conf_key):
if session.get("cmescansession") :
session.pop('cmescansession', None)
else :
pass
return redirect(url_for('cme.CMEScanLogin' ,conf_id = conf_id,conf_key= conf_key))
# Average : {{((total.total_signed_on/total.total_count)*100)|round(2)}}
@app.route('/<int:conf_id>/<conf_key>/get_delegate_data_cme', methods = ["GET", "POST"])
def getDelegateDataCME(conf_id,conf_key):
try:
if session.get('cmescansession'):
delegate_no = request.values.get('delegate_no')
delegateData = CMEScanModel().getDelegateDataCMEScan(conf_id,delegate_no)
datas = {'prefix':delegateData['prefix'],'full_name':delegateData['full_name'],'email':delegateData['email'],'mobile':delegateData['mobile'],'mc_number':delegateData['mc_number'],'mc_state_id':delegateData['mc_state_id'],'updated_at':delegateData['updated_at']}
json_data = json.dumps(datas,default=str)
return json_data
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('/mc_state', methods = ["GET","POST"])
def MCState():
country_id = request.values['country_id']
data = CMEScanModel().get_mcstates_of_india(country_id)
return json.dumps(data)
@app.route('/<int:conf_id>/<conf_key>/update_delegatedata_cme', methods = ["GET", "POST"])
def updateDelegateDataCME(conf_id,conf_key):
try:
if session.get('cmescansession'):
delegate_no = request.values.get('delegate_no')
prefix = request.values.get('prefix') or None
full_name = request.values.get('full_name') or None
email = request.values.get('email') or " "
mobile = request.values.get('mobile') or " "
mc_number = request.values.get('mc_number') or None
mc_state_id = request.values.get('mc_state_id') or None
conf = Auth.getConf(conf_id,conf_key)
del_table_name = conf['del_table_name']
updated_data = CMEScanModel().updateDelegatedata_cme(del_table_name,prefix,full_name,email,mobile,mc_state_id,mc_number,delegate_no,conf_id)
if updated_data:
for index,value in enumerate(updated_data) :
if index == 0:
userData = value[0]
if userData and userData['user_id']:
total_count = CMEScanModel().count_email(userData['user_id'],userData['email'],get_conf['society_id'])
total_count = total_count["count"]
if int(total_count) > 0 :
msg="Email id already exist, upadated only in delegate table"
else:
data = {
'full_name' : full_name,
'prefix' : prefix,
'email' : email,
'mobile' : mobile,
'mc_number' : mc_number,
'mc_state_id' :mc_state_id,
'updated_at' : datetime.now()
}
output = CMEScanModel().update_member(userData['user_id'],data)
msg ="Successfully updated"
else:
msg="Successfully updated. "
data = { "msg" : msg ,"status" :1}
json_data = json.dumps(data,default=str)
return json_data
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('/<int:conf_id>/<conf_key>/cme_scan', methods = ["GET"])
@RouteGroup.conf_required
@RouteGroup.conf_active_required
@RouteGroup.login_required
def getCMEScan(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
count = 0
if conf :
conf_schema = conf["conf_schema"]
signup_for_alldays = conf["signup_for_alldays"]
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
curr_date = now.strftime("%Y-%m-%d")
delegateData = CMEScanModel().delegateDataForCMEScan(conf_id,conf_schema,signup_for_alldays,curr_date)
if delegateData:
for index,value in enumerate(delegateData):
count_1 = value['signed_on']
if count_1:
count = count+1
return render_template('cmescan/cme_scan_to_signin.html',conf_id=conf_id,conf_key=conf_key,total=count,conf=conf)
else :
return "<h4 style='color:red;'> Invalid URL </h4>"
@app.route('/<int:conf_id>/<conf_key>/post_cme_scan', methods = [ "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.conf_active_required
def PostCMEScan(conf_id,conf_key):
if request.method == 'POST':
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
curr_date = now.strftime("%Y-%m-%d")
delegate_no = request.values.get('delegate_no',0)
conf_id = request.values.get('conf_id')
conf = Auth.getConf(conf_id,conf_key)
signup_for_alldays = conf["signup_for_alldays"]
if conf :
conf_schema = conf['conf_schema']
else :
return "<h4 style='color:red;'> Invalid URL</h4>"
try:
int(delegate_no)
except Exception as e:
delegate_no = 0
if int(delegate_no) >0 :
delegatesData = CMEScanModel().usp_search_cme_points(delegate_no,2,conf_id,signup_for_alldays,curr_date,conf_schema)
if delegatesData :
msg = None
else:
msg = "No Data"
get_cme_scandata = CMEScanModel().getCMEScanybydelegaateno(conf_id,delegate_no,conf_schema)
# print(conf_id,delegate_no,curr_dt,'delegate','CME Scan',curr_date,signup_for_alldays,conf_schema)
update_and_get_count = CMEScanModel().update_badge_scan_signup(conf_id,delegate_no,curr_dt,'delegate','CME Scan',curr_date,signup_for_alldays,conf_schema)
if update_and_get_count :
for index,value in enumerate(update_and_get_count) :
if index == 0 :
statuscode = value[0]["statuscode"]
if index == 1 :
msg = value[0]["msg"]
if index == 2 :
signed_count = value[0]["signed_count"]
if index == 3:
delegatesData = value
if delegatesData:
delegatesData = delegatesData[0]
else:
delegatesData = None
html_data = render_template('cmescan/result.html',delegate_no=delegate_no,statuscode=statuscode,msg=msg,signed_count=signed_count,conf_id=conf_id,data=delegatesData,get_cme_scandata=get_cme_scandata,conf=conf)
# return render_template('cmescan/cme_scan_to_signin.html',delegate_no=delegate_no,statuscode=statuscode,msg=msg,signed_count=signed_count,conf_id=conf_id,data=delegatesData,get_cme_scandata=get_cme_scandata,conf=conf,html_data=html_data)
data = {"html_data" : html_data ,"status" : 1 , "msg" : "success"}
return json.dumps(data)
return "Invalid Delegate number"
# cme report start
@app.route('/<int:conf_id>/<conf_key>/cme_scan_report', methods = [ "POST","GET"])
def CMEScanReport(conf_id,conf_key):
# '%Y-%m-%d'
conf = Auth.getConf(conf_id,conf_key)
conf_start_time = conf["conf_start_time"]
conf_end_time = conf["conf_end_time"]
date_list = [{'conf_date': (conf_start_time + timedelta(days=i)).strftime('%d-%m-%Y')} for i in range((conf_end_time - conf_start_time).days + 1)]
if date_list:
return render_template("cmescan/cme_scan_report.html",conf_id= conf_id,conf_key= conf_key,date_list=date_list,conf=conf)
else:
return render_template("cmescan/cme_scan_report.html",conf_id= conf_id,conf_key= conf_key,date_list=date_list,conf=conf)
@app.route('/<int:conf_id>/<conf_key>/cme_scan_day_wise_report', methods = [ "POST","GET"])
def CMEScanDayWiseReport(conf_id,conf_key):
try:
conf = Auth.getConf(conf_id,conf_key)
if conf:
conf_schema = conf["conf_schema"]
conf_date = request.values.get("conf_date") or None
conf_date = "All" if conf_date == "All" else datetime.strptime(conf_date, "%d-%m-%Y").strftime("%Y-%m-%d")
delegate_data = CMEScanModel().getCMEScandelegateRecord(conf_id,conf_date,conf_schema)
html_data = render_template("cmescan/cme_scan_report_table.html",conf_id= conf_id,conf_key= conf_key,delegate_data=delegate_data,conf_date=conf_date,itemgetter=itemgetter,groupby=groupby)
data = {"html_data":html_data,"msg" : "" ,"status" :1}
return json.dumps(data,default=str)
else:
data = {"html_data":"","msg" : "INVALID LOGIN" ,"status" :2}
return json.dumps(data,default=str)
except Exception as e:
data = {"html_data":"","msg" : str(e) ,"status" : 401}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/<int:conf_id>/<conf_key>/cme_scan_single_day_report_download', methods = [ "POST","GET"])
def CMEScanDayWiseReportDownload(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
if conf:
conf_schema = conf["conf_schema"]
conf_name = conf["conf_name"]
conf_date = request.values.get("conf_date") or 'All'
delegate_data = CMEScanModel().getCMEScandelegateRecord(conf_id,conf_date,conf_schema)
if delegate_data:
# column_values = column_names
column_names = ["delegate_no","full_name","email","mobile","membership_no","role","mc_number","mc_state","signin_date","signed_on"]
column_names = ["s_no"] + column_names
inc_val = 1
for index,value in enumerate(delegate_data) :
value["s_no"] = inc_val
inc_val = inc_val + 1
return ExportDownloadXSL_single(delegate_data,column_names,conf_key,conf_name)
else :
flash("CME Scan Record does not exists." ,"errorMsg")
return redirect(url_for('cme.CMEScanReport',conf_id=conf_id,conf_key=conf_key))
else:
flash("Record does not exists." ,"errorMsg")
return redirect(url_for('cme.CMEScanReport',conf_id=conf_id,conf_key=conf_key))
def ExportDownloadXSL_single(result_data,sel_columns_for_xl,conf_key,conf_name):
file_name = "CME Scan Report"
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
output = io.BytesIO()
Workbook = xlwt.Workbook()
sh = Workbook.add_sheet('Report')
idx = 0
a = 0
for row in sel_columns_for_xl:
row_1 = row
if row_1 :
row_1 = row_1.replace("_", " ")
row_1 = row_1.upper()
row_1 = row_1.replace("FULL " , "") if "FULL" in row_1 else row_1
sh.write(0,a,row_1)
a+=1
b=0
for index,row in enumerate(result_data) :
for i in sel_columns_for_xl:
sh.write(idx+1, b, row[i])
b+=1
b=0
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M")
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+conf_name+"-"+file_name+"-"+curr_dt+".xls"})
# cme repot end
@app.route('/<int:conf_id>/<conf_key>/back', methods = ["GET", "POST"])
def Back(conf_id,conf_key):
if session.get("cmescansession") :
conf = Auth.getConf(conf_id,conf_key)
if conf :
return render_template('cmescan/cme_scan_to_signin.html',conf_id=conf_id,conf_key=conf_key)
else :
return "<h4 style='color:red;'> Invalid URL </h4>"
else:
flash("Session Expired","errorMsg")
return redirect(url_for('cme.CMEScanLogin' ,conf_id = conf_id,conf_key= conf_key))
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists