from appservices.common.util import *
from appservices.common.form_schemas import *
kyc_apis = Blueprint("kyc_apis",__name__)


# Add KYC API


def fetching_kyc_api_details(kyc_apis_queryset):
	kyc_api_dict = {}
	try:
		kyc_api_dict={
		"id":str(kyc_apis_queryset.id),
		"apiName":kyc_apis_queryset.apiName,
		"code":kyc_apis_queryset.code,
		}
		if kyc_apis_queryset.paramsList:
			kyc_api_dict["paramsList"] = kyc_apis_queryset.paramsList
		else:
			kyc_api_dict["paramsList"] = ""

		if kyc_apis_queryset.status==1:
			kyc_api_dict["actionText"] = "Active"
		else:
			kyc_api_dict["actionText"] = "Deactive"

		if kyc_apis_queryset.createdOn:
			kyc_api_dict["createdOn"] = kyc_apis_queryset.createdOn.strftime("%m-%d-%Y")
		else:
			kyc_api_dict["createdOn"] = ""

	except Exception as e:
		app.logger.error(traceback.format_exc())
	return kyc_api_dict


# View All KYC API's
@kyc_apis.route("/kyc_apis_list",methods=["POST","GET"])
@adminid_access_token_required
def kyc_apis_list():
	if not session.get("adminId"):
		return redirect("admin_login")
	adminId = session.get("adminId")

	kycAPIList =[]
	assignKycList = []
	addAssignKycAPIList=[]
	documentNameList=[]
	kycChargeList = []
	redirectval = ""
	error = "" 
	kycApiId = ""
	search_element = ""
	assignKycform = ""
	kycApiform = ""
	form = ""
	assignKycPage = ""
	kycApisPage = ""
	assignKycsnoCount = 0
	kycApissnoCount = 0
	assignKycpagination = None
	kycApispagination = None
 
	permissionsList = check_permissions(adminId,"kycApiPermissions")
	if "view" in permissionsList:    
		try:
			redirectTo = request.args.get('redirectTo','')
			kycApiId = request.args.get('kycApiId','')
			if redirectTo:
				redirectval = redirectTo
			else:
				redirectval = "KycApis"

			search = False  
			
			
			if not search_element:
				search_element = request.args.get("search_element","")
			if search_element:
				search = True

			
			 ######### kyc Api ############

			# kyc_apis_queryset = kycApis.objects(status__in=[0,1]).order_by("-id").all()
			# if search_element:
			#   kyc_apis_queryset = kyc_apis_queryset.filter(Q(apiName__icontains=search_element))
			
			# for each_kyc_api in kyc_apis_queryset:
			#   kyc_api_dict = fetching_kyc_api_details(each_kyc_api)
			#   kycAPIList.append(kyc_api_dict)
			
			#   check_assign_query_set = AssignKyc.objects(kycApiId=ObjectId(each_kyc_api.id),status__in=[0,1]).order_by("-id").all()
			#   if not check_assign_query_set:
			#       addAssignKycAPIList.append(kyc_api_dict)


			kycApiform = KycApiFormSearch(request.args)
			search_element = request.args.get('search_element','')
			kycApisPage = request.args.get(get_page_parameter("kycApisPage"), type=int, default=1)
			per_page = 20
			start = (kycApisPage - 1) * per_page
			total_count = 0

			filters = Q(status__in=[0, 1])
			if kycApiform.validate():
				if search_element:
					filters &= Q(apiName__icontains=search_element)

				total_count = kycApis.objects(filters).count()
				kyc_apis_queryset = (
					kycApis.objects(filters)
					.only("id", "apiName", "code","paramsList", "status")
					.order_by("-id")
					.skip(start)
					.limit(per_page)
				)
				kycAPIList = list(kyc_apis_queryset)
				
			else:
				kycAPIList = []
				addAssignKycAPIList = []

			kycApissnoCount = start

			kycApispagination = Pagination(
				page=kycApisPage,
				total=total_count,
				per_page=per_page,
				page_parameter="kycApisPage",
				alignment="right",
				record_name="kycApis",
				href=f"?search_element={search_element}&kycApisPage={{0}}"
			)


			check_assign_query_set = AssignKyc.objects(status__in=[0, 1]).distinct('kycApiId')
			assigned_kyc_ids = [kyc_id.id for kyc_id in check_assign_query_set]
			unassigned_kyc_apis = kycApis.objects(status__in=[0, 1],id__nin=assigned_kyc_ids).only("id", "apiName").order_by("-id")

			addAssignKycAPIList = list(unassigned_kyc_apis)

			print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",addAssignKycAPIList)

			  ######### Assign kyc ############
			assign_kyc_queryset = AssignKyc.objects(status__in=[0,1]).order_by("-id").all()

			# if search_element_assign_kyc:
			#   matching_kyc_apis = kycApis.objects.filter(apiName__icontains=search_element_assign_kyc,status__in=[0,1])
			#   assign_kyc_queryset = AssignKyc.objects.filter(kycApiId__in=matching_kyc_apis)

			# for each_assign_kyc in assign_kyc_queryset:
			#   assign_kyc_dict = fetching_assign_kyc_details(each_assign_kyc)
			#   assignKycList.append(assign_kyc_dict)

			assignKycform = AssignKycFormSearch(request.args)
			search_element_assign_kyc=request.args.get('search_element_assign_kyc','')
			assignKycPage = request.args.get(get_page_parameter("assignKycPage"), type=int, default=1)
			per_page = 20
			start = (assignKycPage - 1) * per_page
			total_count = 0
		   
			filters = Q(status__in=[0, 1]) 
			if assignKycform.validate():
				if search_element_assign_kyc:
					matching_kyc_apis = kycApis.objects.filter(apiName__icontains=search_element_assign_kyc,status__in=[0,1])
					filters&=Q(kycApiId__in=matching_kyc_apis)
					

				total_count = AssignKyc.objects(filters).count()

				assign_kyc_queryset = (
					AssignKyc.objects(filters)
					.only("id", "kycApiId", "documentNameList", "status","createdOn")
					.order_by("-id")
					.skip(start)
					.limit(per_page)
				)
				
				assignKycList = list(assign_kyc_queryset)
			else:
				assignKycList=[]
			   

			assignKycsnoCount = start
			assignKycpagination = Pagination(assignKycPage=assignKycPage, total=total_count, per_page=per_page,page_parameter ="assignKycPage", alignment="right", record_name="assignKyc",href=f"?search_element_assign_kyc={search_element_assign_kyc}&assignKycPage={{0}}")

			form = KycApiChargeFormSearch(request.args)
			
			if form.validate():
				kycApiId = request.args.get('kycApiId')
				if kycApiId:
					assign_kyc_queryset_for_documentName = assign_kyc_queryset.filter(kycApiId=ObjectId(kycApiId),status__in=[0,1]).first()
					if assign_kyc_queryset_for_documentName:
						documentNameList=assign_kyc_queryset_for_documentName.documentNameList
					else:
						documentNameList=[]
					
					document_queryset=documentNameList
					
					for each_document in document_queryset:
						finalPrice=0
						kyc_charge_queryset=KycApiCharges.objects(kycApiId=kycApiId,documentType=each_document).first()
						if kyc_charge_queryset:
							kyc_charge_dict={
								"id":str(kyc_charge_queryset.id),
								"kycApiId":str(kyc_charge_queryset.kycApiId),
								"documentType":kyc_charge_queryset.documentType,
								"chargeType":kyc_charge_queryset.chargeType,
								"chargeValue":kyc_charge_queryset.chargeValue,
								"gstInclude":kyc_charge_queryset.gstInclude,
								"gstValue":kyc_charge_queryset.gstValue,
								"tdsInclude":kyc_charge_queryset.tdsInclude,
								"tdsValue":kyc_charge_queryset.tdsValue,
							}

							if kyc_charge_dict["gstInclude"]=='No':
								finalPrice+=(kyc_charge_dict["chargeValue"])*(kyc_charge_dict["gstValue"]/100)
							if kyc_charge_dict["tdsInclude"]=='No':
								finalPrice+=(kyc_charge_dict["chargeValue"])*(kyc_charge_dict["tdsValue"]/100)
							kyc_charge_dict["finalPrice"]=finalPrice
							

						else:
							kyc_charge_dict={
								"id":"",
								"kycApiId":"",
								"documentType":each_document,
								"chargeType":"",
								"chargeValue":0,
								"gstInclude":"",
								"gstValue":0,
								"tdsInclude":"",
								"tdsValue":0,
								"finalPrice":0,
							}
						kycChargeList.append(kyc_charge_dict)
				else:
					documentNameList=[]
			print(form.errors,"((((((form errors ))))))")


			print("(((((((((((((((((((((((((((kycChargeList)))))))))))))))))))))))))))",kycChargeList)
			print("((((((((((((((((((((((((assignKycList))))))))))))))))))))))))",assignKycList)
			print("((((((((((((((((((addAssignKycAPIList))))))))))))))))))",addAssignKycAPIList)
			
			return render_template("super_admin_templates/kyc_apis_list.html",
				search_element=search_element,
				search_element_assign_kyc=search_element_assign_kyc,
				kycAPIList=kycAPIList,
				kycChargeList=kycChargeList,
				assignKycList=assignKycList,
				addAssignKycAPIList=addAssignKycAPIList,
				#pagination=pagination,
				documentNameList=documentNameList,#newly added
				redirectval = redirectval,
				kycApiId=kycApiId,
				assignKycform=assignKycform,
				kycApiform=kycApiform,
				form=form,
				assignKycPage=assignKycPage,
				kycApisPage=kycApisPage,
				assignKycsnoCount=assignKycsnoCount,
				kycApissnoCount=kycApissnoCount,
				assignKycpagination=assignKycpagination,
				kycApispagination=kycApispagination,
				)
		except Exception as e:
			app.logger.error(traceback.format_exc())
			error = "Unable to fetch kyc api details!!"
			flash("Unable to fetch kyc api details")
			return render_template("super_admin_templates/kyc_apis_list.html",
				error=error,
				search_element=search_element,
				kycAPIList=kycAPIList,
				assignKycList=assignKycList,
				kycChargeList=kycChargeList,
				addAssignKycAPIList=addAssignKycAPIList,
				#pagination=pagination,
				documentNameList=documentNameList,#newly added
				redirectval = redirectval,
				kycApiId=kycApiId,
				search_element_assign_kyc=search_element_assign_kyc,
				assignKycform=assignKycform,
				kycApiform=kycApiform,
				form=form,
				assignKycPage=assignKycPage,
				kycApisPage=kycApisPage,
				assignKycsnoCount=assignKycsnoCount,
				kycApissnoCount=kycApissnoCount,
				assignKycpagination=assignKycpagination,
				kycApispagination=kycApispagination,
				)
	else:
		flash("The staff member does not have permission to view kyc Api", "danger")
		return render_template("super_admin_templates/kyc_apis_list.html")


@kyc_apis.route("/add_kyc_api",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def add_kyc_api():
	data_status={"responseStatus":0,"result":""}
	try:
		if not session.get("adminId"):
			flash("session expired.Please login again.")
			data_status["responseStatus"]=4
			return data_status
			
		adminId = session.get("adminId")
  
		csrf_token = request.form.get("csrf_token")
		print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
		latitude = request.form.get("latitude", "")
		longitude = request.form.get("longitude", "")
		loginBrowser = request.headers.get("Sec-Ch-Ua")
		userAgent=""
		if loginBrowser:
			loginBrowseData = loginBrowser.split(";")
			browser = loginBrowseData[0]
		else:
			loginBrowseData = request.headers.get('User-Agent').split(";")
			browser = loginBrowseData[0]

		client_ip=0
		# Extracting client IP address
		if request.headers.getlist("X-Forwarded-For"): 
			client_ip = request.headers.getlist("X-Forwarded-For")[0]
		else:
			client_ip = request.remote_addr

		actionDate=datetime.datetime.now()
		permissionsList = check_permissions(adminId,"kycApiPermissions")
		if "add" in permissionsList:
			if request.method == "POST":
				otp_check_id = request.form.get("otpLogid", "")
				defaultVerificationId = request.form.get("defaultVerificationId", "")

				print("otp_check_id",otp_check_id)
				if not otp_check_id:
					flash("Invalid Request.", "danger")
					data_status['responseStatus']=4
					return data_status
					
				otpcheck_queryset = OtpChecks.objects(adminId=adminId,defaultVerificationField=defaultVerificationId, id=str(otp_check_id), status=1).first()
				
				if not otpcheck_queryset:
					flash("Invalid Request.", "danger")
					data_status['responseStatus']=4
					return data_status
					
					
				# Update OTP status to 2 after verification
				otpcheck_queryset.update(status=2)
				
				apiName = request.form.get("apiName","")
				code = request.form.get("code","")
			   # paramsList = request.form.getlist("paramsList[]")
				inputKeyField = request.form.getlist("inputKeyField[]")
				inputValueField = request.form.getlist("inputValueField[]")

				jsonData = request.form.to_dict(flat=True)
				requestData = [jsonData]
				updatedrequestData = [jsonData]
				form = KycApisForm()
				if form.validate_on_submit():

					if len(inputKeyField) == len(inputValueField):
						# Create a list of dictionaries
						paramsList = [{'key': key, 'value': value} for key, value in zip(inputKeyField, inputValueField)]
					else:
						flash("Please give selected params values")
						return redirect(url_for("kyc_apis.kyc_apis_list"))


					if apiName and code:
						try:
							kyc_api_queryset = kycApis.objects(Q(apiName__iexact=apiName)).first()
							if kyc_api_queryset:
								flash("API Name already Exists!!", "danger")
								data_status['responseStatus']=4
								return data_status 
	   
							admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
							if admin_queryset:
								message=admin_queryset.userName+" "+apiName+" Kyc Api created successfully!"
								save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_kyc_api","create",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
							kyc_apis_table = kycApis(
								adminId = adminId,
								apiName = apiName,
								code = code,
								paramsList = paramsList,
								createdOn = datetime.datetime.now(),
								status = 1,
								)
							save_table = kyc_apis_table.save()
							kycApiId = str(save_table.id)

							flash("Kyc Api added successfully!", "KycApis_success")
							data_status['responseStatus']=1
							return data_status

						except Exception as e:
							flash("Unable to save Kyc Api!!", "danger")
							app.logger.error(traceback.format_exc())
							return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))

						except Exception as e:
							flash("Unable to save Kyc Api!!", "danger")
							app.logger.error(traceback.format_exc())
							data_status['responseStatus']=4
							return data_status
					else:
						data_status['responseStatus']=2
						data_status['result']="Required fields are missing!!"
						return data_status
				else:
					data_status['result']=form.errors
					return data_status
			else:
				data_status['responseStatus']=4
				return data_status 
					
		else:
			flash("The staff member does not have permission to create a kyc api.", "KycApis_danger")
			data_status['responseStatus']=4
			return data_status
			
	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to save Kyc Api!!", "danger")
		data_status['responseStatus']=4
		return data_status
		


# Update KYC api
@kyc_apis.route("/update_kyc_apis",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def update_kyc_apis():
	data_status={"responseStatus":0,"result":""}
	if not session.get("adminId"):
		flash("session Expired.")
		data_status["responseStatus"]=4
		return data_status
		
	adminId=session.get("adminId") 
 
	csrf_token = request.form.get("csrf_token")
	print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
	latitude = request.form.get("latitude", "")
	longitude = request.form.get("longitude", "")
	loginBrowser = request.headers.get("Sec-Ch-Ua")
	userAgent=""
	if loginBrowser:
		loginBrowseData = loginBrowser.split(";")
		browser = loginBrowseData[0]
	else:
		loginBrowseData = request.headers.get('User-Agent').split(";")
		browser = loginBrowseData[0]

	client_ip=0
	# Extracting client IP address
	if request.headers.getlist("X-Forwarded-For"): 
		client_ip = request.headers.getlist("X-Forwarded-For")[0]
	else:
		client_ip = request.remote_addr

	actionDate=datetime.datetime.now()
 
	permissionsList = check_permissions(session.get("adminId"),"kycApiPermissions")
	if "edit" in permissionsList:
		try:
			kycApiId = request.args.get("kycApiId","")
			form = KycApisForm(request.form, current_id=kycApiId)
			if request.method == "POST":
				if form.validate_on_submit():
					otp_check_id = request.form.get("otpLogid", "")
					defaultVerificationId = request.form.get("defaultVerificationId", "")
					print(defaultVerificationId,"((((((((((defaultVerificationId))))))))))")
					print("otp_check_id",otp_check_id)
					if not otp_check_id:
						flash("Invalid request: OTP missing.","danger")
						data_status['responseStatus']=4
						return data_status

					otpcheck_queryset = OtpChecks.objects(adminId=adminId,defaultVerificationField=defaultVerificationId, id=str(otp_check_id), status=1).first()
					if not otpcheck_queryset:
						flash("Invalid request: OTP not found.","danger")
						data_status['responseStatus']=4
						return data_status
						
					# Update OTP status to 2 after verification
					otpcheck_queryset.update(status=2)

						
					apiName = request.form.get("apiName","")
					code = request.form.get("code","")
					#paramsList = request.form.getlist("paramsList[]")
					inputKeyField = request.form.getlist("inputKeyField[]")
					inputValueField = request.form.getlist("inputValueField[]")

					jsonData = request.form.to_dict(flat=True)
					
				

					if len(inputKeyField) == len(inputValueField):
						# Create a list of dictionaries
						paramsList = [{'key': key, 'value': value} for key, value in zip(inputKeyField, inputValueField)]
					else:
						flash("Please give selected params values")
						return redirect(url_for("kyc_apis.kyc_apis_list"))
	 
					
					# kyc_api_queryset = kycApis.objects(Q(apiName__iexact=apiName)).first()
					# if kyc_api_queryset:
					#   flash("API Name already Exists!!")
					

					kyc_api_queryset = kycApis.objects(id=kycApiId,status__nin=[2]).first()
					existing_record = kyc_api_queryset.to_json()

					message=kyc_api_queryset.adminId.userName+" "+apiName+" KYC API updated successfully!"
					requestData=[existing_record]
					updatedrequestData=[jsonData]
					save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_kyc_apis","update",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 

					if kyc_api_queryset:
						kyc_api_queryset.update(
							apiName = apiName,
							code = code,
							paramsList = paramsList,
							)
						flash(" KYC API updated successfully!", "KycApis_success")
						data_status["responseStatus"]=1
						return data_status
						
					else:
						flash("Invaild id!!")
						data_status["responseStatus"]=4
						return data_status
				else:
					data_status['result']=form.errors
					return data_status
			else:
				data_status['responseStatus']=4
				return data_status
						
		except Exception as e:
			app.logger.error(traceback.format_exc())
			flash("Unable to update Kyc api!!", "danger")
			data_status["responseStatus"]=4
			return data_status
			
	else:
		flash("The staff member does not have permission to update kyc api .", "KycApis_danger")
		data_status["responseStatus"]=4
		return data_status
		


# Update KYC api status
@kyc_apis.route("/update_kyc_api_status",methods=["POST","GET"])
@adminid_access_token_required
def update_kyc_api_status():
	if not session.get("adminId"):
		return redirect("admin_login")
	adminId=session.get("adminId")

	kycApisPage=request.args.get("kycApisPage")
	search_element=request.args.get("search_element")
	redirectTo=url_for("kyc_apis.kyc_apis_list",kycApisPage=kycApisPage,search_element=search_element)
	latitude = request.args.get("latitude", "")
	longitude = request.args.get("longitude", "")
	loginBrowser = request.headers.get("Sec-Ch-Ua")
	userAgent=""
	if loginBrowser:
		loginBrowseData = loginBrowser.split(";")
		browser = loginBrowseData[0]
	else:
		loginBrowseData = request.headers.get('User-Agent').split(";")
		browser = loginBrowseData[0]

	existing_record=""
	client_ip=0
	# Extracting client IP address
	if request.headers.getlist("X-Forwarded-For"): 
		client_ip = request.headers.getlist("X-Forwarded-For")[0]
	else:
		client_ip = request.remote_addr

	actionDate=datetime.datetime.now()

	jsonData = request.form.to_dict(flat=True)
	
	updatedrequestData = [jsonData]
	permissionsList = check_permissions(session.get("adminId"),"kycApiPermissions")
	if "edit" in permissionsList:
		kycApiId = request.args.get("kycApiId","")
		if kycApiId:
			try:
				kyc_api_queryset = kycApis.objects(id=kycApiId,status__nin=[2]).first()
				existing_record = kyc_api_queryset.to_json()      
				requestData = [existing_record]
				if kyc_api_queryset:
					if kyc_api_queryset.status == 0:
						kyc_api_queryset.update(status=1)
						flash("Kyc API activated successfully!", "KycApis_success")
						message=kyc_api_queryset.adminId.userName+" "+kyc_api_queryset.apiName+" Kyc API activated successfully!"
					elif kyc_api_queryset.status == 1:
						kyc_api_queryset.update(status=0)
						flash("kyc API deactivated successfully!", "KycApis_success")
						message=kyc_api_queryset.adminId.userName+" "+kyc_api_queryset.apiName+" Kyc API deactivated successfully!"
					save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_kyc_api_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
					return redirect(redirectTo)
					
				else:
					flash("Invaild id!!", "danger")
					return redirect(redirectTo)
					
			except Exception as e:
				app.logger.error(traceback.format_exc())
				return redirect(redirectTo)
				
		else:
			flash("Required fields are missing!!", "danger")
			return redirect(redirectTo)
			
	else:
		flash("The staff member does not have permission to update kyc Api status.", "KycApis_danger")
		return redirect(redirectTo)
		

# Delete kYC API
# @kyc_apis.route("/delete_kyc_api",methods=["GET"])
# @adminid_access_token_required
# def delete_kyc_api():
#     try:
#         existing_record=""
#         if not session.get("adminId"):
#             return redirect("admin_login")
#         adminId=session.get("adminId")
#         loginBrowser = request.headers.get("Sec-Ch-Ua")
#         userAgent=""
#         if loginBrowser:
#             loginBrowseData = loginBrowser.split(";")
#             browser = loginBrowseData[0]
#         else:
#             loginBrowseData = request.headers.get('User-Agent').split(";")
#             browser = loginBrowseData[0]

#         client_ip=0
#         # Extracting client IP address
#         if request.headers.getlist("X-Forwarded-For"): 
#             client_ip = request.headers.getlist("X-Forwarded-For")[0]
#         else:
#             client_ip = request.remote_addr

#         actionDate=datetime.datetime.now()

#         jsonData = request.form.to_dict(flat=True)

#         requestData = [existing_record]
#         updatedrequestData = [jsonData]
#         if request.method == "GET":
#             kycApiId = request.args.get("kycApiId","")
#             kyc_api_queryset = kycApis.objects(id=kycApiId,status__in=[0,1]).first()
#             existing_record = kyc_api_queryset.to_json()
#             kyc_api_queryset.update(status=2)
#             flash("kyc API deleted successfully!")
#             message=kyc_api_queryset.adminId.userName+" "+kyc_api_queryset.apiName+" Kyc API deleted successfully!"
#             save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_kyc_api","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
#             return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         flash("Unable to delete kyc api!!")
#         return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))


@kyc_apis.route("/delete_kyc_api", methods=["GET", "POST"])
@adminid_access_token_required
@csrf_protect
def delete_kyc_api():
	try:
		existing_record=""
		if not session.get("adminId"):
			return redirect("admin_login")
		adminId=session.get("adminId")

		kycApisPage=request.args.get("kycApisPage")
		search_element=request.args.get("search_element")
		redirectTo=url_for("kyc_apis.kyc_apis_list",kycApisPage=kycApisPage,search_element=search_element,redirectTo='KycApis')
  
		csrf_token = request.form.get("csrf_token")
		print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
		latitude = request.form.get("latitude", "")
		longitude = request.form.get("longitude", "")
		loginBrowser = request.headers.get("Sec-Ch-Ua")
		userAgent=""
		if loginBrowser:
			loginBrowseData = loginBrowser.split(";")
			browser = loginBrowseData[0]
		else:
			loginBrowseData = request.headers.get('User-Agent').split(";")
			browser = loginBrowseData[0]

		client_ip=0
		# Extracting client IP address
		if request.headers.getlist("X-Forwarded-For"): 
			client_ip = request.headers.getlist("X-Forwarded-For")[0]
		else:
			client_ip = request.remote_addr

		actionDate=datetime.datetime.now()

		jsonData = request.form.to_dict(flat=True)

		
		updatedrequestData = [jsonData]

		permissionsList = check_permissions(session.get("adminId"),"kycApiPermissions")
		if "delete" in permissionsList:
			if request.method == "POST":
				otp_check_id = request.form.get("otpLogid", "")
				defaultVerificationId = request.form.get("defaultVerificationId", "")
				print("otp_check_id",otp_check_id)
				if not otp_check_id:
					flash("Invalid Request.", "KycApis_danger")
					return redirect(redirectTo)
				
				otpcheck_queryset = OtpChecks.objects(adminId=adminId, defaultVerificationField=defaultVerificationId,id=str(otp_check_id), status=1).first()
				
				if not otpcheck_queryset:
					flash("Invalid Request.", "KycApis_danger")
					return redirect(redirectTo)
					
				# Update OTP status to 2 after verification
				otpcheck_queryset.update(status=2)

			kycApiId = request.args.get("kycApiId", "").strip()

			if not kycApiId:
				flash("Missing KYC API ID!", "KycApis_danger")
				return redirect(redirectTo)

			kyc_api_queryset = kycApis.objects(id=kycApiId, status__in=[0, 1]).first()
			existing_record = kyc_api_queryset.to_json()
			requestData = [existing_record]
			if not kyc_api_queryset:
				flash("Invalid KYC API ID!","KycApis_danger")
				return redirect(redirectTo)

			kyc_api_queryset.update(status=2)
			flash("KYC API deleted successfully!", "KycApis_success")

			message=kyc_api_queryset.adminId.userName+" "+kyc_api_queryset.apiName+" Kyc API deleted successfully!"
			save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_kyc_api","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
			
			return redirect(redirectTo)
		else:
			flash("The staff member does not have permission to delete kyc api.", "KycApis_danger")
			return redirect(redirectTo)

	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to delete KYC API!", "KycApis_danger")
		return redirect(redirectTo)
		



############## ASSIGN kyc ##############

def fetching_assign_kyc_details(assign_kyc_queryset):
	assign_kyc_dict = {}
	try:
		assign_kyc_dict={
		"id":str(assign_kyc_queryset.id),
		"kycApiId":str(assign_kyc_queryset.kycApiId.id),
		"apiName":assign_kyc_queryset.kycApiId.apiName,
		# "documentNameList":assign_kyc_queryset.documentNameList,
		}
		if assign_kyc_queryset.documentNameList:
			assign_kyc_dict["documentNameList"]=[str(each_documentname) for each_documentname in assign_kyc_queryset.documentNameList]
			assign_kyc_dict["documentName"] = ', '.join(assign_kyc_dict["documentNameList"])
		else:
			assign_kyc_dict["documentNameList"]=[]
			


		if assign_kyc_queryset.status==1:
			assign_kyc_dict["actionText"] = "Active"
		else:
			assign_kyc_dict["actionText"] = "Deactive"

		if assign_kyc_queryset.createdOn:
			assign_kyc_dict["createdOn"] = assign_kyc_queryset.createdOn.strftime("%m-%d-%Y")
		else:
			assign_kyc_dict["createdOn"] = ""

	except Exception as e:
		app.logger.error(traceback.format_exc())
	return assign_kyc_dict


@kyc_apis.route("/add_assign_kyc_api",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def add_assign_kyc_api():
	data_status={"responseStatus":0,"result":""}
	try:
		if not session.get("adminId"):
			flash("session expired.Please login again.")
			data_status["responseStatus"]=4
			return data_status
			
		adminId = session.get("adminId")
  
		csrf_token = request.form.get("csrf_token")
		print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
  
		latitude = request.form.get("latitude", "")
		longitude = request.form.get("longitude", "")
		loginBrowser = request.headers.get("Sec-Ch-Ua")
		userAgent=""
		if loginBrowser:
			loginBrowseData = loginBrowser.split(";")
			browser = loginBrowseData[0]
		else:
			loginBrowseData = request.headers.get('User-Agent').split(";")
			browser = loginBrowseData[0]

		client_ip=0
		# Extracting client IP address
		if request.headers.getlist("X-Forwarded-For"): 
			client_ip = request.headers.getlist("X-Forwarded-For")[0]
		else:
			client_ip = request.remote_addr

		actionDate=datetime.datetime.now()
		permissionsList = check_permissions(adminId,"assignKycPermissions")
		if "add" in permissionsList:
			if request.method == "POST":

				otp_check_id = request.form.get("otpLogid", "")
				defaultVerificationId = request.form.get("defaultVerificationId", "")
				print("otp_check_id",otp_check_id)
				if not otp_check_id:
					flash("Invalid Request.", "AssignApis_danger")
					data_status['responseStatus']=4
					return data_status
				
				otpcheck_queryset = OtpChecks.objects(adminId=adminId,defaultVerificationField=defaultVerificationId, id=str(otp_check_id), status=1).first()
				
				if not otpcheck_queryset:
					flash("Invalid Request.", "AssignApis_danger")
					data_status['responseStatus']=4
					return data_status
				# Update OTP status to 2 after verification
				otpcheck_queryset.update(status=2)


				kycApiId = request.form.get("kycApiId","")
				documentNameList = request.form.getlist("documentNameList")

				jsonData = request.form.to_dict(flat=True)
				requestData = [jsonData]
				updatedrequestData = [jsonData]

				form = AssignKycListForm()
				if form.validate_on_submit():

					if kycApiId and documentNameList:
						try:
							admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
							assign_kycs_queryset = AssignKyc.objects(id=kycApiId).first()
							if admin_queryset:
								message=admin_queryset.userName+" Assign Kyc created successfully!"
								save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_assign_kyc_api","create",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 
							assign_kyc_table = AssignKyc(
								adminId = adminId,
								kycApiId = ObjectId(kycApiId),
								documentNameList = documentNameList,
								createdOn = datetime.datetime.now(),
								status = 1,
								)
							save_table = assign_kyc_table.save()
							AssignKycId = str(save_table.id)
							# if isActive == None:
							#     save_table.update(isActive=False)
							# else:
							#     save_table.update(isActive=True)

							flash(" Assign Kyc added successfully!", "AssignKyc_success")
							ata_status['responseStatus']=1
							return data_status
							
						except Exception as e:
							app.logger.error(traceback.format_exc())
							data_status['responseStatus']=4
							return data_status  
					else:
						data_status['responseStatus']=2
						data_status['result']="Required fields are missing!!"
						return data_status
				else:
					data_status['result']=form.errors
					return data_status
			else:
				data_status['responseStatus']=4
				return data_status
					
		else:
			flash("The staff member does not have permission to create a Assign kyc.", "AssignApis_danger")
			data_status['responseStatus']=4
			return data_status
			
	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to save  Assign Kyc!!", "AssignApis_danger")
		data_status['responseStatus']=4
		return data_status
		
		

# Update transaction api
@kyc_apis.route("/update_assign_kyc",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def update_assign_kyc():
	data_status={"responseStatus":0,"result":""}
	if not session.get("adminId"):
		flash("session Expired.")
		data_status["responseStatus"]=4
		return data_status
		
	adminId=session.get("adminId")  
 
	csrf_token = request.form.get("csrf_token")
	print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
	latitude = request.form.get("latitude", "")
	longitude = request.form.get("longitude", "")
	loginBrowser = request.headers.get("Sec-Ch-Ua")
	userAgent=""
	if loginBrowser:
		loginBrowseData = loginBrowser.split(";")
		browser = loginBrowseData[0]
	else:
		loginBrowseData = request.headers.get('User-Agent').split(";")
		browser = loginBrowseData[0]

	existing_record=""
	client_ip=0
	# Extracting client IP address
	if request.headers.getlist("X-Forwarded-For"): 
		client_ip = request.headers.getlist("X-Forwarded-For")[0]
	else:
		client_ip = request.remote_addr

	actionDate=datetime.datetime.now()
 
	permissionsList = check_permissions(session.get("adminId"),"assignKycPermissions")
	if "edit" in permissionsList:
		try:
			AssignKycId = request.args.get("AssignKycId","")
			if request.method == "POST":

				otp_check_id = request.form.get("otpLogid", "")
				defaultVerificationId = request.form.get("defaultVerificationId", "")
				print("otp_check_id",otp_check_id)
				if not otp_check_id:
					flash("Invalid Request.", "AssignApis_danger")
					data_status['responseStatus']=4
					return data_status
				
				otpcheck_queryset = OtpChecks.objects(adminId=adminId,defaultVerificationField=defaultVerificationId, id=str(otp_check_id), status=1).first()
				
				if not otpcheck_queryset:
					flash("Invalid Request.", "AssignApis_danger")
					data_status['responseStatus']=4
					return data_status
					
				# Update OTP status to 2 after verification
				otpcheck_queryset.update(status=2)
				
				# kycApiId = request.form.get("kycApiId","")
				documentNameList = request.form.getlist("documentNameList")
				jsonData = request.form.to_dict(flat=True)
				form = AssignKycListForm(request.form, current_id=AssignKycId)
				if form.validate_on_submit():

					assign_kycs_queryset = AssignKyc.objects(id=AssignKycId,status__nin=[2]).first()
					existing_record = assign_kycs_queryset.to_json()

					message=assign_kycs_queryset.adminId.userName+" "+assign_kycs_queryset.kycApiId.apiName+" Assign KYC updated successfully!"
					requestData=[existing_record]
					updatedrequestData=[jsonData]
					save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_assign_kyc","update",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 
					if assign_kycs_queryset:
						assign_kycs_queryset.update(
							# documentNameList = documentNameList,
							documentNameList=[str(each_documentname) for each_documentname in documentNameList]
							)

						flash("Assign KYC updated successfully!", "AssignKyc_success")
						data_status["responseStatus"]=1
						return data_status
						
					else:
						flash("Invaild id!!", "AssignApis_danger")
						data_status["responseStatus"]=4
						return data_status
				else:
					data_status['result']=form.errors
					return data_status
			else:
				data_status['responseStatus']=4
				return data_status
						
		except Exception as e:
			app.logger.error(traceback.format_exc())
			flash("Unable to update Assign Kyc!!", "AssignApis_danger")
			data_status["responseStatus"]=4
			return data_status
			
	else:
		flash("The staff member does not have permission to update Assign kyc.", "AssignApis_danger")
		data_status["responseStatus"]=4
		return data_status
		

# Update transaction api status
@kyc_apis.route("/update_assign_kyc_status",methods=["POST","GET"])
@adminid_access_token_required
def update_assign_kyc_status():
	if not session.get("adminId"):
		return redirect("admin_login")
	adminId=session.get("adminId")

	assignKycPage = request.args.get("assignKycPage")
	search_element_assign_kyc = request.args.get("search_element_assign_kyc")
	redirectto=url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc",search_element_assign_kyc=search_element_assign_kyc,assignKycPage=assignKycPage) 
	latitude = request.args.get("latitude", "")
	longitude = request.args.get("longitude", "")
	loginBrowser = request.headers.get("Sec-Ch-Ua")
	userAgent=""
	if loginBrowser:
		loginBrowseData = loginBrowser.split(";")
		browser = loginBrowseData[0]
	else:
		loginBrowseData = request.headers.get('User-Agent').split(";")
		browser = loginBrowseData[0]

	client_ip=0
	# Extracting client IP address
	if request.headers.getlist("X-Forwarded-For"): 
		client_ip = request.headers.getlist("X-Forwarded-For")[0]
	else:
		client_ip = request.remote_addr

	actionDate=datetime.datetime.now()

	jsonData = request.form.to_dict(flat=True)

	existing_record = ""
	updatedrequestData = [jsonData]
 
	permissionsList = check_permissions(session.get("adminId"),"assignKycPermissions")
	if "edit" in permissionsList:
		AssignKycId = request.args.get("AssignKycId","")
		if AssignKycId:
			try:
				assign_kyc_queryset = AssignKyc.objects(id=AssignKycId,status__nin=[2]).first()
				existing_record = assign_kyc_queryset.to_json()
				requestData = [existing_record]
				if assign_kyc_queryset:
					if assign_kyc_queryset.status == 0:
						assign_kyc_queryset.update(status=1)
						flash(" Assign Kyc activated successfully!", "AssignKyc_success")
						message=assign_kyc_queryset.adminId.userName+" "+assign_kyc_queryset.kycApiId.apiName+" Assign Kyc activated successfully!"
					elif assign_kyc_queryset.status == 1:
						assign_kyc_queryset.update(status=0)
						flash("Assign Kyc deactivated successfully!", "AssignKyc_success")
						message=assign_kyc_queryset.adminId.userName+" "+assign_kyc_queryset.kycApiId.apiName+" Assign Kyc deactivated successfully!"
					save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_assign_kyc_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
					return redirect(redirectto)
					
				else:
					flash("Invaild id!!", "AssignApis_danger")
					return redirect(redirectto)
			except Exception as e:
				app.logger.error(traceback.format_exc())
				return redirect(redirectto)
				
		else:
			return redirect(redirectto)
			
	else:
		flash("The staff member does not have permission to update Assign Kyc status.", "AssignApis_danger")
		return redirect(redirectto)
		

#Delete Transaction API
# @kyc_apis.route("/delete_assign_kyc",methods=["GET"])
# def delete_assign_kyc():
#   try:
#       if not session.get("adminId"):
#           return redirect("admin_login")
#       adminId=session.get("adminId")
#       loginBrowser = request.headers.get("Sec-Ch-Ua")
#       userAgent=""
#       if loginBrowser:
#           loginBrowseData = loginBrowser.split(";")
#           browser = loginBrowseData[0]
#       else:
#           loginBrowseData = request.headers.get('User-Agent').split(";")
#           browser = loginBrowseData[0]

#       client_ip=0
#       # Extracting client IP address
#       if request.headers.getlist("X-Forwarded-For"): 
#           client_ip = request.headers.getlist("X-Forwarded-For")[0]
#       else:
#           client_ip = request.remote_addr

#       actionDate=datetime.datetime.now()

#       jsonData = request.form.to_dict(flat=True)

#       existing_record =""
#       updatedrequestData = [jsonData]

#       if action == "generate":
#           mail_type = data.get("mailType", "").strip()
#           print(mail_type, "((((((((((((((((mail_type))))))))))))))))")
#           if not mail_type:
#               return jsonify({"responseStatus": 0, "result": "mailType is required!"}), 400
#           return jsonify(generate_otp_helper(mail_type))

#       # Step 2: Handle OTP Verification
#       elif action == "verify":
#           otp_check_id = request.form.get("otpCheckId", "SAI")
#           otp_code = request.form.get("otpCode", "K")

#           print(otp_check_id, "((((((((OTP CHECK ID????????????))))))))")
#           print(otp_code, "((((((((OTP CODE????????????))))))))")

#           if not otp_check_id or not otp_code:
#               return jsonify({"responseStatus": 0, "result": "Required fields are missing!"})

#           return jsonify(verify_otp_helper(otp_check_id, otp_code))

#       # Step 3: Update OTP Status
#       elif action == "update":
#           otp_check_id = request.form.get("otpCheckId", "")
			
#           otpcheck_queryset = OtpChecks.objects(id=str(otp_check_id), status=1).first()

#           if not otpcheck_queryset:
#               return jsonify({"responseStatus": 0, "result": "Invalid Request."})

#           otpcheck_queryset.update(status=2)  # Mark OTP as used
#           return jsonify({"responseStatus": 1, "result": "OTP status successfully updated!"})

	
#       AssignKycId = request.args.get("AssignKycId","")
#       assign_kyc_queryset = AssignKyc.objects(id=AssignKycId,status__in=[0,1]).first()
#       existing_record = assign_kyc_queryset.to_json()
#       requestData = [existing_record]
#       assign_kyc_queryset.update(status=2)
#       flash("Assign Kyc deleted successfully!")
#       message=assign_kyc_queryset.adminId.userName+" Assign Kyc deleted successfully!"
#       save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_assign_kyc","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
#       return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
#   except Exception as e:
#       app.logger.error(traceback.format_exc())
#       flash("Unable to delete Assign Kyc!!")
#       return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))


@kyc_apis.route("/delete_assign_kyc", methods=["GET", "POST"])
@adminid_access_token_required
@csrf_protect
def delete_assign_kyc():
	try:
		existing_record=""
		if not session.get("adminId"):
			return redirect("admin_login")
		adminId=session.get("adminId")

		assignKycPage = request.args.get("assignKycPage")
		search_element_assign_kyc = request.args.get("search_element_assign_kyc")
		redirectto=url_for("kyc_apis.kyc_apis_list",search_element_assign_kyc=search_element_assign_kyc,assignKycPage=assignKycPage,redirectTo='AssignKyc') 
  
		csrf_token = request.form.get("csrf_token")
		print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
		latitude = request.form.get("latitude", "")
		longitude = request.form.get("longitude", "")
		loginBrowser = request.headers.get("Sec-Ch-Ua")
		userAgent=""
		if loginBrowser:
			loginBrowseData = loginBrowser.split(";")
			browser = loginBrowseData[0]
		else:
			loginBrowseData = request.headers.get('User-Agent').split(";")
			browser = loginBrowseData[0]

		client_ip=0
		# Extracting client IP address
		if request.headers.getlist("X-Forwarded-For"): 
			client_ip = request.headers.getlist("X-Forwarded-For")[0]
		else:
			client_ip = request.remote_addr

		actionDate=datetime.datetime.now()

		jsonData = request.form.to_dict(flat=True)

		
		updatedrequestData = [jsonData]

		permissionsList = check_permissions(session.get("adminId"),"assignKycPermissions")
		if "delete" in permissionsList:
			if request.method == "POST":
				otp_check_id = request.form.get("otpLogid", "")
				defaultVerificationId = request.form.get("defaultVerificationId", "")
				if not otp_check_id:
					flash("Invalid Request.", "AssignApis_danger")
					return redirect(redirectto)
					
				otpcheck_queryset = OtpChecks.objects(adminId=adminId, defaultVerificationField=defaultVerificationId,id=str(otp_check_id), status=1).first()
				
				if not otpcheck_queryset:
					flash("Invalid Request.", "AssignApis_danger")
					return redirect(redirectto)
					
				# Update OTP status to 2 after verification
				otpcheck_queryset.update(status=2)

			AssignKycId = request.args.get("AssignKycId","").strip()

			if not AssignKycId:
				flash("Missing AssignKycId!", "AssignApis_danger")
				return redirect(redirectto)

			assign_kyc_queryset = AssignKyc.objects(id=AssignKycId, status__in=[0, 1]).first()
			existing_record = assign_kyc_queryset.to_json()
			requestData = [existing_record]
			if not assign_kyc_queryset:
				flash("Invalid Assign KYC ID!", "AssignApis_danger")
				return redirect(redirectto)
				
			assign_kyc_queryset.update(status=2)  
			flash("Assign KYC deleted successfully!", "AssignKyc_success")

			message=assign_kyc_queryset.adminId.userName+" "+assign_kyc_queryset.kycApiId.apiName+" Assign Kyc deleted successfully!"
			save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_assign_kyc","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
			
			return redirect(redirectto)
		else:
			flash("The staff member does not have permission to delete Assign Kyc.", "AssignApis_danger")
			return redirect(redirectto)

	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to delete Assign KYC!", "AssignApis_danger")
		return redirect(redirectto)
		

@kyc_apis.route("/upsert_kyc_api_charge_table", methods=["POST"])
@adminid_access_token_required
@csrf_protect
def upsert_kyc_api_charge_table():
	data_status={"responseStatus":0,"result":""}
	if not session.get("adminId"):
		flash("session Expired.")
		data_status["responseStatus"]=4
		return data_status
		
	adminId = session.get("adminId")
 
	csrf_token = request.form.get("csrf_token")
	print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
	latitude = request.form.get("latitude", "")
	longitude = request.form.get("longitude", "")
	loginBrowser = request.headers.get("Sec-Ch-Ua")
	if loginBrowser:
		loginBrowseData = loginBrowser.split(";")
		browser = loginBrowseData[0]
	else:
		loginBrowseData = request.headers.get('User-Agent').split(";")
		browser = loginBrowseData[0]

	existing_record = ""
	client_ip=0
	# Extracting client IP address
	if request.headers.getlist("X-Forwarded-For"): 
		client_ip = request.headers.getlist("X-Forwarded-For")[0]
	else:
		client_ip = request.remote_addr

	actionDate=datetime.datetime.now()
 
	permissionsList = check_permissions(session.get("adminId"),"kycApiChargePermissions")
	if "edit" in permissionsList:
		try:
			documentTypeList = request.form.getlist("documentType[]")
			kycApiId = request.form.get("kycApiId", "")
			gstIncludeList = request.form.getlist("gstInclude[]")
			gstValueList = request.form.getlist("gstValue[]")
			tdsIncludeList = request.form.getlist("tdsInclude[]")
			tdsValueList = request.form.getlist("tdsValue[]")
			chargeTypeList = request.form.getlist("chargeType[]")
			chargeValueList = request.form.getlist("chargeValue[]")
			
			jsonData = request.form.to_dict(flat=True)
			requestData = [jsonData]
			updatedrequestData = [jsonData]
			form = KycApiChargeFormSearch(request.form, current_id=kycApiId)
			if form.validate_on_submit():
			
				if len(documentTypeList)==len(gstIncludeList)==len(gstValueList)==len(tdsIncludeList)==len(tdsValueList)==len(chargeTypeList)==len(chargeValueList):

					for i in range(len(documentTypeList)):
						gstInclude = gstIncludeList[i]
						gstValue = float(gstValueList[i]) if gstValueList[i] else 0
						tdsInclude = tdsIncludeList[i]
						tdsValue = float(tdsValueList[i]) if tdsValueList[i] else 0
						chargeType = chargeTypeList[i]
						chargeValue = float(chargeValueList[i]) if chargeValueList[i] else 0
						documentType= documentTypeList[i]

						if gstValue>=0 and tdsValue>=0 and chargeValue>=0:
							existing_record = KycApiCharges.objects(kycApiId=ObjectId(kycApiId),documentType=documentType,status__in=[0,1]).first()
							admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
							if admin_queryset:
								message=admin_queryset.userName+" Kyc Api charge record updated"
								save_admin_log_table = save_admin_logs_data(adminId,None,None,"upsert_kyc_api_charge_table","create",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 
							   
							if existing_record:
								existing_record.update(documentType=documentType,gstInclude=gstInclude,chargeType=chargeType,chargeValue=chargeValue,tdsValue=tdsValue,tdsInclude=tdsInclude,gstValue=gstValue)
							else:
								new_kyc_charge_record=KycApiCharges(
									adminId=adminId,
									kycApiId=ObjectId(kycApiId),
									documentType=documentType,
									gstInclude=gstInclude,
									chargeType=chargeType,
									chargeValue=chargeValue,
									tdsValue=tdsValue,
									tdsInclude=tdsInclude,
									gstValue=gstValue,
									status=1,
									createdOn=datetime.datetime.now(),
								)
								new_kyc_charge_record.save()

						
					flash("Kyc Api charge record updated","charge_success")
					data_status["responseStatus"]=1
					return data_status

				else:
					flash("List fileds are not in same length",
						'AssignApis_danger')
					data_status["responseStatus"]=4
					return data_status
			else:
				data_status['result']=form.errors
				return data_status
					
					
		except Exception as e:
			app.logger.error(traceback.format_exc())
			flash("Failed to upsert KYC API charge table!", "charge_danger")
			data_status["responseStatus"]=4
			return data_status
			
	else:
		flash("The staff member does not have permission to update kyc api charges.", "charge_danger")
		data_status["responseStatus"]=4
		return data_status
		

		


		


