Sindbad~EG File Manager

Current Path : /home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/KSOS24/
Upload File :
Current File : //home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/KSOS24/ICController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session, app
from core.model.UserModel import UserModel
from core.model.AbstractModel import AbstractModel
from core.model.BoModel import BoModel
from random import randint
import datetime
from core.library.email import EMAIL
from datetime import timedelta,date,datetime
from core.library.cryptography import Cryptography
from core.library.route_group import RouteGroup
from core.library.auth import Auth
from core.library.helper import Helper
import ast
# import collections
from urllib.parse import unquote
from collections import defaultdict

#name : Mukesh kumar
#version : 1
#title: abstract submission
#date:07/02/2022 01:14

class ICController():

    def GuidelineIndex(abs_type,conf_id,conf_key):                                                
        guideline = UserModel().get_guidelines(abs_type)
        return render_template('users/guideline.html',guideline=guideline,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key)
        
    def AbstractsIndex(abs_type,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')
        consent_count_db = UserModel().get_user_consent_count(user_id,conf_id,confData['conf_schema'])
        setting_key   = 'IC_CONSENT_COUNT'
        consent_count = AbstractModel().settings(setting_key,conf_id)
        data          = UserModel().get_abstract_home_v1(user_id,abs_type,conf_id)
        my_abstracts  = data[0]
        eng_abstracts = data[1]
        validation    = AbstractModel().abstract_home_validation(abs_type,user_id,conf_id)
        abs_type_data = AbstractModel().get_abs_type_data(abs_type,conf_id)
        if validation["status"] != 1 :
            flash(validation["msg"])
        if(int(consent_count[0][0]["setting_value"]) < int(consent_count_db)):
            validation["status"] = 2
            flash(' You cannot participate not more than '+str(consent_count[0][0]["setting_value"])+" Instruction courses ")
        return render_template('users/KSOS24/IC/abstract.html',data=my_abstracts,abs_type='IC',data1=eng_abstracts,data2=validation,lent=len(my_abstracts),conf_id=conf_id,conf_key=conf_key,type=type,int=int,abs_type_data=abs_type_data)

    def main_layout(abs_type,abs_id,conf_id,conf_key):
        # abs_id   = Cryptography.decrypt(abs_id)
        return render_template('users/KSOS24/IC/main_IC.html',abs_type=abs_type,abs_id=abs_id,conf_id=conf_id,conf_key=conf_key)

    def New(abs_type,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')
        validation   = AbstractModel().abstract_home_validation(abs_type,user_id,conf_id)
        # print("validation KSOS",validation)
        if validation["status"] == 1:
            created_at = datetime.now()
            # print("created_at",created_at)
            result   = UserModel().new_abs(user_id,abs_type,32,created_at,conf_id,confData['conf_schema'])
            abs_id   = Cryptography.encrypt(int(result[0]))
            return abs_id
        else:
            return redirect(url_for('main.AbstractsIndex',abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))


    def Step1(abs_type,conf_id,conf_key):
        confData = Auth.get_conference(conf_id)
        json = {'msg':'','status' : 1,'data':''}
        abs_id       = request.values.get('abs_id')
        abs_id       = unquote(abs_id)
        abs_id       = int(Cryptography.decrypt(abs_id))
        society_id   = confData.get("society_id")
        user_id      = Auth.get_user(society_id).get('user_id')
        duration     = AbstractModel().settings(Auth.get_conference(conf_id).get('society_intial')+"_Duration",conf_id)
        print("duration",duration)
        if duration[0]:
            duration = duration[0][0]
        else:
            duration = {}  
        #categories = UserModel().get_categories(abs_type,conf_id)
        categories = UserModel().get_categories_v1(abs_type,conf_id)
        user_info    =   UserModel().get_users_member_no(user_id)#getting name and membership for the user_id
        if(int(abs_id) > 0):
            abstract_info = AbstractModel().get_abstracts_by_user_abs_id(user_id,abs_id,confData['conf_schema'])#getting abstract info from abstract table
            if abstract_info == [] :
                json = {'msg':'Abstract Not Found<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
                return jsonify(json)  
            if (abstract_info["abs_status_id"] != 0):
                json = {'msg':'Abstract already submitted<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
                return jsonify(json)  
            else:
                json["data"] = render_template('users/KSOS24/IC/step1.html',user_info=user_info,abs_type=abs_type,duration=duration,abs_id=abs_id,data=abstract_info,categories=categories,conf_id=conf_id,conf_key=conf_key)
                return jsonify(json)
        else:
            return redirect(url_for('main.AbstractsIndex',abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))

    def Step1post(abs_type,conf_id,conf_key):
        confData  =  Auth.get_conference(conf_id)
        pa_user_id= request.values.get('pa_user_id')
        abs_id    = request.values.get('abs_id')
        data = {'category_id': request.values.get("category"),
                'level'      : request.values.get("level"),
                'duration'   : request.values.get("duration")
                }
        cur_step = request.values['cur_step']
        if int(cur_step) <= 1:
            data["cur_step"] = 1
        step1update = UserModel().update_step(data,abs_id,confData.get('conf_schema'))#updating the step 1 data
        abs_id = Cryptography.encrypt(int(abs_id))
        return redirect(url_for('main.Step2',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
        

    def Step2(abs_type,conf_id,conf_key):
        json = {'msg':'','status' : 1,'data':''}
        abs_id    = request.values["abs_id"]
        abs_id    = unquote(abs_id)
        abs_id    = int(Cryptography.decrypt(abs_id))
        confData  =  Auth.get_conference(conf_id)
        step2data = UserModel().steps_data(abs_id,confData.get('conf_schema'))#get date from DB
        if step2data == [] :
                json = {'msg':'Abstract Not Found<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
                return jsonify(json)
        if(step2data['abs_status_id'] == 0 ):
            step2data['abs_id'] = Cryptography.encrypt(step2data['abs_id'])
            json["data"] = render_template('users/KSOS24/IC/step2.html',data=step2data,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key)
            return jsonify(json)
        else:
            json = {'msg':'Abstract already submitted<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
            return jsonify(json)

    def StepPost_2(abs_type,conf_id,conf_key):
        confData  =  Auth.get_conference(conf_id)
        user_id  = request.values["user_id"]
        abs_id   = request.values.get("abs_id")
        is_next  = request.values.get('is_next')
        if (int(is_next) == 1):
            abs_id   = int(Cryptography.decrypt(abs_id)) 
            data     = {
                        'title'    :request.values["title"],
                        'synopsis' :request.values["Synopsis"],
                        'resume'   :request.values["resume"],
                        'updated_at':datetime.now(),
                        }
            cur_step = request.values['cur_step']
            if int(cur_step) <= 2:
                data["cur_step"] = 2
            stepdataupdate = UserModel().update_step(data,abs_id,confData.get('conf_schema'))#updating data to DB
            abs_id         = Cryptography.encrypt(int(abs_id))
            return redirect(url_for('main.Step3',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
        else:
            return redirect(url_for('main.Step1',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))

    def Step3(abs_type,conf_id,conf_key):
        json = {'msg':'','status' : 1,'data':''}
        confData  =  Auth.get_conference(conf_id)
        society_id    = confData.get("society_id")
        user_id       = Auth.get_user(society_id).get('user_id')
        abs_id    = request.values["abs_id"]
        abs_id    = int(Cryptography.decrypt(abs_id))
        stepdata  =  UserModel().steps_data(abs_id,confData.get('conf_schema'))#get date from DB
        duration_db =  AbstractModel().settings(Auth.get_conference(conf_id).get('society_intial')+"_Duration",conf_id)
        if stepdata == [] :
                json = {'msg':'Abstract Not Found<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
                return jsonify(json)
        if(stepdata['abs_status_id'] == 0):
            abs_id = Cryptography.encrypt(int(abs_id))
            json["data"] = render_template('users/KSOS24/IC/step3.html',duration_db=duration_db[0][0]['setting_value'],addmodel=stepdata,data=stepdata,abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key,user_id=user_id)
            return jsonify(json)
        else:
            json = {'abs_id':abs_id,'msg':'Abstract already submitted<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
            return jsonify(json)
        
    def Step3post(abs_id,abs_type,conf_id,conf_key):
        confData  =  Auth.get_conference(conf_id)
        abs_id      =   unquote(abs_id)
        abs_id1 = int(Cryptography.decrypt(abs_id))
        is_next  = request.values.get('is_next')
        cur_step = request.values['cur_step']
        data = {}
        if int(cur_step) <= 3:
            data["cur_step"] = 3
            stepdataupdate = UserModel().update_step(data,abs_id1,confData.get('conf_schema'))
        if (int(is_next) == 1):
# 			return ICController.Step4(abs_id,abs_type,conf_id,conf_key)
            return redirect(url_for('main.Step4',abs_id = abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
        else:
            return redirect(url_for('main.Step2',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))


    def Step3getauthor(abs_type,conf_id,conf_key):
        confData     = Auth.get_conference(conf_id)
        abs_id   = request.values["abs_id"]
        abs_id   = int(Cryptography.decrypt(abs_id))
        limit_of_authors = AbstractModel().limit_of_instructors(abs_id,confData.get('conf_schema'))#geting count of author for co-authors
        abs_cat = "_COI_COUNT"
        setting  = AbstractModel().settings(abs_type+abs_cat,conf_id)
        data=AbstractModel().get_authors(abs_id,confData['conf_schema'])#geting authour to show in step 3 table)
        panel_discussion = AbstractModel().get_panel_disscussion_v1(abs_id,confData['conf_schema'])#geting panel discussion
        panel_discussion = int(panel_discussion["total_duration_ab"])
# 		print("panel_discussion",panel_discussion)
        data2={'panel_discussion':panel_discussion}
        panel_discussion = AbstractModel().update_panel(data2,abs_id)
        total_duration   = AbstractModel().total_duration_step4_v1(abs_id,confData['conf_schema'])#getting total discussion 
        duration_db      = AbstractModel().settings(confData["society_intial"]+"_Duration",conf_id)
        if not total_duration:
            total_duration = 0
        if(limit_of_authors >= int(setting[0][0]["setting_value"])) or (int(duration_db[0][0]['setting_value']) == int(total_duration)):
            limit = 1
        else:
            limit = 0
        # print(limit)
        # remaining_duration= AbstractModel.get_remaining_duration(abs_id)
        return render_template('users/KSOS24/IC/coi_table.html',data=data,total_duration=total_duration,data2=data2,duration_db=duration_db[0][0]['setting_value'],limit=limit,panel_discussion=panel_discussion,conf_id=conf_id,conf_key=conf_key)

# 	def Step3getauthor(abs_type,conf_id,conf_key):
# 		abs_id   = request.values["abs_id"]
# 		abs_id   = int(Cryptography.decrypt(abs_id))
# 		limit_of_authors = AbstractModel().limit_of_instructors(abs_id,confData.get('conf_schema'))#geting count of author for co-authors
# 		abs_cat = "_COI_COUNT"
# 		setting  = AbstractModel().settings(abs_type+abs_cat,conf_id)
# 		data=AbstractModel().get_authors(abs_id,confData['conf_schema'])#geting authour to show in step 3 table)
# 		panel_discussion = AbstractModel().get_panel_disscussion(abs_id,confData['conf_schema'])#geting panel discussion
# 		total_duration   = AbstractModel().total_duration_step4(abs_id,confData['conf_schema'])#getting total discussion 
# 		duration_db      = AbstractModel().settings(Auth.get_conference(conf_id).get('society_intial')+"_Duration",conf_id)
# 		if not total_duration:
# 			total_duration = 0
# 		if(limit_of_authors >= int(setting[0][0]["setting_value"])) or (int(duration_db[0][0]['setting_value']) == int(total_duration)):
# 			limit = 1
# 		else:
# 			limit = 0
# 		# print(limit)
# 		return render_template('users/KSOS24/IC/coi_table.html',data=data,total_duration=total_duration,duration_db=duration_db[0][0]['setting_value'],limit=limit,panel_discussion=panel_discussion,conf_id=conf_id,conf_key=conf_key)


    def Step3model(abs_type,conf_id,conf_key):
        user_id  = request.values["searchvalue"]
        addcoinst=UserModel().get_user_data(user_id)#getting user data
        return render_template('users/KSOS24/IC/insert_model.html',data=addcoinst,user_id =user_id,conf_id=conf_id,conf_key=conf_key)

    def add_and_edit_intructors(abs_type,conf_id,conf_key):#this will add coinstructor for IC
        confData    = Auth.get_conference(conf_id)
        duration    =request.values.get("duration")
        topic       =request.values.get("topic")
        topic_order =request.values.get("topic_order")
        user_id     =request.values.get("user_id")
        abs_id      =request.values.get("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,
                }
        confe_name =   confData.get('society_intial')
        duration_db =  AbstractModel().settings(confe_name+"_Duration",conf_id)
        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
# 			print("data",data)
            return jsonify(status = 0)
        total_duration=AbstractModel().authors_total_duration_for_edit_v1(abs_id,topic_id,confData.get('conf_schema'))#getting total duration for inserting the author  
        if not total_duration:
            total_duration = 0
        duration_in_db = str(total_duration)
        total_duration=total_duration+int(duration)
        if total_duration <= int(duration_db[0][0]['setting_value']) 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 <= int(duration_db[0][0]['setting_value']):
            data=AbstractModel().edit_to_authors(data1,topic_id,confData.get('conf_schema'))#editing the existing author
            return jsonify(status = 0,duration_in_db = duration_in_db )
        else:
            return jsonify(status = 1,duration_in_db = duration_in_db)

    def Step3editauthor(abs_type,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('users/KSOS24/IC/insert_model.html',data=data,conf_id=conf_id,conf_key=conf_key)

    def SearchInstructor(abs_type,conf_id,conf_key):
        confData = Auth.get_conference(conf_id)
        searchtext = request.values["searchtext"]
        btn_val    = request.values["btn_val"]
        society_id = Auth.get_conference(conf_id).get('society_id')
        abs_id     = request.values["abs_id"]
        abs_id     = int(Cryptography.decrypt(abs_id))
        abs_coi_users = AbstractModel().get_count_of_coi(abs_id,confData.get('conf_schema'))
        role_id           = 33
        mem_type          = None
        coi_count         = "IC_COI_COUNT"
        coi_count_setting = AbstractModel().settings(coi_count,conf_id)
        coi_count_abs     = AbstractModel().get_count_of_coi(abs_id,confData.get('conf_schema'))
        if coi_count_abs:
            coi_user_list = coi_count_abs["coi_user_ids"].split(',')
            coi_count_abs["coi_user_ids"] = coi_user_list

        # data          =  UserModel().get_search_data(searchtext,role_id,abs_type,society_id)#getting search data from DB to step3 
# 		data          =  UserModel().get_search_data_presenting_v1(mem_type,role_id,searchtext,abs_type,abs_id,society_id)#getting search data from DB to step3
        data          =  UserModel().get_search_data_presenting(mem_type,role_id,searchtext,abs_type,society_id,conf_id) 
# 		print("searched data",data)
        consent_count = 'IC_CONSENT_COUNT'
        data1         =  AbstractModel().settings(consent_count,conf_id)
        print(data)#get settings for IC councent count
        return render_template('users/KSOS24/IC/search_table.html',data=data,data1=int(data1[0][0]["setting_value"]),coi_setting=coi_count_setting[0][0]["setting_value"],coi_abs = coi_count_abs,conf_id=conf_id,conf_key=conf_key)

    
        
    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_society_data(conf_id).get('society_intial')
        data=AbstractModel().total_duration(abs_id,panel_discussion,confe_name,conf_id,confData.get('conf_schema'))#getting total duration
        data=int(data)
        return jsonify(data)

    
    def Check_total_duration(conf_id,conf_key,panel_discussion):
        confData = Auth.get_conference(conf_id)
        abs_id=request.values["abs_id"]
        abs_id = int(Cryptography.decrypt(abs_id))
# 		panel_discussion = int(request.values.get("panel_discussion") or 0)
        # duration_model = int(request.values["duration_model"])
        confe_name =   Auth.get_society_data(conf_id).get('society_intial')
        count=AbstractModel().total_duration(abs_id,panel_discussion,confe_name,conf_id,confData.get('conf_schema'))#getting total duration
        duration_db      = AbstractModel().settings(Auth.get_conference(conf_id).get('society_intial')+"_Duration",conf_id)
        if not count:
            count = 0
        if int(duration_db[0][0]['setting_value']) < int(count):
            return 1,duration_db[0][0]['setting_value']
        else:
            return 0,duration_db[0][0]['setting_value'] 
    

    def Step4(abs_id,abs_type,conf_id,conf_key):
        confData	 = Auth.get_conference(conf_id)
        json = {'msg':'','status' : 1,'data':''}
        # print(abs_id)
        abs_id   = unquote(abs_id)
        abs_id   = int(Cryptography.decrypt(abs_id))
        society_id    = Auth.get_conference(conf_id).get("society_id")
        user_id       = Auth.get_user(society_id).get('user_id')
        check_authors_count   = AbstractModel().check_authors_count(abs_id,33,confData.get('conf_schema'))#this is used for step3 co-author count for IC AND FP
        total_duration_is_over,duration_db = ICController.Check_total_duration(conf_id,conf_key,check_authors_count['panel_discussion'])
        
        if total_duration_is_over == 1:
                json = {'msg':'Sorry, The Total duration cannot exceed '+duration_db+' minutes','status' : 0,'data':''}
                return jsonify(json)
        if check_authors_count == [] :
                json = {'msg':'Abstract Not Found<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
                return jsonify(json)
        if(check_authors_count["abs_status_id"] == 0 ):
            if(check_authors_count["authors_count"] > 0 ):
                data      = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))#getting user and abstract data
                data1     = AbstractModel().get_authors(abs_id,confData['conf_schema'])#geting co authors
                abs_id    = Cryptography.encrypt(int(abs_id))
                json["data"] = render_template('users/KSOS24/IC/step4.html',abs_type=abs_type,abs_id=abs_id,data=data,data1=data1,conf_id=conf_id,conf_key=conf_key)
                return jsonify(json)
            else:
                msg = ('Enter at least one Co-Instructor')
                json = {'msg':msg,'status' : 0,'data':''}
                return jsonify(json)
        else:
            json = {'msg':'Abstract already submitted<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
            return jsonify(json)

    def Mail(abs_id,conf_id,conf_key):
        conf_data = Auth.get_conference(conf_id)
        society_id = conf_data['society_id']
        user_id    = Auth.get_user(society_id).get('user_id')
        abs_id     = unquote(abs_id)
        abs_id     = int(Cryptography.decrypt(abs_id))
        data       = AbstractModel().get_sept4_data(abs_id,conf_data.get('conf_schema'))
        co_instructors = AbstractModel().get_authors(abs_id,conf_data['conf_schema'])
        is_next    = request.values.get('is_next')
        if (int(is_next) == 1):
            if(data["status_check"] == 0):
                consent_count_db = UserModel().get_user_consent_count(user_id,conf_id,conf_data.get('conf_schema'))
                setting_key   = 'IC_CONSENT_COUNT'
                consent_count = AbstractModel().settings(setting_key,conf_id)
                if(int(consent_count[0][0]["setting_value"]) > int(consent_count_db)):
                    now      = datetime.now()
                    data1    = {
                                 'submitted_at' :  str(datetime.now()),
                                 }
                    insttructors_email= AbstractModel().fp_authors_for_email(abs_id,conf_data.get('conf_schema'))#getting co authors details
                    # confe_logo        = Auth.get_society_data(conf_id).get('email_logo')
                    output = AbstractModel().abstract_submited(user_id,abs_id,data["abs_type"],data1,conf_id)
                    data   = AbstractModel().get_sept4_data(abs_id,conf_data.get('conf_schema'))
                    for i in insttructors_email:
                        template_name = 'IC_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': conf_data['conf_name']}
                        subject       = Helper.merge_tags(mailData.subject,sub_data)
                        email         = i["email"]
                        mail_data     = {'mail_content': mailData.mail_content,'data': data,'data1':co_instructors,'confData':conf_data}
                        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=conf_data)
                        EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
                        # return html
                    co_instructor = co_instructor_mail(abs_id,conf_id,conf_key)
                    if output == "success":
                        abs_id  = Cryptography.encrypt(int(abs_id))
                        user_id = Cryptography.encrypt(int(user_id))
                        return redirect(url_for('main.success',abs_type=data["abs_type"],abs_id=abs_id,user_id=user_id,conf_id=conf_id,conf_key=conf_key))
                else:
                    flash(' You cannot participate not more than '+str(consent_count[0][0]["setting_value"])+" Instruction courses ")
                    return redirect(url_for('main.AbstractsIndex',abs_type=data["abs_type"],conf_id=conf_id,conf_key=conf_key)) 
            else:
                flash('This '+data["abs_type"]+''+str(data["abs_no"])+' is already submitted')
                return redirect(url_for('main.AbstractsIndex',abs_type=data["abs_type"],conf_id=conf_id,conf_key=conf_key)) 
        else:
            abs_id = Cryptography.encrypt(int(abs_id))
            return redirect(url_for('main.Step3',abs_id=abs_id,abs_type=data["abs_type"],conf_id=conf_id,conf_key=conf_key))

    def co_instructor_consent(user_id,abs_id,abs_type,topic_id,conf_id,conf_key):
        confData	 = Auth.get_conference(conf_id)
        user_id   = unquote(user_id)
        topic_id  = unquote(topic_id)
        abs_id    = unquote(abs_id)
        abs_id    = int(Cryptography.decrypt(abs_id))
        user_id   = int(Cryptography.decrypt(user_id))
        topic_id  = int(Cryptography.decrypt(topic_id))
        data      = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
        data1     = AbstractModel().get_coi_by_topic_id(topic_id,confData.get('conf_schema'))
        data1['user_id']  = Cryptography.encrypt(int(data1['user_id']))
        data1['topic_id'] = Cryptography.encrypt(int(data1['topic_id']))
        html = render_template('users/KSOS24/IC/coi_consent.html',data=data,data1=data1,user_id=user_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key)
        return html

    def success(abs_type,abs_id,user_id,conf_id,conf_key):
        confData	 = Auth.get_conference(conf_id)
        abs_id      =   unquote(abs_id)
        user_id      =   unquote(user_id)
        abs_id        =  int(Cryptography.decrypt(abs_id))
        user_id       =  int(Cryptography.decrypt(user_id))
        authors       =  AbstractModel().get_authors(abs_id,confData['conf_schema'])
        data          =  AbstractModel().get_abstracts_by_user_abs_id(user_id,abs_id,confData['conf_schema'])
        alert_class   = "alert-success"
        alert_image   = "/static/images/wrong.png"
        alert_message = "Congratulations! your "+ data["abs_type"] + str(data["abs_no"]) +" is submitted successfully "
        return render_template('users/KSOS24/IC/error_sucess.html',alert_class=alert_class,alert_message=alert_message,abs_id=abs_id,data=data,data2=authors,alert_image=alert_image,conf_id=conf_id,conf_key=conf_key)

    def View(abs_id,conf_id,conf_key):
        confData	 = Auth.get_conference(conf_id)
        abs_id      = unquote(abs_id)
        abs_id      = int(Cryptography.decrypt(abs_id))
        stepsdata   = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
        co_auth     = AbstractModel().get_authors(abs_id,confData['conf_schema'])
        pr_auth     = AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))
        return render_template('users/KSOS24/IC/view.html',abs_id=abs_id,data=stepsdata,data2=pr_auth,data1=co_auth,conf_id=conf_id,conf_key=conf_key)

    def Consent_status(user_id,topic_id,abs_type,status,conf_id,conf_key):
        user_id      = unquote(user_id)
        topic_id     = unquote(topic_id)
        user_id      = int(Cryptography.decrypt(user_id))
        topic_id     = int(Cryptography.decrypt(topic_id))
        confData     = Auth.get_conference(conf_id)
        confe_logo   = confData.get('email_header_logo')
        check_status = AbstractModel().check_consent_status(topic_id,confData.get('conf_schema'))
        data1        = AbstractModel().get_sept4_data(check_status["abs_id"])
        # print(data1)
        if (check_status["consent_status_id"] == 0):
            data             = AbstractModel().get_email_consent(topic_id,confData.get('conf_schema'))
            consent_count_db = UserModel().get_consent_count_email(topic_id,conf_id,confData['conf_schema'])
            email            = data[0]
            if(status == 2):
                setting_key   = 'IC_CONSENT_COUNT'
                consent_count = AbstractModel().settings(setting_key,conf_id)
                if(int(consent_count[0][0]["setting_value"]) > int(consent_count_db)):
                    consent_data = {'consent_status_id':status,'consent_at':datetime.now(),'updated_at':datetime.now()}
                    AbstractModel().edit_to_authors(consent_data,topic_id)
                    # statustodb = AbstractModel().status_to_db(topic_id,status)
                    template_name = 'Co_Ins_Consent_Yes_Mail'
                    mailData      = UserModel().get_mail_templates(template_name,conf_id)
                    sub_data      = {'abs_type':data1['abs_type'],'abs_no':str(data1['abs_no'])}
                    subject       = Helper.merge_tags(mailData.subject,sub_data)
                    mail_data     = {'mail_content': mailData.mail_content,'data':data[1],'data1':data1,'confData':confData,'topic':data[2]}
                    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)
                    
                    alert_class   = "alert-success"
                    alert_message = "Thank you for providing your response.  An automated email shall be sent to the chief instructor conveying your response."
                    alert_image   = "/static/images/wrong.png"
                    return render_template('users/error_success.html',confe_logo=confe_logo,alert_class=alert_class,alert_message=alert_message,abs_type=abs_type,alert_image=alert_image,user_id=data1["user_id"],conf_id=conf_id,conf_key=conf_key)
                else:
                    alert_class   = 'alert-danger'
                    alert_message = "Sorry. You cannot be a co-instructor for more than "+ str(consent_count[0][0]["setting_value"]) +" ICs."
                    alert_image   = "/static/images/right.png"
                    return render_template('users/error_success.html',confe_logo=confe_logo,alert_class=alert_class,alert_message=alert_message,abs_type=abs_type,alert_image=alert_image,user_id=data1["user_id"],conf_id=conf_id,conf_key=conf_key)
            else:
                return render_template('users/KSOS24/IC/consent_regrets.html',conf_id=conf_id,conf_key=conf_key,topic_id=topic_id,abs_type=abs_type,status=status)
                
        else:
            alert_class   = 'alert-danger'
            alert_message = "Your response has already been registered."
            alert_image   = "/static/images/right.png"
            return render_template('users/error_success.html',confe_logo=confe_logo,alert_class=alert_class,alert_message=alert_message,abs_type=abs_type,alert_image=alert_image,user_id=data1["user_id"],conf_id=conf_id,conf_key=conf_key)



    def Change_co_instructor(abs_id,abs_type,conf_id,conf_key):
        confData     = Auth.get_conference(conf_id)
        change_author = AbstractModel().get_change_author(abs_id,confData.get('conf_schema'))
        # print(change_author)
        return render_template('users/KSOS24/IC/coi_change.html',conf_id=conf_id,abs_type=abs_type,abs_id=abs_id,conf_key=conf_key,co_authors=change_author)

    def Update_coi(abs_type,conf_id,conf_key):
        confData     = Auth.get_conference(conf_id)
        topic_id = request.values.get('topic_id')
        user_id  = request.values.get('user_id')
        abs_id   = request.values.get('abs_id')
        data1   = AbstractModel().update_coi_user(topic_id,user_id,confData.get('conf_schema'))
        data       = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema')) 
        # subject    = Auth.get_conference(conf_id).get('conf_name') + "- Instruction Course consent request"
        # confe_logo =  Auth.get_conference(conf_id).get('email_logo')
        for h in data1:
            habs_id      = h["abs_id"]
            user_id      = h["user_id"]
            topic_id     = h["topic_id"]
            en_abs_id    = Cryptography.encrypt(int(habs_id))
            en_user_id   = Cryptography.encrypt(int(user_id))
            en_topic_id  = Cryptography.encrypt(int(topic_id))
            h["abs_id"]  = en_abs_id
            h["user_id"] = en_user_id
            h["topic_id"]= en_topic_id
        for i in data1:
            email        = i["email"]
            template_name = 'Co_Instructor_mail'
            mailData      = UserModel().get_mail_templates(template_name,conf_id)
            sub_data      = {'abs_type':data['abs_type'],'abs_no':str(data['abs_no'])}
            subject       = Helper.merge_tags(mailData.subject,sub_data)
            mail_data     = {'mail_content': mailData.mail_content,'data': data,'data1':i,'confData':confData,'abs_type':data['abs_type']}
            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)
            EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
        return redirect(url_for('main.Change_co_instructor',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
        
    def Send_reminder(abs_type,conf_id,conf_key):
        confData   = Auth.get_conference(conf_id)
        abs_id     = request.values.get('abs_id')
        data       = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
        data1      = AbstractModel().get_authors_1(abs_id,confData.get('conf_schema'))
        confData   = Auth.get_conference(conf_id) 
        # subject    = " Reminder For "+ Auth.get_conference(conf_id).get('conf_name') + "- Instruction Course consent request"
        # confe_logo =  Auth.get_conference(conf_id).get('email_logo')
        for h in data1:
            habs_id      = h["abs_id"]
            user_id      = h["user_id"]
            topic_id     = h["topic_id"]
            en_abs_id    = Cryptography.encrypt(int(habs_id))
            en_user_id   = Cryptography.encrypt(int(user_id))
            en_topic_id  = Cryptography.encrypt(int(topic_id))
            h["abs_id"]  = en_abs_id
            h["user_id"] = en_user_id
            h["topic_id"]= en_topic_id
        for i in data1:
            email = i["email"]
            template_name = 'Co_Instructor_mail'
            mailData      = UserModel().get_mail_templates(template_name,conf_id)
            sub_data      = {'abs_type':data['abs_type'],'abs_no':str(data['abs_no'])}
            subject       = Helper.merge_tags(mailData.subject,sub_data)
            mail_data     = {'mail_content': mailData.mail_content,'data': data,'data1':i,'confData':confData,'abs_type':data['abs_type']}
            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)
            EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
            
        json = {'msg':'Reminder mail sent successfully','status' : 0,'data':''}
        return jsonify(json)
        # flash("Reminder mail sent successfully")
        # return redirect(url_for('main.AbstractsIndex',abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
        
    def postRegretRemarks(abs_type,topic_id,conf_id,conf_key):
        confData       = Auth.get_conference(conf_id) 
        regret_remarks = request.values.get('regret_remarks') or None
        status         = request.values.get('status') or None
        
        check_status  = AbstractModel().check_consent_status(topic_id,confData.get('conf_schema'))
        # print(check_status)
        data1         = AbstractModel().get_sept4_data(check_status["abs_id"])
        if (check_status["consent_status_id"] == 0):
            consent_data   = {'consent_status_id':status,'consent_at':datetime.now(),'updated_at':datetime.now(),'consent_reason':regret_remarks}
            AbstractModel().edit_to_authors(consent_data,topic_id)
            data             = AbstractModel().get_email_consent(topic_id,confData.get('conf_schema'))
            consent_count_db = UserModel().get_consent_count_email(topic_id,conf_id,confData['conf_schema'])

            email            = data[0]
            # statustodb    = AbstractModel().status_to_db(topic_id,status)
            template_name = 'Co_Ins_Consent_No_Mail'
            mailData      = UserModel().get_mail_templates(template_name,conf_id)
            sub_data      = {'abs_type':data1['abs_type'],'abs_no':str(data1['abs_no'])}
            subject       = Helper.merge_tags(mailData.subject,sub_data)
            mail_data     = {'mail_content': mailData.mail_content,'data':data[1],'data1':data1,'confData':confData,'topic':data[2],'remarks':regret_remarks}
            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)
            EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
            # return html
            alert_class   = "alert-success"
            alert_message = "Thank you for providing your response.  An automated email shall be sent to the chief instructor conveying your response."
            alert_image   = "/static/images/wrong.png"
            return render_template('users/error_success.html',alert_class=alert_class,alert_message=alert_message,abs_type=abs_type,alert_image=alert_image,user_id=data1["user_id"],conf_id=conf_id,conf_key=conf_key)
        
        else:
            alert_class   = 'alert-danger'
            alert_message = "Your response has already been registered."
            alert_image   = "/static/images/right.png"
            return render_template('users/error_success.html',alert_class=alert_class,alert_message=alert_message,abs_type=abs_type,alert_image=alert_image,user_id=data1["user_id"],conf_id=conf_id,conf_key=conf_key)


def co_instructor_mail(abs_id,conf_id,conf_key):
        if(abs_id > 0):
            confData   = Auth.get_conference(conf_id) 
            data       = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
            data1      = AbstractModel().get_authors_1(abs_id,confData.get('conf_schema'))
            # confe_logo =  Auth.get_conference(conf_id).get('email_logo')
            for h in data1:
                habs_id      = h["abs_id"]
                user_id      = h["user_id"]
                topic_id     = h["topic_id"]
                en_abs_id    = Cryptography.encrypt(int(habs_id))
                en_user_id   = Cryptography.encrypt(int(user_id))
                en_topic_id  = Cryptography.encrypt(int(topic_id))
                h["abs_id"]  = en_abs_id
                h["user_id"] = en_user_id
                h["topic_id"]= en_topic_id
            for i in data1:
                email = i["email"]
                template_name = 'Co_Instructor_mail'
                mailData      = UserModel().get_mail_templates(template_name,conf_id)
                sub_data      = {'abs_type':data['abs_type'],'abs_no':str(data['abs_no'])}
                subject       = Helper.merge_tags(mailData.subject,sub_data)
                mail_data     = {'mail_content': mailData.mail_content,'data': data,'data1':i,'confData':confData,'abs_type':data['abs_type']}
                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)
                EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
            return None
        else:
            return redirect(url_for('main.AbstractsIndex',abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))

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