Sindbad~EG File Manager
from flask import Flask, request, Blueprint, jsonify,json, redirect, url_for,flash, render_template,session, app,Response,send_file
from core.model.UserModel import UserModel
from core.model.AbstractModel import AbstractModel
from core.model.BoModel import BoModel
from core.library.helper import Helper
from random import randint
import datetime
import time
from core.library.email import EMAIL
from core.library.Xlsexport import XLSEXPORT
from datetime import timedelta,date,datetime
from .. import Cryptography,Auth,RouteGroup,path_wkhtmltopdf,is_windows_os
from urllib.parse import unquote
import ast
from collections import defaultdict
from dateutil.rrule import rrule, DAILY
import urllib.parse
from os import listdir
import io
import csv
from io import StringIO
from io import BytesIO
import xlsxwriter
from xlsxwriter import Workbook
import xlwt
import string
import os
import logging
import flask_excel as excel
from requests.utils import requote_uri
from pydoc import locate
import imp,sys
import base64
from urllib.parse import unquote
import boto3, botocore
from botocore.exceptions import ClientError
from os import listdir
from os.path import join, dirname, realpath
from werkzeug.utils import secure_filename
import pdfkit
import pandas as pd
app = Blueprint('backoffice', __name__)
@app.route('<conf_id>/<conf_key>/bo_at/<uuid>/<timestamp>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def autoLoginFromDashboard(conf_id,conf_key,uuid,timestamp):
timestamp = round(int(timestamp[:-3]))
timestamp = datetime.fromtimestamp(int(timestamp))
if timestamp and (datetime.now() < timestamp):
user_data = UserModel().get_user_data_by_uuid(uuid)
if user_data:
society_id = Auth.get_conference(conf_id).get("society_id")
society = UserModel().get_society(society_id)
email = user_data["email"]
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
user_data["is_admin"] = bo_access["is_admin"]
Auth.login(user_data,society_id)
Auth.society(society,conf_id)
return redirect(url_for("backoffice.bo_dashboard",conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Login',conf_id = conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Login',conf_id = conf_id,conf_key=conf_key))
@app.route('/dashboard/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def bo_dashboard(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
society_id = confData.get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
confe = confData.get('conference_header_logo')
get_abstrcts = BoModel().get_abstract(conf_id)
get_abstract_count = BoModel().get_abstract_count(conf_id,confData.get('conf_schema'))
statistic_data = BoModel().get_statistic_data(conf_id)
role_wise_faculty = statistic_data[0]
submitted_abs = statistic_data[1]
Selected_abs = statistic_data[2]
Podium_count = statistic_data[3]
abstypewise_count = statistic_data[4]
withdraw_count = statistic_data[5]
upload_count = statistic_data[6]
abstypeData = BoModel().get_distinct_all_selectiontype(conf_id,confData.get('conf_schema'))
return render_template('backoffice/dashboard.html',abstracts = get_abstrcts,data=get_abstract_count,confe_logo=confe,conf_id=conf_id,conf_key=conf_key,role_wise_faculty=role_wise_faculty,submitted_abs=submitted_abs,Selected_abs=Selected_abs,Podium_count=Podium_count,abstypewise_count=abstypewise_count,withdraw_count=withdraw_count,abstypeData=abstypeData,upload_count=upload_count)
@app.route('/get_searched_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_searched_data(conf_id,conf_key):
search_text = request.values.get('search_txt') or None
if search_text:
length = len(search_text)
else:
length = 0
abs_types = request.values.get('abs_types') or None
searched_data = BoModel().get_searched_data(search_text,abs_types,conf_id)
if searched_data:
count = len(searched_data)
else:
count = 0
if (length>=3):
html_data = render_template('backoffice/get_search_table.html',data=searched_data,conf_id=conf_id,conf_key=conf_key,count=count)
data = {"html_data" :html_data,"msg" : "success" ,"status" : 1 }
json_data = json.dumps(data,default = str)
return json_data
else:
data = {"html_data" :"","msg" : "fail" ,"status" : 2 }
json_data = json.dumps(data,default = str)
return json_data
@app.route('/report/<string:abs_type>/<status_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def bo_report(abs_type,status_type,conf_id,conf_key):
NULL=None
status_type = int(status_type)
get_abs_details=BoModel().get_abs_details(abs_type,NULL,NULL,NULL,status_type,NULL,conf_id)
data = BoModel().get_status_selection_type_of_presentation_abs_types(conf_id)
status = data[0]
selection = data[1]
presentation = data[2]
abs_types = data[3]
mail_templates = data[4]
awards = AbstractModel().get_abs_award(conf_id,abs_type)
status_type =list(str(status_type))
col_name=BoModel().get_export_cols(conf_id)
categories_data = UserModel().get_categories_v1(abs_type,conf_id)
return render_template ('backoffice/report_table.html',awards=awards,abs_type=abs_type,data=get_abs_details,abs_types=abs_types,status=status,status_type=list(status_type),selection=selection,presentation=presentation,conf_id=conf_id,conf_key=conf_key,col_name=col_name,mail_templates=mail_templates,categories_data=categories_data)
@app.route('/report/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def bo_report_blank(conf_id,conf_key):
data = BoModel().get_status_selection_type_of_presentation_abs_types(conf_id)
status = data[0]
selection = data[1]
presentation = data[2]
abs_types = data[3]
awards = []
mail_templates = data[4]
return render_template ('backoffice/report_table.html',awards=awards,status=status,abs_types=abs_types,selection=selection,presentation=presentation,mail_templates=mail_templates,conf_id=conf_id,conf_key=conf_key)
@app.route('/view/<abs_id>/<inuser_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def bo_View(abs_id,inuser_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data=AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
data1=AbstractModel().get_authors(abs_id,confData.get('conf_schema'))
data2=AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))
abs_uploads = AbstractModel().get_abs_uploads(abs_id)
abs_type = AbstractModel().get_abs_type(abs_id,confData.get('conf_schema'))
abs_type = abs_type["abs_type"]
abs_awards = AbstractModel().get_abs_award_v1(conf_id,abs_type,abs_id)
award_title = {}
awards = {}
abs_parent_ids = []
if abs_awards:
for i in abs_awards:
if i['abs_id']:
abs_parent_ids.append(i['parent_id'])
for item in abs_awards:
if item["is_parent"] == 1:
if item["award_id"] in abs_parent_ids:
award_title[item['award_id']] = item["award_name"]
else:
if item["abs_id"] != None:
awards[item["parent_id"]] = [item] + awards.get(item["parent_id"],[])
if data['abs_type'] == "IC":
duration = AbstractModel().settings(confData.get('society_intial')+"_Duration",conf_id)
return render_template('backoffice/bo_edit/IC_view.html',inuser_id=inuser_id,abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key,duration=duration[0])
elif data['abs_type'] == "GP":
return redirect(url_for('backoffice.View_GP',abs_id=abs_id,conf_id=conf_id,conf_key=conf_key))
try:
if abs_uploads:
return render_template('backoffice/bo_edit/'+conf_key.upper()+'/'+data['abs_type']+'_view.html',inuser_id=inuser_id,abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key,abs_uploads=abs_uploads)
if abs_awards:
return render_template('backoffice/bo_edit/'+conf_key.upper()+'/'+data['abs_type']+'_view.html',inuser_id=inuser_id,abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key,awards=awards,award_title=award_title)
else:
return render_template('backoffice/bo_edit/'+conf_key.upper()+'/'+data['abs_type']+'_view.html',inuser_id=inuser_id,abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key)
except:
return render_template('backoffice/bo_edit/'+conf_key.upper()+'/bo_view.html',inuser_id=inuser_id,abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key)
@app.route('/edit/<abs_id>/<abs_type>/<inuser_id>/<int:conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def edit(abs_id,abs_type,inuser_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
# categories = UserModel().get_categories(abs_type,conf_id)
# if not categories:
society_id = Auth.get_conference(conf_id).get("society_id")
categories = UserModel().get_categories_v1(abs_type,conf_id)
if conf_id==32:
abs_id=int(abs_id)
abs_awards = AbstractModel().get_abs_award_v1(conf_id,abs_type,abs_id)
award_title = {}
awards = {}
for item in abs_awards:
if item["is_parent"] == 1:
award_title[item['award_id']] = item["award_name"]
else:
awards[item["parent_id"]] = awards.get(item["parent_id"],[]) + [item]
else:
abs_awards = UserModel().get_abs_awards(abs_type,conf_id)
awards=None
award_title=None
type_of_presentation = AbstractModel().get_type_of_presentation(conf_id)
uploaded_data = AbstractModel().get_img_upload_by_abs_id(abs_id)
duration = AbstractModel().settings(Auth.get_conference(conf_id).get('society_intial')+"_Duration",conf_id)
img = AbstractModel().get_fulltext_by_abs_id(abs_id,confData.get('conf_schema'))
# img = AbstractModel().get_img_upload(abs_id)
if img:
return render_template('backoffice/bo_edit/'+conf_key.upper()+'/'+abs_type+'_edit.html',inuser_id=inuser_id,abs_id=abs_id,data=data,categories=categories,type_of_presentation=type_of_presentation,conf_id=conf_id,conf_key=conf_key,society_id=society_id,abs_awards=abs_awards,award_title=award_title,awards=awards,img=img,duration=duration[0])
else:
if abs_type == 'GP':
return redirect(url_for("backoffice.Gp_abstract",abs_id=abs_id,conf_id=conf_id,conf_key=conf_key))
else:
return render_template('backoffice/bo_edit/'+conf_key.upper()+'/'+abs_type+'_edit.html',inuser_id=inuser_id,abs_id=abs_id,data=data,categories=categories,type_of_presentation=type_of_presentation,conf_id=conf_id,conf_key=conf_key,society_id=society_id,uploaded_data=uploaded_data,abs_awards=abs_awards,award_title=award_title,awards=awards,duration=duration[0],img=img)
@app.route('/edit/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def post_edit(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
if request.method == "POST":
abs_id = request.values["abs_id"]
try:
int(abs_id)
except ValueError:
abs_id = int(Cryptography.decrypt(abs_id))
inuser_id = request.values.get("inuser_id")
abs_type = request.values.get("abs_type")
if(abs_type == 'IC'):
data = {
'category_id':request.values.get("category"),
'level':request.values.get("level" or ''),
'title':request.values.get("title"),
'synopsis':request.values.get("synopsis"),
'resume':request.values.get("resume"),
}
elif(abs_type in ('EP','OP','VP')):
award_list = request.form.getlist('chk_awards' or None)
insert_and_delete_award(award_list,abs_id)
data={
'category_id' : request.values.get("cat_type"),
'title' : request.values.get("title"),
'synopsis' : request.values.get("synopsis"),
'methods' : request.values.get("methods"),
'results' : request.values.get("results"),
'conclusion' : request.values.get("conclusion" or ''),
'case_report' : request.values.get("Clinical_Implication" or ''),
'misc1' : request.values.get("misc1" or None ),
'misc2' : request.values.get("misc2") or None,
'misc3' : request.values.get("misc3") or None,
'award_id' : request.values.get('award_id') or None,
}
elif(abs_type == 'FP'):
data = {
'category_id' : request.values.get("category"),
'presentation_type_id': request.values.get("presenting_type" or None),
'title' : request.values.get("title"),
'synopsis' : request.values.get("synopsis"),
'purpose' : request.values.get("purpose" or ''),
'methods' : request.values.get("methods" or ''),
'results' : request.values.get("result" or ''),
'conclusion' : request.values.get("conclusion" or ''),
'case_report' : request.values.get("Clinical_Implication" or ''),
'misc1' : request.values.get("misc1") or None,
'misc2' : request.values.get("misc2") or None,
'misc3' : request.values.get("misc3") or None,
'award_id' : request.values.get('abs_awards') or None,
'updated_at' : datetime.now()
}
elif(abs_type == 'PP'):
award_list = request.form.getlist('chk_awards' or None)
insert_and_delete_award(award_list,abs_id)
data={
'presentation_type_id':request.values.get("presenting_type" or ''),
'category_id' :request.values.get("cat_type" or '' ),
'presentation_type_id':request.values.get("presenting_type"),
'title' :request.values.get("title"),
'synopsis' :request.values.get("synopsis" or ''),
'purpose' :request.values.get("purpose" or ''),
'methods' :request.values.get("methods" or ''),
'results' :request.values.get("results" or ''),
'conclusion' :request.values.get("conclusion" or ''),
'is_award' :request.values.get("is_award" or ''),
}
elif( abs_type in ('PGPP','SZPGPP')):
award_list = request.form.getlist('chk_awards' or None)
insert_and_delete_award(award_list,abs_id)
data={
'presentation_type_id':request.values.get("presenting_type" or ''),
'category_id' :request.values.get("cat_type" or '' ),
'presentation_type_id':request.values.get("presenting_type"),
'title' :request.values.get("title"),
'synopsis' :request.values.get("synopsis" or ''),
'purpose' :request.values.get("purpose" or ''),
'methods' :request.values.get("methods" or ''),
'results' :request.values.get("results" or ''),
'conclusion' :request.values.get("conclusion" or ''),
'is_award' :request.values.get("is_award" or ''),
}
elif(abs_type == 'VS'):
data = {
'title':request.values.get("title"),
'synopsis':request.values.get("synopsis"),
}
elif(abs_type == 'HT'):
data = {
'title':request.values.get("title"),
'purpose' :request.values.get("purpose" or ''),
'methods' :request.values.get("methods" or ''),
'results' :request.values.get("results" or ''),
}
else:
data = {
'category_id':request.values.get("category"),
'title':request.values.get("title"),
'synopsis':request.values.get("synopsis"),
'is_in_india':request.values.get("in_India"),
'presentation_type_id':request.values.get("presenting_type" or ''),
'is_already_published':request.values.get("is_already_published"),
'purpose' : request.values.get("purpose" or ''),
'methods' : request.values.get("methods" or ''),
'results' : request.values.get("result" or ''),
'conclusion' : request.values.get("conclusion" or ''),
'case_report' : request.values.get("Clinical_Implication" or ''),
'misc1' : request.values.get("misc1") or None,
'misc2' : request.values.get("misc2") or None,
'misc3' : request.values.get("misc3") or None,
}
# print(data)
edittodb=UserModel().update_step(data,abs_id,confData.get('conf_schema'))
return redirect(url_for('backoffice.bo_View',abs_id=abs_id,inuser_id=inuser_id,conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('backoffice.edit',abs_id=abs_id,abs_type=abs_type,inuser_id=inuser_id,conf_id=conf_id,conf_key=conf_key))
@app.route('/add_and_edit_to_authors/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def StepPost_3(conf_id,conf_key):#this will add coinstructor for IC
confData = Auth.get_conference(conf_id)
topic =request.values["topic"]
duration =request.values["duration"]
topic_order =request.values["topic_order"]
user_id =request.values["user_id"]
abs_id =request.values["abs_id"]
abs_id =int(Cryptography.decrypt(abs_id))
topic_id =request.values["topic_id"] or 0
data1={ 'topic':topic,
'duration':duration,
'order_no':topic_order,
'user_id':user_id,
'abs_id':abs_id,
'role_id':33,
}
check_authors_id = AbstractModel().check_authors_id_by_abs_id(abs_id,confData.get('conf_schema'))#checking the authors id for insert in database
if check_authors_id == 0 and topic_id == 0 or topic_id == '0':#this will add author if the count for author table is zero
data=AbstractModel().add_to_authors(data1,abs_id,confData.get('conf_schema'))#inserting into data base
return jsonify(status = 0)
total_duration=AbstractModel().authors_total_duration_for_edit(abs_id,topic_id,confData.get('conf_schema'))#getting total duration for inserting the author
if(total_duration == None):
total_duration = 0
total_duration=total_duration+int(duration)
if total_duration <= 75 and topic_id == 0 :
data=AbstractModel().add_to_authors(data1,abs_id,confData.get('conf_schema'))#adding new author
return jsonify(status = 0)
elif total_duration <= 75:
data=AbstractModel().edit_to_authors(data1,topic_id,confData.get('conf_schema'))#editing the existing author
return jsonify(status = 0)
else:
return jsonify(status = 1)
@app.route('/searchinstructor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def SearchInstructor(conf_id,conf_key):
searchtext = request.values["searchtext"]
abs_type = request.values["abs_type"]
btn_val = request.values["btn_val"]
society_id = Auth.get_conference(conf_id).get("society_id")
role_id = 33
data = UserModel().get_search_data(searchtext,role_id,abs_type,society_id,conf_id)#getting search data from DB to step3
if(abs_type == "IC"):
consent_count = 'IC_CONSENT_COUNT'
data1 = AbstractModel().settings(consent_count,conf_id)#get settings for IC councent count
html = render_template('backoffice/bo_edit/search_table.html',data=data,abs_type = abs_type,data1=int(data1[0][0]["setting_value"]))
return jsonify(html)
elif((abs_type == "FP" or abs_type == "GP") and btn_val == "1"):
role_id = 35
setting_key = 'FP_PA_COUNT'
data1 = AbstractModel().settings(setting_key,conf_id)#get settings for FP presenting author count
html = render_template('backoffice/bo_edit/presenting_authour_search_table.html',abs_type = abs_type,data=data,data1=int(data1[0][0]["setting_value"]))
return jsonify(html)
elif(abs_type == "PP" and btn_val == "1"):
role_id = 35
setting_key = 'PP_PA_COUNT'
data1 = AbstractModel().settings(setting_key,conf_id)#get settings for FP presenting author count
html = render_template('backoffice/bo_edit/presenting_authour_search_table.html',abs_type = abs_type,data=data,data1=int(data1[0][0]["setting_value"]))
return jsonify(html)
elif(abs_type == "VS" and btn_val == "1"):
role_id = 35
setting_key = 'VS_PA_COUNT'
data1 = AbstractModel().settings(setting_key,conf_id)#get settings for FP presenting author count
html = render_template('backoffice/bo_edit/presenting_authour_search_table.html',abs_type = abs_type,data=data,data1=int(data1[0][0]["setting_value"]))
return jsonify(html)
elif(btn_val == "1"):
role_id = 35
setting_key = str(abs_type)+'_PA_COUNT'
data1 = AbstractModel().settings(setting_key,conf_id)#get settings for FP presenting author count
html = render_template('backoffice/bo_edit/presenting_authour_search_table.html',abs_type = abs_type,data=data,data1=int(data1[0][0]["setting_value"]))
return jsonify(html)
elif(btn_val=="3"):
role_id=34
setting_key = str(abs_type)+'_PA_COUNT'
data1 = AbstractModel().settings(setting_key,conf_id)
html = render_template('backoffice/bo_edit/chief_author_search_table.html',abs_type = abs_type,data=data,data1=int(data1[0][0]["setting_value"]))
return jsonify(html)
else:
html = render_template('backoffice/bo_edit/co_authour_search_table.html',data=data,abs_type = abs_type)
return jsonify(html)
@app.route('/step3model_presenting_author/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def BO_Step3model_presenting_author(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values["searchvalue"]
abs_type = request.values["abs_type"]
addcoinst = UserModel().get_user_data(user_id)#getting user data
abs_id = request.values["abs_id"]
try:
abs_id = int(abs_id)
except ValueError:
abs_id = int(Cryptography.decrypt(abs_id))
role_id = request.values["role_id"]
if int(role_id) == 34:
data = AbstractModel().update_chief_author(abs_id,user_id,role_id)
return jsonify(addcoinst)
else:
data = AbstractModel().add_to_presenting_author(abs_id,user_id,role_id,confData.get('conf_schema'))#adding presenting author for VT
html = render_template('backoffice/bo_edit/presenting_authour_table.html',data2=addcoinst)
return jsonify(html)
@app.route('/step3model/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Step3model(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values["searchvalue"]
abs_type = request.values["abs_type"]
addcoinst = UserModel().get_user_data(user_id)#getting user data
if(abs_type != "IC"):
abs_id = request.values["abs_id"]
role_id = request.values["role_id"]
try:
int(abs_id)
except ValueError:
abs_id = int(Cryptography.decrypt(abs_id))
# abs_id = int(Cryptography.decrypt(abs_id))
data = AbstractModel().add_to_presenting_author(abs_id,user_id,role_id,confData.get('conf_schema'))#adding presenting author for VT
html = render_template('backoffice/bo_edit/co_athour_table.html',data2=addcoinst)
return jsonify(html)
else:
html = render_template('backoffice/bo_edit/insert_model.html',data=addcoinst,user_id =user_id)
return jsonify(html)
@app.route('/fpstep1getauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Step1_get_author(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
try:
int(abs_id)
except ValueError:
abs_id = int(Cryptography.decrypt(abs_id))
data=AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))#getting the presenting author to show in step1
if(data == []):
data1 = 0
return jsonify(data1)
html = render_template('backoffice/bo_edit/presenting_authour_table.html',data2=data)
return jsonify(html)
@app.route('/step3getauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Step3getauthor(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
try:
int(abs_id)
except ValueError:
abs_id = int(Cryptography.decrypt(abs_id))
abs_type = request.values["abs_type"]
data = AbstractModel().get_authors(abs_id,confData.get('conf_schema'))#geting author to show in step 3 table
panel_discussion = AbstractModel().get_panel_disscussion(abs_id,confData.get('conf_schema'))#geting panel discussion
total_duration = AbstractModel().total_duration_step4(abs_id,confData.get('conf_schema'))#getting total discussion
if(abs_type != "IC" ):
limit_of_authors = AbstractModel().limit_of_authors(abs_id,confData.get('conf_schema'))#geting count of author for co-authorss
settings = AbstractModel().settings(abs_type +"_CA_COUNT",conf_id)
if(limit_of_authors >= int(settings[0][0]["setting_value"])):
limit = 0
else:
limit = 1
html = render_template('backoffice/bo_edit/co_athour_table.html',data=data,limit=limit,abs_type=abs_type)
return jsonify(html)
else:
duration_db = AbstractModel().settings(confData.get('society_name')+"_Duration",conf_id)
html = render_template('backoffice/bo_edit/coi_table.html',data=data,total_duration=total_duration,duration_db=duration_db[0][0]['setting_value'],panel_discussion=panel_discussion,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/step3deleteauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Step3deleteauthor(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
topic_id = request.values["topic_id"]
data = AbstractModel().delete_author_userid(topic_id,confData.get('conf_schema'))#deleting the author
return jsonify()
@app.route('/step3editauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Step3editauthor(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
topic_id = request.values["topic_id"]
data = AbstractModel().get_author_for_edit(topic_id,confData.get('conf_schema'))#geting author information for edit
return render_template('backoffice/bo_edit/insert_model.html',data=data)
@app.route('/total_duration/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Total_duration(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
abs_id = int(Cryptography.decrypt(abs_id))
panel_discussion = int(request.values["panel_discussion"])
duration_model = int(request.values["duration_model"])
confe_name = Auth.get_conference(conf_id).get('society_name')
data = AbstractModel().total_duration(abs_id,panel_discussion,confe_name,conf_id,confData.get('conf_schema'))#getting total duration
data = int(data)+duration_model
return jsonify(data)
@app.route('/category/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_category(conf_id,conf_key):
abs_type = request.values["abs_type"]
data = UserModel().get_categories_v1(abs_type,conf_id)
return jsonify(data)
@app.route('/filter_report/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_filter_report(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get("ddlAbstractType")
category_id = request.values.getlist("ddlCategory")
presentation_type_list = request.form.getlist("ddlpresentation")
selection_type_list = request.form.getlist("ddlselection")
award_list = request.form.getlist("ddlawards")
status = request.values.getlist("ddlstatus")
export_file = request.values.get("export_file") or None
category_id = (','.join(str(e) for e in category_id))
presentation_type = (','.join(str(e) for e in presentation_type_list))
selection_type = (','.join(str(e) for e in selection_type_list))
award_list = (','.join(str(e) for e in award_list))
status_type = (','.join(str(e) for e in status))
col_name=BoModel().get_export_cols(conf_id)
export_columns = request.values.getlist('selected_fields',None)
if export_columns:
export_column = ("','".join(export_columns))
export_column = "'"+export_column+"'"
else:
export_column = "Null"
get_abs_details = BoModel().get_abs_details(abs_type,category_id,presentation_type,selection_type,status_type,award_list,conf_id)
data = BoModel().get_status_selection_type_of_presentation_abs_types(conf_id)
status = data[0]
selection = data[1]
presentation = data[2]
abs_types = data[3]
mail_templates = data[4]
awards = AbstractModel().get_abs_award(conf_id,abs_type)
status_type = status_type.split(",")
selection_type = selection_type.split(",")
if export_file=='csv':
if export_column:
if get_abs_details:
data_name=[]
for j in get_abs_details:
data1={}
for row in export_columns:
if row == 'abs_no':
abs_no=j[row]
data1[row]=j['abs_type']+str(abs_no)
elif row == 'full_name':
full_name=j[row]
data1[row]=j['prefix']+str(full_name)
else:
data1[row]=j[row]
data_name.append(data1)
get_select_columns = BoModel().get_select_columns(export_column,conf_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,conf_key)
else:
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
output = io.StringIO()
writer = csv.writer(output)
line = ['S.No','ABS_No','Title', 'Category', 'Chief Author','Chief Author Membership No' ,'Presenting Author', 'Presenting Author Membership No','Co-Author']
writer.writerow(line)
sno_val = 0
for row in get_abs_details:
sno_val = sno_val +1
abs_no = row['abs_type']+str(row['abs_no'])
chief_author=row['prefix']+row['full_name']
line = [sno_val ,abs_no,row['title'],row['display_name'] ,chief_author, row['membership_no'],row['presenting_authour'],row['presenting_membership_no'],row['co_author']]
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+confData['conf_name']+"Abstract_Submission_Report"+str(date)+".csv"})
if export_file=='xl' :
if export_column:
if get_abs_details:
get_select_columns = BoModel().get_select_columns(export_column,conf_id)
data_name=[]
for j in get_abs_details:
data1={}
for row in export_columns:
if row=='abs_no':
data1[row]=j['abs_type']+str(j[row])
elif row=='full_name':
data1[row]=j['prefix']+str(j[row])
else:
data1[row]=j[row]
data_name.append(data1)
col_name=[]
if get_select_columns:
for j in get_select_columns:
data2=j['cols_display_name']
col_name.append(data2)
return ExportDownloadXSL(data_name,export_columns,col_name,conf_key)
else:
output = io.BytesIO()
Workbook =xlwt.Workbook()
sh = Workbook.add_sheet('get_abs_details')
sh.write(0,0,'Sno')
sh.write(0,1,'Abs_No')
sh.write(0,2,'Title')
sh.write(0,3,'Category')
sh.write(0,4,'Chief Author')
sh.write(0,5,'Chief Author Membership No')
sh.write(0,6,'Presenting Author')
sh.write(0,7,'Presenting Author Membership No')
sh.write(0,8,'Co- Author')
idx=0
sno_val = 0
for data in get_abs_details:
sno_val = sno_val+1
abs_no = data['abs_type']+str(data['abs_no'])
chief_author=data['prefix']+data['full_name']
sh.write(idx+1,0,sno_val)
sh.write(idx+1, 1, abs_no)
sh.write(idx+1, 2, data['title'])
sh.write(idx+1, 3, data['display_name'])
sh.write(idx+1, 4, chief_author)
sh.write(idx+1, 5, data['membership_no'])
sh.write(idx+1, 6, data['presenting_authour'])
sh.write(idx+1, 7, data['presenting_membership_no'])
sh.write(idx+1, 8, data['co_author'])
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+confData['conf_name']+"Abstract_Submission_Report-"+str(date)+".xls"})
categories_data = UserModel().get_categories_v1(abs_type,conf_id)
return render_template ('backoffice/report_table.html',category_id=category_id,presentation_type=presentation_type,selection_type=selection_type,status_type=status_type,abs_type=abs_type,data=get_abs_details,abs_types=abs_types,status=status,selection=selection,presentation=presentation,awards=awards,mail_templates=mail_templates,conf_id=conf_id,conf_key=conf_key,col_name=col_name,categories_data=categories_data)
def ExportDownloadCSV(data_name,export_columns,col_name,conf_key):
conf_id = request.values["conf_id"]
confData = Auth.get_conference(conf_id)
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:
line.append(row[i])
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+confData['conf_name']+"_Abstract_Submission_Report"+str(date)+".csv"})
def ExportDownloadXSL(data_name,export_columns,col_name,conf_key):
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
output = io.BytesIO()
Workbook = xlwt.Workbook()
sh = Workbook.add_sheet('Report')
idx = 0
a = 0
for row in col_name:
sh.write(0,a,row)
a+=1
b=0
sno_val = 0
for row in data_name:
for i in export_columns:
sh.write(idx+1, b, row[i])
b+=1
b=0
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+str(conf_key)+"_Abstract_Submission_Report_"+str(date)+".xls"})
@app.route('/date_config/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_Date_config(conf_id,conf_key):
confe = Auth.get_conference(conf_id).get('conference_header_logo')
data = BoModel().get_date_config(conf_id)
now = (datetime.now())
return render_template('backoffice/settings/date_config.html',data=data,confe_logo=confe,now=now,conf_id=conf_id,conf_key=conf_key)
@app.route('/config_edit_model/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_config_model(conf_id,conf_key):
config_id = request.values["config_id"]
data = BoModel().get_config_id(config_id)
html = render_template('backoffice/settings/date_config_edit.html',data=data[0],conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/post_config_edit_model/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_post_Date_config(conf_id,conf_key):
config_id = request.values["config_id"]
start_date = request.values["start_date"]
end_date = request.values["end_date"]
title = request.values.get("title" or None)
description = request.values["description"]
abs_type_url = request.values["abs_type_url"]
abs_description = request.values["abs_description"]
is_visible = request.values.get("is_visible" or 0)
order_by = request.values["order_by"]
data = {
'start_date' : start_date,
'end_date' : end_date,
'title' : title,
'description' : description,
'abs_type_url' : abs_type_url,
'abs_description': abs_description,
'is_visible' : is_visible,
'order_by' : order_by,
'updated_at' : str(datetime.now())
}
result = BoModel().sent_config(config_id,data)
return redirect(url_for('backoffice.Bo_Date_config',conf_id=conf_id,conf_key=conf_key))
@app.route('/setting_config/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_setting_config(conf_id,conf_key):
confe = Auth.get_conference(conf_id).get('conference_header_logo')
data = BoModel().get_setting_config(conf_id)
return render_template('backoffice/settings/project_edit.html',data=data,confe_logo=confe,conf_id=conf_id,conf_key=conf_key)
@app.route('/project_edit_model/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_project_setting_edit(conf_id,conf_key):
setting_id = request.values["setting_id"]
data = BoModel().get_setting_id(setting_id)
html = render_template('backoffice/settings/project_edit_model.html',data=data[0],conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/post_project_edit_model/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_post_project_config(conf_id,conf_key):
setting_id = request.values["setting_id"]
count = request.values.get("count")
data = {
'setting_value' : count,
}
result = BoModel().sent_project_config(setting_id,data)
return redirect(url_for('backoffice.Bo_setting_config',conf_id=conf_id,conf_key=conf_key))
# ------------- Evaluation Assign ------------------ #
@app.route('/evaluation_assign/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_Assign_val(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_types = BoModel().get_abs_type_for_eva(conf_id,confData.get('conf_schema'))
eva_abs_types = BoModel().get_eva_abs_type_for_eva(conf_id)
return render_template('backoffice/val/Assign_eva.html',abs_types=abs_types,conf_id=conf_id,conf_key=conf_key,eva_abs_types=eva_abs_types)
@app.route('/eva_category/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Eva_Category(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get('abs_type')
if abs_type:
categories = BoModel().get_categories_for_eva(abs_type,conf_id,confData.get('conf_schema'))
else:
categories = []
return jsonify(categories)
@app.route('/get_evaluation_type/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_evaluation_type(conf_id,conf_key):
abs_type = request.values.get('abs_type')
eva_abs_types = BoModel().get_eva_abs_type_for_eva_v1(abs_type,conf_id)
return jsonify(eva_abs_types)
@app.route('/eva_category_status/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Eva_Category_status(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get('abs_type')
categories = BoModel().get_categories_for_eva(abs_type,conf_id,confData.get('conf_schema'))
return jsonify(categories)
@app.route('/view_eva_type/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def View_eva_type(conf_id,conf_key):
abs_type = request.values.get('eva_abs_type')
data = BoModel().get_abstract_typebyabstype(conf_id,abs_type)
data['d_start_date'] = data['start_date'].strftime('%Y-%m-%dT%H:%M') if data['start_date'] else None
data['d_end_date'] = data['end_date'].strftime('%Y-%m-%dT%H:%M') if data['end_date'] else None
return jsonify(data)
@app.route('/search_evaluator/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Search_Evaluator(conf_id,conf_key):
searchtext = request.values["searchvalue"]
data = BoModel().get_search(searchtext,conf_id)#getting search data from DB to step3
html = render_template('backoffice/val/eval_assign_search_table.html',data=data)
return jsonify(html)
@app.route('/add_eval_assign/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Add_Eval_assign(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get('abs_type')
cat_id = request.values.get('cat_id')
eval_id = request.values.get('eval_id')
eva_abs_type = request.values.get('ddlevatype')
abs_nos = request.values.get('abs_nos')
add_evaluator = BoModel().get_abs_for_eval(abs_type,cat_id,eval_id,eva_abs_type,abs_nos,conf_id,confData['conf_schema'])
return jsonify()
@app.route('/get_eva_assign_paper/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_eva_assign_paper(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get('abs_type')
eva_abs_type = request.values.get('eva_abs_type')
cat_type_id = request.values.get('cat_id')
get_details = BoModel().get_eva_by_catid(abs_type,cat_type_id,eva_abs_type,conf_id,confData['conf_schema'])
html = render_template('backoffice/val/eval_assign_table.html',data=get_details,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/remove_evaluator/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Remove_Evaluator(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values.get('user_id')
eva_abs_type = request.values.get('eva_abs_type')
delete_eva = BoModel().delete_evaluator(user_id,eva_abs_type,conf_id,confData['conf_schema'])
return jsonify()
@app.route('/add-evaluation-type/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Addevaluationtype(conf_id,conf_key):
eva_type = request.form['eva_abs_type']
title = request.form['abs_title']
start_date = request.form['eva_start_date']
end_date = request.form['eva_end_date']
is_visible = request.values.get('eva_is_visible') or 0
button_name = request.values.get('eva_button_val')
abs_type_id = request.form['eva_abs_id']
data = {
'abs_type':eva_type,
'title':title,
'start_date':start_date,
'end_date':end_date,
'is_visible':is_visible,
'button_name':button_name,
'conf_id':conf_id
}
result = BoModel().Add_eva_abstract_type(data,abs_type_id)
return "success"
@app.route('/delete_eva_abs/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Delete_eva_abs(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
mark_id= request.values.get('mark_id')
delete_eva = BoModel().delete_eva_abs(mark_id,confData.get('conf_schema'))
return jsonify()
@app.route('/view_evaluation/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def View_Evaluation(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
abs_types = BoModel().get_abs_type_for_eva(conf_id,conf_data.get('conf_schema'))
data = {}
total_report={}
abs_type = request.values.get('ddlAbstractType') or None
eva_abs_type = request.values.get('ddlevaAbstractType') or None
cat_id = request.values.get('ddlCategory') or None
if cat_id == "None":
cat_id = None
percent_filter_start = request.values.get('p_f_start') or 0
percent_filter_end = request.values.get('p_f_end') or 100
p_r_type = request.values.get('p_r_type') or 1
order_by = request.values.get('order_by') or "DESC"
if abs_type and eva_abs_type:
data = BoModel().get_evaluators(eva_abs_type,cat_id,conf_id,percent_filter_start,percent_filter_end,order_by)
total_report = data[1]
data = data[0]
output = io.StringIO()
writer = csv.writer(output)
is_download = request.values.get('is_download')
if data and int(is_download) == 1:
hline = list(data[0].keys())
writer.writerow(hline)
for i in data:
line = []
for j in hline:
line.append(i[j])
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+str(conf_data["conf_key"])+abs_type+"_status_report.csv"})
return render_template('backoffice/val/view_eval_index.html',abs_types=abs_types,eva_abs_type=eva_abs_type,conf_id=conf_id,conf_key=conf_key,data=data,abs_type=abs_type,cat_id=cat_id,p_r_type=p_r_type,p_f_end=percent_filter_end,p_f_start=percent_filter_start,order_by=order_by,total_report=total_report)
@app.route('/eva_view/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Eval_view(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get('abs_type')
cat_type_id = request.values.get('cat_id')
user_id = request.values.get('user_id')
get_details = BoModel().get_eva_by_user_id(abs_type,cat_type_id,user_id,conf_id,confData.get('conf_schema'))
return render_template('backoffice/val/view_eval.html',data=get_details,conf_id=conf_id,conf_key=conf_key)
@app.route('/regen_eval_assign/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Regen_evaluator(conf_id,conf_key):
abs_type = request.values.get('abs_type')
cat_id = request.values.get('cat_id')
regen_eval = BoModel().Regen_evaluator_by_id(abs_type,cat_id,conf_id)
return jsonify()
@app.route('/find_evaluator/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Find_Evaluator(conf_id,conf_key):
host_url = request.host_url
abs_type = request.values.get('abs_type') or ''
p_r_type = request.values.get('p_r_type') or 0
eva_abs_types = BoModel().get_eva_abs_type_for_eva(conf_id)
result = BoModel().get_evaluators_seach(conf_id,conf_key,host_url,abs_type)
return render_template('backoffice/val/find_evaluator.html',data=result,conf_id=conf_id,conf_key=conf_key,eva_abs_types=eva_abs_types,p_r_type=p_r_type)
#------------------------------------ Mukesh mail evaluation reminder mail function -----------------------------------------------------------------#
@app.route('/mail_eva_reminder/<btn_val>/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def mail_eva_reminder(btn_val,abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
template_name = abs_type+'_eva_reminder_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
if not mailData:
data = {'msg':'Mail template Not Found'}
return jsonify(data)
sub_data = {'conf_name': confData['conf_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
checkbox = request.form.getlist('to_mail')
user_ids = ",".join(checkbox)
if user_ids :
mail_ids = BoModel().get_evaluators_mail(user_ids,abs_type,conf_id,confData.get('conf_schema'))
if int(btn_val) == 0 :
for i in mail_ids:
mail_data = {'mail_content': mailData.mail_content,'data': i,'confData':confData}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
to = i["email"]
EMAIL.sendMail_v1(subject,html,to,mailData,conf_id)
data = {'msg':'Mail sent successfully'}
return jsonify(data)
else: #test mail
email = request.values["test_mail_id"]
for i in mail_ids:
mail_data = {'mail_content': mailData.mail_content,'data': i,'confData':confData}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
to = email
EMAIL.sendMail_v1(subject,html,to,mailData,conf_id)
data = {'msg':'Test mail sent successfully'}
return jsonify(data)
return jsonify(1)
#------------------------------------ Priyavarthana mail evalution invite function using get mail content from database ----------------------------------#
@app.route('/mail_eva/<btn_val>/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Mail_Eva(btn_val,abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
template_name = abs_type+'_eva_invite_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
if not mailData:
data = {'msg':'Mail template Not Found'}
return jsonify(data)
checkbox = request.form.getlist('to_mail')
user_ids = ",".join(checkbox)
if user_ids :
mail_ids = BoModel().get_evaluators_mail(user_ids,abs_type,conf_id,confData.get('conf_schema'))
if int(btn_val) == 0 :
for i in mail_ids:
sub_data = {'conf_name': confData['conf_name'],'eva_name':i['evaluator_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
mail_data = {'mail_content': mailData.mail_content,'data': i,'confData':confData}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
to = i["email"]
EMAIL.sendMail_v1(subject,html,to,mailData,conf_id)
data = {'msg':'Mail sent successfully'}
return jsonify(data)
else: #test mail
email = request.values["test_mail_id"]
for i in mail_ids:
sub_data = {'conf_name': confData['conf_name'],'eva_name':i['evaluator_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
mail_data = {'mail_content': mailData.mail_content,'data': i,'confData':confData}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
to = email
EMAIL.sendMail_v1(subject,html,to,mailData,conf_id)
data = {'msg':'Test mail sent successfully'}
return jsonify(data)
return jsonify(1)
@app.route('/abs_selection/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Abs_Selection(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_types = BoModel().get_abs_type_for_eva(conf_id,confData.get('conf_schema'))
abs_type = "OP"
selection_type = BoModel().get_selection_type(abs_type)
if request.method == "POST":
abs_type = request.values['ddlAbstractType']or None
eva_abs_type = request.values['ddlevaAbstractType']or None
cat_id = request.values['ddlCategory']or None
export_file = request.values["export_file"] or None
if export_file == "xl":
cat_id = None
data = BoModel().get_evaluation_summary_data(eva_abs_type,conf_id,cat_id)
for index,value in enumerate(data) :
if index == 0:
data_1 = value
if index == 1:
data_2 = value
if index == 2:
evaluator = value
abs_eval_marks = {}
if data_2:
for m in data_2:
mkey = f"{m.get('abs_id')}-{m.get('eva_user_id')}"
abs_eval_marks[mkey] = {'abs_id':m.get('abs_jd') ,'marks_total':m.get('marks_total')}
count_data = BoModel().get_selection_count(cat_id,abs_type,conf_id,confData.get('conf_schema'))
fp_count_data = BoModel().get_count_by_selection_type(conf_id,cat_id,abs_type,confData.get('conf_schema'))
return render_template('backoffice/selection/abs_selection.html',abs_types=abs_types,conf_id=conf_id,conf_key=conf_key,data_1=data_1,abs_type=abs_type,cat_id=cat_id,evaluator=evaluator,data_2=data_2,eva_abs_type=eva_abs_type,abs_eval_marks=abs_eval_marks,count_data=count_data,selection_type=selection_type,fp_count_data=fp_count_data)
return render_template('backoffice/selection/abs_selection.html',abs_types=abs_types,selection_type=selection_type,conf_id=conf_id,conf_key=conf_key)
@app.route('/get_other_ic_selected_by_user/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def getothericseleted(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values.get('user_id')
abs_type = request.values.get('abs_type')
abs_id = request.values.get('abs_id')
abs_data = BoModel().get_other_id_selected_by_user(conf_id,user_id,abs_type,confData.get('conf_schema'))
return render_template('backoffice/selection/other_ic_abs_table.html',conf_id=conf_id,conf_key=conf_key,abs_data=abs_data,abs_type=abs_type,abs_id=abs_id)
@app.route('/get_selection_paper/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_selection_paper(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get('abs_type')
cat_type_id = request.values.get('cat_id')
conf_id = request.values.get('conf_id')
get_details = BoModel().get_paper_for_selection(abs_type,cat_type_id,conf_id,confData.get('conf_schema'))
html = render_template('backoffice/selection/selection_tabel.html',data=get_details)
return jsonify(html)
@app.route('/select_paper/<btn_val>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def select_paper(btn_val,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
selection_id = request.values.get('selection_type_id') or 0
checkbox = request.form.getlist('select')
abs_ids = ",".join(checkbox)
abs_status_id = 2
if btn_val == "0" :
abs_status_id = 3
if abs_ids :
BoModel().update_status_to_selected(abs_ids,abs_status_id,selection_id,confData.get('conf_schema'))
status=1
else:
status=2
return jsonify(status)
# ------------------------------------------------------------------------ #
# IC Consent status #
@app.route('/abstract/consent/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Consent_status(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
btn_val = request.form.get("btn_val" or None)
if btn_val:
consent_status_id = request.form.get("consent_status_id" or None)
abs_no = request.values.get("abs_no" or None)
data = BoModel().get_consent_status_data(abs_no,consent_status_id,confData['conf_schema'])
return render_template('backoffice/abstract/consent_status.html',data = data,abs_no = abs_no,consent_status_id = consent_status_id,conf_id=conf_id,conf_key=conf_key)
return render_template('backoffice/abstract/consent_status.html',conf_id=conf_id,conf_key=conf_key)
@app.route('/abstract/verify/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Verify_IC(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
categories = BoModel().get_categories_for_verify(abs_type,confData['conf_schema'])
cat_with_abs = BoModel().get_category_with_abstract(confData['conf_schema'],abs_type)
cat_abs = defaultdict(list)
for r in cat_with_abs:
cat_abs[r["parent_category_id"]].append(r)
return render_template('backoffice/abstract/verify.html',categories = categories,data=cat_abs)
# Priyavarthana for sending reminder mail for video and eposter not received
@app.route('/abstract/cdstatus/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def CDstatus(abs_type,conf_id,conf_key):
data = BoModel().get_status_selection_type_of_presentation_abs_types(conf_id)
status = data[0]
datas = BoModel().usp_abs_files_received_status(conf_id,None)
confData = Auth.get_conference(conf_id)
return render_template('backoffice/abstract/vtcdstatus.html',conf_id=conf_id,conf_key=conf_key,abs_type=abs_type,status=status,datas=datas,confData=confData)
@app.route('/abstract/get_absnotype/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def GetAbsNoType(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values["abs_type"]
data = BoModel().getAbsNosType(abs_type,conf_id,confData['conf_schema'])
return jsonify(data)
@app.route('/get_all_attachement_abstract/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def GetAllAttachmentAbstract(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abstractData = BoModel().get_category_with_abstract(abs_type,conf_id,confData['conf_schema'])
html = render_template('backoffice/abstract/cdstatus_table.html',data=abstractData,conf_id=conf_id,conf_key=conf_key,abs_type=abs_type)
return jsonify(html)
@app.route('/get_abstract_for_cdstatus/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def GetAbstractForCDStatus(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
cd_status_id = request.values.get('vt_status') or None
abs_status_id = request.values.get('abs_status_id') or None
cat_with_abs = BoModel().get_abstract_received_notreceived(abs_status_id,cd_status_id,abs_type,conf_id,confData['conf_schema'])
html = render_template('backoffice/abstract/cdstatus_table.html',data=cat_with_abs,conf_id=conf_id,conf_key=conf_key,abs_type=abs_type)
return jsonify(html)
# end
@app.route('/export_received_attachment/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def ExportReceivedAttachment(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
cd_status_id = request.values.get('vt_status') or None
abs_status_id = request.values.get('abs_status_id') or None
cat_with_abs = BoModel().get_abstract_received_notreceived(abs_status_id,cd_status_id,abs_type,conf_id,confData['conf_schema'])
output = io.BytesIO()
Workbook =xlwt.Workbook()
col_name = ["Abs no","Title","Presenting Author Name","Presenting Author Email","Presenting Author Mobile","Category","Received At"]
export_columns = ["abss_type","title","presenting_author","email","mobile","display_name","cd_received_at"]
sheet_name = "reports"
sh = Workbook.add_sheet(sheet_name)
idx = 0
a = 0
sh.row(0).height = 20*30
# t_style=xlwt.easyxf('alignment: wrap True;''pattern: pattern solid,fore_colour yellow;' 'font: colour black, bold True, name Calibri, height 230; align: vert centre, horiz centre;border: left thin,right thin,top thin,bottom thin')
data_name=[]
if cat_with_abs:
for j in cat_with_abs:
data1={}
for row in export_columns:
data1[row]=j[row]
data_name.append(data1)
for row in col_name:
sh.write(0,a,row)
a+=1
b=0
for row in data_name:
for i in export_columns:
# sh.write(idx+1, b, b)
sh.write(idx+1, b, row[i])
b+=1
b=0
idx+=1
# print(output)
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
# print(output)
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+str(conf_key)+"_Abstract_Submission_Report_"+str(date)+".xls"})
return None
@app.route('/abstract/mail_cdstatus/<btn_val>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Mail_cddtatus(btn_val,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
checkbox = request.values.getlist('chk_send_reminder')
cd_status_id = request.values.get('vt_status') or None
abs_status_id = request.values.get('abs_status_id') or None
if checkbox:
for j in checkbox:
data = AbstractModel().get_sept4_data(j,confData.get('conf_schema'))
if int(btn_val) == 0:
email = data["email"]
# email = "mukeshkumar@numerotec.com"
msg = 'Mail sent successfully'
else:
email = request.values["test_mail_id"]
msg = 'Test mail sent successfully'
template_name = "attachment_reminder_mail"
mailData = UserModel().get_mail_templates(template_name,conf_id)
sub_data = {'abs_type':data['abs_type'],'abs_no':str(data['abs_no']),'title':str(data['title'])}
subject = Helper.merge_tags(mailData.subject,sub_data)
mail_data = {
'mail_content': mailData.mail_content,
'data' : data,
'confData' : confData
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
data = {'msg':msg}
return jsonify(data)
else:
return jsonify(1)
@app.route('/post_received_at/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Post_CD_received_at(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
cd_received_at = request.values.get("cd_received_at" or None)
abs_id = request.values.getlist("abs_id" or None)
abs_type = request.values.get('abs_type' or None)
abs_status_id = request.values.get('abs_status_id') or None
is_today = request.values.get('is_today')
if int(is_today) == 1:
cd_received_at = datetime.now()
data = {
'cd_received_at' :cd_received_at,
'updated_at' : datetime.now()
}
update = BoModel().update_abstracts(abs_id,data,confData.get('conf_schema'))
cd_status_id = request.values.get('vt_status') or None
cat_with_abs = BoModel().get_abstract_received_notreceived(abs_status_id,cd_status_id,abs_type,conf_id,confData['conf_schema'])
html = render_template('backoffice/abstract/cdstatus_table.html',data=cat_with_abs,conf_id=conf_id,conf_key=conf_key,abs_type=abs_type)
return jsonify(html)
@app.route('/post_bulk_received_at/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Post_Bulk_received_at(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
cd_received_at = request.values.get("cd_received_at" or None)
abs_ids = request.form.getlist("abs_ids")
data = {
'cd_received_at' :cd_received_at,
'updated_at' : datetime.now()
}
if abs_ids and cd_received_at :
update = BoModel().update_abstracts(abs_ids,data,confData.get('conf_schema'))
cd_status_id = request.values.get('vt_status_m') or None
abs_status_id = request.values.get('abs_status_id_m') or None
cat_with_abs = BoModel().get_abstract_received_notreceived(abs_status_id,cd_status_id,abs_type,conf_id,confData['conf_schema'])
html = render_template('backoffice/abstract/cdstatus_table.html',data=cat_with_abs,conf_id=conf_id,conf_key=conf_key,abs_type=abs_type)
return jsonify(html)
else:
return jsonify(1)
#------------- mail template edit --------
@app.route('/mail_template/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Mail_template(conf_id,conf_key):
data = BoModel().get_templates_data(conf_id)
return render_template('backoffice/settings/template_edit.html',data = data,conf_id=conf_id,conf_key=conf_key)
@app.route('/template_edit_model/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Template_edit_model(conf_id,conf_key):
template_id = request.values.get("template_id" or None )
# temp = Helper.convert_jinja_template(data1,data)
data = BoModel().get_template_data(template_id)
html = render_template('backoffice/settings/template_edit_model.html',data = data,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/post_mail_template_edit/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Bo_post_template_config(conf_id,conf_key):
template_id = request.values.get("template_id" or None)
data = {
'subject' : request.values.get("subject" or None),
'template_data' :request.values.get("template_data" or None),
}
update = BoModel().update_mail_template(data,template_id)
return redirect(url_for("backoffice.Mail_template",conf_id=conf_id,conf_key=conf_key))
#---------------------------------------
@app.route('/abstract/hallassignment/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Hall_Assignment(conf_id,conf_key):
is_program_sheet = request.values.get("is_program_sheet") or 0
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
halls = BoModel().get_halls(conf_id)
abs_types = BoModel().get_abs_type(conf_id);
selection_type = BoModel().get_selection_type('abs_type')
if int(is_program_sheet) == 1:
return render_template('backoffice/program_sheet/hallassignment.html',halls=halls,conf_id=conf_id,conf_key=conf_key,abs_types=abs_types,selection_type=selection_type)
else:
return render_template('backoffice/abstract/hallassignment.html',halls=halls,conf_id=conf_id,conf_key=conf_key,abs_types=abs_types,selection_type=selection_type)
@app.route('/ajax/get_sessions/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_sessions(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get("abs_type" or None)
session_data = BoModel().get_abs_session(conf_id,abs_type,confData.get('conf_schema'))
if abs_type == "IC":
halls = BoModel().get_halls(conf_id)
session_data = render_template('backoffice/abstract/ic_hallassignment_table.html',session_data=session_data,halls=halls)
return jsonify(session_data)
@app.route('/ajax/save_ic_abs_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Save_ic_abs_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
no_ic_abstracts = request.form.get("no_ic_abstracts" or None)
insert_data = []
update_data = []
for i in range(1,int(no_ic_abstracts)+1):
session_id = request.values.get("abs_session_id_"+str(i)) or None
if session_id:
data = {
"abs_session_id" : session_id,
"start_date" : request.values.get("abs_session_start_time_"+str(i)) or None,
"end_date" : request.values.get("abs_session_end_time_"+str(i)) or None,
"hall_id" : request.values.get("session_hall_id_"+str(i)) or None,
}
update_data.append(data)
else:
data = {
"abs_session_id" : session_id,
"abs_id" : request.values.get("abs_id_"+str(i)) or None,
"start_date" : request.values.get("abs_session_start_time_"+str(i)) or None,
"end_date" : request.values.get("abs_session_end_time_"+str(i)) or None,
"hall_id" : request.values.get("session_hall_id_"+str(i)) or None,
}
insert_data.append(data)
if insert_data:
BoModel().add_new_IC_sessions(insert_data,conf_id,confData.get('conf_schema'))
if update_data:
BoModel().update_IC_sessions(update_data,confData.get('conf_schema'))
return jsonify()
@app.route('/ajax/insert_ic_abs_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def InsertICSession(conf_id,conf_key):
results = BoModel().usp_generate_ic_sessions(conf_id)
return jsonify(results)
@app.route('/ajax/get_session_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_session_data(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id" or None)
session_data = BoModel().get_session_data(session_id,confData.get('conf_schema'))
if session_data["start_date"]:
session_data["start_date"] = session_data["start_date"].strftime("%Y-%m-%d %H:%M")
if session_data["end_date"]:
session_data["end_date"] = session_data["end_date"].strftime("%Y-%m-%d %H:%M")
return jsonify(session_data)
@app.route('/ajax/save_abs_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Save_abs_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id")
session_name = request.values.get("session_name")
abs_type = request.values.get("abs_type")
start_date = request.values.get("start_date")
hall_id = request.values.get("hall_id")
end_date = request.values.get("end_date")
if session_id and int(session_id) >= 1:
data = {
'session_name' : session_name,
'start_date' : start_date,
'end_date' : end_date,
'hall_id' : hall_id,
}
BoModel().update_session(data,session_id,confData.get('conf_schema'))
else:
data = {
'session_name' : session_name,
'conf_id' : conf_id,
's_abs_type' : abs_type,
}
BoModel().insert_new_session(data,confData.get('conf_schema'))
return jsonify()
# /ajax/get_session_abstracts
@app.route('/ajax/get_session_abstracts/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_session_Abstracts(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id")
abs_type = request.values.get("abs_type")
sel_type_id = request.values.get('sel_type')
data = BoModel().get_session_abstract_data(session_id,abs_type,conf_id,confData.get('conf_schema'))
data1 = BoModel().get_new_session_abstract_data(abs_type,conf_id,sel_type_id,confData.get('conf_schema'))
html = render_template('backoffice/abstract/hallassignment_table.html',data=data,data1=data1)
return jsonify(html)
@app.route('/ajax/add_remove_abstracts_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def add_remove_session_Abstracts(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_ids = request.values.get("abs_ids")
session_id = request.values.get("session_id")
btn_val = request.values.get("btn_val")
if abs_ids:
BoModel().add_session_abstract(session_id,abs_ids,btn_val,confData.get('conf_schema'))
return jsonify("success")
@app.route('/abstract/storehallassignment/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login page
def StoreHallAssigment(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
total_length = request.values.get("total_length")
data = []
abs_ids = []
for i in range(1,int(total_length)+1):
date = request.values.get('hall_date_'+str(i))
dicts = {
'abs_id' : request.values.get('abs_id_'+str(i)),
'hall_id' : request.values.get('hall_id_'+str(i) or 'Null' ),
'starts_by' : "' "+date+ " " +request.values.get('start_time_'+str(i) or 'Null')+" '",
'ends_by' : "' "+date+ " " +request.values.get('end_time_'+str(i) or 'Null')+" '",
}
abs_ids.append(request.values.get('abs_id_'+str(i)))
data.append(dicts)
data_post = BoModel().store_hall_assignment(data,abs_ids,confData.get('conf_schema'))
flash("successfully Hall Assignment updated ","successMsg")
return redirect(url_for("backoffice.Hall_Assignment",btn_val = 0,conf_id=conf_id,conf_key=conf_key))
@app.route('/abstract/general_paper/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def General_Paper_list(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data = BoModel().get_gp_list(conf_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/general_paper_list.html',data=data,conf_id=conf_id,conf_key=conf_key)
@app.route('/abstract/newgp/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def New_GP(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
society_id = confData.get("society_id")
user_id = Auth.get_user(society_id).get("user_id")
insert_gp = BoModel().insert_new_gp('GP',conf_id,user_id,confData.get('conf_schema'))
is_program_sheet = request.values.get("is_program_sheet") or 0
return redirect(url_for("backoffice.Gp_abstract",abs_id=insert_gp,conf_id=conf_id,conf_key=conf_key,is_program_sheet=is_program_sheet))
@app.route('/abstract/gp/<abs_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Gp_abstract(abs_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
is_program_sheet = request.values.get("is_program_sheet") or 0
data = BoModel().get_gp_abstract_data(abs_id,confData.get('conf_schema'))
desigation = BoModel().get_role_for_desigination()
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
if start_date and end_date:
start_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date, '%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt.strftime("%Y-%m-%d"))
halls = BoModel().get_halls(conf_id)
if int(is_program_sheet) == 1:
return render_template('backoffice/program_sheet/GP_edit.html',data=data,abs_id=abs_id,halls=halls,confe_date=confe_date,desigation=desigation,conf_id=conf_id,conf_key=conf_key)
else:
return render_template('backoffice/abstract/GP_abstract/GP_edit.html',data=data,abs_id=abs_id,halls=halls,confe_date=confe_date,desigation=desigation,conf_id=conf_id,conf_key=conf_key)
@app.route('/Gp_searchauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Gp_Searchauthor(conf_id,conf_key):
searchtext = request.values["searchtext"]
abs_type = request.values["abs_type"]
btn_val = request.values["btn_val"]
society_id = Auth.get_conference(conf_id).get("society_id")
role_id = 33
data = UserModel().get_search_data(searchtext,role_id,abs_type,society_id,conf_id)#getting search data from DB to step3
if btn_val == "1":
html = render_template('backoffice/abstract/GP_abstract/chief_authour_search_table.html',abs_type=abs_type,data=data,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
else:
html = render_template('backoffice/abstract/GP_abstract/GP_co_authour_search.html',abs_type = abs_type,data=data)
return jsonify(html)
@app.route('/step3_GP_getauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Step3_GP_getauthor(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
abs_type = request.values["abs_type"]
desigation = BoModel().get_role_for_desigination()
data = AbstractModel().get_GP_authors(abs_id,confData['conf_schema'])#geting author to show in step 3 table
html = render_template('backoffice/abstract/GP_abstract/GP_co_authour_table.html',abs_type=abs_type,data=data,desigation=desigation,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/step3model_Chief_author/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def BO_Step3model_chief_author(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values["searchvalue"]
abs_type = request.values["abs_type"]
addcoinst = UserModel().get_user_data(user_id)#getting user data
abs_id = request.values["abs_id"]
role_id = request.values["role_id"]
data = AbstractModel().add_to_GP_author(abs_id,user_id,confData['conf_schema'])#adding presenting author for VT
html = render_template('backoffice/abstract/GP_abstract/Chief_authour_table.html',data2=addcoinst,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/GPstep1getauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Step1_GP_get_author(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
data=AbstractModel().GP_step1_get_author(abs_id,confData.get('conf_schema'))#getting the presenting author to show in step1
if(data == []):
data1 = 0
return jsonify(data1)
html = render_template('backoffice/abstract/GP_abstract/Chief_authour_table.html',data2=data,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/step3model_gp/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Step3model_GP(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values["searchvalue"]
abs_type = request.values["abs_type"]
addcoinst = UserModel().get_user_data(user_id)#getting user data
abs_id = request.values["abs_id"]
role_id = request.values.get("role_id" or 'Null' )
topic = request.values.get("topic" or 'Null')
order_by = request.values.get("order_by" or 'Null')
duration = request.values.get("duration" or 'Null')
if not role_id:
role_id = "Null"
if not order_by:
order_by = "Null"
if not duration:
duration = "Null"
data = AbstractModel().add_to_GP_presenting_author(confData.get('conf_schema'),abs_id,user_id,role_id,topic,order_by,duration)#adding presenting author for FP
html = render_template('backoffice/bo_edit/co_athour_table.html',data2=addcoinst,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/abstract/post_gp/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Post_gp_abstract(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
if request.method == "POST":
abs_id = request.values.get('abs_id' or '')
title = request.values.get('title' or '')
Synopsis = request.values.get('Synopsis' or '')
date = request.values.get('hall_date' or '')
hall_id = request.values.get('hall_id' or '')
start_time = request.values.get('start_time' or '00:00')
end_time = request.values.get('end_time' or '00:00')
user_id = request.values.get('pre_user_id' or '')
abs_type = request.values.get('abs_type' or '')
abs_no = request.values.get('abs_no' or '')
session_id = request.values.get('session_id' or '')
data = {
'title' : title,
'synopsis' : Synopsis,
'updated_at' : datetime.now(),
'abs_status_id' : 2,
'submitted_at' : datetime.now(),
'conf_id' : conf_id,
}
session_data = {
'start_date' : str(date + " " + start_time) if date else None ,
'end_date' : str(date + " " + end_time) if date else None,
'hall_id' : hall_id,
'conf_id' : conf_id,
'created_at' : datetime.now(),
}
if (not abs_no):
update = AbstractModel().abstract_submited(user_id,abs_id,abs_type,data,conf_id)
BoModel().update_gp_session(session_data,abs_id,confData.get('conf_schema'))
update_step = UserModel().update_step(data,abs_id,confData.get('conf_schema'))
if session_id:
update_session = BoModel().update_abs_session(session_data,session_id,confData.get('conf_schema'))
total_co = request.values.get('total_co') or 0
data = []
topic_ids = []
if total_co != '0':
for i in range(1,int(total_co)+1):
order_no = request.values.get("order_no_"+str(i)) or None
duration = request.values.get("duration_"+str(i)) or 0
role_id = request.values.get("desigation_"+str(i)) or None
topic = request.values.get("topic_"+str(i)) or None
dicts ={
'topic_id' : request.values.get("topic_id_"+str(i) or 'null'),
'topic' : topic,
'role_id' : role_id,
'order_no' : order_no,
'duration' : duration,
}
topic_ids.append(request.values.get("topic_id_"+str(i) or ''))
data.append(dicts)
update_co = BoModel().update_GP_co_author(data,topic_ids,confData.get('conf_schema'))
return redirect(url_for("backoffice.General_Paper_list",conf_id=conf_id,conf_key=conf_key))
@app.route('/abstract/view/gp/<abs_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def View_GP(abs_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data = BoModel().get_gp_abstract_data(abs_id,confData.get('conf_schema'))
data1=AbstractModel().GP_step1_get_author(abs_id,confData.get('conf_schema'))
data2=AbstractModel().get_GP_authors(abs_id,confData.get('conf_schema'))#geting author to show in step 3 table
return render_template('backoffice/abstract/GP_abstract/GP_view.html',data=data,data1=data1,data2=data2,conf_id=conf_id,conf_key=conf_key)
@app.route('/abstract/sendresult/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def SendResult(abs_type,conf_id,conf_key):
selection_type = BoModel().get_selection_type(abs_type)
data = []
selection_type_id = ""
status = ""
delegate_reg = None
role_id = None
if request.method == "POST":
selection_type_id = request.values.get("ddlsel_type",None) or None
status = request.values.get("ddlstatus",None) or None
delegate_reg = request.values.get("delegate_reg",None) or None
role_id = request.values.get("role_id",None) or None
# data = BoModel().get_selection_data(selection_type_id,status,abs_type,delegate_reg,conf_id)
data = BoModel().usp_abs_selection_result_with_delegate(abs_type,selection_type_id,status,delegate_reg,role_id,conf_id)
for index,value in enumerate(data):
if index == 0:
data = value
if data:
if not data[0]["abs_id"] :
data = []
else:
data = []
return render_template('backoffice/abstract/sendresult.html',selection_type = selection_type,abs_type=abs_type,data=data,selection_type_id=selection_type_id,status=status,conf_id=conf_id,conf_key=conf_key,delegate_reg=delegate_reg,role_id=role_id)
@app.route('/mail_result_mail/<btn_val>/<conf_id>/<conf_key>/<abs_type>/<selection_type_id>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Mail_Result_Mail(btn_val,conf_id,conf_key,abs_type,selection_type_id):
confData = Auth.get_conference(conf_id)
checkbox = request.values.getlist('select_to_mail')
abs_ids = ",".join(checkbox)
if abs_ids :
mail_ids = BoModel().get_mail_ids_by_abs_id_v1(abs_ids,confData.get('conf_schema'))
# print('mail_ids - ', mail_ids)
# return jsonify(mail_ids)
confe_logo = confData['mail_header_logo']
if int(conf_id) == 13:
abs_type = 'FP'
get_selection_abs_type = BoModel().get_abs_type_from_selection_type(selection_type_id)
if get_selection_abs_type and get_selection_abs_type['selection_abs_type']:
selection_abs_type=get_selection_abs_type['selection_abs_type']
else:
selection_abs_type = abs_type
template_name = selection_abs_type+"_send_result_mail"
mailData = UserModel().get_mail_templates(template_name,conf_id)
if mailData and type(mailData) != "dict":
mailData = dict(mailData._mapping)
if mailData:
if mailData.get('subject'):
sub_data = {'conf_name':confData['conf_name']}
subject = Helper.merge_tags(mailData.get('subject'),sub_data)
else:
subject = confData['conf_name']+" - Result for submission "
if btn_val == "0" :
if mail_ids:
for i in mail_ids:
name = i["full_name"]
email = i["email"]
if i["abs_status_id"] == 2:
mail_data = {
'mail_content': mailData.get('mail_content'),
'data' : i,
'confData':confData
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
else:
template_name = "result_rejected_mail"
mailData = UserModel().get_mail_templates(template_name,conf_id)
sub_data = {'conf_name':confData['conf_name']}
subject = Helper.merge_tags(mailData.get('subject'),sub_data)
mail_data = {
'mail_content': mailData.get('mail_content'),
'data' : i,
'confData':confData
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
# html = render_template('users/email/result_rejected.html',name=name,data=i,confe_logo=confe_logo,conf_id=conf_id)
mailData['CC'] = []
cc_ids = i['co_email']
if cc_ids:
cc_ids = cc_ids.split(',')
mailData['CC'] = cc_ids
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
data = {'msg':'Mail sent successfully'}
return jsonify()
else:
email = request.values["test_mail_id"]
for i in mail_ids:
name = i["full_name"]
email = email
if i["abs_status_id"] == 2:
mail_data = {
'mail_content':mailData.get('mail_content'),
'data' : i,
'confData':confData
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
else:
template_name = "result_rejected_mail"
mailData = UserModel().get_mail_templates(template_name,conf_id)
sub_data = {'conf_name':confData['conf_name']}
subject = Helper.merge_tags(mailData.get('subject'),sub_data)
mail_data = {
'mail_content': mailData.get('mail_content'),
'data' : i,
'confData':confData
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
# html = render_template('users/email/result_rejected.html',name=name,data=i,confe_logo=confe_logo,conf_id=conf_id)
# return html
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
data = {'msg':'Test mail sent successfully'}
return jsonify(data)
else:
data = {'msg':'Please add mail content'}
return jsonify(data)
return jsonify(1)
# --------------------- abstract session adding --------
@app.route('/abstract/abs_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Abs_session(conf_id,conf_key):
abs_session = BoModel().get_abs_session(conf_id)
halls = BoModel().get_halls(conf_id)
data = BoModel().get_status_selection_type_of_presentation_abs_types(conf_id)
status = data[0]
selection = data[1]
presentation = data[2]
abs_types = data[3]
return render_template('backoffice/abstract/abs_session_assignment/abssessionassignment.html',abs_session=abs_session,hall_data=halls,selection=selection,presentation=presentation,abs_types=abs_types,conf_id=conf_id,conf_key=conf_key)
@app.route('/ajax/get_abs_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_abs_session(conf_id,conf_key):
conf_id = request.values["conf_id"]
abs_session = BoModel().get_abs_session(conf_id)
html = render_template('backoffice/abstract/abs_session_assignment/abssessiontable.html',data = abs_session)
return jsonify(html)
@app.route('/ajax/get_abs_session_dropdown/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_abs_session_dropdown(conf_id,conf_key):
conf_id = request.values["conf_id"]
abs_session = BoModel().get_abs_session(conf_id)
return jsonify(abs_session)
@app.route('/ajax/delete_abs_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Delete_abs_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id")
BoModel().delete_session(session_id,confData['conf_schema'])
return jsonify()
@app.route('/ajax/search_abstract/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Search_Author(conf_id,conf_key):
abs_search_text = request.values.get("abs_search_text")
abs_type = request.values.get("abs_type")
selection_type = request.values.get("selection")
presentation_type = request.values.get("presentation")
conf_id = request.values.get("conf_id")
data = BoModel().search_session_abstracts(abs_search_text,abs_type,selection_type,presentation_type,conf_id)
html = render_template('backoffice/abstract/abs_session_assignment/abs_sessions_abstract_table.html',data=data)
return jsonify(html)
@app.route('/ajax/add_remove_session_abstract/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Add_emove_session_abstract(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id")
abs_id = request.values.get("abs_id")
btn_val = request.values.get('btn_val')
if btn_val:
BoModel().add_session_abstract(session_id,abs_id,btn_val,confData.get('conf_schema'))
return jsonify()
#----------------------------------commitment mail ---------------------------------------
@app.route('/abstract/commitment_mail/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Commitment_mail(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
if start_date and end_date:
start_date = datetime.strptime(start_date,'%Y-%m-%d')
end_date = datetime.strptime(end_date,'%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt.strftime("%Y-%m-%d"))
return render_template('backoffice/abstract/commitment_mail.html',conf_id=conf_id,conf_key=conf_key,confe_date=confe_date)
@app.route('/ajax/search_user_commitment/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Search_user_commitment(conf_id,conf_key):
conf_id = request.values.get("conf_id" or None)
report_type = request.values.get("report_type" or None)
start_date = request.values.get('start_date' or None)
end_date = request.values.get('end_date' or None)
if report_type == '2':
start_date = datetime.now()
data = BoModel().get_commitment_data(conf_id,report_type,start_date,end_date)
html = render_template('backoffice/abstract/commitment_mail_table.html',data=data)
return jsonify(html)
@app.route('/abstract/commitment_mail_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Commitment_mail_by_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_data = BoModel().get_all_session(conf_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/commitment_mail_session.html',conf_id=conf_id,conf_key=conf_key,session_data=session_data)
@app.route('/ajax/search_user_commitment_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Search_user_commitment_session(conf_id,conf_key):
session_id = request.values.get("ddl_session_id")
data = BoModel().get_commitment_data_session(conf_id,session_id)
html = render_template('backoffice/abstract/commitment_mail_table.html',data=data[0])
return jsonify(html)
@app.route('/ajax/get_commitment_data_mail/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_commitment_mail_data(conf_id,conf_key):
user_ids = request.values.getlist("chk_user_id" or None)
report_type = request.values.get("hid_report_type" or None)
start_date = request.values.get("hid_cus_start_date" or None) or None
end_date = request.values.get("hid_cus_end_date" or None) or None
testmail = request.values.get("test_mail") or None
is_attachement = request.values.get('is_attachement')
confData = Auth.get_conference(conf_id)
try:
if user_ids:
user_ids_str = ",".join(str(e) for e in user_ids)
data = BoModel().get_user_commitment_data(conf_id,user_ids_str,report_type,start_date,end_date)
user_data = data[0]
abs_data = data[1]
user_abs = defaultdict(list)
if user_data and abs_data:
for r in abs_data:
user_abs[r["user_id"]].append(r)
template_name = 'commitment_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
if type(mailData) != dict:
mailData = dict(mailData._mapping)
for u in user_data:
if u["user_id"] in user_abs :
user_abs_data = user_abs[u["user_id"]]
email = u["email"]
sub_data = {'full_name': u['full_name']}
subject = Helper.merge_tags(mailData['subject'],sub_data)
mail_data = {'mail_content': mailData['mail_content'],'user_data': u,'abs_data':user_abs_data,'confData':confData}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
# time.sleep(2)
attachmentData = None
if is_attachement and int(is_attachement) == 1:
attachmentData = UserInviteLetter(u['user_id'],u,1)
mailData['TO'] = email
EMAIL.sendMail_v2(subject,html,mailData,conf_id,confData,attachmentData)
status = 1
except ClientError as e:
status = 0
data = {'msg':"Send mail successfully"}
return jsonify(status)
@app.route('/ajax/test_commitment_mail/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def send_test_commitment_mail(conf_id,conf_key):
report_type = request.values.get("hid_repot_type" or None)
start_date = request.values.get("hid_cus_start_date" or None) or None
end_date = request.values.get("hid_cus_end_date" or None) or None
email = request.values.get("test_mail" or None)
user_id = request.values.get("test_user_id" or None)
is_attachement = request.values.get("is_attahement" or None)
confData = Auth.get_conference(conf_id)
if user_id:
data = BoModel().get_user_commitment_data(conf_id,user_id,report_type,start_date,end_date)
user_data = data[0]
abs_data = data[1]
user_abs = defaultdict(list)
if user_data and abs_data:
for r in abs_data:
user_abs[r["user_id"]].append(r)
template_name = 'commitment_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
if type(mailData) != dict:
mailData = dict(mailData._mapping)
for u in user_data:
if u["user_id"] in user_abs :
user_abs_data = user_abs[u["user_id"]]
email = email
sub_data = {'full_name': u['full_name']}
subject = Helper.merge_tags(mailData['subject'],sub_data)
mail_data = {'mail_content': mailData['mail_content'],'user_data': u,'abs_data':user_abs_data,'confData':confData}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
attachmentData = None
if int(is_attachement) == 1:
attachmentData = UserInviteLetter(u['user_id'],u,1)
mailData['TO'] = email
EMAIL.sendMail_v2(subject,html,mailData,conf_id,confData,attachmentData)
data = {'msg':"Test mail sent successfully"}
return jsonify(data)
@app.route('/ajax/view_commitment_data_mail/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def View_commitment_data_mail(conf_id,conf_key):
user_id = request.values.get("user_id" or None)
report_type = request.values.get("hid_repot_type" or None)
start_date = request.values.get("hid_cus_start_date" or None) or None
end_date = request.values.get("hid_cus_end_date" or None) or None
conf_data = Auth.get_conference(conf_id)
data_mail = BoModel().get_user_commitment_data(conf_id,user_id,report_type,start_date,end_date)
user_data = data_mail[0]
abs_data = data_mail[1]
data_whatsapp = BoModel().get_user_commitment_data_whatsapp(user_id,report_type,start_date,end_date,conf_id)
template_name = "Commitment"
get_commitment = BoModel().get_commitment_template(conf_id,template_name)
if get_commitment:
Commitment_data = get_commitment['commitment_content']
else:
Commitment_data='{{data}}'
whatsapp_msg = ''
url= ''
if data_whatsapp:
for i in data_whatsapp:
mobile = i["mobile"] if i["mobile"] else ""
url = "http://wa.me/91"
mail_data = {'mail_content': Commitment_data,'data':i["whatsapp_commitment"].replace('&', '&'),'user_data':i,'conf_data':conf_data}
whatsapp_msg = Helper.convert_html_for_mail_screen(mail_data)
whatsapp_msg = urllib.parse.quote(whatsapp_msg)
whatsapp_msg = "?text="+whatsapp_msg
i["whatsapp_msg"] = whatsapp_msg
user_abs = defaultdict(list)
if user_data and abs_data:
for r in abs_data:
user_abs[r["user_id"]].append(r)
template_name = 'commitment_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
for u in user_data:
if u["user_id"] in user_abs :
user_abs_data = user_abs[u["user_id"]]
email = u["email"]
sub_data = {'full_name': u['full_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
mail_data = {'mail_content': mailData.mail_content,'user_data': u,'abs_data':user_abs_data,'confData':conf_data}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
data = {
# 'html': render_template('users/email/commitment_mail.html',conf_id=conf_id,conf_key=conf_key,user_data=user_data[0],abs_data=abs_data),
'html' : html,
'whatsapp_msg' : whatsapp_msg,
'whatsapp_msg_url' : url,
'user_email' : user_data[0]["email"],
'user_mobile' : user_data[0]["mobile"],
}
return jsonify(data)
#-----------------------Commitment whatsapp-----------------
@app.route('/abstract/whatsapp/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Commitment_whatsapp(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
template_name="Commitment"
get_commitment = BoModel().get_commitment_template(conf_id,template_name)
html_data = render_template('backoffice/abstract/commitment_content.html' ,commitment_data = get_commitment)
if start_date and end_date:
start_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date,'%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt.strftime("%Y-%m-%d"))
return render_template('backoffice/abstract/commitment_whatsapp.html',conf_id=conf_id,conf_key=conf_key,commitment_data = get_commitment,confe_date=confe_date,get_commitment=get_commitment,html_data=html_data)
@app.route('/update_commitment/<conf_id>/<conf_key>', methods = ["GET","POST"])
def UpadateCommmitment(conf_id,conf_key):
commitment_content = request.values.get('commitment_content') or None
template_name = request.values.get('template_name') or None
template_id = request.values.get('template_id') or None
if template_id and int(template_id) > 0 :
data_for_update={
'template_name' : template_name,
'commitment_content' : commitment_content,
}
update_and_getdata = BoModel().update_commitment_and_getcommitment(data_for_update,template_id)
html_data = render_template('backoffice/abstract/commitment_content.html' ,commitment_data = update_and_getdata)
data = {"html_data" :html_data,"msg" : "success" ,"status" : 1 }
return json.dumps(data)
else:
data = {"html_data" :"","msg" : "Invlaid template_id" ,"status" : 2 }
return json.dumps(data)
@app.route('/ajax/search_user_commitment_whatsapp/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Search_user_commitment_Whatsapp(conf_id,conf_key):
conf_id = request.values.get("conf_id" or None)
report_type = request.values.get("report_type" or None)
start_date = request.values.get('start_date' or None)
end_date = request.values.get('end_date' or None)
conf_data = Auth.get_conference(conf_id)
if report_type == '2':
start_date = datetime.now()
user_ids_str = ""
data = BoModel().get_user_commitment_data_whatsapp(user_ids_str,report_type,start_date,end_date,conf_id)
template_name = "Commitment"
get_commitment = BoModel().get_commitment_template(conf_id,template_name)
if get_commitment:
Commitment_data = get_commitment['commitment_content']
else:
Commitment_data='{{data}}'
if data:
for i in data:
mobile = i["mobile"] if i["mobile"] else ""
url = "http://wa.me/91"+ mobile +"?text="
mail_data = {'mail_content': Commitment_data,'data':i["whatsapp_commitment"].replace('&', '&'),'user_data':i,'conf_data':conf_data}
whatsapp_msg = Helper.convert_html_for_mail_screen(mail_data)
whatsapp_msg = requote_uri(whatsapp_msg)
whatsapp_msg = url+whatsapp_msg
i["whatsapp_msg"] = whatsapp_msg
html = render_template('backoffice/abstract/commitment_whatsapp_table.html',data=data)
return jsonify(html)
@app.route('/ajax/get_commitment_data_whatsapp/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_commitment_whatsapp_data(conf_id,conf_key):
user_ids = request.values.getlist("chk_user_id" or None)
report_type = request.values.get("hid_report_type" or None)
start_date = request.values.get("hid_cus_start_date" or None)
end_date = request.values.get("hid_cus_end_date" or None)
conf_id = request.values.get("conf_id" or None)
conf_key = request.values.get("conf_key" or None)
conf_data = Auth.get_conference(conf_id)
output = io.StringIO()
writer = csv.writer(output)
# writer = csv.writer(output,delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMA)
if user_ids:
user_ids_str = "','".join(str(e) for e in user_ids)
user_ids_str = "'"+user_ids_str+"'"
data = BoModel().get_user_commitment_data_whatsapp(user_ids_str,report_type,start_date,end_date,conf_id)
template_name = "Commitment"
get_commitment = BoModel().get_commitment_template(conf_id,template_name)
if get_commitment:
Commitment_data = get_commitment['commitment_content']
else:
Commitment_data='{{data}}'
if data:
hline = list(data[0].keys())
writer.writerow(hline)
for i in data:
mobile = i["mobile"] if i["mobile"] else ""
url = "http://wa.me/91"+ mobile +"?text="
mail_data = {'mail_content': Commitment_data,'data':i["whatsapp_commitment"].replace('&', '&'),'user_data':i,'conf_data':conf_data}
whatsapp_msg = Helper.convert_html_for_mail_screen(mail_data)
whatsapp_msg = urllib.parse.quote(whatsapp_msg)
whatsapp_msg = url+whatsapp_msg
i["whatsapp_commitment"] = whatsapp_msg
for i in data:
line = []
for j in hline:
line.append(i[j])
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+str(conf_data["conf_key"])+"abs_whatsapp_report.csv"})
return redirect(url_for("backoffice.Commitment_whatsapp",conf_id=conf_id,conf_key=conf_key))
# -------------------------Keynote address function start---------------------------------------
@app.route('/keynote_address_index/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Keynote_address_Index(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_data = BoModel().get_keynote_abstract_data(abs_type,conf_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/Keynoteaddress/keynote_index.html',conf_id=conf_id,conf_key=conf_key,data=abs_data,abs_type=abs_type)
@app.route('/new_keynote_address/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def New_Keynote_address(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_data = BoModel().New_keynote_abstract(abs_type,conf_id,confData.get('conf_schema'))
return redirect(url_for("backoffice.Keynote_address",abs_id=abs_data["abs_id"],abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
@app.route('/keynote_address/<abs_id>/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Keynote_address(abs_id,abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_data = BoModel().get_abstract_data_for_keynote(abs_type,conf_id,confData.get('conf_schema'))
data = BoModel().get_keynote_abstract(abs_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/Keynoteaddress/keynote.html',data=data,conf_id=conf_id,conf_key=conf_key,abs_data=abs_data,abs_type=abs_type)
@app.route('/ajax/keynote_searchauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def keynote_Searchauthor(conf_id,conf_key):
searchtext = request.values["searchtext"]
abs_type = request.values["abs_type"]
btn_val = request.values["btn_val"]
society_id = Auth.get_conference(conf_id).get("society_id")
role_id = 35
data = UserModel().get_search_data(searchtext,role_id,abs_type,society_id,conf_id)#getting search data from DB to step3
html = render_template('backoffice/abstract/Keynoteaddress/chief_authour_search_table.html',abs_type=abs_type,data=data,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/ajax/add_keynote_author/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Add_keynote_author(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values.get("user_id")
abs_type = request.values.get("abs_type")
abs_id = request.values.get("abs_id")
data = BoModel().add_keynote_author(abs_id,user_id,abs_type,confData.get('conf_schema'))#adding presenting author for VT
html = render_template('backoffice/abstract/Keynoteaddress/Chief_authour_table.html',data2=data[0],conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
@app.route('/ajax/keynotegetauthor/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Keynote_getauthor(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id=request.values["abs_id"]
if abs_id:
data=BoModel().get_keynote_abstract(abs_id,confData.get('conf_schema'))#getting the presenting author to show in step1
if(data == []):
data1 = 0
return jsonify(data1)
html = render_template('backoffice/abstract/Keynoteaddress/Chief_authour_table.html',data2=data,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
return jsonify()
@app.route('/ajax/get_old_keynote/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_old_Keynote(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id=request.values["abs_id"]
if abs_id:
data=BoModel().Get_old_Keynote_abs_id(abs_id,conf_id,confData.get('conf_schema'))#getting the presenting author to show in step1
html = render_template('backoffice/abstract/Keynoteaddress/old_keynote_abstracts.html',data=data,conf_id=conf_id,conf_key=conf_key)
return jsonify(html)
return jsonify()
@app.route('/ajax/save_keynote_address/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Save_keynote_address(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values.get("abs_id" or '')
title = request.values.get("title" or '')
keynote_topic = request.values.get("keynote_topic" or '')
keynote_abs_id = request.values.get("ddlabs_id" or '')
data = {
'keynote_topic' : keynote_topic,
'title' : title,
'keynote_abs_id' : keynote_abs_id,
}
update = UserModel().update_step(data,abs_id,confData.get('conf_schema'))
return jsonify()
@app.route('/ajax/generate_keynote_address_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Generate_keynote_address_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get("abs_type" or '')
update = BoModel().generate_keynote_session(abs_type,conf_id,confData.get('conf_schema'))
return jsonify()
# -------------------------Keynote address function end---------------------------------------
# -------------------------Marksheet function start---------------------------------------
@app.route('/marksheet/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Marksheet_index(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_types = BoModel().get_session_by_selection_types(None,conf_id,confData.get('conf_schema'))
selection = BoModel().get_session_selection_types(conf_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/abs_marksheets/marksheet_index.html',conf_id=conf_id,conf_key=conf_key,session_types=session_types,selection=selection)
@app.route('/printmarksheet/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Post_Marksheet(conf_id,conf_key):
session_id = request.values.get("session_type")
abs_type = request.values.get("selection")
data = BoModel().get_marksheet_data(session_id,abs_type,conf_id)
session_data = data[0]
abstract_data = data[1]
judge_data = data[2]
selection_type_id = 0
if abstract_data:
selection_type_id = abstract_data[0]["selection_type_id"]
marksheet_template = BoModel().get_marksheet_template(conf_id,abs_type,selection_type_id)
return render_template('backoffice/abstract/abs_marksheets/main_marksheet.html',conf_id=conf_id,conf_key=conf_key,session_data=session_data,abstract_data=abstract_data,abs_type=abs_type,judge_data=judge_data,marksheet_template=marksheet_template)
# try:
# return render_template('backoffice/abstract/abs_marksheets/'+abs_type+'marksheet.html',conf_id=conf_id,conf_key=conf_key,session_data=session_data,abstract_data=abstract_data,abs_type=abs_type,judge_data=judge_data)
# except:
# return "MARKSHEET NOT INTERGRATED"
@app.route('/printabstract/<abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Print_abstract(abs_type,conf_id,conf_key):
data = BoModel().get_print_abstracts_data(abs_type,conf_id)
session_data = []
abstract_data = []
co_author = []
if data[0]:
session_data = data[0]
if data[1]:
abstract_data= data[1]
if data[2]:
co_author = data[2]
abs_data = {}
abs_co_data = {}
if session_data and abs_type != 'IC':
for session in session_data:
temp_list = []
for ab in abstract_data:
if session["abs_session_id"] == ab["abs_session_id"]:
temp_list.append(ab)
abs_data[session["abs_session_id"]] = temp_list
else:
abs_data = abstract_data
cat_list = []
if session_data == []:
abs_data = defaultdict(list) # sub list with key
for r in abstract_data:
abs_data[r["display_name"]].append(r)
if r["display_name"] not in cat_list:
cat_list.append(r["display_name"])
if co_author:
for ab in abstract_data:
temp_list = []
for co in co_author:
if ab["abs_id"] == co["abs_id"]:
temp_list.append(co)
abs_co_data[ab["abs_id"]] = temp_list
return render_template('backoffice/abstract/print_abstracts/'+abs_type+'_print.html',conf_id=conf_id,conf_key=conf_key,session_data = session_data,abstract_data=abs_data,co_author=abs_co_data,abs_type=abs_type,cat_list=cat_list)
try:
return render_template('backoffice/abstract/print_abstracts/'+abs_type+'_print.html',conf_id=conf_id,conf_key=conf_key,session_data = session_data,abstract_data=abs_data,co_author=abs_co_data,abs_type=abs_type,cat_list=cat_list)
except:
return "Print Page Not Intergrated"
@app.route('/printabstractavcode/<conf_id>/<conf_key>',methods=["GET"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Print_abstract_avcode(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
if start_date and end_date:
start_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date,'%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt.strftime("%Y-%m-%d"))
hall_data = BoModel().get_halls(conf_id)
return render_template('backoffice/abstract/print_abstracts/avcode_print.html',conf_id=conf_id,conf_key=conf_key,confe_date=confe_date,hall_data=hall_data)
@app.route('/printabstractavcode/<conf_id>/<conf_key>',methods=["POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Post_Print_abstract_avcode(conf_id,conf_key):
abs_type = request.values.get('ddl_abstype') or None
date_wise = request.values.get('ddl_date') or None
hall_wise = request.values.get('ddl_hall') or None
chk_break = request.values.get('chk_break') or 0
# print(hall_wise,date_wise,abs_type)
data = BoModel().get_print_avcode_abstracts_data(abs_type,date_wise,hall_wise,conf_id)
session_data = []
abstract_data = []
co_author = []
if data[0]:
session_data = data[0]
if data[1]:
abstract_data= data[1]
if data[2]:
co_author = data[2]
abs_data = {}
abs_co_data = {}
if session_data:
for session in session_data:
temp_list = []
for ab in abstract_data:
if session["abs_session_id"] == ab["abs_session_id"]:
temp_list.append(ab)
abs_data[session["abs_session_id"]] = temp_list
if co_author:
for ab in abstract_data:
temp_list = []
for co in co_author:
if ab["abs_id"] == co["abs_id"]:
temp_list.append(co)
abs_co_data[ab["abs_id"]] = temp_list
try:
return render_template('backoffice/abstract/print_abstracts/FP_avcode_print.html',conf_id=conf_id,conf_key=conf_key,session_data = session_data,abstract_data=abs_data,co_author=abs_co_data,abs_type=abs_type,chk_break=chk_break)
except:
return "Print Page Not Intergrated"
@app.route('/judges_assignment/<conf_id>/<conf_key>/<session_id>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Judges_Assignment(conf_id,conf_key,session_id):
confData = Auth.get_conference(conf_id)
session_types = BoModel().get_all_session(conf_id,confData.get('conf_schema'))
role_data = BoModel().get_role_for_desigination()
return render_template('backoffice/abstract/Judges_assignment/judges_assignment.html',session_types=session_types,conf_id=conf_id,conf_key=conf_key,role_data=role_data,session_id=session_id)
@app.route('/judges_assignment_index/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Judges_Assignment_index(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abstract_types = BoModel().get_judge_abs_types(conf_id,confData.get('conf_schema'))
selection_type_id = request.values.get('ddlsession_type') or 0
session_data = []
if selection_type_id:
session_data = BoModel().get_session_by_selection_type(conf_id,selection_type_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/Judges_assignment/judges_assignment_index.html',abstract_types=abstract_types,conf_id=conf_id,conf_key=conf_key,selection_type_id=selection_type_id,session_data=session_data)
@app.route('/ajax/get_session_judges/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_session_judges(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get('session_id')
judge_data = BoModel().get_session_judge_data(session_id,confData.get('conf_schema'))
html = render_template('backoffice/abstract/Judges_assignment/session_judges.html',data = judge_data)
return jsonify(html)
@app.route('/ajax/get_session_data_display/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Get_session_data_display(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id" or None)
session_data = BoModel().get_session_data(session_id,confData.get('conf_schema'))
# return jsonify(session_data)
return render_template('backoffice/abstract/display_session_data.html',session_data=session_data,conf_id=conf_id,conf_key=conf_key)
@app.route('/ajax/search_session_judges/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Search_session_judges(conf_id,conf_key):
Null = None
searchtext = request.values.get("searchtext" or None)
society_id = Auth.get_conference(conf_id).get("society_id")
data = UserModel().get_search_data(searchtext,Null,Null,society_id,conf_id)#getting search data from DB to step3
html = render_template('backoffice/abstract/Judges_assignment/session_judges_search_table.html',data=data)
return jsonify(html)
@app.route('/ajax/add_judge_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Add_judge_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id" or None)
user_id = request.values.get("user_id" or None)
role_id = request.values.get("role_id" or None)
society_id = Auth.get_conference(conf_id).get("society_id")
data = {
'session_id' : session_id,
'user_id' : user_id,
'role_id' : role_id,
}
in_judge = BoModel().insert_new_judge(data,confData.get('conf_schema'))
judge_data = BoModel().get_session_judge_data(session_id,confData.get('conf_schema'))
html = render_template('backoffice/abstract/Judges_assignment/session_judges.html',data = judge_data)
return jsonify(html)
@app.route('/ajax/delete_judge_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Delete_judge_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id" or None)
user_id = request.values.get("user_id" or None)
del_judge = BoModel().delete_judge(session_id,user_id,confData.get('conf_schema'))
judge_data = BoModel().get_session_judge_data(session_id,confData.get('conf_schema'))
html = render_template('backoffice/abstract/Judges_assignment/session_judges.html',data = judge_data)
return jsonify(html)
@app.route('/ajax/renerate_judges_mark/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Renerate_judges_mark(conf_id,conf_key):
regen_judge = BoModel().regen_judge(conf_id)
return jsonify()
@app.route('/print/createprintspeakerattendance/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Print_speaker_attendance(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
if start_date and end_date:
start_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date,'%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt.strftime("%Y-%m-%d"))
hall_data = BoModel().get_halls(conf_id);
return render_template('backoffice/abstract/print_abstracts/speaker_attendance.html',confe_date=confe_date,hall_data=hall_data,conf_id=conf_id,conf_key=conf_key)
@app.route('/print/postprintspeakerattendance/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Post_print_speaker_attendence(conf_id,conf_key):
date = request.values.get('ddl_date') or None
hall = request.values.get('ddl_hall') or None
btn_val = request.values.get('btn_val') or None
show_attendance = request.values.get('show_attendance') or None
data = BoModel().get_speaker_attendance_list(conf_id,date,hall)
hall_data = data[0]
session_data = data[1]
speaker_data = data[2]
speaker_list = defaultdict(list)
session_list = defaultdict(list)
for r in session_data:
session_list[r["hall_id"]].append(r)
for r in speaker_data:
speaker_list[r["abs_session_id"]].append(r)
if btn_val == 'signature':
return render_template('backoffice/abstract/print_abstracts/print_speaker_sttendance_signature.html',speaker_list=speaker_list,session_data=session_data,session_list=session_list,hall_data=hall_data,conf_id=conf_id,conf_key=conf_key)
else:
return render_template('backoffice/abstract/print_abstracts/print_speaker_attendance.html',speaker_list=speaker_list,session_data=session_data,session_list=session_list,hall_data=hall_data,conf_id=conf_id,conf_key=conf_key,show_attendance=show_attendance)
@app.route('/user_report/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def User_report(conf_id,conf_key):
data = []
society_id = Auth.get_conference(conf_id).get('society_id')
if (request.method == 'POST'):
search_data = request.values.get('searchtext')
data = UserModel().get_search_data(search_data,None,None,society_id,conf_id)
return render_template ('backoffice/user_report_table.html',data=data,conf_id=conf_id,conf_key=conf_key,society_id=society_id)
# Priyavarthana for view user reports
@app.route('/view_user/<user_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def ViewUser(user_id,conf_id,conf_key):
results = BoModel().usp_get_abstracts(conf_id,user_id,None,None)
for index,value in enumerate(results) :
if index == 0 :
db_abstract = value
if index == 1 :
db_abstopic = value
if index == 2 :
user_profile = value[0]
if index == 3 :
db_judges = value
if index == 4 :
db_eva_data = value
commitmentData = BoModel().get_user_commitment_data(conf_id,user_id,None,None,None)
if commitmentData:
commitment_data = commitmentData[1]
else:
commitment_data = None
abstopics_lst = {}
if db_abstopic:
for abstopic in db_abstopic:
abstopics_lst[abstopic['abs_id']] = (abstopics_lst[abstopic['abs_id']] if abstopics_lst.get(abstopic['abs_id'],None) else [] ) + [abstopic]
abstopic = []
if db_abstract:
for absData in db_abstract:
absData['topics'] = abstopics_lst.get(absData['abs_id'],[])
abstopic.append(absData)
return render_template('backoffice/user_view.html',conf_id=conf_id,conf_key=conf_key,userData=user_profile,absDatas=abstopic,db_judges=db_judges,user_id=user_id,commitment_data=commitment_data,db_eva_data=db_eva_data)
#Harini for mail template
# -----------------------------------------------------------Mail Template--------------------------------------------------------------
@app.route('/view_mail_template_index/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def ViewMailTempIndex(conf_id,conf_key):
mail_data = BoModel().getMailTemplate(conf_id)
# mail_template_id=mail_data[0]["mail_template_id"]
return render_template('backoffice/mail_template/mail_index.html',mail_data=mail_data,conf_id=conf_id,conf_key=conf_key)
@app.route('/view_mail_template/<int:mail_template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def ViewMailTemplate(mail_template_id,conf_id,conf_key):
mailData = BoModel().getMailTemplateId(conf_id,mail_template_id)
confData = Auth.get_conference(conf_id)
return render_template('backoffice/mail_template/view_mail_template.html',mailData=mailData,conf_id=conf_id,conf_key=conf_key,confData=confData)
@app.route('/edit_mail_template/<int:mail_template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def EditMailTemplate(mail_template_id,conf_id,conf_key):
mailData = BoModel().getMailTemplateId(conf_id,mail_template_id)
confData = Auth.get_conference(conf_id)
return render_template('backoffice/mail_template/edit_mail.html',mailData=mailData,conf_id=conf_id,conf_key=conf_key,confData=confData)
@app.route('/add_mail_template/<app_type_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def AddMailTemplate(app_type_id,conf_id,conf_key):
data={
'conf_ids':conf_id,
'app_type_id':app_type_id
}
mail_template_id = BoModel().insert_mail_template(data)
# confData = Auth.get_conference(conf_id)
return redirect(url_for('backoffice.EditMailTemplate',conf_id=conf_id,conf_key=conf_key,mail_template_id=mail_template_id))
@app.route('/post_edit_mail_template/<int:mail_template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@app.route('/post_edit_mail_template/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def PostEditMailTemplate(conf_id,conf_key,mail_template_id=0):
if request.method == "POST" :
template_name = request.form['template_name']
display_name = request.form['display_name']
subject_type = request.form['subject_type']
is_active = request.values.get('is_active') or None
subject =request.form['subject']
mail_type = request.form['mail_type']
is_layout = request.values.get('is_layout') or None
mail_content = request.form['mail_content']
mail_template_id=request.form['mail_template_id']
from_mail_name = request.values.get('from_mail_name')
reply_mail_name = request.values.get('reply_mail_name')
from_mail_id = request.values.get('from_mail_id')
reply_mail_id = request.values.get('reply_mail_id')
data = {
'template_name' : template_name,
'display_name' : display_name,
'subject_type' : subject_type,
'is_active' : is_active,
'subject' : subject,
'mail_type' :mail_type,
'is_layout' : is_layout,
'mail_content' :mail_content,
'from_mail_name' : from_mail_name,
'reply_mail_name' : reply_mail_name,
'from_mail_id' : from_mail_id,
'reply_mail_id' : reply_mail_id
}
if (mail_template_id != 0):
mailData = BoModel().update_mail_template(mail_template_id,data)
confData = Auth.get_conference(conf_id)
return redirect(url_for('backoffice.ViewMailTempIndex',conf_id=conf_id,conf_key=conf_key,mail_template_id=mail_template_id))
else:
return redirect(url_for('backoffice.ViewMailTempIndex',conf_id=conf_id,conf_key=conf_key,mail_template_id=mail_template_id))
## END #####
# ---------- Vimal IC Consent ------------
@app.route('/ic_consent/<int:conf_id>/<conf_key>',methods=["GET","POST"])
def IC_Consent(conf_id,conf_key):
return render_template('backoffice/abstract/ic_consent/ic_consent_data.html',conf_id=conf_id,conf_key=conf_key)
@app.route('/ic_consent_data/<int:conf_id>/<conf_key>',methods=["GET","POST"])
def IcConsentData(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
consent_status=request.values.get('consent_status')
abs_no=request.values.get('abs_no') or None
if abs_no==None:
abs_no=0
get_constent=BoModel().GetConsentStatus(consent_status,abs_no,conf_id,confData.get('conf_schema'))
html_data=render_template('backoffice/abstract/ic_consent/consent_table.html',get_constent=get_constent)
data = {"html_data":html_data,"msg" : "success" ,"status" : 1 }
return jsonify(data)
@app.route('/mail_consent/<btn_val>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Mail_consent(btn_val,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
checkbox = request.values.getlist('select_topic_id')
topic_ids = ','.join(checkbox)
data = BoModel().consent_reminder_mail_datas(topic_ids,conf_id,confData.get('conf_schema'))
consent_users = BoModel().consent_reminder_mail_users(topic_ids,confData.get('conf_schema'))
topic_data = defaultdict(list)
template_name = 'Co_Instructor_reminder_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
for r in data:
topic_data[r["co_user_id"]].append(r)
for i in consent_users:
data1 = topic_data[i["user_id"]]
if int(btn_val) == 0:
email = i["email"]
else:
email = request.values["test_mail_id"]
sub_data = {'abs_type':data1[0]['abs_type'],'abs_no':str(data1[0]['abs_no']),'conf_name': confData['conf_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
encrypt_user_id = Cryptography.encrypt(int(i['user_id']))
encrypt_topic_id = Cryptography.encrypt(int(i['topic_id']))
if data1[0]['setting_value']:
dates = datetime.strptime(data1[0]['setting_value'], '%Y-%m-%d %H:%M:%S')
else:
dates=''
mail_data = {'mail_content': mailData.mail_content,'data': data1[0],'confData':confData,'cons_date':dates,'encrypt_user_id':encrypt_user_id,'encrypt_topic_id':encrypt_topic_id}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/mail_template.html',is_layout=mailData.is_layout,mail_content=mail_content,confData=confData)
# return html
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
return jsonify()
# --------------------------------------Challenging Cases Uploads in Vrsi-----------------------------------------------------------------------------------------------
@app.route('/getccuploads/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def GetccUploads(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
abs_id = (int(Cryptography.decrypt(abs_id)))
# saved_to = AbstractModel().add_to_presenting_author(abs_id,user_id,role_id)#adding presenting author for PP
abs_uploads = AbstractModel().get_abs_uploads(abs_id)
if abs_uploads ==None:
len_abs_uploads = 0
else:
len_abs_uploads = len(abs_uploads)
return render_template(f'backoffice/bo_edit/{conf_key.upper()}/ccuploads.html',conf_id=conf_id,conf_key=conf_key,abs_uploads=abs_uploads,len_abs_uploads=len_abs_uploads)
@app.route('/cc_img_upload/<abs_id>/<abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def cc_Img_upload(abs_id,abs_type,conf_id,conf_key):
file = request.files.get('file')
abs_id = int(Cryptography.decrypt(abs_id))
presentation_type_id = request.values.get('presentation_type_id',None) or None
if int(presentation_type_id) == Helper.CC_Presentation_type_id :
filename = secure_filename(file.filename)
data = AbstractModel().checkexistsfile(abs_id,filename);
if data and len(data) >0:
return jsonify({'data':'','msg':"file already exists"})
bucketname = 'common-application'
if file and bucketname:
data_1 = {}
acl="public-read"
s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
filename = secure_filename(file.filename)
file_str = filename
try:
bucket = bucketname
foldername_1 = 'abs_uploads'
foldername_2 = conf_key
file_path = "https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/"+foldername_1+"/"+foldername_2+"/"+str(abs_type)+"/"+str(abs_id)+"/"
data_1 = {
'path' : file_path,
'file_name' : file_str,
'img_type' : None,
}
update_data = AbstractModel().update_imge_db(abs_id,data_1)
response = s3.upload_fileobj(file, bucket,foldername_1+'/'+foldername_2+'/'+str(abs_type)+'/'+str(abs_id)+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
except ClientError as e:
logging.error(e)
abs_uploads = AbstractModel().get_abs_uploads(abs_id)
if len(abs_uploads)<=3:
json = {'msg':'','status' : 1,'data':''}
if abs_uploads ==None:
len_abs_uploads = 0
else:
len_abs_uploads = len(abs_uploads)
json["data"] = render_template(f'backoffice/bo_edit/{conf_key.upper()}/ccuploads.html',conf_id=conf_id,conf_key=conf_key,abs_uploads=abs_uploads,len_abs_uploads=len_abs_uploads)
return jsonify(json)
@app.route('/cc_remove_img/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def CCRemove_img(conf_id,conf_key):
abs_id = request.values.get('abs_id')
upload_id = request.values.get('upload_id')
abs_id = int(Cryptography.decrypt(abs_id))
img = AbstractModel().get_img_upload_by_upload_id(upload_id)
if img:
bucketname = 'common-application'
img = img
filepath = img['path']
filename = img['file_name']
foldername = filepath+filename
foldername = foldername.replace("https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/", "")
s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
response = s3.Object(bucketname,foldername).delete()
AbstractModel().delete_abs_upload(upload_id)
json = {'msg':'','status' : 1,'data':""}
abs_uploads = AbstractModel().get_abs_uploads(abs_id)
if abs_uploads ==None:
len_abs_uploads = 0
else:
len_abs_uploads = len(abs_uploads)
json["data"] = render_template(f'backoffice/bo_edit/{conf_key.upper()}/ccuploads.html',conf_id=conf_id,conf_key=conf_key,abs_uploads=abs_uploads,len_abs_uploads=len_abs_uploads)
return jsonify(json)
## Priyavarthana
# for backoffice mail sending function
@app.route('/submitted_mail_view/<abs_id>/<user_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def SubmittedMailView(abs_id,user_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
abs_type= data['abs_type']
authors = AbstractModel().get_authors(abs_id,confData.get('conf_schema'))
data2 = AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))
data3 = AbstractModel().fp_authors_for_email(abs_id,confData.get('conf_schema'))
abs_awards = AbstractModel().get_abs_award_v1(conf_id,abs_type,abs_id)
award_title = {}
awards = {}
abs_parent_ids = []
if abs_awards:
for i in abs_awards:
if i['abs_id']:
abs_parent_ids.append(i['parent_id'])
for item in abs_awards:
if item["is_parent"] == 1:
if item["award_id"] in abs_parent_ids:
award_title[item['award_id']] = item["award_name"]
else:
if item["abs_id"] != None:
awards[item["parent_id"]] = [item] + awards.get(item["parent_id"],[])
for i in data3:
template_name = data['abs_type']+'_submit_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
sub_data = {'abs_type':data['abs_type'],'abs_no':str(data['abs_no']),'conf_name': confData['conf_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
email = i["email"]
if int(conf_id)==32:
mail_data = {'mail_content': mailData.mail_content,'data': data,'data1':authors,'confData':confData,'data2':data2,'awards':awards,'award_title':award_title}
else:
mail_data = {'mail_content': mailData.mail_content,'data': data,'data1':authors,'confData':confData,'data2':data2}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
return render_template('backoffice/email/submitted_mail_view.html',conf_id=conf_id,conf_key=conf_key,confData=confData,mail_content=mail_content,subject=subject,data=data)
@app.route('/submitted_mail/<abs_id>/<user_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def SubmittedMail(abs_id,user_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
authors = AbstractModel().get_authors(abs_id,confData.get('conf_schema'))
data2 = AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))
data3 = AbstractModel().fp_authors_for_email(abs_id,confData.get('conf_schema'))
abs_awards = AbstractModel().get_abs_award_v1(conf_id,data['abs_type'],abs_id)
if abs_awards:
award_title = {}
awards = {}
abs_parent_ids = []
for i in abs_awards:
if i['abs_id']:
abs_parent_ids.append(i['parent_id'])
for item in abs_awards:
if item["is_parent"] == 1:
if item["award_id"] in abs_parent_ids:
award_title[item['award_id']] = item["award_name"]
else:
if item["abs_id"] != None:
awards[item["parent_id"]] = [item] + awards.get(item["parent_id"],[])
else:
awards = None
award_title = None
if request.method =="POST":
email = request.form['sample_email']
template_name = data['abs_type']+'_submit_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
sub_data = {'abs_type':data['abs_type'],'abs_no':str(data['abs_no']),'conf_name': confData['conf_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
# if int(conf_id)==32:
mail_data = {'mail_content': mailData.mail_content,'data': data,'data1':authors,'confData':confData,'data2':data2,'awards':awards,'award_title':award_title}
# else:
# mail_data = {'mail_content': mailData.mail_content,'data': data,'data1':authors,'confData':confData,'data2':data2}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
# subject = "SAMPLE : " + subject
html = render_template('users/email/mail_template.html',is_layout=mailData.is_layout,mail_content=mail_content,confData=confData,conf_id=conf_id,conf_key=conf_key)
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
flash("Successfully sent sample mail","successMsg")
else:
for i in data3:
template_name = data['abs_type']+'_submit_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
sub_data = {'abs_type':data['abs_type'],'abs_no':str(data['abs_no']),'conf_name': confData['conf_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
email = i["email"]
# if int(conf_id)==32:
mail_data = {'mail_content': mailData.mail_content,'data': data,'data1':authors,'confData':confData,'data2':data2,'awards':awards,'award_title':award_title}
# else:
# mail_data = {'mail_content': mailData.mail_content,'data': data,'data1':authors,'confData':confData,'data2':data2}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/mail_template.html',is_layout=mailData.is_layout,mail_content=mail_content,confData=confData,conf_id=conf_id,conf_key=conf_key)
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
flash("Successfully sent mail","successMsg")
return redirect(url_for('backoffice.SubmittedMailView',abs_id=abs_id,user_id=user_id,conf_id=conf_id,conf_key=conf_key))
# end
#vimal
#find abstract
@app.route('/abstract/find_abstract/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Find_Abstract(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
get_abs_types=BoModel().get_abs_types(conf_id,confData.get('conf_schema'))
session.pop('category',None)
return render_template ('backoffice/abstract/find_abstract.html',conf_id=conf_id,conf_key=conf_key,get_abs_types=get_abs_types)
@app.route('/get_abstract/<conf_id>/<conf_key>',methods=["POST"])
def Get_Abstract(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type=request.values.get('abs_type') or None
abs_no =request.values.get('abs_no') or None
get_abst=BoModel().find_abs(conf_id,abs_type,abs_no,confData.get('conf_schema'))
html_data=render_template('backoffice/abstract/find_abs_table.html',conf_id=conf_id,conf_key=conf_key,get_abst=get_abst)
data={'html_data':html_data,'msg':'success','status':1}
json_data = json.dumps(data,default = str)
return json_data
# end find_abstract
# Evaluation summary
@app.route('/view_evaluation_summary/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def ViewEvaluationSummary(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_types = BoModel().get_abs_type_for_eva(conf_id,confData.get('conf_schema'))
abs_type = ""
eval_abs_types = BoModel().get_eva_abs_type_for_eva(conf_id)
data = {}
if request.method == "POST":
abs_type = request.values['ddlAbstractType']or None
eva_abs_type = request.values['ddlevaAbstractType']or None
cat_id = request.values['ddlCategory']or None
export_file = request.values.get("export_file") or None
data = BoModel().get_evaluation_summary_data(eva_abs_type,conf_id,cat_id)
for index,value in enumerate(data) :
if index == 0:
data_1 = value
if index == 1:
data_2 = value
if index == 2:
evaluator = value
if export_file=="csv":
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
output = io.StringIO()
writer = csv.writer(output)
full_name=[]
for r in evaluator:
f_name=r['full_name']
full_name.append(f_name)
line = ['S.No','Abstract Type','Abstract Id', 'Title']+full_name
writer.writerow(line)
sno_val = 0
for row in data_1:
sno_val = sno_val +1
marks=[]
for m in data_2:
if m['abs_id'] == row['abs_id']:
mark=m['marks_total']
marks.append(mark)
line = [sno_val ,row['abs_no'],row['abs_id'],row['title'] ] + marks
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+confData['conf_name']+"Evaluation_summary_Report"+str(date)+".csv"})
if export_file=='xl' :
# all_categories = UserModel().get_categories_v1(abs_type,conf_id)
abstracts = defaultdict(list)
evaluator_list = defaultdict(list)
marks_list = defaultdict(list)
categories = []
for r in data_1:
abstracts[r["cat_name"]].append(r)
if r["cat_name"] not in categories:
categories.append(r["cat_name"])
for r in data_2:
marks_list[r["cat_name"]].append(r)
for r in evaluator:
evaluator_list[r["cat_name"]].append(r)
output = io.BytesIO()
Workbook =xlwt.Workbook()
for cat in categories:
full_name=[]
for r in evaluator_list[cat]:
f_name = r['full_name']
full_name.append(f_name)
if abs_type == "IC":
eva_length = len(full_name)+7
col_name = ["Abs no","Presentation type","Title","Chief instrutor","Membership No","Email","Mobile"]+full_name + ["Total","Average"]
export_columns = ["abs_no","presenting_type","title","presenting_author","presenting_membershipno","presenting_email","presenting_mobile"] + full_name + ["total_marks","percentage"]
else:
eva_length = len(full_name)+7
col_name = ["Abs no","Presentation type","Title","Presenting author","Membership No","Email","Mobile"]+full_name + ["Total","Average"]
export_columns = ["abs_no","presenting_type","title","presenting_author","presenting_membershipno","presenting_email","presenting_mobile"] + full_name + ["total_marks","percentage"]
marks_dict = defaultdict(list) # sub list with key
for r in marks_list[cat]:
marks_dict[r["e_full_name"]].append(r)
if cat :
sheet_name = cat.replace("/","").strip()
else :
sheet_name = "Sheet1"
sheet_name = sheet_name[:25] + '..' * (len(sheet_name) > 25)
sh = Workbook.add_sheet(sheet_name)
idx = 0
a = 0
sh.row(0).height = 20*30
sh.col(2).width = int(65 * 300)
t_style=xlwt.easyxf('alignment: wrap True;''pattern: pattern solid,fore_colour yellow;' 'font: colour black, bold True, name Calibri, height 230; align: vert centre, horiz centre;border: left thin,right thin,top thin,bottom thin')
for row in col_name:
sh.write(0,a,row,style=t_style)
sno_val = 0
a+=1
total_eva = len(full_name)+11
col_len = len(export_columns)
ce = len(full_name)
style = xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour yellow;' 'font: colour black, bold True, name Calibri, height 200; align: vert centre, horiz centre;border: left thin,right thin,top thin,bottom thin')
style_1 = xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour white;' 'font: colour black, name Calibri, height 200;border: left thin,right thin,top thin,bottom thin')
style_2 = xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour white;' 'font: colour black, name Calibri, height 200; align: vert centre, horiz centre;border: left thin,right thin,top thin,bottom thin')
alpaindex = {0:'C',1:'D',2:'E',3:'F',4:'G',5:'H',6:'I',7:'J',8:'K',9:'L',10:'M',11:'N',12:'O',13:'P',14:'Q',15:'R',16:'S',17:'T',18:'U',19:'V',20:'W',21:'X',22:'Y',23:'Z',24:'AA',25:'AB',26:'AC',27:'AD',28:'AE',29:'AF',30:'AG',
31:'AH',32:'AI',33:'AJ',34:'AK',35:'AL',36:'AM',37:'AN',38:'AO',39:'AP',40:'AQ',41:'AR',42:'AS',43:'AT',44:'AU',45:'AV',46:'AW',47:'AX',49:'AY',50:'AZ',51:'BA',52:'BB',53:'BC',54:'BD',55:'BE',56:'BF',57:'BG',58:'BH',59:'BI',60:'BJ',61:'BK',62:'BL',63:'BM',64:'BN',65:'BO'}
for data in abstracts[cat]:
b=0
c=0
d=0
for i in export_columns:
if int(col_len) >= int(c):
if c > 6 :
if int(c) < int(eva_length):
for j in marks_dict[i]:
if data['abs_id'] == j["abs_id"]:
if data["pa_user_id"] == j["eva_user_id"]:
sh.write(idx+1, b, 'N/A',style=style)
else:
sh.write(idx+1, b, j["marks_total"],style=style_2)
d+=1
else:
if i == 'total_marks':
sh.write(idx+1, b,xlwt.Formula("SUM(H"+str(idx+2)+":"+ alpaindex[ce+4] +str(idx+2)+")"),style=style_2)
else:
if data['evaluated']:
sh.write(idx+1, b,xlwt.Formula(alpaindex[ce+5]+str(idx+2)+"/"+str(data['evaluated'])),style=style_2)
else:
sh.write(idx+1, b,"",style=style_2)
else:
sh.write(idx+1, b, data[i],style=style_1)
b+=1
if int(total_eva) == d:
c = 0
d = 0
else:
c+=1
else:
c = 0
d = 0
b=0
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+abs_type+"Evaluation_summary_Report-"+str(date)+".xls"})
abs_eval_marks = {}
if data_2:
for m in data_2:
mkey = f"{m.get('abs_id')}-{m.get('eva_user_id')}"
abs_eval_marks[mkey] = {'abs_id':m.get('abs_jd') ,'marks_total':m.get('marks_total')}
return render_template('backoffice/val/evaluation_summary.html',abs_types=abs_types,conf_id=conf_id,conf_key=conf_key,data_1=data_1,abs_type=abs_type,cat_id=cat_id,evaluator=evaluator,data_2=data_2,eva_abs_type=eva_abs_type,eval_abs_types=eval_abs_types,abs_eval_marks=abs_eval_marks)
return render_template('backoffice/val/evaluation_summary.html',abs_types=abs_types,conf_id=conf_id,conf_key=conf_key,eval_abs_types=eval_abs_types)
def insert_and_delete_award(award_list,abs_id):
# abs_id = unquote(abs_id)
# abs_id = int(Cryptography.decrypt(abs_id))
old_award_data = AbstractModel().get_old_awardlist(abs_id)
new_award_data = award_list
insert_award_data = new_award_data
delete_award = []
if old_award_data:
for j in old_award_data:
delete_award.append(str(j["award_id"]))
if str(j["award_id"]) in new_award_data:
delete_award.remove(str(j["award_id"]))
insert_award_data.remove(str(j["award_id"]))
if new_award_data:
insert_award_data = new_award_data
AbstractModel().insert_awardlist(insert_award_data,abs_id)
if delete_award:
delete_award = ",".join(delete_award)
AbstractModel().delete_awardlist(delete_award,abs_id)
return "success"
# End of evaluation summary
@app.route('/standyprint/<conf_id>/<conf_key>',methods=["GET"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Standy_Print(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
if start_date and end_date:
start_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date,'%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt.strftime("%Y-%m-%d"))
hall_data = BoModel().get_halls(conf_id)
return render_template('backoffice/abstract/print_abstracts/standy_print.html',conf_id=conf_id,conf_key=conf_key,confe_date=confe_date,hall_data=hall_data)
@app.route('/standyprint/<conf_id>/<conf_key>',methods=["POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Standy_Print_post(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
date_wise = request.values.get('ddl_date') or 'null'
hall_wise = request.values.get('ddl_hall') or 'null'
hall_date_data = BoModel().get_session_date_and_hall_wise(date_wise,hall_wise,conf_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/print_abstracts/standy_print_page.html',conf_id=conf_id,conf_key=conf_key,hall_date_data=hall_date_data)
@app.route('/upload_status/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def UploadStatus(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
status_data = AbstractModel().get_upload_status_data(conf_id,confData.get('conf_schema'))
status = request.values.get('status') or 'All'
selection_type = request.values.get('selection_type') or '2,3,4,26,23,11,44,45,46,47,49,50,51,52,53,5,24,10,61'
data = AbstractModel().get_upload_data_by_status(conf_id,status,selection_type,confData.get('conf_schema'))
return render_template('backoffice/abstract/uploadstatus/uploadstatus_index.html',status_data=status_data,data=data,conf_id=conf_id,conf_key=conf_key,selection_type=selection_type,status=status)
# mail_fulltext_reminder
# /abstract/mail_fulltext_reminder/
@app.route('/abstract/mail_fulltext_reminder/<btn_val>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Mail_Fulltext_reminder(btn_val,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
checkbox = request.values.getlist('chk_send_reminder')
abs_ids = ",".join(checkbox)
if abs_ids :
mail_ids = BoModel().get_mail_ids_by_abs_id_v1(abs_ids,confData.get('conf_schema'))
template_name = "eposter_reminder_mail"
mailData = UserModel().get_mail_templates(template_name,conf_id)
if mailData:
if mailData.subject:
sub_data = {'conf_name':confData['conf_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
else:
subject = confData['conf_name']+" - Gental reminder for full text upload"
if btn_val == "0" :
if mail_ids:
for i in mail_ids:
name = i["full_name"]
email = i["email"]
if i["abs_status_id"] == 2:
mail_data = {
'mail_content': mailData.mail_content,
'data' : i,
'confData':confData
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
data = {'msg':'Mail sent successfully'}
return jsonify()
else:
email = request.values["test_mail_id"]
for i in mail_ids:
name = i["full_name"]
email = email
if i["abs_status_id"] == 2:
mail_data = {
'mail_content':mailData.mail_content,
'data' : i,
'confData':confData
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
data = {'msg':'Test mail sent successfully'}
return jsonify(data)
else:
data = {'msg':'Please add mail content'}
return jsonify(data)
return jsonify(1)
# For sending mail in report page
@app.route('/report/send_mail/<mail_template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def ReportSendMail(mail_template_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
mailData = BoModel().getMailTemplateId(conf_id,mail_template_id)
to_mail_role_ids = request.values.get('to_mail_role_id',None)
to_mail_role_ids = to_mail_role_ids.split(',') if to_mail_role_ids else []
cc_mail_role_ids = request.values.get('cc_mail_role_id')
cc_mail_role_ids = cc_mail_role_ids.split(',') if cc_mail_role_ids else []
abs_ids = request.values.get('selected_mail_ids',None)
# abs_ids = abs_ids.split(',') if abs_ids else None
user_ids = None
abs_status_ids = None
is_test = request.values.get('is_test',None)
is_preview = request.values.get('is_preview',None)
results = BoModel().usp_get_abstracts(conf_id,user_ids,abs_ids,abs_status_ids)
for index,value in enumerate(results):
if index == 0:
db_abstract = value
if index == 1:
db_abstopic = value
abstopics_lst = {}
if db_abstopic:
for abstopic in db_abstopic:
abstopics_lst[abstopic['abs_id']] = (abstopics_lst[abstopic['abs_id']] if abstopics_lst.get(abstopic['abs_id'],None) else [] ) + [abstopic]
if db_abstract:
for absData in db_abstract:
absData['topics'] = abstopics_lst.get(absData['abs_id'],[])
mailData['TO'] = []
mailData['CC'] = []
if is_test and int(is_test) ==1:
mailData['TO'] = to_mail_role_ids
if cc_mail_role_ids:
mailData['CC'] = cc_mail_role_ids
else:
for item in absData['topics']:
if to_mail_role_ids:
if str(item['role_id']) in to_mail_role_ids:
mailData['TO'].append(item["email"])
if cc_mail_role_ids:
if str(item['role_id']) in cc_mail_role_ids:
mailData['CC'].append(item["email"])
sub_data = {'abs_type':absData['abs_type'],'abs_no':str(absData['abs_no']),'conf_name':confData['conf_name']}
subject = Helper.merge_tags(mailData['subject'],sub_data)
chiefins,coins,chiefauthor,presauthor,coauthor,others = Helper.get_role_data(absData)
mail_data = {
'mail_content': mailData['mail_content'],
'absData' : absData,
'chiefauthor' : chiefauthor,
'presauthor' : presauthor,
'coauthor' : coauthor,
'confData' : confData,
'chiefins' : chiefins,
'coins' : coins
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/mail_template.html',is_layout=mailData['is_layout'],mail_content=mail_content,confData=confData)
if is_preview and int(is_preview)==1:
data = {'html':html}
else:
msg = 'Mail sent successfully'
data = {'msg':msg}
EMAIL.sendMail_v2(subject,html,mailData,conf_id)
return jsonify(data)
@app.route('/session_clash/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def SessionClash(conf_id,conf_key):
if request.method == 'POST':
btn_value = request.values.get('btn_val')
if btn_value == 'Export':
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
results = BoModel().usp_abs_session_clash(conf_id)
output = io.StringIO()
writer = csv.writer(output)
line = ['S.No', 'Role', 'Name', 'Email','Mobile' ,'Hall', 'Start Date','End Date','Title']
writer.writerow(line)
sno_val = 0
for row in results:
if row['abs_no'] and row['title'] :
abs_title = row['abs_no'] +"-"+row['title']
else:
abs_title = row['title']
sno_val = sno_val +1
line = [sno_val ,row['role'],row['full_name'], row['email'],row['mobile'],row['hall'],row['start_date'],row['end_date'],abs_title]
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+conf_key+"_session_clash"+str(date)+".csv"})
else:
results = BoModel().usp_abs_session_clash(conf_id)
user_count = defaultdict(list) # sub list with key
for r in results:
user_count[r["user_id"]].append(r)
return render_template('backoffice/abstract/session_clash.html',data=results,conf_id=conf_id,conf_key=conf_key,user_count=user_count)
@app.route('/custome_user_abs_type/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def Custome_user_abs_type(conf_id,conf_key):
get_abstrcts = BoModel().get_abstract_custome(conf_id)
get_costom_users = BoModel().get_costom_user(conf_id)
return render_template('backoffice/custome_abs_users/cus_user_list.html',get_abstrcts=get_abstrcts,conf_id=conf_id,conf_key=conf_key,costom_users=get_costom_users)
@app.route('/save_costom_user/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def Post_Custome_user_abs_type(conf_id,conf_key):
user_name = request.values.get('user_name')
user_email = request.values.get("user_email")
user_abstract = request.values.getlist("user_abstract[]")
start_date = request.values.get("start_date")
end_date = request.values.get("end_date")
cu_abs_type_id = request.values.get("cu_abs_type_id")
society_id = Auth.get_conference(conf_id).get('society_id')
if user_abstract:
user_abstract = ",".join([str(item) for item in user_abstract])
data = {
'abs_type_ids':user_abstract,
'conf_id':conf_id,
'start_date':start_date,
'end_date':end_date,
}
if cu_abs_type_id and int(cu_abs_type_id) != 0 :
BoModel().update_costom_user(data,cu_abs_type_id)
else:
BoModel().insert_custom_user(data,user_email,user_name,society_id)
return "success"
@app.route('/delete_costom_user/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def delete_costom_user(conf_id,conf_key):
cu_abs_type_id = request.values.get("cu_abs_type_id")
BoModel().delete_costom_user(cu_abs_type_id)
return "success"
@app.route('/user_invite_letter/<user_id>',methods=["GET","POST"])
@app.route('/user_invite_letter/<user_id>/<is_base64>',methods=["GET","POST"])
def UserInviteLetter(user_id,user = None,is_base64 = 0):
user = user if user else UserModel().get_user_data(user_id)
if user:
now = datetime.now()
dt_string = now.strftime("%d-%b-%Y")
html = render_template('backoffice/custom_template/SZTNAOI_2023_invitation_letter.html',user=user,dt_string=dt_string)
# return html
options = {
'dpi': 72,
# 'page-size': 'A4',
'page-height': '178.22mm',
'page-width': '118mm',
'margin-top': '0.0in',
'margin-right': '0.0in',
'margin-bottom': '0.0in',
'margin-left': '0.0in',
"enable-local-file-access": ""
}
if is_windows_os == 1:
config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
else:
config = None
pdf_file = pdfkit.from_string(html,False, options=options,configuration=config)
print("pdf_file - ",type(pdf_file))
if is_base64 == 1:
# return {'content': base64.b64encode(pdf_file).decode('ascii'), 'type': 'application/pdf', 'name': str(user['prefix'] or '') + str(user['full_name'])+"-invite-letter.pdf"}
return {'content': pdf_file, 'type': 'application/pdf', 'name': str(user['full_name'])+"-invitation.pdf"}
else:
return Response(pdfkit.from_string(html, options=options),
mimetype="application/pdf",
headers={"Content-Disposition":
"attachment;filename="+str(user['full_name'])+"-invitation.pdf"+""})
else:
return "Invalid url"
@app.route('/send_user_invite_letter/<conf_id>/<conf_key>/<user_id>',methods=["GET","POST"])
@RouteGroup.conf_required
def SendUserInviteLetter(conf_id,conf_key,user_id):
user = UserModel().get_user_data(user_id)
confData = Auth.get_conference(conf_id)
if user:
attachmentData = UserInviteLetter(user['user_id'],user,1)
# return jsonify(attachmentData)
subject = str(user['prefix'] or '') + str(user['full_name']) + "SZTNAOI Invite Letter"
to = "sridharan.r@numerotec.com"
html = "SZTNAOI Invite Letter"
mailData = {
'TO' : to
}
EMAIL.sendMail_v2(subject,html,mailData,conf_id,confData,attachmentData)
return "success"
else:
return "Invalid url"
@app.route('/mainbookprint/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Print_main_book(conf_id,conf_key):
data = BoModel().get_book_print_abstracts_data_v1(None,None,conf_id,1)
session_data = data[0]
abs_data_db = data[1]
topics_data_db = data[2]
judge_data_db = data[3]
abstract_data = defaultdict(list)
topics_data = defaultdict(list)
judge_data = defaultdict(list)
for r in abs_data_db:
abstract_data[r["abs_session_id"]].append(r)
for r in topics_data_db:
topics_data[r["abs_session_id"]].append(r)
for r in judge_data_db:
judge_data[r["abs_session_id"]].append(r)
# return jsonify(data)
return render_template('backoffice/abstract/print_abstracts/bookprint/abstractbookprint.html',conf_id=conf_id,conf_key=conf_key,session_data=session_data,abstract_data=abstract_data,topics_data=topics_data,judge_data=judge_data)
@app.route('/marksheet_label_index/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def marksheet_label_index(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
# abs_types = BoModel().get_abs_type(conf_id)
# session_data = BoModel().get_abs_session(conf_id,None)
session_types = BoModel().get_session_by_selection_types(None,conf_id,confData.get('conf_schema'))
selection = BoModel().get_session_selection_types(conf_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/abs_marksheets/marksheet_label_index.html',conf_id=conf_id,conf_key=conf_key,session_types=session_types,selection=selection)
@app.route('/post_marksheet_label_index/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Post_Marksheet_label_print(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get('abs_type')
session_type = request.values.getlist('session_type')
session_type = ','.join(session_type)
data = BoModel().get_abs_session_with_judges(conf_id,abs_type,session_type,confData.get('conf_schema'))
judge_data = defaultdict(list)
session_data = []
session_ids = []
if data:
for r in data:
judge_data[r["abs_session_id"]].append(r)
if not (r['abs_session_id'] in session_ids):
session_data.append(r)
session_ids.append(r['abs_session_id'])
return render_template('backoffice/abstract/abs_marksheets/marksheet_label_print.html',conf_id=conf_id,conf_key=conf_key,session_data=session_data,judge_data=judge_data)
@app.route('/print_physical_poster/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def print_physical_poster(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abstract_data = BoModel().get_physical_poster_abs(conf_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/print_abstracts/print_physical_poser.html',conf_id=conf_id,conf_key=conf_key,abstract_data=abstract_data)
@app.route('/update_usersdata/<society_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def UpdateUsersData(society_id,conf_id,conf_key):
user_id = request.values.get('user_id')
prefix = request.values.get('prefix') or None
full_name = request.values.get('full_name') or None
email = request.values.get('email') or None
mobile = request.values.get('mobile') or None
dob = request.values.get('dob') or None
status = 2
if email:
total_count = UserModel().count_email(user_id,email,society_id)
if total_count and int(total_count[0]) > 0 :
msg="Email id already exist with someone"
status = 1
if mobile:
mobile_count = UserModel().get_mobile_count(mobile,user_id,society_id)
if mobile_count and int(mobile_count) > 0 :
msg="Mobile number already exist with someone"
status = 1
if int(status) != 1:
data = {
'full_name' : full_name,
'prefix' : prefix,
'email' : email,
'mobile' : mobile,
'dob' : dob,
'updated_at' : datetime.now()
}
status = 2
output = UserModel().update_member(user_id,data)
msg ="Successfully updated"
data = { "msg" : msg ,"status" :status}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/addnewuser/<society_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def AddNewUser(society_id,conf_id,conf_key):
return render_template('backoffice/add_newuser.html',conf_id=conf_id,conf_key=conf_key,society_id=society_id,limit=2)
@app.route('/get_add_table/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def GetAddTable(conf_id,conf_key):
total_row = request.values.get('limit')
start = request.values.get('start')
lst = []
html_data = render_template('backoffice/add_newuser_table.html',start=int(start),limit=int(total_row),conf_id=conf_id,conf_key=conf_key,lst=lst)
data = { "html_data":html_data}
json_data = json.dumps(data,default=str)
return json_data
@app.route('/insert_new_users/<society_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def InsertNewUsers(society_id,conf_id,conf_key):
full_name = request.values.get('full_name') or None
email = request.values.get('email') or None
mobile = request.values.get('mobile') or None
email_data = UserModel().check_email(email,society_id)
mobile_data = UserModel().check_mobile(mobile,society_id)
_blank = "_blank"
if email_data :
link = url_for('backoffice.ViewUser',user_id=email_data.user_id,conf_id=conf_id,conf_key=conf_key)
msg = "Email id already exist with someone,<a href ="+link+" target="+_blank+" > View that Member</a>"
status = 1
elif mobile_data :
link = url_for('backoffice.ViewUser',user_id=mobile_data.user_id,conf_id=conf_id,conf_key=conf_key)
msg="Mobile number already exist with someone,<a href ="+link+" target="+_blank+" > View that Member</a>"
status = 1
else:
data = {
'society_id' : society_id,
'prefix' : 'Dr.',
'full_name' : full_name,
'email' : email,
'mobile' : mobile,
'created_at' : datetime.now()
}
status = 2
output = BoModel().insert_users(data)
msg ="Successfully inserted"
data = { "msg" : msg ,"status" :status}
return json.dumps(data,default=str)
@app.route('/download_csv_file/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def DownloadCSVFile(conf_id,conf_key):
output = io.StringIO()
writer = csv.writer(output)
line = ['Full Name', 'Email','Mobile']
writer.writerow(line)
line = []
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename=""sample.csv" })
@app.route('/upload_csv_file/<society_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def UploadCSVFile(society_id,conf_id,conf_key):
file = request.files.get('file')
start = request.values.get('start')
limit = 0
col_names = ['Full Name', 'Email','Mobile']
csvData = pd.read_csv(file,names=col_names, header=None)
lst = []
status = 1
for index,row in csvData.iterrows():
if index == 0:
if row[0] == col_names[0] and row[1] == col_names[1] and row[2] == col_names[2]:
msg=""
else:
msg="The column names mismatch in the CSV file, Please use the sample.csv format"
status = 2
else:
if status != 2:
data = {}
data['full_name']=row['Full Name']
data['email']=row['Email']
data['mobile']=row['Mobile']
lst.append(data)
else:
pass
limit = int(len(lst))
html_data = render_template('backoffice/add_newuser_table.html',limit=limit,start=int(start),conf_id=conf_id,conf_key=conf_key,lst=lst)
data = { "html_data" : html_data,"status":status ,'msg':msg}
return json.dumps(data,default=str)
@app.route('/upload_new_attachemnt/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def UploadNewAttachement(conf_id,conf_key):
selection_type = BoModel().get_selection_type(abs_type=None)
upload_selection = BoModel().get_selected_upload_abstract(conf_id)
return render_template('backoffice/abstract/uploadstatus/upload_new_attachment.html',conf_id=conf_id,conf_key=conf_key,selection_type=selection_type,upload_selection=upload_selection)
@app.route('/get_abstract_for_upload/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def getAbstractForUpload(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
selection_type_id = request.values.get('selection_type_id')
selection_type_id = selection_type_id.split("-")
if selection_type_id[0]:
results = BoModel().get_selected_abstacts(conf_id,selection_type_id[0],confData.get('conf_schema'))
else:
results = ''
return jsonify(results)
@app.route('/get_uploaded_image/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def getUploadedImage(conf_id,conf_key):
abs_id = request.values.getlist('abs_id')
abs_id = ",".join(abs_id)
img_type = request.values.get('img_type')
abs_type = request.values.get('abs_type')
upload_selection = BoModel().get_abstract_typebyabstype(conf_id,abs_type)
results = BoModel().get_uploaded_image_type(abs_id,img_type)
html = render_template('backoffice/abstract/uploadstatus/upload_image_div.html',conf_id=conf_id,conf_key=conf_key,img=results,upload_data=upload_selection)
data = {'html':html}
return json.dumps(data,default=str)
@app.route('/add_halls/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def AddHalls(conf_id,conf_key):
return render_template('backoffice/abstract/AddNew_halls/add_newhalls.html',conf_id=conf_id,conf_key=conf_key)
#Get all halls data
@app.route('/get_all_hall_list/<conf_id>/<conf_key>', methods = ["GET","POST"])
def getAllHallList(conf_id,conf_key):
halls_data = BoModel().get_halls(conf_id)
return render_template('backoffice/abstract/AddNew_halls/add_newhalls_table.html',halls_data = halls_data,conf_id=conf_id,conf_key=conf_key)
@app.route('/insert_halls/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def InsertHalls(conf_id,conf_key):
hall_id = request.values.get('hall_id')
name = request.values.get('hall_name')
order_no = request.values.get('order_no')
hallname_data = BoModel().check_hall_exist_or_not(name,hall_id,conf_id)
orderno_data = BoModel().check_orderno_exist_or_not(order_no,hall_id,conf_id)
if hallname_data:
data = {'msg':'Hall Name already exists','status':2}
elif orderno_data:
data = {'msg':'Order number already exists','status':2}
else:
data = {'name':name,'order_no':order_no,'conf_id':conf_id,'created_at':datetime.now(),'updated_at': datetime.now()}
result = BoModel().insert_update_halls(conf_id,hall_id,data)
html = render_template('backoffice/abstract/AddNew_halls/add_newhalls_table.html',halls_data = result,conf_id=conf_id,conf_key=conf_key)
if int(hall_id) > 0 :
msg = 'Updated Successfully'
else:
msg = "Inserted Successfully"
data = {'html':html,'msg':msg,'status':1}
return json.dumps(data,default=str)
@app.route('/delete_halls/<conf_id>/<conf_key>',methods = ["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def deleteHalls(conf_id,conf_key):
hall_id = request.values.get('hall_id')
BoModel().delete_halls(hall_id)
halls_data = BoModel().get_halls(conf_id)
return render_template('backoffice/abstract/AddNew_halls/add_newhalls_table.html',halls_data = halls_data,conf_id=conf_id,conf_key=conf_key)
@app.route('/get_halls/<conf_id>/<conf_key>',methods = ["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def getHalls(conf_id,conf_key):
hall_id = request.values.get('hall_id')
hall_data = BoModel().get_hall_by_hall_id(hall_id)
return json.dumps(hall_data)
@app.route('/evaluation_template/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def EvaluationTemplate(conf_id,conf_key):
eva_template = BoModel().get_evaluation_template(conf_id)
return render_template('backoffice/settings/evaluation_template/eva_template_index.html',conf_id=conf_id,conf_key=conf_key,eva_template=eva_template)
@app.route('/view_evaluation_template/<template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def ViewEvaluationTemplate(template_id,conf_id,conf_key):
eva_template_data = BoModel().get_evaluation_template_by_id(template_id)
return render_template('backoffice/settings/evaluation_template/view_eva_template.html',conf_id=conf_id,conf_key=conf_key,eva_template_data=eva_template_data)
@app.route('/edit_eva_template/<template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def EditEvaTemplate(template_id,conf_id,conf_key):
eva_template_data = BoModel().get_evaluation_template_by_id(template_id)
return render_template('backoffice/settings/evaluation_template/edit_eva_template.html',conf_id=conf_id,conf_key=conf_key,eva_template_data=eva_template_data)
@app.route('/post_edit_eva_template/<template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def PostEditEvaTemplate(template_id,conf_id,conf_key):
abs_type = request.values.get('abs_type')
template_name = request.values.get('template_name')
template_data = request.values.get('template_data')
data = {
'abs_type' : abs_type,
'template_name' : template_name,
'template_data' : template_data,
'conf_id' : conf_id
}
BoModel().insert_update_evaluation_template(data,template_id)
return redirect(url_for('backoffice.EditEvaTemplate',conf_id=conf_id,conf_key=conf_key,template_id=template_id))
@app.route('/add_new_evaluation_template/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def AddNewEvaluationTemplate(conf_id,conf_key):
data = {'conf_id':conf_id}
template_id = BoModel().insert_update_evaluation_template(data,template_id=None)
return redirect(url_for('backoffice.PostEditEvaTemplate',conf_id=conf_id,conf_key=conf_key,template_id=template_id))
@app.route('/delete_eva_template/<template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def DeleteEvaTemplate(template_id,conf_id,conf_key):
BoModel().delete_eva_template(template_id)
flash('Deleted successfully','errorMsg')
return redirect(url_for('backoffice.EvaluationTemplate',conf_id=conf_id,conf_key=conf_key))
@app.route('/duplicate_eva_template/<template_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def DuplicateEvaTemplate(template_id,conf_id,conf_key):
data = BoModel().get_evaluation_template_by_id(template_id)
datas = {
'template_name' : str(data['template_name'])+str( ' - Duplicate'),
'abs_type' : data['abs_type'],
'template_data' : data['template_data'],
'conf_id' : conf_id
}
BoModel().insert_update_evaluation_template(datas,template_id=None)
return redirect(url_for('backoffice.EvaluationTemplate',conf_id=conf_id,conf_key=conf_key))
@app.route('/generate_sp/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def generateSP(conf_id,conf_key):
return render_template('backoffice/generate_sp.html',conf_id=conf_id,conf_key=conf_key)
@app.route('/post_generate_sp/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def postGenerateSP(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
generate_btn = request.values.get('generate_btn')
# print("generate_btn>>>",generate_btn)
if (generate_btn=="e_abstract"):
get_generated_eabstract = BoModel().get_e_abstracts(conf_id)
flash("Generate E-abstract successfully","successMsg")
elif(generate_btn=="av_code"):
get_generated_av_code= BoModel().get_avcode(conf_id)
flash("Generate Avcode successfully","successMsg")
elif(generate_btn=="agenda"):
get_generated_agenda= BoModel().get_agenda(conf_id)
flash("Generate Agenda successfully","successMsg")
elif(generate_btn=="certificate"):
get_generated_agenda= BoModel().get_certificate(conf_id)
flash("Generate Certificate successfully","successMsg")
elif(generate_btn=="badge_commitment"):
get_generated_agenda= BoModel().get_badge(conf_id)
flash("Generate Badge successfully","successMsg")
elif(generate_btn=="whatsapp_commitment"):
data= BoModel().get_whatsapp_commitment(conf_id)
output = io.BytesIO()
Workbook = xlwt.Workbook()
col_name = ["Name","Email","Mobile","Membership","Session_date","Session_time","Hall","Message"]
session_date = defaultdict(list)
date =[]
for i in data:
session_date[i["sess_date"].strftime("%d-%m-%Y")].append(i)
if i["sess_date"].strftime("%d-%m-%Y") not in date:
date.append(i["sess_date"].strftime("%d-%m-%Y"))
# print(date)
export_columns = ["full_name","email","mobile","membership_no","sess_date","sess_time","hall","message"]
for d in date:
sh = Workbook.add_sheet(d)
idx = 0
a = 0
for row in col_name:
sh.write(0,a,row)
sno_val = 0
a+=1
b=0
sno_val = 0
for row in session_date[d]:
for i in export_columns:
if i == "sess_date":
sh.write(idx+1, b, row[i].strftime("%d-%m-%Y"))
else:
sh.write(idx+1, b, row[i])
b+=1
b=0
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+confData['conf_name']+"Datewise_Whatsapp_Committment_Report-"+str(date)+".xls"})
# print(date)
else:
return render_template('backoffice/generate_sp.html',conf_id=conf_id,conf_key=conf_key)
return render_template('backoffice/generate_sp.html',conf_id=conf_id,conf_key=conf_key)
@app.route('/view_commitment_with_delegate_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def ViewCommitmentWithDelegateData(conf_id,conf_key):
s_abs_types = request.values.getlist('abs_type') or None
is_delegate = request.values.get('is_delegate') or None
role_id = request.values.getlist('role_id') or None
btn_page = request.values.get('form_submit',None)
if role_id:
role_id = (','.join(str(e) for e in role_id))
role_ids = role_id.split(",")
role_id_int = list(map(int,role_ids))
else:
role_id_int = None
if s_abs_types:
abs_types_str = ("','".join(s_abs_types))
abs_types_str = "'"+abs_types_str+"'"
else:
abs_types_str = None
abs_roles = BoModel().get_role_for_desigination()
# print("SP Pram - ",conf_id,abs_types_str,role_id,is_delegate)
commitment_data = BoModel().usp_get_delegate_commitment(conf_id,abs_types_str,role_id,is_delegate)
if commitment_data:
for index,value in enumerate(commitment_data) :
if index == 0 :
abs_data = value
if index == 1 :
abs_types = value
if btn_page == "Export Excel":
output = io.BytesIO()
Workbook =xlwt.Workbook()
sh = Workbook.add_sheet('Speaker Report')
sh.write(0,0,'Sno')
sh.write(0,1,'Delegate No')
sh.write(0,2,'Membership No')
sh.write(0,3,'Name')
sh.write(0,4,'Email')
sh.write(0,5,'Mobile')
sh.write(0,6,'Abstracts')
idx=0
sno_val = 0
for data in abs_data:
sno_val = sno_val+1
sh.write(idx+1,0,sno_val)
sh.write(idx+1, 1, data['delegate_no'])
sh.write(idx+1, 2, data['membership_no'])
sh.write(idx+1, 3, data['full_name'])
sh.write(idx+1, 4, data['email'])
sh.write(idx+1, 5, data['mobile'])
sh.write(idx+1, 6, data['abstracts'])
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+conf_key+"Speaker_Report-"+str(date)+".xls"})
elif btn_page == "Export CSV" :
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
output = io.StringIO()
writer = csv.writer(output)
line = ['S.No', 'Delegate No','Membership No', 'Name', 'Email','Mobile' ,'Abstracts']
writer.writerow(line)
sno_val = 0
for row in abs_data:
sno_val = sno_val +1
line = [sno_val ,row['delegate_no'],row['membership_no'] , row['full_name'], row['email'],row['mobile'],row['abstracts']]
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename=""Record_"+str(date)+".csv"})
return render_template('backoffice/commitment_delegate.html',conf_id=conf_id,conf_key=conf_key,abs_data=abs_data,abs_roles=abs_roles,abs_types=abs_types,role_id_int=role_id_int,s_abs_types=s_abs_types,is_delegate=is_delegate)
@app.route('/marksheet_template/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def MarksheetTemplate(conf_id,conf_key):
marksheet_template = BoModel().get_marksheet_all_template(conf_id)
return render_template('backoffice/settings/marksheet_template/marksheet_template_index.html',conf_id=conf_id,conf_key=conf_key,marksheet_template=marksheet_template)
@app.route('/edit_marksheet_template/<temp_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def EditMarksheetTemplate(temp_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
ms_template_data = BoModel().get_marksheet_template_by_id(temp_id)
abstractData = BoModel().get_abs_types(conf_id,confData.get('conf_schema'))
return render_template('backoffice/settings/marksheet_template/edit_marksheet_template.html',conf_id=conf_id,conf_key=conf_key,ms_template_data=ms_template_data,abstractData=abstractData)
@app.route('/post_edit_marksheet_template/<temp_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def PostEditMarksheetTemplate(temp_id,conf_id,conf_key):
abs_type = request.values.get('abs_type')
selection_type_id = request.values.get('selection_type_id')
abs_prefix = request.values.get('abs_prefix')
parameters = request.values.get('parameters')
total_mark = request.values.get('total_marks')
data = {
'abs_type' : abs_type,
'selection_type_id' : selection_type_id,
'abs_prefix' : abs_prefix,
'parameters' : parameters,
'total_mark' : total_mark,
'conf_id' : conf_id
}
BoModel().insert_update_marksheet_template(data,temp_id)
flash('Updated Successfully','successMsg')
return redirect(url_for('backoffice.MarksheetTemplate',conf_id=conf_id,conf_key=conf_key))
@app.route('/get_distinct_selection_type/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def GetDistinctSelectionType(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_type = request.values.get('abs_type')
selectionData = BoModel().get_distinct_selection(conf_id,abs_type,confData.get('conf_schema'))
return jsonify(selectionData)
@app.route('/get_selection_type_prefix/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def GetSelectionTypePrefix(conf_id,conf_key):
selection_type_id = request.values.get('selection_type_id')
selectionPrefix = BoModel().get_selection_prefix(selection_type_id)
return jsonify(selectionPrefix)
@app.route('/add_new_marksheet_template/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def AddNewMarksheetTemplate(conf_id,conf_key):
data = {'conf_id':conf_id}
temp_id = BoModel().insert_update_marksheet_template(data,temp_id=None)
return redirect(url_for('backoffice.EditMarksheetTemplate',conf_id=conf_id,conf_key=conf_key,temp_id=temp_id))
@app.route('/delete_marksheet_template/<temp_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def DeleteMarksheetTemplate(temp_id,conf_id,conf_key):
BoModel().delete_marksheet_template(temp_id)
flash('Deleted successfully','errorMsg')
return redirect(url_for('backoffice.MarksheetTemplate',conf_id=conf_id,conf_key=conf_key))
@app.route('/duplicate_marksheet_template/<temp_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def DuplicateMarksheetTemplate(temp_id,conf_id,conf_key):
data = BoModel().get_marksheet_template_by_id(temp_id)
datas = {
'abs_type' : str(data['abs_type'])+str( ' - Duplicate'),
'selection_type_id' : data['selection_type_id'],
'abs_prefix' : data['abs_prefix'],
'parameters' : data['parameters'],
'total_mark' : data['total_mark'],
'conf_id' : conf_id
}
BoModel().insert_update_marksheet_template(datas,temp_id=None)
return redirect(url_for('backoffice.MarksheetTemplate',conf_id=conf_id,conf_key=conf_key))
@app.route('/gentrate_scoring_marksheet/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def GentrateScoringMarksheet(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_types = BoModel().get_comp_session_types(conf_id,confData['conf_schema'])
return render_template('backoffice/abstract/session_scoring/session_select_for_scoring.html',conf_id=conf_id,conf_key=conf_key,session_types=session_types)
@app.route('/post_gentrate_scoring_marksheet/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def PostGentrateScoringMarksheet(conf_id,conf_key):
submit_btn = request.values.get('submit_btn')
abs_session= request.values.get('abs_session')
if abs_session:
abs_sess= abs_session.split("__")
data = BoModel().get_marksheet_data(abs_sess[0],abs_sess[1],conf_id)
for index,value in enumerate(data):
if index == 0 :
session_data = value[0]
if index == 1 :
abstract_data = value
if index == 3 :
judge_data = value
if index == 4 :
scoring_data = value
if index == 5 :
sorting_abs_data = value
if len(abstract_data) !=0:
selection_type_id = abstract_data[0]["selection_type_id"]
marksheet_template = BoModel().get_marksheet_template(conf_id,abs_sess[1],selection_type_id)
m_data = {}
for m in scoring_data:
key = str(m['abs_id'])+"_"+str(m['user_id'])
m_data[key] = m
first_topmark = max(sorting_abs_data, key=lambda x:x['total'])
return render_template('backoffice/abstract/session_scoring/scoring_marksheet.html',conf_id=conf_id,conf_key=conf_key,session_data=session_data,abstract_data=sorting_abs_data,judge_data=judge_data,marksheet_template=marksheet_template,m_data=m_data,abs_type=abs_sess[1],first_topmark=first_topmark)
else:
return "No data"
else:
return redirect(url_for('backoffice.GentrateScoringMarksheet',conf_id=conf_id,conf_key=conf_key))
@app.route('/export_scoringsheet_download_excel/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def ExportScoringSheetDownloadExcel(conf_id,conf_key):
data = BoModel().usp_download_scoring_marksheet(conf_id)
for index,value in enumerate(data):
if index == 0 :
all_session = value
if index == 1 :
abstract_data = value
if index == 2 :
judge_data = value
if index == 3 :
scoring_data = value
if index == 4 :
sorting_abs_data = value
sheet_id = []
sheet_names = {}
d_session_name = {}
lst_jud = []
d_judgedata = {}
d_session_details = {}
lst_judges = []
dj=[]
sheets ={}
m_data = {}
hall_name = {}
i=1
for session in all_session:
hall = session['name'].replace(" ","")
hall_name[str(session['abs_session_id'])] = hall+'-'+session['start_date'].strftime('%d%m')+'-'+session['start_date'].strftime('%H%M')+'-'+session['end_date'].strftime('%H%M')
sheet_id.append(str(session['abs_session_id']))
sheet_names[str(session['abs_session_id'])] = session['session_name']
d_session_name[str(session['abs_session_id'])] = session['session_name']
d_session_details[str(session['abs_session_id'])] = "Date : "+str(session['start_date'].strftime('%d-%m-%Y'))+" Hall : "+str(session['name'])+" Time : "+str(session['start_date'].strftime('%H:%M'))+" - "+str(session['end_date'].strftime('%H:%M'))
for m in scoring_data:
if m['session_id'] == session['abs_session_id']:
key = str(m['abs_id'])+"_"+str(m['user_id'])
m_data[key] = m['total_mark']
d_absdata ={}
jd= ""
for jdata in judge_data:
if jdata['session_id'] == session['abs_session_id']:
judge_details = " "+str(jdata['role'])+" : "+str(jdata['full_name'])+"("+str(jdata['mobile'])+")" # Judge: Dr.ABI (1213223213)
d_judgedata['judge_'+str(i)] = judge_details #
jd+=str(d_judgedata['judge_'+str(i)])
i = i+1
d_absdata[str(session['abs_session_id'])] = jd
lst_jud.append(d_absdata)
j_name = {}
h_judges_name = {}
dict_jcount = {}
j_count=2
j_name['jname_0'] = ""
j_name['jname_1'] = "Speaker Present (Y/N)"
for judge_name in judge_data:
if judge_name['session_id'] == session['abs_session_id']:
j_name['jname_'+str(j_count)] = judge_name['full_name']
j_count=j_count+1
h_judges_name[str(session['abs_session_id'])] = j_name
j_name['jname_'+str(j_count)] = "Total"
j_name['jname_'+str(j_count+1)] = "Average"
dict_jcount[str(session['abs_session_id'])] = j_count
lst_judges.append(h_judges_name)
dj.append(dict_jcount)
rows = []
y = 0
for data in sorting_abs_data:
cell_dict = {}
if data['abs_session_id'] == session['abs_session_id']:
abs_no = "["+str(data['abs_type'])+str(data['abs_no'])+"] : "+str(data['title'])
if data['pcu_name']:
authors ="CHIEF & PRESENTING AUTHOR : "+str(data['pcu_name'])
else :
authors ="CHIEF AUTHOR : "+str(data['ca_name'])+" PRESENTING AUTHOR : "+str(data['pa_name'])
if data['co_authors']:
coauthor = "Co Author(s) : "+str(data['co_authors'])
else:
coauthor = ""
# absData = str(abs_no)+" "+str(authors)+" "+str(coauthor)
comment_font = xlwt.easyfont("bold true")
absData = (abs_no,"\n",(authors, comment_font),"\n",coauthor)
cell_dict['c0'] = data['abs_id']
cell_dict['c1'] = absData
if data['is_present'] != None:
if int(data['is_present']) == 1:
is_present = "Y"
else:
is_present = "N"
else:
is_present = ""
cell_dict['c2'] = is_present
y = y+1
x = 3
for j in judge_data:
if j['session_id'] == session['abs_session_id']:
key = str(data['abs_id'])+'_'+str(j['user_id'])
if m_data:
if key in m_data.keys():
marks = m_data[key]
else:
marks = ""
else:
marks = ""
cell_dict['c'+str(x)] = marks
x=x+1
cell_dict['c'+str(x)] = data['total']
cell_dict['c'+str(x+1)] = data['avg']
rows.append(cell_dict)
sheets[str(session['abs_session_id'])]=rows
output = io.BytesIO()
Workbook = xlwt.Workbook()
file_name = conf_key
lst_sheetname = []
if sheet_id :
t=0
for d in sheet_id:
count_judges = dj[t][d]
t+=1
sheet_name = sheet_names[d].replace("/","").strip()
sheet = sheet_name[:25] + '..' * (len(sheet_name) > 25)
if sheet in lst_sheetname:
sheet_1 = hall_name[d]
sheet_1 = sheet_1.replace("/","").strip()
sheet = sheet_1[:25] + '..' * (len(sheet_1) > 25)
lst_sheetname.append(sheet)
sh = Workbook.add_sheet(sheet)
sh.row(0).height = 20*20
sh.row(1).height = 20*20
sh.row(2).height = 50*20
sh.row(3).height = 50*20
sh.col(0).width = int(60 * 300)
h_style = xlwt.easyxf('pattern: pattern solid, fore_colour white;' 'font: colour black,bold True, name Calibri, height 250; align: horiz centre;border: left thin,right thin,top thin,bottom thin')
style = xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour white;' 'font: colour black, name Calibri, height 200; align: vert centre, horiz centre;border: left thin,right thin,top thin,bottom thin')
style_2 = xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour white;' 'font: colour black, name Calibri, height 200; align: vert centre, horiz left;border: left thin,right thin,top thin,bottom thin')
sh.write_merge(0,0,0,int(count_judges)+1,d_session_name[d],style=h_style)
sh.write_merge(1,1,0,int(count_judges)+1,d_session_details[d],style=style)
for index,value in enumerate(lst_jud):
keys = list(value.keys())
for key in keys:
key = key
if key == d :
sh.write_merge(2,2,0,int(count_judges)+1,value[d],style=style)
nth_row = 3
nth_col = 0
for index,value in enumerate(lst_judges):
keys = list(value.keys())
for key in keys:
key = key
if key == d :
for j in range(0,int(count_judges)+2):
sh.write(nth_row,nth_col,value[d]['jname_'+str(j)],style=style)
nth_col+=1
nth_col = 0
nth_row+=1
nth_row = 4
nth_col = 0
a=0
keys = sheets.keys()
if sheets[d]:
first_topmark = max(sheets[d],key=lambda x:x['c'+str(int(count_judges)+1)])
else:
first_topmark = ''
m =count_judges
alpaindex = {0:'C',1:'D',2:'E',3:'F',4:'G',5:'H',6:'I',7:'J',8:'K',9:'L',10:'M',11:'N',12:'O',13:'P',14:'Q',15:'R'}
for key in keys :
if key == d:
for data in sheets[d]:
d_keys = data.keys()
sh.row(a+4).height = 50*20
for l in range(1,len(d_keys)):
style_1=xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour yellow;''font: colour black, bold True, name Calibri, height 200; align: vert centre, horiz centre;border: left thin,right thin,top thin,bottom thin')
if data['c'+str(int(count_judges)+1)] == first_topmark['c'+str(int(count_judges)+1)] and data['c'+str(int(count_judges)+1)] !=0:
if 'c'+str(j) == 'c1':
sh.row(nth_row).set_cell_rich_text(nth_col, data['c'+str(l)], style_1)
else:
sh.write(nth_row,nth_col,data['c'+str(l)],style=style_1)
else:
# if 'c'+str(l) == 'c1':
# sh.write(nth_row,nth_col,data['c'+str(l)],style=style_2)
# else:
# sh.write(nth_row,nth_col,data['c'+str(l)],style=style)
if 'c'+str(l) == 'c1':
sh.write(nth_row,nth_col,data['c'+str(l)],style=style_2)
elif 'c'+str(l) == 'c'+str(count_judges+1):
if int(m) > 3:
sh.write(nth_row,nth_col,xlwt.Formula("SUM(C"+str(nth_row+1)+":"+ alpaindex[m-3] +str(nth_row+1)+")"),style=style)
else:
sh.write(nth_row,nth_col,data['c'+str(l)],style=style)
elif 'c'+str(l) == 'c'+str(count_judges+2):
if int(m) > 3:
sh.write(nth_row, nth_col, xlwt.Formula(alpaindex[m-2]+str(nth_row+1)+"/"+str(int(count_judges)-2)),style=style)
else:
sh.write(nth_row,nth_col,data['c'+str(l)],style=style)
else:
sh.write(nth_row,nth_col,data['c'+str(l)],style=style)
nth_col+=1
nth_col = 0
nth_row+=1
a+=1
Workbook.save(output)
output.seek(0)
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+str(file_name)+".xls"})
return None
@app.route('/post_marks/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def PostMarks(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
submit_btn = request.values.get('submit_btn')
session_id = request.values.get('session_id')
abs_type = request.values.get('abs_type')
lst = request.values.getlist('m_key')
judge_lst = request.values.getlist('judge_user_id')
m_list_insert = []
m_list_update = []
attendance_data = []
jud_attendance_data = []
for key in lst:
data = {}
att_data = {}
data['session_id'] = session_id
data['abs_id'] = key.split('_')[0]
data['user_id'] = key.split('_')[1]
data['m1'] = request.values.get('m1_'+key) or 'null'
data['m2'] = request.values.get('m2_'+key) or 'null'
data['m3'] = request.values.get('m3_'+key) or 'null'
data['m4'] = request.values.get('m4_'+key) or 'null'
data['m5'] = request.values.get('m5_'+key) or 'null'
data['total_mark'] = request.values.get('t_marks_'+key)
data['judges_mark_id'] = request.values.get('m_pk_'+key) or 0
data['is_present'] = request.values.get('is_present_'+data['abs_id']) or 'null'
data['created_at'] = datetime.now()
data['updated_at'] = datetime.now()
att_data['abs_id'] = key.split('_')[0]
att_data['is_present'] = request.values.get('is_present_'+data['abs_id']) or 'null'
if int(data['judges_mark_id']) >0:
if data['total_mark'] == '':
data['total_mark'] = 'null'
m_list_update.append(data)
else:
if data['total_mark'] != '':
m_list_insert.append(data)
attendance_data.append(att_data)
for key in judge_lst:
att_juddata = {}
att_juddata['judges_id'] = request.values.get('judges_id_'+str(key))
att_juddata['is_present'] = request.values.get('j_present_'+str(att_juddata['judges_id'])) or 'null'
jud_attendance_data.append(att_juddata)
data = BoModel().get_marksheet_data(session_id,abs_type,conf_id)
for index,value in enumerate(data):
if index == 0 :
session_data = value[0]
if index == 3 :
judge_data = value
if index == 4 :
scoring_data = value
if index == 5 :
sorting_abs_data = value
lst_abs = []
d_absdata = {}
d_absdata['session_name'] = session_data['session_name'] #for getting session name
# for getting session date,time and hall
d_absdata['session_names'] = "Date : "+str(session_data['start_date'].strftime('%d-%m-%Y'))+" Hall : "+str(session_data['name'])+" Time : "+str(session_data['start_date'].strftime('%H:%M'))+" - "+str(session_data['end_date'].strftime('%H:%M'))
lst_abs.append(d_absdata)
# for getting judge details(Role,Name,Mobile)
lst_jud = []
d_judgedata = {}
i=1
jd= ""
for jdata in judge_data:
judge_details = " "+str(jdata['role'])+" : "+str(jdata['full_name'])+"("+str(jdata['mobile'])+")" # Judge: Dr.ABI (1213223213)
d_judgedata['judge_'+str(i)] = judge_details #
jd+=str(d_judgedata['judge_'+str(i)])
i = i+1
d_absdata['judge'] = jd
lst_jud.append(d_absdata)
lst_jud_name = []
j_name = {}
i=2
j_name['jname_0'] = "" # For Empty
j_name['jname_1'] = "Speaker Present (Y/N)"
for judge_name in judge_data:
j_name['jname_'+str(i)] = judge_name['full_name']
i = i+1
j_name['jname_'+str(len(judge_data)+2)] = "Total"
j_name['jname_'+str(len(judge_data)+3)] = "Average"
lst_jud_name.append(j_name)
m_data = {}
for m in scoring_data:
key = str(m['abs_id'])+"_"+str(m['user_id'])
m_data[key] = m['total_mark']
lst_abs_data = []
for data in sorting_abs_data:
dict_abs_details = {}
abs_no = "["+str(data['abs_type'])+str(data['abs_no'])+"] : "+str(data['title'])
if data['pcu_name']:
authors ="CHIEF & PRESENTING AUTHOR : "+str(data['pcu_name'])
else :
authors ="CHIEF AUTHOR : "+str(data['ca_name'])+" PRESENTING AUTHOR : "+str(data['pa_name'])
if data['co_authors']:
coauthor = "Co Author(s) : "+str(data['co_authors'])
else:
coauthor = ""
# absData = str(abs_no)+" "+str(authors)+" "+str(coauthor)
comment_font = xlwt.easyfont('bold true')
absData = (abs_no,"\n",(authors, comment_font),"\n",coauthor)
dict_abs_details['c0'] = absData
if data['is_present'] != None:
if int(data['is_present']) == 1:
is_present = "Y"
else:
is_present = "N"
else:
is_present = ""
dict_abs_details['c1'] = is_present
x=2
for j in judge_data:
key = str(data['abs_id'])+'_'+str(j['user_id'])
if m_data:
if key in m_data.keys():
marks = m_data[key]
else:
marks = ""
else:
marks = ""
dict_abs_details['c'+str(x)] = marks
x=x+1
dict_abs_details['c'+str(len(judge_data)+2)] = data['total']
dict_abs_details['c'+str(len(judge_data)+3)] = data['avg']
lst_abs_data.append(dict_abs_details)
first_topmark = max(sorting_abs_data, key=lambda x:x['total'])
if submit_btn == "Save":
BoModel().update_attendance(attendance_data,jud_attendance_data,confData['conf_schema'])
if m_list_insert:
BoModel().insert_scoring_marks(m_list_insert,confData['conf_schema'])
elif m_list_update:
BoModel().update_scoring_marks(m_list_update,confData['conf_schema'])
flash('Updated Successfully','successMsg')
elif submit_btn == "Export CSV":
rows = lst_abs
file_name = session_data['session_name']
output = io.StringIO()
writer = csv.writer(output)
if rows:
for i in rows:
line = []
line.append(i['session_name'])
writer.writerow(line)
for i in rows:
line = []
line.append(i['session_names'])
writer.writerow(line)
for i in rows:
line = []
line.append(i['judge'])
writer.writerow(line)
for i in lst_jud_name:
line = []
for j in range(0,len(judge_data)+4):
line.append(i['jname_'+str(j)])
writer.writerow(line)
for i in lst_abs_data:
line = []
for j in range(0,len(judge_data)+4):
line.append(i['c'+str(j)])
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv", headers={"Content-Disposition":"attachment;filename="+str(file_name)+".csv"})
elif submit_btn == "Export Excel":
header = None
file_name = session_data['session_name']
rows = lst_abs
output = io.BytesIO()
Workbook = xlwt.Workbook()
sheet_name = session_data['session_name'].replace("/","").strip()
sheet = sheet_name[:25] + '..' * (len(sheet_name) > 25)
sh = Workbook.add_sheet(sheet)
sh.row(0).height = 20*20 # to set row height
sh.row(1).height = 20*20
sh.row(2).height = 50*20
sh.row(3).height = 50*20
sh.col(0).width = int(60 * 320) # to set col width
style = xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour white;' 'font: colour black, name Calibri, height 200; align: vert centre, horiz centre;border: left thin,right thin,top thin,bottom thin')
style_2 = xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour white;' 'font: colour black, name Calibri, height 200; align: vert centre, horiz left;border: left thin,right thin,top thin,bottom thin')
h_style = xlwt.easyxf('pattern: pattern solid, fore_colour white;' 'font: colour black,bold True, name Calibri, height 250; align: horiz centre;border: left thin,right thin,top thin,bottom thin')
if rows:
for row in rows:
sh.write_merge(0,0,0,len(judge_data)+3,row['session_name'],style=h_style)
for row in rows:
sh.write_merge(1,1,0,len(judge_data)+3,row['session_names'],style=style)
for row in rows:
sh.write_merge(2,2,0,len(judge_data)+3,row['judge'],style=style)
nth_row = 3
nth_col = 0
for i in lst_jud_name:
for j in range(0,len(judge_data)+4):
sh.write(nth_row,nth_col,i['jname_'+str(j)],style=style)
nth_col+=1
nth_col = 0
nth_row+=1
nth_row = 4
nth_col = 0
style_1=xlwt.easyxf('alignment: wrap True;''pattern: pattern solid, fore_colour yellow;''font: colour black, bold True, name Calibri, height 200; align: vert centre, horiz centre;border: left thin,right thin,top thin,bottom thin')
x=0
m =len(judge_data)
alpaindex = {0:'C',1:'D',2:'E',3:'F',4:'G',5:'H',6:'I',7:'J',8:'K',9:'L',10:'M',11:'N'}
for i in lst_abs_data:
sh.row(x+4).height = 50*20
for j in range(0,len(judge_data)+4):
if i['c'+str(len(judge_data)+2)] == first_topmark['total'] and i['c'+str(len(judge_data)+2)] !=0:
sh.write(nth_row,nth_col,i['c'+str(j)],style=style_1)
else:
if 'c'+str(j) == 'c0':
sh.write(nth_row,nth_col,i['c'+str(j)],style=style_2)
elif 'c'+str(j) == 'c'+str(len(judge_data)+2):
# ws.write(2, 2, xlwt.Formula("A3+B3"))
# sh.write(nth_row,nth_col,i['c'+str(j)],style=style)
if int(m) != 0 :
sh.write(nth_row, nth_col, xlwt.Formula("SUM(C"+str(nth_row+1)+":"+ alpaindex[m-1] +str(nth_row+1)+")"),style=style)
else:
sh.write(nth_row,nth_col,i['c'+str(j)],style=style)
elif 'c'+str(j) == 'c'+str(len(judge_data)+3):
if int(m) != 0 :
sh.write(nth_row, nth_col, xlwt.Formula(alpaindex[m]+str(nth_row+1)+"/"+str(len(judge_data))),style=style)
else:
sh.write(nth_row, nth_col,i['c'+str(j)],style=style)
else:
sh.write(nth_row,nth_col,i['c'+str(j)],style=style)
nth_col+=1
nth_col = 0
nth_row+=1
x+=1
Workbook.save(output)
output.seek(0)
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+str(file_name)+".xls"})
return None
abs_session = str(session_id)+'__'+str(abs_type)
return redirect(url_for('backoffice.PostGentrateScoringMarksheet',conf_id=conf_id,conf_key=conf_key,abs_session=abs_session))
@app.route('/print_scoring_marksheet/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def PrintScoringMarksheet(conf_id,conf_key):
abs_session= request.values.get('abs_session')
if abs_session:
abs_sess= abs_session.split("__")
data = BoModel().get_marksheet_data(abs_sess[0],abs_sess[1],conf_id)
for index,value in enumerate(data):
if index == 0 :
session_data = value[0]
if index == 1 :
abstract_data = value
if index == 3 :
judge_data = value
if index == 4 :
scoring_data = value
if index == 5 :
sorting_abs_data = value
if abstract_data:
selection_type_id = abstract_data[0]["selection_type_id"]
marksheet_template = BoModel().get_marksheet_template(conf_id,abs_sess[1],selection_type_id)
m_data = {}
for m in scoring_data:
key = str(m['abs_id'])+"_"+str(m['user_id'])
m_data[key] = m
first_topmark = max(sorting_abs_data, key=lambda x:x['total'])
return render_template('backoffice/abstract/session_scoring/print_scoring_marksheet.html',conf_id=conf_id,conf_key=conf_key,session_data=session_data,abstract_data=sorting_abs_data,judge_data=judge_data,marksheet_template=marksheet_template,m_data=m_data,abs_type=abs_sess[1],first_topmark=first_topmark)
else:
return redirect(url_for('backoffice.GentrateScoringMarksheet',conf_id=conf_id,conf_key=conf_key))
@app.route('/change_judge_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def ChangeJudgeSession(conf_id,conf_key):
judges_id = request.values.get('judges_id')
# print(judges_id)
data = {
'session_id' : request.values.get('session_id'),
'user_id' : request.values.get('user_id'),
'role_id' : request.values.get('role_id'),
'is_present' : None,
}
BoModel().update_judges(data,judges_id)
datas = {'msg':"Changed Successfully"}
return jsonify(datas)
@app.route('/<conf_id>/<conf_key>/insert_fb_commitment',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def InsertFbCommitment(conf_id,conf_key):
# now_date = datetime.now()
# date = now_date.strftime('%Y-%m-%d %H:%M:%S')
# user_ids=request.values.get('user_ids')
# user_id=str(user_ids)[1:-1]
# users=list(user_id.split(","))
# val=[]
# for i in users:
# # y='data_'+str(i.strip())
# # print(y)
# data={
# 'user_id':(i.strip()),
# 'conf_id':conf_id,
# 'fb_commitments':request.values.get('data_'+str(i.strip())),
# 'created_at':date
# }
# val.append(data)
# insert_fb_commitment=BoModel().InsertFbCommitmentData_v1(val)
insert_fb_commitment=BoModel().InsertFbCommitmentData_v1(conf_id)
flash("Push Notification commitment(s) Inserted Successfully","successMsg")
return redirect(url_for('backoffice.bo_dashboard',conf_id=conf_id,conf_key=conf_key))
@app.route('/get_categories/<conf_id>/<conf_key>',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def GetCategories(conf_id,conf_key):
category_id = request.values.get('category_id')
categories = BoModel().get_category_with_category_id(category_id)
return jsonify(categories)
@app.route('/update_color_code/<conf_id>/<conf_key>',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def UpdateColorCode(conf_id,conf_key):
category_id = request.values.get('category_id')
color_code = request.values.get('color_code')
data = {'color_code':color_code}
BoModel().update_cat_color_code(category_id,data)
return jsonify()
@app.route('/update_withdraw_abs/<conf_id>/<conf_key>',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def UpdateWithdrawAbs(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values.get('abs_id')
if abs_id:
result = BoModel().update_withdraw_abs(abs_id,datetime.now(),confData.get('conf_schema'))
if abs_id and result == 'success':
data = {'status' : 1 }
else:
data = {'status' : 2 }
return jsonify(data)
@app.route('/view_all_sessions/<conf_id>/<conf_key>',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def ViewAllSessions(conf_id,conf_key):
sessionData = BoModel().get_all_sessions(conf_id)
absHalls = BoModel().get_halls(conf_id)
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
if start_date and end_date:
start_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date, '%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt.strftime("%d-%m-%Y"))
return render_template('backoffice/view_all_session.html',sessionData=sessionData,absHalls=absHalls,conf_id=conf_id,conf_key=conf_key,confe_date=confe_date)
@app.route('/programsheet_edit/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Programsheet_edit(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
user_id = request.values.get('user_id') or None
start_date = datetime.strptime(conf_data['conf_start_dt'], '%Y-%m-%d')
end_date = datetime.strptime(conf_data['conf_end_dt'], '%Y-%m-%d')
halls = BoModel().get_halls(conf_id)
confe_date = []
if start_date and end_date:
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt)
return render_template('backoffice/program_sheet/programsheet_edit.html',confe_date=confe_date,conf_id=conf_id,conf_key=conf_key,user_id=user_id,halls=halls)
@app.route('/get_programsheet_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_programsheet_data(conf_id,conf_key):
conf_date = request.values.get('conf_date')
user_id = request.values.get('user_id') or None
data = UserModel().get_programsheet_data_v1(conf_date,conf_id,user_id)
final_data = {}
if data[0]:
program_data = data[0]
final_data["program_data"] = program_data
if data[1]:
hall_data = data[1]
final_data["hall_data"] = hall_data
return jsonify(final_data)
@app.route('/get_programsheet_abstract_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_programsheet_abstract_data(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data = BoModel().get_session_data_programsheet(conf_id,confData.get('conf_schema'))
return render_template('backoffice/program_sheet/abstract_session_table.html',data=data,conf_id=conf_id,conf_key=conf_key)
@app.route('/save_programsheet_abs_session_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def save_programsheet_abs_session_data(conf_id,conf_key):
session_id = request.values.get('session_id')
data = {
'start_date' : request.values.get('session_date')+" "+request.values.get('start_time'),
'end_date' : request.values.get('session_date')+" "+request.values.get('end_time'),
'hall_id' : request.values.get('hall_id')
}
BoModel().update_session(data,session_id)
return render_template('backoffice/program_sheet/abstract_session_table.html',data=data,conf_id=conf_id,conf_key=conf_key)
@app.route('/get_change_abstract_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_change_abstract_data(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
session_id = request.values.get("session_id")
session_data = BoModel().get_session_data(session_id,confData.get('conf_schema'))
data = BoModel().get_session_data_programsheet(conf_id,confData.get('conf_schema'))
return render_template('backoffice/program_sheet/abstract_change_session_table.html',data=data,conf_id=conf_id,conf_key=conf_key,session_data=session_data,session_id=session_id)
@app.route('/change_abstract_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def change_abstract_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
old_session_id = request.values.get("old_session_id")
new_session_id = request.values.get("new_session_id")
data = BoModel().save_change_session(old_session_id,new_session_id,confData.get('conf_schema'))
return jsonify()
@app.route('/get_swap_session/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_swap_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data = BoModel().get_session_data_swapping(conf_id,confData.get('conf_schema'))
return jsonify(data)
@app.route('/save_swap_sessions/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def save_swap_session(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
right_session_id = request.values.get('right_session')
left_session_id = request.values.get('left_session')
data = BoModel().save_swapping_session_data(right_session_id,left_session_id,confData.get('conf_schema'))
return jsonify(data)
@app.route('/get_duplicate_session_clash_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_duplicate_session_clash_data(conf_id,conf_key):
session_id = request.values.get('session_id')
data = BoModel().get_duplicate_session_clash_data(session_id,conf_id)
return render_template('backoffice/program_sheet/abstract_duplicate_session_clash_table.html',data=data,conf_id=conf_id,conf_key=conf_key,session_id=session_id)
@app.route('/get_session_clash_speaker_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def get_session_clash_speaker_data(conf_id,conf_key):
session_id = request.values.get('session_id')
data = BoModel().get_session_clash_speaker_data(session_id,conf_id)
clash_data = defaultdict(list) # sub list with key
speaker_data = []
if data:
user_ids = []
for r in data:
clash_data[r["user_id"]].append(r)
if r["user_id"] not in user_ids:
user_ids.append(r["user_id"])
data = {
'user_id' : r["user_id"],
'speaker_name': r["full_name"]
}
speaker_data.append(data)
return render_template('backoffice/program_sheet/abstract_session_clash_speaker_table.html',speaker_data=speaker_data,clash_data=clash_data,conf_id=conf_id,conf_key=conf_key,session_id=session_id)
@app.route('/print_panel/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def Print_Panel(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
template_data = BoModel().get_print_template_data()
get_abstrcts = BoModel().get_abstract(conf_id)
selection = BoModel().get_session_selection_types(conf_id,confData.get('conf_schema'))
return render_template('backoffice/abstract/print_abstracts/print_panel.html',conf_id=conf_id,conf_key=conf_key,template_data=template_data,get_abstrcts=get_abstrcts,selection=selection)
@app.route('/add_new_print_template/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def add_new_print_template(conf_id,conf_key):
abstract_types = request.values.getlist('ddl_abs_type')
selection_types = request.values.getlist('ddl_abs_selection')
abs_status = request.values.get('ddl_abs_status') or None
order_by = request.values.getlist('order_by')
cus_query = request.values.get('cut_query_sttmt') or None
template_content= request.values.get('template_content') or None
temp_name = request.values.get('temp_name') or None
template_id = request.values.get('template_id') or None
where_con = {
'abs_status': abs_status,
'abs_type' : abstract_types,
'selection' : selection_types,
}
data = {
'query_statement': cus_query,
'order_by' : str(order_by),
'print_content' : template_content,
'template_name' : temp_name,
'where_con' : str(where_con),
}
if template_id:
BoModel().update_print_template(data,template_id)
else:
BoModel().insert_print_template(data)
return redirect(url_for('backoffice.Print_Panel',conf_id=conf_id,conf_key=conf_key))
@app.route('/get_print_template_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def get_print_template_data(conf_id,conf_key):
template__id = request.values.get("template_id")
data = BoModel().get_print_template(template__id)
if data:
data['order_by'] = ast.literal_eval(data['order_by']) if data['order_by'] else None
data['where_con'] = ast.literal_eval(data['where_con']) if data['where_con'] else []
return jsonify(data)
@app.route('/template_print/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def template_print(conf_id,conf_key):
template__id = request.values.get("template_id")
data = BoModel().get_print_template(template__id)
order_by = []
where_con = {}
if data:
order_by = ast.literal_eval(data['order_by']) if data['order_by'] else None
where_con = ast.literal_eval(data['where_con']) if data['where_con'] else None
if order_by :
order_by = ','.join(order_by)
abs_status = abs_types = selection = None
if where_con :
abs_status = where_con["abs_status"]
abs_types = '","'.join(where_con["abs_type"]) if where_con["abs_type"] else None
selection = ','.join(where_con["selection"]) if where_con["selection"] else None
print_data = BoModel().get_abstracts_print_data(conf_id,abs_status,abs_types,selection,order_by)
session_data = []
abstract_data = []
co_author = []
judge_data = []
if print_data[0]:
session_data = print_data[0]
if print_data[1]:
abstract_data= print_data[1]
if print_data[2]:
co_author = print_data[2]
if print_data[3]:
judge_data = print_data[3]
abs_data = defaultdict(list)
abs_co_data = defaultdict(list)
abs_judge_data = defaultdict(list)
cat_list = []
cat_list_data = []
cat_abs = defaultdict(list)
absdata_abstype = defaultdict(list)
abs_type_list = []
for abd in abstract_data:
absdata_abstype[abd['abs_title']].append(abd)
if abd["abs_title"] not in abs_type_list:
abs_type_list.append(abd["abs_title"])
for d in abstract_data:
cat_abs[d['category_id']].append(d)
if d["category_id"] not in cat_list:
cat_list.append(d["category_id"])
cat_list_data.append({'category_id' : d["category_id"],'display_name' : d["display_name"]})
if session_data:
for ab in abstract_data:
abs_data[ab['abs_session_id']].append(ab)
if judge_data:
for co in judge_data:
abs_judge_data[co['abs_session_id']].append(co)
if co_author:
for co in co_author:
abs_co_data[co['abs_id']].append(co)
mail_data = {
'mail_content': data["print_content"],
'session_data': session_data,
'abstract_data':abs_data,
'judge_data' : abs_judge_data,
'cat_list':cat_list_data,
'cat_list_data':cat_list_data,
'cat_abs':cat_abs,
'co_author':abs_co_data,
'chk_break':1,
'conf_id':conf_id,
'conf_key':conf_key,
'abs_type_list':abs_type_list,
'absdata_abstype':absdata_abstype,
'data_ic':abstract_data
}
return Helper.convert_html_for_mail_screen(mail_data)
return jsonify(data)
@app.route('/template_print_preview/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def template_print_preview(conf_id,conf_key):
template__id = request.values.get("template_id")
template_content = request.values.get("template_content")
try:
data = BoModel().get_print_template(template__id)
order_by = []
where_con = {}
if data:
order_by = ast.literal_eval(data['order_by']) if data['order_by'] else None
where_con = ast.literal_eval(data['where_con']) if data['where_con'] else None
if order_by :
order_by = ','.join(order_by)
abs_status = abs_types = selection = None
if where_con :
abs_status = where_con["abs_status"]
abs_types = '","'.join(where_con["abs_type"]) if where_con["abs_type"] else None
selection = ','.join(where_con["selection"]) if where_con["selection"] else None
print_data = BoModel().get_abstracts_print_data(conf_id,abs_status,abs_types,selection,order_by)
session_data = []
abstract_data = []
co_author = []
judge_data = []
if print_data[0]:
session_data = print_data[0]
if print_data[1]:
abstract_data= print_data[1]
if print_data[2]:
co_author = print_data[2]
if print_data[3]:
judge_data = print_data[3]
abs_data = defaultdict(list)
abs_co_data = defaultdict(list)
abs_judge_data = defaultdict(list)
cat_list = []
cat_list_data = []
cat_abs = defaultdict(list)
absdata_abstype = defaultdict(list)
abs_type_list = []
for abd in abstract_data:
absdata_abstype[abd['abs_title']].append(abd)
if abd["abs_title"] not in abs_type_list:
abs_type_list.append(abd["abs_title"])
for d in abstract_data:
cat_abs[d['category_id']].append(d)
if d["category_id"] not in cat_list:
cat_list.append(d["category_id"])
cat_list_data.append({'category_id' : d["category_id"],'display_name' : d["display_name"]})
if session_data:
for ab in abstract_data:
abs_data[ab['abs_session_id']].append(ab)
if judge_data:
for co in judge_data:
abs_judge_data[co['abs_session_id']].append(co)
if co_author:
for co in co_author:
abs_co_data[co['abs_id']].append(co)
mail_data = {
'mail_content': template_content,
'session_data': session_data,
'abstract_data':abs_data,
'judge_data' : abs_judge_data,
'cat_list':cat_list_data,
'cat_list_data':cat_list_data,
'cat_abs':cat_abs,
'co_author':abs_co_data,
'chk_break':1,
'conf_id':conf_id,
'conf_key':conf_key,
'absdata_abstype':absdata_abstype,
'abs_type_list':abs_type_list,
'data_ic':abstract_data
}
html = Helper.convert_html_for_mail_screen(mail_data)
return jsonify(html)
except Exception as e:
print(e)
return jsonify(str(e))
@app.route('/cme_point_report/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def cme_point_report(conf_id,conf_key):
report_sheets = request.values.getlist("report_sheets") or None
if report_sheets:
get_report = BoModel().get_cme_point_data(conf_id)
f_report = {
'Sessions details':get_report[0],
'MC speakers from native state' :get_report[1],
'MC speakers from other state' :get_report[2],
'MC Speakers from native state without sessions' :get_report[3],
'MC speakers from other state without sessions':get_report[4],
'MC delegates from native state' :get_report[5],
'MC delegates from other states':get_report[6],
'All Delegate list':get_report[7],
}
file_name = conf_key+"_cme_report"+str(datetime.now())
return XLSEXPORT().export_multiplesheet_xls(report_sheets,f_report,file_name)
else:
# print(request.method)
if request.method == "POST":
flash(" Please select atleast one sheet you want in report to download ",'errorMsg')
return render_template('backoffice/cme_point_report.html',conf_id=conf_id,conf_key=conf_key)
@app.route('/list_awards/<conf_id>/<conf_key>',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def ListAwards(conf_id,conf_key):
datas = AbstractModel().get_abs_award(conf_id,"FP")
return render_template('backoffice/view_all_awards.html',datas=datas,conf_id=conf_id,conf_key=conf_key)
@app.route('/view_award_list/<award_id>/<abs_type>/<conf_id>/<conf_key>',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def ViewAwardList(award_id,abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
datas = BoModel().get_abstract_awards(award_id,abs_type,conf_id,confData.get('conf_schema'))
ver_data = BoModel().get_verified_award(award_id,abs_type,conf_id,confData.get('conf_schema'))
return render_template('backoffice/view_award_list.html',datas=datas,conf_id=conf_id,conf_key=conf_key,ver_data=ver_data)
@app.route('/bo_View_sundaram/<abs_id>/<user_id>/<conf_id>/<conf_key>',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def BOViewSundaram(abs_id,user_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
data=AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
data1=AbstractModel().get_authors(abs_id,confData.get('conf_schema'))
data2=AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))
aadhar_img = UserModel().get_aadhar_image(data['user_id'],12,78)
age = ''
if data2['dob']:
dob = data2['dob'].strftime('%d/%m/%Y')
day1, mon1, year1=(dob).split('/')
current_dt = datetime.now()
day2, mon2, year2=(current_dt.strftime('%d/%m/%Y')).split('/')
# Converting given dates into date format
date1 = date(int(year1), int(mon1), int(day1))
date2 = date(int(year2), int(mon2), int(day2))
age = Helper.calcluate_age_v1(date1,date2,year1,year2,mon1,mon2,day1,day2)
return render_template('backoffice/bo_edit/TNASICON24/sundaram_award_verification.html',conf_id=conf_id,conf_key=conf_key,data=data,data1=data1,data2=data2,aadhar_img=aadhar_img[0],user_id=user_id,age=age)
@app.route('/postSundaramawardVerification/<abs_id>/<abs_type>/<conf_id>/<conf_key>',methods=["POST","GET"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def PostSundaramawardVerification(abs_id,abs_type,conf_id,conf_key):
btn_value = request.values.get('submit_btn')
award_id = request.values.get('award_id')
misc3 = request.values.get('misc3') or None
if btn_value == 'Verified':
misc2 = 'Verified'
data = {'misc2':misc2,'misc3':misc3,'verified_at':datetime.now()}
else:
misc2 = 'Rejected'
u_award_id = None
data = {'award_id':u_award_id,'misc2':misc2,'misc3':misc3,'verified_at':datetime.now()}
AbstractModel().update_panel(data,abs_id)
return redirect(url_for('backoffice.ViewAwardList',award_id=award_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
@app.route('/print_dig_podium/<conf_id>/<conf_key>',methods=["GET"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Print_dig_podium(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
if start_date and end_date:
start_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date,'%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt.strftime("%Y-%m-%d"))
hall_data = BoModel().get_halls(conf_id)
return render_template('backoffice/abstract/print_abstracts/dig_podium_print_index.html',conf_id=conf_id,conf_key=conf_key,confe_date=confe_date,hall_data=hall_data)
@app.route('/print_dig_podium/<conf_id>/<conf_key>',methods=["POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def Post_Print_dig_podium(conf_id,conf_key):
abs_type = request.values.get('ddl_abstype') or None
date_wise = request.values.get('ddl_date') or None
hall_wise = request.values.get('ddl_hall') or None
chk_break = request.values.get('chk_break') or 0
print(hall_wise,date_wise,abs_type)
data = BoModel().get_print_dig_podium_abstracts_data(abs_type,date_wise,hall_wise,conf_id)
session_data = []
abstract_data = []
if data[0]:
session_data = data[0]
if data[1]:
abstract_data= data[1]
abs_data = {}
if session_data:
for session in session_data:
temp_list = []
for ab in abstract_data:
if session["abs_session_id"] == ab["abs_session_id"]:
temp_list.append(ab)
abs_data[session["abs_session_id"]] = temp_list
return render_template('backoffice/abstract/print_abstracts/dig_podium_print.html',conf_id=conf_id,conf_key=conf_key,session_data = session_data,abstract_data=abs_data,abs_type=abs_type)
# ---ResultAnnouncement-------------------------------------------------------------------------------------------------------------------------
@app.route('/resultannouncement/<conf_id>/<conf_key>',methods=["GET","POST"])
# @app.route('/resultannouncement/<conf_id>/<conf_key>/<selection_type_id>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def ResultAnnouncement(conf_id,conf_key,selection_type_id=None):
is_semi_final = None
is_final = None
is_winner = None
btn_val = request.values.get('export_button') or None
get_abs_session_id=BoModel().get_abs_session_id(is_semi_final,is_final,is_winner,conf_id)
if selection_type_id:
selection_type_id = selection_type_id
else:
selection_type_id = request.values.get('selection_type_id') or None
abs_session_id = request.values.get('abs_session_id') or None
if abs_session_id:
session_dates = BoModel().get_session_date_time(abs_session_id,conf_id)
else:
session_dates = None
abs_category = None
result_type=None
if selection_type_id:
get_abs_session = BoModel().get_abs_session_name(conf_id,selection_type_id)
else:
get_abs_session = None
if abs_session_id and selection_type_id:
if btn_val=="Export":
output = io.BytesIO()
Workbook =xlwt.Workbook()
session_details = 'Start Date : ' + str(session_dates[0]['start_date'].strftime('%d-%m-%Y %H:%M:%S')) + ' Hall : ' + str(session_dates[0]['name']) + ' End Date : ' + str(session_dates[0]['end_date'].strftime('%d-%m-%Y %H:%M:%S'))
sh = Workbook.add_sheet('result_data')
sh.write(0,0,session_dates[0]['session_name'])
sh.write(1,0,session_details)
sh.write(2,0,'Sno')
sh.write(2,1,'Session name')
sh.write(2,2,'Category')
sh.write(2,3,'Abstract no')
sh.write(2,4,'Title')
sh.write(2,5,'Chief Author name')
sh.write(2,6,'Presenting Author name')
sh.write(2,7,'Presenting Author mobile no')
sh.write(2,8,'Presenting Author email')
sh.write(2,9,'Co-author')
sh.write(2,10,'Abstracts content')
idx=2
sno_val = 0
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category,result_type)
for data in result_data:
abstract_data= str(data['abs_type_and_no']) +':' + str(data['title']) + " PRESENTING AUTHOR " + str(data['presenting_author'])+':' +'['+ str(data['presenting_author_membership_no']) + ']' + '(' + str(data['presenting_author_mobile']) + ')'
sno_val = sno_val+1
sh.write(idx+1,0,sno_val)
sh.write(idx+1,1,data['session_name'])
sh.write(idx+1,2,data['display_name'])
sh.write(idx+1,3,data['abs_type_and_no'])
sh.write(idx+1,4,data['title'])
sh.write(idx+1,5,data['chief_author'])
sh.write(idx+1,6,data['presenting_author'])
sh.write(idx+1,7,data['presenting_author_mobile'])
sh.write(idx+1,8,data['presenting_author_email'])
sh.write(idx+1,9,data['co_author'])
sh.write(idx+1,10,abstract_data)
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename="+session_dates[0]['session_name']+" SessionList"+"_"+str(date)+".xls"})
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category,result_type)
abstract_data = render_template('backoffice/result_announcement/abstract_result.html',result_data=result_data)
else:
result_data = None
abstract_data = None
return render_template('backoffice/result_announcement/results.html',conf_id=conf_id,conf_key=conf_key,get_abs_session_id=get_abs_session_id,abs_session_id=abs_session_id,selection_type_id=selection_type_id,get_abs_session=get_abs_session,abstract_data=abstract_data,session_dates=session_dates,result_data=result_data)
# get_abs_types=BoModel().get_abs_type_id(conf_id)
# if abs_types:
# abs_types=abs_types
# else:
# abs_types = request.values.get('abs_types') or None
# abs_session_id = request.values.get('abs_session_id') or None
# abs_category = None
# result_type=None
# if abs_types:
# get_abs_session = BoModel().get_abs_session_name(conf_id,abs_types)
# else:
# get_abs_session = None
# if abs_session_id and abs_types:
# result_data = BoModel().usp_get_bo_result_announcement(conf_id,abs_types,abs_session_id,abs_category,result_type)
# else:
# result_data = None
# return render_template('backoffice/result_announcement/results.html',conf_id=conf_id,conf_key=conf_key,get_abs_types=get_abs_types,abs_types=abs_types,get_abs_session=get_abs_session,abs_session_id=abs_session_id,result_data=result_data)
# @app.route('/post_resultannouncement/<conf_id>/<conf_key>',methods=["GET","POST"])
# @RouteGroup.conf_required
# @RouteGroup.login_required #check if login else automatically redirect to login page
# @RouteGroup.bo_access_required
# def PostResultAnnouncement(conf_id,conf_key):
# if request.method == "POST":
# selection_type_id = request.form.get('ddl_selection_type_id') or None
# abs_session_id = request.values.get('ddl_session_id') or None
# selected_col = request.values.get('select_to' ) or None
# selected_abs_ids = request.form.getlist('selected_result_'+str(abs_session_id)) or None
# if selected_abs_ids:
# selected_abs_id = ','.join(selected_abs_ids)
# else:
# selected_abs_id=None
# if selected_col:
# update_data= BoModel().update_selected_abs_ids_v1(selected_col,abs_session_id,selected_abs_id,conf_id)
# return redirect(url_for('backoffice.ResultAnnouncement',conf_id=conf_id,conf_key=conf_key,selection_type_id=selection_type_id,abs_session_id=abs_session_id))
@app.route('/post_session_winner/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def PostSessionWinner(conf_id,conf_key):
selection_type_id = request.values.get('ddl_selection_type_id') or None
abs_session_id = request.values.get('ddl_session_id') or None
selected_col = request.values.get('selected_col' ) or None
selected_abs_id = request.values.get('selected_abs_id') or None
unselected_abs_id = request.values.get('unselected_abs_id') or None
if selected_col:
update_data= BoModel().update_session_and_award_winner(selected_col,selected_abs_id,unselected_abs_id,conf_id)
abs_category = None
result_type = None
if abs_session_id and selection_type_id:
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category,result_type)
abstract_data = render_template('backoffice/result_announcement/abstract_result.html',result_data=result_data)
if (update_data == "success"):
data = {"abstract_data":abstract_data,"msg" : "success" ,"status" : 1 }
json_data = json.dumps(data,default = str)
return json_data
else:
error_msg = "fail"
data = {"abstract_data":'',"msg" : error_msg ,"status" : 2 }
json_data = json.dumps(data,default = str)
return json_data
@app.route('/result_announcement_semi_final/<conf_id>/<conf_key>/<int:result_type>',methods=["GET","POST"])
@app.route('/result_announcement_semi_final/<conf_id>/<conf_key>/<int:result_type>/<selection_type_id>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
@RouteGroup.bo_access_required
def SemiFinalResultAnnouncement(conf_id,conf_key,result_type,selection_type_id=None):
is_semi_final = 1
is_final = None
is_winner = None
btn_val = request.values.get('export_button') or None
get_abs_session_id=BoModel().get_abs_session_id(is_semi_final,is_final,is_winner,conf_id)
if selection_type_id:
selection_type_id=selection_type_id
else:
selection_type_id = request.form.getlist('selection_type_id')or None
# selection_type_id = request.values.get('selection_type_id') or None
if selection_type_id:
selection_type_id = ",".join(selection_type_id)
else:
selection_type_id = None
abs_category_id = request.values.get('abs_category_id') or None
abs_session_id = None
if selection_type_id and selection_type_id !="All":
get_categories = BoModel().get_cateories_by_abs_type(conf_id,selection_type_id,is_semi_final)
else:
get_categories = None
# if abs_category_id and selection_type_id:
if selection_type_id:
if btn_val=="Export":
output = io.BytesIO()
Workbook =xlwt.Workbook()
# session_details = 'Start Date : ' + str(session_dates[0]['start_date'].strftime('%d-%m-%Y %H:%M:%S')) + ' Hall : ' + str(session_dates[0]['name']) + ' End Date : ' + str(session_dates[0]['end_date'].strftime('%d-%m-%Y %H:%M:%S'))
sh = Workbook.add_sheet('result_data')
sh.write(0,0,'BEST PAPER OF THE SESSION')
# sh.write(1,0,session_details)
sh.write(1,0,'Sno')
sh.write(1,1,'Session name')
sh.write(1,2,'Category')
sh.write(1,3,'Abstract no')
sh.write(1,4,'Title')
sh.write(1,5,'Chief Author name')
sh.write(1,6,'Presenting Author name')
sh.write(1,7,'Presenting Author mobile no')
sh.write(1,8,'Presenting Author email')
sh.write(1,9,'Co-author')
sh.write(1,10,'Abstracts Content')
idx=1
sno_val = 0
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category_id,result_type)
for data in result_data:
abstract_data= str(data['session_name'] + '-'+ data['abs_type_and_no']) +':' + str(data['title']) + " PRESENTING AUTHOR " + str(data['presenting_author'])+':' +'['+ str(data['presenting_author_membership_no']) + ']' + '(' + str(data['presenting_author_mobile']) + ')'
sno_val = sno_val+1
sh.write(idx+1,0,sno_val)
sh.write(idx+1,1,data['session_name'])
sh.write(idx+1,2,data['display_name'])
sh.write(idx+1,3,data['abs_type_and_no'])
sh.write(idx+1,4,data['title'])
sh.write(idx+1,5,data['chief_author'])
sh.write(idx+1,6,data['presenting_author'])
sh.write(idx+1,7,data['presenting_author_mobile'])
sh.write(idx+1,8,data['presenting_author_email'])
sh.write(idx+1,9,data['co_author'])
sh.write(idx+1,10,abstract_data)
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename= Best paper of the session"+"_"+str(date)+".xls"})
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category_id,result_type)
abstract_data = render_template('backoffice/result_announcement/semi_final_abstract_result.html',result_data=result_data)
else:
result_data = None
abstract_data = None
return render_template('backoffice/result_announcement/semi_final_result.html',conf_id=conf_id,conf_key=conf_key,get_abs_session_id=get_abs_session_id,get_categories=get_categories,selection_type_id=selection_type_id,abs_category_id=abs_category_id,result_type=result_type,result_data=result_data,abstract_data=abstract_data)
@app.route('/post_award_winner/<conf_id>/<conf_key>/<int:result_type>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def PostAwardWinner(conf_id,conf_key,result_type):
selected_col = request.values.get('selected_col' ) or None
selected_abs_id = request.values.get('selected_abs_id') or None
unselected_abs_id = request.values.get('unselected_abs_id') or None
abs_category_id = request.values.get('ddl_category_id') or None
abs_session_id = None
selection_type_id = request.values.get('ddl_selection_type_id') or None
if selected_col:
update_data= BoModel().update_session_and_award_winner(selected_col,selected_abs_id,unselected_abs_id,conf_id)
if selection_type_id:
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category_id,result_type)
abstract_data =render_template('backoffice/result_announcement/semi_final_abstract_result.html',result_data=result_data)
if (update_data == "success"):
data = {"abstract_data":abstract_data,"msg" : "success" ,"status" : 1 }
json_data = json.dumps(data,default = str)
return json_data
else:
error_msg = "fail"
data = {"abstract_data":'',"msg" : error_msg ,"status" : 2 }
json_data = json.dumps(data,default = str)
return json_data
# @app.route('/post_semi_final_resultannouncement/<conf_id>/<conf_key>/<int:result_type>',methods=["GET","POST"])
# @RouteGroup.conf_required
# @RouteGroup.login_required #check if login else automatically redirect to login page
# @RouteGroup.bo_access_required
# def PostSemiFinalResultAnnouncement(conf_id,conf_key,result_type):
# if request.method == "POST":
# selection_type_id = request.form.get('ddl_selection_type_id') or None
# abs_category_id = request.form.get('ddl_category_id') or None
# selected_abs_id = request.form.getlist('selected_result_'+str(abs_category_id) )or None
# abs_session_id = None
# if selected_abs_id:
# selected_abs_ids = ','.join(selected_abs_id)
# else:
# selected_abs_ids=None
# updated_data= BoModel().update_selected_abs_ids_by_category_id(selected_abs_ids,selection_type_id,abs_category_id,conf_id)
# return redirect(url_for('backoffice.SemiFinalResultAnnouncement',conf_id=conf_id,conf_key=conf_key,result_type=result_type,abs_category_id=abs_category_id,selection_type_id=selection_type_id))
@app.route('/result_announcement_final/<conf_id>/<conf_key>/<int:result_type>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def FinalResultAnnouncement(conf_id,conf_key,result_type):
is_semi_final = None
is_final = 1
is_winner = None
btn_val = request.values.get('export_button') or None
get_abs_session_id=BoModel().get_abs_session_id(is_semi_final,is_final,is_winner,conf_id)
get_abs_awards = BoModel().get_abs_award_winner(conf_id)
selection_type_id = request.values.get('selection_type_id') or None
abs_session_id = None
abs_category_id = None
if selection_type_id:
if btn_val=="Export":
output = io.BytesIO()
Workbook =xlwt.Workbook()
session_details = str(get_abs_session_id[0]['type'])
# session_details = 'Start Date : ' + str(session_dates[0]['start_date'].strftime('%d-%m-%Y %H:%M:%S')) + ' Hall : ' + str(session_dates[0]['name']) + ' End Date : ' + str(session_dates[0]['end_date'].strftime('%d-%m-%Y %H:%M:%S'))
sh = Workbook.add_sheet('result_data')
sh.write(0,0,'BEST SUBJECT OF THE PAPER')
sh.write(1,0,session_details)
sh.write(2,0,'Sno')
sh.write(2,1,'Section name')
sh.write(2,2,'Session name')
sh.write(2,3,'Category')
sh.write(2,4,'Abstract no')
sh.write(2,5,'Title')
sh.write(2,6,'Chief Author name')
sh.write(2,7,'Presenting Author name')
sh.write(2,8,'Presenting Author mobile no')
sh.write(2,9,'Presenting Author email')
sh.write(2,10,'Co-author')
sh.write(2,11,'Abstracts Content')
idx = 2
sno_val = 0
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category_id,result_type)
for data in result_data:
abstract_data= str(data['session_name'] + '- ['+ data['abs_type_and_no']) +'] :' + str(data['title']) + " PRESENTING AUTHOR " + str(data['presenting_author'])+':' +'['+ str(data['presenting_author_membership_no']) + ']' + '(' + str(data['presenting_author_mobile']) + ')'
sno_val = sno_val+1
section_name = str(data['type'])+' - '+str(data['display_name'])
sh.write(idx+1,0,sno_val)
sh.write(idx+1,1,section_name)
sh.write(idx+1,2,data['session_name'])
sh.write(idx+1,3,data['display_name'])
sh.write(idx+1,4,data['abs_type_and_no'])
sh.write(idx+1,5,data['title'])
sh.write(idx+1,6,data['chief_author'])
sh.write(idx+1,7,data['presenting_author'])
sh.write(idx+1,8,data['presenting_author_mobile'])
sh.write(idx+1,9,data['presenting_author_email'])
sh.write(idx+1,10,data['co_author'])
sh.write(idx+1,11,abstract_data)
idx+=1
Workbook.save(output)
output.seek(0)
now = datetime.now()
date = now.strftime("%Y-%m-%d %H:%M")
# file_name = session_dates[0]['session_name']+" WinnerList"+"_"+str(date)
return Response(output, mimetype="application/ms-excel", headers={"Content-Disposition":"attachment;filename= Best subject of the paper"+"_"+str(date)+".xls"})
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category_id,result_type)
else:
result_data = None
return render_template('backoffice/result_announcement/final_result.html',conf_id=conf_id,conf_key=conf_key,get_abs_session_id=get_abs_session_id,selection_type_id=selection_type_id,result_type=result_type,result_data=result_data,get_abs_awards=get_abs_awards)
@app.route('/post_final_resultannouncement/<conf_id>/<conf_key>/<int:result_type>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def PostFinalResultAnnouncement(conf_id,conf_key,result_type):
if request.method == "POST":
selection_type_id = request.form.get('ddl_selection_type_id') or None
selected_abs_id = request.form.getlist('selected_result' )or None
# award_name = request.values.get('award_name') or None
abs_session_id = None
abs_category = None
if selected_abs_id:
selected_abs_ids = ','.join(selected_abs_id)
else:
selected_abs_ids=None
# get_award_id = BoModel().check_awards_by_selection_type_id(selection_type_id,conf_id)
# if get_award_id == None:
# data = {
# 'selection_type_id':selection_type_id,
# 'award_name' : award_name,
# 'conf_id':conf_id
# }
# award_id = BoModel().insert_award_by_selection_type_id(data)
# else:
# award_id = get_award_id['award_id']
# updated_data= BoModel().update_selected_abs_ids(award_id,selected_abs_ids,selection_type_id,conf_id)
updated_data= BoModel().update_selected_abs_ids(selected_abs_ids,selection_type_id,conf_id)
return redirect(url_for('backoffice.FinalResultAnnouncement',conf_id=conf_id,conf_key=conf_key,selection_type_id=selection_type_id,result_type=result_type))
@app.route('/result_announcement_winner/<conf_id>/<conf_key>/<int:result_type>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def WinnerResultAnnouncement(conf_id,conf_key,result_type):
is_semi_final= None
is_final = None
is_winner = 1
get_abs_session_id=BoModel().get_abs_session_id(is_semi_final,is_final,is_winner,conf_id)
selection_type_id = request.values.get('selection_type_id') or None
abs_session_id = None
abs_category_id = None
if selection_type_id:
result_data = BoModel().usp_get_bo_result_announcement(conf_id,selection_type_id,abs_session_id,abs_category_id,result_type)
else:
result_data = None
return render_template('backoffice/result_announcement/winner_result.html',conf_id=conf_id,conf_key=conf_key,get_abs_session_id=get_abs_session_id,selection_type_id=selection_type_id,result_type=result_type,result_data=result_data)
@app.route('/selected_final_screen/<conf_id>/<conf_key>/<col_name>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def SelectedFinalScreen(conf_id,conf_key,col_name=None):
confe = Auth.get_conference(conf_id)
selection_type_id =request.values.get('selection_type_id')
abs_session_id =request.values.get('abs_session_id')
abs_category_id =request.values.get('abs_category_id')
result_data = BoModel().usp_get_bo_selected_final_screen(conf_id,col_name,selection_type_id,abs_session_id,abs_category_id)
return render_template('backoffice/result_announcement/bw_selected_final_screen.html',conf_id=conf_id,col_name=col_name,conf_key=conf_key,confe=confe,result_data=result_data,selection_type_id=selection_type_id)
@app.route('/color_selected_final_screen/<conf_id>/<conf_key>/<col_name>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
@RouteGroup.bo_access_required
def ColorSelectedFinalScreen(conf_id,conf_key,col_name=None):
confe = Auth.get_conference(conf_id)
selection_type_id =request.values.get('selection_type_id')
abs_session_id =request.values.get('abs_session_id')
abs_category_id =request.values.get('abs_category_id')
# random_list = ["winner2024_ppt_1.jpg", "winner2024_ppt_2.jpg", "winner2024_ppt_3.jpg", "winner2024_ppt_4.jpg", "winner2024_ppt_5.jpg","winner2024_ppt_6.jpg"]
# random_num = str(random.choice(random_list))
random_num = None
result_data = BoModel().usp_get_bo_selected_final_screen(conf_id,col_name,selection_type_id,abs_session_id,abs_category_id)
return render_template('backoffice/result_announcement/color_selected_winner_screen.html',conf_id=conf_id,conf_key=conf_key,col_name=col_name,confe=confe,result_data=result_data,random_num=random_num,selection_type_id=selection_type_id)
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists