Merge pull request #34 from WDI-Ideas/development
report and share api 2
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
from django.core.mail import EmailMessage
|
||||
from django.db.models import Count, Q
|
||||
from django.utils import timezone
|
||||
from datetime import timedelta
|
||||
@@ -15,6 +14,7 @@ from reportlab.platypus import (
|
||||
Paragraph,
|
||||
Spacer,
|
||||
PageBreak,
|
||||
Image,
|
||||
)
|
||||
from io import BytesIO
|
||||
from django.conf import settings
|
||||
@@ -22,8 +22,8 @@ from collections import defaultdict
|
||||
from reportlab.graphics import renderPDF
|
||||
from django.contrib.auth import get_user_model
|
||||
from accounts.models import IAmPrincipalType
|
||||
from goodtimes.services import EmailService
|
||||
from manage_events.models import Event, EventInteractionType, EventShare, EventView
|
||||
import os
|
||||
|
||||
|
||||
User = get_user_model()
|
||||
@@ -38,6 +38,7 @@ def generate_filename(email, date):
|
||||
filename = f"{username}_{month_name}_report.pdf"
|
||||
return filename
|
||||
|
||||
|
||||
def event_managers():
|
||||
principal_type = IAmPrincipalType.objects.filter(name="event_manager").first()
|
||||
return User.objects.filter(principal_type=principal_type, is_active=True)
|
||||
@@ -142,7 +143,7 @@ def generate_event_report_pdf_three(user, report_data):
|
||||
organiser_name = Paragraph(
|
||||
f"Name of the Organiser - {user.get_full_name()}", styles["Title"]
|
||||
)
|
||||
contact_name = Paragraph(f"Contact Name - {user.get_full_name()}", styles["Title"])
|
||||
contact_name = Paragraph(f"Contact Name - {user.email}", styles["Title"])
|
||||
|
||||
elements.extend(
|
||||
[
|
||||
@@ -153,10 +154,23 @@ def generate_event_report_pdf_three(user, report_data):
|
||||
organiser_name,
|
||||
Spacer(1, 12),
|
||||
contact_name,
|
||||
PageBreak(),
|
||||
Spacer(1, 72), # Add space before the logo
|
||||
]
|
||||
)
|
||||
|
||||
# Insert company logo
|
||||
logo_path = os.path.join("static", "images", "icon.png") # Path to the logo
|
||||
logo = Image(logo_path)
|
||||
logo.drawWidth = 300 # Adjust the width as needed
|
||||
logo.drawHeight = 150 # Adjust the height as needed
|
||||
logo.hAlign = "CENTER" # Center the logo
|
||||
|
||||
elements.append(logo)
|
||||
elements.append(Spacer(1, 12)) # Add space after the logo
|
||||
|
||||
# Page break after header and logo
|
||||
elements.append(PageBreak())
|
||||
|
||||
# Summary Section
|
||||
summary_text = (
|
||||
f"Number of Events added in {start_date.strftime('%B %Y')} - {len(report_data)}"
|
||||
@@ -194,38 +208,37 @@ def generate_event_report_pdf_three(user, report_data):
|
||||
|
||||
# Traffic Details Section
|
||||
traffic_header = "Traffic Details for profile - Event Organisers London Ltd."
|
||||
elements.append(Paragraph(traffic_header, styles["Heading2"]))
|
||||
elements.append(Paragraph(traffic_header, styles["Title"]))
|
||||
elements.append(Spacer(1, 12))
|
||||
|
||||
views_count = sum(event["views_count"] for event in report_data)
|
||||
favorites_count = sum(event["favorites_count"] for event in report_data)
|
||||
social_media_shares = sum(event["social_media_shares"] for event in report_data)
|
||||
|
||||
elements.append(Paragraph(f"Number of Event Views - {views_count}", custom_style))
|
||||
elements.append(Spacer(1, 12))
|
||||
elements.append(
|
||||
Paragraph(f"Number of Event Views - {views_count}", styles["Normal"])
|
||||
Paragraph(f"Number of Event Favorites - {favorites_count}", custom_style)
|
||||
)
|
||||
elements.append(Spacer(1, 12))
|
||||
elements.append(
|
||||
Paragraph(f"Number of Event Favorites - {favorites_count}", styles["Normal"])
|
||||
)
|
||||
elements.append(Spacer(1, 12))
|
||||
elements.append(
|
||||
Paragraph(f"Social Media Shares - {social_media_shares}", styles["Normal"])
|
||||
Paragraph(f"Social Media Shares - {social_media_shares}", custom_style)
|
||||
)
|
||||
# elements.append(PageBreak())
|
||||
elements.append(Spacer(1, 60))
|
||||
|
||||
# Top 5 Locations and Top 5 Viewed Events
|
||||
all_locations = defaultdict(int)
|
||||
print("all_locations: ", all_locations)
|
||||
for event in report_data:
|
||||
for location, count in event["locations"].items():
|
||||
all_locations[location] += count
|
||||
|
||||
# top 5 events by location
|
||||
top_locations = sorted(all_locations.items(), key=lambda x: x[1], reverse=True)[:5]
|
||||
print("top_locations: ", top_locations)
|
||||
top_events = sorted(report_data, key=lambda x: x["views_count"], reverse=True)[:5]
|
||||
print("top_events: ", top_events)
|
||||
|
||||
# top 5 events overall by views
|
||||
top_events_by_views = sorted(
|
||||
report_data, key=lambda x: x["views_count"], reverse=True
|
||||
)[:5]
|
||||
|
||||
data = [
|
||||
["Top 5 Locations Viewed From", "Top 5 Viewed Events"],
|
||||
@@ -233,7 +246,9 @@ def generate_event_report_pdf_three(user, report_data):
|
||||
|
||||
for i in range(5):
|
||||
location = top_locations[i][0] if i < len(top_locations) else ""
|
||||
event = top_events[i]["event_name"] if i < len(top_events) else ""
|
||||
event = (
|
||||
top_events_by_views[i]["event_name"] if i < len(top_events_by_views) else ""
|
||||
)
|
||||
data.append([location, event])
|
||||
|
||||
table = Table(data, colWidths=[200, 200])
|
||||
@@ -255,7 +270,9 @@ def generate_event_report_pdf_three(user, report_data):
|
||||
|
||||
# Detailed Review of Each Event
|
||||
for event in report_data:
|
||||
elements.append(Paragraph(f"Event Name - {event['event_name']}", styles['Heading1']))
|
||||
elements.append(
|
||||
Paragraph(f"Event Name - {event['event_name']}", styles["Heading1"])
|
||||
)
|
||||
elements.append(Spacer(1, 12))
|
||||
elements.append(Paragraph(f"Event Type - {event['event_type']}", custom_style))
|
||||
elements.append(Paragraph(f"Event Date - {event['event_date']}", custom_style))
|
||||
@@ -275,12 +292,12 @@ def generate_event_report_pdf_three(user, report_data):
|
||||
elements.append(Paragraph(reviews, custom_style))
|
||||
elements.append(Spacer(1, 12))
|
||||
|
||||
location_details = []
|
||||
for location, count in event["locations"].items():
|
||||
location_details.append(f"{location}: {count}")
|
||||
# location_details = []
|
||||
# for location, count in event["locations"].items():
|
||||
# location_details.append(f"{location}: {count}")
|
||||
|
||||
elements.append(Paragraph("Event viewed from:", custom_style))
|
||||
elements.append(Paragraph(", ".join(location_details), custom_style))
|
||||
# elements.append(Paragraph("Event viewed from:", custom_style))
|
||||
# elements.append(Paragraph(", ".join(location_details), custom_style))
|
||||
# elements.append(PageBreak())
|
||||
elements.append(Spacer(1, 48))
|
||||
|
||||
@@ -293,12 +310,14 @@ def generate_event_report_pdf_three(user, report_data):
|
||||
]
|
||||
pie_labels = ["Views", "Shares", "Favorites", "Interested", "Going"]
|
||||
|
||||
drawing = Drawing(200, 100)
|
||||
drawing = Drawing(300, 200)
|
||||
pie = Pie()
|
||||
pie.data = pie_data
|
||||
pie.labels = pie_labels
|
||||
pie.width = 100
|
||||
pie.height = 100
|
||||
pie.width = 150
|
||||
pie.height = 150
|
||||
pie.x = 75
|
||||
pie.y = 25
|
||||
drawing.add(pie)
|
||||
elements.append(drawing)
|
||||
elements.append(PageBreak())
|
||||
|
||||
Reference in New Issue
Block a user