views.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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 sync_all_review, reply_review
  10. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  11. from django.contrib.auth.mixins import LoginRequiredMixin
  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, View):
  41. def post(self, request, *args, **kwargs):
  42. form = ReplyForm(self.request.POST)
  43. if form.is_valid():
  44. replied_text = form.cleaned_data.get('reply')
  45. review_id = self.request.POST['review_id']
  46. review = get_object_or_404(Review, pk=review_id)
  47. response = reply_review(review=review, replied_text=replied_text)
  48. if response.status_code == 200:
  49. review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
  50. review_reply.save()
  51. review.reply = review_reply
  52. review.save()
  53. messages.success(request, f'Your reply has been posted!')
  54. elif response.status_code == 404:
  55. review_reply = Reply(replied_text=reply, create_time=timezone.now())
  56. review_reply.save()
  57. review.reply = review_reply
  58. review.save()
  59. messages.warning(request, f'User might remove this review. Reply has been saved in database!')
  60. elif response.status_code == 400:
  61. messages.error(request, f'The request was unacceptable, often due to missing a required parameter.')
  62. elif response.status_code == 401:
  63. messages.error(request, f'No valid access token has provided. Please authorize again')
  64. elif response.status_code == 402:
  65. messages.info(request, f'The parameters were valid but the request failed.')
  66. elif response.status_code == 403:
  67. messages.error(request, f'The access token doesn\'t have permissions to perform the request.failed.')
  68. elif response.status_code in [500, 502, 503, 504]:
  69. messages.info(request, f'Something went wrong on Google\'s end. (These are rare.)')
  70. elif response.status_code == 501:
  71. messages.info(request, f'This sevice is off/postpond on Google\'s end. (These are rare.)')
  72. else:
  73. messages.info(request, f'Something went wrong on Byte Trek end. (Notify the Devs)')
  74. return redirect('un-replied-review')
  75. def get(self, request, *args, **kwargs):
  76. now = timezone.now()
  77. form = ReplyForm()
  78. date = now - timezone.timedelta(days=30)
  79. reviews = Review.objects.filter(reply=None, update_time__gte=date)\
  80. .exclude(comment=None, star_rating=5).order_by('update_time')
  81. page = request.GET.get('page', 1)
  82. paginator = Paginator(reviews, 15)
  83. try:
  84. reviews = paginator.page(page)
  85. except PageNotAnInteger:
  86. reviews = paginator.page(1)
  87. except EmptyPage:
  88. reviews = paginator.page(paginator.num_pages)
  89. context = {'reviews': reviews, 'form': form}
  90. return render(request, 'dashboard.html', context=context)
  91. class ReportView(LoginRequiredMixin, View):
  92. def get(self, request, *args, **kwargs):
  93. locations = Location.objects.all()
  94. return render(request, 'report.html', {'location_report': locations})
  95. def sync_location(request, location_id):
  96. sync_all_review(location_id)
  97. return redirect('review-report')