#!/usr/bin/env python3 """ Send Weekly Report via Email Generates and emails the weekly POTE summary report. Usage: python scripts/send_weekly_report.py --to user@example.com """ import argparse import logging import sys from pathlib import Path # Add project root to path sys.path.insert(0, str(Path(__file__).parent.parent)) from pote.db import get_session from pote.reporting.email_reporter import EmailReporter from pote.reporting.report_generator import ReportGenerator logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) logger = logging.getLogger(__name__) def main(): parser = argparse.ArgumentParser(description="Send weekly POTE report via email") parser.add_argument( "--to", required=True, help="Recipient email addresses (comma-separated)" ) parser.add_argument( "--test-smtp", action="store_true", help="Test SMTP connection before sending", ) parser.add_argument( "--save-to-file", help="Also save report to this file path", default=None, ) args = parser.parse_args() # Parse recipients to_emails = [email.strip() for email in args.to.split(",")] # Initialize email reporter email_reporter = EmailReporter() # Test SMTP connection if requested if args.test_smtp: logger.info("Testing SMTP connection...") if not email_reporter.test_connection(): logger.error("SMTP connection test failed. Check your SMTP settings in .env") sys.exit(1) logger.info("SMTP connection test successful!") # Generate report logger.info("Generating weekly report...") with get_session() as session: generator = ReportGenerator(session) report_data = generator.generate_weekly_summary() # Format as text and HTML text_body = generator.format_as_text(report_data, "weekly") html_body = generator.format_as_html(report_data, "weekly") # Save to file if requested if args.save_to_file: with open(args.save_to_file, "w") as f: f.write(text_body) logger.info(f"Report saved to {args.save_to_file}") # Send email subject = f"POTE Weekly Report - {report_data['period_start']} to {report_data['period_end']}" logger.info(f"Sending report to {', '.join(to_emails)}...") success = email_reporter.send_report( to_emails=to_emails, subject=subject, body_text=text_body, body_html=html_body, ) if success: logger.info("Report sent successfully!") # Print summary to stdout print("\n" + text_body + "\n") sys.exit(0) else: logger.error("Failed to send report. Check logs for details.") sys.exit(1) if __name__ == "__main__": main()