from django.shortcuts import render from django.utils import timezone from django.shortcuts import redirect from review.forms import ReplyForm from review.models import Review, CustomReply from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib.auth.decorators import login_required from .nlu_utils import ( model_inference, analyze_inference, filter_with_last_ten_reviews ) @login_required def predict_report(request, review_id): review = Review.objects.filter(review_id=review_id).first() if review is None: return redirect('un-replied-review') location_id = review.location.location_id text = review.comment.lower() res = model_inference(text=text) intents = analyze_inference(res) now = timezone.now() form = ReplyForm() date = now - timezone.timedelta(days=30) reviews = Review.objects.filter(reply=None, update_time__gte=date)\ .exclude(comment=None, star_rating=5).order_by('update_time') page = request.GET.get('page', 1) paginator = Paginator(reviews, 15) try: reviews = paginator.page(page) except PageNotAnInteger: reviews = paginator.page(1) except EmptyPage: reviews = paginator.page(paginator.num_pages) if review.star_rating == 5: replies = {} for intent in intents.keys(): r = CustomReply.objects.filter(reply_category=intent) filtered_replies = filter_with_last_ten_reviews(location_id, r) replies[intent] = filtered_replies # ================================================================================================================================ # This is for temporary use, It will be remove in future release. # This part of code block is used for show all reviews as intent classifier make mistake sometime. replies2 = {} rep_cls = {'staff', 'facility', 'kids', 'quick', 'general_review', 'open_24', 'continuous_visit'}.difference(set(intents.keys())) for c in rep_cls: r = CustomReply.objects.filter(reply_category=c) filtered_replies = filter_with_last_ten_reviews(location_id, r) replies2[c] = filtered_replies # End of the temporary code block # ================================================================================================================================ else: cr = CustomReply.objects.values('reply_category').distinct() cr_li = {c_r['reply_category'] for c_r in cr} rep_cls = cr_li.difference({'staff', 'facility', 'kids', 'quick', 'general_review', 'open_24', 'continuous_visit', 'no_comment'}) replies = {} replies2 = None for c in rep_cls: r = CustomReply.objects.filter(reply_category=c) filtered_replies = filter_with_last_ten_reviews(location_id, r) replies[c] = filtered_replies context = { 'reviews': reviews, 'form': form, 'intents': intents, 'replies': replies, 'replies2': replies2 # This context is associate with the temporary code that mentioned above. } return render(request, 'dashboard.html', context)