69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
import os
|
|
import sys
|
|
from datetime import date
|
|
from zoneinfo import ZoneInfo
|
|
|
|
# Add the project root to Python path
|
|
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
if project_root not in sys.path:
|
|
sys.path.insert(0, project_root)
|
|
|
|
from app_core.config.settings import AppSettings
|
|
from app_core.services.mailer_service import MailerService
|
|
|
|
def send_report_for_date(service, settings, report_date):
|
|
print(f"--- Processing date: {report_date} ---")
|
|
|
|
# Check if we should skip if already sent (the user said "we need to send", so I'll skip the check unless specified)
|
|
# if service.has_sent_for_date(str(report_date)):
|
|
# print(f"Already sent for {report_date}; skipping.")
|
|
# return
|
|
|
|
df = service.fetch_daily_rows(report_date)
|
|
if df.empty:
|
|
print(f"No data for {report_date}. Skipping.")
|
|
return
|
|
|
|
row = df.iloc[0].to_dict()
|
|
html = service.build_email_html(row, df)
|
|
|
|
recipients_env = settings.report_recipients or os.getenv("REPORT_RECIPIENTS")
|
|
if not recipients_env:
|
|
print("Error: REPORT_RECIPIENTS env var is empty.")
|
|
return
|
|
|
|
recipients = [r.strip() for r in recipients_env.split(',') if r.strip()]
|
|
subject = f"Daily Digest - {report_date}"
|
|
|
|
print(f"Sending email to: {recipients}")
|
|
ok, msg = service.send_email(recipients, subject=subject, html=html)
|
|
|
|
service.log_email(
|
|
recipients=recipients,
|
|
subject=subject,
|
|
date_for=str(report_date),
|
|
status="sent" if ok else "failed",
|
|
error=None if ok else msg
|
|
)
|
|
|
|
if ok:
|
|
print(f"Successfully sent report for {report_date}")
|
|
else:
|
|
print(f"Failed to send report for {report_date}: {msg}")
|
|
|
|
def main():
|
|
settings = AppSettings()
|
|
service = MailerService(settings)
|
|
|
|
dates_to_send = [
|
|
date(2026, 3, 21),
|
|
date(2026, 3, 22),
|
|
]
|
|
|
|
for d in dates_to_send:
|
|
send_report_for_date(service, settings, d)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|