black shift
This commit is contained in:
@@ -12,13 +12,13 @@ def render_email_template(
|
||||
) -> str:
|
||||
"""
|
||||
Render the HTML email template with the provided data.
|
||||
|
||||
|
||||
Args:
|
||||
headers: List of column headers for the table
|
||||
rows: List of data rows for the table
|
||||
balance_error: Flag indicating if there's a balance discrepancy
|
||||
bank_balance: Current bank balance formatted as string
|
||||
|
||||
|
||||
Returns:
|
||||
Rendered HTML template as string
|
||||
"""
|
||||
@@ -26,7 +26,7 @@ def render_email_template(
|
||||
# Look for template in ServiceDepends directory
|
||||
env = Environment(loader=FileSystemLoader("/"))
|
||||
template = env.get_template("template_accounts.html")
|
||||
|
||||
|
||||
return template.render(
|
||||
headers=headers,
|
||||
rows=rows,
|
||||
@@ -35,32 +35,34 @@ def render_email_template(
|
||||
today=str(arrow.now().date()),
|
||||
)
|
||||
except Exception as e:
|
||||
print(f'Template rendering failed: {e}')
|
||||
print(f"Template rendering failed: {e}")
|
||||
raise
|
||||
|
||||
|
||||
def send_email_to_given_address(send_to: str, html_template: str, count_of_records: int) -> bool:
|
||||
def send_email_to_given_address(
|
||||
send_to: str, html_template: str, count_of_records: int
|
||||
) -> bool:
|
||||
"""
|
||||
Send email with the rendered HTML template to the specified address.
|
||||
|
||||
|
||||
Args:
|
||||
send_to: Email address of the recipient
|
||||
html_template: Rendered HTML template content
|
||||
|
||||
|
||||
Returns:
|
||||
Boolean indicating if the email was sent successfully
|
||||
"""
|
||||
today = arrow.now()
|
||||
subject = f"{str(today.date())} Gunes Apt. Cari Durum Kayıt Giriş Raporu"
|
||||
|
||||
|
||||
# Create email parameters using EmailSendModel
|
||||
email_params = EmailSendModel(
|
||||
subject=subject + f" ({count_of_records} kayıt)",
|
||||
html=html_template,
|
||||
receivers=[send_to],
|
||||
text=f"Gunes Apt. Cari Durum Kayıt Giriş Raporu - {today.date()}"
|
||||
text=f"Gunes Apt. Cari Durum Kayıt Giriş Raporu - {today.date()}",
|
||||
)
|
||||
|
||||
|
||||
try:
|
||||
# Use the context manager to handle connection errors
|
||||
with EmailService.new_session() as email_session:
|
||||
@@ -69,17 +71,17 @@ def send_email_to_given_address(send_to: str, html_template: str, count_of_recor
|
||||
print(f"Email successfully sent to: {send_to}")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f'Failed to send email: {e}')
|
||||
print(f"Failed to send email: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def process_unsent_email_records() -> bool:
|
||||
"""
|
||||
Process account records that haven't been emailed yet.
|
||||
|
||||
|
||||
Finds records with is_email_send=False, formats them into an email,
|
||||
sends the email, and updates the records as sent if successful.
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if email was sent successfully, False otherwise
|
||||
"""
|
||||
@@ -87,42 +89,55 @@ def process_unsent_email_records() -> bool:
|
||||
# Use the context manager to handle database connections
|
||||
with AccountRecords.new_session() as db_session:
|
||||
# Query un-sent mail rows - with limit for display only
|
||||
account_records_query = AccountRecords.filter_all(
|
||||
AccountRecords.is_email_send == False,
|
||||
db=db_session,
|
||||
).query.order_by(AccountRecords.bank_date.asc()).limit(20)
|
||||
|
||||
account_records_query = (
|
||||
AccountRecords.filter_all(
|
||||
AccountRecords.is_email_send == False,
|
||||
db=db_session,
|
||||
)
|
||||
.query.order_by(AccountRecords.bank_date.asc())
|
||||
.limit(20)
|
||||
)
|
||||
|
||||
account_records: List[AccountRecords] = account_records_query.all()
|
||||
if not account_records:
|
||||
print("No unsent email records found")
|
||||
return False
|
||||
|
||||
|
||||
# Get the IDs of the records we're processing
|
||||
record_ids = [record.id for record in account_records]
|
||||
print(f"Found {len(account_records)} unsent email records")
|
||||
|
||||
|
||||
# Format rows for the email template
|
||||
list_of_rows = []
|
||||
for record in account_records:
|
||||
list_of_rows.append([
|
||||
record.bank_date.strftime("%d/%m/%Y %H:%M"),
|
||||
record.process_comment,
|
||||
f"{record.currency_value:,.2f}",
|
||||
f"{record.bank_balance:,.2f}"
|
||||
])
|
||||
list_of_rows.append(
|
||||
[
|
||||
record.bank_date.strftime("%d/%m/%Y %H:%M"),
|
||||
record.process_comment,
|
||||
f"{record.currency_value:,.2f}",
|
||||
f"{record.bank_balance:,.2f}",
|
||||
]
|
||||
)
|
||||
|
||||
# Reverse list by date
|
||||
list_of_rows = list_of_rows[::-1]
|
||||
|
||||
# Get the most recent bank balance
|
||||
last_bank_balance = sorted(account_records, key=lambda x: x.bank_date, reverse=True)[0].bank_balance
|
||||
|
||||
last_bank_balance = sorted(
|
||||
account_records, key=lambda x: x.bank_date, reverse=True
|
||||
)[0].bank_balance
|
||||
|
||||
# Define headers for the table
|
||||
headers = ["Ulaştığı Tarih", "Banka Transaksiyonu Ek Bilgi", "Aktarım Değeri", "Banka Bakiyesi"]
|
||||
|
||||
headers = [
|
||||
"Ulaştığı Tarih",
|
||||
"Banka Transaksiyonu Ek Bilgi",
|
||||
"Aktarım Değeri",
|
||||
"Banka Bakiyesi",
|
||||
]
|
||||
|
||||
# Recipient email address
|
||||
send_to = "karatay@mehmetkaratay.com.tr"
|
||||
|
||||
|
||||
# Render email template
|
||||
html_template = render_email_template(
|
||||
headers=headers,
|
||||
@@ -130,32 +145,35 @@ def process_unsent_email_records() -> bool:
|
||||
balance_error=False,
|
||||
bank_balance=f"{last_bank_balance:,.2f}",
|
||||
)
|
||||
|
||||
|
||||
# Send the email
|
||||
if send_email_to_given_address(send_to=send_to, html_template=html_template, count_of_records=len(list_of_rows)):
|
||||
if send_email_to_given_address(
|
||||
send_to=send_to,
|
||||
html_template=html_template,
|
||||
count_of_records=len(list_of_rows),
|
||||
):
|
||||
# Create a new query without limit for updating
|
||||
update_query = AccountRecords.filter_all(
|
||||
AccountRecords.id.in_(record_ids),
|
||||
db=db_session
|
||||
AccountRecords.id.in_(record_ids), db=db_session
|
||||
).query
|
||||
|
||||
|
||||
# Update records as sent
|
||||
update_query.update({"is_email_send": True}, synchronize_session=False)
|
||||
AccountRecords.save(db_session)
|
||||
print(f"Successfully marked {len(account_records)} records as sent")
|
||||
return True
|
||||
|
||||
|
||||
print("Email sending failed, records not updated")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f'Error processing unsent email records: {e}')
|
||||
print(f"Error processing unsent email records: {e}")
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Starting Email Sender Service")
|
||||
|
||||
|
||||
while True:
|
||||
try:
|
||||
result = process_unsent_email_records()
|
||||
@@ -165,7 +183,7 @@ if __name__ == "__main__":
|
||||
print("No emails sent in this iteration")
|
||||
except Exception as e:
|
||||
print(f"Unexpected error in main loop: {e}")
|
||||
|
||||
|
||||
# Sleep for 60 seconds before next check
|
||||
print("Sleeping for 60 seconds")
|
||||
time.sleep(60)
|
||||
|
||||
Reference in New Issue
Block a user