Files
goodtimes/manage_communications/views.py
2024-04-10 12:57:44 +05:30

167 lines
6.1 KiB
Python

import threading
from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin
from accounts import resource_action
from django.views import generic
from goodtimes.services import EmailService
from manage_communications.utils import send_email_async
from .models import Feedback, ContactUs, Tickets
from goodtimes import constants
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse_lazy
from django.contrib import messages
# Create your views here.
class ContactUsListView(LoginRequiredMixin, generic.ListView):
page_name = resource_action.RESOURCE_MANAGE_CONTACT_US
resource = resource_action.RESOURCE_MANAGE_CONTACT_US
action = resource_action.ACTION_READ
model = ContactUs
template_name = "manage_communications/contact_us_list.html"
context_object_name = "contact_us_obj"
def get_queryset(self):
return super().get_queryset().filter(deleted=False)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["page_name"] = self.page_name
return context
class ContactUsReplyView(LoginRequiredMixin, generic.View):
page_name = resource_action.RESOURCE_MANAGE_CONTACT_US
model = ContactUs
success_message = constants.DATA_SAVED
success_url = reverse_lazy("manage_communications:contact_us_list")
def post(self, request):
id = request.POST.get("id")
message = request.POST.get("message")
if id or message:
try:
instance = self.model.objects.get(id=id)
instance.reply = message
instance.save()
messages.success(request, self.success_message)
name = instance.name
email = instance.email_address
subject = instance.subject
# Create an instance of the EmailService
email_service = EmailService(
subject=f"GoodTimes - {subject}",
to=[
email,
],
from_email=settings.EMAIL_HOST_USER,
)
print("email_service: ", email_service)
email_service.load_template(
"manage_communications/contact_us_email.html",
context={
"email": email,
"message": message,
"subject": subject,
"name": name,
},
)
# Send the email using threading
email_thread = threading.Thread(
target=send_email_async, args=(email_service,)
)
email_thread.start()
print("Email sent from views successfully!")
except self.model.DoesNotExist:
messages.error(request, "Contact Us entry not found")
except Exception as e:
messages.error(request, str(e))
else:
messages.error(request, "Missing 'id' or 'message' in the request")
# Redirect to the desired URL after form submission
return redirect(self.success_url)
class ContactUsCreateOrUpdateView(LoginRequiredMixin, generic.TemplateView):
page_name = resource_action.RESOURCE_MANAGE_CONTACT_US
template_name = "manage_communications/contact_us_list.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["page_name"] = self.page_name
return context
class TicketsListView(LoginRequiredMixin, generic.ListView):
page_name = resource_action.RESOURCE_MANAGE_TICKET
resource = resource_action.RESOURCE_MANAGE_TICKET
action = resource_action.ACTION_READ
model = ContactUs
template_name = "manage_communications/ticket_list.html"
context_object_name = "objs"
def get_queryset(self):
return super().get_queryset().filter(deleted=False)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["page_name"] = self.page_name
return context
class TicketListView(LoginRequiredMixin, generic.ListView):
page_name = resource_action.RESOURCE_MANAGE_CONTACT_US
resource = resource_action.RESOURCE_MANAGE_CONTACT_US
action = resource_action.ACTION_READ
model = ContactUs
template_name = "manage_communications/contact_us_list.html"
context_object_name = "contact_us_obj"
def get_queryset(self):
return super().get_queryset().filter(deleted=False)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["page_name"] = self.page_name
return context
class FeedbackListView(LoginRequiredMixin, generic.ListView):
page_name = resource_action.RESOURCE_MANAGE_FEEDBACK
resource = resource_action.RESOURCE_MANAGE_FEEDBACK
action = resource_action.ACTION_READ
model = Feedback
template_name = "manage_communications/feedback_list.html"
context_object_name = "feedback_obj"
def get_queryset(self):
return super().get_queryset().select_related("principal").filter(deleted=False)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["page_name"] = self.page_name
return context
class FeedbackDeleteView(LoginRequiredMixin, generic.View):
page_name = resource_action.RESOURCE_MANAGE_FEEDBACK
resource = resource_action.RESOURCE_MANAGE_FEEDBACK
action = resource_action.ACTION_DELETE
model = Feedback
success_url = reverse_lazy("manage_communications:feedback_list")
success_message = constants.RECORD_DELETED
error_message = constants.RECORD_NOT_FOUND
def get(self, request, pk):
try:
type_obj = self.model.objects.get(id=pk)
type_obj.deleted = True
type_obj.active = False
type_obj.save()
messages.success(request, self.success_message)
except self.model.DoesNotExist:
messages.success(request, self.error_message)
return redirect(self.success_url)