views.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from django.shortcuts import render
  2. from django.shortcuts import redirect
  3. from django.views.generic import View, DetailView
  4. from django.contrib import messages
  5. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  6. from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
  7. from django.utils import timezone
  8. from nlu_job.nlu_utils import model_inference, analyze_model_inference, clean_text
  9. from .models import FacebookReview, FacebookReviewReply
  10. from .forms import ReplyForm
  11. from review.models import CustomReply
  12. from .review_utils import reply2facebook_review_using_api
  13. from nlu_job.nlu_utils import filter_with_last_ten_reviews
  14. class FacebookReviews(LoginRequiredMixin, PermissionRequiredMixin, View):
  15. permission_required = 'is_admin'
  16. def post(self, request, *args, **kwargs):
  17. form = ReplyForm(self.request.POST)
  18. if form.is_valid():
  19. replied_text = form.cleaned_data.get('reply')
  20. review_id = self.request.POST['review_id']
  21. print('review-id', review_id)
  22. status_code = reply2facebook_review_using_api(
  23. review_id=review_id,
  24. reply=replied_text
  25. )
  26. if status_code == 200:
  27. FacebookReviewReply.objects.create(
  28. review_id=review_id,
  29. create_time=timezone.now(),
  30. replied_text=replied_text
  31. )
  32. messages.success(request, f'Your reply has been posted!')
  33. elif status_code == 404:
  34. FacebookReviewReply.objects.create(
  35. review_id=review_id,
  36. create_time=timezone.now(),
  37. replied_text=replied_text
  38. )
  39. messages.warning(request, f'User might delete this reply.!')
  40. else:
  41. messages.error(request, 'Something going wrong please notify the developers.')
  42. return redirect('facebook-reviews')
  43. def get(self, request, *args, **kwargs):
  44. now = timezone.now()
  45. form = ReplyForm()
  46. date = now - timezone.timedelta(days=7)
  47. reviews = FacebookReview.objects.filter(
  48. facebookreviewreply=None,
  49. create_time__gte=date
  50. ).order_by('create_time')
  51. page = request.GET.get('page', 1)
  52. paginator = Paginator(reviews, 10)
  53. try:
  54. reviews = paginator.page(page)
  55. except PageNotAnInteger:
  56. reviews = paginator.page(1)
  57. except EmptyPage:
  58. reviews = paginator.page(paginator.num_pages)
  59. context = {'reviews': reviews, 'form': form}
  60. return render(request, 'facebook-reviews.html', context=context)
  61. class FacebookReviewPrediction(LoginRequiredMixin, PermissionRequiredMixin, View):
  62. permission_required = 'is_admin'
  63. def get(self, request, id, *args, **kwargs):
  64. review = FacebookReview.objects.get(pk=id)
  65. review_text = clean_text(review.review_text)
  66. res = model_inference(review_text)
  67. intents = analyze_model_inference(res)
  68. replies = {}
  69. for intent in intents.keys():
  70. r = CustomReply.objects.filter(reply_category=intent, organization='SC')
  71. filtered_replies = filter_with_last_ten_reviews(review.page.location_id, r)
  72. replies[intent] = filtered_replies
  73. now = timezone.now()
  74. form = ReplyForm()
  75. date = now - timezone.timedelta(days=7)
  76. reviews = FacebookReview.objects.filter(
  77. facebookreviewreply=None,
  78. create_time__gte=date
  79. ).order_by('create_time')
  80. page = request.GET.get('page', 1)
  81. paginator = Paginator(reviews, 10)
  82. try:
  83. reviews = paginator.page(page)
  84. except PageNotAnInteger:
  85. reviews = paginator.page(1)
  86. except EmptyPage:
  87. reviews = paginator.page(paginator.num_pages)
  88. context = {
  89. 'reviews': reviews,
  90. 'form': form,
  91. 'intents': intents,
  92. 'replies': replies,
  93. }
  94. return render(request, 'facebook-reviews.html', context=context)
  95. class ReviewDetails(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
  96. permission_required = 'is_admin'
  97. model = FacebookReview
  98. template_name='facebook_review_details.html'
  99. context_object_name='review'
  100. class DeleteReview(LoginRequiredMixin, PermissionRequiredMixin, View):
  101. permission_required = 'is_admin'
  102. def get(self, requset, review_id, *args, **kwargs):
  103. review = FacebookReview.objects.filter(id=review_id).first()
  104. res = review.delete()
  105. return redirect('facebook-reviews')