diff --git a/risks/templatetags/risk_extras.py b/risks/templatetags/risk_extras.py index 1c8e003..79dc5ec 100644 --- a/risks/templatetags/risk_extras.py +++ b/risks/templatetags/risk_extras.py @@ -10,6 +10,17 @@ _LIKELIHOOD_LABELS = dict(Risk.LIKELIHOOD_CHOICES) _IMPACT_LABELS = dict(Risk.IMPACT_CHOICES) LEVEL_ID_MAP = {"Low": 1, "Medium": 2, "High": 3, "Critical": 4} +@register.simple_tag +def sort_url(request, field, current_sort, current_dir): + query = request.GET.copy() + # Richtung bestimmen + if current_sort == field and current_dir == "asc": + query["dir"] = "desc" + else: + query["dir"] = "asc" + query["sort"] = field + return f"?{query.urlencode()}" + @register.filter def dict_get(d, key): try: diff --git a/risks/views.py b/risks/views.py index a5e3057..c5fb73f 100644 --- a/risks/views.py +++ b/risks/views.py @@ -116,12 +116,9 @@ class IncidentViewSet(viewsets.ModelViewSet): @login_required def list_risks(request): - """ - View for listing all Risks - """ qs = Risk.objects.all().select_related("owner", "residual_risk") - # GET-Parameter lesen + # Filter risk_id = request.GET.get("risk") control_id = request.GET.get("control") owner_id = request.GET.get("owner") @@ -142,36 +139,44 @@ def list_risks(request): if process: qs = qs.filter(process=process) - risks = qs.order_by("title").distinct() + sort = request.GET.get("sort") or "title" + direction = request.GET.get("dir") or "asc" + if direction == "desc": + qs = qs.order_by(f"-{sort}") + else: + qs = qs.order_by(sort) - controls = Control.objects.all().order_by("title") - owners = User.objects.filter(owned_risks__isnull=False).distinct().order_by("username") - categories = (Risk.objects - .exclude(category__isnull=True) - .exclude(category__exact="") - .values_list("category", flat=True) - .distinct() - .order_by("category")) - assets = (Risk.objects - .exclude(asset__isnull=True) - .exclude(asset__exact="") - .values_list("asset", flat=True) - .distinct() - .order_by("asset")) - processes = (Risk.objects - .exclude(process__isnull=True) - .exclude(process__exact="") - .values_list("process", flat=True) - .distinct() - .order_by("process")) + risks = qs.distinct() + + risk_choices = Risk.objects.all().order_by("title") + control_choices = Control.objects.all().order_by("title") + owner_choices = User.objects.filter(owned_risks__isnull=False).distinct().order_by("username") + category_choices = (Risk.objects.exclude(category__isnull=True) + .exclude(category__exact="") + .values_list("category", flat=True) + .distinct() + .order_by("category")) + asset_choices = (Risk.objects.exclude(asset__isnull=True) + .exclude(asset__exact="") + .values_list("asset", flat=True) + .distinct() + .order_by("asset")) + process_choices = (Risk.objects.exclude(process__isnull=True) + .exclude(process__exact="") + .values_list("process", flat=True) + .distinct() + .order_by("process")) return render(request, "risks/list_risks.html", { "risks": risks, - "controls": controls, - "owners": owners, - "categories": categories, - "assets": assets, - "processes": processes, + "risk_choices": risk_choices, + "control_choices": control_choices, + "owner_choices": owner_choices, + "category_choices": category_choices, + "asset_choices": asset_choices, + "process_choices": process_choices, + "current_sort": sort, + "current_dir": direction, }) @login_required diff --git a/static/css/design.css b/static/css/design.css index c6454a3..9e11d5d 100644 --- a/static/css/design.css +++ b/static/css/design.css @@ -1,176 +1,197 @@ -/* Base palette */ -:root{ +/* ========================= + Base Palette + ========================= */ +:root { --c-verylow:#22c55e; --c-verylow-100:#dcfce7; --c-verylow-300:#86efac; --c-verylow-inv:#000; --c-low:#84cc16; --c-low-100:#ecfccb; --c-low-300:#bef264; --c-low-inv:#111; --c-mid:#eab308; --c-mid-100:#fef9c3; --c-mid-300:#fde047; --c-mid-inv:#111; --c-high:#f97316; --c-high-100:#ffedd5; --c-high-300:#fbbf24; --c-high-inv:#111; --c-veryhigh:#dc2626; --c-veryhigh-100:#fee2e2;--c-veryhigh-300:#fca5a5; --c-veryhigh-inv:#000; + --prosoft-normal:#6f3165; + --prosoft-inv:#fff; } -/* Helpers (wie Bulma) */ -.has-text-control-verylow{color:var(--c-verylow)!important} -.has-text-control-low{color:var(--c-low)!important} -.has-text-control-mid{color:var(--c-mid)!important} -.has-text-control-high{color:var(--c-high)!important} -.has-text-control-veryhigh{color:var(--c-veryhigh)!important} +/* ========================= + Helpers (similar to Bulma) + ========================= */ +.has-text-prosoft { color: var(--prosoft-inv) !important; } +.has-background-prosoft { background: var(--prosoft-normal) !important; color: var(--prosoft-inv) !important; } -.has-background-control-verylow{background:var(--c-verylow)!important;color:var(--c-verylow-inv)!important} -.has-background-control-low{background:var(--c-low)!important;color:var(--c-low-inv)!important} -.has-background-control-mid{background:var(--c-mid)!important;color:var(--c-mid-inv)!important} -.has-background-control-high{background:var(--c-high)!important;color:var(--c-high-inv)!important} -.has-background-control-veryhigh{background:var(--c-veryhigh)!important;color:var(--c-veryhigh-inv)!important} +.has-background-prosoft a, +.has-background-prosoft abbr { color: var(--prosoft-inv); } -/* Buttons */ -.button.is-control-verylow{background:var(--c-verylow);border-color:transparent;color:var(--c-verylow-inv)} -.button.is-control-low{background:var(--c-low);border-color:transparent;color:var(--c-low-inv)} -.button.is-control-mid{background:var(--c-mid);border-color:transparent;color:var(--c-mid-inv)} -.button.is-control-high{background:var(--c-high);border-color:transparent;color:var(--c-high-inv)} -.button.is-control-veryhigh{background:var(--c-veryhigh);border-color:transparent;color:var(--c-veryhigh-inv)} -.button.is-control-verylow:hover{filter:brightness(.92)} -.button.is-control-low:hover{filter:brightness(.92)} -.button.is-control-mid:hover{filter:brightness(.92)} -.button.is-control-high:hover{filter:brightness(.92)} -.button.is-control-veryhigh:hover{filter:brightness(.92)} -.button.is-control-verylow.is-light{background:var(--c-verylow-100);color:var(--c-verylow)} -.button.is-control-low.is-light{background:var(--c-low-100);color:var(--c-low)} -.button.is-control-mid.is-light{background:var(--c-mid-100);color:var(--c-mid)} -.button.is-control-high.is-light{background:var(--c-high-100);color:var(--c-high)} -.button.is-control-veryhigh.is-light{background:var(--c-veryhigh-100);color:var(--c-veryhigh)} +abbr { text-decoration: none; } -/* Tags */ -.tag.is-control-verylow{background:var(--c-verylow);color:var(--c-verylow-inv)} -.tag.is-control-low{background:var(--c-low);color:var(--c-low-inv)} -.tag.is-control-mid{background:var(--c-mid);color:var(--c-mid-inv)} -.tag.is-control-high{background:var(--c-high);color:var(--c-high-inv)} -.tag.is-control-veryhigh{background:var(--c-veryhigh);color:var(--c-veryhigh-inv)} -.tag.is-control-verylow.is-light{background:var(--c-verylow-100);color:var(--c-verylow)} -.tag.is-control-low.is-light{background:var(--c-low-100);color:var(--c-low)} -.tag.is-control-mid.is-light{background:var(--c-mid-100);color:var(--c-mid)} -.tag.is-control-high.is-light{background:var(--c-high-100);color:var(--c-high)} -.tag.is-control-veryhigh.is-light{background:var(--c-veryhigh-100);color:var(--c-veryhigh)} +/* ========================= + Colorized Text / Background + ========================= */ +.has-text-control-verylow { color: var(--c-verylow) !important; } +.has-text-control-low { color: var(--c-low) !important; } +.has-text-control-mid { color: var(--c-mid) !important; } +.has-text-control-high { color: var(--c-high) !important; } +.has-text-control-veryhigh{ color: var(--c-veryhigh) !important; } -/* Notifications */ -.notification.is-control-verylow{background:var(--c-verylow-100);border-left:4px solid var(--c-verylow);color:#111} -.notification.is-control-low{background:var(--c-low-100);border-left:4px solid var(--c-low);color:#111} -.notification.is-control-mid{background:var(--c-mid-100);border-left:4px solid var(--c-mid);color:#111} -.notification.is-control-high{background:var(--c-high-100);border-left:4px solid var(--c-high);color:#111} -.notification.is-control-veryhigh{background:var(--c-veryhigh-100);border-left:4px solid var(--c-veryhigh);color:#111} +.has-background-control-verylow { background: var(--c-verylow) !important; color: var(--c-verylow-inv) !important; } +.has-background-control-low { background: var(--c-low) !important; color: var(--c-low-inv) !important; } +.has-background-control-mid { background: var(--c-mid) !important; color: var(--c-mid-inv) !important; } +.has-background-control-high { background: var(--c-high) !important; color: var(--c-high-inv) !important; } +.has-background-control-veryhigh{ background: var(--c-veryhigh) !important; color: var(--c-veryhigh-inv) !important; } -/* Messages */ -.message.is-control-verylow .message-header{background:var(--c-verylow);color:var(--c-verylow-inv)} -.message.is-control-low .message-header{background:var(--c-low);color:var(--c-low-inv)} -.message.is-control-mid .message-header{background:var(--c-mid);color:var(--c-mid-inv)} -.message.is-control-high .message-header{background:var(--c-high);color:var(--c-high-inv)} -.message.is-control-veryhigh .message-header{background:var(--c-veryhigh);color:var(--c-veryhigh-inv)} -.message.is-control-verylow .message-body{border-color:var(--c-verylow-300)} -.message.is-control-low .message-body{border-color:var(--c-low-300)} -.message.is-control-mid .message-body{border-color:var(--c-mid-300)} -.message.is-control-high .message-body{border-color:var(--c-high-300)} -.message.is-control-veryhigh .message-body{border-color:var(--c-veryhigh-300)} +/* ========================= + Buttons + ========================= */ +.button.is-prosoft { background: var(--prosoft-normal) !important; color: var(--prosoft-inv) !important; } -/* Progress (optional) */ -.progress.is-control-verylow::-webkit-progress-value{background:var(--c-verylow)} -.progress.is-control-low::-webkit-progress-value{background:var(--c-low)} -.progress.is-control-mid::-webkit-progress-value{background:var(--c-mid)} -.progress.is-control-high::-webkit-progress-value{background:var(--c-high)} -.progress.is-control-veryhigh::-webkit-progress-value{background:var(--c-veryhigh)} -.progress.is-control-verylow::-moz-progress-bar{background:var(--c-verylow)} -.progress.is-control-low::-moz-progress-bar{background:var(--c-low)} -.progress.is-control-mid::-moz-progress-bar{background:var(--c-mid)} -.progress.is-control-high::-moz-progress-bar{background:var(--c-high)} -.progress.is-control-veryhigh::-moz-progress-bar{background:var(--c-veryhigh)} +.button.is-control-verylow, +.button.is-control-low, +.button.is-control-mid, +.button.is-control-high, +.button.is-control-veryhigh { + border-color: transparent; +} +.button.is-control-verylow { background: var(--c-verylow); color: var(--c-verylow-inv); } +.button.is-control-low { background: var(--c-low); color: var(--c-low-inv); } +.button.is-control-mid { background: var(--c-mid); color: var(--c-mid-inv); } +.button.is-control-high { background: var(--c-high); color: var(--c-high-inv); } +.button.is-control-veryhigh{ background: var(--c-veryhigh);color: var(--c-veryhigh-inv); } -abbr { - text-decoration: none; +.button.is-control-verylow:hover, +.button.is-control-low:hover, +.button.is-control-mid:hover, +.button.is-control-high:hover, +.button.is-control-veryhigh:hover { + filter: brightness(.92); } -/* Topbar-Farbe erzwingen (Bulma überschreibt sonst mit weiß) */ +.button.is-control-verylow.is-light { background: var(--c-verylow-100); color: var(--c-verylow); } +.button.is-control-low.is-light { background: var(--c-low-100); color: var(--c-low); } +.button.is-control-mid.is-light { background: var(--c-mid-100); color: var(--c-mid); } +.button.is-control-high.is-light { background: var(--c-high-100); color: var(--c-high); } +.button.is-control-veryhigh.is-light{ background: var(--c-veryhigh-100);color: var(--c-veryhigh); } + +/* ========================= + Tags + ========================= */ +.tag.is-prosoft { background: var(--prosoft-normal) !important; color: var(--prosoft-inv) !important; } + +.tag.is-control-verylow { background: var(--c-verylow); color: var(--c-verylow-inv); } +.tag.is-control-low { background: var(--c-low); color: var(--c-low-inv); } +.tag.is-control-mid { background: var(--c-mid); color: var(--c-mid-inv); } +.tag.is-control-high { background: var(--c-high); color: var(--c-high-inv); } +.tag.is-control-veryhigh{ background: var(--c-veryhigh);color: var(--c-veryhigh-inv); } + +.tag.is-control-verylow.is-light { background: var(--c-verylow-100); color: var(--c-verylow); } +.tag.is-control-low.is-light { background: var(--c-low-100); color: var(--c-low); } +.tag.is-control-mid.is-light { background: var(--c-mid-100); color: var(--c-mid); } +.tag.is-control-high.is-light { background: var(--c-high-100); color: var(--c-high); } +.tag.is-control-veryhigh.is-light{ background: var(--c-veryhigh-100);color: var(--c-veryhigh); } + +/* ========================= + Notifications + ========================= */ +.notification.is-control-verylow { background: var(--c-verylow-100); border-left: 4px solid var(--c-verylow); color:#111; } +.notification.is-control-low { background: var(--c-low-100); border-left: 4px solid var(--c-low); color:#111; } +.notification.is-control-mid { background: var(--c-mid-100); border-left: 4px solid var(--c-mid); color:#111; } +.notification.is-control-high { background: var(--c-high-100); border-left: 4px solid var(--c-high); color:#111; } +.notification.is-control-veryhigh{ background: var(--c-veryhigh-100);border-left: 4px solid var(--c-veryhigh);color:#111; } +.notification.is-prosoft { background: var(--prosoft-normal) !important; border-left: var(--prosoft-inv) !important; } + +/* ========================= + Messages + ========================= */ +.message.is-control-verylow .message-header { background: var(--c-verylow); color: var(--c-verylow-inv); } +.message.is-control-low .message-header { background: var(--c-low); color: var(--c-low-inv); } +.message.is-control-mid .message-header { background: var(--c-mid); color: var(--c-mid-inv); } +.message.is-control-high .message-header { background: var(--c-high); color: var(--c-high-inv); } +.message.is-control-veryhigh .message-header{ background: var(--c-veryhigh);color: var(--c-veryhigh-inv); } + +.message.is-control-verylow .message-body { border-color: var(--c-verylow-300); } +.message.is-control-low .message-body { border-color: var(--c-low-300); } +.message.is-control-mid .message-body { border-color: var(--c-mid-300); } +.message.is-control-high .message-body { border-color: var(--c-high-300); } +.message.is-control-veryhigh .message-body{ border-color: var(--c-veryhigh-300); } + +.message.is-prosoft { border-color: var(--prosoft-normal); } + +/* ========================= + Progress bars + ========================= */ +.progress.is-control-verylow::-webkit-progress-value { background: var(--c-verylow); } +.progress.is-control-low::-webkit-progress-value { background: var(--c-low); } +.progress.is-control-mid::-webkit-progress-value { background: var(--c-mid); } +.progress.is-control-high::-webkit-progress-value { background: var(--c-high); } +.progress.is-control-veryhigh::-webkit-progress-value{ background: var(--c-veryhigh); } + +.progress.is-control-verylow::-moz-progress-bar { background: var(--c-verylow); } +.progress.is-control-low::-moz-progress-bar { background: var(--c-low); } +.progress.is-control-mid::-moz-progress-bar { background: var(--c-mid); } +.progress.is-control-high::-moz-progress-bar { background: var(--c-high); } +.progress.is-control-veryhigh::-moz-progress-bar{ background: var(--c-veryhigh); } + +.progress.is-prosoft { background: var(--prosoft-normal) !important; } + +/* ========================= + Navbar / Topbar + ========================= */ .navbar.topbar-nav { - background-color: #d6801e !important; /* Orange wie im Screenshot */ + background-color: #d6801e !important; /* Orange as in screenshot */ box-shadow: none; } - -/* Textfarben in der Topbar */ .navbar.topbar-nav .navbar-item, -.navbar.topbar-nav .navbar-link { - color: #111; -} +.navbar.topbar-nav .navbar-link { color: #111; } .navbar.topbar-nav .navbar-item:hover, .navbar.topbar-nav .navbar-link:hover { background-color: rgba(0,0,0,.04); color: #111; } +.navbar.topbar-nav .navbar-link::after { border-color: #6b2bbd; } /* purple arrow */ -/* Dropdown-Pfeil in lila */ -.navbar.topbar-nav .navbar-link::after { - border-color: #6b2bbd; /* lila */ -} +/* Logo block */ +.logo { background-color: var(--prosoft-normal) !important; color: #fff; } +.logo .logo-text { color: #fff; font-weight: 700; } -/* Lila Logo-Kachel links */ -.logo { - background: #5a2a82 !important; - color: #fff; - -} -.logo .logo-text { - color: #fff; - font-weight: 700; -} - -/* Rechte Seite: Suche + Profil */ +/* ========================= + Layout Elements + ========================= */ .actions { display: flex; align-items: center; gap: 10px; padding-right: 10px; } .search { border: 1px solid #c7c7c7; border-radius: 4px; padding: 4px 8px; font-size: 14px; } -.profile { background: #3c7d74; color: #fff; width: 28px; height: 28px; border-radius: 9999px; - display: flex; align-items: center; justify-content: center; font-weight: 700; } +.profile { background: #3c7d74; color: #fff; width: 28px; height: 28px; border-radius: 9999px; display: flex; align-items: center; justify-content: center; font-weight: 700; } -/* Inhalt darunter */ .content { background: #fafafa; min-height: calc(100vh - 3.25rem); } .home-icon { font-size: 20px; display: inline-block; margin: 10px; } -/* Dropdown optisch näher am Screenshot */ .navbar-dropdown { border-top: none; box-shadow: 0 8px 16px rgba(0,0,0,.1); } -/* Breadcrumbs */ -.top-breadcrumb { padding: 10px 0;} +/* ========================= + Breadcrumbs + ========================= */ +.top-breadcrumb { padding: 10px 0; } +.breadcrumb:not(:last-child) { margin-bottom: 0; border-bottom: 1px solid var(--prosoft-normal); } +.breadcrumb { background-color: #f0ebeb; } +.breadcrumb a { color: var(--prosoft-normal) !important; } -.breadcrumb { - margin-bottom: 20px; - background-color: #f0ebeb; -} +/* ========================= + Lists inside .content + ========================= */ +.content li { margin-top: 5px !important; } +.content li+li { margin: 0 !important; } -.content li{ - margin-top: 5px !important; -} +/* ========================= + Dark Mode + ========================= */ +body.dark-mode { background-color: #121212; color: #f5f5f5; } +body.dark-mode .box { background-color: #1e1e1e; color: #f5f5f5; } +body.dark-mode a { color: #bb86fc; } -.content li+li { - margin: 0 !important; -} - - -/* DARK MODE */ - -/* static/css/custom.css */ -body.dark-mode { - background-color: #121212; - color: #f5f5f5; -} - -body.dark-mode .box { - background-color: #1e1e1e; - color: #f5f5f5; -} - -/* Optional: Buttons, Links etc. anpassen */ -body.dark-mode a { - color: #bb86fc; -} - -/* Ticket-Button (ID links, Text rechts) */ -.risk-chip{ +/* ========================= + Risk Chip (custom widget) + ========================= */ +.risk-chip { --chip-w: 260px; --chip-id-w: 40px; width: var(--chip-w); display: inline-flex; + flex-direction: column; /* stacked style */ align-items: stretch; border: 0; border-radius: 8px; @@ -180,13 +201,7 @@ body.dark-mode a { background: var(--chip-bg, #eee); color: var(--chip-fg, #111); } - -.risk-chip{ - display:inline-flex; - flex-direction:column; /* <— neu */ -} - -.risk-chip .chip-head{ +.risk-chip .chip-head { padding:.35rem .6rem; font-size:.75rem; font-weight:700; @@ -196,14 +211,10 @@ body.dark-mode a { background:rgba(0,0,0,.10); border-bottom:1px solid rgba(0,0,0,.12); } +.risk-chip .chip-main { display:flex; align-items:stretch; } -.risk-chip .chip-main{ - display:flex; - align-items:stretch; -} - -/* linke ID-Spalte mit leichter Textur */ -.risk-chip .chip-id{ +/* left ID column with texture */ +.risk-chip .chip-id { flex: 0 0 var(--chip-id-w); display: grid; place-items: center; @@ -211,18 +222,18 @@ body.dark-mode a { position: relative; background: rgba(0,0,0,.06); } -.risk-chip .chip-id::after{ +.risk-chip .chip-id::after { content:""; position: absolute; inset:0; background: - linear-gradient( to right, rgba(255,255,255,.15), rgba(0,0,0,.08) 60% ), + linear-gradient(to right, rgba(255,255,255,.15), rgba(0,0,0,.08) 60%), repeating-linear-gradient(135deg, rgba(255,255,255,.12) 0 6px, transparent 6px 12px); mix-blend-mode: soft-light; opacity:.6; } -/* rechte Text-Spalte */ -.risk-chip .chip-label{ +/* right text column */ +.risk-chip .chip-label { flex: 1 1 auto; padding: .5rem .75rem; line-height: 1.25; @@ -232,49 +243,61 @@ body.dark-mode a { min-height: 2.25rem; } -/* Farbzuteilung aus deinen Custom-Klassen */ +/* Color assignments for chip */ .risk-chip.is-control-verylow { --chip-bg: var(--c-verylow); --chip-fg: var(--c-verylow-inv); } .risk-chip.is-control-low { --chip-bg: var(--c-low); --chip-fg: var(--c-low-inv); } .risk-chip.is-control-mid { --chip-bg: var(--c-mid); --chip-fg: var(--c-mid-inv); } .risk-chip.is-control-high { --chip-bg: var(--c-high); --chip-fg: var(--c-high-inv); } .risk-chip.is-control-veryhigh{ --chip-bg: var(--c-veryhigh); --chip-fg: var(--c-veryhigh-inv); } -/* Responsiv: auf schmalen Screens volle Breite */ -@media (max-width: 480px){ - .risk-chip{ width: 100%; } -} - -@media (max-width: 1215px) { - .risk-chip { --chip-w: 100%; width: var(--chip-w); } -} - -/* Container für Avatar + Badge */ -.avatar-wrap { - position: relative; - display: inline-block; -} +/* Responsive */ +@media (max-width: 480px) { .risk-chip{ width: 100%; } } +@media (max-width: 1215px){ .risk-chip{ --chip-w: 100%; width: var(--chip-w); } } +/* ========================= + Avatar with badge + ========================= */ +.avatar-wrap { position: relative; display: inline-block; } .avatar-wrap .badge { position: absolute; - top: -0.35rem; - right: -0.35rem; - min-width: 1.25rem; - height: 1.25rem; + top: -0.35rem; right: -0.35rem; + min-width: 1.25rem; height: 1.25rem; padding: 0 .25rem; - font-size: 0.75rem; - line-height: 1.25rem; - display: flex; - align-items: center; - justify-content: center; + font-size: 0.75rem; line-height: 1.25rem; + display: flex; align-items: center; justify-content: center; box-shadow: 0 0 0 2px #fff; } - .avatar-wrap .tag.is-medium + .badge { - min-width: 1.15rem; - height: 1.15rem; - font-size: 0.70rem; - line-height: 1.15rem; + min-width: 1.15rem; height: 1.15rem; + font-size: 0.70rem; line-height: 1.15rem; +} +/* Dark navbar badge shadow */ +.navbar.is-dark .avatar-wrap .badge { box-shadow: 0 0 0 2px hsl(229, 53%, 18%); } + +/* ========================= + Bulma Design Changes + ========================= */ + +/* ERP-style horizontal tabs */ +.erp-tabs { + display: flex; + border-bottom: 2px solid var(--prosoft-normal); + margin-bottom: 1rem; } -/* Dark-Mode/ -.navbar.is-dark .avatar-wrap .badge { box-shadow: 0 0 0 2px hsl(229, 53%, 18%); } \ No newline at end of file +.erp-tabs a { + padding: 0.5rem 1rem; + color: #111; + text-decoration: none; + font-weight: 500; + border-bottom: 3px solid transparent; +} + +.erp-tabs a.is-active { + color: var(--prosoft-normal); + border-color: var(--prosoft-normal); +} + +.erp-tabs a:hover { + background: rgba(0,0,0,.03); +} diff --git a/templates/base.html b/templates/base.html index a5a907c..b8bb779 100644 --- a/templates/base.html +++ b/templates/base.html @@ -122,7 +122,7 @@
{% trans "Total Risks" %}
-{% trans "Total Risks" %}
+{{ risks_total }}
+{% trans "Residual Risks Needing Review" %}
+{% trans "Residual Risks Needing Review" %}
+{{ residual_review_required }}
{% trans "Unread Notifications" %}
+{% trans "Unread Notifications" %}
+{{ notifications_unread }}
{{ count }} {% trans "Risks" %}
-{{ count }} {% trans "Risks" %}
-{{ count }} {% trans "Risks" %}
-{% trans "Status" %} | +{% trans "Count" %} | +
---|---|
{{ row.status|control_status_label }} | +{{ row.count }} | +
{% trans "No data" %} |
{% trans "Status" %} | +{% trans "Count" %} | +
---|---|
{{ row.status|incident_status_label }} | +{{ row.count }} | +
{% trans "No data" %} |