Tickety maji zalozky, fronta umi prirazovat

Seznam ticketu mel dva prepinace, "Moje tickety" a "Ve fronte", schovane mezi
ostatnimi filtry - splyvaly s nimi a vypadaly jako dalsi dva chipy. Jenze "co
mam u sebe", "co jeste nikdo nema" a "co je ve firme" nejsou filtry, jsou to
tri ruzne prace a kazda chce jinou tabulku.

Tri zalozky:

- Moje tickety, pro toho, kdo je veden jako resitel. Bez sloupce Resi, byl by
  tam porad on
- Nezarazene, pro kazdeho. Radky s rychlym prirazenim
- Vsechny tickety, jen pro toho, kdo vidi i cizi. Sloupec Resi a filtr na sekce

Sloupec Resi je jen ve Vsech: v Mych by ve vsech radcich stalo tyz jmeno a ve
fronte je z definice prazdny. Az v prehledu vsech ma smysl videt, kdo co ma
u sebe.

Zalozka Vsechny se nenabizi tomu, kdo vidi jen svoje - byl by to tentyz seznam.
Rika to Access.seesOthers, a Access.visibleGroups k tomu prida sekce, ktere smi
filtrovat: kdo vidi celou firmu vsechny, vedouci jen ty, ktere vede.

Nova QuickAssign: u kazdeho ticketu ve fronte tlacitko Vzit si a dve roletky,
komu a do ktere sekce. Prirazeni je ve fronte hlavni prace, ne jedna z mnoha
veci na detailu - otevirat kvuli tomu kazdy ticket znamena u dvaceti ticketech
ctyricet kliknuti navic. Dve roletky, ne jedna: clovek a sekce jsou dve ruzna
rozhodnuti. Kdo nesmi rozdavat praci ostatnim, vidi jen Vzit si. Endpointy uz
existovaly, nova je jen cesta k nim.

Vychozi zalozka se odvodi z adresy: odkaz z widgetu nese assignee, takze
unassigned otevre frontu a konkretni resitel nebo sekce pohled Vsechny. Bez
toho by clovek prisel z dlazdice "fronta bez resitele" a koukal na svoje.

Do navrhu 25 zapsano, ze hledani ma zapadnout do zalozky, ve ktere clovek stoji,
ne ji obejit, a vysledek se ma vracet do te same zalozky.

Overeno na bezici instanci: spravce platformy ma zalozku Vsechny a vsechny sekce
ve filtru, Vomacka jako vedouci Servicedesku jen svoji sekci, Kriz jako radovy
clen zalozku Vsechny nema. A cely pohyb ticketu frontou: admin preda TK-4819 do
sekce, Kriz ho vidi ve fronte, vezme si ho a objevi se mu v Mych ticketech.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-09-02 12:48:15 +02:00
co-authored by Claude Opus 5
parent 52999a961b
commit e701bc0e2c
6 changed files with 394 additions and 31 deletions
+23
View File
@@ -102,6 +102,20 @@ export interface Access {
nav: NavItem[];
/** true = vidi napric firmami a smi platformni nastaveni. */
platformAdmin: boolean;
/**
* Vidi i cizi tickety, ne jen svoje a frontu?
*
* Podle toho se nabizi zalozka "Vsechny tickety". Kdo vidi jen svoje,
* nema co prepinat - zalozka by mu ukazala totez co ta prvni.
*/
seesOthers: boolean;
/**
* Sekce, na ktere clovek vidi. Filtr v zalozce "Vsechny tickety".
*
* Kdo vidi celou firmu, dostane vsechny. Vedouci jen ty, ktere vede -
* nabidnout mu sekci, ze ktere stejne nic neuvidi, je jen matouci.
*/
visibleGroups: Array<{ id: string; name: string }>;
}
/**
@@ -133,6 +147,13 @@ export function accessFor(user: User, tenantId?: string | null): Access {
const defaultTenantId = tenants[0]?.id ?? null;
const activeTenant = tenantId ?? defaultTenantId;
const visibility = visibilityFor(user, activeTenant);
const groups = activeTenant ? listGroups([activeTenant]) : [];
const visibleGroups =
visibility.kind === 'all'
? groups
: groups.filter((group) => visibility.groupIds.includes(group.id));
return {
scopes,
tenants: tenants.map((tenant) => ({ id: tenant.id, name: tenant.name })),
@@ -145,6 +166,8 @@ export function accessFor(user: User, tenantId?: string | null): Access {
permissions: [...permissionsOf(user, activeTenant)].sort(),
nav: navFor(user, activeTenant),
platformAdmin: user.platformAdmin,
seesOthers: visibility.kind === 'all' || visibility.groupIds.length > 0,
visibleGroups: visibleGroups.map((group) => ({ id: group.id, name: group.name })),
};
}