92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
import time
|
||
import arrow
|
||
import os
|
||
|
||
from Services.MongoService.provider import MongoProvider
|
||
from Configs.mongo import MongoConfig
|
||
from jinja2 import Environment, FileSystemLoader
|
||
from Services.EmailService.provider import send_email
|
||
|
||
|
||
mongo_prefix = "CollectedData"
|
||
send_to = "karatay@mehmetkaratay.com.tr"
|
||
delimiter = "|"
|
||
|
||
|
||
def check_any_written_stage_in_mongo_database(mongo_provider) -> list:
|
||
return mongo_provider.find_many(filter_query={"stage": "written", "send": None})
|
||
|
||
|
||
def render_email_template(
|
||
headers: list, rows: list, balance_error: bool, bank_balance: float
|
||
):
|
||
template_dir = os.path.join(os.path.dirname(__file__), "templates")
|
||
# Load templates from the directory
|
||
env = Environment(loader=FileSystemLoader(template_dir))
|
||
# Load the specific template file
|
||
template = env.get_template("template_accounts.html")
|
||
# Render template with variables
|
||
return template.render(
|
||
headers=headers,
|
||
rows=rows,
|
||
bank_balance=f"{bank_balance:.4f}",
|
||
balance_error=balance_error,
|
||
today=str(arrow.now().date()),
|
||
)
|
||
|
||
|
||
def send_email_to_given_address(to: str, html_template: str) -> bool:
|
||
subject = f"{str(arrow.now().date())} Gunes Apt. Cari DurumKaydedilen Raporu"
|
||
try:
|
||
send_email(subject=subject, receivers=[to], html=html_template)
|
||
print(f"Email is sent to : {send_to}. BB")
|
||
return True
|
||
except Exception as e:
|
||
print(f"Error: {e}")
|
||
print("Email is not sent")
|
||
return False
|
||
|
||
|
||
def send_email_and_update_mongo_database(mongo_provider, email_data) -> bool:
|
||
parsed_list, list_of_rows = email_data.get("parsed"), list()
|
||
if not parsed_list:
|
||
return False
|
||
|
||
for parsed in parsed_list:
|
||
bank_date = arrow.get(str(parsed.get("bank_date")))
|
||
process_comment = parsed.get("process_comment")
|
||
currency_value = f"{parsed.get('currency_value'):.4f}"
|
||
list_of_rows.append([bank_date, process_comment, currency_value])
|
||
|
||
html_template = render_email_template(
|
||
headers=["Ulaştığı Tarih", "Banka Transaksiyonu Ek Bilgi", "Aktarım Değeri"],
|
||
rows=list_of_rows,
|
||
balance_error=False,
|
||
bank_balance=0,
|
||
)
|
||
if send_email_to_given_address(to=send_to, html_template=html_template):
|
||
mongo_provider.update_one(
|
||
filter_query={"filename": email_data.get("filename")},
|
||
update_data={"$set": {"send": True}},
|
||
)
|
||
return True
|
||
return False
|
||
|
||
|
||
if __name__ == "__main__":
|
||
|
||
while True:
|
||
print("Sender service is running...")
|
||
with MongoProvider.mongo_client() as mongo_client:
|
||
provider = MongoProvider(
|
||
client=mongo_client,
|
||
database=MongoConfig.DATABASE_NAME,
|
||
storage_reason=[mongo_prefix, str(arrow.now().date())],
|
||
)
|
||
results = check_any_written_stage_in_mongo_database(mongo_provider=provider)
|
||
for result in results:
|
||
send_email_and_update_mongo_database(
|
||
mongo_provider=provider, email_data=result,
|
||
)
|
||
time.sleep(60)
|