Sindbad~EG File Manager

Current Path : /home/numerotech/bni.numerotech.com/bni_hallmark/core/controller/
Upload File :
Current File : //home/numerotech/bni.numerotech.com/bni_hallmark/core/controller/MembersController.py

from flask import render_template,request,flash,redirect,url_for, Blueprint,session,json,jsonify
import datetime
from datetime import timedelta,date,datetime
from .. import Cryptography,Auth,RouteGroup,Helper,Custom,AWSUpload
from core.model.MembersModel import MembersModel
from flask import  app
import math
import os
from collections import defaultdict
from os.path import join, dirname, realpath
import boto3, botocore
from botocore.exceptions import ClientError
from PIL import Image
import io
import json
from random import randint
from werkzeug.utils import secure_filename
import string
from flask import Flask
import requests
from core import app
import base64

app = Blueprint('members', __name__)
@app.route('/',methods=["GET","POST"])
@app.route('/dashboard',methods=["GET","POST"])
@RouteGroup.login_required
def Dashboard():
	member_data = Auth.user()
	member_name = member_data['member_name']
	
	now           = datetime.now()
	current_dt    = now.strftime("%Y-%m-%d")
	get_data = MembersModel().GetData(current_dt)
	
	if get_data:
		for index,value in enumerate(get_data):
			if index == 0 :
				visitor_count = value
				if visitor_count :
					for v in visitor_count:
						visitor_count = v["visitor_count"]
			if index == 1 :
				member_count = value
				if member_count : 
					for m in member_count:
						member_count = m["member_count"]
			
			if index == 2 :
				member_details = value

	return render_template('members/dashboard.html',data=get_data,visitor_count=visitor_count,member_count=member_count,member_name=member_name)

@app.route('/visitor_reports',methods=["GET","POST"])
@RouteGroup.login_required
def VisitorReports():
	now          = datetime.now()
	current_dt   = now.strftime("%Y-%m-%d")
	curr_dt      = now.strftime("%d-%m-%Y")
	visitor_list = defaultdict(list)

	get_data = MembersModel().GetData(current_dt)
	
	if get_data:
		for index,value in enumerate(get_data):
			if index == 0 :
				visitor_count = value
			if index == 1 :
				member_count = value
			if index ==  2 :
				member_details = value
			if index == 3 :
				visitor_details = value

		for r in visitor_details:
			visitor_list[r["member_id"]].append(r)

	return render_template('members/visitors_details.html',data=get_data,member_details=member_details,visitor_details=visitor_details,current_dt=curr_dt,visitor_list=visitor_list)

@app.route('/members_reg_form',methods=["GET","POST"])
@RouteGroup.login_required
def MembersRegForm():
	get_member_data  = MembersModel().GetMembersForPayment()
	return render_template('members/members.html',data = get_member_data)

@app.route('/search_member_data',methods=["GET","POST"])
@RouteGroup.login_required
def SearchMemberData():
	search_text = request.values.get("member_name") or None
	get_data    = MembersModel().Getmembers(search_text)
	if get_data:
		for i in get_data:
			member_id    = i["member_id"]
			member_name  = i["member_name"]
		html_data = render_template('members/members_table.html',data=get_data,member_id=member_id,member_name=member_name)
		data = { "html_data": html_data,"status":1}
		return json.dumps(data,default =str)
	else:
		data = { "status":2,"msg":"Record not found"}
		return json.dumps(data,default =str)


@app.route('/select_member_data',methods=["GET","POST"])
@RouteGroup.login_required
def SelectMemberData():

	member_id      = request.values.get("member_id") or None
	get_data         = MembersModel().GetMembersdetails(member_id)
	get_payment_mode = MembersModel().Get_payment_mode()

	if get_data:
		for i in get_data:
			member_id   = i["member_id"]
			member_name = i["member_name"]
			
	html_data = render_template('members/visitors_reg_form.html',data=get_data,member_id=member_id,member_name=member_name,payment_mode=get_payment_mode)
	data = { "html_data": html_data,"status":1}
	return json.dumps(data,default =str)
	


@app.route('/insert_visitors', methods=["POST"])
def InsertVisitors():
	now = datetime.now()
	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
	
	member_id      = request.form.get('member_id') or None
	visitor_name   = request.form.get('visitor_name') or None
	mobile         = request.form.get('mobile') or None
	email          = request.form.get('email') or None
	business_name  = request.form.get('business_name') or None
	address        = request.form.get('address') or None
	city           = request.form.get('city') or None
	transaction_id = request.form.get('transaction_no') or None
	mode_of_payment_id = request.form.get('mode_of_payment_id') or None
	amount = 1500
	
	
	data = {
		'member_id'     : member_id,
		'visitor_name'  : visitor_name,
		'mobile'        : mobile,
		'email'         : email,
		'business_name' : business_name,
		'address'       : address,
		'city'          : city,
		'transaction_no': transaction_id,
		'mode_of_payment_id' : mode_of_payment_id,
		'amount'        : amount,
		'created_at'    : current_dt,
		'register_on'   : current_dt
	}
	v_log_id  = MembersModel().insert_visitors(data)

	if not v_log_id:
		return jsonify({'status': 0, 'msg': 'Record not inserted'})

	visitor_data = {'status': 1, 'msg': 'Visitor registered successfully', 'v_log_id': v_log_id }

	biz_card_front_side = request.files.get('biz_card_front_side_url')
	biz_card_back_side  = request.files.get('biz_card_back_side_url')
	visitor_photo       = request.files.get('visitor_photo_url')
	payment_proof       = request.files.get('payment_proof')
	
	is_biz_card_front_side = 0
	is_biz_card_back_side = 0
	is_visitor_photo = 0
	is_payment_proof = 0

# biz_card_front_side image upload function start
	if biz_card_front_side :
		image_name     = "bni_biz_card_front_"
		foldername     = "bni_biz_card_front_side/"
		is_biz_card_front_side = 1
		file           = biz_card_front_side
	
	if int(is_biz_card_front_side) == 1:
		file_upload = AwsFileUpload(v_log_id,file,image_name,foldername,upload_type=1)
	else:
		file_upload = ''

# biz_card_front_side image upload function end

	if biz_card_back_side :
		image_name     = "biz_card_back_side_"
		foldername     = "bni_biz_card_back_side/"
		is_biz_card_back_side = 1
		file           = biz_card_back_side
	
	if int(is_biz_card_back_side) == 1:
		file_upload = AwsFileUpload(v_log_id,file,image_name,foldername,upload_type=2)
	else:
		file_upload = ''

	if visitor_photo :
		image_name     = "visitor_photo_"
		foldername     = "bni_visitor_photos/"
		is_visitor_photo = 1
		file           = visitor_photo
	
	if int(is_visitor_photo) == 1:
		file_upload = AwsFileUpload(v_log_id,file,image_name,foldername,upload_type=3)
	else:
		file_upload = ''

	if payment_proof :
		image_name     = "payment_proof_"
		foldername     = "bni_payment_proof/"
		is_payment_proof = 1
		file           = payment_proof

	if int(is_payment_proof) == 1:
		file_upload = AwsFileUpload(v_log_id,file,image_name,foldername,upload_type=4)
	else:
		file_upload = '' 

	html_data = render_template('members/members.html',v_log_id=v_log_id)
	return jsonify({"html_data": html_data, "status": 1,"visitor_data":visitor_data})

def AwsFileUpload(v_log_id,file,image_name,foldername,upload_type):
		now             = datetime.now()
		curr_dt         = now.strftime("%Y-%m-%d %H:%M:%S")
		pg_cert_name    = None
		pg_cert_path    = None
		bucket          = "test-memberapp"
		try:
			if file:
				if file.filename:
					filename        = secure_filename(file.filename)
					split_tup       = os.path.splitext(filename)
					file_name       = split_tup[0]
					file_extension  = split_tup[1]
					filename_str    = str(file_name)+ datetime.now().strftime("%Y%m%d-%H%M%S") +file_extension                    
					# if " " in filename_str :
					#     filename_str = filename_str.replace(" ","")

					v_log_id     = str(v_log_id) if v_log_id else None
					acl          = "public-read"
					s3           = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
					response     = s3.upload_fileobj(file, bucket,foldername + filename_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
					data_1       = {'bucketname' : bucket,'foldername':foldername,'file_name':filename_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1} 
					file_path    = "https://test-memberapp.s3.ap-southeast-1.amazonaws.com/"+foldername
					pg_cert_path = file_path
					pg_cert_name = filename_str
					
					msg = "success"

					if upload_type == 1:
						updated_data = { "biz_card_front_file_name" : pg_cert_name,"biz_card_front_path" : pg_cert_path}
					elif upload_type == 2:
						updated_data = { "biz_card_back_file_name" : pg_cert_name,"biz_card_back_path" : pg_cert_path}
					elif upload_type == 3:
						updated_data = { "visitor_photo_file_name" : pg_cert_name,"visitor_photo_path" : pg_cert_path}
					elif upload_type == 4:
						updated_data = { "payment_proof_file_name" : pg_cert_name,"payment_proof_path" : pg_cert_path}

					MembersModel().update_visitor(v_log_id,updated_data)

					
				else :
					msg = "File name is not exists."
					return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path,  "msg" : msg, "status" : 2 }           
					
				return json.dumps(updated_data,default =str)
				
					
			else :
				msg = "File not exists. Please try again"
				return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path,  "msg" : msg, "status" : 3 }   
			
			return json.dumps(return_data,default =str)
		except ClientError as e:
			return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path,  "msg" : str(e), "status" : 401 }
			return json.dumps(updated_data,default =str)
	
@app.route('/payment_success/<v_log_id>',methods=["GET"])
def PaymentSuccess(v_log_id):
	get_visitor_details = MembersModel().Get_visitor_details(v_log_id)
	get_payment_mode    = MembersModel().Get_payment_mode()
	return render_template('members/payment_success.html',visitor_data=get_visitor_details,payment_mode=get_payment_mode)
	
@app.route('/members_payment',methods=["GET"])
@RouteGroup.login_required
def getMembersPayment():
	members  = MembersModel().GetMembersForPayment()

	return render_template('members/members_payment.html',members=members)

@app.route('/select_member_payment_details',methods=["GET"])
@RouteGroup.login_required
def SelectMemberPaymentDetails():

	member_name      = request.values.get("member_name") or None
	get_data         = MembersModel().Getmembers(member_name)
	get_member_payment_for = MembersModel().GetMembersPaymentFor()
	get_payment_mode = MembersModel().Get_payment_mode()

	if get_data:
		for i in get_data:
			member_id   = i["member_id"]
			member_name = i["member_name"]
			
	html_data = render_template('members/member_payment_details.html',data=get_data,member_id=member_id,member_name=member_name,member_payment=get_member_payment_for,payment_mode=get_payment_mode)
	data = { "html_data": html_data,"status":1}
	return json.dumps(data,default =str)

@app.route('/visitor_report_page',methods=["GET"])
@RouteGroup.login_required
def Visitor_report_page():
	now             = datetime.now()
	current_dt      = now.strftime("%Y-%m-%d %H:%M:%S")
	curr_date      = now.strftime("%d-%m-%Y")
	get_visitor_payment_data = MembersModel().GetVisitorPaymentDetails(current_dt)
	if get_visitor_payment_data:
		for index,value in enumerate(get_visitor_payment_data):
			if index == 0 :
				visitor_total_amount = value
				if visitor_total_amount :
					for t in visitor_total_amount :
						visitor_total_amount = t["visitor_total_amount"]
						visitor_total_count = t["visitor_total_count"]
			if index == 1:
				payment_types = value

			
	return render_template('members/visitor_report_page.html',total_amount=visitor_total_amount,visitor_total_count=visitor_total_count,curr_date=curr_date,payment_types=payment_types)

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