195 lines
9.0 KiB
HTML
195 lines
9.0 KiB
HTML
{% extends "layout.html" %}
|
|
|
|
{% block content %}
|
|
<h2 class="mb-4"><i class="bi bi-speedometer2"></i> Dashboard</h2>
|
|
|
|
<div class="row">
|
|
<!-- Category Summary -->
|
|
<div class="col-md-6 mb-4">
|
|
<div class="card h-100">
|
|
<div class="card-header bg-primary text-white">
|
|
<h5 class="mb-0"><i class="bi bi-folder"></i> Document Categories</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
{% if category_counts %}
|
|
<div class="row">
|
|
{% for category in category_counts %}
|
|
<div class="col-md-6 mb-3">
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<div>
|
|
<h6 class="mb-0">{{ category.category|capitalize }}</h6>
|
|
<small class="text-muted">{{ category.count }} document{% if category.count != 1 %}s{% endif %}</small>
|
|
</div>
|
|
<a href="{{ url_for('files', category=category.category) }}" class="btn btn-sm btn-outline-primary">
|
|
<i class="bi bi-arrow-right"></i>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="alert alert-info">
|
|
<i class="bi bi-info-circle"></i> No documents found. Upload your first document to get started!
|
|
</div>
|
|
{% endif %}
|
|
<div class="text-center mt-3">
|
|
<a href="{{ url_for('files') }}" class="btn btn-primary">
|
|
<i class="bi bi-table"></i> View All Documents
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Quick Actions -->
|
|
<div class="col-md-6 mb-4">
|
|
<div class="card h-100">
|
|
<div class="card-header bg-success text-white">
|
|
<h5 class="mb-0"><i class="bi bi-lightning"></i> Quick Actions</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-6 mb-3">
|
|
<a href="{{ url_for('upload') }}" class="btn btn-outline-success w-100 h-100 d-flex flex-column justify-content-center align-items-center p-4">
|
|
<i class="bi bi-upload fs-2 mb-2"></i>
|
|
<span>Upload Document</span>
|
|
</a>
|
|
</div>
|
|
<div class="col-6 mb-3">
|
|
<a href="{{ url_for('files') }}" class="btn btn-outline-primary w-100 h-100 d-flex flex-column justify-content-center align-items-center p-4">
|
|
<i class="bi bi-table fs-2 mb-2"></i>
|
|
<span>View Files</span>
|
|
</a>
|
|
</div>
|
|
<div class="col-6 mb-3">
|
|
<a href="{{ url_for('files', category='admin') }}" class="btn btn-outline-secondary w-100 h-100 d-flex flex-column justify-content-center align-items-center p-4">
|
|
<i class="bi bi-briefcase fs-2 mb-2"></i>
|
|
<span>Admin Files</span>
|
|
</a>
|
|
</div>
|
|
<div class="col-6 mb-3">
|
|
<a href="{{ url_for('files', category='accounting') }}" class="btn btn-outline-info w-100 h-100 d-flex flex-column justify-content-center align-items-center p-4">
|
|
<i class="bi bi-calculator fs-2 mb-2"></i>
|
|
<span>Accounting Files</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<!-- Recent Documents -->
|
|
<div class="col-md-6 mb-4">
|
|
<div class="card h-100">
|
|
<div class="card-header bg-info text-white">
|
|
<h5 class="mb-0"><i class="bi bi-clock-history"></i> Recent Documents</h5>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
{% if recent_documents %}
|
|
<div class="list-group list-group-flush">
|
|
{% for doc in recent_documents %}
|
|
<a href="{{ url_for('view_document', document_id=doc.id) }}" class="list-group-item list-group-item-action">
|
|
<div class="d-flex w-100 justify-content-between align-items-center">
|
|
<div>
|
|
<div class="d-flex align-items-center">
|
|
{% if doc.file_type == 'pdf' %}
|
|
<i class="bi bi-file-earmark-pdf text-danger me-2"></i>
|
|
{% elif doc.file_type == 'document' %}
|
|
<i class="bi bi-file-earmark-word text-primary me-2"></i>
|
|
{% elif doc.file_type == 'spreadsheet' %}
|
|
<i class="bi bi-file-earmark-excel text-success me-2"></i>
|
|
{% elif doc.file_type == 'image' %}
|
|
<i class="bi bi-file-earmark-image text-info me-2"></i>
|
|
{% elif doc.file_type == 'video' %}
|
|
<i class="bi bi-file-earmark-play text-warning me-2"></i>
|
|
{% else %}
|
|
<i class="bi bi-file-earmark text-secondary me-2"></i>
|
|
{% endif %}
|
|
<h6 class="mb-0">{{ doc.custom_filename }}</h6>
|
|
</div>
|
|
<small class="text-muted">
|
|
<span class="badge bg-secondary">{{ doc.category|capitalize }}</span>
|
|
{{ (doc.file_size / 1024)|round(1) }} KB
|
|
</small>
|
|
</div>
|
|
<small class="text-muted">{{ doc.created_at.split(' ')[0] }}</small>
|
|
</div>
|
|
</a>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="alert alert-info m-3">
|
|
<i class="bi bi-info-circle"></i> No documents found. Upload your first document to get started!
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% if recent_documents %}
|
|
<div class="card-footer text-center">
|
|
<a href="{{ url_for('files') }}" class="btn btn-sm btn-outline-info">View All Documents</a>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Analytics (Admin Only) -->
|
|
{% if session.role == 'admin' and analytics %}
|
|
<div class="col-md-6 mb-4">
|
|
<div class="card h-100">
|
|
<div class="card-header bg-warning text-dark">
|
|
<h5 class="mb-0"><i class="bi bi-graph-up"></i> Analytics Overview</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<h6>Most Viewed Documents</h6>
|
|
<div class="table-responsive">
|
|
<table class="table table-sm table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>Document</th>
|
|
<th>Views</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for doc in analytics %}
|
|
<tr>
|
|
<td>{{ doc.custom_filename }}</td>
|
|
<td>{{ doc.view_count }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
{% if user_activity %}
|
|
<h6 class="mt-4">Most Active Users</h6>
|
|
<div class="table-responsive">
|
|
<table class="table table-sm table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>User</th>
|
|
<th>Actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for user in user_activity %}
|
|
<tr>
|
|
<td>{{ user.username }}</td>
|
|
<td>{{ user.action_count }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endblock %}
|