report and share api 2

This commit is contained in:
rizwanisready
2024-06-03 21:06:33 +05:30
parent d09ff0f973
commit b6a4567ff8

View File

@@ -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())