Sindbad~EG File Manager

Current Path : /home/numerotech/mcinfo.numerotech.com/mc_info_update/core/controller/
Upload File :
Current File : //home/numerotech/mcinfo.numerotech.com/mc_info_update/core/controller/MCDetailController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,Response,jsonify,json
from core.model.MCDetailModel import MCDetailModel
from random import randint
from core.library.email import EMAIL
from .. import Cryptography,Helper
from flask import session, app
from werkzeug.utils import secure_filename
import ast
from mandrill import Mandrill
from os.path import join, dirname,isfile, realpath
from datetime import datetime, timedelta
import os
import requests,mandrill,json,math,random
from itertools import groupby
from operator import itemgetter
from urllib.parse import unquote
import re

app = Blueprint('mc_details', __name__)

@app.route('/<int:conf_id>/<conf_key>/delegate_info_mail/<user_uuid>', methods = ["GET", "POST"])
def DelegateInfofMail(conf_id,conf_key,user_uuid):
	conf_name = " "
	conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
	if not conf_data :
		error_msg = "Invalid URL"
		return  "<h3 style='color:red;text-align:center'>"+ error_msg +"</h3>"
		return redirect(url_for('mc_details.MedicalCouncilLogin',conf_id=conf_id,conf_key=conf_key))
	else:
		conf_name = conf_data["conf_name"] or ''

	conf_schema = conf_data['conf_schema']
	delegate_data = MCDetailModel().delegateDataByUUID(conf_id,conf_key,user_uuid,conf_schema)
	if delegate_data : 
		data_1    = delegate_data
		email     = data_1["email"]
		uuid      = user_uuid

		prefix      = data_1["prefix"]
		full_name_1 = data_1["full_name"] or ''
		full_name   = prefix + " " + full_name_1 if prefix  else full_name_1

		base_url = request.host_url
		if "https" in base_url:
			pass 
		else :
			base_url = base_url.replace("http" , "https")	
	 
		url_1 = base_url+str(conf_id)+"/"+conf_key+"/delegate_info/"+user_uuid
		# url_1 = base_url+"mail_respond/"+uuid
	
		html      = render_template('mc_details/email/delegate_info_mail.html', conf= conf_data,data=delegate_data,uuid=uuid,url_1=url_1)
		
		if full_name :
			subject = "Dear "+ full_name +", Very important! Confirmation required for "+ conf_name +" Conference"
		else :
			   subject = "Very important! Confirmation required for "+ conf_name +" Conference"
		
		EMAIL.MCAcknowledgesendMail(subject,html,email,conf_data) # uncomment after testing
		return "Email sent successfully."


@app.route('/<int:conf_id>/<conf_key>/delegate_info/<user_uuid>', methods = ["GET", "POST"])
def DelegateInfo(conf_id,conf_key,user_uuid):
	conf_data       = MCDetailModel().checkConfData(conf_id,conf_key)
	conf_schema     = conf_data['conf_schema']
	enc_delegate_no = None
	mc_state_id     = None
	if conf_id :
		country_id = 101
		states        = MCDetailModel().getStates(country_id)
		delegate_data = MCDetailModel().delegateDataByUUID(conf_id,conf_key,user_uuid,conf_schema)
		if delegate_data:
			json_data = json.dumps(states,default =str)
			mc_state_id = delegate_data["mc_state_id"]
			enc_delegate_no = Cryptography.encrypt(delegate_data["delegate_no"])
			# return str(mc_state_id)
			return render_template('mc_details/delegate_info.html',enc_delegate_no= enc_delegate_no,conf=  conf_data,data=delegate_data,user_uuid=user_uuid,conf_id = conf_id,conf_key = conf_key,mc_state_id=mc_state_id,states=states)
		else :
			return  "<h3 style='color:red;text-align:center'>Record does not exist.</h3>"		
	else :
		return  "<h3 style='color:red;text-align:center'>Invalid URL </h3>"



# @app.route('/post_delegate_info', methods = ["GET", "POST"])
# def PostDelegateInfo():
# 	now       = datetime.now()
# 	curr_dt   = now.strftime("%Y-%m-%d %H:%M:%S")
# 	try:
# 		user_uuid    = request.values.get("user_uuid")
# 		conf_id      = request.values.get("conf_id")
# 		conf_key     = request.values.get("conf_key")
# 		mc_number     = request.values.get("mc_number")
# 		mc_state_id  = request.values.get("mc_state_id")
# 		email  = request.values.get("email")
# 		data={"mc_number":mc_number ,"mc_state_id" : mc_state_id , "updated_at" : curr_dt,"mc_data_updated_at" : curr_dt}
# 		update_mc_data   = MCDetailModel().updateMCData(data,user_uuid,email,conf_id,conf_key)
# 		if update_mc_data == "success" : 
# 			return render_template('mc_details/mc_thanks_screen.html')
# 		else :
# 			return 	update_mc_data
# 			return  "<h3 style='color:red;text-align:center'>"+ update_mc_data +"</h3>"		
# 	except Exception as e:
# 		return  "<h3 style='color:red;text-align:center'>"+ str(e) +"</h3>"

# Nov 14, 2023 start
@app.route('/post_delegate_info', methods = ["GET", "POST"])
def PostDelegateInfo():
	now            = datetime.now()
	curr_dt   	   = now.strftime("%Y-%m-%d %H:%M:%S")
	curr_dt_1      = now.strftime("%d/%m/%Y, %H:%M:%S")
	del_table_name = None
	# curr_dt   = "2023-03-25 15:30:00"
	try:
		enc_delegate_no = request.values.get("enc_delegate_no")
		conf_id         = request.values.get("conf_id")
		conf_key        = request.values.get("conf_key")
		mc_number       = request.values.get("mc_number") or ''
		mc_state_id     = request.values.get("mc_state_id") or ''
		
		delegate_no     = request.values.get("delegate_no")
		user_uuid       = request.values.get("user_uuid")

		# Addedon Oct 04, 2023 start
		email          = request.values.get("email") or  ' '
		mobile         = request.values.get("mobile") or  ' '
		prefix         = request.values.get("prefix") or  ' '
		full_name      = request.values.get("full_name") or  ' '
		full_name_1    = prefix +" "+full_name if prefix else full_name
		# Addedon Oct 04, 2023 End

		conf_id         = int(conf_id) if conf_id else conf_id

		conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
		conf_schema = conf_data['conf_schema']
		if not conf_data :
			flash("Invalid URL" , "errorMsg")
			return redirect(url_for('mc_details.DelegateInfo',conf_id=conf_id,conf_key=conf_key,user_uuid=user_uuid))
		else :
			del_table_name = conf_data["del_table_name"]	

		if "'" in delegate_no:
			delegate_no = delegate_no.replace("'", "")
			
		delegate_no = int(delegate_no)	if delegate_no else delegate_no
		if "'" in mc_state_id:
			mc_state_id = mc_state_id.replace("'", "")
			
		mc_state_id = int(mc_state_id) if mc_state_id else mc_state_id

		
		data_for_update={"mc_number":mc_number ,"mc_state_id" : mc_state_id , "updated_at" : curr_dt,"mc_data_updated_at" : curr_dt,"prefix" : prefix,"email" : email, "full_name" : full_name, "mobile" : mobile}
		state_name = MCDetailModel().getMCState(mc_state_id)
		if state_name : 
			state_name = state_name["state_name"]
		else:
			state_name = ""	

		# check duplicate email
		check_email = MCDetailModel().check_delegates_email(conf_id,email,delegate_no,conf_schema)

		enc_delegate_no = Cryptography.encrypt(delegate_no)
		if check_email:
			exist_email  = check_email['email'] 
			exist_mobile = check_email['mobile']
			exist_name   = check_email['prefix']+" "+check_email['full_name']
			flash("The email you have provided is already mapped for <br> "+str(exist_name)+" ","errorMsg")
			return redirect(url_for('mc_details.DelegateInfo',conf_id=conf_id,conf_key=conf_key,user_uuid=user_uuid))
		else :
			# check duplicate mobile
			check_mobile = MCDetailModel().check_delegates_mobile(conf_id,mobile,delegate_no,conf_schema)
			if check_mobile:
				exist_email  = check_mobile['email']
				exist_mobile = check_mobile['mobile']
				exist_name   = check_mobile['prefix']+" "+check_mobile['full_name']
				flash("The mobile number you have provided is already mapped for <br> "+str(exist_name)+" ","errorMsg")
				return redirect(url_for('mc_details.DelegateInfo',conf_id=conf_id,conf_key=conf_key,user_uuid=user_uuid))
			else:
				pass	

		
		insert_data      = MCDetailModel().insert_delegate_in_mc_delegates(conf_id,delegate_no,curr_dt,conf_schema) # before update delegate data first insert into mcc_delegates table
		update_stmt      = "UPDATE " +del_table_name+ " set full_name='"+full_name_1+"' ,email = '"+email+"',mobile = '"+mobile+"', mc_number= '" + mc_number+ "' , state = '"+ state_name+"' ,updated_at = '"+curr_dt+"' where delegate_no =  " +str(delegate_no)+ "  and conf_id = "+str(conf_id)+" "
		update_mc_data   = MCDetailModel().updateMCDataNew(data_for_update,delegate_no,conf_id,update_stmt,conf_schema)

		if update_mc_data == "success" :
			delegate_data = MCDetailModel().delegateDataByDelegateNo(conf_id,conf_key,delegate_no,conf_schema)
			data = delegate_data

			full_name_1 = data["prefix"] + " " + data["full_name"] if data["prefix"] else data["full_name"]

			subject = "Dear  "+  full_name_1 +", your medical council registration details have been updated at " + curr_dt_1
			email   =   data["email"]
# 			email   = "ganesan@numerotec.com" # please comment after testing
			
			if email :
				html = render_template('mc_details/email/mc_updated_thanks_mail.html',data = data,conf= conf_data,email=email)
				 
				EMAIL.sendMail(subject,html,email,conf_data) # please uncomment after testing
				return render_template('mc_details/mc_thanks_screen.html',conf=conf_data)
			
			flash("Thank you" , "successMsg")	
# 			return redirect(url_for('mc_details.MedicalCouncilLogin',conf_id=conf_id,conf_key=conf_key))
			return render_template('mc_details/mc_thanks_screen.html',conf=conf_data)
		else :
			return 	update_mc_data
			return  "<h3 style='color:red;text-align:center'>"+ update_mc_data +"</h3>"		
	except Exception as e:
		return  "<h3 style='color:red;text-align:center'>"+ str(e) +"</h3>"

# Nov 14, 2023 end



# -------------------------------------------------------------------------
@app.route('/<int:conf_id>/<conf_key>/mc_detail_login', methods = ["GET", "POST"])
def MedicalCouncilLogin(conf_id,conf_key):
	conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
	# json_data = json.dumps(conf_data, default =str)
	# return json_data
	if conf_data :
		return render_template('mc_details/login_by_delegateno.html',conf_id = conf_id,conf_key=conf_key,conf  = conf_data)
	else :
		return  "<h3 style='color:red;text-align:center'>Invalid URL </h3>"


@app.route('/<int:conf_id>/<conf_key>/post_mc_detail_login', methods = ["GET", "POST"])
def PostMedicalCouncilLogin(conf_id,conf_key):
	conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
	conf_schema = conf_data['conf_schema']
	delegate_no  = request.values.get("delegate_no")
	delegate_data = MCDetailModel().delegateDataByDelegateNo(conf_id,conf_key,delegate_no,conf_schema)
	if delegate_data :
		enc_delegate_no = Cryptography.encrypt(delegate_no)
		return redirect(url_for('mc_details.DelegateMCInfo',enc_delegate_no =enc_delegate_no,conf_id=conf_id,conf_key=conf_key))
	else : 
		flash("Record not found" , "errorMsg")
		return redirect(url_for('mc_details.MedicalCouncilLogin',conf_id=conf_id,conf_key=conf_key))
		
	mc_state_id  = None
	if conf_id :
		country_id = 101
		return render_template('mc_details/login_by_delegateno.html',conf_id = conf_id,conf_key=conf_key)
		
	else :
		return  "<h3 style='color:red;text-align:center'>Invalid URL </h3>"


@app.route('/delegate_mc_info/<int:conf_id>/<conf_key>/<enc_delegate_no>', methods = ["GET", "POST"])
def DelegateMCInfo(conf_id,conf_key,enc_delegate_no):
	conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
	enc_delegate_no = unquote(enc_delegate_no)
	mc_state_id = None
	if conf_id :
		country_id = 101
		states        = MCDetailModel().getStates(country_id)
		delegate_no     = Cryptography.decrypt(enc_delegate_no)
		# delegate_no = int(delegate_no)
		conf_schema = conf_data['conf_schema']
		delegate_data = MCDetailModel().delegateDataByDelegateNo(conf_id,conf_key,delegate_no,conf_schema)
		if delegate_data:
			mc_state_id = delegate_data["mc_state_id"]

			return render_template('mc_details/mc_delegate_info.html',data=delegate_data,delegate_no=delegate_no,enc_delegate_no=enc_delegate_no,conf_id = conf_id,conf_key = conf_key,mc_state_id=mc_state_id,states=states,conf=conf_data)
		else :
			return  "<h3 style='color:red;text-align:center'>Record does not exist.</h3>"		
	else :
		return  "<h3 style='color:red;text-align:center'>Invalid URL </h3>"





@app.route('/<int:conf_id>/<conf_key>/delegate_mc_info/at/<user_uuid>', methods = ["GET", "POST"])
def DelegateMCInfoAutoLogin(conf_id,conf_key,user_uuid):
	conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
	mc_state_id = None
	if conf_id :
		country_id = 101
		states        = MCDetailModel().getStates(country_id)
		conf_schema = conf_data['conf_schema']
		delegate_data = MCDetailModel().delegateDataByUUID(conf_id,conf_key,user_uuid,conf_schema)
		if delegate_data:
			mc_state_id = delegate_data['mc_state_id']
			delegate_no = delegate_data["delegate_no"]
			enc_delegate_no = Cryptography.encrypt(delegate_no)

			return render_template('mc_details/mc_delegate_info.html',data=delegate_data,delegate_no=delegate_no,enc_delegate_no=enc_delegate_no,conf_id = conf_id,conf_key = conf_key,mc_state_id=mc_state_id,states=states,conf=conf_data)
		else :
			return  "<h3 style='color:red;text-align:center'>Record does not exist.</h3>"		
	else :
		return  "<h3 style='color:red;text-align:center'>Invalid URL </h3>"


@app.route('/post_mc_delegate_info', methods = ["GET", "POST"])
def PostMCDelegateInfo():
	now            = datetime.now()
	curr_dt   	   = now.strftime("%Y-%m-%d %H:%M:%S")
	curr_dt_1      = now.strftime("%d/%m/%Y, %H:%M:%S")
	del_table_name = None
	enc_delegate_no = request.values.get("enc_delegate_no")
	conf_id         = request.values.get("conf_id")
	conf_key        = request.values.get("conf_key")
	mc_number       = request.values.get("mc_number") or ''
	mc_state_id     = request.values.get("mc_state_id") or ''
	delegate_no     = request.values.get("delegate_no")
	email          = request.values.get("email") or  ' '
	mobile         = request.values.get("mobile") or  ' '
	prefix         = request.values.get("prefix") or  ' '
	full_name      = request.values.get("full_name") or  ' '
	full_name_1    = prefix +" "+full_name if prefix else full_name
	conf_id         = int(conf_id) if conf_id else conf_id
	conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
	conf_schema = conf_data['conf_schema']
	if not conf_data :
		return redirect(url_for('mc_details.MedicalCouncilLogin',conf_id=conf_id,conf_key=conf_key))
	else :
		del_table_name = conf_schema + ".delegates"

	if "'" in delegate_no:
		delegate_no = delegate_no.replace("'", "")
		
	delegate_no = int(delegate_no)	
	if "'" in mc_state_id:
		mc_state_id = mc_state_id.replace("'", "")
		
	mc_state_id = int(mc_state_id) if mc_state_id else mc_state_id

	
	data_for_update={"mc_number":mc_number ,"mc_state_id" : mc_state_id , "updated_at" : curr_dt,"mc_data_updated_at" : curr_dt}
	state_name = MCDetailModel().getMCState(mc_state_id)
	if state_name : 
		state_name = state_name["state_name"]
	else:
		state_name = ""	

	# check duplicate email
# 	check_email = MCDetailModel().check_delegates_email(conf_id,email,delegate_no,conf_schema)

	enc_delegate_no = Cryptography.encrypt(delegate_no)
# 	if check_email:
# 		exist_email  = check_email['email'] 
# 		exist_mobile = check_email['mobile']
# 		exist_name   = check_email['prefix']+" "+check_email['full_name']
# 		flash("The email you have provided is already mapped for <br> "+str(exist_name)+" ","errorMsg")
# 		return redirect(url_for('mc_details.DelegateMCInfo',conf_id=conf_id,conf_key=conf_key,enc_delegate_no=enc_delegate_no))
# 	else :
# 		# check duplicate mobile
# 		check_mobile = MCDetailModel().check_delegates_mobile(conf_id,mobile,delegate_no,conf_schema)
# 		if check_mobile:
# 			exist_email  = check_mobile['email']
# 			exist_mobile = check_mobile['mobile']
# 			exist_name   = check_mobile['prefix']+" "+check_mobile['full_name']
# 			flash("The mobile number you have provided is already mapped for <br> "+str(exist_name)+" ","errorMsg")
# 			return redirect(url_for('mc_details.DelegateMCInfo',conf_id=conf_id,conf_key=conf_key,enc_delegate_no=enc_delegate_no))
# 		else:
# 			pass	

	
	insert_data    = MCDetailModel().insert_delegate_in_mc_delegates(conf_id,delegate_no,curr_dt,conf_schema) # before update delegate data first insert into mcc_delegates table
	update_stmt    = None
	update_mc_data   = MCDetailModel().updateMCDataNew(data_for_update,delegate_no,conf_id,update_stmt,conf_schema)
	if update_mc_data == "success" :
		delegate_data = MCDetailModel().delegateDataByDelegateNo(conf_id,conf_key,delegate_no,conf_schema)
		data = delegate_data

		full_name_1 = data["prefix"] + " " + data["full_name"] if data["prefix"] else data["full_name"]

		subject = "Dear  "+  full_name_1 +", your medical council registration details have been updated at " + curr_dt_1
		email =   data["email"]
	
		if email :
			html = render_template('mc_details/email/mc_updated_thanks_mail.html',data = data,conf= conf_data,email=email)
			EMAIL.sendMail(subject,html,email,conf_data) # please uncomment after testing
		return "<h4><center>Thank you for the update.</center></h4>"
		return render_template('mc_details/mc_thanks_screen.html')
	else :
		return 	update_mc_data
		return  "<h3 style='color:red;text-align:center'>"+ update_mc_data +"</h3>"		




@app.route('/<int:conf_id>/<conf_key>/mc_login', methods = ["GET", "POST"])
def MCLogin(conf_id,conf_key):
	conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
	if conf_data :
		return render_template('mc_details/login_by_email_or_mobile.html',conf_id = conf_id,conf_key=conf_key,conf  = conf_data)
	else :
		return  "<h3 style='color:red;text-align:center'>Invalid URL </h3>"



@app.route('/<int:conf_id>/<conf_key>/post_mc_login', methods = ["GET", "POST"])
def PostMCLogin(conf_id,conf_key):
	conf_data = MCDetailModel().checkConfData(conf_id,conf_key)
	conf_schema = conf_data['conf_schema']
	email_or_mobile  = request.values.get("email_or_mobile")
	
	email_regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
	mobile_regex = r'^[6-9]\d{9}$'

	if email_or_mobile:
		if re.fullmatch(email_regex, email_or_mobile):
			delegate_data = MCDetailModel().delegateDataByEmail(conf_id,conf_key,email_or_mobile,conf_schema)
		elif re.fullmatch(mobile_regex, email_or_mobile):
			delegate_data = MCDetailModel().delegateDataByMobile(conf_id,conf_key,email_or_mobile,conf_schema)
		else:
			flash("Please enter a valid email ID or mobile number", "errorMsg")
			return redirect(url_for('mc_details.MCLogin',conf_id=conf_id,conf_key=conf_key))		 
	else:
		flash("Please enter a valid email ID or mobile number", "errorMsg")
		return redirect(url_for('mc_details.MCLogin',conf_id=conf_id,conf_key=conf_key))		 

	if delegate_data :
		delegate_no     = delegate_data.get('delegate_no')
		enc_delegate_no = Cryptography.encrypt(delegate_no)
		return redirect(url_for('mc_details.DelegateMCInfo',enc_delegate_no =enc_delegate_no,conf_id=conf_id,conf_key=conf_key))
	else : 
		flash("Record not found" , "errorMsg")
		return redirect(url_for('mc_details.MCLogin',conf_id=conf_id,conf_key=conf_key))
		
	mc_state_id  = None
	if conf_id :
		country_id = 101
		return render_template('mc_details/login_by_delegateno.html',conf_id = conf_id,conf_key=conf_key)
		
	else :
		return  "<h3 style='color:red;text-align:center'>Invalid URL </h3>"

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