views.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 review.models import Review, Reply
  6. from review.forms import ReplyForm
  7. from gauth.models import Location
  8. from review.review_utils import sync_all_review
  9. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  10. class ReviewListByLocationView(View):
  11. def get(self, request, location_id, *args, **kwargs):
  12. reviews = Review.objects.filter(location_id=location_id).order_by('-update_time')
  13. locations = Location.objects.all()
  14. page = request.GET.get('page', 1)
  15. paginator = Paginator(reviews, 50)
  16. try:
  17. reviews = paginator.page(page)
  18. except PageNotAnInteger:
  19. reviews = paginator.page(1)
  20. except EmptyPage:
  21. reviews = paginator.page(paginator.num_pages)
  22. context = {'reviews': reviews, 'locations': locations}
  23. return render(request, 'review_list.html', context)
  24. class ReviewListView(View):
  25. def get(self, request, *args, **kwargs):
  26. reviews = Review.objects.all().order_by('-update_time')
  27. locations = Location.objects.all()
  28. page = request.GET.get('page', 1)
  29. paginator = Paginator(reviews, 50)
  30. try:
  31. reviews = paginator.page(page)
  32. except PageNotAnInteger:
  33. reviews = paginator.page(1)
  34. except EmptyPage:
  35. reviews = paginator.page(paginator.num_pages)
  36. context = {'reviews': reviews, 'locations': locations}
  37. return render(request, 'review_list.html', context)
  38. class UnRepliedReviewList(View):
  39. def post(self, request, *args, **kwargs):
  40. form = ReplyForm(self.request.POST)
  41. if form.is_valid():
  42. reply = form.cleaned_data.get('reply')
  43. review_id = self.request.POST['review_id']
  44. review = Review.objects.filter(pk=review_id).first()
  45. now = timezone.now()
  46. if review:
  47. review_reply = Reply(replied_text=reply, create_time=now)
  48. review_reply.save()
  49. review.reply = review_reply
  50. review.save()
  51. messages.success(request, f'Your reply has been posted!')
  52. return redirect('un-replied-review')
  53. def get(self, request, *args, **kwargs):
  54. now = timezone.now()
  55. form = ReplyForm()
  56. date = now - timezone.timedelta(days=30)
  57. reviews = Review.objects.filter(reply=None, update_time__gte=date).order_by('-update_time')
  58. return render(request, 'dashboard.html', {'reviews': reviews, 'form': form})
  59. class ReportView(View):
  60. def get(self, request, *args, **kwargs):
  61. locations = Location.objects.all()
  62. return render(request, 'report.html', {'location_report': locations})
  63. def sync_location(request, location_id):
  64. sync_all_review(location_id)
  65. return redirect('review-report')