add company logo
This commit is contained in:
Binary file not shown.
Binary file not shown.
32
migrations/versions/f18735338888_add_company_logo_field.py
Normal file
32
migrations/versions/f18735338888_add_company_logo_field.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
"""add company logo field
|
||||||
|
|
||||||
|
Revision ID: f18735338888
|
||||||
|
Revises: 787468cfea77
|
||||||
|
Create Date: 2025-05-26 10:52:32.572951
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = 'f18735338888'
|
||||||
|
down_revision = '787468cfea77'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('site_settings', schema=None) as batch_op:
|
||||||
|
batch_op.add_column(sa.Column('company_logo', sa.String(length=255), nullable=True))
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('site_settings', schema=None) as batch_op:
|
||||||
|
batch_op.drop_column('company_logo')
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
@@ -131,6 +131,7 @@ class SiteSettings(db.Model):
|
|||||||
primary_color = db.Column(db.String(7), default='#16767b') # Default from colors.css
|
primary_color = db.Column(db.String(7), default='#16767b') # Default from colors.css
|
||||||
secondary_color = db.Column(db.String(7), default='#741b5f') # Default from colors.css
|
secondary_color = db.Column(db.String(7), default='#741b5f') # Default from colors.css
|
||||||
company_name = db.Column(db.String(100))
|
company_name = db.Column(db.String(100))
|
||||||
|
company_logo = db.Column(db.String(255)) # Store the filename of the logo
|
||||||
company_website = db.Column(db.String(200))
|
company_website = db.Column(db.String(200))
|
||||||
company_email = db.Column(db.String(100))
|
company_email = db.Column(db.String(100))
|
||||||
company_phone = db.Column(db.String(20))
|
company_phone = db.Column(db.String(20))
|
||||||
|
|||||||
Binary file not shown.
@@ -7,6 +7,7 @@ from sqlalchemy import func, case, literal_column, text
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
# Set up logging to show in console
|
# Set up logging to show in console
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
@@ -399,6 +400,24 @@ def init_routes(main_bp):
|
|||||||
|
|
||||||
site_settings = SiteSettings.get_settings()
|
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
|
# Update all company fields
|
||||||
site_settings.company_name = request.form.get('company_name')
|
site_settings.company_name = request.form.get('company_name')
|
||||||
site_settings.company_website = request.form.get('company_website')
|
site_settings.company_website = request.form.get('company_website')
|
||||||
|
|||||||
BIN
static/uploads/company_logos/1748249775_logo-placeholder.png
Normal file
BIN
static/uploads/company_logos/1748249775_logo-placeholder.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
@@ -18,7 +18,12 @@
|
|||||||
<!-- Navigation -->
|
<!-- Navigation -->
|
||||||
<nav class="navbar navbar-expand-lg navbar-dark">
|
<nav class="navbar navbar-expand-lg navbar-dark">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<a class="navbar-brand" href="{{ url_for('main.dashboard') }}">
|
<a class="navbar-brand d-flex align-items-center" href="{{ url_for('main.dashboard') }}">
|
||||||
|
{% if site_settings.company_logo %}
|
||||||
|
<img src="{{ url_for('static', filename='uploads/company_logos/' + site_settings.company_logo) }}"
|
||||||
|
alt="Company Logo"
|
||||||
|
style="height: 40px; margin-right: 10px;">
|
||||||
|
{% endif %}
|
||||||
{% if site_settings.company_name %}
|
{% if site_settings.company_name %}
|
||||||
DocuPulse for {% if site_settings.company_website %}<a href="{{ site_settings.company_website }}" target="_blank" style="text-decoration: none; color: #fff !important; font-weight: inherit; font-size: 1.25rem; font-family: inherit; display: inline; padding: 0; margin: 0;">{{ site_settings.company_name }}</a>{% else %}{{ site_settings.company_name }}{% endif %}
|
DocuPulse for {% if site_settings.company_website %}<a href="{{ site_settings.company_website }}" target="_blank" style="text-decoration: none; color: #fff !important; font-weight: inherit; font-size: 1.25rem; font-family: inherit; display: inline; padding: 0; margin: 0;">{{ site_settings.company_name }}</a>{% else %}{{ site_settings.company_name }}{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|||||||
@@ -4,13 +4,30 @@
|
|||||||
<!-- Company Settings Section -->
|
<!-- Company Settings Section -->
|
||||||
<div class="card mb-4">
|
<div class="card mb-4">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<form method="POST" action="{{ url_for('main.update_company_settings') }}">
|
<form method="POST" action="{{ url_for('main.update_company_settings') }}" enctype="multipart/form-data">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<!-- Basic Information -->
|
<!-- Basic Information -->
|
||||||
<div class="col-md-6 mb-4">
|
<div class="col-md-6 mb-4">
|
||||||
<h6 class="mb-3">Basic Information</h6>
|
<h6 class="mb-3">Basic Information</h6>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="company_logo" class="form-label">Company Logo</label>
|
||||||
|
<div class="d-flex align-items-center gap-3">
|
||||||
|
{% if site_settings.company_logo %}
|
||||||
|
<img src="{{ url_for('static', filename='uploads/company_logos/' + site_settings.company_logo) }}"
|
||||||
|
alt="Company Logo"
|
||||||
|
class="img-thumbnail"
|
||||||
|
style="max-height: 100px; max-width: 200px;">
|
||||||
|
{% endif %}
|
||||||
|
<input type="file"
|
||||||
|
class="form-control"
|
||||||
|
id="company_logo"
|
||||||
|
name="company_logo"
|
||||||
|
accept="image/*">
|
||||||
|
</div>
|
||||||
|
<div class="form-text">Upload your company logo. Recommended size: 200x100 pixels.</div>
|
||||||
|
</div>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="company_name" class="form-label">Company Name</label>
|
<label for="company_name" class="form-label">Company Name</label>
|
||||||
<input type="text"
|
<input type="text"
|
||||||
|
|||||||
Reference in New Issue
Block a user