Ver Fonte

Separate view added for entrust reviews

Mohidul Islam há 2 anos atrás
pai
commit
72112b06fd
4 ficheiros alterados com 70 adições e 9 exclusões
  1. 2 1
      dashboard/templates/base.html
  2. 2 1
      dashboard/urls.py
  3. 60 2
      dashboard/views.py
  4. 6 5
      nlu_job/views.py

+ 2 - 1
dashboard/templates/base.html

@@ -24,11 +24,12 @@
           {% if user.is_staff %}
           <div class="collapse navbar-collapse" id="navbarToggle">
             <div class="navbar-nav mr-auto">
-              <a class="nav-item nav-link" href="{% url 'review-list' %}">All Reviews</a>
+              <a class="nav-item nav-link" href="{% url 'un-replied-review-entrust' %}">EnTrust</a>
               <a class="nav-item nav-link" href="{% url 'facebook-reviews' %}">FaceBook</a>
             </div>
             <!-- Navbar Right Side -->
             <div class="navbar-nav">
+              <a class="nav-item nav-link" href="{% url 'review-list' %}">Review List</a>
                 <a class="nav-item nav-link" href="{% url 'analytics' %}">Analytics</a>
                 <a class="nav-item nav-link" href="{% url 'leader-board' 12345 %}">Leaderboard</a>
                 <a class="nav-item nav-link" href="{% url 'logout' %}">Logout</a>

+ 2 - 1
dashboard/urls.py

@@ -1,8 +1,9 @@
 from django.urls import path
-from .views import ReviewListByLocationView, UnRepliedReviewList, ReviewListView, DeleteReview, ReviewDetails
+from .views import ReviewListByLocationView, UnRepliedReviewList, ReviewListView, DeleteReview, ReviewDetails, UnRepliedReviewListEntrust
 
 urlpatterns = [
     path('', UnRepliedReviewList.as_view(), name='un-replied-review'),
+    path('entrust/', UnRepliedReviewListEntrust.as_view(), name='un-replied-review-entrust'),
     path('list/', ReviewListView.as_view(), name='review-list'),
     path('list/<location_id>/', ReviewListByLocationView.as_view(), name='review-list-by-location'),
     path('delete/<review_id>/', DeleteReview.as_view(), name='delete-review'),

+ 60 - 2
dashboard/views.py

@@ -90,7 +90,7 @@ class UnRepliedReviewList(LoginRequiredMixin, PermissionRequiredMixin, View):
         now = timezone.now()
         form = ReplyForm()
         date = now - timezone.timedelta(days=30)
-        reviews = Review.objects.filter(reply=None, update_time__gte=date)\
+        reviews = Review.objects.filter(reply=None, update_time__gte=date, location__organization='SC')\
             .exclude(comment=None, star_rating=5)\
             .order_by('update_time')
 
@@ -120,4 +120,62 @@ class ReviewDetails(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
     permission_required = 'is_admin'
     model = Review
     template_name='review_details.html'
-    context_object_name='review'
+    context_object_name='review'
+
+
+class UnRepliedReviewListEntrust(LoginRequiredMixin, PermissionRequiredMixin, View):
+    permission_required = 'is_admin'
+
+    def post(self, request, *args, **kwargs):
+        form = ReplyForm(self.request.POST)
+        if form.is_valid():
+            replied_text = form.cleaned_data.get('reply')
+        review_id = self.request.POST['review_id']
+        review = get_object_or_404(Review, pk=review_id)
+        response = reply_review(review=review, replied_text=replied_text)
+        if response.status_code == 200:
+            review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
+            review_reply.save()
+            review.reply = review_reply
+            review.save()
+            messages.success(request, f'Your reply has been posted!')
+        elif response.status_code == 404:
+            review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
+            review_reply.save()
+            review.reply = review_reply
+            review.save()
+            messages.warning(request, f'User might remove this review. Reply has been saved in database!')
+        elif response.status_code == 400:
+            messages.error(request, f'The request was unacceptable, often due to missing a required parameter.')
+        elif response.status_code == 401:
+            messages.error(request, f'No valid access token has provided. Please authorize again')
+        elif response.status_code == 402:
+            messages.info(request, f'The parameters were valid but the request failed.')
+        elif response.status_code == 403:
+            messages.error(request, f'The access token doesn\'t have permissions to perform the request.failed.')
+        elif response.status_code in [500, 502, 503, 504]:
+            messages.info(request, f'Something went wrong on Google\'s end. (These are rare.)')
+        elif response.status_code == 501:
+            messages.info(request, f'This service is off/postpond on Google\'s end. (These are rare.)')
+        else:
+            messages.info(request, f'Something went wrong on Byte Trek end. (Notify the Devs)')
+        return redirect('un-replied-review-entrust')
+
+    def get(self, request, *args, **kwargs):
+        now = timezone.now()
+        form = ReplyForm()
+        date = now - timezone.timedelta(days=30)
+        reviews = Review.objects.filter(reply=None, update_time__gte=date, location__organization='ET')\
+            .exclude(comment=None, star_rating=5)\
+            .order_by('update_time')
+
+        page = request.GET.get('page', 1)
+        paginator = Paginator(reviews, 10)
+        try:
+            reviews = paginator.page(page)
+        except PageNotAnInteger:
+            reviews = paginator.page(1)
+        except EmptyPage:
+            reviews = paginator.page(paginator.num_pages)
+        context = {'reviews': reviews, 'form': form}
+        return render(request, 'dashboard.html', context=context)

+ 6 - 5
nlu_job/views.py

@@ -17,6 +17,7 @@ from .nlu_utils import (
 @login_required
 def predict_report(request, review_id):
     review = Review.objects.get(review_id=review_id)
+    location_type = review.location.organization
     location_id = review.location_id
     replies = {}
     if review.star_rating == 5:
@@ -24,25 +25,25 @@ def predict_report(request, review_id):
         res = model_inference(text=text)
         intents = analyze_model_inference(res)
         for intent in intents.keys():
-            r = CustomReply.objects.filter(reply_category=intent)
+            r = CustomReply.objects.filter(reply_category=intent, organization=location_type)
             filtered_replies = filter_with_last_ten_reviews(location_id, r)
             replies[intent] = filtered_replies
 
     elif review.star_rating == 4:
         intents = {'four_star': 100}
-        cr = CustomReply.objects.filter(reply_star=4)
+        cr = CustomReply.objects.filter(reply_star=4, organization=location_type)
         filtered_replies = filter_with_last_ten_reviews(location_id, cr)
         replies = {'four_star': filtered_replies}
 
     elif review.star_rating == 3:
         intents = {'three_star': 100}
-        cr = CustomReply.objects.filter(reply_star=3)
+        cr = CustomReply.objects.filter(reply_star=3, organization=location_type)
         filtered_replies = filter_with_last_ten_reviews(location_id, cr)
         replies = {'three_star': filtered_replies}
 
     else:
         intents = {'negative': 100}
-        cr = CustomReply.objects.filter(reply_star__lte=2)
+        cr = CustomReply.objects.filter(reply_star__lte=2, organization=location_type)
         filtered_replies = filter_with_last_ten_reviews(location_id, cr)
         replies = {'negative': filtered_replies}
 
@@ -50,7 +51,7 @@ def predict_report(request, review_id):
     form = ReplyForm()
     date = now - timezone.timedelta(days=30)
     hours = now - timezone.timedelta(hours=6)
-    reviews = Review.objects.filter(reply=None, update_time__gte=date)\
+    reviews = Review.objects.filter(reply=None, update_time__gte=date, location__organization=location_type)\
         .exclude(comment=None, star_rating=5)\
         .exclude(star_rating__lte=3, update_time__gte=hours)\
         .order_by('update_time')