Переглянути джерело

Add facebook review and negative review to weekly-summary email body

Mohidul Islam 4 роки тому
батько
коміт
2734fc3cf3

+ 73 - 21
analytics/templates/weekly_report.html

@@ -34,6 +34,37 @@
         margin: 5px
       }
 
+
+
+		.bordered, .n-bordered{
+			border: 1px solid black;
+			border-collapse: collapse;
+		}
+
+		.n-bordered{
+			border: none;
+		}
+
+		.bordered td, .n-bordered td{
+			border: 1px solid black;
+		}
+
+		.n-bordered tr:first-child td{
+			border-top: none;
+		}
+
+		.n-bordered tr:last-child td{
+			border-bottom: none;
+		}
+
+		.n-bordered tr td:first-child{
+			border-left: none;
+		}
+
+		.n-bordered tr td:last-child{
+			border-right: none;
+		}
+
     </style>
   </head>
   <body>
@@ -84,25 +115,24 @@
             {% endif %}
           </td>
       </tr>      
-      <!-- Facebook Reviews Summary -->
-
-<!--      <tr>-->
-<!--        <td>Facebook</td>-->
-<!--        <td>-->
-<!--          {% for r in google_ratings %}-->
-<!--            {% if r.star_rating < 3 %}-->
-<!--              <span style="color: red; font-weight: bold;">{{ r.star_rating }}* star: {{ r.total }}</span> </br>-->
-<!--            {% else %}-->
-<!--              <span>{{ r.star_rating }}* star: {{ r.total }}</span> </br>-->
-<!--            {% endif %}-->
-<!--          {% endfor %}-->
-<!--        </td>-->
-<!--        <td>-->
-<!--          {% for s_n in google_staffs %}-->
-<!--            {{ s_n }}, -->
-<!--          {% endfor %}-->
-<!--        </td>-->
-<!--      </tr>-->
+<!--       Facebook Reviews Summary-->
+
+      <tr>
+        <td>Facebook</td>
+        <td>
+          {% if facebook_ratings %}
+            {% for r in facebook_ratings %}
+              {% if r.recommendation_type == True %}
+                <span style="color: green; font-weight: green;">Positive: {{ r.total }}</span> </br>
+              {% else %}
+                <span style="color: red; font-weight: red;">Negative: {{ r.total }}</span> </br>
+              {% endif %}
+            {% endfor %}
+          {% else %}
+            <span style="color: red; font-weight: bold;">No Ratings!</span>
+          {% endif %}
+        </td>
+      </tr>
     </table>
 
     <h2 style="text-align:center; margin-top: 50px">All bad reviews that been posted this week.</h2>
@@ -117,7 +147,7 @@
         <td>Google</td>
         {% if google_bad_reviews.count > 0 %}
         <td style="width: 100%; padding: 0px">
-          <table border="1px"  style="border-collapse: collapse;">
+          <table class="n-bordered" border="1px"  style="border-collapse: collapse;">
             <tr style="background-color: rgb(179, 177, 177);">
 <!--              <td style="width: 20%;">Reviewer Name</td>-->
 <!--              <td style="width: 90%;">Comment</td>-->
@@ -149,7 +179,7 @@
         <td>Yelp</td>
         {% if yelp_bad_reviews.count > 0 %}
         <td style="width: 100%; padding: 0px">
-          <table border="1px"  style="border-collapse: collapse;">
+          <table class="n-bordered" border="1px"  style="border-collapse: collapse;">
 <!--            <tr style="background-color: rgb(179, 177, 177);">-->
 <!--&lt;!&ndash;              <td style="width: 20%;">Reviewer Name</td>&ndash;&gt;-->
 <!--              <td style="width: 90%;">Comment</td>-->
@@ -170,6 +200,28 @@
           </td>
         {% endif %}
       </tr>
+
+<!--      Facebook Review-->
+
+      <tr>
+        <td>Facebook</td>
+        {% if facebook_bad_reviews.count > 0 %}
+        <td style="width: 100%; padding: 0px">
+          <table class="n-bordered" border="1px"  style="border-collapse: collapse;">
+            {% for review in facebook_bad_reviews %}
+              <tr>
+                <td style="width: 90%;">{{ review.review_text }}</td>
+                <td style="width: 10%;">Not Recommended</td>
+              </tr>
+            {% endfor %}
+          </table>
+        </td>
+        {% else %}
+          <td>
+            <span style="color: green; font-weight: bold;">No bad reviews has been posted in Facebook!</span>
+          </td>
+        {% endif %}
+      </tr>
     </table>
     </div>
   </body>

+ 8 - 3
analytics/views.py

@@ -6,7 +6,8 @@ from django.contrib.auth.mixins import LoginRequiredMixin
 
 from gauth.models import Location
 from name_extractor.models import Staff
-from yelp.analytics import get_weekly_summary
+from yelp.analytics import get_yelp_weekly_summary
+from facebook_app.analytics import get_facebook_weekly_summary
 
 from .utils import (
     get_review_count_by_month,
@@ -49,16 +50,20 @@ def monthly_report(requests, location_id):
 
 def weekly_report(requests, location_id):
     g_reviews, g_ratings = weekly_reviews_summary(location_id=location_id)
-    y_reviews, y_ratings = get_weekly_summary(location_id=location_id)
+    y_reviews, y_ratings = get_yelp_weekly_summary(location_id=location_id)
+    f_reviews, f_ratings = get_facebook_weekly_summary(location_id=location_id)
 
     g_bad_reviews = g_reviews.filter(star_rating__lte=2)
     y_bad_reviews = y_reviews.filter(rating__lte=2)
+    f_bad_reviews = f_reviews.filter(recommendation_type=False)
 
     context = {
 
         'google_ratings': g_ratings,
         'google_bad_reviews': g_bad_reviews,
         'yelp_ratings': y_ratings,
-        'yelp_bad_reviews': y_bad_reviews
+        'yelp_bad_reviews': y_bad_reviews,
+        'facebook_ratings': f_ratings,
+        'facebook_bad_reviews': f_bad_reviews
     }
     return render(requests, 'weekly_report.html', context)

+ 2 - 2
facebook_app/admin.py

@@ -3,8 +3,8 @@ from .models import FacebookPage, FacebookReview
 
 
 class FacebookPageAdmin(admin.ModelAdmin):
-    fields = ('id', 'name', 'token')
-    list_display = ('id', 'name', 'token',)
+    fields = ('id', 'name', 'token', 'location')
+    list_display = ('id', 'name', 'location', 'token')
     readonly_fields = ('id', 'token')
     search_fields = ('name', 'id',)
 

+ 12 - 0
facebook_app/analytics.py

@@ -0,0 +1,12 @@
+from django.db.models import Count
+from django.utils import timezone
+from .models import FacebookReview
+
+
+def get_facebook_weekly_summary(location_id):
+    date = timezone.now() - timezone.timedelta(days=7)
+    reviews = FacebookReview.objects.filter(page__location_id=location_id, create_time__gte=date)
+    rating = reviews.values('recommendation_type')\
+        .annotate(total=Count('recommendation_type'))\
+        .order_by('-recommendation_type')
+    return reviews, rating

+ 20 - 0
facebook_app/migrations/0002_facebookpage_location.py

@@ -0,0 +1,20 @@
+# Generated by Django 3.0.4 on 2020-07-08 08:17
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('gauth', '0012_auto_20200512_1212'),
+        ('facebook_app', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='facebookpage',
+            name='location',
+            field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='gauth.Location'),
+        ),
+    ]

+ 3 - 0
facebook_app/models.py

@@ -1,10 +1,13 @@
 from django.db import models
 
+from gauth.models import Location
+
 
 class FacebookPage(models.Model):
     id = models.CharField(max_length=255, primary_key=True)
     name = models.CharField(max_length=500)
     token = models.CharField(max_length=255)
+    location = models.OneToOneField(Location, on_delete=models.CASCADE, null=True, blank=True)
 
     def __str__(self):
         return self.name.split('-')[-1]

+ 1 - 1
review_automation/settings/facebook_conf.py

@@ -1,3 +1,3 @@
-SHORT_LIVED_USER_TOKEN = 'EAAmiE8MkZARMBAMPDUquyOXzH68IASWzg8CMOZAj3wJ9IrNNouDgBRMeakKeI1OGyIvLyZAhYRaxCROeFBFEbz4qoqtwwHFVVq2v1WhMpq2cY4XOqx2VVb8LhxeqxBIjnwH9vsgWL4FIp1l0CReWjM9fFWnVMPiqMQnMHt1b5lAY9abwC6yvrPsNZCcEAWYATutUMduPu1mTY3URWP93f9oQJQ32BPA76ZCm9ZBkZBgtQXZA4UOwnZADUZCif2OWwC0twZD'
+SHORT_LIVED_USER_TOKEN = 'EAAmiE8MkZARMBAPSaknpadggYeS6Kz54Qki04eDr937ICKBJrjNZB7v3c1WDAdqsNB37eNZAZCF1QimsoM1eiZAy142VKNwUA0exvyp4yN9kzleZCP1FZC1kmKsHKzEH0IBlkueFsbaipCNLhses4dG7ffaaZBAoOESMrMnx2WmP0BN8IpVq9XDjvQ5RpzuarZBG8njbVW2gUBvh69RBbpZBucyhs1CINqNMkJNEhye5FBQnZBJdZBx2mdW2'
 APP_ID = '2711480552416531'
 APP_SECRET = 'c53b39227e3d3b5ffbff12aa8d6fc757'

+ 1 - 1
yelp/analytics.py

@@ -3,7 +3,7 @@ from django.utils import timezone
 from .models import YelpReview
 
 
-def get_weekly_summary(location_id):
+def get_yelp_weekly_summary(location_id):
     date = timezone.now() - timezone.timedelta(days=7)
     reviews = YelpReview.objects.filter(location__location_id=location_id, date_posted__gte=date)
     rating = reviews.values('rating').annotate(total=Count('rating')).order_by('-rating')