views.py 4.7 KB

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