Sindbad~EG File Manager

Current Path : /home/numerotech/conf-cmescan.numerotech.com/conference_cmescan/core/controller/
Upload File :
Current File : //home/numerotech/conf-cmescan.numerotech.com/conference_cmescan/core/controller/CMEController.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.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