From 109a6978afcb74d536d8959b4fc53b5d9d095c04 Mon Sep 17 00:00:00 2001 From: Kobe Date: Mon, 26 May 2025 10:57:02 +0200 Subject: [PATCH] add company logo --- __pycache__/models.cpython-313.pyc | Bin 13433 -> 13538 bytes ...888_add_company_logo_field.cpython-313.pyc | Bin 0 -> 1332 bytes .../f18735338888_add_company_logo_field.py | 32 ++++++++++++++++++ models.py | 1 + routes/__pycache__/main.cpython-313.pyc | Bin 32079 -> 33045 bytes routes/main.py | 19 +++++++++++ .../1748249775_logo-placeholder.png | Bin 0 -> 3809 bytes templates/common/base.html | 7 +++- templates/settings/tabs/company_info.html | 19 ++++++++++- 9 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 migrations/versions/__pycache__/f18735338888_add_company_logo_field.cpython-313.pyc create mode 100644 migrations/versions/f18735338888_add_company_logo_field.py create mode 100644 static/uploads/company_logos/1748249775_logo-placeholder.png diff --git a/__pycache__/models.cpython-313.pyc b/__pycache__/models.cpython-313.pyc index 1d0e19418ced7f20aa67b2f7964d7820a11a8abb..e5b1d991a9528abae1a4728957acd1d2783d1990 100644 GIT binary patch delta 232 zcmeyF@hFq`GcPX}0}yQ2Hpxia$ooi>NrPqcN6lQu$@8>@CKqVyO}?ikG*J z`~gUV#0_-vAmTb8aR)HFgjI@BYw`nS>B(ujQj;BY)h53JiWp4Z$Rf-v8Ds*d1tmme zESZa>V`PGPr5H>>mIFbNY%pJuTsps|z~sBSR!l`Qn?>~M7#Sx|o~$1_dAYjSG_jg48AkAOtvvh+uURLiIMU2F H0*wX$Uhzlx delta 213 zcmaEq`7?v}GcPX}0}wcAnq-J=%K_;R zKpG@&ppyp?*Maaq=twbYOm@^4o*bvkF?kEC)Z_+TwaIC^QjB_&H?jybO9UCg=|FK2 z8B69OsTk>C9w`P>kmW#7BooYAB%98s$v;_E&uVjwUNs}*q{%n*LmA~J>lwsMo?-Bf oF>i9eVcKSHqdSa@rzXEJel9G*C^5lky2V6`uM9wDkuK0200tjGWdHyG diff --git a/migrations/versions/__pycache__/f18735338888_add_company_logo_field.cpython-313.pyc b/migrations/versions/__pycache__/f18735338888_add_company_logo_field.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8e655a2882cafd71272c430120ac243a24069b6 GIT binary patch literal 1332 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 diff --git a/routes/main.py b/routes/main.py index 12ddec7..4032f9e 100644 --- a/routes/main.py +++ b/routes/main.py @@ -7,6 +7,7 @@ from sqlalchemy import func, case, literal_column, text from datetime import datetime, timedelta import logging import sys +import time # Set up logging to show in console logging.basicConfig( @@ -399,6 +400,24 @@ def init_routes(main_bp): site_settings = SiteSettings.get_settings() + # Handle logo upload + if 'company_logo' in request.files: + logo_file = request.files['company_logo'] + if logo_file and logo_file.filename: + # Delete old logo if it exists + if site_settings.company_logo: + old_logo_path = os.path.join('static', 'uploads', 'company_logos', site_settings.company_logo) + if os.path.exists(old_logo_path): + os.remove(old_logo_path) + + # Save new logo + filename = secure_filename(logo_file.filename) + # Add timestamp to filename to prevent caching issues + filename = f"{int(time.time())}_{filename}" + logo_path = os.path.join('static', 'uploads', 'company_logos', filename) + logo_file.save(logo_path) + site_settings.company_logo = filename + # Update all company fields site_settings.company_name = request.form.get('company_name') site_settings.company_website = request.form.get('company_website') diff --git a/static/uploads/company_logos/1748249775_logo-placeholder.png b/static/uploads/company_logos/1748249775_logo-placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcaf7dbb8b0457a46cc658e8c683fe9951fcb63 GIT binary patch literal 3809 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 literal 0 HcmV?d00001 diff --git a/templates/common/base.html b/templates/common/base.html index 33963f6..a461988 100644 --- a/templates/common/base.html +++ b/templates/common/base.html @@ -18,7 +18,12 @@