views.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from django.utils import timezone
  2. from django.shortcuts import render, redirect
  3. from django.contrib import messages
  4. from django.views.generic import View
  5. from django.shortcuts import get_object_or_404
  6. from review.models import Review, Reply
  7. from review.forms import ReplyForm
  8. from gauth.models import Location
  9. from review.review_utils import reply_review
  10. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  11. from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
  12. class ReviewListByLocationView(LoginRequiredMixin, View):
  13. def get(self, request, location_id, *args, **kwargs):
  14. reviews = Review.objects.filter(location_id=location_id).order_by('-update_time')
  15. locations = Location.objects.all()
  16. page = request.GET.get('page', 1)
  17. paginator = Paginator(reviews, 50)
  18. try:
  19. reviews = paginator.page(page)
  20. except PageNotAnInteger:
  21. reviews = paginator.page(1)
  22. except EmptyPage:
  23. reviews = paginator.page(paginator.num_pages)
  24. context = {'reviews': reviews, 'locations': locations}
  25. return render(request, 'review_list.html', context)
  26. class ReviewListView(LoginRequiredMixin, View):
  27. def get(self, request, *args, **kwargs):
  28. reviews = Review.objects.all().order_by('-update_time')
  29. locations = Location.objects.all()
  30. page = request.GET.get('page', 1)
  31. paginator = Paginator(reviews, 50)
  32. try:
  33. reviews = paginator.page(page)
  34. except PageNotAnInteger:
  35. reviews = paginator.page(1)
  36. except EmptyPage:
  37. reviews = paginator.page(paginator.num_pages)
  38. context = {'reviews': reviews, 'locations': locations}
  39. return render(request, 'review_list.html', context)
  40. class UnRepliedReviewList(LoginRequiredMixin, PermissionRequiredMixin, View):
  41. permission_required = 'is_admin'
  42. def post(self, request, *args, **kwargs):
  43. form = ReplyForm(self.request.POST)
  44. if form.is_valid():
  45. replied_text = form.cleaned_data.get('reply')
  46. review_id = self.request.POST['review_id']
  47. review = get_object_or_404(Review, pk=review_id)
  48. response = reply_review(review=review, replied_text=replied_text)
  49. if response.status_code == 200:
  50. review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
  51. review_reply.save()
  52. review.reply = review_reply
  53. review.save()
  54. messages.success(request, f'Your reply has been posted!')
  55. elif response.status_code == 404:
  56. review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
  57. review_reply.save()
  58. review.reply = review_reply
  59. review.save()
  60. messages.warning(request, f'User might remove this review. Reply has been saved in database!')
  61. elif response.status_code == 400:
  62. messages.error(request, f'The request was unacceptable, often due to missing a required parameter.')
  63. elif response.status_code == 401:
  64. messages.error(request, f'No valid access token has provided. Please authorize again')
  65. elif response.status_code == 402:
  66. messages.info(request, f'The parameters were valid but the request failed.')
  67. elif response.status_code == 403:
  68. messages.error(request, f'The access token doesn\'t have permissions to perform the request.failed.')
  69. elif response.status_code in [500, 502, 503, 504]:
  70. messages.info(request, f'Something went wrong on Google\'s end. (These are rare.)')
  71. elif response.status_code == 501:
  72. messages.info(request, f'This service is off/postpond on Google\'s end. (These are rare.)')
  73. else:
  74. messages.info(request, f'Something went wrong on Byte Trek end. (Notify the Devs)')
  75. return redirect('un-replied-review')
  76. def get(self, request, *args, **kwargs):
  77. now = timezone.now()
  78. form = ReplyForm()
  79. date = now - timezone.timedelta(days=30)
  80. reviews = Review.objects.filter(reply=None, update_time__gte=date)\
  81. .exclude(comment=None, star_rating=5)\
  82. .order_by('update_time')
  83. page = request.GET.get('page', 1)
  84. paginator = Paginator(reviews, 10)
  85. try:
  86. reviews = paginator.page(page)
  87. except PageNotAnInteger:
  88. reviews = paginator.page(1)
  89. except EmptyPage:
  90. reviews = paginator.page(paginator.num_pages)
  91. context = {'reviews': reviews, 'form': form}
  92. return render(request, 'dashboard.html', context=context)