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/BadgeUserController_20230109.py

from flask import request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json
from core.model.BadgeModel import BadgeModel
from core.model.FoodSessionModel import FoodSessionModel
from core.model.BadgeUserModel import BadgeUserModel

from .. import Cryptography
from flask import  app
from random import randint
import datetime
from datetime import timedelta,date,datetime,time
from werkzeug.utils import secure_filename
from os.path import join, dirname, realpath
import os


import pandas as pd
import numpy as np


from core.library.BackgroundTasks import BackgroundTasks


app = Blueprint('badge_user', __name__)


# Testing 
@app.route('/background', methods = ["GET", "POST"])
def Background():
	print(" Background function calling ...")
	t = BackgroundTasks()
	t.start()
	return "success"
# Testing end

@app.route('/badge/<int:conf_id>/<conf_key>', methods = ["GET", "POST"])
def BadgeHome(conf_id,conf_key):
	now       = datetime.now()
	curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")

	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if session.get('badge'):
		BadgeUserModel().createConfTables(conf_id,conf_key,curr_dt) 
		return redirect(url_for('badge_user.BadgeDashborad' ,conf_id=conf_id,conf_key=conf_key)) 
		if get_conf :
			BadgeUserModel().createConfTables(conf_id,conf_key,curr_dt)
			return render_template('badge_users/login_screen.html' ,conf_data = get_conf,conf_id=conf_id,conf_key=conf_key)
		else : 
			flash("Invalid URL" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))	
	else:

		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))	
	
### ---------------------------------------------------------------------- ###
@app.route('/<int:conf_id>/<conf_key>/badge_login', methods = ["GET"])
def BadgeLogin(conf_id,conf_key):
	conf_name = None
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf :
		conf_name = get_conf["conf_name"]
		now       = datetime.now()
		curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
		BadgeUserModel().createConfTables(conf_id,conf_key,curr_dt)
	else :	
		return "<h4 style='color:red;'>Invalid URL </h4>"	
	if session.get('badge'): 
		if get_conf :
			return redirect(url_for('badge_user.BadgeDashborad' ,conf_id=conf_id,conf_key=conf_key)) 
		else:
			flash("Invalid URL" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))
	else:
		if get_conf :
			return render_template('badge_users/login_screen.html' ,conf_data = get_conf,conf_id=conf_id ,conf_key= conf_key,conf_name=conf_name)
		else:
			flash("Invalid URL" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))		

# Post_login1 
@app.route('/badge_post_login', methods = ["POST"])
def BadgePostLogin():
	if request.method =="POST" :
		username  = request.form['username']
		password  = request.form['password']
		conf_id   = request.form['conf_id']
		conf_key  = request.form['conf_key']

		get_conf  = BadgeModel().checkUsername(username,conf_id)
		if get_conf : 
			db_pass =  get_conf['badge_login_password']
			if password == db_pass:
				admin_id = get_conf['conf_id']

				session['badge']   =  get_conf
				encrypted_admin_id = Cryptography.encrypt(conf_id)
				return redirect (url_for('badge_user.BadgeDashborad',conf_id=conf_id ,conf_key = conf_key))
			else:
				flash("Password is mismatch" , "errorMsg")
				return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key= conf_key))
		else:
			flash("Username is not registered." , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key= conf_key))
	else :
		return "Method not allowed"			

# logout route
@app.route('/<int:conf_id>/<conf_key>/badge_logout', methods = ["GET", "POST"])
def BadgeLogout(conf_id,conf_key):
	if session.get('badge'):
		session.pop('badge')
	else : 
		pass
		
	session.pop('_flashes', None)
	return redirect(url_for('badge_user.BadgeLogin',conf_id=conf_id,conf_key=conf_key))			

@app.route('/<int:conf_id>/<conf_key>/badge_dashboard', methods = ["GET", "POST"])
def BadgeDashborad(conf_id,conf_key):
	if session.get('badge'):
		conf_data = session.get('badge') 
		conf_name = conf_data['conf_name']
		return render_template('badge_users/dashbord.html',conf_id=conf_id ,conf_key=conf_key,conf_name=conf_name)
	else:
		flash("Invalid Login" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))		


@app.route('/<int:conf_id>/<conf_key>/registered_users', methods = ["GET"])
def RegisteredUsers(conf_id,conf_key):
	if session.get('badge'):
		conf_data      = session.get('badge') 
		conf_name      = conf_data['conf_name']
		del_table_name = conf_data['del_table_name']
		get_conf = BadgeModel().GetConf(conf_id,conf_key)
		get_role_data =	BadgeModel().getRole(conf_id)
		if get_conf :
			
			registered_users = BadgeModel().AllRegUsers(conf_id,del_table_name)
			return render_template('badge/registered_users.html' ,conf_data = get_conf,conf_id=conf_id ,conf_key= conf_key,registered_users =registered_users,conf_name=conf_name,b_role =get_role_data)
		else :
			flash("Invalid URL" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))				

	else : 
		flash("Invalid URL" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))				

@app.route('/<int:conf_id>/<conf_key>/edit_data/<int:delegate_id>', methods =  ["GET","POST"])
def EditData(conf_id,conf_key,delegate_id):
	if session.get('badge'):
		conf_data      = session.get('badge') 
		conf_name      = conf_data['conf_name']
		del_table_name = conf_data['del_table_name']

		states = BadgeModel().get_states()
		data   = BadgeModel().EditRegisteredData(conf_id,delegate_id,del_table_name)
		return render_template('badge/edit_data.html',data=data,states=states,conf_id=conf_id ,conf_key=conf_key,conf_name=conf_name)
	else :
		flash("Invalid URL" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))
		
@app.route('/<int:conf_id>/<conf_key>/post_edit_data',methods = ['POST', 'GET'])
def PostEditData(conf_id,conf_key):
	now = datetime.now()
	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
	if request.method=="POST":
		if session.get('badge'):
			conf_data      = session.get('badge') 
			conf_name      = conf_data['conf_name']
			# del_table_name = conf_data['del_table_name']
			get_conf  = BadgeModel().GetConf(conf_id,conf_key)
			if get_conf :
				del_table_name = get_conf["del_table_name"]
			else :
				flash("Invalid login" , "errorMsg")
				return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))

			delegate_id = request.values.get('delegate_id')
			delegate_id = int(delegate_id)
			full_name   =  request.values.get('full_name' ,'')  or ''
			email		= request.values.get('email'  ,'') or ''
			mobile		= request.values.get('mobile'  ,'') or ''
			city        =  request.values.get('city'  ,'') or ''
			state_name  =  request.values.get('state_name'  ,'') or ''
			company_name = request.values.get('company_name') or ''
			counter   = request.values.get('counter') or 0
			batch     = request.values.get('batch'  ,'') or ''
			role      = request.values.get('role'  ,'') or ''
			if  batch  :
				batch = batch.upper()
			if  role :
				role  = role.upper()
	
			#######
			update_stmt = "update "+ del_table_name + " set full_name = '"+full_name +"' , email = '"+ email +"' ,mobile='"+mobile+"' ,  city = '"+city+"' , state = '"+state_name+"' ,company_name='"+company_name+"', counter = "+str(counter)+" , batch = '"+batch+"' , role = '"+role+"' ,updated_at = '"+current_dt+"'    where delegate_id = " + str(delegate_id) + " ;"

			updated_data = BadgeModel().UpdateDelegates(update_stmt,delegate_id,conf_id)
			flash("Record updated ." , "successMsg")
			return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id ,conf_key= conf_key))
			####
			# check_email	=	BadgeModel().check_email_for_update(email,delegate_id,del_table_name)
			# if (check_email ['email_count'] >=1):
			# 	flash('Email Id Already Exists.','errorMsg')
			# 	return redirect (url_for ('badge_user.EditData',delegate_id=delegate_id,conf_id=conf_id ,conf_key= conf_key))
			# else:
			# 	update_stmt = "update "+ del_table_name + " set full_name = '"+full_name +"' , email = '"+ email +"' , city = '"+city+"' , state = '"+state_name+"' where delegate_id = " + str(delegate_id) + " ;"
			# 	updated_data = BadgeModel().UpdateDelegates(update_stmt,delegate_id,conf_id)
			# 	flash("Record updated ." , "successMsg")
			# 	return redirect(url_for('badge_user.RegisteredUsers',conf_id=conf_id ,conf_key= conf_key))
		else :
			flash("Invalid URL" , "errorMsg")
			return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))
	else:
		flash("Please try again")
		return redirect(url_for('badge_user.EditData',delegate_id=delegate_id,conf_id=conf_id ,conf_key= conf_key))



#Move delegate records from delegates table into conf-delegate table
@app.route('/<int:conf_id>/<conf_key>/move_delegates', methods = ["GET","POST"])
def MoveDelegates(conf_id,conf_key):
	now = datetime.now()
	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
	getFcConfData = FoodSessionModel().getFcConfData(conf_id,conf_key)
	if getFcConfData :
		conf_del_table = getFcConfData["del_table_name"]
		checkMaxDelegate = BadgeModel().getMaxDelegateNo(conf_del_table)
		max_del_no = checkMaxDelegate['delegate_no']
		if max_del_no :
			pass 
		else :
			max_del_no = 0
		move_records = BadgeModel().delegateMoveToConfDelegate(conf_id,conf_del_table,max_del_no,current_dt)
		flash(move_records ,"successMsg")
		return redirect (url_for('badge_user.BadgeDashborad',conf_id=conf_id,conf_key=conf_key))
	else :
		return "Invalid URL"
		

##### # nov 07 2022
@app.route('/<int:conf_id>/<conf_key>/role_update', methods = ["GET","POST"])
def RoleUpdate(conf_id,conf_key):
	update_stmt         = ""
	counter   			= request.form['counter']
	batch   			= request.form['batch']
	role   				= request.form['role']
	delegate_no_from   	= request.form['delegate_no_from']
	delegate_no_to   	= request.form['delegate_no_to'] or 0
	delegate_no_from    = int(delegate_no_from)
	delegate_no_to      = int(delegate_no_to)
	batch               = batch.upper()
	role                = role.upper()
	now                 = datetime.now()
	curr_dt             = now.strftime("%Y-%m-%d %H:%M:%S")
	get_conf = BadgeModel().GetConf(conf_id,conf_key)
	if get_conf  :
		del_table_name = get_conf["del_table_name"]
	else : 
		flash("Invalid login" ,"errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))
	if delegate_no_from and delegate_no_to == 0 :
		update_stmt = update_stmt + " update  " + del_table_name + " set counter = "+(counter)+", batch ='"+str(batch)+"', role ='" +role+"' ,updated_at = '"+curr_dt+"'  where delegate_no >= "+str(delegate_no_from)+"; \n"
	else : 	
		if delegate_no_from < delegate_no_to :
			# if from delgate number is less than delegate to number
			update_stmt = update_stmt + " update  " + del_table_name + " set counter = "+(counter)+", batch ='"+str(batch)+"', role ='" +role+"', updated_at = '"+curr_dt+"'  where delegate_no between "+str(delegate_no_from)+" and  "+str(delegate_no_to)+"; \n"
		else : 
			flash("To delegate number must be  greater than from delegate number" ,"errorMsg")
			return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))
	 
	update_role = BadgeModel().updateCouterBatch(update_stmt)
	if update_role == "success" :
		flash("Successfully role updated" , "successMsg")
		return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))	
	else :
		msg = update_role
		flash(msg , "errorMsg")
		return redirect(url_for('badge_user.RegisteredUsers' ,conf_id=conf_id,conf_key= conf_key))		


# ------------ -------------- -------------
# csv import into conference-delegates records

@app.route('/<int:conf_id>/<conf_key>/bulk_upload', methods = ["GET","POST"])
def BulkUpload(conf_id,conf_key):
	conf_data = BadgeModel().GetConf(conf_id,conf_key)
	if conf_data :
		del_table_name    = conf_data["del_table_name"]
		del_table_columns = BadgeUserModel().getDelegatesTableColumn(conf_id,del_table_name)

		# if del_table_columns :
		return render_template('badge_users/upload_screen.html',conf_id=conf_id,conf_key=conf_key,conf_data=conf_data,del_table_columns=del_table_columns,del_table_name=del_table_name)
	else :
		flash("Invalid URL" , "errorMsg")
		return redirect (url_for('badge_user.BadgeLogin',conf_id=conf_id ,conf_key=conf_key))


	
@app.route('/<int:conf_id>/<conf_key>/post_upload_excel' , methods = ["POST"])
def PostUploadExcel(conf_id,conf_key):
	try:
		data_2      = {}
		all_data    = []
		del_nos     = []
		dub_del_nos = []
		check_dublicate_records = None

		now       = datetime.now()
		curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
		columnss = request.values.get("column_name", "None")

		file           = request.files['filess']
		del_table_name = request.values.get("del_table_name", "None")
		fileExtension  = request.values.get("fileExtension", "None")
		

		columns_1 = columnss.split(",")
		if fileExtension :
			fileExtension = fileExtension.lower()
			if fileExtension == "csv" :
				data = pd.read_csv(file)
			elif fileExtension == "xlsx" or fileExtension == "xls" :
				data = pd.read_excel(file)
			else :
				return_data = { "html_data" :"" ,"msg" : "CSV and xlsx file type only allowed to upload." ,"status" : 2}
				json_data = json.dumps(return_data,default=str)
				return json_data

					
		df    = data.to_dict('split')
		col_1 = df['columns']
		val_1 = df['data']
		
		delegate_no_index = columns_1.index('delegate_no')
		insert_values = "("
		insert_stmt = " INSERT INTO  temp_badge_delegates  ("+columnss+",created_at,conf_id"+")"+"values" 

		if delegate_no_index >= 0  :
			for i in val_1:
				index_value = 0
				for column in columns_1 :
					if delegate_no_index == index_value :
						del_no = i[index_value]
						del_nos.append(del_no)
					else :
						pass	

					values_1 = i[index_value]
					if pd.isnull(values_1) :
						# value_2 = None
						value_2 = ""
						insert_stmt = insert_stmt + " "
					else : 
						value_2     = str(values_1)

					data_2[column]  = value_2
					index_value     = index_value +1 
					# data_2["created_at"] = curr_dt

					if ".0" in value_2 :
						value_2 = value_2.replace(".0","")

					insert_values = insert_values+"'"+value_2+"',"

				insert_values = insert_values+ "'"+curr_dt+"','"+str(conf_id) +"'"	
				insert_values = insert_values+"),("		

				all_data.append(data_2)
				data_2 = {} # clear the temp dictionary

			insert_values = insert_values[:-2]	
			insert_query  = insert_stmt+insert_values

		else :
			return_data = { "html_data" :"" ,"msg" : "You must select  delegate Number field" ,"status" : 3}
			json_data = json.dumps(return_data,default=str)
			return json_data

		if len(del_nos) > 0 :
			columnss = columnss + ",created_at,conf_id"
			del_nos = str(del_nos)
			del_nos = del_nos.replace("[" ,"")
			del_nos = del_nos.replace("]" ,"")
			preview_records = BadgeUserModel().insertBulkUploadTempTable(conf_id,insert_query,columnss,del_table_name,del_nos)
			# print(preview_records)
			for index ,value in enumerate(preview_records) :
				if index == 0 :
					all_data = value
				if index == 1:
					check_dublicate_records = value
						

			# check_dublicate_records = BadgeUserModel().checkDuplicateRecords(del_nos,del_table_name,columnss)
		
		if  len(check_dublicate_records) == 0:
			check_dublicate_records = None
		else :
			for index,value  in enumerate(check_dublicate_records) :
				dub_del_no = value['delegate_no']	
				dub_del_nos.append(dub_del_no)

			if len(dub_del_nos)== 0 :
				dub_del_nos = None
			else:	
				pass	


		print(dub_del_nos)	

		html_data = render_template('badge_users/excel_data_preview_table.html' ,all_data =all_data,columns_1 = columns_1,str=str, dulicate_records =check_dublicate_records,dub_del_nos=dub_del_nos)	
		return_data = { "html_data" :html_data ,"msg" : "success" ,"status" : 1,'dub_del_nos' : dub_del_nos}
		json_data = json.dumps(return_data,default=str)
		return json_data
	except Exception as e:
		msg = "Please select exact columns and correct order"
		return_data = { "html_data" :"" ,"msg" : str(e) ,"status" : 401,'dub_del_nos' : dub_del_nos}
		json_data = json.dumps(return_data,default=str)
		return json_data


@app.route('/<int:conf_id>/<conf_key>/save_excel_data' , methods = ["POST"])
def SaveExcelData(conf_id,conf_key):
	try:
		data_2   = {}
		all_data = []
		# Added on Jan 09, 2023
		del_nos     = []
		dub_del_nos = []
		check_dublicate_records = None

		now       = datetime.now()
		curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
		columnss  = request.values.get("column_name", "None")
		file      = request.files['filess']
		del_table_name = request.values.get("del_table_name", "None")
		fileExtension  = request.values.get("fileExtension", "None")

		common_del_nos = request.values.get("common_del_nos", "None")
		print(common_del_nos)
		
		columns_1 = columnss.split(",")
		if fileExtension :
			fileExtension = fileExtension.lower()
			if fileExtension == "csv" :
				data = pd.read_csv(file)
			elif fileExtension == "xlsx" or fileExtension == "xls" :
				data = pd.read_excel(file)
			else :
				return_data = { "html_data" :"" ,"msg" : "CSV and xlsx file type only allowed to upload." ,"status" : 2}
				json_data = json.dumps(return_data,default=str)
				return json_data

					
		df    = data.to_dict('split')
		col_1 = df['columns']
		val_1 = df['data']
		insert_values = "("


		insert_stmt = " INSERT INTO " + del_table_name + "("+columnss+",created_at,conf_id"+")"+"values" 
		for i in val_1:
			index_value = 0
			for column in columns_1 :
				values_1 = i[index_value]
				if pd.isnull(values_1) :
					# value_2 = None
					value_2 = ""

					insert_stmt = insert_stmt + " "
				else : 
					value_2     = str(values_1)

				data_2[column]  = value_2
				index_value     = index_value +1 
				# data_2["created_at"] = curr_dt

				if ".0" in value_2 :
					value_2 = value_2.replace(".0","")
				insert_values = insert_values+"'"+value_2+"',"

			# insert_values = insert_values+ "'"+curr_dt+"'"	
			insert_values = insert_values+ "'"+curr_dt+"','"+str(conf_id) +"'"	
			# insert_values = insert_values[:-1]	
			insert_values = insert_values+"),("	
			
			all_data.append(data_2)

			data_2 = {} # clear the temp dictionary


		insert_values = insert_values[:-2]	

		insert_query = insert_stmt+insert_values

		insert_to_db = BadgeUserModel().insertBulkUpload(conf_id,del_table_name,insert_query)

		if insert_to_db == "success" :
			return_data = { "html_data" :"" ,"msg" : "Successfully uploaded." ,"status" : 1}
		else : 	
			return_data = { "html_data" :"" ,"msg" : str(insert_to_db) ,"status" : 2}

		json_data = json.dumps(return_data,default=str)
		return json_data
	except Exception as e:
		msg = "Please select exact columns and correct order"
		return_data = { "html_data" :"" ,"msg" : str(e) ,"status" : 401}
		json_data = json.dumps(return_data,default=str)
		return json_data







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