Sindbad~EG File Manager
from fileinput import filename
from os import listdir
from os.path import join, dirname, realpath
from sqlalchemy import null
from werkzeug.utils import secure_filename
import os
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json,Response
import datetime
from datetime import timedelta,date,datetime
from flask import session, app
from .. import Cryptography,Auth,RouteGroup,Helper
from core.model.Users import Users
from core.model.UserQualification import UserQualification
from core.model.States import States
from core.model.Society import Society
from core.model.Countries import Countries
from core.model.ExportFilterCols import ExportFilterCols
from core.model.Reference import Reference
from core.model.MMemberType import MMemberType
from core.model.MWorkType import MWorkType
from core.model.MStatus import MStatus
from core.model.MAttachmentType import MAttachmentType
from core.model.MPaymentType import MPaymentType
from core.model.MembershipMailTemplates import MembershipMailTemplates
from core.model.UserAttachments import UserAttachments
from core.model.UserPayment import UserPayment
from core.model.UserPublication import Userpublication
from core.model.UserWork import UserWork
from core.model.UserStatusLogs import UserStatusLogs
from core.library.email import EMAIL
import boto3, botocore
from botocore.exceptions import ClientError
import logging
import requests
from urllib.parse import unquote
import math
import urllib
import io,ast
import csv
from io import StringIO
import string
app = Blueprint('backoffice', __name__)
@app.route('/', methods = ["GET"])
def BoHome():
app_host = request.host
society = Society().setSociety(app_host)
if society:
return redirect (url_for('backoffice.getLogin',society_id=society['society_id'],society_key=society['society_key']))
else:
session.pop('_flashes', None)
flash("Invalid URL","errorMsg")
return render_template('back_office/display_msg.html')
@app.route('/<society_id>/<society_key>',methods = ["GET", "POST"])
def Backoffice(society_id,society_key):
Auth.checkSocietybyIdKey(society_id,society_key)
if Auth.bocheck(society_id):
return redirect (url_for('backoffice.ApprovalPage',society_id=society_id,society_key=society_key))
else:
return redirect (url_for('backoffice.getLogin',society_id=society_id,society_key=society_key))
@app.route('/login/<society_id>/<society_key>',methods = ["GET"])
@RouteGroup.society_required
def getLogin(society_id,society_key):
if Auth.bocheck(society_id):
return redirect (url_for('backoffice.ApprovalPage',society_id=society_id,society_key=society_key))
else:
return render_template('back_office/bo_login.html',society_id=society_id,society_key=society_key)
@app.route('/login/<society_id>/<society_key>', methods = ["POST"])
def postLogin(society_id,society_key):
if request.method == "POST":
email = request.form['email']
password = request.form['password']
is_admin_access = Users().check_bo_access(email,1,society_id,None)
is_admin = is_admin_access['is_admin']
output = Users().check_email_password(email,password,is_admin,society_id)
if output and int(is_admin) == 1 :
output = dict(output, **is_admin_access)
Auth.bologin(output,society_id)
if int(society_id) == 12:
return redirect (url_for('backoffice.MembersPage',society_id=society_id,society_key=society_key))
else:
return redirect (url_for('backoffice.ApprovalPage',society_id=society_id,society_key=society_key))
else:
flash("Please enter correct Email id and password","errorMsg")
return render_template('back_office/bo_login.html',society_id=society_id,society_key=society_key)
else:
flash("Please, Try again.","errorMsg")
return redirect (url_for('backoffice.getLogin',society_id=society_id,society_key=society_key))
@app.route('/logout/<society_id>/<society_key>', methods = ["GET", "POST"])
def Logout(society_id,society_key):
Auth.logout(society_id)
return redirect(url_for('backoffice.getLogin',society_id=society_id,society_key=society_key))
@app.route('/approval_page/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ApprovalPage(society_id,society_key):
societyData = Auth.getSociety(society_id)
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50)) #default page size 10
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
search_member_type = None
from_memno = None
end_memno = None
approved_from = None
approved_to = None
order_type = request.values.get('order_type',"desc") or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
filter_visible = request.values.get('filter_visible',None)
search_data = {'name' : search_name,'email' : search_email,'mobile' : search_mobile}
offset = int((page-1)*limit)
if societyData['member_approve_type'] == "before payment":
# status_id = 11,13,16
status_id = str(societyData['ms_waiting_approval_status_id'])+","+str(societyData['ms_reupdated_status_id'])+","+str(societyData['ms_waiting_approval_withoutpay_status_id'])
else:
status_id = str(societyData['ms_waiting_approval_status_id'])+","+str(societyData['ms_reupdated_status_id'])
user_id = None
btn_page = request.values.get('form_submit',None) # search or filter button
if btn_page =="Search" :
page = 1
limit = 50
offset = int((page-1)*limit)
filter_visible = 1
elif btn_page == "Search Everywhere":
page = 1
limit = 50
status_id = None
filter_visible = 1
data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type) # searching members
if int(society_id) == 18:
status_id = societyData['ms_approved_status_id']
member_type_id = Helper.AssociateMemberId
attach_type_id = Helper.FellowshipAttachId1.get(society_key,None)
conv_life_data = Users().usp_mem_converting_assmem_lifemem(society_id,member_type_id,attach_type_id,status_id,offset,limit)
print(conv_life_data)
else:
conv_life_data = None
for index,value in enumerate(data) :
if index == 0:
if btn_page == "Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.ApprovalPage',society_id=society_id,society_key=society_key))
elif len(value) ==0:
flash("There is no members for waiting membership approval ","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
return render_template('back_office/bo_waiting_approval.html',user_profile=data,offset=offset,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page)
@app.route('/approved_awaiting_payment/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ApprovedAwaitingPayment(society_id,society_key):
societyData = Auth.getSociety(society_id)
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50)) #default page size 10
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
search_member_type = request.values.get('search_member_type',None) or None
filter_visible = request.values.get('filter_visible',None)
search_data = { 'name' : search_name,'email' : search_email,'mobile' : search_mobile,'member_type' : search_member_type}
offset = int((page-1)*limit)
status_id = societyData['ms_approved_awaitingpayment_status_id']
user_id = None
from_memno = None
end_memno = None
approved_from = None
approved_to = None
sort_by = request.values.get('sort_by',"membership_no_only") or None
order_type = request.values.get('order_type',"desc") or None
btn_page = request.values.get('form_submit',None)
if btn_page == "Search" :
page = 1
limit = 50
offset = int((page-1)*limit)
filter_visible = 1
elif btn_page == "Search Everywhere":
page = 1
limit = 50
status_id = None
filter_visible = 1
data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type)
for index,value in enumerate(data) :
if index == 0:
if btn_page == "Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.ApprovedAwaitingPayment',society_id=society_id,society_key=society_key))
elif len(value) ==0:
flash("No Data","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
member_types = MMemberType().get_member_type_approved(society_id)
return render_template('back_office/bo_approved_awaiting_payment.html',user_profile=data,offset=offset,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page,societyData=societyData,member_types=member_types)
@app.route('/members_page/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MembersPage(society_id,society_key):
# application approvel status type
societyData = Auth.getSociety(society_id)
status_id = societyData['ms_approved_status_id']
btn_page = request.values.get('form_submit',None)
user_id = None
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
search_member_type = request.values.get('search_member_type',None) or None
filter_visible = request.values.get('filter_visible',None)
from_memnos = request.values.get('from_memno',None) or None
end_memnos = request.values.get('end_memno',None) or None
approved_from = request.values.get('approved_from',None) or None
approved_to = request.values.get('approved_to',None) or None
order_type = request.values.get('order_type',"desc") or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
if from_memnos:
from_memno = ''.join([i for i in from_memnos if i.isdigit()])
else:
from_memno = None
if end_memnos:
end_memno = ''.join([i for i in end_memnos if i.isdigit()])
else:
end_memno = None
#passing to tempalte for set filter form values
search_data = {
'name' : search_name,
'email' : search_email,
'mobile' : search_mobile,
'member_type' : search_member_type,
'from_memno' : from_memnos,
'end_memno' : end_memnos,
'approved_from' : approved_from,
'approved_to' : approved_to,
'order_type' : order_type,
'sort_by' : sort_by
}
is_export = False
if btn_page == "Export Members Records":
is_export = True
page = 1
limit = 5000000
search_name = None
search_email = None
search_mobile = None
search_member_type = None
search_membership_no = None
elif btn_page == "Export Filter Records":
is_export = True
page = 1
limit = 5000000
elif btn_page =="Search" :
page = 1
limit = 50
filter_visible = 1
elif btn_page == "Search Everywhere":
page = 1
limit = 50
status_id = None
filter_visible = 1
else:
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50))
offset = int((page-1)*limit)
data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type)
for index,value in enumerate(data) :
if index == 0:
if btn_page == "Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.MembersPage',society_id=society_id,society_key=society_key))
elif len(value) == 0:
flash("There is no members for membership approved list","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
if is_export == True:
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
output = io.StringIO()
writer = csv.writer(output)
line = ['S.No', 'Membership No','Membership Type', 'Name', 'Email','Mobile' ,'Address', 'City','State','Ratified Year']
writer.writerow(line)
sno_val = 0
for row in data:
sno_val = sno_val +1
line = [sno_val ,row['membership_no'],row['member_type'] , row['full_name'], row['email'],row['mobile'],row['address'],row['city'],row['state_name'], row['ratified_year']]
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+societyData['society_intial']+"_Member_Approved_Record_"+str(date)+".csv"})
member_types = MMemberType().get_member_type_approved(society_id)
return render_template('back_office/bo_members_page.html',user_profile=data,offset=offset,societyData=societyData,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page,member_types=member_types)
@app.route('/incomplete_form/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def IncompleteForm(society_id,society_key):
societyData = Auth.getSociety(society_id)
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50)) #default page size 10
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
filter_visible = request.values.get('filter_visible',None)
search_data = {'name' : search_name,'email' : search_email,'mobile' : search_mobile}
offset = int((page-1)*limit)
status_id = 10
user_id = None
btn_page = request.values.get('form_submit',None)
is_export = False
if btn_page =="Search" :
page = 1
limit = 50
offset = int((page-1)*limit)
filter_visible = 1
elif btn_page == "Search Everywhere":
page = 1
limit = 50
offset = int((page-1)*limit)
status_id = None
filter_visible = 1
data = Users().usp_get_incomplete_member(search_name,search_email,search_mobile,status_id,offset,limit,user_id,society_id)
for index,value in enumerate(data) :
if index == 0:
if btn_page=="Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.IncompleteForm',society_id=society_id,society_key=society_key))
elif len(value) ==0:
flash("No data","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
if is_export == True:
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
output = io.StringIO()
writer = csv.writer(output)
line = ['S.No','Membership Type', 'Name', 'Email','Mobile' ,'Address', 'City','State']
writer.writerow(line)
sno_val = 0
for row in data:
sno_val = sno_val +1
line = [sno_val ,row['member_type'],row['full_name'], row['email'],row['mobile'],row['address'],row['city'],row['state_name']]
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+societyData['society_intial']+"Non_Member_Record_"+str(date)+".csv"})
return render_template('back_office/bo_incomplete_page.html',user_profile=data,offset=offset,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page,societyData=societyData)
@app.route('/waiting_proposer_seconder/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def WaitingProposerSeconder(society_id,society_key):
societyData = Auth.getSociety(society_id)
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50)) #default page size 10
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
search_member_type = request.values.get('search_member_type',None) or None
filter_visible = request.values.get('filter_visible',None)
sort_by = request.values.get('sort_by',"membership_no_only") or None
order_type = request.values.get('order_type',"desc") or None
search_data = {'name' : search_name,'email' : search_email,'mobile' : search_mobile,'member_type' : search_member_type }
offset = int((page-1)*limit)
status_id = societyData['ms_submitted_status_id']
if status_id is None:
flash("Waiting for Proposer and Seconder this page not configuration in this society.Please contact to support team.","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
user_id = None
from_memno = None
end_memno = None
approved_from = None
approved_to = None
# data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,search_membership_no,society_id)
btn_page = request.values.get('form_submit',None)
if btn_page == "Search" :
page = 1
limit = 50
offset = int((page-1)*limit)
filter_visible = 1
elif btn_page == "Search Everywhere":
page = 1
limit = 50
status_id = None
filter_visible = 1
data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type)
for index,value in enumerate(data) :
if index == 0:
if btn_page == "Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.WaitingProposerSeconder',society_id=society_id,society_key=society_key))
elif len(value) ==0:
flash("No Data","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
return render_template('back_office/bo_waiting_proposer_seconder.html',user_profile=data,offset=offset,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page)
@app.route('/rejected_page/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def RejectedPage(society_id,society_key):
societyData = Auth.getSociety(society_id)
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50)) #default page size 10
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
filter_visible = request.values.get('filter_visible',None)
search_member_type = None
from_memno = None
end_memno = None
approved_from = None
approved_to = None
sort_by = request.values.get('sort_by',"membership_no_only") or None
order_type = request.values.get('order_type',"desc") or None
search_data = {'name' : search_name,'email' : search_email,'mobile' : search_mobile }
offset = int((page-1)*limit)
status_id = societyData['ms_rejected_status_id']
user_id = None
data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type) # searching members
btn_page = request.values.get('form_submit',None) # search or filter button
if btn_page == "Search" :
page = 1
limit = 50
offset = int((page-1)*limit)
filter_visible = 1
for index,value in enumerate(data) :
if index == 0:
if btn_page=="Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.RejectedPage',society_id=society_id,society_key=society_key))
elif len(value) ==0:
flash("No data","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
if index == 8 :
reject_remarks = value[0]
return render_template('back_office/bo_rejected_page.html',user_profile=data,offset=offset,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,reject_remarks=reject_remarks,society_id=society_id,society_key=society_key)
@app.route('/view_for_approval/<user_id>/<society_id>/<society_key>', methods = ["GET"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ViewForApproval(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
users = Users().get_member(user_id)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return View(encrypt_user_id,users.status_id,society_id,society_key,1)
@app.route('/view_existing_member/<user_id>/<society_id>/<society_key>', methods = ["GET"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ViewExistingMember(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
users = Users().get_member(user_id)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return View(encrypt_user_id,users.status_id,society_id,society_key,0)
@app.route('/view/<user_id>/<int:status_id>/<society_id>/<society_key>/<int:is_approval>', methods = ["GET"])
@app.route('/view/<user_id>/<int:status_id>/<society_id>/<society_key>', methods = ["GET"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def View(user_id,status_id,society_id,society_key,is_approval = 0):
user_id = unquote(user_id)
try:
user_id = int(Cryptography.decrypt(user_id))
except:
flash("Invalid URL","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
societyData = Auth.getSociety(society_id)
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 10)) #default page size 10
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
order_type = request.values.get('order_type',"desc") or None
offset = int((page-1)*limit)
search_member_type = None
from_memno = None
end_memno = None
approved_from = None
approved_to = None
data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type)
for index,value in enumerate(data):
if index == 0:
userData = value[0]
if index == 2:
user_profile = value[0]
if index == 3:
user_qualification = value
if index == 4:
user_work = value
if index == 5:
user_attachments = value
if index == 6:
prosec = value
if index == 9:
user_other_society = value
if index == 10:
user_training = value
if index == 11:
user_additional = value
member_type = MMemberType().get_member_type_approved(society_id)
if int(society_id)==1 or int(society_id) == 9:
attach_type_id = Helper.FellowshipAttachId1.get(society_key,None)
attach_images = MAttachmentType().get_fellowship_attach_id(attach_type_id,user_id,society_id)
else:
attach_images=None
payment_method = user_profile['payment_method']
if payment_method is None:
pay_method = None
else:
pay_method = urllib.parse.unquote(payment_method)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/bo_view.html',user_id=user_id,encrypt_user_id=encrypt_user_id,member=userData,datas=user_qualification,data=user_work,user=user_profile,image=user_attachments,prosec_data=prosec,member_type=member_type,is_approval=is_approval,pay_method=pay_method,society_id=society_id,society_key=society_key,societyData=societyData,user_other_society=user_other_society,user_training=user_training,attach_images=attach_images,user_additional=user_additional)
# after approval the view the mail sent to member in bo- manually
@app.route('/membership_approved_mail_view/<user_id>/<society_id>/<society_key>',methods=["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MembershipApprovedMailView(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
# subject_1 = user_profile['prefix']+user_profile['full_name'] if user_profile['prefix'] else user_profile['full_name']
template_name = "approved_mail"
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
societyData = Auth.getSociety(society_id)
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail']
}
s_data = {
'mail_content' : mailData.subject,
'userData' : user_profile,
'society' : society
}
m_data = {
'mail_content' : mailData.mail_content,
'userData' : user_profile,
'society' : society
}
subject = Helper.convert_html_for_mail_screen(s_data)
mail_content = Helper.convert_html_for_mail_screen(m_data)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/membership_approved_mail_view.html',encrypt_user_id=encrypt_user_id,users=user_profile,mail_content=mail_content,subject=subject,society_id=society_id,society_key=society_key,societyData=societyData)
# in members page - membership approved mail-manually
@app.route('/membership_approved_mail/<user_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MembershipApprovedMail(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
# full_name = user_profile['prefix']+user_profile['full_name'] if user_profile['prefix'] else user_profile['full_name']
template_name = "approved_mail"
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail']
}
s_data = {
'mail_content': mailData.subject,
'userData' : user_profile,
'society' : society
}
subject = Helper.convert_html_for_mail_screen(s_data)
if request.method == "POST" :
email = request.form['sample_email']
subject = "SAMPLE : " + subject
flash("Successfully sent sample mail","successMsg")
else:
email = user_profile['email']
flash("Successfully sent mail to Applicant","successMsg")
m_data = {
'mail_content': mailData.mail_content,
'userData' : user_profile,
'society' : society
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('back_office/email/bo_mail_template.html',mail_content=mail_content,societyData=societyData)
EMAIL.sendMail(subject,html,email,mailData,societyData)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return redirect(url_for('backoffice.MembershipApprovedMailView',user_id=encrypt_user_id,society_id=society_id,society_key=society_key))
# in view page secretariat to approve or rejected membership
@app.route('/approved_rejected_membership/<user_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ApprovedRejectedMembership(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
if request.method == "POST":
status = request.values["approved_rejected"]
if status == "Approve":
status_db = "Approved, Awaiting for payment"
elif status == "Approve & generate membership number":
status_db = "Approved. Membership number generated"
else:
status_db = status
status_id_1 = MStatus().get_status_id_from_display_name(status_db,society_id)
status_id = status_id_1['status_id']
member_type_id = request.values.get('member_type')
next_reminder_date = None
if status_id == societyData['ms_rejected_status_id'] : # 14 is approved
member_type_id = 2
approved_member_type_id = None
next_reminder_date = datetime.now() + timedelta(days=3)
elif status_id == societyData['ms_approved_awaitingpayment_status_id'] :
approved_member_type_id = member_type_id
member_type_id = 2
else:
approved_member_type_id = None
if status == "Approve & generate membership number":
Users().usp_generate_membership_number(user_id,member_type_id,society_id)
boadmindata = Auth.bouser(society_id)
if boadmindata:
approved_user_id = boadmindata['user_id']
else:
return redirect (url_for('backoffice.getLogin',society_id=society_id,society_key=society_key))
data = {'approved_user_id':approved_user_id,'approved_member_type_id':approved_member_type_id,'member_type_id':member_type_id,'status_id':status_id,'updated_at': datetime.now(),'secretary_approved_on':datetime.now()}
Users().update_member(user_id,data)
remarks = request.form['remarks']
userData = Users().get_member(user_id)
member_type_id = userData.member_type_id
datas = {'user_id':user_id,'society_id':society_id,'status_id':status_id,'status':status,'member_type_id':member_type_id,'remarks':remarks,'created_at':datetime.now(),'next_reminder_date':next_reminder_date}
UserStatusLogs().insert_status_remarks(datas)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return redirect(url_for('backoffice.MembershipApprovedRejectedMailView',user_id=encrypt_user_id,society_id=society_id,society_key=society_key))
else:
flash("Please, Try again.","errorMsg")
return redirect (url_for('backoffice.getLogin',society_id=society_id,society_key=society_key))
@app.route('/membership_approved_rejected_mail_view/<user_id>/<society_id>/<society_key>',methods=["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MembershipApprovedRejectedMailView(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
msg = user_profile['display_name']
if msg == "Rejected":
template_name = "rejected_mail"
flash(msg,"errorMsg")
else:
if user_profile['status_id'] == societyData['ms_approved_status_id']:
template_name = "approved_mail"
flash(msg,"successMsg")
else :
template_name = "approved_rejected_mail"
flash("Application approved","successMsg")
encrypt_user_id = Cryptography.encrypt(int(user_id))
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail'],
'staticsitelink' : societyData['static_site_url'],
'navigate_link' : societyData['navigate_link'],
'navigate_link_name' : societyData['navigate_link_name'],
'rejected_status_id' : societyData['ms_rejected_status_id'],
'approved_status_id' : societyData['ms_approved_status_id'],
'base_url' : Helper.base_url()
}
s_data ={
'mail_content' : mailData.subject,
'userData' : user_profile,
'society' : society
}
m_data ={
'mail_content': mailData.mail_content,
'userData' : user_profile,
'society' : society
}
subject = Helper.convert_html_for_mail_screen(s_data)
mail_content = Helper.convert_html_for_mail_screen(m_data)
return render_template('back_office/membership_approved_rejected_mail_view.html',encrypt_user_id=encrypt_user_id,user=user_profile,society_id=society_id,society_key=society_key,mail_content=mail_content,subject=subject,societyData=societyData)
@app.route('/membership_approved_rejected_mail/<user_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MembershipApprovedRejectedMail(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
full_name = user_profile['prefix']+user_profile['full_name'] if user_profile['prefix'] else user_profile['full_name']
if user_profile['status_id'] == societyData['ms_rejected_status_id']:
template_name = "rejected_mail"
elif user_profile['status_id'] == societyData['ms_approved_status_id']:
template_name = "approved_mail"
else:
template_name = "approved_rejected_mail"
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail'],
'staticsitelink' : societyData['static_site_url'],
'navigate_link' : societyData['navigate_link'],
'navigate_link_name' : societyData['navigate_link_name'],
'rejected_status_id' : societyData['ms_rejected_status_id'],
'approved_status_id' : societyData['ms_approved_status_id'],
'base_url' : Helper.base_url()
}
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
s_data ={
'mail_content' : mailData.subject,
'userData' : user_profile,
'society' : society
}
m_data ={
'mail_content' : mailData.mail_content,
'userData' : user_profile,
'society' : society
}
subject = Helper.convert_html_for_mail_screen(s_data)
mail_content = Helper.convert_html_for_mail_screen(m_data)
email = user_profile['email']
encrypt_user_id = Cryptography.encrypt(int(user_id))
html = render_template('back_office/email/bo_mail_template.html',mail_content=mail_content,societyData=societyData)
EMAIL.sendMail(subject,html,email,mailData,societyData)
flash("Sent mail to Applicant","successMsg")
return redirect(url_for('backoffice.MembershipApprovedRejectedMailView',user_id=encrypt_user_id,society_id=society_id,society_key=society_key))
# sent payment mail in awaiting approved page manually
@app.route('/membership_approved_payment_mail_view/<user_id>/<society_id>/<society_key>',methods=["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MembershipApprovedPaymentMailView(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
if societyData['paymentgateway_appmaster_id'] is not None:
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
full_name = user_profile['prefix']+user_profile['full_name'] if user_profile['prefix'] else user_profile['full_name']
template_name = "payment_mail"
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
if mailData is None:
return "No mail data content"
else:
sub_data = {'full_name' : full_name,'society_name' : societyData['society_intial']}
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail'],
'base_url' : Helper.base_url()
}
m_data ={
'mail_content' : mailData.mail_content,
'userData' : user_profile,
'society' : society
}
subject = Helper.merge_tags(mailData.subject,sub_data)
mail_content = Helper.convert_html_for_mail_screen(m_data)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/membership_approved_payment_mail_view.html',encrypt_user_id=encrypt_user_id,mail_content=mail_content,subject=subject,society_id=society_id,society_key=society_key,societyData=societyData)
else:
return "No Online Payment"
@app.route('/membership_payment_mail/<user_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MembershipPaymentMail(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
full_name = user_profile['prefix']+user_profile['full_name'] if user_profile['prefix'] else user_profile['full_name']
template_name = "payment_mail"
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
sub_data = {'full_name' : full_name,'society_name' : societyData['society_intial']}
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail'],
'base_url' : Helper.base_url()
}
subject = Helper.merge_tags(mailData.subject,sub_data)
if request.method =="POST":
email = request.form['sample_email']
subject = "SAMPLE : " + subject
flash("Successfully sent sample mail","successMsg")
else:
email = user_profile['email']
flash("Successfully sent mail to Applicant","successMsg")
m_data ={
'mail_content' : mailData.mail_content,
'userData' : user_profile,
'society' : society
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('back_office/email/bo_mail_template.html',mail_content=mail_content,societyData=societyData)
EMAIL.sendMail(subject,html,email,mailData,societyData)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return redirect(url_for('backoffice.MembershipApprovedPaymentMailView',user_id=encrypt_user_id,society_id=society_id,society_key=society_key))
@app.route('/reminder_proposer_seconder_mail_view/<user_uuid>/<reference_user_uuid>/<society_id>/<society_key>',methods=["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ReminderProposerSeconderMailView(user_uuid,reference_user_uuid,society_id,society_key):
societyData = Auth.getSociety(society_id)
user_reference = Reference().usp_get_reference_v1(user_uuid,reference_user_uuid)
userData = user_reference[0]
full_name = userData['user_prefix']+userData['user_name'] if userData['user_prefix'] else userData['user_name']
encrypt_user_id = Cryptography.encrypt(int(userData['user_id']))
template_name = "bo_prosec_mail"
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail'],
'society_full_form' : societyData['society_title'],
'backup_mail' : societyData['e_backup_mails'],
'base_url' : Helper.base_url()
}
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
sub_data = {'full_name' : full_name,'society_name' : societyData['society_intial']}
m_data = {
'mail_content' : mailData.mail_content,
'userData' : userData,
'society' : society
}
subject = Helper.merge_tags(mailData.subject,sub_data)
mail_content = Helper.convert_html_for_mail_screen(m_data)
return render_template('back_office/bo_reminder_proposer_seconder_mail_view.html',user=userData,encrypt_user_id=encrypt_user_id,society=society,societyData=societyData,reference_user_uuid=reference_user_uuid,mail_content=mail_content,subject=subject,society_id=society_id,society_key=society_key)
@app.route('/reminder_proposer_seconder_mail/<user_uuid>/<reference_user_uuid>/<society_id>/<society_key>',methods=["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ReminderProposerSeconderMail(user_uuid,reference_user_uuid,society_id,society_key):
societyData = Auth.getSociety(society_id)
user_reference = Reference().usp_get_reference_v1(user_uuid,reference_user_uuid)
user_profile = user_reference[0]
full_name = user_profile['user_prefix']+user_profile['user_name'] if user_profile['user_prefix'] else user_profile['user_name']
template_name = "bo_prosec_mail"
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
sub_data = {'full_name' : full_name,'society_name' : societyData['society_intial']}
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail'],
'society_full_form' : societyData['society_title'],
'base_url' : Helper.base_url()
}
subject = Helper.merge_tags(mailData.subject,sub_data)
if request.method == "POST":
email = request.form['sample_email']
subject = "SAMPLE : " + subject
flash("Successfully sent sample mail","successMsg")
else:
email = user_profile['refer_email']
flash("Successfully sent mail","successMsg")
m_data ={
'mail_content': mailData.mail_content,
'userData' : user_profile,
'society' : society
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('back_office/email/bo_mail_template.html',mail_content=mail_content,societyData=societyData)
EMAIL.sendMail(subject,html,email,mailData,societyData)
return redirect(url_for('backoffice.ReminderProposerSeconderMailView',user_uuid=user_profile['user_uuid'],reference_user_uuid=user_profile['refer_uuid'],society_id=society_id,society_key=society_key))
@app.route('post_payment_check/<society_id>/<society_key>/<unique_id>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def PostPaymentCheck(society_id,society_key,unique_id):
user_payment = UserPayment().get_payment_unique(society_id,unique_id)
# print(user_payment)
from_date = user_payment['created_at']
to_date = user_payment['created_at']
api_payment_id = Society().society_application(society_id)
am_id = api_payment_id['paymentgateway_appmaster_id']
params_1 = "order_no="+unique_id+""
if int(society_id) in [18]:
if society_id and int(society_id) == 18:
url = "https://ksos.in/paymentapi_mem/status_api_new_ksos_mem_2.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 :
pg_fullname = response_data["order_bill_name"]
pg_unique_id = response_data["order_no"]
pg_email = response_data["order_bill_email"]
pg_mobile = response_data["order_bill_tel"]
pg_amount = response_data["order_amt"]
pg_status = response_data["order_status"]
pg_payment_id = response_data["reference_no"]
pg_created_at = response_data["order_status_date_time"]
pg_mode = response_data["order_card_name"]
data = {
'fullname' : pg_fullname,
'unique_id' : pg_unique_id,
'email' : pg_email,
'mobile' : pg_mobile,
'amount' : pg_amount,
'status' : pg_status,
'payment_id' : pg_payment_id,
'created_at' : pg_created_at,
'payment_mode' : pg_mode
}
msg = "success"
status = 1
else:
status = 3
msg = "Records does not match with payment gateway."
else:
msg = "Record Not Found in payment gateway"
status = 2
elif int(society_id) in [1,17]:
url_1 = "https://conf-payments.numerotech.com/payumoney_trans.php?am_id="+str(am_id)+"&unique_id="+unique_id+"&from_date="+str(from_date)+"&to_date="+str(to_date)+""
# print(url_1)
response = requests.get(url_1)
response = response.text
result = response
res = json.loads(result)
if res:
result_status = res["status"]
result_msg = res["msg"]
payment_data = res["Transaction_details"]
if result_status == 1:
for index,value in enumerate(payment_data):
pg_unique_id = value["udf2"]
if pg_unique_id and pg_unique_id == unique_id :
pg_status = value["status"]
if pg_status == "null" or not pg_status :
pg_status = value["action"]
pg_amount = value["amount"]
pg_created_at = value["addedon"]
pg_payment_id = value["id"]
pg_mode = value["mode"]
pg_fullname = value["firstname"]
pg_email = value["email"]
pg_mobile = value["phone"]
if pg_status and pg_status == "SUCCESS":
pg_status = "success"
else:
pg_status = pg_status
data = {
'fullname' : pg_fullname,
'unique_id' : pg_unique_id,
'email' : pg_email,
'mobile' : pg_mobile,
'amount' : pg_amount,
'status' : pg_status,
'payment_id' : pg_payment_id,
'created_at' : pg_created_at,
'payment_mode' : pg_mode
}
msg = "success"
status = 1
break
else :
status = 3
msg = "Records does not match with payment gateway."
else :
status = 4
msg = result_msg
else:
msg = "Record Not Found in payment gateway"
status = 2
else:
status = 5
msg = "NO Data"
if status == 1:
return render_template('back_office/bo_payment_generate.html',data=data,user=user_payment,society_id=society_id,society_key=society_key)
else:
flash(msg,"errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
@app.route('make_payment_success/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MakePaymentSuccess(society_id,society_key):
unique_id = request.values['unique_id']
api_payment_id = request.values['payment_id']
payment_method = request.values['payment_mode']
paid_on = request.values['created_at']
amount = request.values['amount']
data = {
'api_payment_id':api_payment_id,
'payment_method':payment_method,
'paid_at':paid_on,
'amount':amount,
'status':"success",
'remarks': society_key + " membership registration"
}
UserPayment().updatePayment(unique_id,data)
flash("Updated successfully","successMsg")
return redirect(url_for('backoffice.PaymentVerification',society_id=society_id,society_key=society_key))
@app.route('/payment_verification/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def PaymentVerification(society_id,society_key):
cur_date_time = datetime.now()
cur_date_time_plus = cur_date_time-timedelta(hours=3)
app_type = Helper.AppType
payment_verification_data = UserPayment().get_payment_verification_data(society_id,app_type)
if payment_verification_data == None:
flash("No data","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
else:
return render_template('back_office/bo_payment_verification.html',data=payment_verification_data,society_id=society_id,society_key=society_key)
@app.route('/view_verification/<user_id>/<payment_id>/<int:status_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ViewVerification(user_id,payment_id,status_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
user = Users().get_member(user_id)
payment = UserPayment().get_payment(payment_id)
return render_template('back_office/bo_view_payment_verification.html',payment=payment,user=user,society_id=society_id,society_key=society_key)
@app.route('payment_status/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def PaymentStatus(society_id,society_key):
PaymentStatus = request.values['PaymentStatus']
payment_id = request.values['payment_id']
api_payment_id = request.values['api_payment_id']
payment_method = request.values['payment_method']
paid_on = request.values['paid_on']
amount = request.values.get('amount')
unique_id = request.values.get('unique_id')
remark = request.values['remark']
app_type = Helper.AppType
if PaymentStatus == '1':
remark = request.values['reject_remark']
data = {'status':"rejected",'remarks':remark}
UserPayment().updatePayment(unique_id,data)
flash("Rejected successfully","errorMsg")
else:
data = {'api_payment_id':api_payment_id,'payment_method':payment_method,'paid_at':paid_on,'amount':amount,'status':"success",'remarks':remark}
UserPayment().updatePayment(unique_id,data)
flash("Updated successfully","successMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
# @app.route('payment_rejected/<society_id>/<society_key>', methods = ["GET","POST"])
# def PaymentRejected(society_id,society_key):
# payment_id = request.values['payment_id']
# unique_id = request.values.get('unique_id')
# app_type = Helper.AppType
# data = {'status':"rejected"}
# output = UserPayment().updatePayment(unique_id,data)
# html_data = render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
# data1={'msg':'Rejected successfully','status':1}
# return json.dumps(data1)
@app.route('/state/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def State(society_id,society_key):
country_id = request.values['country_id']
data = States().get_states_of_india(country_id)
return json.dumps(data)
@app.route('/new_member/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def NewMember(society_id,society_key):
data = {
'created_at' : datetime.now(),
'status_id' : 0,
'society_id' : society_id,
'choosed_member_type_id' : 1
}
user_id = Users().insert_member(data)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return redirect (url_for('backoffice.getMemberEdit',user_id=encrypt_user_id,society_id=society_id,society_key=society_key))
@app.route('/member_edit/<user_id>/<society_id>/<society_key>',methods = ["GET"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def getMemberEdit(user_id,society_id,society_key,user = None):
user_additional = None
societyData = Auth.getSociety(society_id)
user_id = unquote(user_id)
try:
user_id = int(Cryptography.decrypt(user_id))
except:
flash("Invalid URL","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
if user_id==0:
# TO DO :-
# insert new user and redirect to again this page
return render_template('back_office/member_edit.html')
else:
is_payment = 0
is_membership = 1
payment_types = MPaymentType().get_all_payment_type(is_membership,society_id)
states = States().get_states()
districts = States().get_districts()
countries = Countries().get_countries()
country_id = societyData['default_country_id']
states_of_india = States().get_states_of_india(country_id)
work_types = MWorkType().get_work_type(society_id)
datas = MAttachmentType().get_image(user_id,is_payment,society_id)
is_payment = 1
image = MAttachmentType().get_image(user_id,is_payment,society_id)
member_types = MMemberType().count_get_member_registrations(society_id)
member_type = MMemberType().get_member_type_approved(society_id)
current_status = MStatus().get_currentstatus(society_id)
position_types = MWorkType().get_position_type(society_id)
if user is None:
userss = Users().AllUserData(user_id)
for index,value in enumerate(userss) :
if index == 0 :
user_profile = value[0]
user_payment_method = value[0]['payment_method']
if user_payment_method is None:
user_pay_method = None
else:
user_pay_method = urllib.parse.unquote(user_payment_method)
encrypt_user_id = Cryptography.encrypt(int(user_id))
if index == 8 :
if value:
user_additional = value[0] if value else None
return render_template('back_office/member_edit.html',states=states,district=districts,countries=countries,states_of_india=states_of_india,user=user_profile,work_types=work_types,position_types=position_types,datas=datas,image=image,payment_content=payment_types,user_pay_method=user_pay_method,member_types=member_types,member_type=member_type,encrypt_user_id=encrypt_user_id,society_id=society_id,society_key=society_key,societyData=societyData,current_status=current_status,user_additional=user_additional)
else:
user_profile = user
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/member_edit.html',states=states,district=districts,countries=countries,states_of_india=states_of_india,user=user_profile,work_types=work_types,position_types=position_types,datas=datas,payment_content=payment_types,image=image,member_types=member_types,member_type=member_type,encrypt_user_id=encrypt_user_id,society_id=society_id,society_key=society_key,societyData=societyData,current_status=current_status)
@app.route('/member_edit/<user_id>/<society_id>/<society_key>', methods = ["POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def postMemberEdit(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
if request.method == "POST":
name = request.values.get('name') or None
prefix = request.values.get('prefix') or None
email = request.values.get('email') or None
mobile = request.values.get('mobile') or None
gender = request.values.get('gender') or None
whatsapp_number = request.values.get('whatsapp_number') or None
aadhaar_number = request.values.get('aadhaar_number',None) or None
aios_membership_number = request.values.get('aios_membership_number',None) or None
address_1 = request.values.get('address_1') or None
address_2 = request.values.get('address_2') or None
address_3 = request.values.get('address_3') or None
district = request.values.get('district') or None
other_districts = request.values.get("other_district") if district == "Others" else None
city = request.values.get('city') or None
pincode = request.values.get('pincode') or None
country = request.values.get('country',None)
state = request.values.get('state',None)
gov_proof_type = request.values.get('gov_proof_type') or None
gov_proof_id = request.values.get('gov_proof_id') or None
hos_address1 = request.values.get('hos_address1') or None
hos_address2 = request.values.get('hos_address2') or None
hos_address3 = request.values.get('hos_address3') or None
mc_number = request.values.get('mc_number') or None
mc_state = request.values.get('mc_state') or None
is_pg = request.values.get('is_pg') or None
status_id = request.values.get('status_id',0)
pay_method = request.values.get('payment_method',None)
payment_remarks = request.values.get('payment_remarks') or None
dob = request.values.get('dob') or None
member_type_id = request.values.get('member_type') or 2
utr_number = request.values.get('utr_number') or None
payment_id = request.values.get('payment_id',0)
remarks = request.values.get('remarks') or None
is_life_member = request.values.get('is_life_member') or None
place = request.values.get('place') or None
institution = request.values.get('fellowship_institution') or None
start_date = request.values.get('start_date') or None
end_date = request.values.get('end_date') or None
type_of_practice = request.form.getlist('type_of_practice')
practice_percentage = request.form.getlist('practice_percentage')
type_of_practice_str = ', '.join(type_of_practice)
practice_percentage_str = ', '.join(practice_percentage)
if dob:
try:
dob = datetime.strptime(dob, '%d-%m-%Y')
except Exception as e:
dob = None
else:
dob = None
if pay_method is None:
payment_method = None
else:
payment_method = urllib.parse.unquote(pay_method)
is_valid = True
member_types_data = MMemberType().count_get_member_registrations(society_id)
if len(member_types_data) > 1:
choosed_member_type_id = request.values.get('member_type') or None
else:
member_types = member_types_data[0]
choosed_member_type_id = member_types['member_type_id']
data = {
'user_id' : user_id,
'full_name' : name,
'prefix' : prefix,
'email' : email,
'mobile' : mobile,
'dob' : dob,
'gender' : gender,
'whatsapp_number' : whatsapp_number,
'aadhaar_number' : aadhaar_number,
'aios_membership_number' : aios_membership_number,
'address1' : address_1,
'address2' : address_2,
'address3' : address_3,
'district' : district,
'other_districts' : other_districts,
'city' : city,
'pincode' : pincode,
'country_id' : int(country) if country else None,
'state_id' : int(state) if state else None,
'gov_proof_type' : gov_proof_type,
'gov_proof_id' : gov_proof_id,
'hos_address1' : hos_address1,
'hos_address2' : hos_address2,
'hos_address3' : hos_address3,
'mc_number' : mc_number,
'mc_state_id' : mc_state,
'is_pg' : is_pg,
'status_id' : status_id,
'type_of_practice' : type_of_practice_str,
'practice_consists_percentage' : practice_percentage_str,
'updated_at' : datetime.now()
}
data_1 = {
'payment_method' : payment_method,
'utr_number' : utr_number
}
if status_id==14:
data['member_type_id'] = member_type_id
# if status_id!=14:
# data['choosed_member_type_id'] = member_type_id
if (int(payment_id) > 0) :
paymentData = { 'utr_number' : utr_number,'updated_at':datetime.now()}
UserPayment().update_payments_data(payment_id,user_id,paymentData)
else :
pass
datas = dict(data, **data_1)
_blank = "_blank"
if email:
check_email = Users().check_email(email,society_id)
if check_email:
if (int(check_email.user_id) != user_id):
e_user_id = check_email.user_id
encrypt_user_id = Cryptography.encrypt(int(e_user_id))
link = url_for('backoffice.ViewExistingMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key)
flash("Email Already Exists with us.We cannot use same account,<a href ="+link+" target="+_blank+" > View that Member</a>","errorMsg")
is_valid = False
if mobile:
check_mobile = Users().check_mobile(user_id,mobile,society_id)
if check_mobile:
m_user_id = check_mobile.user_id
encrypt_user_id = Cryptography.encrypt(int(m_user_id))
link = url_for('backoffice.ViewExistingMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key)
flash("Mobile Number Already Exists with us.We cannot use same number, <a href ="+link+" target="+_blank+"> View that Member</a>","errorMsg")
is_valid = False
if whatsapp_number is not None:
check_whatsapp = Users().check_whatsapp(user_id,whatsapp_number,society_id)
if check_whatsapp:
w_user_id = check_whatsapp.user_id
encrypt_user_id = Cryptography.encrypt(int(w_user_id))
link = url_for('backoffice.ViewExistingMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key)
flash("WhatsApp Number Already Exists with us.We cannot use same number, <a href ="+link+" target="+_blank+"> View that Member</a>","errorMsg")
is_valid = False
userData = Users().get_member(user_id)
if payment_method:
if payment_method == 'Online Payment':
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/bo_online_payment.html',encrypt_user_id=encrypt_user_id,society_id=society_id,society_key=society_key,userData=userData)
else:
is_upload = 1
image = MAttachmentType().get_payment_image(user_id,is_upload,society_id)
required_at = []
for d in image :
if d['attach_file_name'] == None and d['is_upload'] == 1:
required_at.append(d['attach_type'])
if len(required_at) > 0:
msg = "Please upload the proof of payment before proceeding further"
flash(msg,"errorMsg")
is_valid = False
if is_life_member:
additional_data = {
'user_id' : user_id,
'is_any_fellowship' : is_life_member,
'any_fellowship_place_training' : place,
'fellowship_start_date' : start_date,
'fellowship_end_date' : end_date,
'institution' : institution,
'created_at' : datetime.now(),
'updated_at' : datetime.now(),
}
update_or_insert = UserQualification().update_or_insert_user_additional(user_id,additional_data)
if is_valid:
if payment_method:
memberData = MMemberType().usp_get_member_display_name(user_id,society_id)
member_type = memberData[0]
now = datetime.now()
payment_data = {
'user_id' : user_id,
'society_id' : society_id,
'currency' : member_type['currency'],
'payment_method' : "BO - "+payment_method,
'payment_for' : societyData['society_intial']+" Membership",
'remarks' : payment_remarks,
'unique_id' : now.strftime('%Y%m%d%H%M%S%f'),
'status' : "success",
'amount' : member_type['amount'],
'created_at' : datetime.now(),
'updated_at' : datetime.now(),
'paid_at' : datetime.now(),
'app_type' : Helper.AppType,
'utr_number' : utr_number
}
UserPayment().insert_bopaymentdata(payment_data)
if remarks is not None :
if int(status_id) == societyData['ms_rejected_status_id']:
next_reminder_date = datetime.now()+timedelta(days=3)
datas = {'user_id':user_id,'society_id':society_id,'status_id':status_id,'member_type_id':member_type_id,'remarks':remarks,'created_at':datetime.now(),'next_reminder_date':next_reminder_date}
else:
datas = {'user_id':user_id,'society_id':society_id,'status_id':status_id,'member_type_id':member_type_id,'remarks':remarks,'created_at':datetime.now()}
UserStatusLogs().insert_status(datas)
else:
pass
if int(member_type_id) != 2 and int(status_id) == societyData['ms_approved_status_id'] and userData.membership_no is None:
Users().usp_generate_membership_number(user_id,member_type_id,society_id)
else:
pass
Users().update_member(user_id,data)
flash("Successfully!...Updated","successMsg")
encrypt_user_id = Cryptography.encrypt(int(user_id))
return redirect (url_for('backoffice.getMemberEdit',user_id=encrypt_user_id,society_id=society_id,society_key=society_key))
else:
encrypt_user_id = Cryptography.encrypt(int(user_id))
return getMemberEdit(encrypt_user_id,society_id,society_key,data)
else:
flash("Please, Try again.","errorMsg")
return redirect (url_for('backoffice.getLogin',society_id=society_id,society_key=society_key))
# sivabalan
# for TNASI adding new members
@app.route('/insert_new_member/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def InsertNewMember(society_id,society_key):
data = {
'created_at' : datetime.now(),
'status_id' : 0,
'society_id' : society_id,
'choosed_member_type_id' : 1
}
user_id = Users().insert_member(data)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return redirect (url_for('backoffice.AddNewMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key))
@app.route('/add_new_member/<user_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def AddNewMember(user_id,society_id,society_key,user = None):
societyData = Auth.getSociety(society_id)
user_id = unquote(user_id)
try:
user_id = int(Cryptography.decrypt(user_id))
except:
flash("Invalid URL","errorMsg")
return render_template('back_office/bo_add_new_member.html',society_id=society_id,society_key=society_key)
if user_id==0:
# TO DO :-
# insert new user and redirect to again this page
return render_template('back_office/member_edit.html')
else:
member_types = MMemberType().count_get_member_registrations(society_id)
states = States().get_states()
districts = States().get_districts()
countries = Countries().get_countries()
is_payment = 0
datas = MAttachmentType().get_image(user_id,is_payment,society_id)
if user is None:
userss = Users().AllUserData(user_id)
for index,value in enumerate(userss) :
if index == 0 :
user_profile = value[0]
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/bo_add_new_member.html',states=states,district=districts,countries=countries,society_id=society_id,society_key=society_key,user=user_profile,member_types=member_types,encrypt_user_id=encrypt_user_id,datas=datas)
else:
user_profile = user
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/bo_add_new_member.html',states=states,district=districts,countries=countries,society_id=society_id,society_key=society_key,user=user_profile,member_types=member_types,encrypt_user_id=encrypt_user_id,datas=datas)
@app.route('/post_add_new_member/<user_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def PostAddNewMember(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
if request.method == "POST":
name = request.values.get('name') or None
prefix = request.values.get('prefix') or None
member_type = request.values.get('member_type')
membership_no = request.values.get('membership_no')
email = request.values.get('email') or None
mobile = request.values.get('mobile') or None
gender = request.values.get('gender') or None
whatsapp_number = request.values.get('whatsapp_number') or None
dob = request.values.get('dob') or None
district = request.values.get('district') or None
other_districts = request.values.get("other_district") if district == "Others" else None
city = request.values.get('city') or None
pincode = request.values.get('pincode') or None
country = request.values.get('country',None)
state = request.values.get('state',None)
if dob:
try:
dob = datetime.strptime(dob, '%d-%m-%Y')
except Exception as e:
dob = None
else:
dob = None
data = {
'user_id' : user_id,
'full_name' : name,
'prefix' : prefix,
'email' : email,
'member_type_id' : member_type,
'choosed_member_type_id' : member_type,
'membership_no' : membership_no,
'membership_no_only' : membership_no,
'mobile' : mobile,
'dob' : dob,
'gender' : gender,
'whatsapp_number' : whatsapp_number,
'district' : district,
'other_districts' : other_districts,
'city' : city,
'pincode' : pincode,
'country_id' : int(country) if country else None,
'state_id' : int(state) if state else None,
'society_id' : society_id,
'status_id' : 14
}
_blank = "_blank"
is_valid = True
if email:
check_email = Users().check_email(email,society_id)
if check_email:
if (int(check_email.user_id) != user_id):
e_user_id = check_email.user_id
encrypt_user_id = Cryptography.encrypt(int(e_user_id))
link = url_for('backoffice.ViewExistingMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key)
flash("Email Already Exists with us.We cannot use same account,<a href ="+link+" target="+_blank+" > View that Member</a>","errorMsg")
is_valid = False
if mobile:
check_mobile = Users().check_mobile(user_id,mobile,society_id)
if check_mobile:
m_user_id = check_mobile.user_id
encrypt_user_id = Cryptography.encrypt(int(m_user_id))
link = url_for('backoffice.ViewExistingMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key)
flash("Mobile Number Already Exists with us.We cannot use same number, <a href ="+link+" target="+_blank+"> View that Member</a>","errorMsg")
is_valid = False
if whatsapp_number is not None:
check_whatsapp = Users().check_whatsapp(user_id,whatsapp_number,society_id)
if check_whatsapp:
w_user_id = check_whatsapp.user_id
encrypt_user_id = Cryptography.encrypt(int(w_user_id))
link = url_for('backoffice.ViewExistingMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key)
flash("WhatsApp Number Already Exists with us.We cannot use same number, <a href ="+link+" target="+_blank+"> View that Member</a>","errorMsg")
is_valid = False
if membership_no:
check_membership_no = Users().check_membership_no(user_id,membership_no,society_id)
if check_membership_no:
m_user_id = check_membership_no.user_id
encrypt_user_id = Cryptography.encrypt(int(m_user_id))
link = url_for('backoffice.ViewExistingMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key)
flash("Membership Number Already Exists with us.We cannot use same number, <a href ="+link+" target="+_blank+"> View that Member</a>","errorMsg")
is_valid = False
if is_valid:
Users().update_member(user_id,data)
flash("Successfully!...updated","successMsg")
encrypt_user_id = Cryptography.encrypt(int(user_id))
return redirect (url_for('backoffice.AddNewMember',user_id=encrypt_user_id,society_id=society_id,society_key=society_key))
else:
encrypt_user_id = Cryptography.encrypt(int(user_id))
return AddNewMember(encrypt_user_id,society_id,society_key,data)
return redirect (url_for('backoffice.AddNewMember',society_id=society_id,society_key=society_key))
@app.route('/payment_content/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def PaymentContent(society_id,society_key):
payment_type = request.values['payment_method']
is_membership = 1
datas = MPaymentType().get_payment_content(payment_type,is_membership,society_id)
data = datas['payment_content']
return data
@app.route('/approved/<user_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def Approved(user_id,society_id,society_key):
member_type_id = request.values.get('m_member_types')
societyData = Auth.getSociety(society_id)
if societyData['member_approve_type'] == "before payment":
userData = {'member_type_id':member_type_id,'updated_at': datetime.now()}
Users().update_member(user_id,userData)
data = {'msg':'success'}
else:
membership_nos = Users().usp_generate_membership_number(user_id,member_type_id,society_id)
userData = membership_nos[0]
data = {'membership_no':userData['membership_no'],'msg':'Membership Number generated'}
json_data = json.dumps(data)
return json_data
@app.route('/insert_qualification/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def InsertQualification(society_id,society_key):
if request.method == "POST":
user_id = request.form['user_id']
uq_id = request.form['uq_id']
qualification = request.form['qualification']
year_from = request.form['year_from']
year_passing = request.form['year_passing']
institution = request.form['institution']
data={
'user_id' : user_id,
'uq_id' : uq_id,
'qualification' : qualification,
'year_from' : year_from,
'year_passing' : year_passing,
'institution' : institution,
'created_at' : datetime.now(),
'updated_at' : datetime.now()
}
update_or_insert = UserQualification().update_or_insert(user_id,uq_id,data)
return render_template('back_office/bo_qualification_table.html',qul_data=update_or_insert,society_id=society_id,society_key=society_key)
@app.route('/get_qualifications_by_user/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def get_qualifications_by_user(society_id,society_key):
user_id = request.values['user_id']
data = UserQualification().get_qulification_by_user(user_id)
return render_template('back_office/bo_qualification_table.html',qul_data=data,society_id=society_id,society_key=society_key)
@app.route('/get_qualification/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def get_qualification(society_id,society_key):
uq_id = request.form['uq_id']
data = UserQualification().get_qualification(uq_id)
return json.dumps(data)
@app.route('/delete_qualification/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def delete_qualification(society_id,society_key):
uq_id = request.form['uq_id']
user_id = request.form['user_id']
UserQualification().delete_qualification(uq_id)
data = UserQualification().get_qulification_by_user(user_id)
return render_template('back_office/bo_qualification_table.html',qul_data=data,society_id=society_id,society_key=society_key)
@app.route('/insert_work/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def InsertWork(society_id,society_key):
if request.method == "POST":
work_id = request.form['work_id']
user_id = request.form['user_id']
work_type_id = request.form['work_type_id']
position_type_id= request.values.get('position_type_id') or None
work_status = request.form['work_status']
work_since = request.form['work_since']
work_until = request.form['work_until']
work_place = request.form['work_place']
data = {
'work_id' : work_id,
'user_id' : user_id,
'work_type_id' : work_type_id,
'position_type_id':position_type_id,
'work_status' : work_status,
'work_since' : work_since,
'work_until' : work_until,
'work_place' : work_place,
'created_at' : datetime.now(),
'updated_at' : datetime.now(),
}
work_data = UserWork().update_or_insert_work(user_id,work_id,data)
return render_template('back_office/bo_work_table.html',wrk_data = work_data,society_id=society_id,society_key=society_key)
@app.route('/get_work_by_user/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def get_work_by_user(society_id,society_key):
user_id = request.values["user_id"]
data = MWorkType().get_work_type_by_user(user_id)
return render_template('back_office/bo_work_table.html',wrk_data = data,society_id=society_id,society_key=society_key)
#edit work
@app.route('/get_work/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def get_work(society_id,society_key):
work_id = request.values['work_id']
data = UserWork().get_work(work_id)
return json.dumps(data)
@app.route('/delete_work/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def delete_work(society_id,society_key):
work_id = request.form['work_id']
user_id = request.form['user_id']
UserWork().delete_work(work_id)
data = MWorkType().get_work_type_by_user(user_id)
return render_template('back_office/bo_work_table.html',wrk_data = data,society_id=society_id,society_key=society_key)
@app.route('/insert_publication/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def InsertPublication(society_id,society_key):
if request.method == "POST":
publication_id = request.form['publication_id']
user_id = request.form['user_id']
author_type = request.form['author_type']
author_description = request.form['author_description']
data = {
'publication_id' : publication_id,
'user_id' : user_id,
'author_type' : author_type,
'author_description' : author_description,
'created_at' : datetime.now(),
'updated_at' : datetime.now(),
}
publication_data = Userpublication().update_or_insert_publication(user_id,publication_id,data)
return render_template('back_office/bo_publication_table.html',data = publication_data,society_id=society_id,society_key=society_key)
@app.route('/get_publication_by_user/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def get_publication_by_user(society_id,society_key):
user_id = request.values["user_id"]
data = Userpublication().get_publication_by_user(user_id)
return render_template('back_office/bo_publication_table.html',data = data,society_id=society_id,society_key=society_key)
#edit work
@app.route('/get_publication/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def get_publication(society_id,society_key):
publication_id = request.values['publication_id']
data = Userpublication().get_publication(publication_id)
return json.dumps(data)
@app.route('/delete_publication/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def delete_publication(society_id,society_key):
publication_id = request.form['publication_id']
user_id = request.form['user_id']
Userpublication().delete_publication(publication_id)
data = Userpublication().get_publication_by_user(user_id)
return render_template('back_office/bo_publication_table.html',data = data,society_id=society_id,society_key=society_key)
@app.route('/post_amzon_upload/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def PostAmazonUpload(society_id,society_key,acl="public-read"):
if request.method == 'POST':
user_id = request.values.get('user_id')
attach_id = request.values['attach_id']
attach_type_id = request.form['attach_type_id']
societyData = Auth.getSociety(society_id)
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]
datas = MAttachmentType().get_attach_type(attach_type_id)
attach_type = datas['attach_type']
file_str = attach_type+file_extension
if " " in file_str :
file_str = file_str.replace(" ","")
try:
bucket = societyData['aws_bucket']
if bucket == 'common-application':
foldername = str(society_key)+"/user_attachment"
else:
foldername = "user_attachment"
user_id = str(user_id)
response = s3.upload_fileobj(file, bucket,foldername+'/'+user_id+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
data_1 = {'bucketname' : societyData['aws_bucket'],'foldername':foldername,'file_name':file_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1}
file_path = societyData['aws_url']+foldername+"/"+user_id
data = {
'user_id' : user_id,
'attach_type_id' : attach_type_id,
'attach_file_name' : file_str,
'attach_path' : file_path,
'created_at' : datetime.now(),
'updated_at' : datetime.now()
}
if (int(attach_id) > 0):
ua = UserAttachments().get_user_attach(attach_id,attach_type_id)
if ua:
data.pop("created_at")
data = UserAttachments().update_image(attach_id,data)
d = {}
d['attach_id'] = attach_id
data_1.update(d)
else :
attach_id_pk = UserAttachments().insert_image(data)
d = {}
d['attach_id'] = attach_id_pk
data_1.update(d)
return json.dumps(data_1)
except ClientError as e:
logging.error(e)
print(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')
return "success"
@app.route('/delete_amazon_image/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def DeleteAmazonImage(society_id,society_key):
attach_id = request.form['attach_id']
attach_type_id = request.form['attach_type_id']
societyData = Auth.getSociety(society_id)
ua = UserAttachments().get_user_attach(attach_id,attach_type_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(societyData['aws_url'], "")
s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
response = s3.Object(societyData['aws_bucket'], foldername).delete()
UserAttachments().delete_image(attach_id,attach_type_id)
data = {'msg':'Deleted','status' : 1}
json_data = json.dumps(data)
return json_data
@app.route('/search_member/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def search_member(society_id,society_key):
if request.method == 'POST':
search_data = request.form['search_value']
search_data = search_data.strip()
if "-" in search_data:
searchData = search_data.split("-")
searchUser = searchData[0]+"|"+searchData[1]
elif " " in search_data:
searchData = search_data.split(" ")
searchUser = searchData[0]+"|"+searchData[1]
else:
searchUser = search_data
if int(society_id) == 1:
is_prosec = None
else:
is_prosec = 1
type = request.form['type']
members = Users().usp_search_prosec(searchUser,is_prosec,society_id)
if members is None:
msg = "Member Not Found"
return render_template('back_office/bo_prosec_table.html',members = members,type=type,msg=msg,society_id=society_id,society_key=society_key)
else:
return render_template('back_office/bo_prosec_table.html',members = members,type=type,society_id=society_id,society_key=society_key)
# after select proposer and seconder-insert and update in db
# proposer and seconder must not be same
@app.route('/insert_prosec/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def insert_prosec(society_id,society_key):
if request.method == "POST":
isvalid = True
msg = ""
status = 0
reference_id = request.values['reference_id']
user_id = request.form['user_id']
ps_type = request.form['type']
reference_by = request.form['user_id_refer']
data = {
'user_id' : user_id,
'type' : ps_type,
'reference_by' : reference_by,
'created_at' : datetime.now(),
'updated_at' : datetime.now(),
}
if int(reference_by) > 0:
d = Reference().get_reference(user_id,reference_by)
if d:
if (d["type"] != ps_type):
msg = "You can't choose proposer and seconder both same, Please choose diffrent members"
status = 0
isvalid = False
if isvalid == True:
if (int(reference_id) > 0):
data.pop("created_at")
data = Reference().update_prosec(user_id,ps_type,data)
status = 1
else:
Reference().insert_prosec(data)
status = 1
return jsonify(status=status,msg=msg)
# get proposer and seconder to show table after select button
@app.route('/get_prosec/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def get_prosec(society_id,society_key):
ps_type = request.form['type']
reference_by = request.form['user_id_refer']
user_id = request.form['user_id']
members = Reference().usp_get_reference_details(user_id,reference_by,ps_type)
return render_template('back_office/bo_prosec_two_table.html',members=members,ps_type=ps_type,society_id=society_id,society_key=society_key)
# get exist proposer and seconder in db
@app.route('/get_exists_proandsec/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def get_exists_proandsec(society_id,society_key):
status = 0
html = ""
user_id = request.form['user_id']
ps_type = request.form['type']
member = Users().get_already_pro_sec(user_id,ps_type)
if member:
status = 1
html = render_template('back_office/bo_prosec_two_table.html',members = member,ps_type=ps_type,society_id=society_id,society_key=society_key)
return jsonify(status=status,html=html)
# delete proposer and seconder
@app.route('/delete_prosec/<society_id>/<society_key>',methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def Delete_prosec(society_id,society_key):
reference_id = request.values['reference_id']
Reference().delete_prosec(reference_id)
return jsonify(status="success")
@app.route('/prosec_accrej/<int:user_id>/<int:reference_by>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ProsecAccrej(user_id,reference_by,society_id,society_key):
if request.method == "POST":
btn = request.values['reference']
now = datetime.now()
societyData = Auth.getSociety(society_id)
if btn == 'accept':
data_1 = {'approved_on' : now,'updated_at':now}
Reference().update_prosec_acc_rej(user_id,reference_by,data_1)
data = {'msg':'Accepted','status' : 1}
approved_both = Reference().check_accept_both(user_id)
count_approved = approved_both[0]
if int(count_approved == 2) :
if societyData['member_approve_type'] == "before payment":
status = "approved_both_proposer_seconder_waiting_approval_secretariat_without_pay"
else:
status = "approved_both_proposer_seconder"
status_id_1 = MStatus().get_status_id(status,society_id)
status_id = status_id_1.status_id
data = {'status_id':status_id,'updated_at': datetime.now()}
Users().update_member(user_id,data)
json_data = json.dumps(data)
return json_data
else :
json_data = json.dumps(data)
return json_data
else:
data = {'msg':'Rejected','status' : 1}
data_1 = {'rejected_on' : datetime.now(),'updated_at': datetime.now()}
Reference().update_prosec_acc_rej(user_id,reference_by,data_1)
json_data = json.dumps(data)
return json_data
@app.route("/report_export_filter/<society_id>/<society_key>" , methods=['GET','POST'])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ReportExportFilter(society_id,society_key):
society = Auth.checkSocietybyIdKey(society_id,society_key)
export_columns = request.values.getlist('export_columns',None)
if export_columns:
export_column = ("','".join(export_columns))
export_column = "'"+export_column+"'"
else:
export_column = "Null"
export_cols = ExportFilterCols().get_export_columns(society_id) # get all column values
is_export = False
user_id = None
status_id = None
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
search_member_type = request.values.get('search_member_type',None) or None
from_memnos = request.values.get('from_memno',None) or None
end_memnos = request.values.get('end_memno',None) or None
filter_visible = request.values.get('filter_visible',None)
approved_from = request.values.get('approved_from',None) or None
approved_to = request.values.get('approved_to',None) or None
order_type = request.values.get('order_type',"asc") or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
if search_member_type is None:
status_id = 14
if from_memnos:
from_memno = ''.join([i for i in from_memnos if i.isdigit()])
else:
from_memno = None
if end_memnos:
end_memno = ''.join([i for i in end_memnos if i.isdigit()])
else:
end_memno = None
search_data = {
'name' : search_name,
'email' : search_email,
'mobile' : search_mobile,
'member_type' : search_member_type,
'status_id' : status_id,
'from_memno' : from_memno,
'end_memno' : end_memno,
'approved_from' : approved_from,
'approved_to' : approved_to,
'order_type' : order_type,
'sort_by' : sort_by
}
submit_btn = request.values.get('form_submit',None) #Post method block start
if submit_btn == "Clear":
search_data['name'] = None
search_data['email'] = None
search_data['mobile'] = None
search_data['member_type'] = None
search_data['from_memno'] = None
search_data['end_memno'] = None
search_data['export_columns'] = None
page = 1
limit = 500000
if submit_btn == "Export CSV":
page = 1
limit = 500000
is_export = True
offset = int((page-1)*limit)
if search_member_type and int(search_member_type) == 2:
status_id = 10
result = Users().usp_get_incomplete_member(search_name,search_email,search_mobile,status_id,offset,limit,user_id,society_id)
else:
result = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type)
for index,value in enumerate(result) :
if index == 0:
if len(value) == 0:
flash("No Records","errorMsg")
return render_template('back_office/export.html',society_id=society_id,society_key=society_key,search_data=search_data,export_cols=export_cols)
else:
data = value
data_name=[]
for j in data:
data1={}
for row in export_columns:
data1[row]=j[row]
data_name.append(data1)
if is_export == True:
if data:
get_select_columns = ExportFilterCols().get_select_columns(export_column,society_id)
col_name=[]
if get_select_columns:
for j in get_select_columns:
data2=j['cols_display_name']
col_name.append(data2)
return ExportDownloadCSV(data_name,export_columns,col_name,society_key)
else:
flash("No Record Found !..")
member_types = MMemberType().get_all_member_types(society_id)
return render_template('back_office/export.html',user_data= data,search_data=search_data,export_columns = export_columns,export_cols=export_cols,export_column=export_column,society_id=society_id,society_key=society_key,member_types=member_types)
def ExportDownloadCSV(data_name,export_columns,col_name,society_key):
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
output = io.StringIO()
writer = csv.writer(output)
# writer = csv.writer(output,delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMA)
line = col_name
writer.writerow(line)
for row in data_name:
line = []
for i in export_columns:
# print(i)
line.append(row[i])
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+str(society_key)+"_Members_Report"+str(date)+".csv"})
@app.route("/mail_template_index/<society_id>/<society_key>" , methods=['GET','POST'])
def MailTemplateIndex(society_id,society_key):
Auth.checkSocietybyIdKey(society_id,society_key)
templateData = MembershipMailTemplates().get_mail_template_name(society_id)
return render_template('back_office/mail_index.html',templateData=templateData,society_id=society_id,society_key=society_key)
@app.route("/mail_template/<template_name>/<society_id>/<society_key>" , methods=['GET','POST'])
def MailTemplate(template_name,society_id,society_key):
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
is_preview = 0
return render_template('back_office/m_mail_template.html',society_id=society_id,society_key=society_key,mailData=mailData,is_preview=is_preview)
@app.route("/preview_mail/<society_id>/<society_key>" , methods=['GET','POST'])
def PreviewMail(society_id,society_key):
sub_type = request.values.get('sub_type')
subject = request.values.get('subject')
datas = request.values.get('mail_content')
is_layout = request.values.get('is_layout')
if int(is_layout) == 1:
datas = render_template('back_office/email/bo_mail_template.html',mail_content=datas)
else:
pass
datas = {'sub_data':subject,'data':datas,"msg" : "successfully" ,"status" : 1}
json_data = json.dumps(datas,default=str)
return json_data
# @app.route("/preview_mail_1/<society_id>/<society_key>" , methods=['GET','POST'])
# def PreviewMail_1(society_id,society_key):
# sub_type = request.values.get('sub_type')
# if sub_type == "Merge":
# subject = request.values.get('subject')
# sub_datas = request.values.get('sub_data')
# sub_data = json.loads(sub_datas)
# sub_datas = Helper.merge_tags(subject,sub_data)
# else:
# mail_content = request.values.get('subject')
# society = request.values.get('sub_data')
# society = json.loads(society)
# data = {'mail_content':mail_content,'society':society}
# sub_datas = Helper.convert_html_for_mail_screen(data)
# is_type = request.values.get('is_type')
# is_layout = request.values.get('is_layout')
# mail_content = request.values.get('mail_content')
# if is_type == "Merge":
# mail_data = request.values.get('mail_data')
# mail_data = json.loads(mail_data)
# datas = Helper.merge_tags(mail_content,mail_data)
# else:
# society = request.values.get('mail_data')
# society = json.loads(society)
# data = {'mail_content':mail_content,'society':society}
# datas = Helper.convert_html_for_mail_screen(data)
# if int(is_layout) == 1:
# datas = render_template('back_office/email/bo_mail_template.html',mail_content=datas)
# else:
# pass
# datas = {'sub_data':sub_datas,'data':datas,"msg" : "successfully" ,"status" : 1}
# json_data = json.dumps(datas,default=str)
# return json_data
@app.route("/get_preview_mail/<template_name>/<society_id>/<society_key>" , methods=['GET','POST'])
def getPreviewMail(template_name,society_id,society_key):
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
is_preview = 1
datas = render_template('back_office/email/bo_mail_template.html',mail_content=mailData.mail_content)
return render_template('back_office/m_mail_template.html',society_id=society_id,society_key=society_key,mailData=mailData,datas=datas,is_preview=is_preview)
# Sivabalan
# VRSI for changing associate member to life member
# TNOA for changing life member to associate member vice versa
@app.route('/change_member_type/<society_id>/<society_key>',methods=["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ChangeMemberType(society_id,society_key):
user_id = request.values.get('user_id')
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
attach_type_id = request.values.get('type_id') or None
prev_member_type_id = request.values.get('prev_member_type_id') or None
userData = Users().get_member(user_id)
membership_no = userData.membership_no
member_type_id = userData.member_type_id
is_valid = True
mem_no = ""
if int(society_id) == 1 :
userattach = UserAttachments().check_fellowship_certificate(user_id,attach_type_id)
if userattach:
if member_type_id == Helper.AssociateMemberId:
Str = membership_no
l = len(Str)
mem_no = Str[:l-1]
member_type_id = 1
else:
is_valid = False
data = {'msg':'Please upload the file','status' : 0}
# elif int(society_id)==3:
# if member_type_id == Helper.NationalMemberId:
# String = membership_no
# for i in range(0,len(String)):
# if i != 1:
# mem_no = mem_no + String[i]
# member_type_id=1
# elif member_type_id == Helper.LifeMemberId:
# String = membership_no
# for i in range(0,len(String)):
# if i == 1:
# mem_no = mem_no + 'N' + String[i]
# else:
# mem_no = mem_no + String[i]
# member_type_id=17
# else:
# pass
elif int(society_id)==3:
if member_type_id == Helper.NationalMemberId:
Str = membership_no
l = len(Str)
mem_no = Str[:l-1]
member_type_id=1
elif member_type_id == Helper.LifeMemberId:
String = membership_no
mem_no = String + 'N'
member_type_id=17
else:
pass
elif int(society_id)==2:
if member_type_id == Helper.AssociateMemberId:
Str = membership_no
l = len(Str)
mem_no = Str[:l-1]
member_type_id = 1
elif member_type_id == Helper.LifeMemberId:
String = membership_no
mem_no = String + 'A'
member_type_id=6
else:
pass
else:
return "nothing"
if is_valid:
data = {'membership_no':mem_no,'member_type_id':member_type_id,'prev_member_type_id':prev_member_type_id,'updated_at': datetime.now()}
Users().update_member(user_id,data)
userData = Users().get_member(user_id)
status = "Approve"
remarks = "changed_member_type"
user_logs_data = {'society_id':society_id,'user_id' : user_id,'status_id': userData.status_id,'status':status,'member_type_id':userData.member_type_id,'remarks':remarks,'created_at':datetime.now()}
UserStatusLogs().insert_status(user_logs_data)
flash('Updated successfully','successMsg')
data = {'msg':'success','status' : 1}
return json.dumps(data)
@app.route('/view_changes_mail/<user_id>/<society_id>/<society_key>/<is_preview>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ViewChangesMail(user_id,society_id,society_key,is_preview):
template_name = request.values.get("template_name")
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
prev_member_type = request.values.get('prev_member_type')
societyData = Auth.getSociety(society_id)
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
if prev_member_type == None:
prev_member_type = user_profile['prev_member_type']
email = user_profile['email']
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
s_data = {
'mail_content' : mailData.subject,
'userData' : user_profile,
'society' : societyData
}
m_data = {
'prev_member_type':prev_member_type,
'mail_content' : mailData.mail_content,
'userData' : user_profile,
'society' : societyData
}
subject = Helper.convert_html_for_mail_screen(s_data)
mail_content = Helper.convert_html_for_mail_screen(m_data)
if int(is_preview) == 1:
encrypt_user_id = Cryptography.encrypt(int(user_id))
html_data = render_template('back_office/member_type_change_mail_view_v1.html',encrypt_user_id=encrypt_user_id,users=user_profile,mail_content=mail_content,subject=subject,prev_member_type=prev_member_type,society_id=society_id,society_key=society_key,societyData=societyData,template_name=template_name)
data = {'html_data':html_data,'msg':'success','status' : 1}
return json.dumps(data)
else:
html = render_template('back_office/email/bo_mail_template.html',mail_content=mail_content,societyData=societyData)
EMAIL.sendMail(subject,html,email,mailData,societyData)
encrypt_user_id = Cryptography.encrypt(int(user_id))
flash('Mail sent successfully','successMsg')
return redirect(url_for('backoffice.MembersPage',society_id=society_id,society_key=society_key))
@app.route('/send_changes_mail/<prev_member_type>/<user_id>/<society_id>/<society_key>/<template_name>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def SendChangesMail(prev_member_type,user_id,society_id,society_key,template_name):
prev_member_type = urllib.parse.unquote(prev_member_type)
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
email = user_profile['email']
status_id = user_profile['status_id']
# full_name = user_profile['prefix']+user_profile['full_name'] if user_profile['prefix'] else user_profile['full_name']
template_name = template_name
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail']
}
s_data = {
'mail_content': mailData.subject,
'userData' : user_profile,
'society' : society
}
subject = Helper.convert_html_for_mail_screen(s_data)
m_data = {
'prev_member_type':prev_member_type,
'mail_content': mailData.mail_content,
'userData' : user_profile,
'society' : society
}
mail_content = Helper.convert_html_for_mail_screen(m_data)
html = render_template('back_office/email/bo_mail_template.html',mail_content=mail_content,societyData=societyData)
EMAIL.sendMail(subject,html,email,mailData,societyData)
encrypt_user_id = Cryptography.encrypt(int(user_id))
flash('Mail Sent successfully','successMsg')
return redirect(url_for('backoffice.MembersPage',society_id=society_id,society_key=society_key))
################## Ratification year generate ####################
@app.route('/update_ratification_year/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def UpdateRatificationYear(society_id,society_key):
ratification_year = None
membership_no_from = None
membership_no_to = None
is_ratified = None
data = Users().usp_generate_ratification(ratification_year,society_id,membership_no_from,membership_no_to,is_ratified)
for index,value in enumerate(data) :
if index == 1:
last_ratified_number = value[0]['@last_r_mem_no']
last_ratified_year = value[0]['@last_r_year']
if index == 2:
next_ratified_number = value[0]['next_ratifed_number']
if index == 3:
last_membership_number = value[0]['last_membership_number']
if index == 4:
ratification_member_type = value[0]['member_types']
return render_template('back_office/bo_ratification_year_update.html',society_id=society_id,society_key=society_key,last_ratified_number=last_ratified_number,next_ratified_number=next_ratified_number,last_membership_number=last_membership_number,last_ratified_year=last_ratified_year,ratification_member_type=ratification_member_type)
@app.route('/post_update_ratification_year/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def PostUpdateRatificationYear(society_id,society_key):
membership_no_from = request.values.get('membership_no_from')
membership_no_to = request.values.get('membership_no_to')
ratification_year = request.values.get('ratification_year')
is_ratified = request.values.get('is_ratified')
data = Users().usp_generate_ratification(ratification_year,society_id,membership_no_from,membership_no_to,is_ratified)
for index,value in enumerate(data) :
if index == 0:
msg=value[0]
flash_mesg = msg['msg']
flash_color = msg['flash_color']
data = {
'membership_no_from' : membership_no_from,
'membership_no_to' : membership_no_to,
'ratification_year' : ratification_year,
'flash_mesg' : flash_mesg,
'flash_color' : flash_color,
'is_ratified' : is_ratified
}
json_data = json.dumps(data)
return json_data
# in members page - membership approved mail-manually
@app.route('/membership_submission_mail/<user_id>/<society_id>/<society_key>/<is_preview>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MembershipSubmissionMail(user_id,society_id,society_key,is_preview):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
is_test = request.values.get('is_test') or None
societyData = Auth.getSociety(society_id)
userss = Users().AllUserData(user_id)
for index,value in enumerate(userss) :
if index == 0 :
user_profile = value[0]
if index == 1 :
user_qualification = value
if index == 2 :
user_work = value
if index == 3 :
user_attachments = value
if index == 4 :
prosec = value
if index == 5 :
othersociety = value
if index == 6 :
user_training = value
template_name = "reg_success_mail"
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
full_name = user_profile['prefix']+user_profile['full_name'] if user_profile['prefix'] else user_profile['full_name']
sub_data = {'full_name' : full_name,'society_name' : societyData['society_intial']}
subject = Helper.merge_tags(mailData.subject,sub_data)
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail'],
'society_full_form' : societyData['society_title'],
'society_member_link' : societyData['society_url'],
'base_url' : Helper.base_url()
}
data = {
'mail_content' : mailData.mail_content,
'userData' : user_profile,
'qul_data' : user_qualification,
'exp_data' : user_work,
'image' : user_attachments,
'prosec_data' : prosec,
'othersociety_data' : othersociety,
'training_data' : user_training,
'society' : society
}
mail_content = Helper.convert_html_for_mail_screen(data)
html = render_template('back_office/email/bo_mail_template.html',mail_content=mail_content,societyData=societyData)
encrypt_user_id = Cryptography.encrypt(int(user_id))
if int(is_preview) == 1:
return render_template('back_office/membership_submission_mail_view.html',encrypt_user_id=encrypt_user_id,users=user_profile,mail_content=mail_content,subject=subject,society_id=society_id,society_key=society_key,societyData=societyData)
else:
# print(is_test)
if is_test and int(is_test) == 1:
email = request.form['sample_email']
# print(email)
subject = "SAMPLE : " + subject
flash("Successfully sent sample mail","successMsg")
else:
email = user_profile['email']
flash("Successfully sent mail to Applicant","successMsg")
EMAIL.sendMail(subject,html,email,mailData,societyData)
return redirect(url_for('backoffice.WaitingProposerSeconder',society_id=society_id,society_key=society_key))
################## End Ratification year generate ####################
# For sending mail in member page
@app.route('/send_mail_members/<mail_template_id>/<society_id>/<society_key>',methods=["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def SendMailMembers(mail_template_id,society_id,society_key):
user_ids = request.values.get('selected_user_ids',None)
test_mail_id = request.values.get('test_mail_id')
is_test = request.values.get('is_test',None)
is_preview = request.values.get('is_preview',None)
mailData = MembershipMailTemplates().get_mail_template_preview(society_id,mail_template_id)
societyData = Auth.getSociety(society_id)
if int(society_id) == 2 and mailData['template_name'] == "intimation_mail":
member_type_id = 6
userDatas = Users().get_associate_member_data(society_id,member_type_id,user_ids)
for userData in userDatas:
sub_data = {'society_intial':societyData['society_intial']}
subject = Helper.merge_tags(mailData['subject'],sub_data)
mail_data = {
'mail_content': mailData['mail_content'],
'userData' : userData,
'societyData' : societyData
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('back_office/email/bo_mail_template.html',mail_content=mail_content,societyData=societyData)
if is_preview and int(is_preview) == 1:
data = {'html':html}
else:
if is_test and int(is_test) ==1:
email = test_mail_id
else:
email = userData['email']
msg = 'Mail sent successfully'
data = {'msg':msg}
# EMAIL.sendMail(subject,html,email,mailData)
else:
pass
return jsonify(data)
################### Expired Members Start.....###################
@app.route('/expired_members/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ExpiredMembers(society_id,society_key):
societyData = Auth.getSociety(society_id)
max_date = datetime.now()
status_id = societyData['ms_expired_mem_status_id']
btn_page = request.values.get('form_submit',None)
user_id = None
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
search_member_type = request.values.get('search_member_type',None) or None
filter_visible = request.values.get('filter_visible',None)
from_memnos = request.values.get('from_memno',None) or None
end_memnos = request.values.get('end_memno',None) or None
approved_from = request.values.get('approved_from',None) or None
approved_to = request.values.get('approved_to',None) or None
order_type = request.values.get('order_type',"asc") or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
if from_memnos:
from_memno = ''.join([i for i in from_memnos if i.isdigit()])
else:
from_memno = None
if end_memnos:
end_memno = ''.join([i for i in end_memnos if i.isdigit()])
else:
end_memno = None
#passing to tempalte for set filter form values
search_data = {
'name' : search_name,
'email' : search_email,
'mobile' : search_mobile,
'member_type' : search_member_type,
'from_memno' : from_memnos,
'end_memno' : end_memnos,
'approved_from' : approved_from,
'approved_to' : approved_to,
'order_type' : order_type,
'sort_by' : sort_by
}
if btn_page =="Search" :
page = 1
limit = 50
filter_visible = 1
else:
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50))
offset = int((page-1)*limit)
# member_types = MMemberType().get_member_type_approved(society_id)
data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type)
for index,value in enumerate(data) :
if index == 0:
if btn_page == "Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.ExpiredMembers',society_id=society_id,society_key=society_key))
elif len(value) == 0:
flash("There is no terminated members.","errorMsg")
return render_template('back_office/expired_members.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
return render_template('back_office/expired_members.html',user_profile=data,max_date=max_date,offset=offset,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page)
@app.route('/search_member_for_expire/<society_id>/<society_key>', methods = ["GET", "POST"])
def search_member_for_expire(society_id,society_key):
if request.method == 'POST':
search_data = request.form['search_value']
search_data = search_data.strip()
if "-" in search_data:
searchData = search_data.split("-")
searchUser = searchData[0]+"|"+searchData[1]
elif " " in search_data:
searchData = search_data.split(" ")
searchUser = searchData[0]+"|"+searchData[1]
else:
searchUser = search_data
members = Users().usp_search_all_members(searchUser,society_id)
if members is None:
msg = "Member Not Found"
return render_template('back_office/bo_search_members_table.html',members = members,msg=msg,society_id=society_id,society_key=society_key)
else:
return render_template('back_office/bo_search_members_table.html',members = members,society_id=society_id,society_key=society_key)
@app.route('/make_expired/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def MakeExpired(society_id,society_key):
boadmindata = Auth.bouser(society_id)
if boadmindata:
expired_by_user_id = boadmindata['user_id']
expired_by_date = datetime.now()
user_id = request.form['user_id']
remarks = request.form['remarks'] or "Deceased Member"
societyData = Auth.getSociety(society_id)
user_data = Users().get_member(user_id)
prev_member_type_id = user_data.member_type_id
full_name = user_data.full_name
prefix = user_data.prefix
name = prefix + " " + full_name
status_id = societyData['ms_expired_mem_status_id']
member_type_id = Helper.ExpiredMemberId
data={'status_id':status_id, 'member_type_id':member_type_id,'prev_member_type_id':prev_member_type_id,'expired_by_user_id':expired_by_user_id,'expired_by_date':expired_by_date,'expired_remarks':remarks,'updated_at':datetime.now()}
result = Users().update_member(user_id,data)
status = "Deceased Member"
user_logs_data = {'society_id':society_id,'user_id' : user_id,'status_id': status_id,'status':status,'member_type_id':member_type_id,'created_at':datetime.now()}
UserStatusLogs().insert_status(user_logs_data)
flash("Member "+ name +" has been marked as terminated","successMsg")
if result:
msg="success"
status=1
else:
msg="faild"
status=1
return jsonify(status=status,msg=msg)
####################Expired Members End....###################
################### Change associate to Life Member start ###################
@app.route('/waiting_for_life_member_page/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def WatingLifeMembersPage(society_id,society_key):
societyData = Auth.getSociety(society_id)
status_id = societyData['ms_approved_status_id']
btn_page = request.values.get('form_submit',None)
user_id = None
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
search_member_type = request.values.get('search_member_type',None) or None
filter_visible = request.values.get('filter_visible',None)
from_memnos = request.values.get('from_memno',None) or None
end_memnos = request.values.get('end_memno',None) or None
approved_from = request.values.get('approved_from',None) or None
approved_to = request.values.get('approved_to',None) or None
order_type = request.values.get('order_type',"desc") or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
if from_memnos:
from_memno = ''.join([i for i in from_memnos if i.isdigit()])
else:
from_memno = None
if end_memnos:
end_memno = ''.join([i for i in end_memnos if i.isdigit()])
else:
end_memno = None
member_type_id = Helper.AssociateMemberId
attach_type_id = Helper.FellowshipAttachId1.get(society_key,None)
#passing to tempalte for set filter form values
search_data = {
'name' : search_name,
'email' : search_email,
'mobile' : search_mobile,
'member_type' : search_member_type,
'from_memno' : from_memnos,
'end_memno' : end_memnos,
'approved_from' : approved_from,
'approved_to' : approved_to,
'order_type' : order_type,
'sort_by' : sort_by
}
if btn_page =="Search" :
page = 1
limit = 50
filter_visible = 1
else:
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50))
offset = int((page-1)*limit)
data = Users().usp_mem_converting_assmem_lifemem(society_id,member_type_id,attach_type_id,status_id,offset,limit)
for index,value in enumerate(data) :
if index == 0:
if btn_page == "Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.MembersPage',society_id=society_id,society_key=society_key))
elif len(value) == 0:
flash("There is no members awaiting for life member approvel","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(u.user_id)']
member_types = MMemberType().get_member_type_approved(society_id)
return render_template('back_office/bo_approved_awaiting_life_member.html',user_profile=data,offset=offset,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page,member_types=member_types)
@app.route('/view_life_member_verification/<user_id>/<int:status_id>/<society_id>/<society_key>', methods = ["GET"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ViewLifeMemberVerification(user_id,status_id,society_id,society_key):
user_id = unquote(user_id)
try:
user_id = int(Cryptography.decrypt(user_id))
except:
flash("Invalid URL","errorMsg")
return render_template('back_office/display_msg.html',society_id=society_id,society_key=society_key)
societyData = Auth.getSociety(society_id)
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 10)) #default page size 10
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
order_type = request.values.get('order_type',"desc") or None
offset = int((page-1)*limit)
search_member_type = None
from_memno = None
end_memno = None
approved_from = None
approved_to = None
data = Users().usp_get_members(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type)
for index,value in enumerate(data):
if index == 0:
userData = value[0]
if index == 2:
user_profile = value[0]
if index == 3:
user_qualification = value
if index == 4:
user_work = value
if index == 5:
user_attachments = value
if index == 6:
prosec = value
if index == 9:
user_other_society = value
if index == 10:
user_training = value
member_type = MMemberType().get_member_type_approved(society_id)
if int(society_id)==1 or int(society_id) == 9:
attach_type_id = Helper.FellowshipAttachId1.get(society_key,None)
attach_images = MAttachmentType().get_fellowship_attach_id(attach_type_id,user_id,society_id)
else:
attach_images=None
payment_method = user_profile['payment_method']
if payment_method is None:
pay_method = None
else:
pay_method = urllib.parse.unquote(payment_method)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/bo_view_life_member_approvel.html',user_id=user_id,encrypt_user_id=encrypt_user_id,member=userData,datas=user_qualification,data=user_work,user=user_profile,image=user_attachments,prosec_data=prosec,member_type=member_type,pay_method=pay_method,society_id=society_id,society_key=society_key,societyData=societyData,user_other_society=user_other_society,user_training=user_training,attach_images=attach_images)
@app.route('/approved_rejected_life_member/<user_id>/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ApprovedRejectedLifeMember(user_id,society_id,society_key):
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
societyData = Auth.getSociety(society_id)
if request.method == "POST":
status = request.values["approved_rejected"]
remarks = request.values["remarks"]
prev_member_type = request.values["prev_member_type"]
status_db = "Approved. Membership number generated"
status_id_1 = MStatus().get_status_id_from_display_name(status_db,society_id)
status_id = status_id_1['status_id']
if status == "Approve":
userData = Users().get_member(user_id)
membership_no = userData.membership_no
member_type_id = userData.member_type_id
prev_member_type_id = member_type_id
is_valid = True
mem_no = ""
if member_type_id == Helper.AssociateMemberId:
Str = membership_no
l = len(Str)
membership_no = Str[:l-1]
mem_no=membership_no
member_type_id = 1
data = {'membership_no':mem_no,'member_type_id':member_type_id,'prev_member_type_id':prev_member_type_id,'status_id':status_id,'updated_at': datetime.now()}
Users().update_member(user_id,data)
userData = Users().get_member(user_id)
member_type_id= userData.member_type_id
status_id = userData.status_id
status = "Approve"
remarks = "changed_member_type"
user_logs_data = {'society_id':society_id,'user_id' : user_id,'status_id': status_id,'status':status,'member_type_id':member_type_id,'remarks':remarks,'created_at':datetime.now()}
UserStatusLogs().insert_status(user_logs_data)
flash('Updated successfully','successMsg')
return redirect (url_for('backoffice.ViewApproveChangesMail',user_id=user_id,society_id=society_id,society_key=society_key,prev_member_type=prev_member_type))
elif status == "Delete" :
attach_id = request.form['attach_id']
attach_type_id = request.form['attach_type_id']
societyData = Auth.getSociety(society_id)
ua = UserAttachments().get_user_attach(attach_id,attach_type_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(societyData['aws_url'], "")
s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
response = s3.Object(societyData['aws_bucket'], foldername).delete()
UserAttachments().delete_image(attach_id,attach_type_id)
data = {'msg':'Deleted','status' : 1}
return redirect (url_for('backoffice.WatingLifeMembersPage',society_id=society_id,society_key=society_key))
else:
remarks = remarks
data = {'status_id':status_id,'rejected_for_life_membership':remarks,'updated_at': datetime.now()}
Users().update_member(user_id,data)
attach_type_id = Helper.FellowshipAttachId1.get(society_key,None)
UserAttachments().update_confirm_date(user_id,attach_type_id)
flash('Rejected successfully','successMsg')
return redirect(url_for('backoffice.ViewRejectMail',user_id=user_id,status_id=status_id,society_id=society_id,society_key=society_key,prev_member_type=prev_member_type))
else:
flash("Please, Try again.","errorMsg")
return redirect (url_for('backoffice.getLogin',society_id=society_id,society_key=society_key))
@app.route('/view_approve_changes_mail/<user_id>/<society_id>/<society_key>/<prev_member_type>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ViewApproveChangesMail(user_id,society_id,society_key,prev_member_type):
prev_member_type = unquote(prev_member_type)
user_data = Users().get_member(user_id)
societyData = Auth.getSociety(society_id)
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
template_name = "changed_member_type"
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail']
}
s_data = {
'mail_content' : mailData.subject,
'userData' : user_profile,
'society' : society
}
m_data = {
'mail_content' : mailData.mail_content,
'prev_member_type': prev_member_type,
'userData' : user_profile,
'society' : society
}
subject = Helper.convert_html_for_mail_screen(s_data)
mail_content = Helper.convert_html_for_mail_screen(m_data)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/member_type_change_mail_view.html',encrypt_user_id=encrypt_user_id,users=user_profile,mail_content=mail_content,subject=subject,template_name=template_name,society_id=society_id,society_key=society_key,prev_member_type=prev_member_type,societyData=societyData)
@app.route('/view_reject_mail/<user_id>/<status_id>/<society_id>/<society_key>/<prev_member_type>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ViewRejectMail(user_id,status_id,society_id,society_key,prev_member_type):
user_data = Users().get_member(user_id)
societyData = Auth.getSociety(society_id)
user = Users().usp_approved_mail_data(user_id,society_id)
user_profile = user[0]
template_name = "rejected_change_life_member"
mailData = MembershipMailTemplates().get_mail_template(society_id,template_name)
society = {
'society_id' : society_id,
'society_key' : society_key,
'society_name' : societyData['society_intial'],
'support_mail' : societyData['e_support_mail']
}
s_data = {
'mail_content' : mailData.subject,
'userData' : user_profile,
'society' : society
}
m_data = {
'mail_content' : mailData.mail_content,
'userData' : user_profile,
'society' : society
}
subject = Helper.convert_html_for_mail_screen(s_data)
mail_content = Helper.convert_html_for_mail_screen(m_data)
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('back_office/member_type_change_mail_view.html',encrypt_user_id=encrypt_user_id,users=user_profile,mail_content=mail_content,societyData=societyData,template_name=template_name,subject=subject,society_id=society_id,society_key=society_key,prev_member_type=prev_member_type)
################### Change associate to Life Member end ###################
################### Proposer/seconder Search ---- Start ##################
@app.route('/search_prosec_all/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def SearchProsecAll(society_id,society_key):
societyData = Auth.getSociety(society_id)
return render_template('back_office/bo_search_all_members.html',society_id=society_id,society_key=society_key)
@app.route('/post_search_prosec_all/<society_id>/<society_key>', methods = ["GET", "POST"])
def PostSearchProsecAll(society_id,society_key):
members = None
msg = None
if request.method == 'POST':
search_data = request.values['search_value']
search_data = search_data.strip()
if "-" in search_data:
searchData = search_data.split("-")
searchUser = searchData[0]+"|"+searchData[1]## regex method used for mysql
elif " " in search_data:
searchData = search_data.split(" ")
searchUser = searchData[0]+"|"+searchData[1]## regex method used for mysql
else:
searchUser = search_data
members = Users().ups_search_prosec_for_bo(searchUser,society_id)
if members is None:
msg = "Member Not Found"
return render_template('back_office/bo_search_members_for_prosec.html',members = members,msg=msg,society_id=society_id,society_key=society_key)
@app.route('/view_single_user/<society_id>/<society_key>/<user_id>', methods = ["GET", "POST"])
def ViewSingleUser(society_id,society_key,user_id):
msg = None
get_prosec_data = Reference().get_all_prosec_by_reference(user_id,society_id)
members = get_prosec_data[0]
status = get_prosec_data[1]
get_member = Users().get_member(user_id)
if members is None:
msg = "Record not found for this members"
return render_template('back_office/bo_single_users_prosec_table.html',members = members,status=status,msg=msg,user=get_member,society_id=society_id,society_key=society_key)
@app.route('/view_prosec_status/<society_id>/<society_key>', methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def ViewProsecStatus(society_id,society_key):
dt = datetime.now().date()
msg = None
societyData = Society().getSociety(society_id,society_key)
view_prosec_data = Users().usp_view_prosec_status(society_id)
if view_prosec_data is None:
msg = "Record not found"
return render_template('back_office/email/view_prosec_status.html',view=view_prosec_data,dt=dt,society=societyData,society_id=society_id,society_key=society_key,msg=msg)
####################Proposer/seconder Search ---- end #################
####################Search All Members Non Members ---- start #################
@app.route('/search_all_members_nonmembers/<society_id>/<society_key>', methods = ["GET", "POST"])
def SearchAllMembersNonMembers(society_id,society_key):
societyData = Auth.getSociety(society_id)
member_types = MMemberType().get_all_member_types(society_id)
return render_template('back_office/bo_search_all_members_nonmembers.html',member_types=member_types,society_id=society_id,society_key=society_key)
@app.route('/post_search_all_members_non_members/<society_id>/<society_key>', methods = ["GET", "POST"])
def PostSearchallMembersNonmembers(society_id,society_key):
members = None
msg = None
member_types = None
if request.method == 'POST':
mem_type_id = request.values['search_member_type'] or None
if mem_type_id == "0":
member_types = MMemberType().get_member_type_approved(society_id)
elif mem_type_id == "1":
member_types = MMemberType().get_all_member_types(society_id)
else:
mem_type_id = mem_type_id
if member_types:
member_type_ids=[]
for i in member_types:
member_type_ids.append(i['member_type_id'])
mem_type_id=member_type_ids
mem_type_id = ','.join(str(x) for x in mem_type_id)
else:
pass
search_data = request.values['search_value']
search_data = search_data.strip()
if "-" in search_data:
searchData = search_data.split("-")
searchUser = searchData[0]+"|"+searchData[1]## regex method used for mysql
elif " " in search_data:
searchData = search_data.split(" ")
searchUser = searchData[0]+"|"+searchData[1]## regex method used for mysql
else:
searchUser = search_data
members = Users().ups_search_all_members_nonmembers(searchUser,society_id,mem_type_id)
if members is None:
msg = "Member Not Found"
return render_template('back_office/bo_search_all_members_nonmembers_table.html',members = members,msg=msg,society_id=society_id,society_key=society_key)
####################Search All Members Non Members ---- start #################
@app.route('/dashboard_count/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def DashboardCount(society_id,society_key):
societyData = Auth.getSociety(society_id)
users = Users().usp_dashboard_count(society_id)
total_count = users[0]
member_type_count = users[1]
incomplete_mem = users[2]
waiting_for_approvel = users[3]
waiting_proposer_seconder = users[4]
waiting_for_payment = users[5]
rejected_members = users[6]
non_members = users[7]
ratification = users[8]
total_ratified_count = users[9]
total_non_ratified_count = users[10]
return render_template('back_office/bo_dashboard.html',society_id=society_id,society_key=society_key,total_count=total_count,member_type_count=member_type_count,incomplete_mem=incomplete_mem,waiting_for_approvel=waiting_for_approvel,waiting_proposer_seconder=waiting_proposer_seconder,waiting_for_payment=waiting_for_payment,rejected_members=rejected_members,non_members=non_members,ratification=ratification,total_ratified_count=total_ratified_count,total_non_ratified_count=total_non_ratified_count)
@app.route('/kjo_journal/<society_id>/<society_key>',methods = ["GET", "POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def KJOJournal(society_id,society_key):
societyData = Auth.getSociety(society_id)
status_id = societyData['ms_approved_status_id']
journal_count = Users().get_kjo_count(society_id,status_id)
return render_template('back_office/kjo_journal.html',society_id=society_id,society_key=society_key,journal_count=journal_count)
@app.route('/kjo_journal_table/<society_id>/<society_key>',methods = ["GET", "POST"])
def KJOJournalTable(society_id,society_key):
societyData = Auth.getSociety(society_id)
e_journal_opt_in = request.values.get('e_journal_opt_in',None) or None
status_id = societyData['ms_approved_status_id']
btn_page = request.values.get('export_button',None)
user_id = None
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
filter_visible = request.values.get('filter_visible',None)
from_memnos = request.values.get('from_memno',None) or None
end_memnos = request.values.get('end_memno',None) or None
order_type = request.values.get('order_type',"desc") or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
if from_memnos:
from_memno = ''.join([i for i in from_memnos if i.isdigit()])
else:
from_memno = None
if end_memnos:
end_memno = ''.join([i for i in end_memnos if i.isdigit()])
else:
end_memno = None
#passing to tempalte for set filter form values
search_data = {
'name' : search_name,
'email' : search_email,
'mobile' : search_mobile,
'from_memno' : from_memnos,
'end_memno' : end_memnos,
'order_type' : order_type,
'sort_by' : sort_by
}
is_export = False
if btn_page == "Export Members Records":
is_export = True
page = 1
limit = 5000000
search_name = None
search_email = None
search_mobile = None
search_member_type = None
search_membership_no = None
elif btn_page =="Search" :
page = 1
limit = 2000
filter_visible = 1
else:
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 2000))
offset = int((page-1)*limit)
data = Users().usp_get_kjo_journal(search_name,search_email,search_mobile,status_id,offset,limit,from_memno,end_memno,e_journal_opt_in,society_id,sort_by,order_type)
for index,value in enumerate(data) :
# print(value)
if index == 0:
if btn_page == "Search" and len(value) == 0 :
data_1 = {"status": 2}
elif len(value) == 0:
data_1 = {"status": 2}
else:
data = value
html_data = render_template('back_office/kjo_journal_table.html',user_profile=data,offset=offset,societyData=societyData,page=page,limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page,e_journal_opt_in=e_journal_opt_in)
data_1 = {"status": 1,"html_data":html_data}
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
return json.dumps(data_1)
@app.route('/change_journal_type/<society_id>/<society_key>',methods = ["GET", "POST"])
def ChangeJournalType(society_id,society_key):
user_id = request.values.get('user_id')
update_journal = request.values.get('update_journal')
data_1 = {'e_journal_opt_in':update_journal, 'updated_at': datetime.now()}
Users().update_member(user_id,data_1)
data = {"status": 1}
return json.dumps(data)
################### YOSI Mentors Start.....###################
@app.route('/yosi_mentors/<society_id>/<society_key>', methods = ["GET","POST"])
@RouteGroup.bo_login_required
@RouteGroup.society_required
def YOSIMentors(society_id,society_key):
societyData = Auth.getSociety(society_id)
max_date = datetime.now()
status_id = societyData['ms_approved_status_id']
btn_page = request.values.get('form_submit',None)
user_id = None
search_name = request.values.get('search_name',None) or None
search_email = request.values.get('search_email',None) or None
search_mobile = request.values.get('search_mobile',None) or None
search_member_type = request.values.get('search_member_type',None) or None
filter_visible = request.values.get('filter_visible',None)
from_memnos = request.values.get('from_memno',None) or None
end_memnos = request.values.get('end_memno',None) or None
approved_from = request.values.get('approved_from',None) or None
approved_to = request.values.get('approved_to',None) or None
order_type = request.values.get('order_type',"asc") or None
sort_by = request.values.get('sort_by',"membership_no_only") or None
if from_memnos:
from_memno = ''.join([i for i in from_memnos if i.isdigit()])
else:
from_memno = None
if end_memnos:
end_memno = ''.join([i for i in end_memnos if i.isdigit()])
else:
end_memno = None
#passing to tempalte for set filter form values
search_data = {
'name' : search_name,
'email' : search_email,
'mobile' : search_mobile,
'member_type' : search_member_type,
'from_memno' : from_memnos,
'end_memno' : end_memnos,
'approved_from' : approved_from,
'approved_to' : approved_to,
'order_type' : order_type,
'sort_by' : sort_by
}
if btn_page =="Search" :
page = 1
limit = 50
filter_visible = 1
else:
page = int(request.values.get('page',1)) #default page 1
limit = int(request.values.get('limit', 50))
offset = int((page-1)*limit)
# member_types = MMemberType().get_member_type_approved(society_id)
data = Users().usp_get_yosi_mentors(search_name,search_email,search_mobile,status_id,offset,limit,user_id,search_member_type,from_memno,end_memno,approved_from,approved_to,society_id,sort_by,order_type)
for index,value in enumerate(data) :
if index == 0:
if btn_page == "Search" and len(value) == 0 :
flash("User not found","errorMsg")
return redirect(url_for('backoffice.YOSIMentors',society_id=society_id,society_key=society_key))
elif len(value) == 0:
flash("There is no members age greater than 40.","errorMsg")
return render_template('back_office/yosi_mentors.html',society_id=society_id,society_key=society_key)
else:
data = value
if index == 1 :
total_count = value[0]
total = total_count['count(user_id)']
return render_template('back_office/yosi_mentors.html',user_profile=data,max_date=max_date,offset=offset,page=page,total=int(total),limit=limit,search_data=search_data,filter_visible=filter_visible,society_id=society_id,society_key=society_key,btn_page=btn_page)
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists