Přeskočit obsah

Administrace

Stránky dostupné pouze pro roli Admin.


Nastavení (/settings)

📸 Screenshot: Stránka nastavení s formulářem pro e-mail správce a konfiguraci převodek

Systémová nastavení spravovaná přes EvaSettingsService:

Nastavení Popis
AssetManagerEmail E-mailová adresa správce majetku — příjemce notifikací o převodkách
ArticleTransfer.RequirePin Vyžadovat PIN při potvrzení převodky (true/false)
ArticleTransfer.EmailNotification Odesílat e-mailové notifikace (true/false)

Systémové informace (/system-info)

📸 Screenshot: Stránka systémových informací — verze aplikace, DB host, velikost DB

Zobrazuje live informace o prostředí:

Kategorie Informace
Aplikace Verze, prostředí (Development/Docker/Production), build datum
Databáze Host, port, název DB, verze PostgreSQL
Server Verze .NET runtime, OS, hostname
Využití DB Velikost databáze, počet záznamů v klíčových tabulkách

Data sbírá SystemInfoDataService (kombinuje AppEnv, IHostEnvironment a živý PostgreSQL dotaz).


Monitoring (/monitoring)

📸 Screenshot: Monitoring dashboard — grafy využití paměti, GC generace, thread pool, health status

Stránka pro sledování výkonu serveru v reálném čase.

Zobrazované metriky

Metrika Popis
Paměť (RSS) Celkové využití paměti procesu
GC Heap Využití managed haldy (.NET GC)
GC generace Počty GC za generace (Gen0, Gen1, Gen2)
Thread pool Aktivní a čekající vlákna
Health status Celkový stav: Healthy / Degraded / Unhealthy

Health endpointy

Endpoint Určení Popis
/health Docker healthcheck Jednoduchý OK/Fail
/health/details Monitoring systémy JSON s detailním stavem DB a paměti

Prometheus

Metriky jsou exportovány na /metrics ve formátu Prometheus. Doporučené Grafana dashboardy:

Dashboard Grafana ID Popis
.NET Runtime Metrics 10427 GC, thread pool, alokace
ASP.NET Core 23179 HTTP požadavky, latence

Konfigurace v Docker Compose

# Prometheus scrape job (prometheus.yml)
scrape_configs:
  - job_name: 'eva-manager'
    static_configs:
      - targets: ['manager:8080']
    metrics_path: '/metrics'
    scrape_interval: 15s

Správa uživatelů (/users)

📸 Screenshot: Seznam uživatelů s přehledem rolí a stavem účtu

Správa ASP.NET Identity uživatelů: - Přidání / editace uživatelů - Přiřazení rolí (Admin, Manager, User) - Aktivace / deaktivace účtů - Nastavení PIN pro mobilní aplikaci

TenantAdmin

Uživatel s rolí TenantAdmin vidí pouze uživatele svého tenanta — filtrování probíhá automaticky dle TenantID claimu.


AI Asistent (/ai-chat)

Integrovaný AI chatbot pro správce a analytiky. Stránka je přístupná z menu jako AI Asistent a vyžaduje přihlášení ([Authorize]).

Architektura

DxAIChat (UI)
    └─► IChatClient
            └─► EvaToolsMiddleware  (DelegatingChatClient)
                    ├─► OpenAI API  (GPT model, streaming)
                    └─► EvaAiFunctions  (nástroje volané funkcemi)
                            ├─► EvaDataContext  (PostgreSQL)
                            └─► EvaDocumentationService  (Markdown soubory)

EvaToolsMiddleware zajišťuje automatické vkládání nástrojů do každého volání API a zároveň ukládá průběh konverzace do databáze.

Dostupné AI nástroje

Nástroj Popis
eva_query_assets Dotaz na seznam artiklů s filtry (kategorie, stav, lokace, uživatel)
eva_aggregate_assets Agregace majetku — COUNT a SUM(Price) dle zadaných parametrů, bez LIMIT
eva_query_inventories Dotaz na inventury s filtry (stav, datum, lokace)
eva_query_transfers Dotaz na převodky majetku s filtry (stav, uživatel, datum)
eva_query_users Seznam uživatelů s filtrem dle jména/aktivity, volitelně s počty přiřazeného majetku
eva_query_user_assets Majetek přiřazený konkrétnímu uživateli
eva_search_docs Fulltext vyhledávání v Markdown dokumentaci (top 3 výsledky, max 2 000 znaků)

Historie konverzací

Každá konverzace je persistována do databáze pomocí AiConversationService:

Entita Tabulka Popis
AiChatSession dbo.AiChatSession Hlavička relace (uživatel, datum, název)
AiChatMessage dbo.AiChatMessage Jednotlivé zprávy, tool_call a tool_result záznamy

Záznamy jsou určeny pro audit a ladění. EvaToolsMiddleware automaticky loguje user zprávy, AI odpovědi i volání nástrojů.

Diagnostický endpoint /ai/status

Anonymně přístupný endpoint pro ověření konfigurace AI:

GET /ai/status

Vrací JSON se stavem konfigurace (provider, model, zda je API klíč nastaven). Vhodný pro Docker healthcheck nebo monitoring.

Konfigurace

Sekce AI v appsettings.json:

{
  "AI": {
    "Provider": "OpenAI",
    "Model": "gpt-4o",
    "MaxTokens": 2000,
    "Temperature": 0.3,
    "DocsPath": "/app/docs"
  }
}

Pro Docker prostředí se hodnoty přebírají z env proměnných AI_API_KEY, AI_PROVIDER, AI_MODEL.

Pokud API klíč chybí, systém použije DisabledChatClient — placeholder, který vrací srozumitelnou chybovou zprávu místo pádu aplikace.


Správa tenantů — Super Admin

Dostupnost

Tato sekce je dostupná pouze při Multitenancy:Enabled = true v konfiguraci a pro roli SuperAdmin.

Registrace nové firmy (/account/tenant-registration)

Veřejně přístupná stránka — nevyžaduje přihlášení. Slouží pro samoobslužnou registraci nové organizace v SaaS režimu.

Pole Popis
Název firmy Zobrazovaný název organizace (Tenant.Name)
E-mail Kontaktní e-mail administrátora
Heslo Heslo prvního admin účtu

Po odeslání formuláře systém: 1. Vytvoří nový záznam Tenant 2. Vytvoří ApplicationUser s rolí TenantAdmin a přiřazeným TenantID 3. Inicializuje výchozí číselníky (kategorie, typy, stavy majetku) pro nového tenanta

Přehled tenantů (/admin/tenants)

DxGrid se všemi registrovanými organizacemi. Dostupné akce:

Akce Popis
Aktivovat / Deaktivovat Okamžitě zablokuje nebo povolí přístup všem uživatelům tenanta
Detail Přechod na správu uživatelů filtrovanou na daného tenanta

Odkaz v navigačním menu se zobrazí pouze uživatelům s rolí SuperAdmin.

Správa uživatelů tenanta (/admin/tenant-users)

💡 Stránka umožňuje SuperAdminovi spravovat uživatele libovolného tenanta bez nutnosti přihlašovat se za daného tenanta.

  1. Vybrat tenant v DxComboBox
  2. DxGrid zobrazí uživatele daného tenanta
  3. Toolbar akce: Nový (přejde na /account/create-user?tenantId=X), Editovat, Smazat, Export CSV

Export CSV stáhne soubor uzivatele_{TenantName}_{datum}.csv ve formátu kompatibilním s importní šablonou:

Jmeno;Prijmeni;Email;Barcode;RFID;PIN

Export / Import dat tenanta (/admin/tenant-export)

💡 Záloha nebo přenos kompletních dat tenanta (majetek, umístění, inventury, číselníky) ve formátu JSON.

Export: - Stáhne JSON soubor se všemi daty vybraného tenanta - Název souboru: eva-export-tenant{ID}-{datum}.json

Import (Obnovení): - Nahraje JSON soubor exportu - Přemazání stávajících dat tenanta (DELETE + INSERT v transakci) - Podporuje cross-tenant import — data lze přenést i do jiného tenanta

Nevratná operace

Import přemazání odstraní veškerá stávající data tenanta. Akci nelze vrátit.

Technický detail — INSERT bez OID

Při importu jsou entity vkládány bez původních OID — databáze přiděluje nové ID z PostgreSQL sekvencí (RETURNING "OID"). Pro každou vrstvu je sestavena mapa starý OID → nový OID a všechny FK reference jsou přemapovány. Tím se eliminují PK kolize při importu do odlišné DB nebo jiného tenanta.

flowchart TD
    A[JSON export] --> B[DELETE dat cílového tenanta]
    B --> C[INSERT číselníky → catMap, typeMap, stateMap]
    C --> D[INSERT lokace → locMap s remap ParentLocationID]
    D --> E[INSERT artikly → artMap s remap FK]
    E --> F[INSERT umístění artiklu]
    F --> G[INSERT inventury → invMap]
    G --> H[INSERT položky inventur → invItemMap]
    H --> I[UPDATE Article.LastInventoryItemID]
    I --> J[COMMIT]

Import nástrojů

Stránka URL Role Popis
Import artiklů /tools/import-articles Admin, TenantAdmin Hromadný import majetku z CSV
Import uživatelů /tools/import-users Admin, TenantAdmin Hromadný import uživatelů z CSV
Import EMA /tools/import-ema Admin Import z externího systému EMA

Import majetku z CSV (/tools/import-articles)

💡 Import majetku ze středníkem odděleného CSV souboru do aktuálního tenanta.

CSV formát (sablona_majetek.csv):

Sloupec Povinný Popis
Kod Ne Inventární číslo
Nazev Ano Název majetku
Kategorie Ne Název kategorie — chybějící se vytvoří automaticky
Typ Ne Název typu — chybějící se vytvoří automaticky
Stav Ne Název stavu — chybějící se vytvoří automaticky
Poznamka Ne Interní poznámka
Cena Ne Pořizovací cena v CZK (desetinná čárka, např. 45000,50)
SerioveCislo Ne Sériové číslo výrobce
RFID Ne RFID čip
DatumPorizeni Ne Datum pořízení (dd.MM.yyyy)
DatumZacatkuUzivani Ne Datum začátku používání (dd.MM.yyyy)
CisloFaktury Ne Číslo faktury
Mnozstvi Ne Množství (výchozí: 1)

Volba Smazat vše před importem odstraní stávající majetek tenanta před vložením nových záznamů.

Import uživatelů z CSV (/tools/import-users)

💡 Hromadné přidávání uživatelů z CSV — stávající uživatelé (dle e-mailu) jsou přeskočeni, nikdy smazáni.

CSV formát (sablona_uzivatele.csv):

Sloupec Povinný Popis
Jmeno Ano Křestní jméno
Prijmeni Ano Příjmení
Email Ano E-mail — unikátní přihlašovací jméno
Barcode Ne Čárový kód
RFID Ne RFID čip
PIN Ne PIN pro terminál

Importovaní uživatelé nemají nastaveno heslo — musí jej nastavit admin nebo použít funkci „Zapomenuté heslo".