From b6a4567ff80a501d369a5dc450c281439f9d4f1f Mon Sep 17 00:00:00 2001 From: rizwanisready Date: Mon, 3 Jun 2024 21:06:33 +0530 Subject: [PATCH] report and share api 2 --- manage_events/report.py | 71 ++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/manage_events/report.py b/manage_events/report.py index 19619f5..c485293 100644 --- a/manage_events/report.py +++ b/manage_events/report.py @@ -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())