improve(company): add user feedback for logo upload and conversion
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions

- Flash success message showing format conversion (e.g. "JPG do WebP")
- Flash error message if conversion fails with suggestion to try another file
- Flash warning for unsupported file formats
- Form hint explains automatic WebP conversion

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maciej Pienczyn 2026-04-08 14:30:33 +02:00
parent bd179dec97
commit af9871a127
2 changed files with 17 additions and 11 deletions

View File

@ -242,7 +242,6 @@ def _save_description(db, company):
if logo_file and logo_file.filename: if logo_file and logo_file.filename:
import os import os
from PIL import Image from PIL import Image
import io
allowed = {'png', 'jpg', 'jpeg', 'svg', 'webp'} allowed = {'png', 'jpg', 'jpeg', 'svg', 'webp'}
ext = logo_file.filename.rsplit('.', 1)[-1].lower() if '.' in logo_file.filename else '' ext = logo_file.filename.rsplit('.', 1)[-1].lower() if '.' in logo_file.filename else ''
@ -254,15 +253,22 @@ def _save_description(db, company):
old_path = os.path.join(logo_dir, f"{company.slug}.{old_ext}") old_path = os.path.join(logo_dir, f"{company.slug}.{old_ext}")
if os.path.exists(old_path): if os.path.exists(old_path):
os.remove(old_path) os.remove(old_path)
filepath = os.path.join(logo_dir, f"{company.slug}.webp") try:
if ext == 'svg': if ext == 'svg':
# SVG stays as-is (can't convert to webp) filepath = os.path.join(logo_dir, f"{company.slug}.svg")
filepath = os.path.join(logo_dir, f"{company.slug}.svg") logo_file.save(filepath)
logo_file.save(filepath) flash('Logo zostało zapisane (format SVG).', 'success')
else: else:
img = Image.open(logo_file) filepath = os.path.join(logo_dir, f"{company.slug}.webp")
img.save(filepath, 'WEBP', quality=85) img = Image.open(logo_file)
logger.info(f"Logo uploaded for company {company.id}: {filepath}") img.save(filepath, 'WEBP', quality=85)
flash(f'Logo zostało przekonwertowane z {ext.upper()} do WebP i zapisane.', 'success')
logger.info(f"Logo uploaded for company {company.id}: {filepath}")
except Exception as e:
logger.error(f"Logo conversion failed for company {company.id}: {e}")
flash('Nie udało się przetworzyć pliku logo. Spróbuj inny plik (PNG, JPG lub WebP).', 'error')
else:
flash(f'Nieobsługiwany format pliku (.{ext}). Dozwolone: PNG, JPG, SVG, WebP.', 'warning')
def _save_services(company): def _save_services(company):

View File

@ -848,7 +848,7 @@
</div> </div>
<div style="flex: 1;"> <div style="flex: 1;">
<input type="file" id="logo_file" name="logo_file" accept="image/png,image/jpeg,image/svg+xml,image/webp" class="form-input" style="padding: 8px;"> <input type="file" id="logo_file" name="logo_file" accept="image/png,image/jpeg,image/svg+xml,image/webp" class="form-input" style="padding: 8px;">
<p class="form-help" style="margin-top: 4px;">PNG, JPG, SVG lub WebP. Zalecany rozmiar: min. 200x200px.</p> <p class="form-help" style="margin-top: 4px;">PNG, JPG, SVG lub WebP. Pliki graficzne zostaną automatycznie przekonwertowane do formatu WebP. Zalecany rozmiar: min. 200x200px.</p>
</div> </div>
</div> </div>
</div> </div>