123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- from django.shortcuts import render
- from django.shortcuts import redirect
- from django.views.generic import View, DetailView
- from django.contrib import messages
- from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
- from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
- from django.utils import timezone
- from nlu_job.nlu_utils import model_inference, analyze_model_inference, clean_text
- from .models import FacebookReview, FacebookReviewReply
- from .forms import ReplyForm
- from review.models import CustomReply
- from .review_utils import reply2facebook_review_using_api
- from nlu_job.nlu_utils import filter_with_last_ten_reviews
- class FacebookReviews(LoginRequiredMixin, PermissionRequiredMixin, View):
- permission_required = 'is_admin'
- def post(self, request, *args, **kwargs):
- form = ReplyForm(self.request.POST)
- if form.is_valid():
- replied_text = form.cleaned_data.get('reply')
- review_id = self.request.POST['review_id']
- print('review-id', review_id)
- status_code = reply2facebook_review_using_api(
- review_id=review_id,
- reply=replied_text
- )
- if status_code == 200:
- FacebookReviewReply.objects.create(
- review_id=review_id,
- create_time=timezone.now(),
- replied_text=replied_text
- )
- messages.success(request, f'Your reply has been posted!')
- elif status_code == 404:
- FacebookReviewReply.objects.create(
- review_id=review_id,
- create_time=timezone.now(),
- replied_text=replied_text
- )
- messages.warning(request, f'User might delete this reply.!')
- else:
- messages.error(request, 'Something going wrong please notify the developers.')
- return redirect('facebook-reviews')
- def get(self, request, *args, **kwargs):
- now = timezone.now()
- form = ReplyForm()
- date = now - timezone.timedelta(days=7)
- reviews = FacebookReview.objects.filter(
- facebookreviewreply=None,
- create_time__gte=date
- ).order_by('create_time')
- page = request.GET.get('page', 1)
- paginator = Paginator(reviews, 10)
- try:
- reviews = paginator.page(page)
- except PageNotAnInteger:
- reviews = paginator.page(1)
- except EmptyPage:
- reviews = paginator.page(paginator.num_pages)
- context = {'reviews': reviews, 'form': form}
- return render(request, 'facebook-reviews.html', context=context)
- class FacebookReviewPrediction(LoginRequiredMixin, PermissionRequiredMixin, View):
- permission_required = 'is_admin'
- def get(self, request, id, *args, **kwargs):
- review = FacebookReview.objects.get(pk=id)
- review_text = clean_text(review.review_text)
- res = model_inference(review_text)
- intents = analyze_model_inference(res)
- replies = {}
- for intent in intents.keys():
- r = CustomReply.objects.filter(reply_category=intent)
- filtered_replies = filter_with_last_ten_reviews(review.page.location_id, r)
- replies[intent] = filtered_replies
- now = timezone.now()
- form = ReplyForm()
- date = now - timezone.timedelta(days=7)
- reviews = FacebookReview.objects.filter(
- facebookreviewreply=None,
- create_time__gte=date
- ).order_by('create_time')
- page = request.GET.get('page', 1)
- paginator = Paginator(reviews, 10)
- try:
- reviews = paginator.page(page)
- except PageNotAnInteger:
- reviews = paginator.page(1)
- except EmptyPage:
- reviews = paginator.page(paginator.num_pages)
- context = {
- 'reviews': reviews,
- 'form': form,
- 'intents': intents,
- 'replies': replies,
- }
- return render(request, 'facebook-reviews.html', context=context)
- class ReviewDetails(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
- permission_required = 'is_admin'
- model = FacebookReview
- template_name='facebook_review_details.html'
- context_object_name='review'
- class DeleteReview(LoginRequiredMixin, PermissionRequiredMixin, View):
- permission_required = 'is_admin'
-
- def get(self, requset, review_id, *args, **kwargs):
- review = FacebookReview.objects.filter(id=review_id).first()
- res = review.delete()
- return redirect('facebook-reviews')
|