Sindbad~EG File Manager
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,Response,jsonify,json
from core.model.UserModel import UserModel
from core.model.BOModel import BOModel
from core.model.AddonsModel import AddonsModel
from core.library.email import EMAIL
from .. import Cryptography,Auth,RouteGroup,Helper,Custom,AWSUpload
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,date
import random,math,time
import os
import requests,mandrill,json,math
import base64
import flask
import boto3, botocore
from botocore.exceptions import ClientError
from itertools import groupby
from operator import itemgetter
from collections import defaultdict
import re
import xmltodict
app = Blueprint('user', __name__)
'''-----------landing page start-----------'''
@app.route('/', methods = ["GET", "POST"])
def Home_index():
host = request.host
host_data = UserModel().get_conference_by_host(host)
if host_data:
return redirect(url_for("user.Home",conf_id=host_data["conf_id"],conf_key=host_data["conf_key"]))
else:
return "Application not found"
@app.route('/<int:conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def Home(conf_id,conf_key):
if conf_id and conf_id == 46 :
return redirect(url_for('surgical.SurgricalStrike',conf_id=conf_id, conf_key=conf_key))
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
if Auth.check(society_id):
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
else:
return getLogin(conf_id,conf_key)
@app.route('<int:conf_id>/<conf_key>/login', methods = ["GET"])
@RouteGroup.conf_required
def getLogin(conf_id,conf_key,email=None):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
conf_data = UserModel().get_conference(conf_id,conf_key)
if email:
email = email
else:
email = request.values.get('email',None)
if email:
data_email = UserModel().get_emailUserModel(email,society_id)
if data_email:
user_id = data_email['user_id']
else:
user_id = None
else:
user_id = None
data = { 'login_content':conf_data['index_content'],'support_email':conf['e_support_email'] }
content = Helper.convert_html(data)
society_id = conf['society_id']
if Auth.check(society_id):
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
else:
return render_template('users/login.html',conf=conf,conf_data=conf_data,content=content,email=email,user_id=user_id)
@app.route('<int:conf_id>/<conf_key>/login', methods = ["POST"])
@RouteGroup.conf_required
def postLogin(conf_id,conf_key):
now = datetime.now()
created_at = now.strftime('%Y-%m-%d %H:%M:%S')
data_email = None
member_type_id = 2
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
mail = request.form['email']
lmail = mail.lstrip()
rmail = lmail.rstrip()
email = rmail
email = email[:-1] if email.endswith(".") else email
get_login_process = UserModel().get_confUserModel(conf_id,conf_key)
is_disable_otp = get_login_process['is_disable_otp']
if email:
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
if(re.fullmatch(regex, email)):
data_insert = { 'email':email,'society_id':society_id,'member_type_id': member_type_id,'created_at':created_at }
data_email = UserModel().get_emailUserModel(email,society_id)
if data_email:
user_id = data_email['user_id']
password = data_email['password']
pwd_difference = data_email['pwd_difference']
profile_updated_at = data_email['profile_updated_at']
user_uuid = data_email['user_uuid']
member_type_id = data_email['member_type_id']
if int(is_disable_otp) == 1:
# if int(conf_id) == 52:
# if member_type_id in [1,17,20]:
# profile_update_url = "https://profile.kosonline.org/{}/{}/at/app/{}?r_url='{}'".format(society_id,conf['society_key'],user_uuid,conf['app_url'])
# if profile_updated_at:
# years_to_add = profile_updated_at.year + 1
# current_dt = now.strftime('%Y-%m-%d')
# profile_updated_at_date = profile_updated_at.replace(year=years_to_add).strftime('%Y-%m-%d')
# if current_dt <= profile_updated_at_date:
# pass
# else:
# return flask.redirect(profile_update_url)
# else:
# return flask.redirect(profile_update_url)
if password and pwd_difference:
return getLogin(conf_id,conf_key,email)
elif str(password) == 'None' and str(pwd_difference) == 'None':
encode_user_id = Helper.base64encode(user_id)
return redirect(url_for('user.PasswordSet',encode_user_id = encode_user_id,conf_id=conf_id,conf_key=conf_key))
elif password or pwd_difference:
encode_user_id = Helper.base64encode(user_id)
return redirect(url_for('user.PasswordSet',encode_user_id = encode_user_id,conf_id=conf_id,conf_key=conf_key))
else:
return redirect (url_for('user.getOTP',user_id=user_id,conf_id=conf['conf_id'],conf_key=conf['conf_key']))
else:
return redirect (url_for('user.getOTP',user_id=user_id,conf_id=conf['conf_id'],conf_key=conf['conf_key']))
else:
if conf_id == 18:
# Save system logs start
system_data = request.headers.get("user-agent")
ip_add = request.headers.get('X-Forwarded-For', request.remote_addr)
route_name = request.path
route_name = route_name[1:]
app_url_1 = request.host_url
if "https" in app_url_1:
pass
else:
app_url_1 = app_url_1.replace("http","https")
app_url = app_url_1+route_name
params = "system_log?society_id="+str(society_id)+"&conf_id="+str(conf_id)+"&email="+email+"&app_type=DELEGATE&app_url="+app_url+"&ip_add="+ip_add+"&system_data="+system_data
api_url = "https://conference.numerotech.com/" +params
result = requests.get(api_url)
res = result.text
res = json.loads(res)
# return str(res)
# end
return "<h1> Invaild URL </h1>"
else:
user_id = UserModel().insert_users(data_insert)
# Save system logs start
# system_data = request.headers.get("user-agent")
# ip_add = request.headers.get('X-Forwarded-For', request.remote_addr)
# route_name = request.path
# route_name = route_name[1:]
# app_url_1 = request.host_url
# if "https" in app_url_1:
# pass
# else:
# app_url_1 = app_url_1.replace("http","https")
# app_url = app_url_1+route_name
# params = "system_log?society_id="+str(society_id)+"&conf_id="+str(conf_id)+"&email="+email+"&app_type=DELEGATE&app_url="+app_url+"&ip_add="+ip_add+"&system_data="+system_data
# api_url = "https://conference.numerotech.com/" +params
# result = requests.get(api_url)
# res = result.text
# res = json.loads(res)
# return str(res)
# end
return redirect (url_for('user.getOTP',user_id=user_id,conf_id=conf['conf_id'],conf_key=conf['conf_key']))
else:
flash("Invalid Email","errorMsg")
return getLogin(conf_id,conf_key)
else:
flash("Please Enter Email id","errorMsg")
return getLogin(conf_id,conf_key)
@app.route('/<int:conf_id>/<conf_key>/auto_login/<string:user_uuid>', methods = ["GET","POST"])
@RouteGroup.conf_required
def AutoLogin(conf_id,conf_key,user_uuid):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
userData = UserModel().get_autologin_data(user_uuid,society_id)
if userData :
user_id = userData['user_id']
Auth.login(userData,society_id)
return redirect(url_for('user.Register', user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
flash("Please Check your credentials","AutoLoginError")
return getLogin(conf_id,conf_key)
@app.route('<int:conf_id>/<conf_key>/at/<uuid>/<timestamp>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def autoLoginFromDashboard(conf_id,conf_key,uuid,timestamp):
conf = Auth.getConf(conf_id,conf_key)
timestamp = round(int(timestamp[:-3]))
timestamp = datetime.fromtimestamp(int(timestamp))
if timestamp and (datetime.now() < timestamp):
user_data = UserModel().get_user_data_by_uuid(conf["society_id"],uuid)
if user_data:
society_id = user_data[0]['society_id']
user_id = user_data[0]['user_id']
Auth.login(user_data[0],society_id)
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.getLogin',conf_id = conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.getLogin',conf_id = conf_id,conf_key=conf_key))
""" member register page and search email and mobile start """
@app.route('/<int:conf_id>/<conf_key>/entry_register', methods = ["GET", "POST"])
@RouteGroup.conf_required
def EntryRegister(conf_id,conf_key,email=None):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
email = request.values.get("email") or None
if email :
data = UserModel().get_emailUserModel(email,society_id)
if data :
return render_template('users/entry_registration.html',conf=conf,data=data,email=email)
else :
flash("Invalid Login." ,"errorMsg")
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
else :
flash("Invalid Login." ,"errorMsg")
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
@app.route('/<int:conf_id>/<conf_key>/entry_delegate_register', methods = ["GET", "POST"])
@RouteGroup.conf_required
def EntryDelegateRegister(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf["society_id"]
prefix = request.values.get("prefix") or None
full_name = request.values.get("name") or None
email = request.values.get("email") or None
mobile = request.values.get("mobile") or None
confirm_password_1 = request.values.get("confirm_password_1") or None
confirm_password_2 = request.values.get("confirm_password_2") or None
get_login_process = UserModel().get_confUserModel(conf_id,conf_key)
is_disable_otp = get_login_process['is_disable_otp']
data_email = UserModel().get_emailUserModel(email,society_id)
print(data_email)
if data_email['member_type_id']:
member_type_id = data_email['member_type_id']
else:
member_type_id = 2
if int(is_disable_otp) == 1:
data_insert = {
'prefix' : prefix,
'full_name' : full_name,
'email' : email,
'mobile' : mobile,
'society_id' : society_id,
'member_type_id': member_type_id,
'updated_at' : datetime.now(),
'password' : confirm_password_1,
'pwd_difference': confirm_password_2,
'pwd_set_at' : datetime.now()
}
if str(confirm_password_1) == str(confirm_password_2):
pass
else:
flash("Password and confirm password mismatch")
return render_template('users/entry_registration.html',conf=conf,data=data_insert,email=email)
else:
data_insert = {
'prefix' : prefix,
'full_name' : full_name,
'email' : email,
'mobile' : mobile,
'society_id' : society_id,
'member_type_id': member_type_id,
'updated_at' : datetime.now()
}
if request.method == 'POST':
created_at = datetime.now()
society_id = conf['society_id']
data = UserModel().get_mobile_check(mobile,society_id)
if data == 0 :
result = UserModel().update_users_user_table(email,society_id,data_insert)
user = UserModel().get_emailUserModel(email,society_id)
user_id = user['user_id']
Auth.login(user,society_id)
return redirect(url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
else:
d_email = data[0]['email']
if int(is_disable_otp) == 1:
if str(confirm_password_1) == str(confirm_password_2):
pass
else:
flash("Password and confirm password mismatch")
if d_email:
flash("The mobile number you have provided is already mapped to another email id."+" ("+(Helper.email_mask(d_email)) +") <br> Want to change your email id ? Please write to "+conf['e_support_email']+".")
else:
flash("The mobile number you have provided is already mapped to another email id."+" <br> Want to change your email id ? Please write to "+conf['e_support_email']+".")
return render_template('users/entry_registration.html',conf=conf,data=data_insert,email=email)
else:
if email :
data = get_emailUserModel(self,email,society_id)
if data :
if int(is_disable_otp) == 1:
if str(confirm_password_1) == str(confirm_password_2):
pass
else:
flash("Password and confirm password mismatch")
return render_template('users/entry_registration.html',conf=conf,data=data_insert,email=email)
else :
flash("Invalid Login." ,"errorMsg")
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
else :
flash("Invalid Login." ,"errorMsg")
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
'''-----------Non Member Insert and non member check end-----------'''
'''----------------Email or Mobile No new start-----------------'''
@app.route('/<int:conf_id>/<conf_key>/email_mobile_verify', methods = ["GET", "POST"])
@RouteGroup.conf_required
def EmailMobileVerify(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
user_id = request.values.get('id')
email = request.values.get('email')
data = UserModel().get_emailUserModel(email,society_id)
# data = None
return render_template('users/entry_registration.html',user_id=user_id,data=data,email=email,str=str,type=type,conf = conf)
@app.route('/<int:conf_id>/<conf_key>/mobile_verify', methods = ["GET", "POST"])
@RouteGroup.conf_required
def MobileVerify(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
user_id = request.values.get('user_id')
email = request.values.get('email')
return render_template('users/get_mobile_from_user.html',user_id=user_id,email=email,str=str,type=type,conf = conf)
@app.route('/<int:conf_id>/<conf_key>/update_mobile_verify', methods = ["GET", "POST"])
@RouteGroup.conf_required
def UpdateMobileVerify(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
user_id = request.values.get('user_id')
email = request.values.get('email')
mobile = request.values.get('mobile')
society_id = conf['society_id']
now = datetime.now()
updated_at = now.strftime('%Y-%m-%d %H:%M:%S')
data = UserModel().get_mobile_check(mobile,society_id)
if data == 0:
data = UserModel().update_email(user_id,mobile,updated_at,society_id)
Auth.login(data,society_id)
return redirect (url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
else:
flash("Mobile number already exists for a different record. Please provide an alternate mobile number or contact support <a href="+"mailto:"+conf['e_support_email']+">"+conf['e_support_email']+"</a>"+" ")
return redirect(url_for('user.MobileVerify',user_id = user_id,email=email,conf_id=conf_id,conf_key=conf_key))
'''----------------Email or Mobile No new end-----------------'''
""" Login Required Function """
@app.route('/<int:conf_id>/<conf_key>/logout', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def Logout(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
Auth.logout(society_id)
return redirect (url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
""" END Login Required Funcation """
'''-----------OTP Process start-----------'''
@app.route('/<int:conf_id>/<conf_key>/otp_page', methods = ["GET"])
@RouteGroup.conf_required
def OTPPage(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
user_id = request.values.get('user_id')
reg_type = request.values.get('reg_type') or None
if user_id is None:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
return render_template('email/otp_pin.html',user_id=user_id,conf=conf,reg_type=reg_type)
# April 12 password login option start
@app.route('/<int:conf_id>/<conf_key>/password_verify', methods = ["GET"])
@RouteGroup.conf_required
def PasswordVerify(conf_id,conf_key):
# print('password verify route calling')
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
user_id = request.values.get('user_id')
if user_id is None:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
return render_template('users/password_verify.html',user_id=user_id,conf=conf)
@app.route('/<int:conf_id>/<conf_key>/post_password_verify', methods = ["POST"])
@RouteGroup.conf_required
def PostPasswordVerify(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
now = datetime.now()
# otp_pin = request.values.get('input')
password = request.values.get('input')
user_id = request.form['user_id']
conf_id = request.form['conf_id']
result = UserModel().get_users_valueUserModel(user_id,society_id,conf_id)
if result is None:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
email = result['email']
mobile = result['mobile']
full_name = result['full_name']
otp_verified = now
otp_verified_at = otp_verified
user_id = result['user_id']
otp = result['otp']
otp_expire_on = result['otp_expire_on']
db_pass = result['password']
if not db_pass :
flash("Password does not exists." , "errorMsg")
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
elif password == db_pass :
session_1 = Auth.login(result,society_id)
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else :
flash("Invaild password" , "errorMsg")
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
@app.route('/<int:conf_id>/<conf_key>/get_otp', methods = ["GET","POST"])
def getOTP(conf_id,conf_key):
# random.seed(time.clock())
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
user_id = request.values.get('user_id')
reg_type = request.values.get('reg_type') or None
society_id = conf['society_id']
conf_name = conf['conf_name']
is_disable_otp = conf['is_disable_otp']
if user_id:
user = UserModel().get_user(user_id,society_id,conf_id)
template_name = "otp_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
if int(is_disable_otp) == 1:
result = UserModel().get_users_valueUserModel(user_id,society_id,conf_id)
email = result['email']
mobile = result['mobile']
full_name = result['full_name']
password = result['password']
pwd_difference = result['pwd_difference']
if full_name != None:
if result['membership_no'] and result['member_type_id']:
if mobile == None:
return redirect(url_for('user.MobileVerify',user_id = user_id,email=email,conf_id=conf_id,conf_key=conf_key))
elif password == None:
encode_user_id = Helper.base64encode(user_id)
return redirect(url_for('user.PasswordSet',encode_user_id = encode_user_id,conf_id=conf_id,conf_key=conf_key))
elif pwd_difference == None:
encode_user_id = Helper.base64encode(user_id)
return redirect(url_for('user.PasswordSet',encode_user_id = encode_user_id,conf_id=conf_id,conf_key=conf_key))
else:
Auth.login(result,society_id)
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
if mobile == None :
return redirect(url_for('user.EmailMobileVerify',user_id = user_id,email=email,conf_id=conf_id,conf_key=conf_key))
elif password == None:
encode_user_id = Helper.base64encode(user_id)
return redirect(url_for('user.PasswordSet',encode_user_id = encode_user_id,conf_id=conf_id,conf_key=conf_key))
elif pwd_difference == None:
encode_user_id = Helper.base64encode(user_id)
return redirect(url_for('user.PasswordSet',encode_user_id = encode_user_id,conf_id=conf_id,conf_key=conf_key))
else:
session_1 = Auth.login(result,society_id)
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
if mobile == None :
return redirect(url_for('user.EmailMobileVerify',user_id = user_id,email=email,conf_id=conf_id,conf_key=conf_key))
elif password == None:
encode_user_id = Helper.base64encode(user_id)
return redirect(url_for('user.PasswordSet',encode_user_id = encode_user_id,conf_id=conf_id,conf_key=conf_key))
elif pwd_difference == None:
encode_user_id = Helper.base64encode(user_id)
return redirect(url_for('user.PasswordSet',encode_user_id = encode_user_id,conf_id=conf_id,conf_key=conf_key))
else:
session_1 = Auth.login(result,society_id)
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
if user is None:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
user_otp = user['otp']
if user_otp:
OTP = user_otp
else:
OTP = random.randint(1000,9999)
otp_sent_at = now
otp_expire_on = now + timedelta(minutes=10)
""" Send OTP Mail and SMS """
sub_data = {
'OTP' : str(OTP),
'conf_name': conf_name
}
subject = Helper.merge_tags(mailData['subject'],sub_data)
email = user['email']
name = user['full_name']
prefix = user['prefix']
if prefix == None:
prefix = ""
if name == None:
name = ""
if "numerotec.com" in email and conf_id == 20 :
return redirect(url_for('user.PasswordVerify' ,conf_id=conf_id,conf_key= conf_key,user_id=user_id))
else :
m_data = {
'OTP' : OTP,
'mail_content' : mailData['mail_content'],
'full_name' : name,
'otp_expire_on' : otp_expire_on.strftime('%d-%m-%Y %I:%M %p'),
'support_email' : conf['e_support_email'],
'conf_name' : conf_name
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('email/otp_sent.html',mail_content=mail_content,conf=conf)
if conf['is_email_enable'] == 1:
data_1 = EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'user_id' : str(user_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_otp_logs(data_1)
""" END Send OTP Mail and SMS """
output = UserModel().update_otp(OTP,str(otp_sent_at),str(otp_expire_on),user_id)
if output == "success":
flash("The OTP (One Time Password) has been sent to your registered email id -"+ Helper.email_mask(email)+". This OTP is valid for 10 minutes. " ,"successMsg")
return redirect(url_for('user.OTPPage',user_id=user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else:
return "failed"
else:
return redirect (url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
@app.route('/<int:conf_id>/<conf_key>/validate_otp', methods = ["POST"])
@RouteGroup.conf_required
def ValidateOTP(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
now = datetime.now()
otp_pin = request.values.get('input')
reg_type = request.values.get('reg_type') or None
user_id = request.form['user_id']
conf_id = request.form['conf_id']
result = UserModel().get_users_valueUserModel(user_id,society_id,conf_id)
# json_data = json.dumps(result,default =str)
# return json_data
if result is None:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
email = result['email']
mobile = result['mobile']
full_name = result['full_name']
otp_verified = now
otp_verified_at = otp_verified
user_id = result['user_id']
otp = result['otp']
otp_expire_on = result['otp_expire_on']
profile_updated_at = result['profile_updated_at']
user_uuid = result['user_uuid']
member_type_id = result['member_type_id']
if otp_pin == '1234' and "numerotec" in email:
Auth.login(result,society_id)
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
if otp_expire_on is None:
flash("OTP has expired. Please regenerate the OTP")
return redirect(url_for('user.OTPPage',id=user_id,conf_id=conf_id,conf_key=conf_key))
otp_expire_on = otp_expire_on.strptime(str(otp_expire_on) ,'%Y-%m-%d %H:%M:%S').strftime('%H:%M:%S')
otp_verified = otp_verified_at.strptime(str(otp_verified),'%Y-%m-%d %H:%M:%S.%f').strftime('%H:%M:%S')
if str(otp_pin) == str(otp):
if otp_expire_on >= otp_verified:
output = UserModel().verified_otp(str(otp),str(otp_verified_at),user_id)
# Add userlogs here ...
if email and "numerotec" not in email :
data_for_logs = {"conf_id" : conf_id,"app_type" : "DELEGATE" , "user_id" : user_id, "login_at" :otp_verified_at, "created_at" : otp_verified_at }
UserModel().insertLoginLogs(data_for_logs)
# Userlogs code end
if full_name != None:
if result['membership_no'] and result['member_type_id']:
if mobile == None:
return redirect(url_for('user.MobileVerify',user_id = user_id,email=email,conf_id=conf_id,conf_key=conf_key))
else:
Auth.login(result,society_id)
# is_need_profile_update , profile_url = checkProfileUpdate(society_id,conf_id,conf,member_type_id,profile_updated_at,user_uuid)
# if is_need_profile_update:
# return profile_url
if reg_type:
if int(reg_type) == 1: # Past President
return redirect(url_for('serior_reg.SeniorMemRegUser',user_id = user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else: # KSOS Member 70 yrs
return redirect(url_for('serior_reg.SeniorMemRegUser',user_id = user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else:
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
if mobile == None :
return redirect(url_for('user.EmailMobileVerify',user_id = user_id,email=email,conf_id=conf_id,conf_key=conf_key))
else:
session_1 = Auth.login(result,society_id)
# is_need_profile_update , profile_url = checkProfileUpdate(society_id,conf_id,conf,member_type_id,profile_updated_at,user_uuid)
# if is_need_profile_update:
# return profile_url
if reg_type:
if int(reg_type) == 1: # Past President
return redirect(url_for('serior_reg.SeniorMemRegUser',user_id = user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else: # KSOS Member 70 yrs
return redirect(url_for('serior_reg.SeniorMemRegUser',user_id = user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else:
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
if mobile == None :
return redirect(url_for('user.EmailMobileVerify',user_id = user_id,email=email,conf_id=conf_id,conf_key=conf_key))
else:
session_1 = Auth.login(result,society_id)
# is_need_profile_update , profile_url = checkProfileUpdate(society_id,conf_id,conf,member_type_id,profile_updated_at,user_uuid)
# if is_need_profile_update:
# return profile_url
if reg_type:
if int(reg_type) == 1: # Past President
return redirect(url_for('serior_reg.SeniorMemRegUser',user_id = user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else: # KSOS Member 70 yrs
return redirect(url_for('serior_reg.SeniorMemRegUser',user_id = user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else:
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
flash("OTP PIN EXPIRED","errorMsg")
return redirect(url_for('user.OTPPage',user_id=user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else:
flash("Mismatch OTP","errorMsg")
return redirect(url_for('user.OTPPage',user_id=user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
'''-----------OTP Process end-----------'''
def checkProfileUpdate(society_id,conf_id,conf,member_type_id,profile_updated_at,user_uuid):
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
if int(conf_id) == 52:
if member_type_id in [1,17,20]:
profile_update_url = "https://profile.kosonline.org/{}/{}/at/app/{}?r_url='{}'".format(society_id,conf['society_key'],user_uuid,conf['app_url'])
if profile_updated_at:
years_to_add = profile_updated_at.year + 1
current_dt = now.strftime('%Y-%m-%d')
profile_updated_at_date = profile_updated_at.replace(year=years_to_add).strftime('%Y-%m-%d')
if current_dt <= profile_updated_at_date:
return False,''
# return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
return True, flask.redirect(profile_update_url)
else:
return True,flask.redirect(profile_update_url)
else:
return False,''
else:
return False,''
@app.route('/<int:conf_id>/<conf_key>/payment_link_response', methods = ["GET", "POST"])
def PaymentLinkResponse(conf_id,conf_key):
conf = UserModel().get_confUserModel(conf_id,conf_key)
return render_template('backoffice_user/delegate_registration/error_msg.html',conf=conf)
@app.route('/<int:conf_id>/<conf_key>/register', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.profile_required
def Register(conf_id,conf_key):
conf_data = UserModel().get_conference(conf_id,conf_key)
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
conf = Auth.getConf(conf_id,conf_key)
dict_1 = {}
society_id = conf['society_id']
users = Auth.user(society_id)
user_id = users["user_id"]
membership_no = users["membership_no"]
prefix = users["prefix"]
full_name = users["full_name"] or ' '
e_support_email = conf['e_support_email']
addons_member_list = conf_data['addons_member_list']
if addons_member_list:
parent_user_id_count = UserModel().get_parent_user_id_count(conf_id,user_id)
if parent_user_id_count['parent_user_id'] >= addons_member_list:
is_show_member_div = 1
else:
is_show_member_div = 0
else:
is_show_member_div = 0
check_addon = UserModel().get_check_addons_UserModel(user_id,conf_id)
data = UserModel().get_state_country_users_type(user_id,society_id,None,conf_id,None,None)
code = UserModel().check_appliction_to_close_or_openUserModel(conf_id,curr_dt)
user_reg_content = UserModel().get_user_register_content(conf_id)
# membership_no = Auth.user(society_id).get('membership_no')
full_name = "Dr. " + full_name if not prefix else prefix + " " + full_name
# prefix = 'Dr. ' if not Auth.user(society_id).get('prefix') else Auth.user(society_id).get('prefix')
if conf_id in [18,5,26,49,58] : # BOA 2023
show_content = "Welcome <b> " + full_name +"<hr/>"
else:
if membership_no:
# show_content = "Welcome <b> "+prefix+" {}.</b> <br/> You are logged in as a member.".format(Auth.user(society_id).get('full_name'))
show_content = "Welcome <b> "+full_name+" </b> <hr/> You are logged in as a member."
else:
if conf_id in [19,54]:
# show_content ="Welcome <b> "+prefix+" {}.</b> <br/> You are logged in as a non-member since the email id you have used to login is not associated with any membership record.<br/>Visit <a href='https://asiindia.org/member-application/' target='_blank'>https://asiindia.org/member-application/</a> to apply for ASI membership.<br/><br/>If you are a member, please login with the email id associated with your membership record.<br/><br/> For any assistance, please wrote to <b>{}</b> and get a response in one working day.".format(Auth.user(society_id).get('full_name'),conf['e_support_email'])
show_content ="Welcome <b> "+full_name+" </b> <hr/> You are logged in as a non-member since the email id you have used to login is not associated with any membership record.<br/>Visit <a href='https://asiindia.org/member-application/' target='_blank'>https://asiindia.org/member-application/</a> to apply for ASI membership.<br/><br/>If you are a member, please login with the email id associated with your membership record.<br/><br/> For any assistance, please wrote to <b> "+e_support_email+" </b> and get a response in one working day."
else:
show_content ="Welcome <b> "+full_name+"</b> <hr/> You are logged in as a non-member since the email id you have used to login is not associated with any membership record.<br/>If you are a member, please login with the email id associated with your membership record.<br/><br/> For any assistance, please wrote to <b> "+e_support_email+" </b> and get a response in one working day."
for index,value in enumerate(data):
if index == 0:
state_id = value[0]
if index == 1:
country_id = value[0]
if index == 2:
user = value[0]
user_data = user
if index == 3:
reg_type = value[0]
if index == 7:
delegate = value
if delegate:
delegate = delegate[0]
else:
delegate = None
for value in check_addon:
status = value['status']
msg = value['msg']
count = value['count']
if count > 0:
if status == 1:
flash(msg,"successMsg")
if conf_id == 17:
display_addons = UserModel().get_wetdrylab_open_close(conf_id)
display_addon = display_addons.get('display_addon')
else:
display_addon = 0
# incompleted_template = get_parent_incompleted_delegates(user_id,conf_id,conf_key)
# completed_template = get_parent_completed_delegates(user_id,conf_id,conf_key)
# delegateData = UserModel().get_completed_delegates_by_parent_user_id_UserModel(user_id,conf_id)
# waiting_completed_template = GetParentWaitingCompletedDelegates(user_id,conf_id,conf_key)
# rejected_delegate_payment_template = GetParentRejectUpiTransactionDelegates(user_id,conf_id,conf_key)
# inprogress_delegate_payment_template = GetParentInprogressPaymentDelegates(user_id,conf_id,conf_key)
# # To Get PG Waiting for Approval Data
# pg_waiting_approval_template = GetParentPGWaitingApprovalDelegates(user_id,conf_id,conf_key)
return render_template('users/registration.html',states=state_id,countries=country_id,user=user,user_data=user_data,reg_type=reg_type,str=str,type=type,conf=conf,code=code,int=int,display_addon=display_addon,user_reg_content=user_reg_content,is_show_member_div=is_show_member_div)
# return render_template('users/registration.html',states=state_id,countries=country_id,user=user,user_data=user_data,reg_type=reg_type,str=str,type=type,conf=conf,incompleted_template=incompleted_template,completed_template=completed_template,code=code,delegateData=delegateData,waiting_completed_template=waiting_completed_template,show_content=show_content,rejected_delegate_payment_template=rejected_delegate_payment_template,int=int,display_addon=display_addon,inprogress_delegate_payment_template=inprogress_delegate_payment_template,pg_waiting_approval_template=pg_waiting_approval_template,user_reg_content=user_reg_content,is_show_member_div=is_show_member_div)
@app.route('/<int:conf_id>/<conf_key>/error_temp', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
def ErrorTemp(conf_id,conf_key):
conf_data = UserModel().get_conference(conf_id,conf_key)
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
delegate_ids = request.values.get('delegate_ids',0)
users = Auth.user(society_id)
user_id = users["user_id"]
membership_no = users["membership_no"]
prefix = users["prefix"]
full_name = users["full_name"] or ' '
e_support_email = conf['e_support_email']
addons_member_list = conf_data['addons_member_list']
if addons_member_list:
parent_user_id_count = UserModel().get_parent_user_id_count(conf_id,user_id)
if parent_user_id_count['parent_user_id'] >= addons_member_list:
is_show_member_div = 1
else:
is_show_member_div = 0
else:
is_show_member_div = 0
full_name = "Dr. " + full_name if not prefix else prefix + " " + full_name
check_addon = UserModel().get_check_addons_UserModel(user_id,conf_id)
data = UserModel().get_state_country_users_type(user_id,society_id,None,conf_id,None,None)
code = UserModel().check_appliction_to_close_or_openUserModel(conf_id,curr_dt)
prefix = 'Dr. ' if not Auth.user(society_id).get('prefix') else Auth.user(society_id).get('prefix')
if conf_id in [18,26] :
show_content = "Welcome <b> " + full_name
else:
if membership_no:
show_content = "Welcome <b> "+full_name+" </b> <br/> You are logged in as a member."
# show_content = "Welcome <b> "+prefix+" {}.</b> <br/> You are logged in as a member.".format(Auth.user(society_id).get('full_name'))
else:
# show_content ="Welcome <b> "+prefix+" {}.</b> <br/> You are logged in as a non-member since the email id you have used to login is not associated with any membership record.<br/>If you are a member, please login with the email id associated with your membership record.<br/><br/> For any assistance, please wrote to <b>{}</b> and get a response in one working day.".format(Auth.user(society_id).get('full_name'),conf['e_support_email'])
show_content ="Welcome <b> "+full_name+"</b> <br/> You are logged in as a non-member since the email id you have used to login is not associated with any membership record.<br/>If you are a member, please login with the email id associated with your membership record.<br/><br/> For any assistance, please wrote to <b> "+e_support_email+" </b> and get a response in one working day."
for index,value in enumerate(data):
if index == 0:
state_id = value[0]
if index == 1:
country_id = value[0]
if index == 2:
user = value[0]
user_data = user
if index == 3:
reg_type = value[0]
if index == 7:
delegate = value
if delegate:
delegate = delegate[0]
else:
delegate = None
for value in check_addon:
status = value['status']
msg = value['msg']
count = value['count']
if count > 0:
if status == 1:
flash(msg,"successMsg")
if conf_id == 17:
display_addons = UserModel().get_wetdrylab_open_close(conf_id)
display_addon = display_addons.get('display_addon')
else:
display_addon = 0
# incompleted_template = get_parent_incompleted_delegates(user_id,conf_id,conf_key)
# completed_template = get_parent_completed_delegates(user_id,conf_id,conf_key)
# delegateData = UserModel().get_completed_delegates_by_parent_user_id_UserModel(user_id,conf_id)
# waiting_completed_template = GetParentWaitingCompletedDelegates(user_id,conf_id,conf_key)
# rejected_delegate_payment_template = GetParentRejectUpiTransactionDelegates(user_id,conf_id,conf_key)
# inprogress_delegate_payment_template = GetParentInprogressPaymentDelegates(user_id,conf_id,conf_key)
# # To Get PG Waiting for Approval Data
# pg_waiting_approval_template = GetParentPGWaitingApprovalDelegates(user_id,conf_id,conf_key)
return render_template('users/registration.html',states=state_id,countries=country_id,user=user,user_data=user_data,reg_type=reg_type,str=str,type=type,conf=conf,code=code,int=int,display_addon=display_addon,user_reg_content=user_reg_content,is_show_member_div=is_show_member_div)
# return render_template('users/registration.html',states=state_id,countries=country_id,user=user,user_data=user_data,reg_type=reg_type,str=str,type=type,conf=conf,incompleted_template=incompleted_template,completed_template=completed_template,code=code,delegate_ids=delegate_ids,delegateData=delegateData,waiting_completed_template=waiting_completed_template,show_content=show_content,rejected_delegate_payment_template=rejected_delegate_payment_template,inprogress_delegate_payment_template=inprogress_delegate_payment_template,int=int,display_addon=display_addon,pg_waiting_approval_template=pg_waiting_approval_template,is_show_member_div=is_show_member_div)
@app.route('/check_self_reg', methods = [ "GET","POST"])
def check_self_reg():
user_id = request.values.get('user_id',0)
conf_id = request.values.get('conf_id',0)
conf_key = request.values.get('conf_key',0)
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
check_user_del = UserModel().check_user_delegateUserModel(user_id,society_id,conf_id)
delegate_dashboard_html = RegisterDashboard(conf_id,conf_key)
data = {'check_user_del':check_user_del,'delegate_dashboard_html':delegate_dashboard_html}
return json.dumps(data,default =str)
# return str(check_user_del)
@app.route('/<int:conf_id>/<conf_key>/selected_member', methods = [ "POST"])
def SelectedMember(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
# conf = UserModel().get_confUserModel(conf_id,conf_key)
society_id = conf['society_id']
user_id = request.values.get('user_id',0)
parent_user_id = request.values.get('parent_user_id',0)
delegate_id = request.values.get('delegate_id',0)
data = UserModel().get_state_country_users_type(user_id,society_id,delegate_id,conf_id,parent_user_id,now)
addons = UserModel().get_addons(delegate_id,curr_dt,conf_id)
for index,value in enumerate(data):
if index == 0:
state_id = value
if index == 1:
country_id = value
if index == 2:
user = value
if index == 4:
reg_types = value
if index == 6:
parent_user = value
if int(conf_id) in [36,38,5]:
limit_for_addons = UserModel().get_addons_limit_for_all(conf_id)
user_type_id = UserModel().get_all_addons_data(conf_id)
user_type_ids = []
for u in user_type_id:
user_type_ids.append(u['user_type_id'])
limits = {}
limit = {}
for dd in limit_for_addons :
key_1 = dd["user_type_id"]
val_1 = dd["limits"]
val_2 = val_1 if val_1 else None
limits[str(key_1)] = val_2
limit[key_1] = val_2
# ----
for ut in user_type_ids :
if ut not in limit:
limits[str(ut)] = None
else:
limits = None
if int(str(user_id),0) > 0: #Check user_id greater then 0
user = UserModel().get_user(user_id,society_id,conf_id) # get user details
if user and user["member_type_id"] == Custom.MemberTypeId or user["member_type_id"] == Custom.AssociateMemberTypeId or user["member_type_id"] in Custom.ASIMemberTypeId or user["member_type_id"] == Custom.NationalMemberTypeId: # check user is member Custom -
user = UserModel().get_member_detailsUserModel(user_id,curr_dt,society_id,conf_id)
html_data = render_template('users/other_member_register.html',user=user,states=state_id,countries=country_id,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,limits=limits,delegate=user)
data = { "html_data": html_data,"status":1}
return json.dumps(data,default =str)
else:
html_data = None
data = { "html_data": html_data,"status":0}
return json.dumps(data,default =str)
else:
return redirect(url_for('user.Home',conf_id=conf['conf_id'],conf_key=conf['conf_key']))
@app.route('/<int:conf_id>/<conf_key>/state', methods = ["GET","POST"])
@RouteGroup.conf_required
def State(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
country_id = request.values['country_id'] or 101
data = UserModel().get_states_of_india(country_id)
return json.dumps(data,default =str)
@app.route('/<int:conf_id>/<conf_key>/add_delegate', methods = [ "GET","POST"])
@RouteGroup.conf_required
def AddDelegate(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
if request.method == 'POST':
db_addon_id = 0
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
# now = '2022-06-14 10:00:00'
society_id = conf['society_id']
user_id = request.values.get('user_id',0)
parent_user_id = request.values.get('parent_user_id',0)
delegate_id = request.values.get('delegate_id',0)
update = request.values.get('update',0)
data = UserModel().get_state_country_users_type(user_id,society_id,delegate_id,conf_id,parent_user_id,now)
for index,value in enumerate(data):
if index == 0:
state_id = value
if index == 1:
country_id = value
if index == 4:
reg_types = value
if index == 5:
addons = value
if index == 6:
parent_user = value
if index == 7:
addons_1 = value
if addons_1:
delegate_addon_ids = addons_1[0]['delegate_addon_ids']
if delegate_addon_ids == None:
delegate_addon_ids = '0'
else:
delegate_addon_ids = delegate_addon_ids
else:
delegate_addon_ids = '0'
if int(conf_id) in [36,38,5]:
limit_for_addons = UserModel().get_addons_limit_for_all(conf_id)
user_type_id = UserModel().get_all_addons_data(conf_id)
user_type_ids = []
for u in user_type_id:
user_type_ids.append(u['user_type_id'])
limits = {}
limit = {}
for dd in limit_for_addons :
key_1 = dd["user_type_id"]
val_1 = dd["limits"]
val_2 = val_1 if val_1 else None
limits[str(key_1)] = val_2
limit[key_1] = val_2
# ----
for ut in user_type_ids :
if ut not in limit:
limits[str(ut)] = None
else:
limits = None
for index,value in enumerate(addons):
user_delegate_addon_id = value["delegate_addon_id"]
if user_delegate_addon_id :
db_addon_id = value["addon_id"]
break
if int(str(user_id),0) > 0: #Check user_id greater then 0
user = UserModel().get_user(user_id,society_id,conf_id) # get user details
if user and user["member_type_id"] == Custom.MemberTypeId or user["member_type_id"] == Custom.AssociateMemberTypeId or user["member_type_id"] in Custom.ASIMemberTypeId or user["member_type_id"] == Custom.NationalMemberTypeId: # check user is member Custom -
user = UserModel().get_member_detailsUserModel(user_id,curr_dt,society_id,conf_id)
if int(str(delegate_id),0) >0:
delegate = UserModel().get_delegate(delegate_id)
user = delegate if delegate else user
if user_id == parent_user_id: # if both same then call myself add or edit else add or edit for other
if conf_id in [57] and db_addon_id in [813,820,827,834,841]:
return render_template('users/member_register_page_for_ksos_mem_70.html',user=user,states=state_id,countries=country_id,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits,delegate=user)
else:
return render_template('users/member_register_page.html',user=user,states=state_id,countries=country_id,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits,delegate=user)
else:
return render_template('users/other_member_register.html',user=user,states=state_id,countries=country_id,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits,delegate=user)
user = None
if int(str(user_id),0) > 0:
user = UserModel().get_user(user_id,society_id,conf_id)
delegate = None
if int(str(delegate_id),0) >0:
delegate = UserModel().get_delegate(delegate_id)
if delegate is None:
if user:
delegate = user
# FOR TNASICON 2024 ACC PERSON
if db_addon_id in [378,379,781,785,789]:
return render_template('users/accompany_person_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits)
# For IPA KARPEDICON 23
if db_addon_id in [539,604,609]:
return render_template('users/accompany_person_register_page_pedicon23.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits)
# FOR TNASICON 2024 NON TN ASI MEMBER
if db_addon_id in [503,504,782,786,790]:
return render_template('users/non_asi_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits)
if conf_id in [19,54] and db_addon_id in [503,504,782,786,790]: # For NON TNASI Member only
return render_template('users/non_asi_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits)
if conf_id in [54] and db_addon_id in [799,800,801]: # For TNASICON 2024 PG NON Member only
return render_template('users/pg_non_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits)
if conf_id in [54] and db_addon_id in [802,803,804]: # For TNASICON 2024 ACC PERSON CHILDREN only
return render_template('users/accompany_person_children_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits)
if conf_id in [54] and db_addon_id in [797,798]: # For NON TNASI Member only
return render_template('users/tnasi_non_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits)
return render_template('users/non_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,limits=limits)
else :
return redirect(url_for('user.Home',conf_id=conf['conf_id'],conf_key=conf['conf_key']))
# June 06,2023 For TNASI
@app.route('/<int:conf_id>/<conf_key>/add_delegate_pg_acc', methods = [ "GET","POST"])
@RouteGroup.conf_required
def AddDelegatePGAcc(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
if request.method == 'POST':
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
# now = '2022-06-14 10:00:00'
society_id = conf['society_id']
user_id = request.values.get('user_id',0)
parent_user_id = request.values.get('parent_user_id',0)
delegate_id = request.values.get('delegate_id',0)
update = request.values.get('update',0)
is_accompany = request.values.get("is_accompany") or 0
data = UserModel().get_state_country_users_type(user_id,society_id,delegate_id,conf_id,parent_user_id,now)
for index,value in enumerate(data):
if index == 0:
state_id = value
if index == 1:
country_id = value
if index == 4:
reg_types = value
if index == 5:
addons = value
if index == 6:
parent_user = value
if index == 7:
addons_1 = value
if addons_1:
delegate_addon_ids = addons_1[0]['delegate_addon_ids']
if delegate_addon_ids == None:
delegate_addon_ids = '0'
else:
delegate_addon_ids = delegate_addon_ids
else:
delegate_addon_ids = '0'
user = None
if int(str(user_id),0) > 0:
user = UserModel().get_user(user_id,society_id,conf_id)
delegate = None
if int(str(delegate_id),0) >0:
delegate = UserModel().get_delegate(delegate_id)
if delegate is None:
if user:
delegate = user
if conf_id == 57:
user = UserModel().get_member_detailsUserModel(parent_user_id,curr_dt,society_id,conf_id)
if conf_id in [19,54] and is_accompany and int(is_accompany) == 1 :
return render_template('users/accompany_person_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids)
elif conf_id in [19,54] and is_accompany and int(is_accompany) == 2 :
return render_template('users/non_asi_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids)
elif conf_id in [19,54] and is_accompany and int(is_accompany) == 3 :
return render_template('users/tnasi_non_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids)
elif conf_id in [19,54] and is_accompany and int(is_accompany) == 4 :
return render_template('users/accompany_person_children_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids)
elif conf_id in [19,54] and is_accompany and int(is_accompany) == 5 :
return render_template('users/pg_non_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids)
elif conf_id == 36 and is_accompany and int(is_accompany) == 1 :
return render_template('users/accompany_person_register_page_pedicon23.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids)
elif conf_id == 57 and is_accompany and int(is_accompany) == 6 :
return render_template('users/member_register_page_for_ksos_mem_70.html',user=user,states=state_id,countries=country_id,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids,delegate=user)
else :
return render_template('users/non_member_register_page.html',user_id=user_id,states=state_id,countries=country_id,delegate=delegate,parent_user_id=parent_user_id,reg_types=reg_types,addons=addons,str=str,type=type,conf=conf,update=update,delegate_addon_ids=delegate_addon_ids)
else :
return redirect(url_for('user.Home',conf_id=conf['conf_id'],conf_key=conf['conf_key']))
# END
@app.route('/<int:conf_id>/<conf_key>/delete_delegate', methods = [ "GET","POST"])
@RouteGroup.conf_required
def DeleteDelegate(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
delegate_id = request.values.get('delegate_id',0)
parent_user_id = request.values.get('parent_user_id',0)
society_id = conf['society_id']
if int(str(delegate_id)) > 0:
UserModel().delete_delegateUserModel(delegate_id)
# incompleted_template = get_parent_incompleted_delegates(parent_user_id,conf_id,conf_key)
# completed_template = get_parent_completed_delegates(parent_user_id,conf_id,conf_key)
# waiting_completed_template = GetParentWaitingCompletedDelegates(parent_user_id,conf_id,conf_key)
# rejected_delegate_payment_template = GetParentRejectUpiTransactionDelegates(parent_user_id,conf_id,conf_key)
# inprogress_delegate_payment_template = GetParentInprogressPaymentDelegates(parent_user_id,conf_id,conf_key)
# # To Get PG Waiting for Approval Data
# pg_waiting_approval_template = GetParentPGWaitingApprovalDelegates(parent_user_id,conf_id,conf_key)
# delegate_dashboard_html = RegisterDashboard(conf_id,conf_key)
# check_user_del = UserModel().check_user_delegateUserModel(parent_user_id,society_id,conf_id)
json={ 'msg':'Deleted Successfully','status' : 1}
else:
json={ 'msg':'Error try after some time', 'status' : 0,'incompleted_template' : ''}
return jsonify(json)
@app.route('/<int:conf_id>/<conf_key>/search_user', methods = ["GET", "POST"])
@RouteGroup.conf_required
def GetSearchUser(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
conf_data = UserModel().get_conference(conf_id,conf_key)
if request.method == 'POST':
society_id = conf['society_id']
search = request.values.get('search')
user_id = request.form['user_id']
addons_member_list = conf_data['addons_member_list']
if int(user_id) == 10420:
addons_member_list = 15
else:
addons_member_list = addons_member_list
if addons_member_list:
parent_user_id_count = UserModel().get_parent_user_id_count(conf_id,user_id)
if parent_user_id_count['parent_user_id'] >= addons_member_list:
html = f"<h4 style='color:red'>You reached limit, You can't register more then {addons_member_list} members</h4>"
else:
user = UserModel().get_search_user(search,society_id,conf_id)
if user == None:
html = None
else:
html = render_template('users/search_table.html' , user_data= user,conf=conf)
return json.dumps(html ,default=str)
else:
user = UserModel().get_search_user(search,society_id,conf_id)
if user == None:
html = None
else:
html = render_template('users/search_table.html' , user_data= user,conf=conf)
return json.dumps(html ,default=str)
else:
return redirect(url_for('user.Home',conf_id=conf['conf_id'],conf_key=conf['conf_key']))
@app.route('/<int:conf_id>/<conf_key>/post_add_register', methods = ["POST"])
@RouteGroup.conf_required
def PostAddRegister(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
is_file_upload = 0
pg_cert_path = None
pg_cert_name = None
file = None
file_upload = None # For upload certificates in delegates table # Added by Ganesan J
user_type_id = None
msg = ""
status = 1
data = ""
delegate_id = request.form['delegate_id']
parent_user_id = request.form['parent_user_id']
user_id = request.form['user_id']
total_amount = 0
now = datetime.now()
# conf = UserModel().get_confUserModel(conf_id,conf_key)
society_id = conf['society_id']
dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
prefix = request.form['prefix'] or None
full_name = request.form['full_name'] or None
full_name = full_name.title() if full_name else full_name
email = request.form['email']
mobile = request.form['mobile']
date_of_birth = request.values.get("dob") or None
if date_of_birth:
try:
dob = datetime.strptime(date_of_birth, '%d-%m-%Y')
except Exception as e:
dob = None
else:
dob = None
gender = request.values.get("gender") or None
address1 = request.values.get("address1") or None
address2 = request.values.get("address2") or None
address3 = request.values.get("address3") or None
city = request.values.get("city") or None
pincode = request.values.get("pincode") or None
state_id = request.values.get("state_id") or None
country_id = request.values.get("country_id") or None
mc_number = request.values.get("mc_number") or None
mc_state_id = request.values.get("mc_state_id") or None
membership_no = request.values.get("membership_no") or None
# check_in_date = request.values.get('check_in_date') or None
# check_out_date = request.values.get('check_out_date') or None
# check_in_time = request.values.get('check_in_time') or None
# check_out_time = request.values.get('check_out_time') or None
aadhaar_number = request.values.get('aadhaar_number') or None
if conf_id == 27:
if aadhaar_number:
aadhaar_number = aadhaar_number.replace("-","")
else:
aadhaar_number = None
else:
aadhaar_number = aadhaar_number
designation = request.values.get('designation') or None
institution = request.values.get('institution') or None
nationality = request.values.get('nationality') or None
mem_applied_at = request.values.get('mem_applied_at') or None
place_of_work = request.values.get('place_of_work') or None
is_take_part_bpw = request.values.get('is_take_part_bpw') or None
accom_persons = request.values.get("accom_persons" or None)
mem_is_applied = request.values.get('mem_is_applied') or None
mem_year = request.values.get('mem_year') or None
age = request.values.get('age') or None
food = request.values.get('food') or None
district = request.values.get('district') or None
role = request.values.get('role') or "DELEGATE"
year_of_admission = request.values.get('year_of_admission') or None
# Delegate Image
image_data = request.values.get('delegate_image_base64') or None
image_data_ext = request.values.get('delegate_image_ext') or None
is_remove_del_img = request.values.get('is_remove_del_img') or 0
delegate_image_from_member = request.values.get('delegate_image_from_member') or 0
if accom_persons:
guest_list = accom_persons.split(',')
guest_list = list(filter(None, guest_list))
guest_list = [i for a,i in enumerate(guest_list) if i!=' ']
len_guest_list = len(guest_list)
else:
len_guest_list = 0
if int(user_id) > 0:
member_type_id = request.form['member_type_id'] or None
else:
member_type_id = 2
conference_id = conf_id
time_set = request.form['time_set'] or None
is_custom_addons = 1
reg_types = UserModel().get_addon_reg_typeUserModel(conf_id)
addons = UserModel().get_addons(delegate_id,curr_dt,conf_id,None,is_custom_addons)
reg_addons = {}
insert_del_addons = []
delete_del_addons = []
reg_Validation = []
addons_reg_limit = {}
created_at_date = {'created_at': dt_string}
updated_at_date = {'updated_at': dt_string}
for addon in addons:
reg_addons[addon["addon_id"]] = addon
#collect all delegate_addon_id for delegate
if addon["delegate_addon_id"] and addon["delegate_addon_id"] > 0:
delete_del_addons.append(addon["delegate_addon_id"])
is_mandatory = {}
addon_id = None
for rt in reg_types:
is_mandatory[rt['addon_type_id']] = rt['is_mandatory']
values = request.values.getlist(rt.get('input_name'))
addon_ids = None
for addon_val in values:
addon_ids = addon_val
break
addon_ids = addon_ids
get_addons_data = UserModel().get_addons_data(addon_ids,conf_id,now)
if values:
is_mandatory[rt['addon_type_id']] = 0
for index,val in enumerate(values):
addon = reg_addons[int(val)]
# addon_id = val
if index == 0:
if user_type_id == None:
user_type_id = addon.get("user_type_id",None)
if addon_id == None:
addon_id = val
if addon.get("delegate_addon_id") and addon.get("delegate_addon_id") > 0:
#if already have addon and deleate not change the addon then we removed delegate_addon_id in delete_addons variable
delete_del_addons.remove(addon.get("delegate_addon_id"))
else:
add_data = {
"addon_id" : val,
"amount" : addon.get("amount",0),
"original_amount" : addon.get("amount",0),
"reg_status" : 0
}
total_amount = addon.get("amount",0) + total_amount
insert_del_addons.append(add_data)
addon_id = int(addon_id) if addon_id else addon_id
for key in is_mandatory:
if is_mandatory[key] == 1:
reg_Validation.append({'key': key ,'msg': "following field is mandatory."})
status = 0;
if int(user_id) > 0 and int(user_id) != int(parent_user_id):
user = UserModel().get_user(user_id,society_id,conf_id)
del_data = {
'parent_user_id': parent_user_id,
'prefix' : prefix if prefix else user["prefix"],
'user_id' : user["user_id"] if int(user["user_id"]) > 0 else None ,
'full_name' : user["full_name"],
'email' : user["email"],
'mobile' : mobile,
'dob' : user["dob"],
'gender' : user["gender"],
'address1' : user["address1"],
'address2' : user["address2"],
'address3' : user["address3"],
'city' : user["city"],
'pincode' : user["pincode"],
'state_id' : user["state_id"],
'country_id' : user["country_id"],
'mc_number' : mc_number,
'mc_state_id' : mc_state_id,
'conference_id' : conference_id,
'membership_no' : user["membership_no"] or None,
'member_type_id': user["member_type_id"],
'society_id' : user['society_id'],
'designation' : designation,
'institution' : institution,
'nationality' : nationality,
'accom_persons' : accom_persons,
'aadhaar_number': aadhaar_number,
'is_take_part_bpw':is_take_part_bpw,
'mem_is_applied' : mem_is_applied,
'mem_applied_at':mem_applied_at,
'mem_year' : mem_year,
'age' : age,
'food' : food,
'district' : district,
'reg_type_id' : user_type_id,
'role' : role,
'del_status_id' : 0,
'place_of_work' :place_of_work,
'year_of_admission':year_of_admission
}
else:
del_data = {
'parent_user_id': parent_user_id,
'prefix' : prefix,
'user_id' : user_id if int(user_id) >0 else None,
'full_name' : full_name,
'email' : email,
'mobile' : mobile,
'dob' : dob,
'gender' : gender,
'address1' : address1,
'address2' : address2,
'address3' : address3,
'city' : city,
'pincode' : pincode,
'state_id' : state_id,
'country_id' : country_id,
'mc_number' : mc_number,
'mc_state_id' : mc_state_id,
'conference_id' : conference_id,
'membership_no' : membership_no,
'member_type_id': member_type_id,
'society_id' : society_id,
'designation' : designation,
'institution' : institution,
'nationality' : nationality,
'accom_persons' : accom_persons,
'aadhaar_number': aadhaar_number,
'is_take_part_bpw':is_take_part_bpw,
'mem_is_applied' : mem_is_applied,
'mem_applied_at':mem_applied_at,
'mem_year' : mem_year,
'age' : age,
'food' : food,
'district' : district,
'reg_type_id' : user_type_id,
'role' : role,
'del_status_id' : 0,
'place_of_work' : place_of_work,
'year_of_admission':year_of_admission
}
if int(time_set) == 0:
del_data.update(created_at_date)
else:
del_data.update(updated_at_date)
# Paid registration start
if total_amount > 0.00 :
if int(delegate_id) > 0:
delegate = UserModel().get_delegate(delegate_id)
if delegate:
if delegate['delegate_no'] and delegate['delegate_no'] >0:
status = 0
msg = "Registration Already Completed."
else:
status = 0
msg = "your request cannot be processed. click here to try after some time"
if status == 1:
update = UserModel().update_delegateUserModel(delegate_id,del_data)
if image_data:
AWSUpload().DelegateImageUpload(conf,user_id,delegate_id,full_name,image_data,conf_key,image_data_ext,delegate_image_from_member)
else :
if int(is_remove_del_img) == 1:
AWSUpload().DeleteDelegateImage(delegate_id,conf_key)
UserModel().save_delegates_addonsUserModel(delegate_id,insert_del_addons,delete_del_addons,now)
# incompleted_template = get_parent_incompleted_delegates(parent_user_id,conf_id,conf_key)
# inprogress_delegate_payment_template = GetParentInprogressPaymentDelegates(parent_user_id,conf_id,conf_key)
data = { 'msg':'Update completed ...','status':status,'reg_validation' : reg_Validation}
# data = { 'msg':'Update completed ...','status':status,'incompleted_template' : incompleted_template,'reg_validation' : reg_Validation,'inprogress_delegate_payment_template':inprogress_delegate_payment_template}
aa = jsonify(data)
return jsonify(data)
else:
existing_data = None
if int(user_id) > 0 :
existing_data = UserModel().get_check_exsits_delegate(user_id,parent_user_id,conf_id)
if existing_data:
delegate_no = existing_data["delegate_no"]
ref_no = existing_data["ref_no_only"]
if (delegate_no and delegate_no > 0) or (ref_no and ref_no > 0) :
data={ 'msg':'Registration Already Completed.','status' : 0,'data' : ''}
return jsonify(data)
else:
json={ 'msg':'Already added in the cart',
'status':0,
'data':''
# 'reg_validation' : is_mandatory
}
return jsonify(json)
else:
if status == 1:
delegate_id = UserModel().insert_delegateUserModel(del_data)
UserModel().save_delegates_addonsUserModel(delegate_id,insert_del_addons,delete_del_addons,now)
if image_data:
AWSUpload().DelegateImageUpload(conf,user_id,delegate_id,full_name,image_data,conf_key,image_data_ext,delegate_image_from_member)
else :
if int(is_remove_del_img) == 1:
AWSUpload().DeleteDelegateImage(delegate_id,conf_key)
data={ 'msg':'Added successfully',
'status':1,'reg_validation':reg_Validation
}
return jsonify(data)
else:
data= { 'msg':'','status' : 0,'data':'','reg_validation':reg_Validation}
return jsonify(data)
# Free registration start
else:
if int(delegate_id) > 0:
delegate = UserModel().get_delegate(delegate_id)
if delegate:
if (delegate['delegate_no'] and delegate['delegate_no'] >0) or (delegate['ref_no_only'] and delegate['ref_no_only'] >0):
status = 0
msg = "Registration Already Completed."
else:
status = 0
msg = "your request cannot be processed. click here to try after some time"
if status == 1:
update = UserModel().update_delegateUserModel(delegate_id,del_data)
if image_data:
AWSUpload().DelegateImageUpload(conf,user_id,delegate_id,full_name,image_data,conf_key,image_data_ext,delegate_image_from_member)
else :
if int(is_remove_del_img) == 1:
AWSUpload().DeleteDelegateImage(delegate_id,conf_key)
UserModel().save_delegates_addonsUserModel(delegate_id,insert_del_addons,delete_del_addons,now)
data = {
'msg' : 'Update completed ...',
'status' : status,
'reg_validation' : reg_Validation
}
return jsonify(data)
else:
existing_data = None
if int(user_id) > 0 :
existing_data = UserModel().get_check_exsits_delegate(user_id,parent_user_id,conf_id)
if existing_data:
delegate_no = existing_data["delegate_no"]
if delegate_no and delegate_no > 0 :
data={ 'msg':'Registration Already Completed.','status' : 0,'data' : ''}
return jsonify(data)
else:
json={ 'msg':'Already added in the cart',
'status':0,
'data':''
# 'reg_validation' : is_mandatory
}
return jsonify(json)
else:
if status == 1:
delegate_id = UserModel().insert_delegateUserModel(del_data)
if image_data:
AWSUpload().DelegateImageUpload(conf,user_id,delegate_id,full_name,image_data,conf_key,image_data_ext,delegate_image_from_member)
else :
if int(is_remove_del_img) == 1:
AWSUpload().DeleteDelegateImage(delegate_id,conf_key)
UserModel().save_delegates_addonsUserModel(delegate_id,insert_del_addons,delete_del_addons,now)
incompleted_template = get_parent_incompleted_delegates(parent_user_id,conf_id,conf_key)
unique_id = now.strftime('%Y%m%d%H%M%S')
created_at = now
url = conf['paymentgateway_api_url']
# r = requests.get(url)
# apikey = json.loads(r.content.decode())
am_id = conf['paymentgateway_appmaster_id']
is_test = conf['paymentgateway_is_test']
# for index,value in enumerate(apikey) :
# api_am_id = value['am_id']
# if api_am_id == am_id:
# app_key = value['app_key']
# app_name = value['app_name']
# break
# else:
# pass
app_name = "MOSCON 2024 Workshop Registration "
app_key = "MOSCON24"
Auth_user = Auth.user(society_id)
user_id = Auth_user['user_id']
payment_for = app_name
payment_method = "free"
remarks = "Free Registration"
txn_id = None
if conf_id == 36:
unique_id = app_key+unique_id
else:
unique_id = app_key+"_"+unique_id
# unique_id = app_key+"_"+unique_id
prefix = Auth_user['prefix'] or None
name = Auth_user['full_name'] or None
full_name = prefix + " " + name if prefix else name
email = Auth_user['email']
mobile = Auth_user['mobile']
user_id = Auth_user['user_id']
delegate_ids = delegate_id
is_generate = None
app_type = Helper.AppType
receipt_mail = "receipt_mail"
confimation_mail = "confimation_mail"
generate_payement = BOModel().usp_del_generate_free_payement(unique_id,delegate_ids,user_id,payment_for,payment_method,remarks,full_name,email,mobile,is_generate,created_at,txn_id,society_id,app_type,conf_id)
return redirect(url_for('free_reg.FreeRegUpdates',user_id=user_id,unique_id=unique_id,payment_method=payment_method,email=email,receipt_mail=receipt_mail,confimation_mail=confimation_mail,conf_id=conf_id,conf_key=conf_key))
else:
data= { 'msg':'','status' : 0,'data':'','reg_validation':reg_Validation}
return jsonify(data)
# def AwsFileUpload(user_id,file,filename_str,foldername,file_extension):
def AwsFileUpload(user_id,file):
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
pg_cert_name = None
pg_cert_path = None
bucket = "delegateapp"
# print("The user id is - "+ str(user_id)+" , AwsFileUpload function calling on -- " + curr_dt)
try:
if file:
if file.filename:
filename = secure_filename(file.filename)
split_tup = os.path.splitext(filename)
file_name = split_tup[0]
file_extension = split_tup[1]
filename_str = "certificate_proof_"+ datetime.now().strftime("%Y%m%d-%H%M%S") +file_extension
if " " in filename_str :
filename_str = filename_str.replace(" ","")
user_id = str(user_id) if user_id else None
foldername = ""
acl = "public-read"
s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
response = s3.upload_fileobj(file, bucket,foldername + filename_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
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://delegateapp.s3.ap-southeast-1.amazonaws.com/"+foldername
pg_cert_path = file_path
pg_cert_name = filename_str
msg = "success"
return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path, "msg" : msg, "status" : 1 }
else :
msg = "File name is not exists."
return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path, "msg" : msg, "status" : 2 }
return json.dumps(return_data,default =str)
else :
msg = "File not exists. Please try again"
return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path, "msg" : msg, "status" : 3 }
return json.dumps(return_data,default =str)
except ClientError as e:
return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path, "msg" : str(e), "status" : 401 }
return json.dumps(return_data,default =str)
'''-----------landing page end-----------'''
@app.route('/<int:conf_id>/<conf_key>/<parent_user_id>/get_parent_incompleted_delegates', methods = ["GET", "POST"])
def get_parent_incompleted_delegates(parent_user_id,conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
unique_id = None
delegateData = UserModel().get_incompleted_delegates_by_parent_user_idUserModel(parent_user_id,unique_id,conf_id,reg_mode=0)
if delegateData:
total_amount = 0
for index , value in enumerate(delegateData):
total_amount = total_amount + (value['total_amt'] if value['total_amt'] is not None else 0)
base_url = request.host_url
if "https" in base_url :
pass
else :
base_url = base_url.replace("http" ,"https")
del_html_data = render_template('users/incompleted_information.html' ,user_data = delegateData,user_id = parent_user_id,conf_id =conf_id,conf_key=conf_key,total_amount=total_amount,conf=conf,base_url = base_url)
else:
del_html_data = ""
return del_html_data
@app.route('/<int:conf_id>/<conf_key>/<parent_user_id>/get_parent_completed_delegates', methods = ["GET", "POST"])
def get_parent_completed_delegates(parent_user_id,conf_id,conf_key):
# usp_del_parent_completed_list
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
conf = Auth.getConf(conf_id,conf_key)
delegateData = UserModel().get_completed_course_delegates_by_parent_user_id_UserModel(parent_user_id,conf_id)
all_data = UserModel().getDelParentCompletedList(conf_id,curr_dt) # Addod on May 26 2023
code = None
addons = None
addon_type_ids = None
for index,value in enumerate(all_data) :
if index == 0 :
code = value[0]['count']
if index == 1 :
addons = value
if index == 2 :
addon_type_ids = value
# code = UserModel().check_appliction_to_close_or_openUserModel(conf_id,curr_dt)
# addons = UserModel().get_addon_reg_typeUserModel(conf_id)
# addon_type_ids = UserModel().get_addon_types(conf_id)
if conf_id == 17:
display_addons = UserModel().get_wetdrylab_open_close(conf_id)
display_addon = display_addons.get('display_addon')
else:
display_addon = 0
show_conf_ids = addon_type_ids[0]['show_conf_ids']
if delegateData:
del_html_data = render_template('users/completed_information.html' ,user_data = delegateData,conf_id =conf_id,conf_key=conf_key,conf=conf,addons=addons,addon_type_ids=addon_type_ids,str=str,show_conf_ids=show_conf_ids,code=code,display_addon=display_addon,int=int)
else:
del_html_data = ""
return del_html_data
@app.route('/<int:conf_id>/<conf_key>/<parent_user_id>/get_parent_waiting_completed_delegates', methods = ["GET", "POST"])
def GetParentWaitingCompletedDelegates(parent_user_id,conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
delegateData = UserModel().get_completed_waiting_delegates_by_parent_user_id(parent_user_id,conf_id)
if delegateData:
del_html_data = render_template('users/waiting_completed_information.html' ,user_data = delegateData,conf_id =conf_id,conf_key=conf_key,conf=conf,str=str,type=type)
else:
del_html_data = ""
return del_html_data
@app.route('/<int:conf_id>/<conf_key>/<parent_user_id>/get_parent_rejected_upi_transaction_delegates', methods = ["GET", "POST"])
def GetParentRejectUpiTransactionDelegates(parent_user_id,conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
delegateData = UserModel().get_rejected_upi_transaction_by_parent_user_id(parent_user_id,conf_id)
if delegateData:
del_html_data = render_template('users/upi_transaction_rejected_delegates.html' ,user_data = delegateData,conf_id =conf_id,conf_key=conf_key,conf=conf,str=str,type=type)
else:
del_html_data = ""
return del_html_data
'''-----------Payment Process Start-----------'''
@app.route('/<int:conf_id>/<conf_key>/post_payment', methods = ["GET","POST"])
@RouteGroup.conf_required
def PostPayment(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
society_id = conf['society_id']
created_at = now.strftime("%Y-%m-%d %H:%M:%S")
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
allow = request.values.get('allow')
user_data = Auth.user(society_id)
if user_data :
prefix = user_data['prefix'] or None
name = user_data['full_name'] or None
full_name = prefix + " " + name if prefix else name
email = user_data['email']
mobile = user_data['mobile']
user_id = user_data['user_id']
else:
flash("Please try after some time","successMsg")
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
check_addon = UserModel().get_check_addons_UserModel(user_id,conf_id)
code = UserModel().check_appliction_to_close_or_openUserModel(conf_id,curr_dt)
for value in check_addon:
status = value['status']
msg = value['msg']
count = value['count']
if count > 0:
if status == 1:
flash(msg,"successMsg")
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
if code == 0:
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
if allow is None :
delegate_ids = request.values.getlist('checklist')
else:
delegate_ids = request.values.getlist('delegate_ids')
delegate_ids = (",".join(delegate_ids))
check_duplicate_delegate = UserModel().check_duplicate_delegateUserModel(delegate_ids,conf_id)
for value in check_duplicate_delegate:
msg = value['msg']
status = value['status']
if allow is None :
if int(status) > 0 :
flash(msg,"AlertSuccessMsg")
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
if len(delegate_ids)> 0 :
unique_id = now.strftime('%Y%m%d%H%M%S')
url = conf['paymentgateway_api_url']
# r = requests.get(url)
# apikey = json.loads(r.content.decode())
am_id = conf['paymentgateway_appmaster_id']
is_test = conf['paymentgateway_is_test']
# for index,value in enumerate(apikey) :
# api_am_id = value['am_id']
# if api_am_id == am_id:
# app_key = value['app_key']
# app_name = value['app_name']
# break
# else:
# pass
app_name ="MOSCON24"
app_key ="MOSCON24"
payment_for = app_name
if conf_id == 36:
unique_id = app_key+unique_id
else:
unique_id = app_key+"_"+unique_id
# unique_id = app_key+"_"+unique_id
app_type = Helper.AppType
is_generate = 0
is_generate_link_payment = 0
payment_types = UserModel().get_payment_method(conf_id)
payment = payment_types[0]
payment_id = request.values.get('payment_id',0)
payment_type = payment['payment_type']
if len(payment_types) == 1:
if payment_type == "PAYMENT GATEWAY":
usp_del_generate_payement = BOModel().usp_del_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at,society_id,app_type,conf_id)
return redirect(url_for('user.CallPayment',conf_id = conf_id,conf_key=conf_key,unique_id=unique_id))
else:
usp_del_generate_payement = BOModel().usp_del_choose_payment_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at,society_id,app_type,conf_id)
getData = UserModel().getDataforPayments(unique_id)
getData = getData[0]
amount = getData['amount']
payment_id = getData['payment_id']
delegate_id = delegate_ids
addon_types_ids = UserModel().getPaymentAddons(conf_id,unique_id)
return render_template('users/make_payment.html',payment_type=payment_types,user_id=user_id,society_id=society_id,conf_id=conf_id,conf_key=conf_key,amount = amount,payment_id=payment_id,unique_id=unique_id,delegate_id=delegate_id,conf=conf,int=int,float=float,addon_types_ids=addon_types_ids)
# return render_template('users/make_payment_screen.html',user_id=user_id,payment_id=payment_id,image=image,encrypt_user_id=encrypt_user_id,unique_id=unique_id,payment_content=payment_content,payment_type=payment_type,member=member,society_id=society_id,society_key=society_key,step_no=step_no,utr_number=utr_number,userData=userData,societyData=societyData)
else:
usp_del_generate_payement = BOModel().usp_del_choose_payment_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at,society_id,app_type,conf_id)
getData = UserModel().getDataforPayments(unique_id)
getData = getData[0]
amount = getData['amount']
payment_id = getData['payment_id']
delegate_id = delegate_ids
addon_types_ids = UserModel().getPaymentAddons(conf_id,unique_id)
return render_template('users/make_payment.html',payment_type=payment_types,user_id=user_id,society_id=society_id,conf_id=conf_id,conf_key=conf_key,amount = amount,payment_id=payment_id,unique_id=unique_id,delegate_id=delegate_id,conf=conf,int=int,float=float,addon_types_ids=addon_types_ids)
else :
flash("Please select atleast one delegate to proceed further","Payerror")
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
# @app.route('/call_payment/<int:conf_id>/<conf_key>/<unique_id>', methods = ["GET", "POST"])
# @RouteGroup.conf_required
# def CallPayment(conf_id,conf_key,unique_id):
# getData = UserModel().getDataforPayments(unique_id)
# conf = Auth.getConf(conf_id,conf_key)
# if getData :
# getData = getData[0]
# am_id = getData['am_id']
# # gateway_id = base64.b64encode(bytes(gateway_id, 'utf-8'))
# sample_string = str(am_id)
# sample_string_bytes = sample_string.encode("ascii")
# base64_bytes = base64.b64encode(sample_string_bytes)
# am_id_base64 = base64_bytes.decode("ascii")
# getData['res_url'] = request.host_url+"payment_server_response/"+str(conf_id)+"/"+conf_key
# getData['remarks'] = conf["conf_title"]
# name = getData['full_name']
# mobile = getData['mobile']
# email = getData['email']
# amount = getData['amount']
# unique_id = getData['unique_id']
# if conf['conf_id'] == 20 : # iages24
# unique_id_sample = unique_id.encode("ascii")
# base64_byte = base64.b64encode(unique_id_sample)
# unique_id = base64_byte.decode("ascii")
# getData["res_url"] = "https://delegate.iageschennai.com/ccavResponseHandler"
# return render_template('ccavenue_1/dataFrom.html',data= getData,conf_id=conf_id,conf_key=conf_key)
# return render_template("users/call_payment_screen_iages24_2.html" ,data= getData,am_id_base64 =am_id_base64,conf=conf,unique_id=unique_id)
# # url_1 = "https://iages24payments.iageschennai.com/payment_screen.html?conf_id="+str(conf_id)+"&conf_key="+conf_key+"&name="+str(name)+"&email="+email+"&mobile="+mobile+"&unique_id="+unique_id+"&amount="+str(amount)+"&res_url=https://delegate.iageschennai.com/payment_server_response/"+str(conf_id)+"/"+conf_key
# # return flask.redirect(url_1)
# elif conf['conf_id'] == 29 : # ipgs
# url_1 = "https://ipgs.org.in/ipgs_payments/pay.php?conf_id="+str(conf_id)+"&conf_key="+conf_key+"&name="+str(name)+"&email="+email+"&mobile="+mobile+"&unique_id="+unique_id+"&amount="+str(amount)+"&res_url=https://delegate.ipgs.org.in/payment_server_response/"+str(conf_id)+"/"+conf_key
# return flask.redirect(url_1)
# elif conf['conf_id'] == 19 : # tnasi
# url_1 = "https://tnasi.com/paymentapi/payment_screen.html?conf_id="+str(conf_id)+"&conf_key="+conf_key+"&name="+str(name)+"&email="+email+"&mobile="+mobile+"&unique_id="+unique_id+"&amount="+str(amount)+"&res_url=https://delegate.tnasi.com/payment_server_response/"+str(conf_id)+"/"+conf_key
# return flask.redirect(url_1)
# elif conf['conf_id'] == 17 :
# return render_template("users/call_payment_screen_tnoa23.html" ,data= getData,am_id_base64 =am_id_base64,conf=conf)
# else:
# return render_template("users/call_payment_screen.html" ,data= getData,am_id_base64 =am_id_base64,conf=conf)
# else:
# return " No data"
@app.route('/call_payment/<int:conf_id>/<conf_key>/<unique_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def CallPayment(conf_id,conf_key,unique_id):
getData = UserModel().getDataforPayments(unique_id)
conf = Auth.getConf(conf_id,conf_key)
if getData :
getData = getData[0]
am_id = getData['am_id']
# gateway_id = base64.b64encode(bytes(gateway_id, 'utf-8'))
sample_string = str(am_id)
sample_string_bytes = sample_string.encode("ascii")
base64_bytes = base64.b64encode(sample_string_bytes)
am_id_base64 = base64_bytes.decode("ascii")
getData['res_url'] = request.host_url+"payment_server_response/"+str(conf_id)+"/"+conf_key
getData['remarks'] = conf["conf_title"]
name = getData['full_name']
mobile = getData['mobile']
email = getData['email']
amount = getData['amount']
unique_id = getData['unique_id']
unique_id_2 = unique_id
if conf['conf_id'] == 20 : # iages24
unique_id_sample = unique_id.encode("ascii")
base64_byte = base64.b64encode(unique_id_sample)
unique_id = base64_byte.decode("ascii")
# addond on June 16, 2023
# getData["res_url"] = "https://delegate.iageschennai.com/20/iages24/ccavResponseHandler"
# return render_template('ccavenue_1/dataFrom.html',data= getData,conf_id=conf_id,conf_key=conf_key)
# end
return render_template("users/call_payment_screen_iages24_2.html" ,data= getData,am_id_base64 =am_id_base64,conf=conf,unique_id=unique_id)
# url_1 = "https://iages24payments.iageschennai.com/payment_screen.html?conf_id="+str(conf_id)+"&conf_key="+conf_key+"&name="+str(name)+"&email="+email+"&mobile="+mobile+"&unique_id="+unique_id_2+"&amount="+str(amount)+"&res_url=https://delegate.iageschennai.com/payment_server_response/"+str(conf_id)+"/"+conf_key
# return flask.redirect(url_1)
elif conf['conf_id'] == 29 : # ipgs
url_1 = "https://ipgs.org.in/ipgs_payments/pay.php?conf_id="+str(conf_id)+"&conf_key="+conf_key+"&name="+str(name)+"&email="+email+"&mobile="+mobile+"&unique_id="+unique_id+"&amount="+str(amount)+"&res_url=https://delegate.ipgs.org.in/payment_server_response/"+str(conf_id)+"/"+conf_key
return flask.redirect(url_1)
elif conf['conf_id'] in [27,57] : # ksos
url_1 = "https://ksos.in/paymentapi_del/payment_screen_1.html?conf_id="+str(conf_id)+"&conf_key="+conf_key+"&name="+str(name)+"&email="+email+"&mobile="+mobile+"&unique_id="+unique_id+"&amount="+str(amount)+"&res_url=https://delegate.ksos.in/payment_server_response/"+str(conf_id)+"/"+conf_key
return flask.redirect(url_1)
elif conf['conf_id'] == 19 : # tnasi
url_1 = "https://tnasi.com/paymentapi/payment_screen.html?conf_id="+str(conf_id)+"&conf_key="+conf_key+"&name="+str(name)+"&email="+email+"&mobile="+mobile+"&unique_id="+unique_id+"&amount="+str(amount)+"&res_url=https://delegate.tnasi.com/payment_server_response/"+str(conf_id)+"/"+conf_key
return flask.redirect(url_1)
elif conf['conf_id'] in [17,39] :
return render_template("users/call_payment_screen_tnoa23.html" ,data= getData,am_id_base64 =am_id_base64,conf=conf)
elif conf['conf_id'] == 36:
prefix_list = ["Dr. " , "dr." , "Prof. " ,"Prof " , "Mr. ", "Mrs. " ]
for i in prefix_list :
prefix = i
if prefix in name :
name = name.lstrip(prefix)
break
else :
pass
name = name.replace("." , " ") if "." in name else name
url_1 = "https://www.iapkarnataka.org/airpay_php/transaction.html?conf_id="+str(conf_id)+"&conf_key="+conf_key+"&name="+str(name)+"&email="+email+"&mobile="+mobile+"&unique_id="+unique_id+"&amount="+str(amount)+"&res_url=https://delegate.numerotech.com/payment_server_response/"+str(conf_id)+"/"+conf_key
return flask.redirect(url_1)
else:
return render_template("users/call_payment_screen.html" ,data= getData,am_id_base64 =am_id_base64,conf=conf)
else:
return " No data"
@app.route('/<int:conf_id>/<conf_key>/generate_post_payment', methods = ["GET","POST"])
@RouteGroup.conf_required
def GeneratePostPayment(conf_id,conf_key):
now = datetime.now()
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
created_at = now.strftime("%Y-%m-%d %H:%M:%S")
user_id = request.values.get('user_id')
full_name = request.values.get('full_name')
email = request.values.get('email')
mobile = request.values.get('mobile')
delegate_ids = request.values.getlist('delegate_ids')
if len(delegate_ids)> 0 :
# conf_id = request.values.get('conf_id')
state_id = UserModel().get_states()
output = UserModel().get_user(user_id,society_id,conf_id)
unique_id = now.strftime('%Y%m%d%H%M%S')
# am_id = Helper.PaymentGatewayAppMasterID # sai sir account techventure3 , 5 for test
# is_test = Helper.PaymentGatewayISTest # payumoney work on live mode only so set is_test = 0
# am_id = 5 # sai sir account techventure3 , 5 for test
# is_test = 1 # payumoney work on live mode only so set is_test = 0
# url = 'https://paymentapi.urbanedge.co.in/api_key'
url = conf['paymentgateway_api_url']
# r = requests.get(url)
# apikey = json.loads(r.content.decode())
am_id = conf['paymentgateway_appmaster_id']
is_test = conf['paymentgateway_is_test']
# for index,value in enumerate(apikey) :
# api_am_id = value['am_id']
# if api_am_id == am_id:
# app_key = value['app_key']
# app_name = value['app_name']
# break
# else:
# pass
app_name = "MOSCON24"
app_key = "MOSCON24"
payment_for = app_name
if conf_id == 36:
unique_id = app_key+unique_id
else:
unique_id = app_key+"_"+unique_id
# unique_id = app_key+"_"+unique_id
delegate_ids = (",".join(delegate_ids))
app_type = Helper.AppType
is_generate = 0
is_generate_link_payment = 1
usp_del_generate_payement = BOModel().usp_del_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at)
if usp_del_generate_payement :
return redirect(url_for('user.CallPayment',conf_id=conf_id,conf_key=conf_key,unique_id=unique_id))
else :
flash("Please select atleast one delegate to proceed further")
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
else :
flash("Please select atleast one delegate to proceed further","Payerror")
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
@app.route('/payment_server_response/<int:conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def PaymentServerResponse(conf_id,conf_key):
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
conf = Auth.getConf(conf_id,conf_key)
if conf_id and conf_id == 20 :
order_no = request.values.get("order_no") or None
reference_no = request.values.get("reference_no") or None
is_already_paid = request.values.get("is_already_paid") or None
payment_id = None
status = None
email = None
mobile = None
unique_id = None
tracking_id = ''
payment_method = ''
if is_already_paid :
flash("Already paid" ,"errorMsg")
return redirect(url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
if (order_no and len(order_no)> 4 ) and (reference_no and len(reference_no) > 5):
response = requests.get("https://iages24payments.iageschennai.com/order_track.php?order_no="+order_no+"&reference_no="+reference_no+"")
response = response.text
response = response.replace('\\' ,"")
result = response[1:-1]
res = json.loads(result)
result_data = res["Order_Status_Result"]
# json_data = json.dumps(result_data,default=str)
# return json_data
# print("---------result_data -----------------")
# print(result_data)
if result_data :
if result_data["error_desc"] and "No Record Found" in result_data["error_desc"] :
flash("Invalid response " , "errorMsg")
return redirect(url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
if result_data["order_status"] == "Aborted" :
payment_id =result_data["reference_no"]
else :
# payment_id = result_data["order_bank_ref_no"] # commented on August 16, 2023 By Ganesan
payment_id =result_data["reference_no"]
# status = result_data["order_status"]
status = result_data["order_bank_response"]
# return status
email = result_data["order_bill_email"]
mobile = result_data["order_bill_tel"]
unique_id = order_no
payment_method = result_data["order_card_name"]
tracking_id = result_data["reference_no"]
if status and "SUCCESS" in status :
status = "success"
elif status and status == "N":
status = "failure"
else :
if result_data :
status = result_data["order_status"]
else :
status = "failure"
else :
return "Invalid Response"
else :
payment_id = request.values.get('payment_id')
status = request.values.get('status')
email = request.values.get('email') or ''
mobile = request.values.get('mobile') or ''
unique_id = request.values.get('unique_id')
amount = request.values.get('amount')
payment_method = request.values.get('method')
tracking_id = request.values.get('tracking_id') or ''
if status and (status =="success" or status == "Y" or status =="Success" or status =="Successful" ):
status = "success"
data = {'api_payment_id' : payment_id,'status' : status,'updated_at' :dt_string,'paid_at' :dt_string,'payment_method':'PAYMENT GATEWAY','payment_method_from_gateway':payment_method}
update_and_get_data = UserModel().UserupdatePayment(unique_id,data,dt_string) # update payment status in your table
if conf_id == 20 or conf_id == 21:
ccavenue_data = {'conf_id':conf_id,'unique_id':unique_id,'bank_ref_num':payment_id,'tracking_id':tracking_id,'payment_status':status,'created_at':dt_string,'payment_method':payment_method}
update_ccavenue = UserModel().insert_ccavenue_payment(ccavenue_data)
generatedDelegates = None
is_generate_link_payment = 0
if update_and_get_data == "updated" and (status =="success" or status == "Y" or status =="Success" or status =="Successful" ):
# Normal payment with PG proof verification status update and generate delegate number for delegate registations
if conf_id in [19,49,8,48,39,50] :
status = "success"
generatedDelegates = UserModel().Userdelegate_no_generate_with_pg(unique_id,conf_id)
pay_proof_data = UserModel().getTNASIPaymentProof(unique_id,conf_id)
if pay_proof_data :
full_name = pay_proof_data["full_name"] or ' '
delegate_id = pay_proof_data["delegate_id"] or ''
data_for_del_addons = {"reg_status" : 3 , "updated_at" : dt_string, "conference_id" : conf_id}
# updates_res = UserModel().updateDelegateAddons(data_for_del_addons,unique_id ,conf_id)
subject = " Acknowledgement of your delegate registration for {}".format(conf['conf_name'])
html = render_template('email/tnasi_pg_ack_mail.html',conf=conf,full_name=full_name)
data_1 = EMAIL.MailTemplateSendMail(subject,html,email,None,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'delegate_id' : str(delegate_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_logs(data_1)
flash("Thank you for registering for {}. Your Bonafide certificate shall be verified and the delegate registration number shall be generated after verification of Bonafide Certificate. <br/> For any assistance, please write to {}.".format(conf['conf_name'],conf['e_support_email']),"successMsg")
# return redirect(url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
else:
# Normal payment gateway and generate delegate numbers
generatedDelegates = UserModel().Userdelegate_no_generate(unique_id,conf_id)
flash("Payment successful.","successMsg")
if generatedDelegates:
for delegate in generatedDelegates:
delegate_id = delegate['delegate_id']
is_generate_link_payment = delegate['is_generate_link_payment']
if delegate['del_status_id'] == 2 :
ConfirmationDelegateMail(conf_id,conf_key,delegate_id,None,1)
# ConfirmationDelegateMail(conf_id,conf_key,0,delegate,1)
# generatedDelegates[0].parent_user_id
receipt_datas = UserModel().receipt_no_generate_and_get(unique_id,conf_id);
if receipt_datas:
ReceiptDelegagteMail(conf_id,conf_key,unique_id,receipt_datas[0],1)
tricon_workshop = TriconWorkshopUpdates(conf_id,unique_id)
elif status is not None:
flash("Your payment has failed. Please try again. <br> If the problem persists , please write to {}".format(conf['e_support_email']),"errorMsg")
reg_status = 0
UserModel().UpdateInprogressDelegates(unique_id,dt_string,reg_status,conf_id)
#flash("Your payment is {}. Please try again to make the payment. If the issue persists, please write to {}".format(status,conf['e_support_email']),"errorMsg")
# flash("Your payment status is {} .Please scroll to try agian Make Payment Or contact to support ".format(status),"errorMsg")
if is_generate_link_payment == 1 :
return redirect(url_for('user.PaymentLinkResponse',conf_id=conf_id,conf_key=conf_key))
return redirect(url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
def TriconWorkshopUpdates(conf_id,unique_id):
if conf_id == 17:
update = UserModel().usp_del_tricon_workshop_update(unique_id,conf_id)
return "true"
else:
return "false"
@app.route('/receipt_delegate_mail/<int:conf_id>/<conf_key>/<delegate_id>', methods = ["GET", "POST"])
def ReceiptDelegagteMail(conf_id,conf_key,unique_id,receipt_data,is_send,conf=None,is_flash_msg = None):
conf = conf if conf else Auth.getConf(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
template_name = "receipt_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
if receipt_data is None :
receipt_datas = UserModel().receipt_no_generate_and_get(unique_id,conf_id)
if receipt_datas:
receipt_data = receipt_datas[0]
if receipt_data:
email = receipt_data['email']
# email = 'karthiashokan23@gmail.com'
receipt_no = receipt_data['receipt_no']
delegate_nos = receipt_data['delegate_nos']
delegate_id = receipt_data['delegate_ids']
amount = receipt_data['amount']
amount = int(amount)
amount = f"{amount:,}"
amount_with_commas = amount
amount_for_convertion = int(receipt_data['amount'])
amount_in_words = Helper.amountTowords(amount_for_convertion)
amount_in_words = amount_in_words.title()
conf_name = receipt_data['conf_name']
addon_type_id = receipt_data['addon_type_id']
del_status_id = receipt_data['del_status_id']
del_nos = receipt_data['del_nos']
ref_nos_pg = receipt_data['ref_nos_pg']
if amount == "Free" :
amount = "Free"
else:
amount = "Rs."+amount+"/-"
update_data = {
'amount_with_commas':amount_with_commas,
'amount_in_words':amount_in_words
}
receipt_data.update(update_data)
ref_nos = receipt_data['reference_nos']
sub_data = {
'receipt_no':str(receipt_no),'amount':str(amount)
}
subject = Helper.merge_tags(mailData['subject'],sub_data)
m_data = {
'mail_content': mailData['mail_content'],'receipt_data': receipt_data,'conf': conf
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
if is_flash_msg == None:
if conf_id == 17 and amount_for_convertion in [500,1000,1500,2000]:
flash("An amount of {} inclusive of GST has been made towards WET & DRY lab registration.<br/>The receipt has been emailed to {}.<br/><br/> Receipt no. {}".format(amount,email,receipt_no),"successMsg")
elif conf_id == 50 and amount_for_convertion in [300]:
flash("An amount of {} inclusive of GST has been made towards session of zumba registration.<br/>The receipt has been emailed to {}.<br/><br/> Receipt no. {}".format(amount,email,receipt_no),"successMsg")
else:
if conf['is_gen_number'] == 'ref_number':
if ref_nos:
value = f"Reference no(s).{ref_nos}" if ref_nos else ""
flash(
f"An amount of {amount} has been made towards {conf_name} registration.<br/>"
f"The receipt has been emailed to {email}.<br/>"
f"A delegate registration confirmation email has been sent to the email id of the delegate(s).<br/><br/>"
f"Receipt no. {receipt_no}.<br/>"
f"{value}<br/><br/>",
# f"PG Bonafide certificate Awaiting Reference no(s). {ref_nos_pg}",
"successMsg")
else:
flash("An amount of {} has been made towards {} registration.<br/>The receipt has been emailed to {}.<br/> Receipt no. {} .".format(amount,conf_name,email,receipt_no),"successMsg")
else:
if del_nos and int(del_status_id) == 2 :
if addon_type_id in [2,5]:
flash("An amount of {} inclusive of GST has been made towards WET & DRY lab registration.<br/>The receipt has been emailed to {}.<br/><br/> Receipt no. {}".format(amount,email,receipt_no),"successMsg")
else:
flash("An amount of {} has been made towards {} registration.<br/>The receipt has been emailed to {}.<br/>A delegate registration confirmation email has been sent to the email id of the delegate(s).<br/><br/> Receipt no. {} .Delegate no(s). {}".format(amount,conf_name,email,receipt_no,del_nos),"successMsg")
else :
flash("An amount of {} has been made towards {} registration.<br/>The receipt has been emailed to {}.<br/>A delegate registration confirmation email has been sent to the email id of the delegate(s).<br/><br/> Receipt no. {} ".format(amount,conf_name,email,receipt_no),"successMsg")
html = render_template('email/receipt_email_v1.html',mail_content=mail_content,conf=conf)
if is_send == 1:
if conf['is_email_enable'] == 1:
data_1 = EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'delegate_id' : str(delegate_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_logs(data_1)
if conf['backup_email_2']:
EMAIL.MailTemplateSendMail(subject,html,conf['backup_email_2'],mailData,conf)
else:
return html
else :
return None
@app.route('/confirmation_delegate_mail/<int:conf_id>/<conf_key>/<delegate_id>', methods = ["GET", "POST"])
def ConfirmationDelegateMail(conf_id,conf_key,delegate_id,delegate,is_send,conf=None):
conf = conf if conf else Auth.getConf(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
template_name = "confirmation_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
if delegate is None:
delegates = BOModel().usp_del_get_delegates_by_delegate_id(delegate_id)
if delegates:
delegate = delegates[0]
if delegate:
email = delegate['email']
# email = 'karthiashokan23@gmail.com'
parent_email = delegate['parent_email']
# parent_email = 'karthiashokan23@gmail.com'
delegate_no = delegate['delegate_no']
amount = delegate['total_amount']
prefix = delegate["prefix"]
conf_name = delegate['conf_name']
ref_no = delegate['ref_no']
ref_no_only = delegate['ref_no_only']
if prefix:
name = delegate["prefix"] +" "+ delegate["full_name"]
else:
name = delegate["full_name"]
amount = "Rs."+str(amount)
is_gen_number = conf['is_gen_number']
# Reference number added here
if is_gen_number == 'ref_number':
subject = "Confirmation of registration - "+str(ref_no)
else:
sub_data = {
'delegate_no':str(delegate_no)
}
subject = Helper.merge_tags(mailData['subject'],sub_data)
m_data = {
'mail_content' : mailData['mail_content'],
'delegate' : delegate,
'conf' : conf
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('email/confirmation_mail_v1.html',mail_content=mail_content,conf=conf)
if is_send == 1:
if email :
if conf['is_email_enable'] == 1:
data_1 = EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'delegate_id' : str(delegate_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_logs(data_1)
if conf['backup_email_2']:
EMAIL.MailTemplateSendMail(subject,html,conf['backup_email_2'],mailData,conf)
elif not email :
if conf['is_email_enable'] == 1:
data_1 = EMAIL.MailTemplateSendMail(subject,html,parent_email,mailData,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'delegate_id' : str(delegate_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_logs(data_1)
if email != parent_email :
if conf['is_email_enable'] == 1:
data_1 = EMAIL.MailTemplateSendMail(subject,html,parent_email,mailData,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'delegate_id' : str(delegate_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_logs(data_1)
else:
return html
else :
return None
@app.route('/Generate_delegate_mail/<int:conf_id>/<conf_key>/<payment_id>/<unique_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def GenerateDelegateMail(conf_id,conf_key,payment_id,unique_id):
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
template_name = "payment_link_generate"
mailData = UserModel().get_mail_template(template_name,conf_id)
full_name = request.values.get('full_name')
parent_user_id = None
email = request.values.get('email')
show_msg = request.values.get('show_msg')
payment_link = request.host_url+str(conf_id)+"/"+conf_key+"/generate_payement_link/"+payment_id+"/"+unique_id
delegateData = UserModel().get_payment_link_incompleted_delegates(parent_user_id,unique_id,conf_id)
# subject = conf['conf_name']+" Delegate Registration Payment link"
sub_data = {
'conf_name':conf['conf_name']
}
subject = Helper.merge_tags(mailData['subject'],sub_data)
m_data = {
'mail_content' : mailData['mail_content'],
'full_name' : full_name,
'payment_link' : payment_link,
'conf' : conf,
'conf_id' : conf_id,
'conf_key' : conf_key,
'user_data' : delegateData
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
delegate_id = delegateData[0]['delegate_id']
# html = render_template('email/generate_payment_link_mail.html',conf_id=conf_id,conf_key=conf_key,full_name=full_name,payment_link=payment_link,user_data = delegateData,conf=conf)
html = render_template('email/generate_payment_link_mail_v1.html',conf=conf,mail_content=mail_content)
if conf['is_email_enable'] == 1:
data_1 = EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'delegate_id' : str(delegate_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_logs(data_1)
flash("Payment link generated successfully and sent as an email to "+email+"","successMsg")
if int(show_msg) == 1:
return redirect(url_for('offline.BoDelegate',conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('back_office.Index_user',conf_id=conf_id,conf_key=conf_key))
@app.route('/<int:conf_id>/<conf_key>/generate_payement_link/<int:payment_ids>/<unique_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def GeneratePayementLink(conf_id,conf_key,payment_ids,unique_id):
conf = Auth.getConf(conf_id,conf_key)
parent_user_id = None
delegateData = BOModel().usp_del_generate_payment_link_details(unique_id,payment_ids,conf_id)
if delegateData:
total_amount = 0
for index , value in enumerate(delegateData):
total_amount = total_amount + value['total_amt']
payment_id = value['payment_id']
parent_user_id = value['parent_user_id']
full_name = value['reg_name']
email = value['reg_email']
mobile = value['reg_mobile']
if payment_id == payment_ids:
del_html_data = render_template('users/generate_incompleted_information.html' ,user_data = delegateData,user_id = parent_user_id,total_amount=total_amount,conf_id=conf_id,conf_key=conf_key,conf=conf,incompleted_template =delegateData,parent_user_id=parent_user_id,unique_id=unique_id,payment_id=payment_id,full_name=full_name,email=email,mobile=mobile)
else:
flash("Invaild Link","Error")
del_html_data = render_template('backoffice_user/delegate_registration/error_msg.html',conf_id=conf_id,conf_key=conf_key,conf=conf)
else:
flash("This Link Expired","Error")
del_html_data = render_template('backoffice_user/delegate_registration/error_msg.html',conf_id=conf_id,conf_key=conf_key,conf=conf)
return del_html_data
@app.route('/<int:conf_id>/<conf_key>/generate_payement_table/<int:payment_ids>/<unique_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def GeneratePayementTable(conf_id,conf_key,payment_ids,unique_id):
conf = Auth.getConf(conf_id,conf_key)
parent_user_id = None
delegateData = UserModel().get_incompleted_delegates_by_parent_user_idUserModel(parent_user_id,unique_id,reg_mode=0)
if delegateData:
total_amount = 0
for index , value in enumerate(delegateData):
total_amount = total_amount + value['total_amt']
payment_id = value['payment_id']
parent_user_id = value['parent_user_id']
full_name = value['reg_name']
email = value['reg_email']
mobile = value['reg_mobile']
if payment_id == payment_ids:
del_html_data = render_template('users/generate_incompleted_information_table.html' ,user_data = delegateData,user_id = parent_user_id,total_amount=total_amount,conf_id=conf_id,conf_key=conf_key,conf=conf,incompleted_template =delegateData,parent_user_id=parent_user_id,full_name=full_name,email=email,mobile=mobile)
else:
flash("Invaild Link","Error")
del_html_data = render_template('backoffice_user/delegate_registration/error_msg.html',conf_id=conf_id,conf_key=conf_key,conf=conf)
else:
flash("This Link Expired","Error")
del_html_data = render_template('backoffice_user/delegate_registration/error_msg.html',conf_id=conf_id,conf_key=conf_key,conf=conf)
return del_html_data
@app.route('/<int:conf_id>/<conf_key>/<delegate_id>/view_confirmation_delegate_mail', methods = ["GET", "POST"])
def ViewConfirmationDelegateMail(conf_id,conf_key,delegate_id):
return ConfirmationDelegateMail(conf_id,conf_key,delegate_id,None,0)
@app.route('/<int:conf_id>/<conf_key>/<unique_id>/view_receipl_delegate_mail', methods = ["GET", "POST"])
def ViewReceiptDelegagteMail(conf_id,conf_key,unique_id):
return ShowReceiptDelegagteMail(conf_id,conf_key,unique_id,None,0)
@app.route('/view_receipt_delegate_mail/<int:conf_id>/<conf_key>/<delegate_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def ShowReceiptDelegagteMail(conf_id,conf_key,unique_id,receipt_data,is_send):
conf = Auth.getConf(conf_id,conf_key)
template_name = "receipt_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
if receipt_data is None :
receipt_datas = UserModel().receipt_no_generate_and_get(unique_id,conf_id)
if receipt_datas:
receipt_data = receipt_datas[0]
if receipt_data:
email = receipt_data['email']
# email = 'karthiashokan23@gmail.com'
receipt_no = receipt_data['receipt_no']
delegate_nos = receipt_data['delegate_nos']
amount = receipt_data['amount']
amount = int(amount)
amount = f"{amount:,}"
amount_with_commas = amount
amount_for_convertion = int(receipt_data['amount'])
amount_in_words = Helper.amountTowords(amount_for_convertion)
amount_in_words = amount_in_words.title()
conf_name = receipt_data['conf_name']
update_data = {
'amount_with_commas':amount_with_commas,
'amount_in_words':amount_in_words
}
receipt_data.update(update_data)
sub_data = {
'receipt_no':str(receipt_no),'amount':str(amount)
}
subject = Helper.merge_tags(mailData['subject'],sub_data)
m_data = {
'mail_content': mailData['mail_content'],'receipt_data': receipt_data,'conf': conf
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('email/receipt_email_v1.html',mail_content=mail_content,conf=conf)
if is_send == 1:
if conf['is_email_enable'] == 1:
EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
return html
@app.route('/get_pending_addons', methods = [ "GET","POST"])
def GetPendingAddons():
conf_id = request.values.get('conf_id',0)
conf_key = request.values.get('conf_key',0)
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
total_amount = 0
delegate_id = request.values.get('delegate_id',0)
delegate_addons = BOModel().check_delegate_addons(delegate_id,conf_id) #ToDo: change function name to get_delegate_completed_addons
addon_ids = delegate_addons['addon_ids']
pending_data = UserModel().get_all_pending_data(conf_id,delegate_id,now,addon_ids)
for index,value in enumerate(pending_data):
if index == 0:
reg_types = value
if index == 1:
addons_db = value
if index == 2:
get_addon_day_db = value
if index == 3:
addons_group = value
addons = {}
for a in addons_db:
addons[a["addon_type_id"]] = (addons.get(a["addon_type_id"],[]) + [a])
total_amount_for_course = AddonsModel().get_total_amount_for_wetlab(delegate_id)
json_data = json.dumps(total_amount_for_course,default=str)
total_amount = total_amount_for_course['total_amount']
total_amount = int(total_amount) if total_amount else 0
delegate_course = {}
delegate_courses_db = AddonsModel().get_delegate_courses(delegate_id)
if delegate_courses_db :
for item in delegate_courses_db:
delegate_course[item["addon_type_id"]] = delegate_course.get(item['addon_type_id'],[]) + [item]
courses = {}
courses_db = AddonsModel().get_courses_wetlab_drylabs(conf_id)
for item in courses_db:
courses[item["addon_type_id"]] = courses.get(item['addon_type_id'],[]) + [item]
get_addon_day = {}
for b in get_addon_day_db:
get_addon_day[b["addon_name"]] = (get_addon_day.get(b["addon_name"],[]) + [b])
html_data = render_template('users/addons_modal.html' ,courses=courses,total_amount=total_amount,delegate_course=delegate_course,delegate_addons= delegate_addons,reg_types=reg_types,addons=addons,str=str,conf=conf)
data = {"html_data":html_data,'total_amount':total_amount,"msg":"success",'status':1}
# total_count_delegates_addons = AddonsModel().get_count_delegates_addons(delegate_id)
# if total_count_delegates_addons == None :
# data = {"html_data":html_data,'total_amount':total_amount,"msg":"success",'status':2}
# elif int(total_count_delegates_addons['total_count']) == 4 :
# # total_amount = int(total_count_delegates_addons['total_amount'])
# data = {"html_data":html_data,'total_amount':total_amount,"msg":"success",'status':1}
# else :
# data = {"html_data":html_data,'total_amount':total_amount,"msg":"success",'status':2}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/get_day_for_course_weblab_drylab', methods = [ "GET","POST"])
def GetDayForWetDryLab():
courses = request.values.get('courses')
addon_type_id = request.values.get('addon_type_id')
conf_id = request.values.get('conf_id')
day_data = AddonsModel().get_day_by_course_for_WetLabDryLab(courses,addon_type_id,conf_id)
if day_data :
data = {"day_data":day_data ,"addon_type_id":addon_type_id, "msg":"success", "status" :1}
else:
data = {"day_data":'',"addon_type_id":addon_type_id,"msg":"failed","status":0}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/get_time_for_course_weblab_drylab', methods = [ "GET","POST"])
def GetTimeForWetDryLab():
courses = request.values.get('courses')
day = request.values.get('day')
addon_type_id = request.values.get('addon_type_id')
conf_id = request.values.get('conf_id')
time_data = AddonsModel().get_time_by_course_for_WetLabDryLab(courses,day,addon_type_id,conf_id)
if time_data :
data = {"time_data":time_data ,"addon_type_id":addon_type_id, "msg":"success", "status" :1}
else:
data = {"time_data":'',"addon_type_id":addon_type_id,"msg":"failed","status":0}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/<int:conf_id>/<conf_key>/<delegate_id>/get_course_for_wetdry_lab', methods = ["GET", "POST"])
def get_course_for_wetdry_lab(conf_id,conf_key,delegate_id):
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
delegate_addons = BOModel().check_delegate_addons(delegate_id,conf_id) #ToDo: change function name to get_delegate_completed_addons
addon_ids = delegate_addons['addon_ids']
pending_data = UserModel().get_all_pending_data(conf_id,delegate_id,now,addon_ids)
for index,value in enumerate(pending_data):
if index == 0:
reg_types = value
if index == 1:
addons_db = value
if index == 2:
get_addon_day_db = value
if index == 3:
addons_group = value
addons = {}
for a in addons_db:
addons[a["addon_type_id"]] = (addons.get(a["addon_type_id"],[]) + [a])
delegate_course = {}
delegate_courses_db = AddonsModel().get_delegate_courses(delegate_id)
if delegate_courses_db :
for item in delegate_courses_db:
delegate_course[item["addon_type_id"]] = delegate_course.get(item['addon_type_id'],[]) + [item]
courses = {}
courses_db = AddonsModel().get_courses_wetlab_drylabs(conf_id)
for item in courses_db:
courses[item["addon_type_id"]] = courses.get(item['addon_type_id'],[]) + [item]
del_html_data = render_template('users/addons_modal.html' ,courses=courses,delegate_course=delegate_course,delegate_addons= delegate_addons,reg_types=reg_types,addons=addons,str=str,conf=conf)
return del_html_data
@app.route('/<int:conf_id>/<conf_key>/post_course_for_wetdry_lab', methods = ["GET","POST"])
def PostCourseforWetDryLab(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
delegate_id = request.values.get('delegate_id')
courses = request.values.get('courses')
day = request.values.get('day')
time = request.values.get('time')
addon_type_id = request.values.get('addon_type_id')
user_data = AddonsModel().get_wetdry_insert_data(delegate_id,addon_type_id,courses,day,time)
msg = user_data['msg']
status = user_data['status']
total_amount_for_course = AddonsModel().get_total_amount_for_wetlab(delegate_id)
total_amount = total_amount_for_course['total_amount']
if total_amount == None :
total_amount = 0
elif int(total_amount) > 0 :
total_amount = total_amount
else :
total_amount = 0
getData = get_course_for_wetdry_lab(conf_id,conf_key,delegate_id)
if getData :
data = {"html_data":getData,'total_amount':total_amount,"msg":msg,'status':status}
else :
data = {"html_data":'','total_amount':total_amount,"msg":msg,"status":status}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/<int:conf_id>/<conf_key>/delete_course_for_wetdry_lab', methods = ["GET","POST"])
def DeleteCourseforWetDryLab(conf_id,conf_key):
delegate_addon_id = request.values.get('delegate_addon_id',0)
delegate_id = request.values.get('delegate_id',0)
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
if int(str(delegate_addon_id)) > 0:
delete_and_get_data = AddonsModel().delete_delegates_addons(delegate_addon_id)
total_amount_for_course = AddonsModel().get_total_amount_for_wetlab(delegate_id)
total_amount = total_amount_for_course['total_amount']
if total_amount == None :
total_amount = 0
elif int(total_amount) > 0 :
total_amount = total_amount
else :
total_amount = 0
getData = get_course_for_wetdry_lab(conf_id,conf_key,delegate_id)
if getData :
data = {"html_data":getData,'total_amount':total_amount,"msg":"Deleted Successfully",'status':1}
else :
data = {"html_data":'','total_amount':total_amount,"msg":'',"status":0}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/<int:conf_id>/<conf_key>/make_payment_wet_dry_lab', methods = ["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def MakePaymentWetDryLab(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
delegate_id = request.values.get('delegate_id')
check_addon_limit = AddonsModel().get_addons_limit(delegate_id)
msg = ""
is_valid = 1
if check_addon_limit :
for item in check_addon_limit :
if(item['is_full'] == 1 and item['reg_status'] != 2) :
is_valid = 0
msg = msg + "<br>" + item['display_name'] + " maximum level reached ."
if is_valid == 0 :
data = { 'msg':msg,'status':0,'data':''}
return jsonify(data)
total_amount = request.values.get('amount' or None)
society_id = conf['society_id']
created_at = now.strftime("%Y-%m-%d %H:%M:%S")
Auth_user = Auth.user(society_id)
prefix = Auth_user['prefix'] or None
name = Auth_user['full_name'] or None
full_name = prefix + " " + name if prefix else name
email = Auth_user['email']
mobile = Auth_user['mobile']
user_id = Auth_user['user_id']
unique_id = now.strftime('%Y%m%d%H%M%S')
url = conf['paymentgateway_api_url']
r = requests.get(url)
apikey = json.loads(r.content.decode())
am_id = conf['paymentgateway_appmaster_id']
is_test = conf['paymentgateway_is_test']
for index,value in enumerate(apikey) :
api_am_id = value['am_id']
if api_am_id == am_id:
app_key = value['app_key']
app_name = value['app_name']
break
else:
pass
payment_for = "Payment for CHEN-EYE CON 2024 Wet and Dry Lab Registration"
if conf_id == 36:
unique_id = app_key+unique_id
else:
unique_id = app_key+"_"+unique_id
# unique_id = app_key+"_"+unique_id
delegate_ids = delegate_id
app_type = Helper.AppType
payment_method = "free"
remarks = "Free Registration"
txn_id = None
is_generate = 0
is_generate_link_payment = 0
if total_amount == 0.00:
generate_payement = BOModel().usp_del_generate_free_payement(unique_id,delegate_ids,user_id,payment_for,payment_method,remarks,full_name,email,mobile,is_generate,created_at,txn_id,society_id,app_type,conf_id)
return redirect(url_for('free_reg.FreeRegUpdates',user_id=user_id,unique_id=unique_id,payment_method=payment_method,email=email,conf_id=conf_id,conf_key=conf_key))
else:
usp_del_generate_payement = BOModel().usp_del_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at,society_id,app_type,conf_id)
# usp_del_generate_payement = BOModel().usp_del_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at,society_id,app_type,conf_id)
payment_types = UserModel().get_payment_method(conf_id)
payment = payment_types[0]
payment_id = request.values.get('payment_id',0)
payment_type = payment['payment_type']
if usp_del_generate_payement :
if len(payment_types) == 1:
if payment_type == "PAYMENT GATEWAY":
url = url_for('user.CallPayment',conf_id=conf_id,conf_key=conf_key,unique_id=unique_id)
data = { 'msg':'','status':2,'data':'','url':url }
return jsonify(data)
else:
getData = UserModel().getDataforPayments(unique_id)
getData = getData[0]
amount = getData['amount']
payment_id = getData['payment_id']
delegate_id = delegate_ids
url = url_for('user.getMakePayment',conf_id=conf_id,conf_key=conf_key,unique_id=unique_id)
data = { 'msg':'','status':2,'data':'','url':url }
return jsonify(data)
else:
getData = UserModel().getDataforPayments(unique_id)
getData = getData[0]
amount = getData['amount']
payment_id = getData['payment_id']
delegate_id = delegate_ids
url = url_for('user.getMakePayment',conf_id=conf_id,conf_key=conf_key,unique_id=unique_id)
data = { 'msg':'','status':2,'data':'','url':url }
return jsonify(data)
else:
data = { 'msg':'Please select one option','status':0,'data':''}
return jsonify(data)
@app.route('/<int:conf_id>/<conf_key>/get_addons_total', methods = ["GET","POST"])
def GetAddonsTotal(conf_id,conf_key):
action = request.form['action']
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
delegate_id = request.form['delegate_id']
reg_types = BOModel().get_addon_reg_type_for_modal(delegate_id,conf_id)
total_amount = 0
total_count = 0
msg = []
add_addons_ids = []
reg_addons = {}
insert_del_addons = []
delete_del_addons = []
addons = UserModel().get_addons(delegate_id,now,conf_id)
total_reg_count_data = UserModel().get_total_reg_addon_count(delegate_id,conf_id)
total_reg_count = total_reg_count_data.get('total_reg_count')
addon_for_pay = []
addons_reg_limit = {}
for addon in addons:
reg_addons[addon["addon_id"]] = addon
if addon.get("delegate_addon_id") and addon.get("delegate_addon_id") > 0 and int(addon.get('reg_status')) not in [2,3] and int(addon.get('addon_type_id')) != 1 :
delete_del_addons.append(addon["delegate_addon_id"])
for row in reg_types:
values = request.values.getlist(row['input_name'])
values = [x for x in values if x or None]
print("values = ",values)
max_limit = row['addon_max_limit']
total_count = int(len(values)) + int(row['addons_count'] if row['addons_count'] else 0)
addition_total_count = total_count+total_reg_count
balance_count = max_limit-total_reg_count
print("total_count = ",total_count)
if values:
for val in values:
addon = reg_addons[int(val)]
addon_type_id = row['addon_type_id']
addons_reg_limit_db = AddonsModel().get_addons_head_reg_limit(conf_id,addon_type_id)
if addons_reg_limit_db:
for x in addons_reg_limit_db:
addons_reg_limit[x.get('addon_id')] = x
if check_head_reg_count(addons_reg_limit.get(addon.get('addon_id'))):
if addon.get("delegate_addon_id") and addon.get("delegate_addon_id") > 0 and int(addon.get('reg_status')) not in [2,3]:
addon_for_pay.append(addon.get("delegate_addon_id"))
total_amount = addon.get("amount",0) + total_amount
# addon_for_pay.remove(addon.get("delegate_addon_id"))
else:
add_data = {
"addon_id" : val,
"amount" : addon.get("amount",0),
"original_amount" : addon.get("amount",0),
"reg_status" : 0
}
total_amount = addon.get("amount",0) + total_amount
insert_del_addons.append(add_data)
if total_count > row['addon_max_limit'] :
addon_msg = {
'addon_type_id':row['addon_type_id'],
'msg': 'Please choose '+str(balance_count)+' course only.',
# 'msg': 'addons max limit reached',
'total_count':total_count,
'selected_count':row['addon_max_limit']
}
msg.append(addon_msg)
else:
if total_count > row['addon_max_limit'] :
add_addons_ids = 0
else:
add_addons_ids.append(values)
else:
addon_msg = {
'addon_type_id':row['addon_type_id'],
'msg': 'Course full - '+addon.get("display_name"),
# 'msg': 'Addons slot max limit reached',
'total_count':total_count,
'selected_count':row['addon_max_limit']
}
msg.append(addon_msg)
if total_amount > 0:
total_amount = total_amount
else:
total_amount = 0.00
addition_total_count = total_count+total_reg_count
balance_count = max_limit-total_reg_count
print("total_reg_count = ",total_reg_count,",addition_total_count = ",addition_total_count,",max_limit = ",max_limit)
if total_reg_count > 0 and addition_total_count > max_limit :
addon_msg = {
'addon_type_id':row['addon_type_id'],
'msg': 'Please choose '+str(balance_count)+' course only.',
# 'msg': 'Addons slot max limit reached',
'total_count':total_count,
'selected_count':row['addon_max_limit']
}
msg.append(addon_msg)
if len(msg) > 0 :
addons_msg = { 'status': 0 , 'delegate_id':delegate_id , 'msg':msg, 'total_amount':total_amount }
return jsonify(addons_msg)
delete_del_addons =list( set(delete_del_addons) - set(addon_for_pay))
addons_msg={ 'status':1,'total_amount':total_amount,'delegate_id':delegate_id}
if action == '1':
return jsonify(addons_msg)
else:
# delete_del_addons = list(set(addon_for_pay) - set(delete_del_addons))
msg = ""
status = 1
data = ""
society_id = conf['society_id']
if len(addon_for_pay) > 0 or len(insert_del_addons) > 0:
UserModel().save_delegates_addonsUserModel(delegate_id,insert_del_addons,delete_del_addons,now)
society_id = conf['society_id']
created_at = now.strftime("%Y-%m-%d %H:%M:%S")
Auth_user = Auth.user(society_id)
prefix = Auth_user['prefix'] or None
name = Auth_user['full_name'] or None
full_name = prefix + " " + name if prefix else name
email = Auth_user['email']
mobile = Auth_user['mobile']
user_id = Auth_user['user_id']
unique_id = now.strftime('%Y%m%d%H%M%S')
url = conf['paymentgateway_api_url']
# r = requests.get(url)
# apikey = json.loads(r.content.decode())
am_id = conf['paymentgateway_appmaster_id']
is_test = conf['paymentgateway_is_test']
# for index,value in enumerate(apikey) :
# api_am_id = value['am_id']
# if api_am_id == am_id:
# app_key = value['app_key']
# app_name = value['app_name']
# break
# else:
# pass
app_name = "MOSCON24"
app_key = "MOSCON24"
payment_for = app_name
if conf_id == 36:
unique_id = app_key+unique_id
else:
unique_id = app_key+"_"+unique_id
# unique_id = app_key+"_"+unique_id
delegate_ids = delegate_id
app_type = Helper.AppType
payment_method = ""
if conf_id == 39:
remarks = "TNOA 2024 T-Shirt"
else:
remarks = conf["conf_name"] + " - FREE "
txn_id = None
is_generate = 0
is_generate_link_payment = 0
if total_amount == 0.00:
generate_payement = BOModel().usp_del_generate_free_payement(unique_id,delegate_ids,user_id,payment_for,payment_method,remarks,full_name,email,mobile,is_generate,created_at,txn_id,society_id,app_type,conf_id)
return redirect(url_for('free_reg.FreeRegUpdates',user_id=user_id,unique_id=unique_id,payment_method=payment_method,email=email,conf_id=conf_id,conf_key=conf_key))
else:
payment_types = UserModel().get_payment_method(conf_id)
payment = payment_types[0]
payment_id = request.values.get('payment_id',0)
payment_type = payment['payment_type']
if len(payment_types) == 1:
if payment_type == "PAYMENT GATEWAY":
usp_del_generate_payement = BOModel().usp_del_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at,society_id,app_type,conf_id)
url = url_for('user.CallPayment',conf_id=conf_id,conf_key=conf_key,unique_id=unique_id)
data = { 'msg':'','status':2,'data':'','url':url }
return jsonify(data)
else:
usp_del_generate_payement = BOModel().usp_del_choose_payment_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at,society_id,app_type,conf_id)
getData = UserModel().getDataforPayments(unique_id)
getData = getData[0]
amount = getData['amount']
payment_id = getData['payment_id']
delegate_id = delegate_ids
url = url_for('user.getMakePayment',conf_id=conf_id,conf_key=conf_key,unique_id=unique_id)
data = { 'msg':'','status':2,'data':'','url':url }
return jsonify(data)
else:
usp_del_generate_payement = BOModel().usp_del_choose_payment_generate_payement(unique_id,delegate_ids,user_id,am_id,is_test,payment_for,is_generate,full_name,email,mobile,is_generate_link_payment,created_at,society_id,app_type,conf_id)
getData = UserModel().getDataforPayments(unique_id)
getData = getData[0]
amount = getData['amount']
payment_id = getData['payment_id']
delegate_id = delegate_ids
url = url_for('user.getMakePayment',conf_id=conf_id,conf_key=conf_key,unique_id=unique_id)
data = { 'msg':'','status':2,'data':'','url':url }
return jsonify(data)
else:
data = { 'msg':'Please select one option','status':0,'data':''}
return jsonify(data)
@app.route('/check_pending_payment_response', methods = ["GET", "POST"])
def CheckPendingPaymentResponse():
try:
update_count = 0
unique_ids_1 = ""
app_type = Helper.AppType
now = datetime.now()
cur_date = now.strftime("%Y-%m-%d")
paymentDatas = UserModel().get_unique_id(app_type,cur_date)
l_unique_ids =[]
if paymentDatas:
for paymentData in paymentDatas:
l_unique_ids.append(paymentData['unique_id'])
unique_ids = ",".join(l_unique_ids)
url = 'https://paymentapi.numerotech.com/payment_response_by_unique_id?unique_ids='+str(unique_ids)
r = requests.get(url)
response_1 = json.loads(r.content.decode())
if response_1['status'] == 1 :
for payment_data in response_1['payment_data']:
payment_status = payment_data['payment_status']
if payment_status and 'success' in payment_status :
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
api_payment_id = payment_data['payment_id']
payment_method = payment_data['method']
is_webhook_update = payment_data['is_webhook_update']
data = {'api_payment_id' : api_payment_id,'status':payment_status,'updated_at' :dt_string,'paid_at':dt_string,'payment_method':'PAYMENT GATEWAY','is_webhook_update':is_webhook_update,'payment_method_from_gateway':payment_method}
unique_id = payment_data['unique_id']
update_count = update_count + 1
unique_ids_1 = unique_ids_1+ " , " + unique_id
conf = UserModel().get_conf_id(unique_id)
conf_id = conf['conf_id']
conf_key = conf['conf_key']
update_and_get_data = UserModel().UserupdatePayment(unique_id,data,dt_string) # update payment status in your table
if update_and_get_data == "updated" and payment_status =="success":
u = UserModel()
generatedDelegates = u.Userdelegate_no_generate(unique_id,conf_id)
flash("Payment successful.","successMsg")
if generatedDelegates:
for delegate in generatedDelegates:
delegate_id = delegate['delegate_id']
ConfirmationDelegateMail(conf_id,conf_key,delegate_id,None,1,conf)
receipt_datas = u.receipt_no_generate_and_get(unique_id,conf_id);
if receipt_datas:
ReceiptDelegagteMail(conf_id,conf_key,unique_id,receipt_datas[0],1,conf)
else:
pass
else:
pass
if update_count >0:
return str(unique_ids_1)+ " these unique ids records are updated in payment table ."
else:
return "Payment success data not exist in PayUMoney"
else:
return "no unique id match"
else:
return "no payment data"
except Exception as e:
return str(e)
"""----------------------------------------------------------------------------------------------------------------"""
# UTR verify start
@app.route('/<int:conf_id>/<conf_key>/upi_scan_payment_server_response', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def UpiScanPaymentServerResponse(conf_id,conf_key):
conf = UserModel().get_confUserModel(conf_id,conf_key)
template_name = "payement_acknowledgement_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
user_id = request.values.get('user_id')
unique_id = request.values.get('unique_id')
delegate_id = request.values.get('delegate_id')
utr_number = request.values.get('utr_number') or None
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
getData = UserModel().getDataforPayments(unique_id)
attachment_data = UserModel().get_delegate_attchment_details(conf_id,unique_id)
if attachment_data:
attach_file_name = attachment_data['attach_file_name']
attach_path = attachment_data['attach_path']
else:
attach_file_name = None
attach_path = None
getData = getData[0]
email = getData['email']
full_name = getData['full_name']
payment_id = getData['payment_id']
amount = getData['amount']
payment_method = getData['payment_method']
delegate_ids = getData['delegate_ids'] # add status
checking_utr_number = UserModel().getDataforPaymentsby_utr_number(conf_id,utr_number,payment_id)
if checking_utr_number :
flash("Please check your UPI transaction ID .This UTR already used delegate registred you can not use same UTR number for delegate registration","errorMsg")
return redirect(url_for('user.getPostMakePayment',conf_id=conf_id,conf_key=conf_key,user_id=user_id,unique_id=unique_id,payment_id=payment_id,payment_type=payment_method,delegate_id=delegate_id,amount=amount))
else:
if attach_file_name and attach_path:
# return "get data in call payment route"
status = "success"
data = {'status' : status,'updated_at' :dt_string,'paid_at' :dt_string,'api_payment_id':utr_number,'utr_number':utr_number}
update_and_get_data = UserModel().updatePaymentData(unique_id,data) # update payment status in your table
update_reg_status = UserModel().update_reg_status(unique_id,delegate_ids,conf_id,dt_string) # here newly added parameter
reject_remarks = UserModel().get_reject_remarks(unique_id,conf_id)
addon_types_ids = UserModel().getPaymentAddons(conf_id,unique_id)
if reject_remarks:
reject_remarks_update = UserModel().update_reject_remarks(unique_id,conf_id)
if update_and_get_data == "updated" and status =="success":
m_data = {
'mail_content' : mailData['mail_content'],
'full_name' : full_name,
'utr_number' : utr_number,
'conf' : conf
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
tricon_workshop = TriconWorkshopUpdates(conf_id,unique_id)
flash("Thank you for registering for {}. Your UPI transaction shall be verified and the DSTC, SSTC and TSTC lab registration after shall be confirmed.<br/> For any assistance, please write to {},".format(conf['conf_name'],conf['e_support_email']),"successMsg")
subject = " Acknowledgement of your DSTC, SSTC and TSTC lab registration for {}".format(conf['conf_name'])
html = render_template('email/waiting_confirmation_mail_v1.html',mail_content=mail_content,conf=conf)
data_1 = EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'delegate_id' : str(delegate_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_logs(data_1)
if conf['backup_email_2']:
EMAIL.MailTemplateSendMail(subject,html,conf['backup_email_2'],mailData,conf)
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
else:
flash("An attempt to make the payment has failed. Please try again to make the payment. For any assistance, please click here to send an email to support","errorMsg")
return redirect(url_for('user.Register',conf_id=conf_id,conf_key=conf_key))
else:
flash("Please Scan and pay the amount and payment success screenshot upload ","errorMsg")
return redirect(url_for('user.getPostMakePayment',conf_id=conf_id,conf_key=conf_key,user_id=user_id,unique_id=unique_id,payment_id=payment_id,payment_type=payment_method,delegate_id=delegate_id,amount=amount))
# UTR verify end
@app.route('/<int:conf_id>/<conf_key>/post_make_payment/<int:user_id>/<unique_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
# @RouteGroup.login_required
def PostMakePayment(conf_id,conf_key,user_id,unique_id):
conf = UserModel().get_confUserModel(conf_id,conf_key)
society_id = conf['society_id']
sample_string = str(user_id)
sample_string_bytes = sample_string.encode("ascii")
base64_bytes = base64.b64encode(sample_string_bytes)
enc_user_id = base64_bytes.decode("ascii")
if request.method == "POST":
payment_id = request.values['payment_id']
delegate_id = request.values['delegate_id']
if delegate_id :
delegate_id = delegate_id.replace("[" ,"").replace("]","").replace("'","")
amount = request.values['amount']
payment_type = request.form['payment_type']
data={
'payment_method':payment_type
}
system_data = request.headers.get("user-agent")
if 'Android' in system_data or 'iPhone' in system_data:
show_paynow_btn = 1
else:
show_paynow_btn = 0
if payment_type == "PAYMENT GATEWAY":
return redirect(url_for('user.Payment_v1',payment_id=payment_id,payment_type=payment_type,conf_id=conf_id,conf_key=conf_key,unique_id=unique_id,delegate_id=delegate_id))
else:
update = UserModel().updatePaymentData(unique_id,data)
is_delegate = 1
payment_content = UserModel().get_payment_content(payment_type,is_delegate,conf_id)
image = UserModel().get_image(delegate_id,conf_id,unique_id)
return render_template('users/make_payment_screen.html',user_id=user_id,payment_id=payment_id,unique_id=unique_id,data=image,payment_content=payment_content,payment_type=payment_type,conf=conf,delegate_id=delegate_id,amount=amount,int=int,float=float,enc_user_id=enc_user_id,show_paynow_btn=show_paynow_btn)
else :
flash("Please, Try again.","errorMsg")
return redirect(url_for('user.getLogin',conf_id = conf_id,conf_key=conf_key,))
@app.route('/<int:conf_id>/<conf_key>/payment_v1/<unique_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def Payment_v1(conf_id,conf_key,unique_id):
conf = UserModel().get_confUserModel(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
reg_status = 1
UserModel().UpdateInprogressDelegates(unique_id,dt_string,reg_status,conf_id)
return redirect(url_for('user.CallPayment',conf_id = conf_id,conf_key=conf_key,unique_id=unique_id))
########################## IMAGE UPLOAD ###################################
@app.route('/<int:conf_id>/<conf_key>/post_amzon_upload', methods = ["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def PostAmazonUpload(conf_id,conf_key,acl="public-read"):
conf = UserModel().get_confUserModel(conf_id,conf_key)
if request.method == 'POST':
user_id = request.values.get('user_id')
delegate_id = request.values.get('delegate_id')
unique_id = request.values.get('unique_id')
attach_data = UserModel().get_delegate_attchment_details(conf_id,unique_id)
if attach_data:
attach_id = attach_data['attach_id']
else:
attach_id = 0
s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
files = request.files.getlist("file")
for file in files:
if file.filename:
filename = secure_filename(file.filename)
split_tup = os.path.splitext(filename)
file_name = split_tup[0]
file_extension = split_tup[1]
file_str = "payment_proof_"+ datetime.now().strftime("%Y%m%d-%H%M%S") +file_extension
if " " in file_str :
file_str = file_str.replace(" ","")
try:
bucket = "delegateapp"
user_id = str(user_id)
foldername = "delegate_attachment"
response = s3.upload_fileobj(file, bucket,foldername+'/'+unique_id+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
data_1 = {'bucketname' : bucket,'foldername':foldername,'file_name':file_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1,'unique_id':unique_id}
file_path = "https://delegateapp.s3.ap-southeast-1.amazonaws.com/"+foldername+"/"+unique_id
data = {
'user_id' : user_id,
'conf_id' : conf_id,
'delegate_id' : delegate_id,
'unique_id' : unique_id,
'attach_file_name' : file_str,
'attach_path' : file_path,
'attach_type' : "payment_proof",
'created_at' : datetime.now(),
'updated_at' : datetime.now()
}
if (int(attach_id) != 0):
data.pop("created_at")
data = UserModel().update_image(attach_id,data)
d = {}
d['attach_id'] = attach_id
data_1.update(d)
else :
attach_id_pk = UserModel().insert_image(data)
d = {}
d['attach_id'] = attach_id_pk[0]
data_1.update(d)
return json.dumps(data_1)
except ClientError as e:
logging.error(e)
data_1 = {'msg':'Image upload failed .Please try again.','status':0}
json_data = json.dumps(data_1)
return json_data
# flash('Something Error .Please Try Again')
else :
flash("Please, Try again.","errorMsg")
return redirect(url_for('user.getLogin',society_id=society_id,society_key=society_key))
@app.route('/<int:conf_id>/<conf_key>/delete_amazon_image', methods = ["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def DeleteAmazonImage(conf_id,conf_key):
attach_id = request.values.get('attach_id')
ua = UserModel().get_delegate_attach(attach_id)
if ua is None:
data = {'msg':'Deleted','status' : 1}
else:
filepath = ua['attach_path']
filename = ua['attach_file_name']
foldername = filepath+ "/"+filename
foldername = foldername.replace("https://delegateapp.s3.ap-southeast-1.amazonaws.com/", "")
s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
response = s3.Object("delegateapp", foldername).delete()
UserModel().delete_image(attach_id)
data = {'msg':'Deleted','status' : 1}
json_data = json.dumps(data)
return json_data
@app.route('/<int:conf_id>/<conf_key>/get_make_payment/<unique_id>', methods = ["GET","POST"])
@RouteGroup.conf_required
# @RouteGroup.login_required
def getMakePayment(conf_id,conf_key,unique_id):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
Auth_user = Auth.user(society_id)
if Auth_user:
user_id = Auth_user['user_id']
else:
enc_user_id = request.args.get("enc_user_id") or None
try:
base64_bytes = enc_user_id.encode("ascii")
sample_bytes = base64.b64decode(base64_bytes)
dec_user_id_str = sample_bytes.decode("ascii")
dec_user_id = dec_user_id_str
data = UserModel().checking_unique_id_with_user_id(conf_id,unique_id,dec_user_id)
if data:
user_id = data['user_id']
else:
return "<h1> Invaild URL </h1>"
except Exception as e:
return "<h1> Invaild URL </h1>"
getData = UserModel().getDataforPayments(unique_id)
getData = getData[0]
amount = getData['amount']
payment_id = getData['payment_id']
delegate_id = getData['delegate_ids']
payment_types = UserModel().get_payment_method(conf_id)
payment = payment_types[0]
payment_type = payment['payment_type']
addon_types_ids = UserModel().getPaymentAddons(conf_id,unique_id)
return render_template('users/make_payment.html',payment_type=payment_types,user_id=user_id,society_id=society_id,conf_id=conf_id,conf_key=conf_key,amount = amount,payment_id=payment_id,unique_id=unique_id,delegate_id=delegate_id,conf=conf,int=int,float=float,addon_types_ids=addon_types_ids)
@app.route('/<int:conf_id>/<conf_key>/get_post_make_payment/<int:user_id>/<unique_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
# @RouteGroup.login_required
def getPostMakePayment(conf_id,conf_key,user_id,unique_id):
conf = UserModel().get_confUserModel(conf_id,conf_key)
society_id = conf['society_id']
userData = UserModel().get_member(user_id)
payment_id = request.values.get('payment_id')
delegate_id = request.values.get('delegate_id')
amount = request.values.get('amount')
payment_type = request.values.get('payment_type')
enc_user_id = Cryptography.encrypt(user_id)
data={
'payment_method':payment_type
}
system_data = request.headers.get("user-agent")
if 'Android' in system_data or 'iPhone' in system_data:
show_paynow_btn = 1
else:
show_paynow_btn = 0
if payment_type == "PAYMENT GATEWAY":
return redirect(url_for('user.Payment_v1',payment_id=payment_id,payment_type=payment_type,conf_id=conf_id,conf_key=conf_key,unique_id=unique_id,delegate_id=delegate_id))
else:
# update = UserModel().updatePaymentData(unique_id,data)
is_delegate = 1
payment_content = UserModel().get_payment_content(payment_type,is_delegate,conf_id)
image = UserModel().get_image(delegate_id,conf_id,unique_id)
return render_template('users/make_payment_screen.html',user_id=user_id,payment_id=payment_id,unique_id=unique_id,data=image,payment_content=payment_content,payment_type=payment_type,userData=userData,conf=conf,delegate_id=delegate_id,amount=amount,enc_user_id=enc_user_id,show_paynow_btn=show_paynow_btn)
@app.route('/<int:conf_id>/<conf_key>/home_page', methods = ["GET", "POST"])
@RouteGroup.conf_required
def AlreadyRegisteredDelegates(conf_id,conf_key):
conf = UserModel().get_confUserModel(conf_id,conf_key)
society_id = conf['society_id']
userData = UserModel().get_already_completed_delegates(conf_id)
return render_template('users/boa_already_registered_delegates_list.html',userData=userData,conf=conf)
@app.route('/get_pending_addon', methods = [ "GET","POST"])
def GetPendingAddon():
conf_id = request.values.get('conf_id',0)
conf_key = request.values.get('conf_key',0)
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
delegate_id = request.values.get('delegate_id',0)
delegate_addons = BOModel().check_delegate_addons(delegate_id,conf_id) #ToDo: change function name to get_delegate_completed_addons
addon_ids = delegate_addons['addon_ids']
reg_types = BOModel().get_addon_reg_type_for_modal(delegate_id,conf_id)
addons = BOModel().get_addons_pendings(delegate_id,now,conf_id,addon_ids)
if int(conf_id) in [36,5]:
limit_for_addons = UserModel().get_addons_limit_for_all(conf_id)
user_type_id = UserModel().get_all_addons_data(conf_id)
user_type_ids =[]
for u in user_type_id:
user_type_ids.append(u['user_type_id'])
limits = {}
limit = {}
for dd in limit_for_addons :
key_1 = dd["user_type_id"]
val_1 = dd["limits"]
val_2 = val_1 if val_1 else None
limits[str(key_1)] = val_2
limit[key_1] = val_2
# ----
for ut in user_type_ids :
if ut not in limit:
limits[str(ut)] = None
else:
limits = None
# html_data = render_template('users/addons_modal.html' , delegate_addons= delegate_addons,reg_types=reg_types,addons=addons,str=str,conf=conf,limits=limits)
html_data = render_template('users/additional_addons_modal.html' , delegate_addons= delegate_addons,reg_types=reg_types,addons=addons,str=str,conf=conf,limits=limits)
total_amount = None
data = {"html_data":html_data,'total_amount':total_amount,"msg":"success",'status':1}
json_data = json.dumps(data,default=str)
return json_data
#'''-------------------Diffferent User Page Start------------------'''
# @app.route('/<int:conf_id>/<conf_key>/different_user', methods = ["GET", "POST"])
# @RouteGroup.conf_required
# def DifferentUser(conf_id,conf_key):
# conf = Auth.getConf(conf_id,conf_key)
# mobile = request.values.get('mobile_user_id')
# email = request.values.get('email_user_id')
# state_id = UserModel().get_states()
# output = UserModel().get_users(email,mobile)
# return render_template('users/different_user.html',state_id=state_id,output=output,str=str,type=type,conf=conf)
#'''-------------------Diffferent User Page End------------------'''
# '''-----------Support Email and submit start--------'''
# @app.route('/<int:conf_id>/<conf_key>/support', methods = ["GET", "POST"])
# @RouteGroup.conf_required
# def Support(conf_id,conf_key):
# conf = Auth.getConf(conf_id,conf_key)
# return render_template('email/support_email.html',conf=conf)
# @app.route('/<int:conf_id>/<conf_key>/post_support', methods = ["GET", "POST"])
# @RouteGroup.conf_required
# def PostSupport(conf_id,conf_key):
# conf = Auth.getConf(conf_id,conf_key)
# conf_id = request.form['conf_id']
# dt_string = datetime.now()
# membership_no = request.form['membership_no']
# full_name = request.form['name']
# email = request.form['email']
# mobile = request.form['mobile']
# remarks = request.form['remarks']
# data = {
# 'membership_no' :membership_no,
# 'full_name' : full_name,
# 'email' : email,
# 'mobile' : mobile,
# 'remarks' : remarks,
# 'conf_id' : conf_id,
# 'related_to' : 'member login issue',
# 'created_at' : dt_string
# }
# query_id = UserModel().insert_support_queries(data)
# subject = "Support Delegate Registration "
# html = render_template('email/support.html',users=data,conf_id=conf_id,conf_key=conf_key,conf=conf)
# if conf['is_email_enable'] == 1:
# EMAIL.sendMail(subject,html,email,conf)
# flash("Your Query Sent To Support Successfully...","SupportError")
# return redirect(url_for('user.Home',conf_id=conf['conf_id'],conf_key=conf['conf_key']))
# '''-----------Support Email and submit end-----------'''
@app.route('/<int:conf_id>/<conf_key>/<parent_user_id>/get_parent_inprogress_payment_delegates', methods = ["GET", "POST"])
def GetParentInprogressPaymentDelegates(parent_user_id,conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
unique_id = None
delegateData = UserModel().get_inprogress_payment_delegates_by_parent_user_idUserModel(parent_user_id,unique_id,conf_id)
if delegateData:
total_amount = 0
for index , value in enumerate(delegateData):
total_amount = total_amount + (value['total_amt'] if value['total_amt'] is not None else 0)
base_url = request.host_url
if "https" in base_url :
pass
else :
base_url = base_url.replace("http" ,"https")
del_html_data = render_template('users/inprogress_information.html' ,user_data = delegateData,user_id = parent_user_id,conf_id =conf_id,conf_key=conf_key,total_amount=total_amount,conf=conf,base_url = base_url,str=str,int=int,itemgetter=itemgetter,groupby=groupby)
else:
del_html_data = ""
return del_html_data
@app.route('/delegate_detail_get_unique_id', methods = ["GET", "POST"])
def DelegateDetailGetUniqueId():
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
pg_data = None
conf_id = request.values.get('conf_id') or None
conf_key = request.values.get('conf_key') or None
conf = Auth.getConf(conf_id,conf_key)
unique_id = request.values.get('unique_id') or None
parent_user_id = request.values.get('parent_user_id') or None
form_name = request.values.get('form_name') or None
is_show = "1"
generate_by_data = None
status = 402
msg = ""
data = {}
incompleted_delegate_data_uid = UserModel().get_incompleted_delegate_data_by_unique_id(conf_id,unique_id)
for index,value in enumerate(incompleted_delegate_data_uid):
if index == 0:
incom_del_data = value
if value:
del_data = value[0]
else:
del_data = None
if index == 1:
del_conf_data = value[0]
if incom_del_data :
am_id = incom_del_data[0]["am_id"]
unique_id = incom_del_data[0]["unique_id"]
created_at = incom_del_data[0]["created_at"]
amount = incom_del_data[0]["amount"]
api_payment_id = incom_del_data[0]["api_payment_id"]
dt_string = created_at.strftime("%Y-%m-%d %H:%M:%S")
if created_at :
from_date_1 = created_at - timedelta(days=2)
to_date = created_at + timedelta(days=2)
from_date = from_date_1.strftime("%Y-%m-%d %H:%M:%S")
to_date = to_date.strftime("%Y-%m-%d %H:%M:%S")
else :
from_date = now - timedelta(days=2)
to_date = curr_dt
# PAYUMONEY BLOCK
if int(conf_id) in [10,32,37,38,26,48,49]:
try:
url_1 = "https://conf-payments.numerotech.com/payumoney_trans.php?am_id="+str(am_id)+"&unique_id="+unique_id+"&from_date="+from_date+"&to_date="+to_date+""
response = requests.get(url_1)
response = response.text
# response = response.replace('\\' ,"")
# result = response[1:-1]
result = response
res = json.loads(result)
if res:
result_status = res["status"]
result_msg = res["msg"]
result_data = res["Transaction_details"]
payment_data = result_data
for index,value in enumerate(payment_data):
unique_id_pg = value["udf2"]
if unique_id_pg == unique_id:
status_pg = value["status"]
if status_pg == "null" or not status_pg :
status_pg = value["action"]
amount_pg = value["amount"]
created_at_pg = value["addedon"]
payment_id_pg = value["id"]
mode_pg = value["mode"]
name_pg = value["firstname"]
email_pg = value["email"]
mobile_pg = value["phone"]
if status_pg and status_pg == "SUCCESS":
status_pg = "success"
else:
status_pg = status_pg
pg_data = {"payment_id_pg" : payment_id_pg,"name_pg" : name_pg , "email_pg" :email_pg, "mobile_pg" : mobile_pg,"mode_pg":mode_pg,"created_at_pg":created_at_pg,"amount_pg":amount_pg,"status_pg":status_pg,"unique_id_pg":unique_id_pg}
if status_pg and status_pg == "success":
return redirect(url_for('user.GeneratePaymentServerResponse',conf_id=conf['conf_id'],conf_key=conf['conf_key'],payment_id_pg = payment_id_pg,name = name_pg , email =email_pg, mobile = mobile_pg,method =mode_pg,created_at = created_at_pg,amount = amount_pg,status = status_pg,unique_id = unique_id_pg,user_id = parent_user_id))
else:
status = 2
msg = " Your payment has failed. Please try again."
data = {"status" : status , "msg" : msg }
# else :
# status = 2
# msg = "Record not matched......"
# data = {"status" : status , "msg" : msg }
else:
status = 2
msg = "Record not found......"
data = {"status" : status , "msg" : msg }
except Exception as e:
return json.dumps(e,default=str)
# Air play block start here --------------
if int(conf_id) in [36]:
try:
response = requests.post(url="https://iapkarnataka.org/airpay_php/airpay_trans_info.php?unique_id="+unique_id+"")
res = response.text
xpars = xmltodict.parse(res)
if xpars:
result_1 = xpars["RESPONSE"]
result_data = result_1["TRANSACTION"]
payment_data = result_data
unique_id_pg = payment_data["TRANSACTIONID"]
if unique_id_pg == unique_id:
amount_pg = payment_data["AMOUNT"]
name_pg = payment_data["CUSTOMER"]
email_pg = payment_data["CUSTOMEREMAIL"]
status_pg = payment_data["TRANSACTIONPAYMENTSTATUS"]
created_at_pg = payment_data["TRANSACTIONTIME"]
# created_at_pg = created_at_pg.strftime("%Y-%m-%d %H:%M:%S")
created_at_pg = datetime.strptime(created_at_pg, '%d-%m-%Y %H:%M:%S') if created_at_pg else created_at_pg
payment_id_pg = payment_data["APTRANSACTIONID"]
mode_pg = payment_data["CHMOD"]
name_pg = payment_data["CUSTOMER"]
email_pg = payment_data["CUSTOMEREMAIL"]
mobile_pg = payment_data["CUSTOMERPHONE"]
if status_pg and status_pg == "success":
status_pg = "success"
else:
status_pg = status_pg
if mode_pg and mode_pg == "pg":
mode_pg = payment_data["CARDTYPE"]
if mode_pg and mode_pg == "netbank":
mode_pg = "NB"
else:
mode_pg= mode_pg
pg_data = {"payment_id_pg" : payment_id_pg,"name_pg" : name_pg , "email_pg" :email_pg, "mobile_pg" : mobile_pg,"mode_pg":mode_pg,"created_at_pg":created_at_pg,"amount_pg":amount_pg,"status_pg":status_pg,"unique_id_pg":unique_id_pg}
if status_pg and status_pg == "success":
return redirect(url_for('user.GeneratePaymentServerResponse',conf_id=conf['conf_id'],conf_key=conf['conf_key'],payment_id_pg = payment_id_pg,name = name_pg , email =email_pg, mobile = mobile_pg,method =mode_pg,created_at = created_at_pg,amount = amount_pg,status = status_pg,unique_id = unique_id_pg,user_id = parent_user_id))
else:
status = 2
msg = " Your payment has failed. Please try again."
data = {"status" : status , "msg" : msg }
else :
status = 2
msg = "Record not found......"
data = {"status" : status , "msg" : msg }
else:
status = 2
msg = "Record not found......"
data = {"status" : status , "msg" : msg }
except Exception as e:
return json.dumps(e,default=str)
# Air play block end here ---------------------------------
# Razorpay block ------------------------------------------
if int(conf_id) in [29 ,28]:
if int(conf_id) == 29: #ipgs block php api
# unique_id = "IPGSDEL23_20230603123220"
am_id = 39
url_1 = "https://ipgs.org.in/ipgs_payments/trans_info_4.php?am_id="+str(am_id)+"&unique_id="+unique_id+"&from_date="+from_date+"&to_date="+to_date+""
# print("url_1")
# print(url_1)
elif int(conf_id) == 28 : #EMINDIA block Python api
# unique_id = "EMINDIA23_20230620000916"
am_id = 37
url_1 = "https://emindia23payments.abhinavamedtech.in/payment_api/emindia23_api?am_id="+str(am_id)+"&unique_id="+unique_id+"&from_date="+from_date+"&to_date="+to_date+""
# http://emindia23payments.abhinavamedtech.in/emindia23_api?unique_id=EMINDIA23_20230620000916&from_date=2023-05021%2010:00:00&to_date=2023-06-21%2022:00:00
response = requests.get(url_1)
response = response.text
result = response
res = json.loads(result)
if res :
result_status = res["status"]
result_msg = res["msg"]
if result_status == 1 :
payment_data = res["data"]
unique_id_pg = payment_data["unique_id"]
if unique_id_pg and unique_id_pg == unique_id :
payment_id_pg = payment_data["api_payment_id"]
name_pg = ""
email_pg = payment_data["email"]
mobile_pg = payment_data["mobile"]
amount_pg = payment_data["amount"]
created_at_pg = payment_data["created_at"]
mode_pg = payment_data["pg_method"]
status_pg = payment_data["status"]
if amount_pg :
amount_pg = int(amount_pg)/100
if status_pg and status_pg == "success":
return redirect(url_for('user.GeneratePaymentServerResponse',conf_id=conf['conf_id'],conf_key=conf['conf_key'],payment_id_pg = payment_id_pg,name = name_pg , email =email_pg, mobile = mobile_pg,method =mode_pg,created_at = created_at_pg,amount = amount_pg,status = status_pg,unique_id = unique_id_pg,user_id = parent_user_id))
else:
status = 2
msg = " Your payment has failed. Please try again."
data = {"status" : status , "msg" : msg }
else:
status = 2
msg = "Records does not match."
data = {"status" : status , "msg" : msg }
else:
status = 2
msg = result_msg
data = {"status" : status , "msg" : msg }
else:
status = 2
msg = "Records does not match."
data = {"status" : status , "msg" : msg }
# TNOA ATOM PAYMENT GATEWAY
if int(conf_id) in [17]:
created_at = created_at.strftime("%Y-%m-%d")
url = "https://payment.atomtech.in/paynetz/vfts?merchantid=391691&merchanttxnid="+unique_id+"&amt="+str(amount)+"&tdate="+created_at+""
data = requests.get(url)
xpars = xmltodict.parse(data.text)
result_data = json.dumps(xpars,default=str)
if result_data:
payment_data_1 = ast.literal_eval(result_data)
payment_data = payment_data_1["VerifyOutput"]
name_pg = ""
email_pg = ""
mobile_pg = ""
payment_id_pg = payment_data["@atomtxnId"]
unique_id_pg = payment_data["@MerchantTxnID"]
status_pg = payment_data["@VERIFIED"]
amount_pg = payment_data["@AMT"]
created_at_pg = payment_data["@TxnDate"]
mode_pg = payment_data["@discriminator"]
if status_pg and status_pg == "SUCCESS":
status_pg = "success"
else:
status_pg = status_pg
if status_pg and status_pg == "success":
return redirect(url_for('user.GeneratePaymentServerResponse',conf_id=conf['conf_id'],conf_key=conf['conf_key'],payment_id_pg = payment_id_pg,name = name_pg , email =email_pg, mobile = mobile_pg,method =mode_pg,created_at = created_at_pg,amount = amount_pg,status = status_pg,unique_id = unique_id_pg,user_id = parent_user_id))
else:
status = 2
msg = " Your payment has failed. Please try again."
data = {"status" : status , "msg" : msg }
else:
status = 2
msg = "Records does not match."
data = {"status" : status , "msg" : msg }
# KSOS CCAVENUE PAYMENT GATEWAY
if api_payment_id and len(api_payment_id) > 2 :
params_1 = "order_no="+unique_id+"&reference_no="+api_payment_id
else :
params_1 = "order_no="+unique_id+""
if int(conf_id) in [27,20,19,21]:
# unique_id = 'KSOSDEL23_20230620192239'
if conf_id and int(conf_id) == 27:
url = "https://ksos.in/paymentapi_del/status_api_new_ksos_del.php?"+params_1+""
elif conf_id and int(conf_id) == 19:
url = "https://tnasi.com/paymentapi/status_api_new_tnasi23.php?"+params_1+""
elif conf_id and int(conf_id) == 21:
url = "https://indouksurgicon2023.com/indouk_payments/status_api_new_indouk23.php?"+params_1+""
else:
url = "https://iages24payments.iageschennai.com/status_api_new_iages24.php?"+params_1+""
response_1 = requests.get(url)
response_1 = response_1.text
if response_1 :
response_data = ast.literal_eval(response_1)
response_data = response_data["Order_Status_Result"]
api_data_status = response_data["status"]
if int(api_data_status) == 0 :
name_pg = response_data["order_bill_name"]
unique_id_pg = response_data["order_no"]
email_pg = response_data["order_bill_email"]
mobile_pg = response_data["order_bill_tel"]
amount_pg = response_data["order_amt"]
status_pg = response_data["order_status"]
payment_id_pg = response_data["reference_no"]
created_at_pg = response_data["order_status_date_time"]
mode_pg = response_data["order_card_name"]
if mode_pg and mode_pg in ['RuPay','Visa','Master Card']:
mode_pg = "DC"
if status_pg and status_pg == "Shipped":
status_pg = "success"
else:
status_pg = status_pg
if status_pg and status_pg == "success":
return redirect(url_for('user.GeneratePaymentServerResponse',conf_id=conf['conf_id'],conf_key=conf['conf_key'],payment_id_pg = payment_id_pg,name = name_pg , email =email_pg, mobile = mobile_pg,method =mode_pg,created_at = created_at_pg,amount = amount_pg,status = status_pg,unique_id = unique_id_pg,user_id = parent_user_id))
else:
status = 2
msg = " Your payment has failed. Please try again."
data = {"status" : status , "msg" : msg }
else :
status = 2
msg = "No record found. "
data = {"status" : status , "msg" : msg }
else:
status = 2
msg = "Records does not match."
data = {"status" : status , "msg" : msg }
reg_status = 0
is_count_update = 1
UserModel().UpdateInprogressDelegates(unique_id,dt_string,reg_status,conf_id,is_count_update)
if data:
inprogress_delegate_payment_template = GetParentInprogressPaymentDelegates(parent_user_id,conf_id,conf_key)
incompleted_template = get_parent_incompleted_delegates(parent_user_id,conf_id,conf_key)
data['inprogress_delegate_payment_template'] = inprogress_delegate_payment_template
data['incompleted_template'] = incompleted_template
else:
msg = "Records does not match."
data = {"status" : status , "msg" : msg }
inprogress_delegate_payment_template = GetParentInprogressPaymentDelegates(parent_user_id,conf_id,conf_key)
incompleted_template = get_parent_incompleted_delegates(parent_user_id,conf_id,conf_key)
data['inprogress_delegate_payment_template'] = inprogress_delegate_payment_template
data['incompleted_template'] = incompleted_template
return json.dumps(data,default=str)
@app.route('/confirmation_and_receipt_delegate_mail/<int:conf_id>/<conf_key>/<delegate_id>/<unique_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def ConfirmationAndReceiptDelegagteMail(conf_id,conf_key,delegate_id,unique_id,receipt_data,is_send,email):
conf = Auth.getConf(conf_id,conf_key)
template_name = "confirmation_and_receipt_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
del_table_name = None
otp_1 = None
if conf :
del_table_name = conf["del_table_name"]
if receipt_data is None :
receipt_datas = BOModel().BOreceipt_no_generate_and_get(unique_id,conf_id)
if receipt_datas:
receipt_data = receipt_datas[0]
if receipt_data:
if email:
email = email
else:
email = receipt_data['email']
# email = 'sai@numerotec.com'
receipt_no = receipt_data['receipt_no']
r_amount = receipt_data['amount']
conf_name = receipt_data['conf_name']
delegate_nos = receipt_data['delegate_nos']
is_kit = receipt_data['d_is_kit']
company_name = receipt_data['d_company_name']
ref_nos = receipt_data['ref_nos']
if str(r_amount) == "0.00":
r_amount = "Free"
else:
r_amount = int(r_amount)
r_amount = f"{r_amount:,}"
amount_with_commas = r_amount
amount_for_convertion = int(receipt_data['amount'])
amount_in_words = Helper.amountTowords(amount_for_convertion)
amount_in_words = amount_in_words.title()
if r_amount == "Free" :
r_amount = r_amount
else:
r_amount = "Rs."+r_amount+"/-"
delegate = None
if delegate is None:
delegates = BOModel().usp_del_get_delegates_by_delegate_id(delegate_id)
if delegates:
delegate = delegates[0]
if delegate:
# email = delegate['email']
# parent_email = delegate['parent_email']
delegate_no = delegate['delegate_no']
c_amount = delegate['total_amount']
prefix = delegate["prefix"]
conf_name = delegate['conf_name']
if prefix:
name = delegate["prefix"] +" "+ delegate["full_name"]
else:
name = delegate["full_name"]
success_msg = "An amount of {} has been made towards {} registration. The receipt has been email to {}.\nA delegate registration confirmation email has been sent to the email id of the delegate(s). Receipt no. {} .Delegate no(s). {} ".format(r_amount,conf_name,email,receipt_no,delegate_no)
subject = "Confirmation and Receipt Mail for Delegate Registration."
html = render_template('email/confirmation_and_receipt_mail.html',delegate=delegate,delegate_id=delegate_id,receipt_data=receipt_data,conf_id=conf_id,conf_key=conf_key ,amount_in_words=amount_in_words,amount_with_commas=amount_with_commas,conf=conf)
if is_send == 1:
if conf['is_email_enable'] == 1:
EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
return success_msg
else:
return success_msg
else:
return success_msg
return html
@app.route('/<int:conf_id>/<conf_key>/generate_payment_server_response', methods = ["GET", "POST"])
@RouteGroup.conf_required
def GeneratePaymentServerResponse(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
status = request.values.get('status') or None
unique_id = request.values.get('unique_id') or None
payment_method = request.values.get('method') or None
delegate_id = request.values.get('delegate_id') or None
payment_id = request.values.get('payment_id_pg') or None
user_id = request.values.get('user_id') or None
receipt_mail = "receipt_mail"
confimation_mail = "confimation_mail"
now = datetime.now()
current_dt_2 = now.strftime("%Y-%m-%d %H:%M:%S")
dt_string = request.values.get('create_at') or current_dt_2
getData = BOModel().BOgetDataforPayments(unique_id,conf_id)
badge_table = conf['del_table_name']
# return "get data in call payment route"
if getData :
getData_1 = getData[0]
email = getData_1['email']
mobile = getData_1['mobile']
delegate_ids = getData_1['delegate_ids']
# role = getData_1['role'] or None
range_1 = getData_1['range_1'] or 1
delegate_ids = delegate_ids.split(',')
data = {'api_payment_id' : payment_id,'status' : status,'updated_at' :dt_string,'paid_at' :dt_string,'payment_method':'PAYMENT GATEWAY','payment_method_from_gateway':payment_method}
update_and_get_data = UserModel().UserupdatePayment(unique_id,data,dt_string) # update payment status in your table
is_generate_link_payment = 0
if update_and_get_data == "updated" and (status =="success" or status == "Y" or status =="Success" or status =="Successful"):
u = UserModel()
generatedDelegates = u.Userdelegate_no_generate(unique_id,conf_id)
msg = "Payment successful."
status = 1
if generatedDelegates:
for delegate in generatedDelegates:
delegate_id = delegate['delegate_id']
is_generate_link_payment = delegate['is_generate_link_payment']
ConfirmationDelegateMail(conf_id,conf_key,delegate_id,None,1)
receipt_datas = u.receipt_no_generate_and_get(unique_id,conf_id);
success_msg = ConfirmationAndReceiptDelegagteMail(conf_id,conf_key,delegate_id,unique_id,None,0,email)
success_msg = "Payment successful.<br><br> "+success_msg
if receipt_datas:
ReceiptDelegagteMail(conf_id,conf_key,unique_id,receipt_datas[0],1,is_flash_msg = 1)
# tricon_workshop = TriconWorkshopUpdates(conf_id,unique_id)
elif status is not None:
status = 0
msg = "Payment has Failed"
success_msg = "Your payment has failed. Please try again. <br> If the problem persists , please write to {}".format(conf['e_support_email']),"errorMsg"
reg_status = 0
UserModel().UpdateInprogressDelegates(unique_id,dt_string,reg_status,conf_id)
incompleted_template = get_parent_incompleted_delegates(user_id,conf_id,conf_key)
completed_template = get_parent_completed_delegates(user_id,conf_id,conf_key)
delegateData = UserModel().get_completed_delegates_by_parent_user_id_UserModel(user_id,conf_id)
waiting_completed_template = GetParentWaitingCompletedDelegates(user_id,conf_id,conf_key)
rejected_delegate_payment_template = GetParentRejectUpiTransactionDelegates(user_id,conf_id,conf_key)
inprogress_delegate_payment_template = GetParentInprogressPaymentDelegates(user_id,conf_id,conf_key)
# To Get PG Waiting for Approval Data
pg_waiting_approval_template = GetParentPGWaitingApprovalDelegates(user_id,conf_id,conf_key)
payment_data={
'status' : status,
'success_msg' : success_msg,
'msg' : msg,
'incompleted_template' : incompleted_template,
'completed_template' : completed_template,
'delegateData' : delegateData,
'waiting_completed_template' : waiting_completed_template,
'rejected_delegate_payment_template' : rejected_delegate_payment_template,
'inprogress_delegate_payment_template': inprogress_delegate_payment_template,
# To Get PG Waiting for Approval Data
'pg_waiting_approval_template' : pg_waiting_approval_template
}
return jsonify(payment_data)
# PG Added
# Purpose : To Get PG Waiting for Approval data
# Created on 2024-01-31 11:35
@app.route('/<int:conf_id>/<conf_key>/<parent_user_id>/get_parent_pg_waiting_approval_delegates', methods = ["GET", "POST"])
def GetParentPGWaitingApprovalDelegates(parent_user_id,conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
unique_id = None
delegateData = UserModel().get_pg_waiting_approval_delegates_by_parent_user_idUserModel(parent_user_id,unique_id,conf_id)
if delegateData:
total_amount = 0
for index , value in enumerate(delegateData):
total_amount = total_amount + (value['total_amt'] if value['total_amt'] is not None else 0)
base_url = request.host_url
if "https" in base_url :
pass
else :
base_url = base_url.replace("http" ,"https")
del_html_data = render_template('users/pg_waiting_for_approval_information.html' ,user_data = delegateData,user_id = parent_user_id,conf_id =conf_id,conf_key=conf_key,total_amount=total_amount,conf=conf,base_url = base_url,str=str,int=int,itemgetter=itemgetter,groupby=groupby)
else:
del_html_data = ""
return del_html_data
@app.route('/get_pg_proof_to_show_modal', methods = [ "GET","POST"])
def GetPGProofToShowModal():
try:
delegate_id = request.values.get('delegate_id')
conf_id = request.values.get('conf_id')
conf_key = request.values.get('conf_key')
del_status_id = 7
get_data = UserModel().get_pg_proof_data(conf_id,delegate_id,del_status_id)
if int(conf_id) in [49,8]:
label_name = "Bonafide Certificate"
span_name = "( For PG Student )"
else :
label_name = "Proof Upload"
span_name = ""
if get_data :
html_data = render_template('users/pg_waiting_for_approval_modal.html' ,conf_id=conf_id,conf_key=conf_key,delegate = get_data,label_name=label_name,span_name=span_name)
data = {"html_data":html_data, "msg":"success", "status" :1}
else:
html_data = render_template('users/pg_waiting_for_approval_modal.html' ,delegate = get_data)
data = {"html_data":html_data, "msg":str(get_data), "status" :2}
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>/post_pg_proof_update',methods=['GET','POST'])
def PostPGProofUpdate(conf_id,conf_key):
try:
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
template_name = "ack_pg_bonafide_certificate_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
is_file_upload = 0
pg_cert_path = None
pg_cert_name = None
file = None
file_upload = None
del_status_id = 8
delegate_id = request.values.get('delegate_id')
user_id = request.values.get('user_id')
unique_id = request.values.get('unique_id')
pg_proof = request.files.get('pg_proof_files',None)
if pg_proof :
image_name = "certificate_proof_"
foldername = "certificates/"
is_file_upload = 1
file = pg_proof
else :
flash("Please Upload Proof",'errorMsg')
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
if int(is_file_upload) == 1:
file_upload = AWSUpload().AwsFileUpload(user_id,file,image_name,foldername)
else:
file_upload = ''
# 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 :
pg_cert_path = file_upload["pg_cert_path"] or None
pg_cert_name = file_upload["pg_cert_name"] or None
reject_remarks = UserModel().get_reject_remarks(unique_id,conf_id)
if reject_remarks:
reject_remarks_update = UserModel().update_reject_remarks(unique_id,conf_id)
update_data = {'pg_cert_path':pg_cert_path,
'pg_cert_name':pg_cert_name,
'updated_at':curr_dt
}
update_data = UserModel().update_delegateUserModel(delegate_id,update_data)
if update_data == "success" :
update_data = BOModel().bo_update_reg_status_delegates_addons_for_pg_proof_reject(unique_id,delegate_id,curr_dt,del_status_id)
delegate = UserModel().get_pg_proof_data(conf_id,delegate_id,del_status_id)
if delegate:
prefix = delegate["prefix"]
if prefix:
full_name = delegate["prefix"] +" "+ delegate["full_name"]
else:
full_name = delegate["full_name"]
users = Auth.user(conf['society_id'])
if users:
email = users['email']
else:
email = delegate['email']
subject = mailData['subject']
m_data = {'mail_content': mailData['mail_content'],'full_name': full_name,'conf': conf}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('email/ack_pg_bonafide_certificate_mail.html',mail_content=mail_content,conf=conf)
if conf['is_email_enable'] == 1:
EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
flash("Thank you for uploading your Bonafide Certificate. Your delegate registration number shall be generated after verification of Bonafide Certificate. <br/> For any assistance, please write to {}.".format(conf['e_support_email']),"successMsg")
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else :
flash(str(update_data),'errorMsg')
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
flash(str(file_upload_msg),'errorMsg')
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else :
flash(str(file_upload),'errorMsg')
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
except Exception as e:
raise e
# PG Added
@app.route('/<int:conf_id>/<conf_key>/register_dash', methods = ["GET", "POST"])
def RegisterDashboard(conf_id,conf_key):
conf_data = UserModel().get_conference(conf_id,conf_key)
if conf_data:
now = datetime.now()
curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
conf = Auth.getConf(conf_id,conf_key)
dict_1 = {}
society_id = conf['society_id']
users = Auth.user(society_id)
if users:
user_id = users["user_id"]
membership_no = users["membership_no"]
prefix = users["prefix"]
full_name = users["full_name"] or ' '
e_support_email = conf['e_support_email']
addons_member_list = conf_data['addons_member_list']
if user_id == 10420:
addons_member_list = 15
else:
addons_member_list = addons_member_list
if addons_member_list:
parent_user_id_count = UserModel().get_parent_user_id_count(conf_id,user_id)
if parent_user_id_count['parent_user_id'] >= addons_member_list:
is_show_member_div = 1
else:
is_show_member_div = 0
else:
is_show_member_div = 0
check_addon = UserModel().get_check_addons_UserModel(user_id,conf_id)
# data = UserModel().get_state_country_users_type(user_id,society_id,None,None,None,None)
code = UserModel().check_appliction_to_close_or_openUserModel(conf_id,curr_dt)
user_reg_content = UserModel().get_user_register_content(conf_id)
# membership_no = Auth.user(society_id).get('membership_no')
full_name = "Dr. " + full_name if not prefix else prefix + " " + full_name
# prefix = 'Dr. ' if not Auth.user(society_id).get('prefix') else Auth.user(society_id).get('prefix')
if conf_id in [18,5,26,49,58] : # BOA 2023
show_content = "Welcome <b> " + full_name +"<hr/>"
else:
if membership_no:
# show_content = "Welcome <b> "+prefix+" {}.</b> <br/> You are logged in as a member.".format(Auth.user(society_id).get('full_name'))
show_content = "Welcome <b> "+full_name+" </b> <hr/> You are logged in as a member."
else:
if conf_id in [19,54]:
# show_content ="Welcome <b> "+prefix+" {}.</b> <br/> You are logged in as a non-member since the email id you have used to login is not associated with any membership record.<br/>Visit <a href='https://asiindia.org/member-application/' target='_blank'>https://asiindia.org/member-application/</a> to apply for ASI membership.<br/><br/>If you are a member, please login with the email id associated with your membership record.<br/><br/> For any assistance, please wrote to <b>{}</b> and get a response in one working day.".format(Auth.user(society_id).get('full_name'),conf['e_support_email'])
show_content ="Welcome <b> "+full_name+" </b> <hr/> You are logged in as a non-member since the email id you have used to login is not associated with any membership record.<br/>Visit <a href='https://asiindia.org/member-application/' target='_blank'>https://asiindia.org/member-application/</a> to apply for ASI membership.<br/><br/>If you are a member, please login with the email id associated with your membership record.<br/><br/> For any assistance, please wrote to <b> "+e_support_email+" </b> and get a response in one working day."
else:
show_content ="Welcome <b> "+full_name+"</b> <hr/> You are logged in as a non-member since the email id you have used to login is not associated with any membership record.<br/>If you are a member, please login with the email id associated with your membership record.<br/><br/> For any assistance, please wrote to <b> "+e_support_email+" </b> and get a response in one working day."
# for index,value in enumerate(data):
# if index == 0:
# state_id = value[0]
# if index == 1:
# country_id = value[0]
# if index == 2:
# user = value[0]
# user_data = user
# if index == 3:
# reg_type = value[0]
# if index == 7:
# delegate = value
# if delegate:
# delegate = delegate[0]
# else:
# delegate = None
for value in check_addon:
status = value['status']
msg = value['msg']
count = value['count']
if count > 0:
if status == 1:
flash(msg,"successMsg")
if conf_id == 17:
display_addons = UserModel().get_wetdrylab_open_close(conf_id)
display_addon = display_addons.get('display_addon')
else:
display_addon = 0
delegateData = UserModel().get_completed_delegates_by_parent_user_id_UserModel(user_id,conf_id)
if delegateData:
workshop_del_no = delegateData[0].get('delegate_id')
workshop_del_status = delegateData[0].get('incomplete_additional_addon_types')
else:
workshop_del_no = None
workshop_del_status = "true"
html_data = render_template('users/delegate_dashboard_page.html',str=str,type=type,conf=conf,code=code,delegateData=delegateData,show_content=show_content,int=int,display_addon=display_addon,user_reg_content=user_reg_content,is_show_member_div=is_show_member_div,workshop_del_no=workshop_del_no,workshop_del_status=workshop_del_status)
return html_data
else:
return redirect(url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
@app.route('/<int:conf_id>/<conf_key>/view_confirmation/<user_uuid>', methods = ["GET"])
@RouteGroup.conf_required
def ViewConfirmation(conf_id,conf_key,user_uuid=None):
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
template_name = "confirmation_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
if user_uuid:
delegate_id = UserModel().get_delegate_data_using_user_uuid(user_uuid,conf_id)
if delegate_id:
delegate_id = delegate_id.get('delegate_id')
else:
delegate_id = None
else:
delegate_id = None
if delegate_id:
delegates = BOModel().usp_del_get_delegates_by_delegate_id(delegate_id)
if delegates:
delegate = delegates[0]
if delegate:
email = delegate['email']
delegate_no = delegate['delegate_no']
prefix = delegate["prefix"]
ref_no = delegate['ref_no']
ref_no_only = delegate['ref_no_only']
if prefix:
name = delegate["prefix"] +" "+ delegate["full_name"]
else:
name = delegate["full_name"]
is_gen_number = conf['is_gen_number']
# Reference number added here
if is_gen_number == 'ref_number':
subject = "Confirmation of registration - "+str(ref_no)
else:
sub_data = {
'delegate_no':str(delegate_no)
}
subject = Helper.merge_tags(mailData['subject'],sub_data)
m_data = {
'mail_content' : mailData['mail_content'],
'delegate' : delegate,
'conf' : conf
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('email/confirmation_mail_v1.html',mail_content=mail_content,conf=conf)
return html
else:
return ("<html><h1>Invalid URL</h1></html>")
else :
return ("<html><h1>Invalid URL</h1></html>")
@app.route('<int:conf_id>/<conf_key>/password_login', methods = ["GET","POST"])
@RouteGroup.conf_required
def postPwdLogin(conf_id,conf_key):
now = datetime.now()
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
email_login = request.values.get('email_login',None)
password = request.values.get('password',None)
if password:
pass
else:
flash("Please enter password.","errorMsg")
return getLogin(conf_id,conf_key,email_login)
data_email = UserModel().getEmailandPasswordUserModel(email_login,password,society_id)
if data_email:
user_id = data_email['user_id']
email = data_email['email']
password = data_email['password']
result = UserModel().get_users_valueUserModel(user_id,society_id,conf_id)
Auth.login(result,society_id)
profile_updated_at = data_email['profile_updated_at']
user_uuid = data_email['user_uuid']
member_type_id = data_email['member_type_id']
is_disable_otp = conf['is_disable_otp']
# if int(is_disable_otp) == 1:
# if int(conf_id) == 52:
# if member_type_id in [1,17,20]:
# profile_update_url = "https://profile.kosonline.org/{}/{}/at/app/{}?r_url='{}'".format(society_id,conf['society_key'],user_uuid,conf['app_url'])
# if profile_updated_at:
# years_to_add = profile_updated_at.year + 1
# current_dt = now.strftime('%Y-%m-%d')
# profile_updated_at_date = profile_updated_at.replace(year=years_to_add).strftime('%Y-%m-%d')
# if current_dt <= profile_updated_at_date:
# return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
# else:
# return flask.redirect(profile_update_url)
# else:
# return flask.redirect(profile_update_url)
return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
else:
flash("Passsword invalid. Please check the password.","errorMsg")
email = email_login
return getLogin(conf_id,conf_key,email)
@app.route('/<int:conf_id>/<conf_key>/resend_otp', methods = ["GET","POST"])
@RouteGroup.conf_required
def getResentOTP(conf_id,conf_key):
# random.seed(time.clock())
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
society_id = conf['society_id']
encode_user_id = request.values.get('user_id') or None
user_id = Helper.base64decode(encode_user_id)
reg_type = request.values.get('reg_type') or None
conf_name = conf['conf_name']
is_disable_otp = conf['is_disable_otp']
if user_id:
user = UserModel().get_user(user_id,society_id,conf_id)
template_name = "otp_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
if user is None:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
user_otp = user['otp']
if user_otp:
OTP = user_otp
else:
OTP = random.randint(1000,9999)
otp_sent_at = now
otp_expire_on = now + timedelta(minutes=10)
""" Send OTP Mail and SMS """
sub_data = {
'OTP' : str(OTP),
'conf_name': conf_name
}
subject = Helper.merge_tags(mailData['subject'],sub_data)
email = user['email']
name = user['full_name']
prefix = user['prefix']
if prefix == None:
prefix = ""
if name == None:
name = ""
if "numerotec.com" in email and conf_id == 20 :
return redirect(url_for('user.PasswordVerify' ,conf_id=conf_id,conf_key= conf_key,user_id=user_id))
else :
m_data = {
'OTP' : OTP,
'mail_content' : mailData['mail_content'],
'full_name' : name,
'otp_expire_on' : otp_expire_on.strftime('%d-%m-%Y %I:%M %p'),
'support_email' : conf['e_support_email'],
'conf_name' : conf_name
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('email/otp_sent.html',mail_content=mail_content,conf=conf)
if conf['is_email_enable'] == 1:
data_1 = EMAIL.MailTemplateSendMail(subject,html,email,mailData,conf)
if data_1:
data_1 = json.loads(data_1)
update_data = {
'user_id' : str(user_id),
'conf_id' : str(conf_id),
'created_at' : str(dt_string)
}
data_1.update(update_data)
UserModel().insert_mandrill_otp_logs(data_1)
""" END Send OTP Mail and SMS """
output = UserModel().update_otp(OTP,str(otp_sent_at),str(otp_expire_on),user_id)
if output == "success":
flash("The OTP (One Time Password) has been sent to your registered email id -"+ Helper.email_mask(email)+". This OTP is valid for 10 minutes. " ,"successMsg")
return redirect(url_for('user.OTPPage',user_id=user_id,conf_id=conf_id,conf_key=conf_key,reg_type=reg_type))
else:
return "failed"
else:
return redirect (url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
@app.route('/<conf_id>/<conf_key>/forget_pwd',methods = ["GET", "POST"])
@RouteGroup.conf_required
def ForgetPwd(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
return render_template('users/forget_pwd.html',conf_id=conf_id,conf_key=conf_key,conf=conf)
@app.route('/<conf_id>/<conf_key>/forget_pwd_mail',methods = ["GET", "POST"])
@RouteGroup.conf_required
def ForgetPwdMail(conf_id,conf_key):
if request.method == "POST" :
now = datetime.now()
conf = Auth.getConf(conf_id,conf_key)
society_id = conf['society_id']
email = request.values.get('email')
output = UserModel().get_emailUserModel(email,society_id)
reset_pwd_expire_on = now + timedelta(minutes=30)
if output :
user_id = output['user_id']
subject = "Reset Your Password"
email = output['email']
data = {'reset_pwd_expire_on' : reset_pwd_expire_on,'reset_pwd_sent_at':now}
output = UserModel().update_member(user_id,data)
html = render_template('email/reset_password_mail.html',society_id=society_id,conf_id=conf_id,conf_key=conf_key,conf=conf,output=output,user_id=user_id)
EMAIL.sendMailResetPassword(subject,html,email,conf)
flash('Reset link sent your registered email id to '+email,'successMsg')
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
else :
flash("Please Enter Registered Email id","errorMsg")
return redirect (url_for('user.ForgetPwd',society_id=society_id,conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key=conf_key))
@app.route('/<int:conf_id>/<conf_key>/password_reset/<encode_user_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def PasswordReset(conf_id,conf_key,encode_user_id=None):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf["society_id"]
if encode_user_id and encode_user_id != 'None':
user_id = Helper.base64decode(encode_user_id)
user = UserModel().get_user(user_id,society_id,conf_id)
email = user['email']
if user['reset_pwd_expire_on']:
now = datetime.now()
reset_pwd_expire_on = datetime.strptime(str(user['reset_pwd_expire_on']),'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S')
if str(now)>str(reset_pwd_expire_on):
flash("Expired!Link valid for 30 mintue")
return redirect (url_for('user.ForgetPwd',society_id=user['society_id'],conf_id=conf_id,conf_key=conf_key))
else:
return render_template('users/user_password_reset.html',conf=conf,data=user,email=email)
else:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
else:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
@app.route('/<int:conf_id>/<conf_key>/password_update', methods = ["GET", "POST"])
@RouteGroup.conf_required
def PasswordUpdateDelegate(conf_id,conf_key):
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
conf = Auth.getConf(conf_id,conf_key)
society_id = conf["society_id"]
user_id = request.values.get("user_id") or None
encode_user_id = Helper.base64encode(user_id)
prefix = request.values.get("prefix") or None
full_name = request.values.get("name") or None
email = request.values.get("email") or None
mobile = request.values.get("mobile") or None
confirm_password_1 = request.values.get("confirm_password_1") or None
confirm_password_2 = request.values.get("confirm_password_2") or None
get_login_process = UserModel().get_confUserModel(conf_id,conf_key)
is_disable_otp = get_login_process['is_disable_otp']
data_email = UserModel().get_emailUserModel(email,society_id)
user_uuid = data_email['user_uuid']
profile_updated_at = data_email['profile_updated_at']
if data_email['member_type_id']:
member_type_id = data_email['member_type_id']
else:
member_type_id = 2
if int(is_disable_otp) == 1:
data_insert = {
'prefix' : prefix,
'full_name' : full_name,
'email' : email,
'mobile' : mobile,
'society_id' : society_id,
'member_type_id': member_type_id,
'updated_at' : datetime.now(),
'password' : confirm_password_1,
'pwd_difference': confirm_password_2,
'pwd_set_at' : datetime.now()
}
if str(confirm_password_1) == str(confirm_password_2):
pass
else:
flash("Password and confirm password mismatch")
additional_data = {'user_id':user_id}
data_insert.update(additional_data)
return redirect(url_for('user.PasswordSet',conf_id=conf_id,conf_key=conf_key,encode_user_id=encode_user_id))
else:
data_insert = {
'prefix' : prefix,
'full_name' : full_name,
'email' : email,
'mobile' : mobile,
'society_id' : society_id,
'member_type_id': member_type_id,
'updated_at' : datetime.now()
}
if request.method == 'POST':
created_at = datetime.now()
society_id = conf['society_id']
data = UserModel().get_mobile_check_for_password(mobile,user_id,society_id)
if data:
d_email = data[0]['email']
if int(is_disable_otp) == 1:
if str(confirm_password_1) == str(confirm_password_2):
pass
else:
flash("Password and confirm password mismatch")
if d_email:
flash("The mobile number you have provided is already mapped to another email id."+" ("+(Helper.email_mask(d_email)) +") <br> Want to change your email id ? Please write to "+conf['e_support_email']+".")
else:
flash("The mobile number you have provided is already mapped to another email id."+" <br> Want to change your email id ? Please write to "+conf['e_support_email']+".")
additional_data = {'user_id':user_id}
data_insert.update(additional_data)
return redirect(url_for('user.PasswordSet',conf_id=conf_id,conf_key=conf_key,encode_user_id=encode_user_id))
else:
# if int(is_disable_otp) == 1:
# if int(conf_id) == 52:
# if member_type_id in [1,17,20]:
# result = UserModel().update_users_user_table(email,society_id,data_insert)
# result = UserModel().get_users_valueUserModel(user_id,society_id,conf_id)
# Auth.login(result,society_id)
# profile_update_url = "https://profile.kosonline.org/{}/{}/at/app/{}?r_url='{}'".format(society_id,conf['society_key'],user_uuid,conf['app_url'])
# if profile_updated_at:
# years_to_add = profile_updated_at.year + 1
# current_dt = now.strftime('%Y-%m-%d')
# profile_updated_at_date = profile_updated_at.replace(year=years_to_add).strftime('%Y-%m-%d')
# if current_dt <= profile_updated_at_date:
# result = UserModel().update_users_user_table(email,society_id,data_insert)
# return redirect(url_for('user.Register',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
# else:
# return flask.redirect(profile_update_url)
# else:
# return flask.redirect(profile_update_url)
# else:
result = UserModel().update_users_user_table(email,society_id,data_insert)
user = UserModel().get_emailUserModel(email,society_id)
user_id = user['user_id']
Auth.login(user,society_id)
return redirect(url_for('user.Home',conf_id=conf_id,conf_key=conf_key))
else:
if email :
data = get_emailUserModel(self,email,society_id)
if data :
if int(is_disable_otp) == 1:
if str(confirm_password_1) == str(confirm_password_2):
pass
else:
flash("Password and confirm password mismatch")
additional_data = {'user_id':user_id}
data_insert.update(additional_data)
return redirect(url_for('user.PasswordSet',conf_id=conf_id,conf_key=conf_key,encode_user_id=encode_user_id))
else :
flash("Invalid Login." ,"errorMsg")
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
else :
flash("Invalid Login." ,"errorMsg")
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
@app.route('/<int:conf_id>/<conf_key>/password_set/<encode_user_id>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def PasswordSet(conf_id,conf_key,encode_user_id=None):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf["society_id"]
if encode_user_id and encode_user_id != 'None':
user_id = Helper.base64decode(encode_user_id)
user = UserModel().get_user(user_id,society_id,conf_id)
email = user['email']
return render_template('users/user_password_reset.html',conf=conf,data=user,email=email)
else:
return redirect(url_for('user.getLogin',conf_id=conf_id,conf_key = conf_key))
@app.route('/<int:conf_id>/<conf_key>/get_session_of_zumba_addon', methods = ["GET", "POST"])
@RouteGroup.conf_required
def getSessionOfZumbaAddon(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf["society_id"]
user_id = request.values.get("user_id") or None
delegateData = UserModel().get_completed_delegates_by_parent_user_id_UserModel(user_id,conf_id)
display_addon = 0
html_data = render_template('users/custom_addons/session_of_zumba.html',str=str,type=type,int=int,conf=conf,delegateData=delegateData,display_addon=display_addon)
data = {"html_data":html_data,"msg":"success",'status':1}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/<int:conf_id>/<conf_key>/get_wetlab_and_drylab_addon', methods = ["GET", "POST"])
@RouteGroup.conf_required
def getWetlabAndDrylabAddon(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
society_id = conf["society_id"]
user_id = request.values.get("user_id") or None
delegateData = UserModel().get_completed_delegates_by_parent_user_id_UserModel(user_id,conf_id)
display_addon = 0
html_data = render_template('users/custom_addons/wetlab_and_drylab_del_no.html',str=str,type=type,int=int,conf=conf,delegateData=delegateData,display_addon=display_addon)
data = {"html_data":html_data,"msg":"success",'status':1}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/<int:conf_id>/<conf_key>/get_breakfast_session_addon', methods = ["GET", "POST"])
@RouteGroup.conf_required
def getBreakfastSessionAddon(conf_id,conf_key):
# print("inside")
conf = Auth.getConf(conf_id,conf_key)
society_id = conf["society_id"]
user_id = request.values.get("user_id") or None
delegateData = UserModel().get_completed_delegates_by_parent_user_id_UserModel(user_id,conf_id)
if conf_id in [49,50]:
addon_details = UserModel().get_additional_addon_count(conf_id)
else:
addon_details = None
display_addon = 0
html_data = render_template('users/custom_addons/breakfast_session.html',str=str,type=type,int=int,conf=conf,delegateData=delegateData,display_addon=display_addon,addon_details=addon_details)
print(html_data)
data = {"html_data":html_data,"msg":"success",'status':1}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/get_breakfast_pending_addon', methods = [ "GET","POST"])
def GetBreakfastPendingAddon():
conf_id = request.values.get('conf_id',0)
conf_key = request.values.get('conf_key',0)
conf = Auth.getConf(conf_id,conf_key)
now = datetime.now()
delegate_id = request.values.get('delegate_id',0)
delegate_addons = BOModel().check_delegate_addons(delegate_id,conf_id) #ToDo: change function name to get_delegate_completed_addons
addon_ids = delegate_addons['addon_ids']
addon_ids_lst = addon_ids.split(",")
# print("addon_ids_lst - ",addon_ids_lst)
reg_types = BOModel().get_addon_reg_type_for_modal(delegate_id,conf_id)
addons = BOModel().get_addons_pendings(delegate_id,now,conf_id,'0')
addons_reg_limit_db = AddonsModel().get_addons_head_reg_limit(conf_id,24)
# print("addons_reg_limit_db",addons_reg_limit_db)
day_addons = []
days = {}
addons_reg_limit = {}
if addons_reg_limit:
for x in addons_reg_limit_db:
addons_reg_limit[x.get('addon_id')] = x
skip_days = []
for a in addons:
if int(a.get('addon_type_id') or 0) == 24:
if str(a.get('addon_id')) in addon_ids_lst:
skip_days.append(a.get('day'))
elif check_head_reg_count(addons_reg_limit.get(a.get('addon_id'))):
day_addons.append(a)
days[a.get('day')] = a.get('day')
short_days = {}
for k in sorted(days.keys()):
short_days[k] = days[k]
# print("short_days - ",short_days)
days = short_days
for d in skip_days:
del days[d]
# print("days - ",days)
day_addons = json.dumps(day_addons, indent=4, sort_keys=True, default=str)
if int(conf_id) in [36,5]:
limit_for_addons = UserModel().get_addons_limit_for_all(conf_id)
user_type_id = UserModel().get_all_addons_data(conf_id)
user_type_ids =[]
for u in user_type_id:
user_type_ids.append(u['user_type_id'])
limits = {}
limit = {}
for dd in limit_for_addons :
key_1 = dd["user_type_id"]
val_1 = dd["limits"]
val_2 = val_1 if val_1 else None
limits[str(key_1)] = val_2
limit[key_1] = val_2
# ----
for ut in user_type_ids :
if ut not in limit:
limits[str(ut)] = None
else:
limits = None
# html_data = render_template('users/addons_modal.html' , delegate_addons= delegate_addons,reg_types=reg_types,addons=addons,str=str,conf=conf,limits=limits)
html_data = render_template('users/breakfast_additonal_addons.html' , delegate_addons= delegate_addons,reg_types=reg_types,addons=addons,str=str,conf=conf,limits=limits,days=days,day_addons=day_addons)
total_amount = None
data = {"html_data":html_data,'total_amount':total_amount,"msg":"success",'status':1}
json_data = json.dumps(data,default=str)
return json_data
def check_head_reg_count(addon):
# print("addon check limit -",addon)
if addon:
if int(addon.get('head_count')) > int(addon.get('reg_count')):
return True
else:
return False
else:
return True
@app.route('/<int:conf_id>/<conf_key>/view_all_receipt_delegate_mail', methods = ["GET", "POST"])
def ViewAllReceiptDelegateMail(conf_id,conf_key):
conf = UserModel().get_confUserModel(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
template_name = "receipt_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
html = []
is_view = 1
receipt_datas = BOModel().all_receipt_no_generate_and_get(conf_id)
if int(is_view) == 1 :
for receipt_data in receipt_datas :
amount = receipt_data['amount']
amount = int(amount)
amount = f"{amount:,}"
amount_with_commas = amount
amount_for_convertion = int(receipt_data['amount'])
amount_in_words = Helper.amountTowords(amount_for_convertion)
amount_in_words = amount_in_words.title()
if amount == "Free" :
amount = "Free"
else:
amount = "Rs."+amount+"/-"
update_data = {
'amount_with_commas':amount_with_commas,
'amount_in_words':amount_in_words
}
receipt_data.update(update_data)
m_data = {'mail_content': mailData['mail_content'],'receipt_data': receipt_data,'conf': conf}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html_data = render_template('email/all_receipt_email_v1.html',mail_content=mail_content,conf=conf)
htmls = html_data.replace("\n", "")
html.append(htmls)
html_datas = str(html).replace("['", " ").replace("']", " ").replace(",", "").replace("' '", "")
html_tmp = render_template('email/all_receipt_mail.html',html=html_datas)
return html_tmp
else :
return "False"
@app.route('/<int:conf_id>/<conf_key>/view_all_confirmation_delegate_mail', methods = ["GET", "POST"])
def ViewAllConfirmationDelegateMail(conf_id,conf_key):
conf = UserModel().get_confUserModel(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime('%Y-%m-%d %H:%M:%S')
template_name = "confirmation_mail"
mailData = UserModel().get_mail_template(template_name,conf_id)
html = []
is_view = 1
delegate_datas = BOModel().all_usp_del_get_delegates(conf_id)
if int(is_view) == 1 :
for delegate in delegate_datas :
m_data = {'mail_content': mailData['mail_content'],'delegate': delegate,'conf': conf}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html_data = render_template('email/all_confirmation_email_v1.html',mail_content=mail_content,conf=conf)
htmls = html_data.replace("\n", "")
html.append(htmls)
html_datas = str(html).replace("['", " ").replace("']", " ").replace(",", "").replace("' '", "")
html_tmp = render_template('email/all_confirmation_mail.html',html=html_datas)
return html_tmp
else :
return "False"
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists