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

from flask import request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json
from core.model.FirebaseModel import FirebaseModel
from core.model.BadgeModel import BadgeModel
from .. import Cryptography,Helper
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
# import ast
import csv
from io import StringIO
import io
from flask import Response
import xlwt
from flask import Flask, make_response
import pyexcel as pe
# from core.library.BackgroundTasks import BackgroundTasks
# import for img upload
import os
import base64
import boto3, botocore
from botocore.exceptions import ClientError
from PIL import Image



from firebase_admin import messaging,exceptions
import firebase_admin
from firebase_admin import auth,credentials
# from werkzeug.utils import secure_filename




app = Blueprint('firebase', __name__)

#----------------------- Firebase  -------------------------------

# Save FCM Token from Mobile-app 
@app.route('/save_fcm_token', methods =["GET","POST"])
def SaveFcmToken():
	now             = datetime.now()
	current_dt      = now.strftime("%Y-%m-%d %H:%M:%S")
	fb_user_id = 0
	try:
		conf_id 	= request.values.get('conf_id') or None
		user_id 	= request.values.get('user_id') or None
		app_name 	= request.values.get('app_name') or None
		device_type = request.values.get('device_type') or None
		fcm_token 	= request.values.get('fcm_token') or None
		fb_user_id 	= request.values.get('fb_user_id') or None

		fb_user_id = int(fb_user_id) if fb_user_id  else None
		user_id = int(user_id) if user_id  else None
		if fb_user_id and user_id :
			api_data = {"user_id" : user_id , "updated_at" : current_dt }
			save_fcm_token_data = FirebaseModel().UpdateFCMData(api_data,fb_user_id)
		else :
			api_data = {"conf_id" : conf_id,"user_id" : user_id,"app_name" : app_name,"device_type" : device_type,
			"fcm_token" : fcm_token,"created_at" : current_dt }
			check_already_reg =  FirebaseModel().getUserDataByToken(conf_id,fcm_token)
			if check_already_reg :
				fb_user_id = check_already_reg["fb_user_id"]
				if user_id and user_id > 0 :
					api_data = {"user_id" : user_id , "updated_at" : current_dt }
					save_fcm_token_data = FirebaseModel().UpdateFCMData(api_data,fb_user_id)

				data = {"fb_user_id" : fb_user_id, "fcm_token" : fcm_token, "msg" : "Your firebase token has been already registered." , "status" : 1 }	
				json_data = json.dumps(data,default=str)
				return json_data
			else :
				save_fcm_token_data = FirebaseModel().insertFCMData(api_data)

		res_msg = save_fcm_token_data["msg"]
		if res_msg  == "success" :
			fb_user_id  = save_fcm_token_data["fb_user_id"]

		if res_msg  == "success"  :
			data = {"fb_user_id" : fb_user_id, "fcm_token" : fcm_token, "msg" : "Successfully saved" , "status" : 1 }	
		else :
			data = {"fb_user_id" :  fb_user_id,"fcm_token" : fcm_token , "msg" : res_msg , "status" : 3 }
		
		json_data = json.dumps(data,default=str)
		return json_data
	except Exception as e:
		data = {"fb_user_id" :  fb_user_id , "fcm_token" : " " , "msg" : str(e) , "status" : 401 }
		json_data = json.dumps(data,default=str)
		return json_data

# WEB PAGE - RAMYA
@app.route('/<int:conf_id>/<conf_key>/fb_notification', methods = ["GET","POST"])
def FBNotification(conf_id,conf_key):
	get_conf = FirebaseModel().GetConfFirebaseModel(conf_id)
	if get_conf :
		get_data  = FirebaseModel().get_fb_notification(conf_id)
		json_data = json.dumps(get_data,default= str)
		# return json_data
		html_data = render_template("firebase/firebase_notification_table.html",conf_id=conf_id,conf_key=conf_key,fb_data = get_data)
		# return html_data
		return render_template('firebase/firebase_notification.html',html_data=html_data,conf_id=conf_id,conf_key=conf_key,get_conf=get_conf)
	else:
		return "<h1>Invalid URL</h1>"

@app.route('/<int:conf_id>/<conf_key>/post_fb_notification', methods = ["GET","POST"])
def PostFBNotification(conf_id,conf_key):
	try:
		now                  = datetime.now()
		current_dt           = now.strftime("%Y-%m-%d %H:%M:%S")
		msg                  = ""
		image_name           = None
		image_path           = None	
		is_update            = request.values.get('is_update') or 0
		notification_id      = request.values.get('notification_id',None) or None
		notification_title   = request.values.get('notification_title')
		notification_content = request.values.get('notification_content',None) or None
		send_user            = request.values.get('send_user',None) or None
		image_data           = request.values.get('image_data',None) or None
		file_name            = request.values.get('file_name',None) or None
		is_send              = request.values.get('is_send') or 0
		if int(is_send) == 1 :
			sent_at = now.strftime("%Y-%m-%d %H:%M:%S")
		else:
			sent_at = None

		if file_name is None:
			file_upload = None	
		else:
			file_upload = AwsFileUpload(file_name,image_data)
		
		# If  file upload function call then this block will execute					
		if  file_upload :
			file_upload = ast.literal_eval(file_upload)
			file_upload_msg    = file_upload["msg"]
			file_upload_status = file_upload["status"]
			if file_upload_status  == 1 :
				image_path    = file_upload["image_path"] or None
				image_name    = file_upload["image_name"] or None
				file_name     = image_path + image_name
			else :
				return file_upload_msg
		
		if  int(is_update) == 1:
			update_data  = { "notification_title" : notification_title,"notification_content" : notification_content,
							"send_user" : send_user,"image": image_data,"updated_at": current_dt}
			updated_data = FirebaseModel().update_fb_notification(notification_id,update_data)
			if updated_data == "success":
				msg = "Updated Successfully.."
			else:
				msg = str(updated_data)

		else :
			insert_data  = {"conf_id" : conf_id,"notification_title" : notification_title,"notification_content":notification_content,
							"send_user": send_user,"image": image_data,"sent_at": sent_at,"created_at": current_dt }
			inserted_data = FirebaseModel().insert_fb_notification(insert_data)
			if int(is_send) == 1 :


				# send Function
				fcm_token   = None
				user_id     = None
				device_type = None
				fb_message  = None
				insert_logs_data = { "fcm_token" : fcm_token,"user_id": user_id,"conf_id": conf_id,"fb_user_id" : fb_user_id,
					"notification_title": notification_title,"notification_content" : notification_content,"image": image_data,
					"send_user": send_user,"device_type": device_type,"send_at": current_dt,"created_at" : current_dt }

				insert_data = FirebaseModel().insert_notification_logs(insert_logs_data)
				msg         = str(data['notification_title'])+" notification save and send successfully"
				
				# send Function

			else :
				msg = "Added Successfully.."
		get_data  = FirebaseModel().get_fb_notification(conf_id)
		html_data = render_template("firebase/firebase_notification_table.html",conf_id=conf_id,conf_key=conf_key,fb_data = get_data)
		data      = { "html_data" : html_data,"msg" :msg,"status" : 1 }	

	except Exception as e:
		data      = { "msg" :str(e),"status" : 401 }	

	return json.dumps(data,default =str)


# Ganesan J
@app.route('<int:conf_id>/<conf_key>/send_fbn',methods =["GET","POST"])
def SendFBN(conf_id,conf_key):
	now       = datetime.now()
	curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
	total_count        = 0
	success_count      = 0
	failure_count      = 0
	analytics_data     = {}
	all_data           = []
	user               = {}
	is_all_user        = 1
	is_loggedin_user   = 0
	is_commitment_user = 0
	condition = ''


	device_type     = request.values.get("device_type") or 'Android'
	notification_id = request.values.get("notification_id") or None
	is_loggedin_user= request.values.get("is_loggedin_user") or 0 # updated on Jan 06,2024
	notification_id = int(notification_id) if notification_id else None
	conf_id = int(conf_id) if conf_id else None
	is_loggedin_user = int(is_loggedin_user) if is_loggedin_user else is_loggedin_user

	if not notification_id  and not conf_id :
		analytics_data = {"total_count" : 0 , "success_count" : 0 , "failure_count" : 0}
		data = {"analytics_data" : analytics_data , "msg" : "Notification Id and Conference Id both are need. " , "status" : 2}
		return json.dumps(data,default=str)

	
	if not firebase_admin._apps:
		FIRBASE_PATH = "core/static/firebase_config"
		filename     = "boa-mobileapp-firebase-adminsdk.json"
		json_file    = os.path.join(FIRBASE_PATH, filename)
		cred         = credentials.Certificate(json_file)
		firebase_admin.initialize_app(cred)

	try:
		notify_data = FirebaseModel().get_fb_notification_by_id(notification_id)
		if not notify_data :
			analytics_data = {"total_count" : 0 , "success_count" : 0 , "failure_count" : 0}
			data = {"analytics_data" : analytics_data , "msg" : "Record does not exists for given notification id. " , "status" : 3 }
			return json.dumps(data,default=str)
		else :
			notification_title   = notify_data["notification_title"]
			notification_content = notify_data["notification_content"]
			send_user            = notify_data["send_user"]
			image                = notify_data["image"]
			notification_type    = notify_data["notification_type"]
			notification_id      = notify_data["notification_id"]

		fb_user = FirebaseModel().getFBUserData(conf_id,device_type,is_all_user,is_loggedin_user,is_commitment_user)
		# return ( json.dumps(fb_user,default=str) ) 
		if fb_user :
			for index,value in enumerate(fb_user) :
				total_count = total_count + 1
				fcm_token   = value["fcm_token"]
				user["fcm_token"] = fcm_token
				conf_id     = value["conf_id"]
				user_id     = value["user_id"]
				user["fb_user_id"  ]= value["fb_user_id"]
				user["device_type"] = value["device_type"]
				
				
				user["notification_title"]   = notify_data["notification_title"]
				
				user["send_user"]            = send_user
				user["send_at"]              = curr_dt
				user["created_at"]           = curr_dt
				user["conf_id"]              = conf_id
				user["notification_id"]      = notification_id
				if is_loggedin_user and  int(is_loggedin_user) > 0 :
					prefix              = value["prefix"]
					full_name           = value["full_name"]
					full_name  = "Dr. " + value["full_name"] if not value["prefix"] else value["prefix"] + " "  + value["full_name"]
					merge_data = {'NAME':full_name}
					notification_content = Helper.merge_tags(notify_data["notification_content"],merge_data)

				user["notification_content"] = notification_content
				# See documentation on defining a message payload.
				# start
				if image :
					user["image"] = image
					message = messaging.Message(
						notification=messaging.Notification(
							title=notification_title,
							body=notification_content,
							image =image,
					),
					token=fcm_token
					)
				else :
					message = messaging.Message(
						notification=messaging.Notification(
							title=notification_title,
							body=notification_content,
					),
					token=fcm_token
					)	

				try:
					response = messaging.send(message)
					# response = "Success"
					suc_msg = "Successfully sent message: " + response
					user["fb_message"]           = suc_msg
					success_count = success_count + 1

				except messaging.UnregisteredError:
					failure_count = failure_count +1
					user["fb_message"]  = 'Error: Registration token is no longer valid'
				except Exception as e:
					print('Error:', str(e))

				all_data.append(user)
				get_data  = FirebaseModel().saveNotificationLogsMysql(conf_id,user)
				# end 
				user = {}
				

			# return json.dumps(all_data,default=str)
				
			# FirebaseModel().insert_demo_del_sqlite( all_data)

			analytics_data["conf_id"]           = conf_id
			analytics_data["notification_id"]   = notification_id
			analytics_data["total_count"]   = total_count
			analytics_data["success_count"] = success_count
			analytics_data["failure_count"] = failure_count
			analytics_data["created_at"]    = curr_dt
			analytics_data["send_at"]       = curr_dt
			# Insert into logs 
			FirebaseModel().saveNotificationReports(conf_id,analytics_data)
		
			json_data = json.dumps(analytics_data ,default =str)
			return json_data
			return_msg = "Firebase notification has been successfully sent. Total user count : " + str(total_count)

			return return_msg
	except Exception as e:
		return str(e)
	
	print('Successfully sent message:', response)
	return "Notification Successfully sent"


# Ramya Code Start  ---------------------
@app.route('/<int:conf_id>/<conf_key>/edit_fb_notification', methods = ["GET","POST"])
def EditFBNotification(conf_id,conf_key):
	try:
		notification_id = request.values.get('notification_id' ,None) or None
		if notification_id:
			edit_data   = FirebaseModel().get_fb_notification_by_id(notification_id)
			data        = { "edit_data" : edit_data,"msg" :"success","status" : 1 }
		else:
			data        = { "msg" :"No Data","status" : 2 }
		
		return json.dumps(data,default =str)

	except Exception as e:
		data      = { "msg" :str(e),"status" : 401 }	
		return json.dumps(data,default =str)


@app.route('/<int:conf_id>/<conf_key>/apply_file_upload', methods = ["GET","POST"])
def ApplyFileUpload(conf_id,conf_key):	
	try:
		image_data = request.values.get('image_data',None) or None
		file_name  = request.values.get('file_name',None) or None
		if file_name:
			file_upload = AwsFileUpload(conf_key,file_name,image_data)
		else:
			file_upload = None	

		# If  file upload function call then this block will execute					
		if  file_upload :
			file_upload = ast.literal_eval(file_upload)
			file_upload_msg    = file_upload["msg"]
			file_upload_status = file_upload["status"]
			if file_upload_status  == 1 :
				return json.dumps(file_upload,default =str)
			else :
				data      = { "msg" :str(file_upload_msg),"status" :2 }
				return json.dumps(data,default =str)

	except Exception as e:
		data      = { "msg" :str(e),"status" : 401 }	
		return json.dumps(data,default =str)


# AWS File upload start
def AwsFileUpload(conf_key,file_name,image_data):
	now             = datetime.now()
	curr_dt         = now.strftime("%Y-%m-%d %H:%M:%S")
	image_name      = None
	image_path      = None
	bucket          = "aws-s3store"
	try:
		if file_name:
			if image_data:
				split_tup       = os.path.splitext(file_name)
				file_name       = split_tup[0]
				file_extension  = split_tup[1]
				filename_str    = str(conf_key)+"fb_notification_"+ datetime.now().strftime("%Y%m%d-%H%M%S") +file_extension
				
				if " " in filename_str :
					filename_str = filename_str.replace(" ","")

				foldername   = "mobile-app/"
				acl          = "public-read"
				s3           = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
				

				image_data = base64.b64decode(image_data.split(',')[1])
				image      = Image.open(io.BytesIO(image_data))
				if image.mode == 'RGBA':
					image = image.convert('RGB')

				image.save(os.path.join('core/static/temp_images', filename_str))
				img_path = os.path.join('core/static/temp_images/'+ filename_str)
				with open(img_path, 'rb') as f:
					response = s3.upload_fileobj(f,bucket,foldername+filename_str, ExtraArgs={"ACL": acl, "ContentType": "image/jpeg"})
				os.remove('core/static/temp_images/'+ filename_str) 
				data_1     = {'bucketname' : bucket,'foldername':foldername,'file_name':filename_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1} 
				file_path  = "https://aws-s3store.s3.ap-southeast-1.amazonaws.com/"+foldername

				image_path = file_path	
				image_name = filename_str
				
				msg = "Added Successfully"
				return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 1 }	

				
			else :
				msg = "File name is not exists."
				return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 2 }			
			return json.dumps(return_data,default =str)

		else :
			msg = "File not exists. Please try again"
			return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 3 }	

		return json.dumps(return_data,default =str)
	except ClientError as e:
		return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : str(e), "status" : 401 }
		return json.dumps(return_data,default =str)


# Purpose : To view Notification logs
# http://127.0.0.1:5003/view_fb_notification?conf_id=26&fcm_token=dZynP8UsTO2ais3zrTZYT5:APA91bEgk6jeozo6pNRGftLxw4GL1hs_iK3_bB27sa-paD-hkaN3tpnNZmqUsBysOc-48ZsQ0vRa5jO5_N_X1NqTTZu8aU-jo0s9YyzJokYhYnVSd6eyeL41uqPLZWKNubTx-lydjELZ
@app.route('/view_fb_notification', methods = ["GET","POST"])
def ViewFBNotification():
	conf_id = request.values.get('conf_id') or None
	fcm_token = request.values.get("fcm_token") or None
	get_conf = FirebaseModel().GetConfFirebaseModel(conf_id)
	if get_conf :
		fcm_token = request.values.get('fcm_token') or None
		get_data  = FirebaseModel().GetNotificationLogsMysql(conf_id,fcm_token)
		return render_template('firebase/view_fb_notification.html',notification_logs = get_data,conf_id=conf_id,get_conf=get_conf)
	else:
		return "<h1>Invalid URL</h1>"

# http://192.168.1.6:5003/26/boa24/notify_logs
@app.route('/notify_logs', methods = ["GET","POST"])
def NotifyLogs():

	conf_id = request.values.get('conf_id') or None
	fcm_token = request.values.get('fcm_token') or None
	get_conf = FirebaseModel().GetConfFirebaseModel(conf_id)
	if get_conf :
		fcm_token = request.values.get('fcm_token') or None
		get_data  = FirebaseModel().get_del_data_in_sqlite( conf_id)
		if get_data :
			get_data  = FirebaseModel().saveNotificationLogsMysql(conf_id,get_data)
			delete_sqlite = FirebaseModel().deleteSqliteNotificationLogs(conf_id)
		else :
			get_data  = FirebaseModel().GetNotificationLogsMysql(conf_id,fcm_token =None)	
		# json_data = json.dumps()
		
		return render_template('firebase/view_fb_notification.html',notification_logs = get_data,conf_id=conf_id,get_conf=get_conf)
	else:
		return "<h1>Invalid URL</h1>"


# http://127.0.0.1:5003/remove_userid?conf_id=26&fb_user_id=2&user_id=45661
@app.route('/remove_userid', methods =["GET","POST"])
def RemoveUserId():
	now         = datetime.now()
	current_dt  = now.strftime("%Y-%m-%d %H:%M:%S")		
	posted_data = request.json
	fb_user_id  = None
	user_id     = None
	
	for index,value in enumerate(posted_data) :
		conf_id    = value["conf_id"]
		user_id    = value["user_id"]
		fb_user_id = value["fb_user_id"]
	# data =  jsonify(posted_data)
	# conf_id    = posted_data["conf_id"] or None
	# user_id    = posted_data["user_id"] or None
	# fb_user_id = posted_data["fb_user_id"] or None
	
	try:
		if fb_user_id and user_id :
			fbusers = FirebaseModel().checkFBUser(fb_user_id,user_id ,conf_id) 
			if fbusers :
				api_data = {"user_id" : None , "updated_at" : current_dt }
				remove_user_id = FirebaseModel().UpdateFCMData(api_data,fb_user_id)
				res_msg = remove_user_id["msg"]
				if res_msg == "success" : 
					data = {"msg" : res_msg , "status" : 1 }
				else :	
					data = {"msg" : res_msg , "status" : 2 }
			else :
				data = {"msg" : "User-id invalid" , "status" : 3 }
		else :
			data = {"msg" : "User-id invalid" , "status" : 4 }		

		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
	

# Commitment Content
@app.route('<int:conf_id>/<conf_key>/send_commitment_fbn',methods =["GET","POST"])
def SendCommitmentFBN(conf_id,conf_key):
	now       = datetime.now()
	curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
	total_count        = 0
	success_count      = 0
	failure_count      = 0
	analytics_data     = {}
	all_data           = []
	user               = {}
	is_all_user        = 0

	is_loggedin_user   = 1
	is_commitment_user = 1
	send_user          = "Commitment"
	condition = ''

	notification_title = request.values.get("notification_title") or 'Commitment' # updated on Jan 06,2024
	notification_type  =  "Commitment"

	conf_id = int(conf_id) if conf_id else None	
	if not firebase_admin._apps:
		FIRBASE_PATH = "core/static/firebase_config"
		filename     = "boa-mobileapp-firebase-adminsdk.json"
		json_file    = os.path.join(FIRBASE_PATH, filename)
		cred         = credentials.Certificate(json_file)
		firebase_admin.initialize_app(cred)
	try:
		fb_user = FirebaseModel().getFBCommitmentUser(conf_id)

		# return ( json.dumps(fb_user,default=str) ) 
		if fb_user :
			for index,value in enumerate(fb_user) :
				total_count = total_count + 1
				fcm_token   = value["fcm_token"]
				user["fcm_token"]   = fcm_token
				user_id             = value["user_id"]
				user["fb_user_id"  ]= value["fb_user_id"]
				user["device_type"] = value["device_type"]
				user["full_name"]   = value["full_name"]
				notification_content= value["notification_content"] 
				user["notification_content"] = value["notification_content"]
				user["send_user"]            = send_user
				user["send_at"]              = curr_dt
				user["created_at"]           = curr_dt
				user["conf_id"]              = conf_id
				user["notification_title"]   = notification_title
		
					# merge_data = {'NAME':full_name}
					# notification_content = Helper.merge_tags(notify_data["notification_content"],merge_data)

				message = messaging.Message(
					notification=messaging.Notification(
						title=notification_title,
						body=notification_content,
						),
					token=fcm_token
					)
				try:
					response = messaging.send(message)
					# response = "success"
					suc_msg  = "Successfully sent message: " + response
					user["fb_message"]           = suc_msg
					success_count = success_count + 1

				except messaging.UnregisteredError:
					failure_count = failure_count +1
					user["fb_message"]  = 'Error: Registration token is no longer valid'
				except Exception as e:
					print('Error:', str(e))

				all_data.append(user)
				# return ( json.dumps(all_data,default=str) )
				get_data  = FirebaseModel().saveNotificationLogsMysql(conf_id,user)
				# end 
				user = {}
								
			analytics_data["total_count"]   = total_count
			analytics_data["success_count"] = success_count
			analytics_data["failure_count"] = failure_count
			analytics_data["created_at"]    = curr_dt
			analytics_data["send_at"]       = curr_dt
			# Insert into logs 
			FirebaseModel().saveNotificationReports(conf_id,analytics_data)

			json_data = json.dumps(analytics_data ,default =str)
			return json_data
			return_msg = "Firebase notification has been successfully sent. Total user count : " + str(total_count)

			return return_msg
	except Exception as e:
		return str(e)
	
	print('Successfully sent message:', response)
	return "Notification Successfully sent"
		




	# conf-web-app
	
# ----------------------------------------------
# Created on 2024-01-18 10:01 by Ramya
# Purpose : To View Notification by notification_id index
@app.route('/<int:conf_id>/<conf_key>/notification_index', methods = ["GET","POST"])
def NotificationIndex(conf_id,conf_key):
	get_conf        = FirebaseModel().GetConfFirebaseModel(conf_id)
	notification_id = request.values.get("notification_id") or None
	fb_user_id      = None 
	if get_conf :
		data =  FirebaseModel().get_usp_notification_index(conf_id,notification_id,fb_user_id)
		for index,value in enumerate(data):
			if index == 0:
				notify_title  = value[0]
			if index == 1:
				notify_index = value

		if notify_title is None:
			return "<h4 style='color:red;text-align:center;margin-top:15px;'>Invalid Notification Id</h4>"
		else :
			return render_template('firebase/notification_index.html',conf_id=conf_id,conf_key=conf_key,get_conf=get_conf,notify_index=notify_index,notify_title=notify_title)
	else:
		return "<h4 style='color:red;text-align:center'>Invalid URL</h4>"


# Purpose : To View FB Users index
@app.route('/<int:conf_id>/<conf_key>/fb_user_index', methods = ["GET","POST"])
def FBUserIndex(conf_id,conf_key):
	get_conf = FirebaseModel().GetConfFirebaseModel(conf_id)
	if get_conf :
		data =  FirebaseModel().get_usp_notification_index(conf_id,None,None)
		for index,value in enumerate(data):
			if index == 0:
				fb_index_data  = value

		return render_template('firebase/fb_user_index.html',conf_id=conf_id,conf_key=conf_key,get_conf=get_conf,fb_index_data=fb_index_data)
	else:
		return "<h1>Invalid URL</h1>"
	


# Purpose : To View FB Users Notification
@app.route('/<int:conf_id>/<conf_key>/<int:fb_user_id>/fb_users_notification_index', methods = ["GET","POST"])
def FBUsersNotificationIndex(conf_id,conf_key,fb_user_id):
	get_conf = FirebaseModel().GetConfFirebaseModel(conf_id)
	if get_conf :
		data =  FirebaseModel().get_usp_notification_index(conf_id,None,fb_user_id)
		for index,value in enumerate(data):
			if index == 0:
				fb_user_data  = value
			if index == 1:
				fb_logs_data  = value

		fb_user_data = fb_user_data[0]
		return render_template('firebase/fb_user_notification_index.html',conf_id=conf_id,conf_key=conf_key,get_conf=get_conf,fb_logs_data=fb_logs_data,fb_user_data=fb_user_data)
	else:
		return "<h1>Invalid URL</h1>"


# Purpose : To view Notification Log Count in Graphical View 
@app.route('/<int:conf_id>/<conf_key>/view_fb_report', methods = ["GET","POST"])
def ViewFBReport(conf_id,conf_key):
	get_conf        = FirebaseModel().GetConfFirebaseModel(conf_id)
	notification_id = request.values.get("notification_id") or None
	if get_conf :
		if notification_id :
			data =  FirebaseModel().get_usp_notification_index(conf_id,notification_id,None)
			for index,value in enumerate(data):
				if index == 0:
					notify_title  = value
				if index == 3:
					fb_report     = value

			if notify_title :
				notify_title = notify_title[0]
				if fb_report :
					fb_report   = fb_report[0]
					label_name  = ['Success', 'Failure', 'Total']
					pie_chart   = {'send_at': fb_report['send_at'],'label': label_name,'success_count' : fb_report['success_count'],'failure_count' : fb_report['failure_count'],'total_count' : fb_report['total_count']}
				else :
					fb_report   = None
					pie_chart   = None
					label_name  = None
				return render_template('firebase/fb_reports.html',conf_id=conf_id,conf_key=conf_key,pie_chart=pie_chart,notify_title=notify_title,get_conf=get_conf,str=str)
			else :
				return "<h3 style='color:red;text-align:center;'>No Record Found</h3>"
		else:
			return "<h3 style='color:red;text-align:center;'>Invalid URL</h3>"
	else:
		return "<h3 style='color:red;text-align:center;'>Invalid URL</h3>"

# ----------------------------------------------

# Purpose : To Update Full name in fb_users table
@app.route('/<int:conf_id>/<conf_key>/update_fb_user_fullname', methods = ["GET","POST"])
def UpdateFBUserName(conf_id,conf_key):
	now         = datetime.now()
	current_dt  = now.strftime("%Y-%m-%d %H:%M:%S")	
	get_conf = FirebaseModel().GetConfFirebaseModel(conf_id)
	if get_conf :
		
		update_and_get_count = FirebaseModel().update_fbuser_name(conf_id,current_dt)
		if update_and_get_count:
			if update_and_get_count['total_updated_count'] == 0 :
				flash("Already Updated.","successMsg")
			else:
				flash("<b> "+str(update_and_get_count['total_updated_count'])+"</b> FB User's Name Updated successfully.","successMsg")
		else:
			flash(str(update_and_get_count),"errorMsg")
		return redirect (url_for('firebase.FBNotification',conf_id=conf_id,conf_key=conf_key))
	else:
		return "<h1>Invalid URL</h1>"

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