auto-claude: subtask-5-1 - Create admin/it_audit_dashboard.html with stats gr
Create IT Audit admin dashboard template with: - Header with title, description, and action buttons - Stats grid showing: total audits, avg overall score, avg security score, avg collaboration score, companies without audit - Maturity level distribution (basic, developing, established, advanced) - Technology stats grid (Azure AD, M365, Proxmox PBS, Zabbix, EDR, DR Plan) - Collaboration flags section (6 cooperation types) - Empty states for all sections when no data - Responsive design following patterns from admin_seo_dashboard.html Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
f9a8bcf405
commit
e57af8bd78
@ -3,23 +3,23 @@
|
||||
"spec": "001-audyt-it",
|
||||
"state": "building",
|
||||
"subtasks": {
|
||||
"completed": 15,
|
||||
"completed": 16,
|
||||
"total": 28,
|
||||
"in_progress": 1,
|
||||
"failed": 0
|
||||
},
|
||||
"phase": {
|
||||
"current": "IT Audit Form Template",
|
||||
"current": "Admin Dashboard",
|
||||
"id": null,
|
||||
"total": 4
|
||||
"total": 3
|
||||
},
|
||||
"workers": {
|
||||
"active": 0,
|
||||
"max": 1
|
||||
},
|
||||
"session": {
|
||||
"number": 16,
|
||||
"number": 17,
|
||||
"started_at": "2026-01-09T08:11:54.054044"
|
||||
},
|
||||
"last_update": "2026-01-09T08:54:23.577781"
|
||||
"last_update": "2026-01-09T08:56:34.232396"
|
||||
}
|
||||
567
templates/admin/it_audit_dashboard.html
Normal file
567
templates/admin/it_audit_dashboard.html
Normal file
@ -0,0 +1,567 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Panel Audytu IT - Norda Biznes Hub{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<style>
|
||||
.admin-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: var(--spacing-xl);
|
||||
flex-wrap: wrap;
|
||||
gap: var(--spacing-md);
|
||||
}
|
||||
|
||||
.admin-header h1 {
|
||||
font-size: var(--font-size-3xl);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.data-source-info {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: var(--spacing-xs);
|
||||
margin-top: var(--spacing-sm);
|
||||
padding: var(--spacing-xs) var(--spacing-sm);
|
||||
background: var(--info-light, #e0f2fe);
|
||||
border-radius: var(--radius);
|
||||
font-size: var(--font-size-sm);
|
||||
color: var(--info, #0284c7);
|
||||
}
|
||||
|
||||
.data-source-info svg {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.header-actions {
|
||||
display: flex;
|
||||
gap: var(--spacing-sm);
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* Stats Grid */
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
||||
gap: var(--spacing-md);
|
||||
margin-bottom: var(--spacing-xl);
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
background: white;
|
||||
padding: var(--spacing-lg);
|
||||
border-radius: var(--radius-lg);
|
||||
box-shadow: var(--shadow-sm);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-card.primary { border-top: 4px solid var(--primary); }
|
||||
.stat-card.success { border-top: 4px solid var(--success); }
|
||||
.stat-card.warning { border-top: 4px solid var(--warning); }
|
||||
.stat-card.info { border-top: 4px solid #0284c7; }
|
||||
.stat-card.purple { border-top: 4px solid #7c3aed; }
|
||||
|
||||
.stat-number {
|
||||
font-size: var(--font-size-2xl);
|
||||
font-weight: 700;
|
||||
display: block;
|
||||
margin-bottom: var(--spacing-xs);
|
||||
}
|
||||
|
||||
.stat-number.green { color: var(--success); }
|
||||
.stat-number.yellow { color: var(--warning); }
|
||||
.stat-number.red { color: var(--error); }
|
||||
.stat-number.gray { color: var(--secondary); }
|
||||
.stat-number.blue { color: #0284c7; }
|
||||
.stat-number.purple { color: #7c3aed; }
|
||||
|
||||
.stat-label {
|
||||
color: var(--text-secondary);
|
||||
font-size: var(--font-size-sm);
|
||||
}
|
||||
|
||||
.stat-sublabel {
|
||||
color: var(--text-secondary);
|
||||
font-size: var(--font-size-xs);
|
||||
margin-top: var(--spacing-xs);
|
||||
}
|
||||
|
||||
/* Section styling */
|
||||
.section {
|
||||
background: var(--surface);
|
||||
padding: var(--spacing-xl);
|
||||
border-radius: var(--radius-lg);
|
||||
box-shadow: var(--shadow);
|
||||
margin-bottom: var(--spacing-xl);
|
||||
}
|
||||
|
||||
.section h2 {
|
||||
font-size: var(--font-size-xl);
|
||||
margin-bottom: var(--spacing-lg);
|
||||
color: var(--text-primary);
|
||||
border-bottom: 2px solid var(--border);
|
||||
padding-bottom: var(--spacing-sm);
|
||||
}
|
||||
|
||||
/* Technology Stats Grid */
|
||||
.tech-stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
||||
gap: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.tech-stat-card {
|
||||
background: var(--background);
|
||||
padding: var(--spacing-md);
|
||||
border-radius: var(--radius);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--spacing-md);
|
||||
}
|
||||
|
||||
.tech-stat-icon {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: var(--radius);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
font-size: var(--font-size-xl);
|
||||
}
|
||||
|
||||
.tech-stat-icon.azure { background: #e8f4fc; color: #0078d4; }
|
||||
.tech-stat-icon.m365 { background: #fff3e0; color: #d83b01; }
|
||||
.tech-stat-icon.pbs { background: #e8f5e9; color: #2e7d32; }
|
||||
.tech-stat-icon.zabbix { background: #fee2e2; color: #dc2626; }
|
||||
.tech-stat-icon.security { background: #e0f2fe; color: #0284c7; }
|
||||
.tech-stat-icon.backup { background: #f3e8ff; color: #7c3aed; }
|
||||
|
||||
.tech-stat-content {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.tech-stat-value {
|
||||
font-size: var(--font-size-xl);
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.tech-stat-label {
|
||||
color: var(--text-secondary);
|
||||
font-size: var(--font-size-sm);
|
||||
}
|
||||
|
||||
.tech-stat-bar {
|
||||
height: 4px;
|
||||
background: var(--border);
|
||||
border-radius: 2px;
|
||||
margin-top: var(--spacing-xs);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tech-stat-bar-fill {
|
||||
height: 100%;
|
||||
border-radius: 2px;
|
||||
transition: width 0.5s ease;
|
||||
}
|
||||
|
||||
.tech-stat-bar-fill.azure { background: #0078d4; }
|
||||
.tech-stat-bar-fill.m365 { background: #d83b01; }
|
||||
.tech-stat-bar-fill.pbs { background: #2e7d32; }
|
||||
.tech-stat-bar-fill.zabbix { background: #dc2626; }
|
||||
.tech-stat-bar-fill.security { background: #0284c7; }
|
||||
.tech-stat-bar-fill.backup { background: #7c3aed; }
|
||||
|
||||
/* Maturity Distribution */
|
||||
.maturity-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: var(--spacing-md);
|
||||
}
|
||||
|
||||
.maturity-card {
|
||||
background: var(--background);
|
||||
padding: var(--spacing-md);
|
||||
border-radius: var(--radius);
|
||||
text-align: center;
|
||||
border-left: 4px solid transparent;
|
||||
}
|
||||
|
||||
.maturity-card.basic { border-left-color: var(--error); }
|
||||
.maturity-card.developing { border-left-color: var(--warning); }
|
||||
.maturity-card.established { border-left-color: #0284c7; }
|
||||
.maturity-card.advanced { border-left-color: var(--success); }
|
||||
|
||||
.maturity-card .stat-number.basic { color: var(--error); }
|
||||
.maturity-card .stat-number.developing { color: var(--warning); }
|
||||
.maturity-card .stat-number.established { color: #0284c7; }
|
||||
.maturity-card .stat-number.advanced { color: var(--success); }
|
||||
|
||||
.maturity-card .maturity-label {
|
||||
font-size: var(--font-size-sm);
|
||||
color: var(--text-secondary);
|
||||
margin-top: var(--spacing-xs);
|
||||
}
|
||||
|
||||
/* Collaboration Flags */
|
||||
.collab-flags-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: var(--spacing-md);
|
||||
}
|
||||
|
||||
.collab-flag-card {
|
||||
background: var(--background);
|
||||
padding: var(--spacing-md);
|
||||
border-radius: var(--radius);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.collab-flag-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--spacing-sm);
|
||||
}
|
||||
|
||||
.collab-flag-icon {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: var(--radius-sm);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: var(--primary-light, #e0f2fe);
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.collab-flag-label {
|
||||
font-size: var(--font-size-sm);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.collab-flag-count {
|
||||
font-size: var(--font-size-lg);
|
||||
font-weight: 700;
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
/* Empty state */
|
||||
.empty-state {
|
||||
text-align: center;
|
||||
padding: var(--spacing-2xl);
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.empty-state svg {
|
||||
margin-bottom: var(--spacing-md);
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.empty-state h3 {
|
||||
color: var(--text-primary);
|
||||
margin-bottom: var(--spacing-sm);
|
||||
}
|
||||
|
||||
/* Responsive */
|
||||
@media (max-width: 768px) {
|
||||
.maturity-grid {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.stats-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.maturity-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.stats-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="admin-header">
|
||||
<div>
|
||||
<h1>Panel Audytu IT</h1>
|
||||
<p class="text-muted">Przeglad infrastruktury IT i potencjalu wspolpracy firm czlonkowskich</p>
|
||||
<div class="data-source-info">
|
||||
<svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
</svg>
|
||||
<span>Dane z formularzy Audytu IT wypelnionych przez czlonkow Norda Biznes</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="header-actions">
|
||||
<a href="{{ url_for('it_audit_form') }}" class="btn btn-outline btn-sm">
|
||||
<svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
|
||||
</svg>
|
||||
Nowy audyt
|
||||
</a>
|
||||
<a href="{{ url_for('api_it_audit_export') }}" class="btn btn-outline btn-sm" target="_blank">
|
||||
<svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/>
|
||||
</svg>
|
||||
Eksport
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Main Stats -->
|
||||
<div class="stats-grid">
|
||||
<div class="stat-card primary">
|
||||
<span class="stat-number">{{ stats.total_audits }}</span>
|
||||
<span class="stat-label">Przeprowadzonych audytow</span>
|
||||
<span class="stat-sublabel">z {{ stats.total_companies }} firm</span>
|
||||
</div>
|
||||
<div class="stat-card success">
|
||||
<span class="stat-number green">{{ stats.avg_overall_score|default('-', true) }}{% if stats.avg_overall_score %}<small>/100</small>{% endif %}</span>
|
||||
<span class="stat-label">Sredni wynik ogolny</span>
|
||||
</div>
|
||||
<div class="stat-card info">
|
||||
<span class="stat-number blue">{{ stats.avg_security_score|default('-', true) }}{% if stats.avg_security_score %}<small>/100</small>{% endif %}</span>
|
||||
<span class="stat-label">Sredni wynik bezpieczenstwa</span>
|
||||
</div>
|
||||
<div class="stat-card purple">
|
||||
<span class="stat-number purple">{{ stats.avg_collaboration_score|default('-', true) }}{% if stats.avg_collaboration_score %}<small>/100</small>{% endif %}</span>
|
||||
<span class="stat-label">Sredni wynik wspolpracy</span>
|
||||
</div>
|
||||
<div class="stat-card warning">
|
||||
<span class="stat-number yellow">{{ stats.companies_without_audit }}</span>
|
||||
<span class="stat-label">Firm bez audytu</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Maturity Distribution -->
|
||||
<div class="section">
|
||||
<h2>Poziom dojrzalosci IT</h2>
|
||||
{% if stats.total_audits > 0 %}
|
||||
<div class="maturity-grid">
|
||||
<div class="maturity-card basic">
|
||||
<span class="stat-number basic">{{ stats.maturity_basic }}</span>
|
||||
<div class="maturity-label">Podstawowy</div>
|
||||
<div class="stat-sublabel">< 40 pkt</div>
|
||||
</div>
|
||||
<div class="maturity-card developing">
|
||||
<span class="stat-number developing">{{ stats.maturity_developing }}</span>
|
||||
<div class="maturity-label">Rozwijajacy sie</div>
|
||||
<div class="stat-sublabel">40-59 pkt</div>
|
||||
</div>
|
||||
<div class="maturity-card established">
|
||||
<span class="stat-number established">{{ stats.maturity_established }}</span>
|
||||
<div class="maturity-label">Ugruntowany</div>
|
||||
<div class="stat-sublabel">60-79 pkt</div>
|
||||
</div>
|
||||
<div class="maturity-card advanced">
|
||||
<span class="stat-number advanced">{{ stats.maturity_advanced }}</span>
|
||||
<div class="maturity-label">Zaawansowany</div>
|
||||
<div class="stat-sublabel">≥ 80 pkt</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="empty-state">
|
||||
<svg width="64" height="64" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
|
||||
</svg>
|
||||
<p>Brak danych o poziomie dojrzalosci. Wypelnij pierwszy audyt IT.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Technology Stats -->
|
||||
<div class="section">
|
||||
<h2>Statystyki technologii</h2>
|
||||
{% if stats.total_audits > 0 %}
|
||||
<div class="tech-stats-grid">
|
||||
<div class="tech-stat-card">
|
||||
<div class="tech-stat-icon azure">
|
||||
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M5.483 21.3H24L14.025 4.013l-3.038 8.347 5.836 6.938L5.483 21.3zM13.175 2.7L6.388 19.142H0l6.6-10.04 6.575-6.402z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="tech-stat-content">
|
||||
<div class="tech-stat-value">{{ stats.has_azure_ad }}</div>
|
||||
<div class="tech-stat-label">Azure AD / Entra ID</div>
|
||||
<div class="tech-stat-bar">
|
||||
<div class="tech-stat-bar-fill azure" style="width: {{ (stats.has_azure_ad / stats.total_audits * 100)|round|int if stats.total_audits > 0 else 0 }}%"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tech-stat-card">
|
||||
<div class="tech-stat-icon m365">
|
||||
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M11.5 2.25L2.25 6v12l9.25 3.75L21.75 18V6L11.5 2.25zm0 1.5l7.5 3v10.5l-7.5 3-7.5-3V6.75l7.5-3z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="tech-stat-content">
|
||||
<div class="tech-stat-value">{{ stats.has_m365 }}</div>
|
||||
<div class="tech-stat-label">Microsoft 365</div>
|
||||
<div class="tech-stat-bar">
|
||||
<div class="tech-stat-bar-fill m365" style="width: {{ (stats.has_m365 / stats.total_audits * 100)|round|int if stats.total_audits > 0 else 0 }}%"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tech-stat-card">
|
||||
<div class="tech-stat-icon pbs">
|
||||
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="tech-stat-content">
|
||||
<div class="tech-stat-value">{{ stats.has_proxmox_pbs }}</div>
|
||||
<div class="tech-stat-label">Proxmox Backup Server</div>
|
||||
<div class="tech-stat-bar">
|
||||
<div class="tech-stat-bar-fill pbs" style="width: {{ (stats.has_proxmox_pbs / stats.total_audits * 100)|round|int if stats.total_audits > 0 else 0 }}%"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tech-stat-card">
|
||||
<div class="tech-stat-icon zabbix">
|
||||
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M3 3v18h18V3H3zm16 16H5V5h14v14zM7 7h2v2H7V7zm4 0h2v2h-2V7zm4 0h2v2h-2V7zm-8 4h2v2H7v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2zm-8 4h2v2H7v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="tech-stat-content">
|
||||
<div class="tech-stat-value">{{ stats.has_zabbix }}</div>
|
||||
<div class="tech-stat-label">Zabbix Monitoring</div>
|
||||
<div class="tech-stat-bar">
|
||||
<div class="tech-stat-bar-fill zabbix" style="width: {{ (stats.has_zabbix / stats.total_audits * 100)|round|int if stats.total_audits > 0 else 0 }}%"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tech-stat-card">
|
||||
<div class="tech-stat-icon security">
|
||||
<svg width="24" height="24" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="tech-stat-content">
|
||||
<div class="tech-stat-value">{{ stats.has_edr }}</div>
|
||||
<div class="tech-stat-label">EDR / XDR</div>
|
||||
<div class="tech-stat-bar">
|
||||
<div class="tech-stat-bar-fill security" style="width: {{ (stats.has_edr / stats.total_audits * 100)|round|int if stats.total_audits > 0 else 0 }}%"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tech-stat-card">
|
||||
<div class="tech-stat-icon backup">
|
||||
<svg width="24" height="24" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="tech-stat-content">
|
||||
<div class="tech-stat-value">{{ stats.has_dr_plan }}</div>
|
||||
<div class="tech-stat-label">Plan DR</div>
|
||||
<div class="tech-stat-bar">
|
||||
<div class="tech-stat-bar-fill backup" style="width: {{ (stats.has_dr_plan / stats.total_audits * 100)|round|int if stats.total_audits > 0 else 0 }}%"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="empty-state">
|
||||
<svg width="64" height="64" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01"/>
|
||||
</svg>
|
||||
<p>Brak danych o technologiach. Wypelnij pierwszy audyt IT.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Collaboration Flags -->
|
||||
<div class="section">
|
||||
<h2>Gotowość do wspolpracy</h2>
|
||||
{% if stats.total_audits > 0 %}
|
||||
<div class="collab-flags-grid">
|
||||
<div class="collab-flag-card">
|
||||
<div class="collab-flag-info">
|
||||
<div class="collab-flag-icon">
|
||||
<svg width="18" height="18" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="collab-flag-label">Wspoldzielone licencje</span>
|
||||
</div>
|
||||
<span class="collab-flag-count">{{ stats.open_to_shared_licensing }}</span>
|
||||
</div>
|
||||
<div class="collab-flag-card">
|
||||
<div class="collab-flag-info">
|
||||
<div class="collab-flag-icon">
|
||||
<svg width="18" height="18" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="collab-flag-label">Replikacja backupow</span>
|
||||
</div>
|
||||
<span class="collab-flag-count">{{ stats.open_to_backup_replication }}</span>
|
||||
</div>
|
||||
<div class="collab-flag-card">
|
||||
<div class="collab-flag-info">
|
||||
<div class="collab-flag-icon">
|
||||
<svg width="18" height="18" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="collab-flag-label">Federacja Teams</span>
|
||||
</div>
|
||||
<span class="collab-flag-count">{{ stats.open_to_teams_federation }}</span>
|
||||
</div>
|
||||
<div class="collab-flag-card">
|
||||
<div class="collab-flag-info">
|
||||
<div class="collab-flag-icon">
|
||||
<svg width="18" height="18" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="collab-flag-label">Wspolny monitoring</span>
|
||||
</div>
|
||||
<span class="collab-flag-count">{{ stats.open_to_shared_monitoring }}</span>
|
||||
</div>
|
||||
<div class="collab-flag-card">
|
||||
<div class="collab-flag-info">
|
||||
<div class="collab-flag-icon">
|
||||
<svg width="18" height="18" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="collab-flag-label">Zakupy grupowe</span>
|
||||
</div>
|
||||
<span class="collab-flag-count">{{ stats.open_to_collective_purchasing }}</span>
|
||||
</div>
|
||||
<div class="collab-flag-card">
|
||||
<div class="collab-flag-info">
|
||||
<div class="collab-flag-icon">
|
||||
<svg width="18" height="18" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="collab-flag-label">Wymiana wiedzy</span>
|
||||
</div>
|
||||
<span class="collab-flag-count">{{ stats.open_to_knowledge_sharing }}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="empty-state">
|
||||
<svg width="64" height="64" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"/>
|
||||
</svg>
|
||||
<p>Brak danych o gotowosci do wspolpracy. Wypelnij pierwszy audyt IT.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_js %}
|
||||
// IT Audit Dashboard JavaScript
|
||||
// Currently placeholder - will be expanded in subtask 5-2
|
||||
{% endblock %}
|
||||
Loading…
Reference in New Issue
Block a user