views.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. from django.db import models
  2. from django.utils import timezone
  3. from django.shortcuts import render, redirect
  4. from django.contrib import messages
  5. from django.views.generic import View, DetailView
  6. from django.shortcuts import get_object_or_404
  7. from review.models import Review, Reply
  8. from review.forms import ReplyForm
  9. from gauth.models import Location
  10. from review.review_utils import reply_review
  11. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  12. from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
  13. class ReviewListByLocationView(LoginRequiredMixin, View):
  14. def get(self, request, location_id, *args, **kwargs):
  15. reviews = Review.objects.filter(location_id=location_id).order_by('-update_time')
  16. locations = Location.objects.all()
  17. page = request.GET.get('page', 1)
  18. paginator = Paginator(reviews, 50)
  19. try:
  20. reviews = paginator.page(page)
  21. except PageNotAnInteger:
  22. reviews = paginator.page(1)
  23. except EmptyPage:
  24. reviews = paginator.page(paginator.num_pages)
  25. context = {'reviews': reviews, 'locations': locations}
  26. return render(request, 'review_list.html', context)
  27. class ReviewListView(LoginRequiredMixin, View):
  28. def get(self, request, *args, **kwargs):
  29. reviews = Review.objects.all().order_by('-update_time')
  30. locations = Location.objects.all()
  31. page = request.GET.get('page', 1)
  32. paginator = Paginator(reviews, 50)
  33. try:
  34. reviews = paginator.page(page)
  35. except PageNotAnInteger:
  36. reviews = paginator.page(1)
  37. except EmptyPage:
  38. reviews = paginator.page(paginator.num_pages)
  39. context = {'reviews': reviews, 'locations': locations}
  40. return render(request, 'review_list.html', context)
  41. class UnRepliedReviewList(LoginRequiredMixin, PermissionRequiredMixin, View):
  42. permission_required = 'is_admin'
  43. def post(self, request, *args, **kwargs):
  44. form = ReplyForm(self.request.POST)
  45. if form.is_valid():
  46. replied_text = form.cleaned_data.get('reply')
  47. review_id = self.request.POST['review_id']
  48. review = get_object_or_404(Review, pk=review_id)
  49. response = reply_review(review=review, replied_text=replied_text)
  50. if response.status_code == 200:
  51. review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
  52. review_reply.save()
  53. review.reply = review_reply
  54. review.save()
  55. messages.success(request, f'Your reply has been posted!')
  56. elif response.status_code == 404:
  57. review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
  58. review_reply.save()
  59. review.reply = review_reply
  60. review.save()
  61. messages.warning(request, f'User might remove this review. Reply has been saved in database!')
  62. elif response.status_code == 400:
  63. messages.error(request, f'The request was unacceptable, often due to missing a required parameter.')
  64. elif response.status_code == 401:
  65. messages.error(request, f'No valid access token has provided. Please authorize again')
  66. elif response.status_code == 402:
  67. messages.info(request, f'The parameters were valid but the request failed.')
  68. elif response.status_code == 403:
  69. messages.error(request, f'The access token doesn\'t have permissions to perform the request.failed.')
  70. elif response.status_code in [500, 502, 503, 504]:
  71. messages.info(request, f'Something went wrong on Google\'s end. (These are rare.)')
  72. elif response.status_code == 501:
  73. messages.info(request, f'This service is off/postpond on Google\'s end. (These are rare.)')
  74. else:
  75. messages.info(request, f'Something went wrong on Byte Trek end. (Notify the Devs)')
  76. return redirect('un-replied-review')
  77. def get(self, request, *args, **kwargs):
  78. now = timezone.now()
  79. form = ReplyForm()
  80. date = now - timezone.timedelta(days=30)
  81. reviews = Review.objects.filter(reply=None, update_time__gte=date, location__organization='SC')\
  82. .exclude(comment=None, star_rating=5)\
  83. .order_by('update_time')
  84. page = request.GET.get('page', 1)
  85. paginator = Paginator(reviews, 10)
  86. try:
  87. reviews = paginator.page(page)
  88. except PageNotAnInteger:
  89. reviews = paginator.page(1)
  90. except EmptyPage:
  91. reviews = paginator.page(paginator.num_pages)
  92. context = {'reviews': reviews, 'form': form}
  93. return render(request, 'dashboard.html', context=context)
  94. class DeleteReview(LoginRequiredMixin, PermissionRequiredMixin, View):
  95. permission_required = 'is_admin'
  96. def get(self, requset, review_id, *args, **kwargs):
  97. review = Review.objects.filter(review_id=review_id).first()
  98. res = review.delete()
  99. return redirect('un-replied-review')
  100. class ReviewDetails(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
  101. permission_required = 'is_admin'
  102. model = Review
  103. template_name='review_details.html'
  104. context_object_name='review'
  105. class UnRepliedReviewListEntrust(LoginRequiredMixin, PermissionRequiredMixin, View):
  106. permission_required = 'is_admin'
  107. def post(self, request, *args, **kwargs):
  108. form = ReplyForm(self.request.POST)
  109. if form.is_valid():
  110. replied_text = form.cleaned_data.get('reply')
  111. review_id = self.request.POST['review_id']
  112. review = get_object_or_404(Review, pk=review_id)
  113. response = reply_review(review=review, replied_text=replied_text)
  114. if response.status_code == 200:
  115. review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
  116. review_reply.save()
  117. review.reply = review_reply
  118. review.save()
  119. messages.success(request, f'Your reply has been posted!')
  120. elif response.status_code == 404:
  121. review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
  122. review_reply.save()
  123. review.reply = review_reply
  124. review.save()
  125. messages.warning(request, f'User might remove this review. Reply has been saved in database!')
  126. elif response.status_code == 400:
  127. messages.error(request, f'The request was unacceptable, often due to missing a required parameter.')
  128. elif response.status_code == 401:
  129. messages.error(request, f'No valid access token has provided. Please authorize again')
  130. elif response.status_code == 402:
  131. messages.info(request, f'The parameters were valid but the request failed.')
  132. elif response.status_code == 403:
  133. messages.error(request, f'The access token doesn\'t have permissions to perform the request.failed.')
  134. elif response.status_code in [500, 502, 503, 504]:
  135. messages.info(request, f'Something went wrong on Google\'s end. (These are rare.)')
  136. elif response.status_code == 501:
  137. messages.info(request, f'This service is off/postpond on Google\'s end. (These are rare.)')
  138. else:
  139. messages.info(request, f'Something went wrong on Byte Trek end. (Notify the Devs)')
  140. return redirect('un-replied-review-entrust')
  141. def get(self, request, *args, **kwargs):
  142. now = timezone.now()
  143. form = ReplyForm()
  144. date = now - timezone.timedelta(days=30)
  145. reviews = Review.objects.filter(reply=None, update_time__gte=date, location__organization='ET')\
  146. .exclude(comment=None, star_rating=5)\
  147. .order_by('update_time')
  148. page = request.GET.get('page', 1)
  149. paginator = Paginator(reviews, 10)
  150. try:
  151. reviews = paginator.page(page)
  152. except PageNotAnInteger:
  153. reviews = paginator.page(1)
  154. except EmptyPage:
  155. reviews = paginator.page(paginator.num_pages)
  156. context = {'reviews': reviews, 'form': form}
  157. return render(request, 'dashboard.html', context=context)