Sindbad~EG File Manager

Current Path : /home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/TNASICON24/
Upload File :
Current File : //home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/TNASICON24/OController.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
import datetime

# from .. import Cryptography,Auth,RouteGroup
from core.library.email import EMAIL
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
from datetime import timedelta,date,datetime

import ast
# import collections
from urllib.parse import unquote
from collections import defaultdict
#S3 import
import os
from werkzeug.utils import secure_filename
from os.path import join, dirname, realpath
import boto3, botocore
from botocore.exceptions import ClientError

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


class OController():
    def AbstractsIndex(abs_type,conf_id,conf_key):            
        # print("OController")
        society_id  = Auth.get_conference(conf_id).get("society_id")
        user_id     = Auth.get_user(society_id).get('user_id')
        data          = UserModel().get_abstract_home(user_id,abs_type,conf_id)
        validation    = AbstractModel().abstract_home_validation('O',user_id,conf_id)
        my_abstracts  = data[0]
        eng_abstracts = data[1]

        if(validation["status"] != 1):
            flash(validation["msg"])
        return render_template('users/TNASI24/O/abstract.html',data=my_abstracts,abs_type='O',data1=eng_abstracts,data2 = validation,lent=len(my_abstracts),conf_id=conf_id,conf_key=conf_key)

    def main_layout(abs_type,abs_id,conf_id,conf_key):
        # abs_id   = Cryptography.decrypt(abs_id)
        # print(abs_id)
        return render_template('users/TNASI24/O/main_O.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 = Auth.get_conference(conf_id).get("society_id")
        user_id = Auth.get_user(society_id).get('user_id')
        created_at = datetime.now()
        result   = UserModel().new_abs(user_id,abs_type,34,created_at,conf_id,confData['conf_schema'])
        abs_id   = Cryptography.encrypt(int(result[0]))
        return abs_id
        

    def Step1(abs_type,conf_id,conf_key):
        json        = {'msg':'','status' : 1,'data':''}
        abs_id      =   int(Cryptography.decrypt(unquote(request.values.get('abs_id'))))
        # print("abs_id in step 1",abs_id)
        society_id  =   Auth.get_conference(conf_id).get("society_id")
        user_id     =   Auth.get_user(society_id).get('user_id')
        user_info   =   UserModel().get_users_member_no(user_id)#getting name and membership for the user_id
        # categories  =   UserModel().get_categories(abs_type,conf_id)
        categories  =   UserModel().get_categories_v1(abs_type,conf_id)
        if(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):
                type_of_presentation  = AbstractModel().get_usp_type_of_presentation(user_id,conf_id)#getting presenting type from DB for PP
                abs_id                = Cryptography.encrypt(abs_id)
                # print("in if of step 1 abs_id",abs_id)
                json['data']          = render_template('users/TNASI24/O/step1.html',user_info=user_info,abs_id=abs_id,abs_type=abs_type,data=abstract_info,type_of_presentation=type_of_presentation,categories=categories,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)
        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)
        json = {'msg':'','status' : 0,'data':''}
        abs_id    = request.values.get('abs_id')
        abs_id    = int(Cryptography.decrypt(abs_id))
        data = {
        'category_id' :request.values["cat_type"],
        'title'       : request.values.get("title" or ''),
        }
        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'))#updataing the data for step1
        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):
        confData	 = Auth.get_conference(conf_id)
        json = {'msg':'','status' : 1,'data':''}
        abs_id     = request.values.get('abs_id')
        abs_id     = int(Cryptography.decrypt(abs_id))
        step2data  = UserModel().steps_data(abs_id,confData.get('conf_schema'))#get date from DB
        uploaded_data = AbstractModel().get_img_upload_by_abs_id(abs_id)
        print(uploaded_data)
        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 ):
            abs_id = Cryptography.encrypt(abs_id)
            json["data"] = render_template('users/TNASI24/O/step2.html',data=step2data,uploaded_data=uploaded_data,abs_id=abs_id,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)
        abs_id   = request.values["abs_id"]
        user_id  = request.values["user_id"]
        is_next  = request.values.get('is_next')
        if (int(is_next) == 1):
            abs_id     = int(Cryptography.decrypt(abs_id))
            img    = AbstractModel().get_img_upload_count(abs_id)
            print(len(img))
            if img and int(len(img)) == 2:
                data = {}
                cur_step = request.values['cur_step']
                # print("cur_step",cur_step)
                if int(cur_step) <= 2:
                    data["cur_step"] = 2
                    step2data = UserModel().update_step(data,abs_id,confData.get('conf_schema'))#updating data to DB
                abs_id    = Cryptography.encrypt(int(abs_id))
                # print("encrypted abs_id",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:
                json = {'msg':'Please upload your complete biodata and the full text of the oration topic','status' : 0,'data':''}
                return jsonify(json)
        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)
        abs_id     = request.values.get('abs_id')
        abs_id     = int(Cryptography.decrypt(abs_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 ):
            decry_abs_id = abs_id
            abs_id = Cryptography.encrypt(int(abs_id))
            json["data"] = render_template('users/TNASI24/O/step3.html',data = step2data,abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key,decry_abs_id=decry_abs_id)
            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 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')
        if (int(is_next) == 1):
            data    = {
            'is_award':request.values.get("rdnaward" or '')
                }
            cur_step = request.values['cur_step']
            if int(cur_step) <= 3:
                data["cur_step"] = 3
            step3data=UserModel().update_step(data,abs_id1,confData.get('conf_schema'))
            # confe_id = Auth.get_conference(conf_id).get("society_id")
            # return redirect(url_for('O.Step4',abs_id = abs_id,abs_type=abs_type))
            return redirect(url_for('main.Step4',abs_id = abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))# changed to step 4 because tnoa does not contain this steps 
        else:
            return redirect(url_for('main.Step2',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))


    def Searchauthor(abs_type,conf_id,conf_key):
        searchtext  = request.values["searchtext"]
        btn_val     = request.values["btn_val"]
        conf_id     = request.values["conf_id"]
        society_id  = Auth.get_conference(conf_id).get("society_id")
        role_id     = 35 
        if int(btn_val) == 0:
            setting_key = 'O_PA_COUNT'
            data1       = AbstractModel().settings(setting_key,conf_id)#get settings for PP presenting author count
            if (data1[0]):
                data1 = data1=int(data1[0][0]["setting_value"])
            mem_type = "11,12,13,14,15,16"
            data        = UserModel().get_search_data_presenting(mem_type,role_id,searchtext,abs_type,society_id)#getting search data from DB to step3
            html = render_template('users/TNASI24/O/presenting_authour_search_table.html',data=data,data1=data1)
            return jsonify(html)
        else:
            setting_key = 'O_CA_COUNT'
            data1       = AbstractModel().settings(setting_key,conf_id)#get settings for PP presenting author count
            if (data1[0]):
                data1 = data1=int(data1[0][0]["setting_value"])
            mem_type = "11,12,13,14,15,16"
            data        = UserModel().get_search_data_presenting(mem_type,role_id,searchtext,abs_type,society_id)#getting search data from DB to step3
            html  = render_template('users/TNASI24/O/co_authour_search_table.html',data=data,data1=data1)
            return jsonify(html)
    

    
    def Add_update_co_author(abs_type,conf_id,conf_key):
        confData	 = Auth.get_conference(conf_id)
        user_id     = request.values["user_id"]
        abs_id      = request.values["abs_id"]
        role_id     = request.values["role_id"]
        abs_id      = (int(Cryptography.decrypt(abs_id)))
        saved_to    = AbstractModel().add_to_author(abs_id,user_id,role_id,confData.get('conf_schema'))#adding presenting author for PP
        return jsonify()


    def Step1_get_author(abs_type,conf_id,conf_key):
        confData	 = Auth.get_conference(conf_id)
        abs_id    = request.values["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('users/TNASI24/O/presenting_authour_table.html',pa_data=data)
        return jsonify(html)

    def Get_co_author(abs_type,conf_id,conf_key):
        confData    = Auth.get_conference(conf_id)
        conf_id     =  request.values["conf_id"]
        abs_id      =  request.values["abs_id"]
        role_id     =  request.values["role_id"]
        abs_id      =  int(Cryptography.decrypt(abs_id))
        data        =  AbstractModel().get_authors_v1(abs_id,role_id,confData.get('conf_schema'))#geting author to show in step 3 table
        limit_of_authors = AbstractModel().limit_of_authors_v1(abs_id,role_id,confData.get('conf_schema'))#geting count of author for co-authors
        settings    = AbstractModel().settings(abs_type+"_CA_COUNT",conf_id)
        if(limit_of_authors >= int(settings[0][0]["setting_value"])):
            limit   = 0
        else:
            limit   = 1
        if int(role_id) == 69:
            html = render_template('users/TNASI24/O/co_athour_table.html',co_data=data,limit=limit)
        else:
            html = render_template('users/TNASI24/O/co_athour_table_seconder.html',co_data=data,limit=limit)
        return jsonify(html)
        
    def Step4(abs_id,abs_type,conf_id,conf_key):
        confData    = Auth.get_conference(conf_id)
        json = {'msg':'','status' : 1,'data':''}
        abs_id              = unquote(abs_id)
        abs_id              = int(Cryptography.decrypt(abs_id))
        stepsdata             =  AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))#getting user and abstract data
        check_authors_count = AbstractModel().check_authors_count(abs_id,36,confData.get('conf_schema'))#this is used for step3 co-author count for VT AND PP
        if stepsdata == [] :
                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(stepsdata["abs_status_id"] == 0 ):
            if(check_authors_count["authors_count"] > 0 ):
                abs_id            =  Cryptography.encrypt(int(abs_id))
                # return redirect(url_for('O.Step5',abs_id=abs_id,abs_type=abs_type))
                json["data"] = render_template('users/TNASI24/O/step4.html',abs_type=abs_type,abs_id=abs_id,data=stepsdata,conf_id=conf_id,conf_key=conf_key)
                return jsonify(json) # this is commented by mukesh tnoa has only 4 steps and skipped the 4 step
            else:
                json["msg"] = 'To proceed further, choose a proposer'
                json["status"] = 0
                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 Step4post(abs_id,abs_type,conf_id,conf_key):
        confData	 = Auth.get_conference(conf_id)
        abs_id       =   unquote(abs_id)
        abs_id       =   int(Cryptography.decrypt(abs_id))
        is_next      =   request.values.get('is_next')
        if (int(is_next) == 1):
            data={}
            cur_step = request.values['cur_step']
            if int(cur_step) <= 4:
                data["cur_step"] = 4
            datatoupdate=UserModel().update_step(data,abs_id,confData.get('conf_schema'))#update data from step 4 for Fp
            abs_id = Cryptography.encrypt(int(abs_id))
            return redirect(url_for('main.Step5',abs_id=abs_id,abs_type=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=abs_type,conf_id=conf_id,conf_key=conf_key))
        
    def Step5(abs_id,abs_type,conf_id,conf_key):
        confData    = Auth.get_conference(conf_id)
        json = {'msg':'','status' : 1,'data':''}
        abs_id      =   unquote(abs_id)
        abs_id   = int(Cryptography.decrypt(abs_id))
        data      = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))#getting user and abstract data
        check_authors_count = AbstractModel().check_authors_count(abs_id,36,confData.get('conf_schema'))#this is used for step3 co-author count for VT AND PP
        if data == [] :
                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)
        elif(data["abs_status_id"] == 0 ):
            if(check_authors_count["authors_count"] > 0 ):
                data2     = AbstractModel().get_authors_v1(abs_id,70,confData.get('conf_schema'))#geting author to show in step 3 table
                data1     = AbstractModel().get_authors_v1(abs_id,69,confData.get('conf_schema'))#geting author to show in step 3 table
                abs_id    = Cryptography.encrypt(int(abs_id))
                json["data"] = render_template('users/TNASI24/O/step5.html',abs_type=abs_type,abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key)
                return jsonify(json)
            else:
                json["msg"] = 'To proceed further, choose a Seconder'
                json["status"] = 0
                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.get("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'))
        authors    = 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):
                data11    = {
                           'submitted_at' :  str(datetime.now()),
                           }
                # ratifi_authour = UserModel().get_ratified_member_count(abs_id,confdata.get('conf_schema'))
                ratifi_authour = 1
                if int(ratifi_authour) >= 1:
                    PA_count = AbstractModel().get_FP_PA_count_final(abs_id,data["abs_type"],conf_data.get('conf_schema'))#checking presenting author count
                    data2     = AbstractModel().get_authors_v1(abs_id,70,conf_data.get('conf_schema'))#geting author to show in step 3 table
                    data1     = AbstractModel().get_authors_v1(abs_id,69,conf_data.get('conf_schema'))#geting author to show in step 3 table
                    data3    = AbstractModel().fp_authors_for_email(abs_id,conf_data.get('conf_schema'))#getting co authors details
                    settings = AbstractModel().settings('O_PA_COUNT',conf_id)
                    if(PA_count <= int(settings[0][0]["setting_value"])):
                        output     = AbstractModel().abstract_submited(user_id,abs_id,data["abs_type"],data11,conf_id)
                        data       = AbstractModel().get_sept4_data(abs_id,conf_data.get('conf_schema'))
                        confe_logo = conf_data['mail_header_logo']
                        for i in data3:
                            template_name = 'O_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':data1,'confData':conf_data,'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=conf_data,conf_id=conf_id,conf_key=conf_key)
                            # name    = i["full_name"]
                            # subject = "Oral Presentation Abstract "+data["abs_type"]+str(data["abs_no"])+" submitted successfully - "+conf_data['conf_name']
                            # email   = i["email"]
                            # html    = render_template('users/email/O_submit.html',name=name,data=data,data1=authors,data2=data2,confe_logo = confe_logo,conf_id=conf_id)
                            # now     = datetime.now()
                            EMAIL.sendMail(subject,html,email,conf_id)
                        # return(html)
                    else:
                        abs_id = Cryptography.encrypt(int(abs_id))
                        flash('The presenting author can not participate more than '+settings[0][0]["setting_value"])
                        return redirect(url_for('main.AbstractsIndex',abs_type=data["abs_type"],conf_id=conf_id,conf_key=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("There must be one Ratified Member as Author(Presenting Author or Co-Author)")
                    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.Step4',abs_id=abs_id,abs_type=data['abs_type'],conf_id=conf_id,conf_key=conf_key))#skiped one step for tnoa

        
    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/TNASI24/O/error_success.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))
        data     = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
        data2     = AbstractModel().get_authors_v1(abs_id,70,confData.get('conf_schema'))#geting author to show in step 3 table
        data1     = AbstractModel().get_authors_v1(abs_id,69,confData.get('conf_schema'))#geting author to show in step 3 table
        return render_template('users/TNASI24/O/view.html',abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key)

    

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