fix: report isssue and custom command to generate individual marchant report
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
from django.core.mail import EmailMessage
|
||||
from django.conf import settings
|
||||
from django.core.management.base import BaseCommand
|
||||
from datetime import datetime, timedelta
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from django.utils.timezone import now
|
||||
from django.contrib.auth import get_user_model
|
||||
import calendar
|
||||
|
||||
from manage_events.report import generate_event_report, generate_event_report_pdf_three
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Getting event reports of specific event managers'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument('month', type=int, help='Month number (1-12)')
|
||||
parser.add_argument('email', type=str, help='User email address')
|
||||
parser.add_argument('mail_send_on', type=str, help='Email to send the report')
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
month = kwargs['month']
|
||||
email = kwargs['email']
|
||||
mail_send_on = kwargs['mail_send_on']
|
||||
|
||||
# Validate the month
|
||||
if month < 1 or month > 12:
|
||||
self.stdout.write(self.style.ERROR("Invalid month. Must be between 1 and 12."))
|
||||
return
|
||||
|
||||
User = get_user_model()
|
||||
try:
|
||||
user = User.objects.get(email=email)
|
||||
except User.DoesNotExist:
|
||||
self.stdout.write(self.style.ERROR(f"User with email {email} does not exist."))
|
||||
return
|
||||
|
||||
# Calculate start and end dates of the month
|
||||
year = now().year # Assuming the current year
|
||||
start_date = datetime(year, month, 1)
|
||||
last_day = calendar.monthrange(year, month)[1]
|
||||
end_date = datetime(year, month, last_day)
|
||||
|
||||
report_data = generate_event_report(user.id, start_date, end_date)
|
||||
if report_data:
|
||||
pdf_data, filename = generate_event_report_pdf_three(user, report_data, start_date)
|
||||
self.send_email_with_attachment(mail_send_on, pdf_data, filename)
|
||||
|
||||
def send_email_with_attachment(self, email, pdf_data, filename):
|
||||
try:
|
||||
email_message = EmailMessage(
|
||||
subject="Monthly Event Report",
|
||||
body="Please find the attached report for the last month.",
|
||||
to=[email],
|
||||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||||
)
|
||||
email_message.attach(filename, pdf_data, "application/pdf")
|
||||
email_message.send()
|
||||
self.stdout.write(self.style.SUCCESS(f"Email successfully sent to {email} with attachment {filename}."))
|
||||
except Exception as e:
|
||||
self.stdout.write(self.style.ERROR(f"Failed to send email to {email}. Error: {str(e)}"))
|
||||
@@ -17,7 +17,7 @@ class Command(BaseCommand):
|
||||
users = event_managers()
|
||||
|
||||
for user in users:
|
||||
report_data = generate_event_report(user.id)
|
||||
report_data = generate_event_report(user.id, start_date, end_date)
|
||||
if report_data:
|
||||
pdf_data, filename = generate_event_report_pdf_three(user, report_data)
|
||||
self.send_email_with_attachment(user.email, pdf_data, filename)
|
||||
|
||||
@@ -52,8 +52,8 @@ def get_previous_month_date_range():
|
||||
return first_day_of_previous_month, last_day_of_previous_month
|
||||
|
||||
|
||||
def generate_event_report(user_id):
|
||||
start_date, end_date = get_previous_month_date_range()
|
||||
def generate_event_report(user_id, start_date, end_date):
|
||||
# start_date, end_date = get_previous_month_date_range()
|
||||
user = User.objects.get(id=user_id)
|
||||
|
||||
# events = Event.objects.filter(
|
||||
@@ -167,8 +167,8 @@ def generate_event_report(user_id):
|
||||
return report_data
|
||||
|
||||
|
||||
def generate_event_report_pdf_three(user, report_data):
|
||||
start_date, _ = get_previous_month_date_range()
|
||||
def generate_event_report_pdf_three(user, report_data, start_date):
|
||||
# start_date, _ = get_previous_month_date_range()
|
||||
filename = generate_filename(user.email, start_date)
|
||||
|
||||
buffer = BytesIO()
|
||||
|
||||
Reference in New Issue
Block a user