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 .nlu_utils import model_inference, analyze_inference, filter_with_last_ten_reviews 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)