Files
TimeTracker/templates/projects/clients.html
Dries Peeters 8a378b7078 feat(clients,license,db): add client management, enhanced DB init, and tests
- Clients: add model, routes, and templates
  - app/models/client.py
  - app/routes/clients.py
  - templates/clients/{create,edit,list,view}.html
  - docs/CLIENT_MANAGEMENT_README.md
- Database: add enhanced init/verify scripts, migrations, and docs
  - docker/{init-database-enhanced.py,start-enhanced.py,verify-database.py}
  - docs/ENHANCED_DATABASE_STARTUP.md
  - migrations/{add_analytics_column.sql,add_analytics_setting.py,migrate_to_client_model.py}
- Scripts: add version manager and docker network test helpers
  - scripts/version-manager.{bat,ps1,py,sh}
  - scripts/test-docker-network.{bat,sh}
  - docs/VERSION_MANAGEMENT.md
- UI: tweak base stylesheet
  - app/static/base.css
- Tests: add client system test
  - test_client_system.py
2025-09-01 11:34:45 +02:00

61 lines
2.7 KiB
HTML

{% extends "base.html" %}
{% block title %}Clients - {{ app_name }}{% endblock %}
{% block content %}
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="d-flex justify-content-between align-items-center mb-4">
<h1 class="h3 mb-0">
<i class="fas fa-building text-primary"></i> Clients
</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="mb-0"><i class="fas fa-list me-1"></i> Client List ({{ clients|length }})</h5>
</div>
<div class="card-body">
{% if clients %}
<div class="row row-cols-1 row-cols-md-3 g-3">
{% for client in clients %}
<div class="col">
<a class="text-decoration-none" href="{{ url_for('clients.view_client', client_id=client.id) }}">
<div class="card h-100">
<div class="card-body">
<h5 class="card-title mb-0"><i class="fas fa-briefcase me-2 text-primary"></i>{{ client.name }}</h5>
{% if client.description %}
<p class="card-text text-muted small mt-2">{{ client.description[:50] }}{% if client.description|length > 50 %}...{% endif %}</p>
{% endif %}
<div class="mt-2">
<span class="badge bg-primary">{{ client.total_projects }} projects</span>
{% if client.default_hourly_rate %}
<span class="badge bg-success ms-1">{{ "%.2f"|format(client.default_hourly_rate) }} {{ currency }}/hr</span>
{% endif %}
</div>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
{% else %}
<div class="text-center py-5">
<i class="fas fa-briefcase fa-3x text-muted mb-3"></i>
<h4 class="text-muted">No Clients Found</h4>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% endblock %}