
from django.views.generic.base import View
from django.views.generic import TemplateView
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render, redirect
from django.http.response import HttpResponse
from admin_panel.models import *
from . import forms
from django.contrib import messages
from django.core import mail
from django.template.loader import render_to_string
import math, random, string
from django.conf import settings
from django.core.paginator import Paginator
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from .functions import *
from django.db.models import Q
from datetime  import datetime
import json
from django.db.models import Count
import ast
from django.views.generic import TemplateView
from passlib.hash import django_pbkdf2_sha256 as handler
from django.http import HttpResponseRedirect
from collections import defaultdict
from panel_apis.models import *
import csv






#Funtion based views
def checkEmail(request):
	text = request.GET.get('email')
	post = User.objects.filter(email=text).first()
	if post:
		return HttpResponse ('true')
	else:
		message = 'This email does not exist in our database'
		return JsonResponse(message,safe=False)
	
def checkLoginPassword(request):
	text = request.GET.get('email','')
	password = request.GET.get('password')
	user         = User.objects.get(email=text)
	if user.check_password(password) == False:
		message = 'Please enter the correct password'
		return JsonResponse(message,safe=False)
	else:
		return HttpResponse ('true')

def adminCheckPassword(request):
	old_password = request.GET.get('old_password')
	user         = User.objects.get(email=request.user.email)
	if user.check_password(old_password) == False:
		message = 'Does not match with the old password.'
		return JsonResponse(message,safe=False)
	else:
		return HttpResponse ('true')


class AdminLogIn(TemplateView):
	template_name = 'admin-signin.html'
	def get(self,request):
		if(request.user.is_authenticated):
			return HttpResponseRedirect('/admin-dashboard')
		return render(request,self.template_name)
	
	def post(self,request):
		try:
			form = forms.AdminSigninForm(request.POST)
			if form.is_valid():
				email    = form.cleaned_data.get('email')
				password = form.cleaned_data.get('password')

				user     = authenticate(email=email, password=password)
				if user.status == False:
					messages.error(request, "You account has been deactivated by superadmin.")
					return redirect('/admin-login')

				if user.end_date:
					messages.error(request, "You account has been deleted by superadmin.")
					return redirect('/admin-login')

				if user:
						login(request, user)
						messages.success(request, "Login successfully")
						return redirect('/admin-dashboard')

				else:
					messages.error(request, "Invalid email and password.")
					return redirect('/admin-login')
			else:
				return render(request,self.template_name, {'form': form})
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-login')     
		

class AdminForgetPassword(TemplateView):
	template_name = 'forgot-password.html'
	def get(self,request):
		if(request.user.is_authenticated):
			return HttpResponseRedirect('/admin-dashboard')
		return render(request,self.template_name)
	
	def post(self,request):
		form = forms.AdminForgetPasswordForm(request.POST)
		if form.is_valid():
			email =  form.cleaned_data.get('email')
			admin_obj = User.objects.filter(email = email).first()
			ran_num = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(12)])
			baselink =  '/forgot-admin/' + str(admin_obj.email) + '/' + ran_num
			completelink = str(settings.BASE_URL) + baselink
			admin_obj.forgot_password_link = baselink
			admin_obj.save()            
			subject = 'Forgot Password'
			html_message = render_to_string('forget_admin_password_email.html', {'link': completelink})
			plain_message = html_message
			from_email = settings.EMAIL_HOST_USER
			to = email
			mail.send_mail(subject, plain_message, from_email, [to], html_message=html_message)
			messages.success(request, "A link has been successfully sent to your mail.")
			return redirect('/admin-forget-password')
		else:
			return render(request, self.template_name, {'form': form})
		

class ForgetPasswordVerification(TemplateView):
	template_name = 'reset-password.html'
	def get(self,request):
		link = str(self.request.path)
		user_email = link.split('/')[-2]
		link_expiry = User.objects.filter(email = user_email).first()
		if link_expiry.forgot_password_link == "LinkExpiry":
			return render(request,'link_expire.html')
		admin_obj = User.objects.filter(email = user_email, forgot_password_link = link).first()
		if admin_obj:
			valid = True
		else:
			valid = False
		return render(request,self.template_name,locals())

	def post(self,request):
		form = forms.ForgetVerificationForm(request.POST)
		if form.is_valid():
			new_password = form.cleaned_data.get('new_password')
			confirm_new_password = form.cleaned_data.get('confirm_new_password')
			link = str(self.request.path)
			user_email = link.split('/')[-3]
			print(user_email)
			user_obj = User.objects.filter(email = user_email).first()
			if user_obj:
				user_obj.set_password(new_password)
				user_obj.forgot_password_link = "LinkExpiry"
				user_obj.save()
				messages.success(request, "Password changed successfully")
				return redirect('/admin-login')
			else:
				messages.error(request, "Something went wrong")
				return redirect('/admin-login')
		else:
			return render(request, self.template_name, {'form': form})	


class AdminDashboard(TemplateView):
	template_name = 'dashboard.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		total_users = User.objects.filter(is_user = 1,end_date__isnull = True).count()
		users_obj  = User.objects.filter(is_user = 1,end_date__isnull = True)[:5]
				# Get the total count of workers
		total_workers = User.objects.filter(end_date__isnull=True, is_user=1).count()
		total_blogs = BlogsCategory.objects.filter(end_date__isnull=True).count()
		total_events = Events.objects.filter(end_date__isnull=True).count()
		total_research = InvestmentResearch.objects.filter(end_date__isnull=True).count()
		total_education = InvestmentEducationContent.objects.filter(end_date__isnull=True).count()
		sub_obj = CustomerSubscription.objects.all()

		active_worker = User.objects.filter(end_date__isnull=True, is_user=1).order_by('-id')
		users_by_month = defaultdict(int)
		for entry in active_worker:
			month = entry.start_date.month
			users_by_month[month] += 1
		month_names = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
		categories = [month_names[i - 1] for i in range(1, 13)]
		user_counts = [users_by_month.get(i, 0) for i in range(1, 13)]
		user_series_data = [{'name': 'Users', 'data': user_counts}]

		total_subscribers = User.objects.filter(has_subscription = True,end_date__isnull = True).count()

		context = {
			'categories': categories,
			'user_series_data':user_series_data,
			
		}
		return render(request,self.template_name,locals())
	

class AdminProfile(TemplateView):
	template_name = 'admin_profile.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		return render(request,self.template_name,locals())
		
	def post(self,request):
			form = forms.AdminProfileForm(request.POST)
			if form.is_valid():
				first_name = form.cleaned_data.get('first_name')
				last_name = form.cleaned_data.get('last_name')
				email = form.cleaned_data.get('email')
				phone_number = form.cleaned_data.get('phone_number')
				username = form.cleaned_data.get('username')

				User.objects.filter(id=request.user.id).update(first_name=first_name,last_name=last_name,email=email,phone_number=phone_number,username =username)
				if request.FILES.get('avatar'):
					fileUrl=uploadTheImages(request.FILES.get('avatar'))
					fileUrl='/'+fileUrl
					User.objects.filter(id=request.user.id).update(avatar=str(fileUrl))
				messages.success(request, "Update Succesfully")
				return redirect('admin-profile')
			else:
				return render(request,self.template_name)
		
		
class AdminResetPassword(TemplateView):
	template_name = 'admin_reset_password.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		return render(request,self.template_name,locals())

	def post(self,request):
		try:
			form = forms.ChangePasswordForm(request.POST)
			if form.is_valid():
				password = request.POST.get("confirmPassword")
				user     = User.objects.get(email=request.user.email)
				user.set_password(password)
				user.save()
				logout(request)
				messages.info(request, 'You have successfully reset your password')
				return redirect('/admin-login')
			else:
				
				return render(request, 'admin_reset_password.html', {'form': form})
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 
		

class AdminLogout(TemplateView):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		logout(request)
		messages.success(request, "Logout Succesfully")
		return redirect('/admin-login')
	


class privacyPolicy(View):
	template_name = 'privacy_policy.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		cont_obj = ContentPages.objects.filter(page_type='Privacy').first()
		return render(request,self.template_name,locals())
	
	def post(self,request):
		form = forms.content_page_form(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content = form.cleaned_data.get('content')
			data = ContentPages.objects.filter(page_type='Privacy').first()
			if data:
				ContentPages.objects.filter(id=data.id).update(title=title,content=content,page_type='Privacy')
			else:
				ContentPages.objects.create(title=title,content=content,page_type='Privacy')
			messages.success(request, 'Updated Successfully')
			return redirect('/privacy-policy')
		else:
			return render(request,self.template_name,locals())


class termsAndConditions(View):
	template_name = 'terms.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		cont_obj = ContentPages.objects.filter(page_type='Terms').first()
		return render(request,self.template_name,locals())
	
	def post(self,request):
		form = forms.content_page_form(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content = form.cleaned_data.get('content')
			data = ContentPages.objects.filter(page_type='Terms').first()
			if data:
				ContentPages.objects.filter(id=data.id).update(title=title,content=content,page_type='Terms')
			else:
				ContentPages.objects.create(title=title,content=content,page_type='Terms')
			messages.success(request, 'Updated Successfully')
			return redirect('/terms-and-conditions')
		else:
			return render(request,self.template_name,locals())


class faqListing(View):
	template_name = 'faq_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		data_obj = Faq.objects.filter(end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		faq_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	


class addFaq(View):
	template_name = 'add_faq.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		return render(request,self.template_name,locals())
	def post(self,request):
		form = forms.content_page_form(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content = form.cleaned_data.get('content')
			Faq.objects.create(title=title,content=content)
			messages.success(request, 'Created Successfully')
			return redirect('/faq-listing')
		else:
			return render(request,self.template_name,locals())


class editFaq(View):
	template_name = 'edit_faq.html'
	def get(self,request,id):
		faq_obj = Faq.objects.filter(id=id,end_date__isnull = True).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		form = forms.content_page_form(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content = form.cleaned_data.get('content')
			Faq.objects.filter(id=id).update(title=title,content=content)
			messages.success(request, 'Updated Successfully')
			return redirect('/faq-listing')
		else:
			return render(request,self.template_name,locals())

class deleteFaq(View):
	def get(self,request,id):
		Faq.objects.filter(id=id).update(end_date=datetime.now())
		messages.success(request, 'Faq Deleted Successfully')
		return redirect('/faq-listing')


class userListing(TemplateView):
	template_name = 'user_listing.html'
	def get(self,request):
		data_obj = User.objects.filter(is_user=1,end_date__isnull = True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = User.objects.filter(Q(phone_number__icontains=search_post)|Q(first_name__icontains=search_post)|Q(last_name__icontains=search_post)|Q(email__icontains=search_post),is_user=1,end_date__isnull = True).order_by('-id')
		
		search_start = request.GET.get('start_date')
		time = '22:44:46.873182+00'
		search_end = request.GET.get('end_date') 
		if search_start:
			data_obj = User.objects.filter(start_date__range=[search_start, search_end + ' '+ time],end_date__isnull=True,is_user=1).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		cust_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	

class editUser(TemplateView):
	template_name = 'edit_user.html'
	def get(self,request,id):
		job_function = JobFunctions.objects.filter(end_date__isnull=True)
		job_level = JobLevel.objects.filter(end_date__isnull=True)
		user_obj = User.objects.filter(id=id,is_user=1,end_date__isnull = True).first()
		return render(request,self.template_name,locals())
	

	def post(self,request,id):
		form = forms.editcustomerform(request.POST)
		if form.is_valid():
			username = form.cleaned_data.get('username')
			email = form.cleaned_data.get('email')
			phone_number = form.cleaned_data.get('phone_number')
			job_function = form.cleaned_data.get('job_function')
			job_fun_obj = JobFunctions.objects.get(id = job_function)

			job_level = form.cleaned_data.get('job_level')
			job_level_obj = JobLevel.objects.get(id = job_level)
			User.objects.filter(id=id,is_user = 1).update(username = username,email = email,phone_number = phone_number,job_function = job_fun_obj,job_level=job_level_obj)
			if request.FILES.get('avatar'):
				fileUrl=uploadTheImages(request.FILES.get('avatar'))
				fileUrl='/'+fileUrl
				User.objects.filter(id=id).update(avatar=str(fileUrl))
			messages.success(request, "Updated successfully")
			return redirect('/user-listing')
		else:
			return render(request,self.template_name,locals())
	


class userDetails(TemplateView):
	template_name = 'user_details.html'
	def get(self,request,id):
		cust_obj = User.objects.filter(id=id,is_user=1,end_date__isnull = True).first()
		return render(request,self.template_name,locals())
    
class deleteUser(View):
    def get(self,request,id):
        User.objects.filter(id=id,is_user=1).update(end_date=datetime.now())
        messages.success(request, 'User Deleted Successfully')
        return redirect('/user-listing')

class adminNotifications(TemplateView):
	template_name = 'admin_notifications.html'
	def get(self,request):
		notify_obj = AdminNotifications.objects.all().order_by('-id')
		return render(request,self.template_name,locals())

    
class deleteAdminNotifications(View):
    def get(self,request):
        try:
            if request.method == 'GET':
                ids = request.GET.get('delete_id')
                if ids:
                    int_id_list = [int(id) for id in ids.split(',')]
                    AdminNotifications.objects.filter(pk__in=int_id_list).delete()
                    messages.success(request,"Deleted Sucessfully")
                else:
                    messages.error(request,"At least One notification must be selected")
                return redirect('/admin-notifications')

            else:
                return redirect('/admin-notifications')
        except Exception as e:
            messages.warning(request, "Something went wrong.Please try again.")
            return redirect('admin-dashboard')  




class helpAndSupportList(TemplateView):
	template_name = 'help_support_list.html'
	def get(self,request):
		total = HelpSupport.objects.all().count()
		resolved = HelpSupport.objects.filter(status = True).count()
		pending = HelpSupport.objects.filter(status = False).count()
		help_obj = HelpSupport.objects.all()
		paginator = Paginator(help_obj, 8)
		page_number = request.GET.get('page')
		sup_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())


class viewHelpAndSupport(TemplateView):
	template_name = 'help_support_view.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request,id):
		sup_obj = HelpSupport.objects.filter(id=id).first()

		return render(request,self.template_name,locals())
	


class sendReplyHelpSupport(View):
	template_name = 'help_support_reply.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request,id):
		help =  HelpSupport.objects.filter(id=id).first()
		return render(request,self.template_name,locals())
    
	def post(self,request,id):
		form = forms.sendsupportform(request.POST)
		if form.is_valid():
			email =  form.cleaned_data.get('email')
			subject = form.cleaned_data.get('subject')
			reply = form.cleaned_data.get('reply')
			html_message = render_to_string('support_email.html', {'reply_text': reply,'email':email,'subject':subject})
			plain_message = html_message
			from_email = 'testeresfera@gmail.com'
			to = email
			mail.send_mail(subject, plain_message, from_email, [to], html_message=html_message)
			HelpSupport.objects.filter(id=id).update(reply=reply,reply_date = datetime.datetime.now(),status=True)
			messages.success(request, "send successfully")
			return redirect('/help-and-support-list')
		else:
			return render(request,self.template_name,locals())



class ratingsFeedbackList(TemplateView):
	template_name = 'service_feedback_list.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = RatingAndFeedback.objects.all()
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		service_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())



class viewRatingsFeedback(TemplateView):
	template_name = "service_feedback_view.html"
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		service_obj = RatingAndFeedback.objects.filter(id=id).first()
		return render(request,self.template_name,locals())
	

class subscriptionList(TemplateView):
	template_name = "subscription_listing.html"
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		try:
			method_obj = SubscriptionPlans.objects.filter(end_date__isnull=True)
			search_post = request.GET.get('search')
			if search_post:
				method_obj = SubscriptionPlans.objects.filter(Q(subscription_name__icontains=search_post),end_date__isnull = True).order_by('-id')
			paginator = Paginator(method_obj, 8)
			page_number = request.GET.get('page')
			data_obj = paginator.get_page(page_number)
			return render(request,self.template_name,locals())
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')         

class addSubscriptionPlan(TemplateView):
	template_name = "add_subscription.html"
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		return render(request,self.template_name,locals())
	
	def post(self,request):
		form = forms.subscriptionform(request.POST)
		if form.is_valid():
			subscription_name = form.cleaned_data.get('subscription_name')
			subscription_description = form.cleaned_data.get('subscription_description')
			duration = form.cleaned_data.get('duration')
			price = form.cleaned_data.get('price')
			unlock_real = form.cleaned_data.get('unlock_real')
			investment_tool = form.cleaned_data.get('investment_tool')
			method_obj = SubscriptionPlans.objects.create(subscription_description=subscription_description,subscription_name=subscription_name,duration=duration,price=price,
												unlock_real=unlock_real,investment_tool=investment_tool)
			messages.success(request, "Added Succesfully")
			return redirect('/subscription-list')
		else:
			return render(request,self.template_name,locals())
		
		

class editSubscriptionPlan(TemplateView):
	template_name = "edit_subscription.html"
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request,id):
		method_obj = SubscriptionPlans.objects.filter(id=id).first()
		return render(request,self.template_name,locals())
    
	def post(self,request,id):
		try:
			form = forms.subscriptionform(request.POST)
			if form.is_valid():
				subscription_name = form.cleaned_data.get('subscription_name')
				duration = form.cleaned_data.get('duration')
				price = form.cleaned_data.get('price')
				unlock_real = form.cleaned_data.get('unlock_real')
				investment_tool = form.cleaned_data.get('investment_tool')
				method_obj = SubscriptionPlans.objects.filter(id=id).update(subscription_name=subscription_name,duration=duration,price=price,unlock_real=unlock_real,investment_tool=investment_tool)
				messages.success(request, "Updated Succesfully")
				return redirect('/subscription-list')
			else:
				return render(request,'edit_subscription.html')
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')
        
class changeSubscriptionStatus(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def post(self,request):
		try:
			pub        = SubscriptionPlans.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "Subscription status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "Subscription status is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class deleteSubscriptionMethod(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request,id):
		SubscriptionPlans.objects.filter(id=id).update(end_date=datetime.now())
		messages.success(request, "Deleted successfully")
		return redirect('/subscription-list')



class blogCategoryListing(TemplateView):
	template_name = 'blog_category_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		data_obj = BlogsCategory.objects.filter(end_date__isnull = True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = BlogsCategory.objects.filter(Q(name__icontains=search_post),end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		cat_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	

class addBlogCategory(TemplateView):
	template_name = 'add_blog_category.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		# cat_obj =  BlogsCategory.objects.filter(id=id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request):
		form = forms.addblogcategoryform(request.POST)
		if form.is_valid():
			name = form.cleaned_data.get('name')
			category = form.cleaned_data.get('category')
			category_obj = BlogsCategory.objects.get(id=category)
			cat_obj = BlogsCategory.objects.create(name = name,category = category_obj)
			messages.success(request, "Created successfully")
			return redirect('/blog-category-listing')
		else:
			return render(request,self.template_name,locals())



class editBlogCategory(TemplateView):
	template_name = 'edit_blog_category.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request,id):
		cat_obj =  BlogsCategory.objects.filter(id=id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		form =  forms.addblogcategoryform(request.POST)
		if form.is_valid():
			name = form.cleaned_data.get('name')
			category = form.cleaned_data.get('category')
			category_obj = BlogsCategory.objects.get(id=category)
			BlogsCategory.objects.filter(id=id).update(name = name,category=category_obj)
			messages.success(request, "Created successfully")
			return redirect('/blog-category-listing')
		else:
			return render(request,self.template_name,locals())


class changeBlogCategoryStatus(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def post(self,request):
		try:
			pub        = BlogsCategory.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "Category status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "Category is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')   

class deleteBlogCategory(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  BlogsCategory.objects.filter(id=id,end_date__isnull = True ).first()
		cat_obj.end_date = datetime.datetime.now()
		cat_obj.save()
		messages.success(request, "Category deleted successfully")
		return redirect('/blog-category-listing')



class blogListing(TemplateView):
	template_name = 'blog_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		data_obj = Blogs.objects.filter(end_date__isnull = True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = Blogs.objects.filter(Q(category__name__icontains = search_post)|Q(title__icontains=search_post),end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		blog_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	

class addBlog(TemplateView):
	template_name = 'add_blog.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request):
		category =  BlogsCategory.objects.filter(end_date__isnull=True)
		return render(request,self.template_name,locals())
	
	def post(self,request):
		form = forms.addblogform(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content =  form.cleaned_data.get('content')
			category = form.cleaned_data.get('category')
			category_obj =  BlogsCategory.objects.get(id=category)
			blog_obj = Blogs.objects.create(title = title,content=content,category=category_obj,user = request.user.id)
			if request.FILES.get('blog_image'):
				fileUrl=uploadTheImages(request.FILES.get('blog_image'))
				fileUrl='/'+fileUrl
				blog_obj.blog_image = str(fileUrl)
				blog_obj.save()
			messages.success(request, "Created successfully")
			return redirect('/blog-listing')
		else:
			return render(request,self.template_name,locals())



class editBlog(TemplateView):
	template_name = 'edit_blog.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self,request,id):
		category =  BlogsCategory.objects.filter(end_date__isnull=True)
		blog_obj =  Blogs.objects.filter(id=id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		form =  forms.addblogform(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content =  form.cleaned_data.get('content')
			category = form.cleaned_data.get('category')
			category_obj =  BlogsCategory.objects.get(id=category)
			Blogs.objects.filter(id=id).update(title = title,content=content,category=category_obj,user = request.user.id)
			if request.FILES.get('blog_image'):
				fileUrl=uploadTheImages(request.FILES.get('blog_image'))
				fileUrl='/'+fileUrl
				Blogs.objects.filter(id=id).update(blog_image = str(fileUrl))
			messages.success(request, "Created successfully")
			return redirect('/blog-listing')
		else:
			return render(request,self.template_name,locals())


class changeBlogStatus(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def post(self,request):
		try:
			pub        = Blogs.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "Blog status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "Blog is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')   

class deleteBlog(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  Blogs.objects.filter(id=id,end_date__isnull = True ).first()
		cat_obj.end_date = datetime.datetime.now()
		cat_obj.save()
		messages.success(request, "Blog deleted successfully")
		return redirect('/blog-listing')

class communityPost(TemplateView):
	template_name = 'community_post.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = Community.objects.filter(end_date__isnull = True)
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		com_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())



class editCommunityPost(TemplateView):
	template_name = 'edit_community_post.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		com_obj = Community.objects.filter(id=id,end_date__isnull = True).first()
		return render(request,self.template_name,locals())
	

	def post(self, request,id):
		form =  forms.editcommunityform(request.POST)
		if form.is_valid():
			content = form.cleaned_data.get('content')
			Community.objects.filter(id=id,end_date__isnull = True).update(content=content)
			messages.success(request, "Updated successfully")
			return redirect('/community-post')
		else:
			return render(request,self.template_name,locals())




class getSubscribers(TemplateView):
	template_name = 'subscriber_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = CustomerSubscription.objects.all()
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		sub_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	

class getWebinarListing(TemplateView):
	template_name = 'webinar_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		return render(request,self.template_name,locals())


	
class getWebinarDetails(TemplateView):
	template_name = 'webinar_details.html'
	def get(self, request):
		return render(request,self.template_name,locals())



class eventListing(TemplateView):
	template_name = 'event_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = Events.objects.filter(end_date__isnull = True)
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		event_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())


class addEvent(TemplateView):
	template_name = 'add_event.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		return render(request,self.template_name,locals())
	
	def post(self, request):
		form =  forms.addEventform(request.POST)
		if form.is_valid():
			event_name = form.cleaned_data.get('event_name')
			description = form.cleaned_data.get('description')
			date = form.cleaned_data.get('date')
			start_time = form.cleaned_data.get('start_time')
			end_time = form.cleaned_data.get('end_time')
			location = form.cleaned_data.get('location')
			user_obj = User.objects.get(id = request.user.id)
			event_obj = Events.objects.create(event_name=event_name,description=description,date=date,start_time=start_time,end_time=end_time,location=location,user = user_obj)
			if request.FILES.get('event_image'):
				fileUrl=uploadTheImages(request.FILES.get('event_image'))
				fileUrl='/'+fileUrl
				event_obj.event_image = str(fileUrl)
				event_obj.save()
			messages.success(request, "Created successfully")
			return redirect('/event-listing')
		else:
			return render(request,self.template_name,locals())
		

class editEvent(TemplateView):
	template_name = 'edit_event.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		event_obj = Events.objects.get(id=id)
		return render(request,self.template_name,locals())
	

	def post(self, request,id):
		form =  forms.addEventform(request.POST)
		if form.is_valid():
			event_name = form.cleaned_data.get('event_name')
			description = form.cleaned_data.get('description')
			date = form.cleaned_data.get('date')
			start_time = form.cleaned_data.get('start_time')
			end_time = form.cleaned_data.get('end_time')
			location = form.cleaned_data.get('location')
			event_obj = Events.objects.filter(id=id).update(event_name=event_name,description=description,date=date,start_time=start_time,end_time=end_time,location=location)
			if request.FILES.get('event_image'):
				fileUrl=uploadTheImages(request.FILES.get('event_image'))
				fileUrl='/'+fileUrl
				Events.objects.filter(id=id).update(event_image = str(fileUrl))
			messages.success(request, "Updated successfully")
			return redirect('/event-listing')
		else:
			return render(request,self.template_name,locals())


class viewEvent(TemplateView):
	template_name = 'view_event.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		view_obj = Events.objects.filter(id=id).first()
		return render(request,self.template_name,locals())

class deleteEvent(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  Events.objects.filter(id=id,end_date__isnull = True ).first()
		cat_obj.end_date = datetime.datetime.now()
		cat_obj.save()
		messages.success(request, "Event deleted successfully")
		return redirect('/event-listing')


class reportSection(TemplateView):
	template_name = 'report_section.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		return render(request,self.template_name,locals())
	

class investeduCategory(TemplateView):
	template_name = 'invest_edu_category.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = InvestmentEducationCategory.objects.filter(end_date__isnull=True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = InvestmentEducationCategory.objects.filter(Q(name__icontains = search_post),end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		cat_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	
class addInvesteduCategory(TemplateView):
	template_name = 'add_invest_edu_category.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		return render(request,self.template_name,locals())

	def post(self, request):
		form =  forms.addInvestEduCategoryForm(request.POST)
		if form.is_valid():
			name = form.cleaned_data.get('name')
			is_subscription =  form.cleaned_data.get('is_subscription')
			InvestmentEducationCategory.objects.create(name=name,is_subscription=is_subscription)
			messages.success(request, "Added successfully")
			return redirect('/invest-edu-category')
		else:
			return render(request,self.template_name,locals())

class editInvesteduCategory(TemplateView):
	template_name = 'edit_invest_edu_category.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj = InvestmentEducationCategory.objects.filter(id=id,end_date__isnull =True).first()
		return render(request,self.template_name,locals())

	def post(self, request,id):
		form =  forms.addInvestEduCategoryForm(request.POST)
		if form.is_valid():
			name = form.cleaned_data.get('name')
			is_subscription =  form.cleaned_data.get('is_subscription')
			InvestmentEducationCategory.objects.filter(id= id,end_date__isnull =True).update(name=name,is_subscription=is_subscription)
			messages.success(request, "Updated successfully")
			return redirect('/invest-edu-category')
		else:
			return render(request,self.template_name,locals())



class deleteInvesteduCategory(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  InvestmentEducationCategory.objects.filter(id=id,end_date__isnull = True ).first()
		cat_obj.end_date = datetime.datetime.now()
		cat_obj.save()
		messages.success(request, "Category deleted successfully")
		return redirect('/invest-edu-category')
				

class changeInvesteduCategoryStatus(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def post(self,request):
		try:
			pub        = InvestmentEducationCategory.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "Category status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "Category is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')   


class investeduSubCategory(TemplateView):
	template_name = 'invest_edu_sub_category.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = InvestmentEducationSubCategory.objects.filter(end_date__isnull=True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = InvestmentEducationSubCategory.objects.filter(Q(category__name__icontains = search_post)|Q(name__icontains = search_post),end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		cat_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())


class addInvesteduSubCategory(TemplateView):
	template_name = 'add_invest_edu_subcategory.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		main_category = InvestmentEducationCategory.objects.filter(end_date__isnull=True)
		return render(request,self.template_name,locals())

	def post(self, request):
		form =  forms.addInvestEduSubCategoryForm(request.POST)
		if form.is_valid():
			name = form.cleaned_data.get('name')
			main_id = form.cleaned_data.get('category')
			category_obj = InvestmentEducationCategory.objects.get(id = main_id)
			InvestmentEducationSubCategory.objects.create(name=name,category = category_obj)
			messages.success(request, "Added successfully")
			return redirect('/invest-edu-subcategory')
		else:
			return render(request,self.template_name,locals())

class editInvesteduSubCategory(TemplateView):
	template_name = 'edit_invest_edu_subcategory.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		main_category = InvestmentEducationCategory.objects.filter(end_date__isnull=True)
		cat_obj = InvestmentEducationSubCategory.objects.filter(id=id,end_date__isnull =True).first()
		return render(request,self.template_name,locals())

	def post(self, request,id):
		form =  forms.addInvestEduSubCategoryForm(request.POST)
		if form.is_valid():
			name = form.cleaned_data.get('name')
			main_id = form.cleaned_data.get('category')
			category_obj = InvestmentEducationCategory.objects.get(id = main_id)
			InvestmentEducationSubCategory.objects.filter(id= id).update(name=name,category = category_obj)
			messages.success(request, "Updated successfully")
			return redirect('/invest-edu-subcategory')
		else:
			return render(request,self.template_name,locals())



class deleteInvesteduSubCategory(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  InvestmentEducationSubCategory.objects.filter(id=id,end_date__isnull = True ).first()
		cat_obj.end_date = datetime.datetime.now()
		cat_obj.save()
		messages.success(request, "SubCategory deleted successfully")
		return redirect('/invest-edu-subcategory')
				

class changeInvesteduSubCategoryStatus(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def post(self,request):
		try:
			pub        = InvestmentEducationSubCategory.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "SubCategory status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "SubCategory is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')   



class investmentEducationListing(TemplateView):
	template_name = 'invest_edu_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = InvestmentEducationContent.objects.filter(end_date__isnull=True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = InvestmentEducationContent.objects.filter(Q(sub_category__name__icontains = search_post)|Q(title__icontains = search_post),end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		content_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())


class addInvestmentEducation(TemplateView):
	template_name = 'add_invest_edu.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		category = InvestmentEducationSubCategory.objects.filter(end_date__isnull=True)
		return render(request,self.template_name,locals())

	def post(self, request):
		form =  forms.addInvestEduContentForm(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content = form.cleaned_data.get('content')
			category  = form.cleaned_data.get('category')
			category_obj = InvestmentEducationSubCategory.objects.get(id = category)
			cont_obj = InvestmentEducationContent.objects.create(title=title,content=content,sub_category=category_obj)
			if request.FILES.get('video'):
				fileUrl=uploadTheImages(request.FILES.get('video'))
				fileUrl='/'+fileUrl
				cont_obj.video = str(fileUrl)
				cont_obj.save()
			messages.success(request, "Created successfully")
			return redirect('/investment-education-listing')
		else:
			return render(request,self.template_name,locals())





class editInvestmentEducation(TemplateView):
	template_name = 'edit_invest_edu.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		category = InvestmentEducationSubCategory.objects.filter(end_date__isnull=True)
		cont_obj =  InvestmentEducationContent.objects.filter(id = id,end_date__isnull=True).first()
		return render(request,self.template_name,locals())

	def post(self, request,id):
		form =  forms.addInvestEduContentForm(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content = form.cleaned_data.get('content')
			category  = form.cleaned_data.get('category')
			category_obj = InvestmentEducationSubCategory.objects.get(id = category)
			cont_obj = InvestmentEducationContent.objects.filter(id = id).update(title=title,content=content,sub_category=category_obj)
			if request.FILES.get('video'):
				fileUrl=uploadTheImages(request.FILES.get('video'))
				fileUrl='/'+fileUrl
				InvestmentEducationContent.objects.filter(id = id).update(video = str(fileUrl))
			messages.success(request, "Updated successfully")
			return redirect('/investment-education-listing')
		else:
			return render(request,self.template_name,locals())



class deleteInvesteduContent(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  InvestmentEducationContent.objects.filter(id=id,end_date__isnull = True ).first()
		cat_obj.end_date = datetime.datetime.now()
		cat_obj.save()
		messages.success(request, "Investment education deleted successfully")
		return redirect('/investment-education-listing')
	

class changeInvesteduContentStatus(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def post(self,request):
		try:
			pub        = InvestmentEducationContent.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "Investment status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "Investment is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')   
		



class jobFunctionListing(TemplateView):
	template_name = 'job_function_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = JobFunctions.objects.filter(end_date__isnull=True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = JobFunctions.objects.filter(Q(title__icontains = search_post),end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		job_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())


class jobAddFunction(TemplateView):
	template_name = 'add_job_function.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		return render(request,self.template_name,locals())

	def post(self,request):
		form =  forms.addJobFunctionForm(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			cont_obj = JobFunctions.objects.create(title=title)
			messages.success(request, "Created successfully")
			return redirect('/job-function-listing')
		else:
			return render(request,self.template_name,locals())



class jobEditFunction(TemplateView):
	template_name = 'edit_job_function.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		job_obj =  JobFunctions.objects.filter(id = id).first()
		return render(request,self.template_name,locals())

	def post(self,request,id):
		form =  forms.addJobFunctionForm(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			cont_obj = JobFunctions.objects.filter(id=id).update(title=title)
			messages.success(request, "Updated successfully")
			return redirect('/job-function-listing')
		else:
			return render(request,self.template_name,locals())
		

class deleteJobFunction(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  JobFunctions.objects.filter(id=id,end_date__isnull = True ).first()
		cat_obj.end_date = datetime.datetime.now()
		cat_obj.save()
		messages.success(request, "Job function deleted successfully")
		return redirect('/job-function-listing')



class jobRoleListing(TemplateView):
	template_name = 'job_role_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = JobLevel.objects.filter(end_date__isnull=True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = JobLevel.objects.filter(Q(sub_category__name__icontains = search_post)|Q(title__icontains = search_post),end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		job_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())



class jobAddRole(TemplateView):
	template_name = 'add_job_role.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		return render(request,self.template_name,locals())

	def post(self,request):
		form =  forms.addJobRoleForm(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			cont_obj = JobLevel.objects.create(title=title)
			messages.success(request, "Created successfully")
			return redirect('/job-level-listing')
		else:
			return render(request,self.template_name,locals())



class jobEditRole(TemplateView):
	template_name = 'edit_job_role.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		job_obj =  JobLevel.objects.filter(id = id).first()
		return render(request,self.template_name,locals())

	def post(self,request,id):
		form =  forms.addJobRoleForm(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			cont_obj = JobLevel.objects.filter(id=id).update(title=title)
			messages.success(request, "Updated successfully")
			return redirect('/job-level-listing')
		else:
			return render(request,self.template_name,locals())
		

class deleteJobRole(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  JobLevel.objects.filter(id=id,end_date__isnull = True ).first()
		cat_obj.end_date = datetime.datetime.now()
		cat_obj.save()
		messages.success(request, "Job level deleted successfully")
		return redirect('/job-level-listing')


class quizListing(TemplateView):
	template_name = 'quiz_listing.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj  =  QuizModel.objects.all().order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		quiz_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())


class addQuestion(TemplateView):
	template_name = 'add_quiz_question.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		return render(request,self.template_name,locals())
	

	def post(self,request):
		form =  forms.addQuestionForm(request.POST)
		if form.is_valid():
			question = form.cleaned_data.get('question')
			op1 = form.cleaned_data.get('op1')
			op2 = form.cleaned_data.get('op2')
			op3 = form.cleaned_data.get('op3')
			op4 = form.cleaned_data.get('op4')
			ans = form.cleaned_data.get('ans')
			cont_obj = QuizModel.objects.create(question=question,op1=op1,op2=op2,op3=op3,op4=op4,ans=ans)
			messages.success(request, "Created successfully")
			return redirect('/quiz-listing')
		else:
			return render(request,self.template_name,locals())

class editQuestion(TemplateView):
	template_name = 'edit_quiz_question.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cont_obj =  QuizModel.objects.filter(id = id).first()
		return render(request,self.template_name,locals())
	

	def post(self,request,id):
		form =  forms.addQuestionForm(request.POST)
		if form.is_valid():
			question = form.cleaned_data.get('question')
			op1 = form.cleaned_data.get('op1')
			op2 = form.cleaned_data.get('op2')
			op3 = form.cleaned_data.get('op3')
			op4 = form.cleaned_data.get('op4')
			ans = form.cleaned_data.get('ans')
			cont_obj = QuizModel.objects.filter(id = id).update(question=question,op1=op1,op2=op2,op3=op3,op4=op4,ans=ans)
			messages.success(request, "Updated successfully")
			return redirect('/quiz-listing')
		else:
			return render(request,self.template_name,locals())
		
class quizDetail(TemplateView):
	template_name = 'quiz_detail.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cont_obj = QuizModel.objects.filter(id = id).first()
		return render(request,self.template_name,locals())
	


class deleteQuizQuestion(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  QuizModel.objects.filter(id=id).first()
		cat_obj.delete()
		messages.success(request, "Quiz question deleted successfully")
		return redirect('/quiz-listing')
	
class getInvestmentResearchList(TemplateView):
	template_name = 'invest_research_list.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		data_obj = InvestmentResearch.objects.filter(end_date__isnull = True)
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		invest_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	

class addInvestmentResearch(TemplateView):
	template_name = 'add_investment_research.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request):
		return render(request,self.template_name,locals())
	

	def post(self, request):
		form =  forms.addInvestResearchform(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content =  form.cleaned_data.get('content')
			invest_obj = InvestmentResearch.objects.create(title = title,content=content)
			if request.FILES.get('research_image'):
				fileUrl=uploadTheImages(request.FILES.get('research_image'))
				fileUrl=fileUrl
				fileUrl='/'+fileUrl
				invest_obj.research_image = str(fileUrl)
				invest_obj.save()
			if request.FILES.get('video'):
				fileUrl=uploadTheImages(request.FILES.get('video'))
				fileUrl=fileUrl
				fileUrl='/'+fileUrl
				invest_obj.video = str(fileUrl)
				invest_obj.save()
			messages.success(request, "Created successfully")
			return redirect('/get-investment-research-list')
		else:
			return render(request,self.template_name,locals())



class editInvestmentResearch(TemplateView):
	template_name = 'edit_investment_research.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		invest_obj = InvestmentResearch.objects.filter(id = id).first()
		return render(request,self.template_name,locals())
	

	def post(self, request,id):
		form =  forms.addInvestResearchform(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content =  form.cleaned_data.get('content')
			blog_obj = InvestmentResearch.objects.filter(id = id).update(title = title,content=content)
			if request.FILES.get('research_image'):
				fileUrl=uploadTheImages(request.FILES.get('research_image'))
				fileUrl=fileUrl
				fileUrl='/'+fileUrl
				InvestmentResearch.objects.filter(id = id).update(research_image = str(fileUrl))
			if request.FILES.get('video'):
				fileUrl=uploadTheImages(request.FILES.get('video'))
				fileUrl=fileUrl
				fileUrl='/'+fileUrl
				InvestmentResearch.objects.filter(id = id).update(video = str(fileUrl))
			messages.success(request, "Created successfully")
			return redirect('/get-investment-research-list')
		else:
			return render(request,self.template_name,locals())
		

class detailInvestmentResearch(TemplateView):
	template_name = 'investment_research_details.html'
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cont_obj = InvestmentResearch.objects.filter(id = id).first()
		return render(request,self.template_name,locals())
	
class deletedInvestmentResearch(View):
	@method_decorator(login_required(login_url='/admin-login'))
	def get(self, request,id):
		cat_obj  =  InvestmentResearch.objects.filter(id=id).first()
		cat_obj.delete()
		messages.success(request, "Deleted successfully")
		return redirect('/get-investment-research-list')
	



def exportCsvUSer(request):
	queryset = User.objects.filter(is_superuser=False)
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="user.csv"'
	writer = csv.writer(response)
	writer.writerow(['Email', 'Phone Number', 'Username','Job Level','Job Function', 'Has Subscription', 'Addres'])
	for item in queryset:
		writer.writerow([item.email,item.phone_number, item.username,item.job_level.title, item.job_function.title , item.has_subscription,item.address ])
	return response


def exportSubscriberUser(request):
	queryset = CustomerSubscription.objects.all()
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="Subscriber.csv"'
	writer = csv.writer(response)
	writer.writerow(['Username','Subscription','Buy Date', 'Expiry Date', 'Is Active'])
	for item in queryset:
		writer.writerow([item.user.username,item.subscription.subscription_name, item.buyDate,item.expiryDate, item.is_active ])
	return response


def exportBlogs(request):
	queryset = Blogs.objects.filter(end_date__isnull = True)
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="Blogs.csv"'
	writer = csv.writer(response)
	writer.writerow(['Category','Title', 'Content', 'Created Date'])
	for item in queryset:
		writer.writerow([item.category.name, item.title,item.content, item.start_date ])
	return response


def exportEvents(request):
	queryset = Events.objects.filter(end_date__isnull = True)
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="Events.csv"'
	writer = csv.writer(response)
	writer.writerow(['Event Name','Username', 'Description', 'Date', 'Start Time','End Time','Location'])
	for item in queryset:
		writer.writerow([item.event_name, item.user.username,item.description, item.date,item.start_time,item.end_time,item.location ])
	return response


def exportInvestmentResearch(request):
	queryset = InvestmentResearch.objects.filter(end_date__isnull = True)
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="Research.csv"'
	writer = csv.writer(response)
	writer.writerow(['Title','Content', 'Created Date'])
	for item in queryset:
		writer.writerow([item.title, item.content,item.start_date])
	return response


def exportInvestmentEducation(request):
	queryset = InvestmentEducationContent.objects.filter(end_date__isnull = True)
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="Education.csv"'
	writer = csv.writer(response)
	writer.writerow(['Category','Sub Category','Title','Content','Created Date', ])
	for item in queryset:
		writer.writerow([item.sub_category.name,item.sub_category.category.name, item.title,item.content,item.start_date])
	return response

