# Specifikace uživatelského rozhraní pro úkoly v aplikaci Swordfish
## Slovníček
### UI prvky
- **karta** znamená jedna z "podstránek" stránky s úkolem, mezi kterými se dá přepínat v navigaci v horní liště a z nichž je vždy zobrazena právě jedna; aktuální návrh u všech úkolů počítá s právě dvěma kartami:
- karta ***Plnění úkolu***, kterou bude používat zejména skladník nebo balič a která obsahuje vše, co je potřeba k úspěsnému dokončení úkolu (nahrazuje původní karty *(Název úkolu)* a *Dokončení*)
- karta ***Detaily***, která nahrazuje původní kartu *Zadání* a zároveň nabízí alternativní a negativní možnosti dokončení úkolu
- **box** znamená obdélník se zaoblenými rohy, kterých je většinou na obrazovce vidět několik, mohou být i vnořené (ve Figmě jde zejména o komponenty začínající *common/box*)
- **nápověda** je neklikatelný box s krátkým textovým návodem, co je v aktuální situaci možné udělat (ve Figmě *common/box/instructions*)
- **zvýrazněný** znamená barevně podbarvený (ve Figmě aktuálně odstíny okrové), což se používá pro boxy, nápovědy atd., které by měly upoutat pozornost uživatele, protože se s nimi právě pracuje nebo bude pracovat
- **FAB** (floating action button) je kulaté tlačítko v pravém spodním rohu displeje, které zůstává na místě a většinou překrývá část obsahu obrazovky
- **disabled** - cokoliv, co nemá dostatečný kontrast (tj. obsahuje ) a jeví se jako neklikatelná komponenta
### Proces
- **naskenování** znamená použití čtečky k naskenování jednoho čárového kódu (nápovědy v UI typicky používají pojem "naskenování" jakožto popis happy-case průběhu, přestože prakticky vždy je možné místo toho provést i manuální zadání)
- **manuální zadání kódu** znamená zadání textové hodnoty čárového kódu (jako alternativa k naskenování např. v případě poškozeného kódu nebo nefunkční čtečky)
- **načtení** znamená naskenování NEBO manuální zadání kódu
- **focusnout** znamená vybrat jedno umístění nebo položku, se kterým uživatel pracuje (např. umístění, z nějž právě vyskladňuje nebo položku, kterou má "rozskenovanou"); focusnutý box je typicky zvýrazněný
- **unfocusnout** znamená zrušit focusnutí umístění (ukončení práce na tomto umístění) nebo položky (ukončení práce s touto položkou)
## Horní lišta
Odstín horní lišty byl sjednocen na barvu horní části lišty v předchozí verzi. Byl změněn design vybrané karty. Počet karet byl redukován na dvě - ["Plnění úkolu"](#Karta-Plnění-úkolu), ["Detaily"](#Karta-Detaily) jejichž detailní popis lze nalézt v sekcích níže.
## Progress bar
Progress bar je zcela nová funkce, která se snaží vizualizovat, jak velká část úkolu již byla splněna. Totéž je v procentech popsáno pod řádkem *Hotovo*. Maximem je vždy *Objem práce* úkolu a způsob výpočtu procentuálního progressu je popsán u každého z úkolů níže.
Vybarvená část progress baru barevně indikuje prioritu úkolu (červená, žlutá, zelená), a proto by měla být část vybarvená i při 0% progressu (při prvním otevření úkolu, např. viz *Frame/PickingGroup/1* na stránce *Mobile*). Pak se tato vybarvená část rozšiřuje přímo úměrně procentu v *Hotovo* (*Frame/ProgressBar*).
V mobilní verzi má progress bar podobu boxu na začátku karty *Plnění úkolu* a obsahuje hodnoty *Objem práce* a *Hotovo*, při scrollování dolů se "zúží" na 5px proužek přilepený na spodním okraji horní lišty (např. *Frame/PickingGroup/7*). Mezi těmito stavy by se hodil nějaký krásný CSS pře
chod. glhf :) Na ostatních kartách má vždy podobu 5px proužku.
V desktopové verzi má progress bar vždy podobu širokého boxu, který je zafixovaný pod horní lištou (a pod breadcrumbs) a do kterého by se měly vejít všechny důležité body ze zadání úkolu (seřazené a zarovnané zleva) i hodnoty *Objem práce* a *Hotovo* (zarovnané zprava).
## Karta Detaily
Na kartě "Detaily" se nachází několik boxů s detaily úkolu a možnými akcemi jako je pro vedoucího: "Dokončit úkol", "Stornovat úkol" či "Odpřiřadit úkol", nebo pro skladníka: "Předat ke schválení" či "Odpřiřadit úkol".
Pokud se jedná o skupinu vyskladnění, je možné si jednotlivá vyskladnění prohlédnout kliknutím na ně, což vede k přesměrování na vyskladnění.
První box mění barvu podle priority úkolu - červená pro vysokou prioritu, bílá pro normální prioritu a zelená pro nízkou prioritu.
Ikony (typ úkolu a stav) používané v boxech jsou sepsané se svými významy ve Figmě na Page Desktopu.
Tabulka s přehledem produktů obsahuje hlavně počet položek a počet kusů. Sloupce jsou alespoň Položka, Množství a Umístění, v případě desktopu by se dala tabulka roztáhnout a přidat více sloupců. lka není rozbalovací ale stránkovaná. Jednotlivé položky je možné filtrovat s pomocí filtrů. Na název položky je možné kliknout a zobrazí se tak její detail.
## Karta Plnění úkolu
Na kartě "Plnění úkolu" může uživatel splnit samotný úkol. Na mobilu je všechno zobrazováno v jednom sloupci, přičemž komponenty (položky/umístění), se kterými už uživatel dopracoval, jsou skládány "nad" aktuálně zobrazovanou obrazovku - je potřeba zascrollovat nahoru, aby se zobrazily. Komponenty, se kterými se zrovna pracuje, jsou zvýrazněné a přilepené u horní části obrazovky, obvykle ještě pod informací, co bylo naposledy načteno. A komponenty, které teprve čekají na zpracování, jsou naskládány dále níže na obrazovce.
Na desktopu je pak rozdělena obrazovka do 3 sloupců. V levém sloupci se zobrazuje [Manuální zadání kódu, fronta a poslední načtení](#Manuální-zadání-kódu-fronta-a-poslední-načtení), v prostředním aktuálně focusnutá komponenta a to, co zbývá ke zpracování. V pravém se pak zobrazují již zpracované komponenty.
## Detail položky
Po kliknutí na box s položkou vyjede zespodu obrazovky panel s detailem položky (*Frame/ItemDetail/1*). Na mobilu jsou jednotlivé podkomponenty naskládány pod sebe, na desktopu jsou rozděleny do 3 sloupců, které jsou nezávisle na sobě scrollovatelné.
V levém sloupci (na mobilu hned pod názvem) jsou obrázky zobrazované v komponentě pracovně nazvané "kolotoč". Jeden z obrázků se vždy zobrazuje zvětšený (na mobilu je to ten uprostřed), ve výchozím stavu nejlépe hlavní obrázek položky. Ostatní obrázky jsou seřazené "v cyklickém bufferu" kolem něj, přičemž nejbližší 2 (na desktopu 3) se také zobrazují, ale jsou menší. Klikáním na šipky po stranách se kolotoč otáčí, čímž se mění se obrázky na všech pozicích (posun vždy o jednu pozici doleva nebo doprava). Pokud je obrázků u položky evidováno více než 3 (resp. 4 na desktopu), jsou některé obrázky schovány, ale stále jsou připravené v bufferu, takže se po dostatečném počtu kliků dostane na obrazovku každý obrázek. Kliknutím na jeden z obrázků - kromě prostředního (zvětšeného) - se tento obrázek posune doprostřed kolotoče a zbytek se pootočí odpovídajícím způsobem. Kliknutím na prostřední obrázek se zobrazí ještě větší detail tohoto obrázku (*Frame/ItemDetail/4*). Jedním z obrázků v kolotoči je vždy i speciální ikona symbolizující přidání nového obrázku, která by ideálně měla být viditelná na obrazovce (jako jeden ze zmenšených obrázků) už ve výchozím stavu. Po jejím zacentrování a kliknutím pro zobrazení ještě většího detailu se zobrazí dialog pro přidání obrázku.
V prostředním sloupci jsou pak základní informace o položce a čárové kódy. Na mobilu je tato sekce ve výchozím stavu zabalená. Ikonkou + u nadpisu lze přidat nový čárový kód, ikonkou oka lze každý čárový kód zobrazit (zobrazuje se skutečně vyrenderovaný čárové kód), popř. i vytisknout (*Frame/ItemDetail/3*).
Pravý sloupec je pak závislý na kontextu podle úkolu a stavu plnění úkolu. Například při zobrazení panelu z karty Detaily se v tomto sloupci zobrazí seznam umístění, na kterých se položka nachází - pokud je u umístění evidována dostupnost, zobrazuje se u příslušné položky za ikonkou vozíku. Pokud je umístění nabízeno hodně, zobrazí se několik prvních (ideálně asi s největším počtem kusů) a zbytek je možné rozbalit tlačítkem (aka posledním boxíkem v nabídce) s ikonkou *v*. Pokud je panel zobrazen u položky, která je už přesunuta na cílovém umístění nebo je zrovna v přesunu, zobrazí se komponenta vrácení položky, viz [vracení ve zpětném chodu](#Vracení-podle-položek).
## Rychlé přidávání položek
Komponenty *common/item-bubble-focused-with-buttons-alt* a *common/item-bubble-focused-edit-count* umožňují manuálně měnit počet kusů položky bez naskenování.
### Tlačítka plus a mínus
Při kliknutí na tlačítko s plusem se stane totéž jako při načtení jednoho kusu. Tlačítko s mínusem způsobí snížení počtu o 1, ale dokud se počet nedostane na 0 - proto při dosažení této hranice tlačítko s mínusem zešedne a přestane být klikatelné. Analogicky zašedne tlačítko s plusem, pokud je dosaženo počtu kusů za lomítkem.
### Manuální úprava počtu kusů
Při kliknutí do textového pole s počtem kusů se objeví numerická klávesnice a uživatel může tuto hodnotu upravit. Pokud zadá hodnotu vyšší než požadovaný počet kusů (číslo za lomítkem), objeví se chybová hláška.
Jakmile uživatel začne upravovat hodnotu v textovém poli, místo plusu a mínusu se objeví tlačítko s fajfkou, kliknutím na niž je potřeba úpravu potvrdit. Po potvrzení se vrátí plus i mínus (možná zešedlé a neklikatelné, pokud jsme v jednom z okrajových případů).
## Manuální zadání kódu, fronta a poslední načtení
Tyto tři sekce spolu úzce souvisí.
V desktopové verzi jsou vždy na kartě *Plnění úkolu* v levém ze tří sloupců. Je důležité, aby textové pole pro manuální zadání kódu bylo dostatečně velké a vždy se nacházelo na stejném místě na obrazovce, proto je umístěné hned pod progress barem, a až po něm následuje *Fronta skenů ke zpracování* a *Poslední načtení* (*Frame/PickingGroup/1* na stránce *Desktop*).
V mobilní verzi jsou tyto tři sekce dostupné v pop-up okně, které překryje spodní část obrazovky po stisknutí FAB s ikonou čárového kódu, které je na kartě *Plnění úkolu* vždy vidět vpravo dole (pokud má uživatel právo na úkolu pracovat). Tento pop-up lze zavřít růžovým křížkem vpravo nahoře, sám se nikdy nezavírá. V mobilní verzi je striktněji zachováno chronologické seřazení, tedy *Poslední načtení* je nad *Manuálním zadáním kódu* a až níže je *Fronta skenů ke zpracování* (*Frame/Queue/2* na stránce *Mobile*).
### Manuální zadání kódu
Pro případy, kdy by nefungovalo naskenování čárového kódu (poškozený nebo chybějící štítek s kódem, vadná čtečka, práce z počítače bez čtečky apod.), musí být v každé situaci dostupná možnost kód zadat manuálně - tedy pomocí klávesnice zadat textovou (někdy číselnou) hodnotu kódu do textového pole *Zadejte kód k naskenování*. Je možné zadat i vícero kódů oddělených novou řádkou. Načtení proběhne po stisknutí klávesy Enter (nebo podobné klávesy v případě klávesnice na displeji čtečky) a toto manuální zadání kódu musí mít úplně stejný efekt jako běžné naskenování.
V mobilní verzi se po manuálním zadání kódu nezavírá pop-up okno, protože se předpokládá i opakované použití.
### Fronta skenů ke zpracování
*Fronta skenů ke zpracování* je v běžných případech prázdná a celá tato sekce je v tu chvíli skrytá. Jen výjimečně, například při zadání velkého množství kódů najednou nebo při pomalém připojení, kdy backend nestíhá všechna načtení dostatečně rychle zpracovat, je potřeba na toto uživatele upozornit. V této frontě jsou tedy chronologicky seřazeny položky a umístění, které byly naskenovány nebo manuálně zadány, ale ještě ne zcela zpracovány.
V desktopové verzi jsou položky a umístění řazeny od "nejčerstvěji" načtených, v mobilní verzi je to naopak (viz časové údaje napravo, jde o zachování konzistence "vše se postupně posouvá odspoda nahoru" v mobilní verzi).
Pokud je ve frontě několik stejných položek nebo umístění za sebou, jsou zkráceny do jedné řádky a počet nalevo je celkovým součtem počtu kusů (nehledě na to, zda byly načteny najednou nebo postupně).
Pokud fronta není prázdná, běhá navíc po spodním okraji obrazovky (v desktopové verzi) nebo těsně nad virtuální klávesnicí (v pop-upu v mobilní verzi) "loading lišta" podobně jako jinde ve Swordfishi (*Frame/Queue/3* na stránce *Mobile*).
Aby bylo i v mobilní verzi poznat, kdy nějaké položky nebo umístění čekají ve frontě, objevuje se u FAB ještě malé černé upozornění s ikonou hodin, pokud fronta není prázdná. V takovém případě se po kliknutí na FAB neoznačí textové pole pro manuální zadání kódu a tudíž se neobjeví klávesnice, aby frontu nepřekryla. Ve většině případů je ale fronta prázdná, černé kolečko u FAB není a po stisknutí FAB se rovnou objeví klávesnice pro manuální zadávání.
Pokud je položek a umístění ve frontě opravdu hodně, nesmí dojít k "samoscrollování", které by skrylo nebo posunulo sekci *Manuální zadání kódu*, a to v desktopové ani mobilní verzi.
### Poslední načtení
Sekce *Poslední načtení* slouží jako historie tří posledních načtených (a zároveň již backendem zpracovaných!) položek, například pro snadnější řešení problémů.
Stejně jako u fronty: v desktopové verzi jsou položky a umístění řazeny od "nejčerstvěji" načtených, v mobilní verzi je to naopak (viz časové údaje napravo, jde o zachování konzistence "vše se postupně posouvá odspoda nahoru" v mobilní verzi).
Nejposlednější načtená položka (nebo umístění) je navíc zvýrazněna tučně.
Stejně jako u fronty: pokud je v seznamu několik stejných položek nebo umístění za sebou, jsou zkráceny do jedné řádky a počet nalevo je celkovým součtem počtu kusů (nehledě na to, zda byly načteny najednou nebo postupně).
I při otevřeném pop-up okně v mobilní verzi je nutné zobrazovat chybové hlášky: stejný chybový box, který se normálně objevuje pod řádkou *Poslední načtení*, se objeví i zde v dolní části sekce *Poslední načtení*. Zároveň se růžově zbarví dotyčný problematický čárový kód v seznamu *Poslední načtení* (*Frame/Queue/4* na stránce *Mobile*). Pop-up i klávesnice zůstávají otevřené.
## Režim vracení
Režim vracení slouží k vracení většího množství položek v případě chyby při plnění úkolu. Framy ve Figmě máme nakreslené pro případ, kdy se režim vracení spustí v úkolu vyskladnění, ale základní myšlenka je i pro naskladnění a přesuny stejná.
### Zapnutí a vypnutí režimu
Do režimu vracení se přechází překliknutím (swajpnutím) na kartu *Vracení*, nebo rozbalením FAB buttonu a kliknutím na *Režim vracení* (*Frame/PickingGroup/2_open_FAB*). Na desktopu pak není FAB button potřeba rozbalovat, v pravém dolním rohu se zobrazuje rovnou tlačítko *Režim vracení*.
Zpátky k normálnímu plnění úkolu se uživatel vrátí buď přechodem zpátky na kartu *Plnění úkolu*, nebo kliknutím na ikonku křížku v liště *Režim vracení*.
### Vyskladnění
Režim vracení funguje prakticky dost podobně jako striktní naskladnění, akorát je uživateli umožněno vracet položky na ta umístění, odkud byla původně sebrána. Po celou dobu, kdy je uživatel v tomto režimu, vidí uživatel box cílového umístění se seznamem položek, které na něj v rámci aktuálního úkolu vyskladnil.
#### Výchozí stav
Na začátku je celý box cílového umístění zvýrazněný a zobrazuje se nápověda o možnosti začít načtením položky, nebo umístění, na které se bude vracet (*Frame/PickingGroup/Returning/1*).
#### Vracení podle položek
Pokud uživatel nemá zvolené žádné umístění k vracení a načte některou položku z cílového umístění, dojde k focusnutí této položky s rozbalenou nabídkou umístění, na které je možné položku vrátit (v závorkách se u umístění zobrazuje, kolik kusů této položky bylo z daného umístění sebráno, a tedy maximální počet, který je na ně možné vrátit). Pokud je umístění nabízeno hodně, zobrazí se několik prvních (ideálně asi s největším počtem kusů) a zbytek je možné rozbalit tlačítkem (aka posledním boxíkem v nabídce) s ikonkou *v*. Uživatel by měl následně načíst jedno z umístění v nabídce. Poté se do políčka *Zvolte vracené množství:* zapíše před i za lomítko maximální počet kusů, který je možné vrátit. To může uživatel snížit manuálním zadáním, a následně vše potvrdí tlačítkem s fajfkou (*Frame/PickingGroup/Returning/2*).
#### Vracení podle umístění
Pokud uživatel zrovna nemá focusnutou žádnou položku a načte umístění, ze kterého byla některá ze zobrazovaných položek sebrána, zobrazí se toto umístění na vrchu obrazovky s ikonkou odoznačení (to by uživatele vrátilo zpět do stavu *Frame/PickingGroup/Returning/1*). Zároveň položky, které nebyly sebrány z tohoto umístění, zašednou a jsou odsunuty do dolní části boxu cílového umístění pod hlášku *Na zvolené umístění nelze vrátit*. Pokud byla některá z položek sebrána z načteného umístění, ale i z jiného, bude box této položky v seznamu rozdvojen. V horní části (s vratnými položkami) bude u položky uveden počet kusů, který byl sebrán z načteného umístění, a v dolní části bude u položek uveden počet zbývajících kusů.
Následně uživatel může načíst libovolnou z vratných položek, ta se následně focusne a zobrazí se upravitelné políčko s počtem kusů, které budou vráceny, před lomítkem, a maximálním počtem kusů, které lze na umístění vrátit, za lomítkem. Po případné úpravě počtu kusů může uživatel načíst další položku ze seznamu - a pokračovat tak v kontextu vybraného umístění - nebo načíst jiné umístění - případně vybrané umístění manuálně odoznačit.
## Skupina vyskladnění
Používá se převážně na mobilní čtečce (stránka *Mobile* ve Figmě).
### Definice progressu
*Objem práce* (v progress baru) popisuje celkový počet kusů (jednotek) a také počet různých položek. *Hotovo* je poměr počtu kusů v boxu *Vyskladněné na (cílové umístění)* (na začátku vždy 0) ku celkovému počtu kusů v úkolu.
### Výchozí stav
Již od prvního otevření úkolu je zvýrazněná nápověda o nutnosti začít načtením cílového umístění (*Frame/PickingGroup/1*). Načtení položky v tomto stavu vrací chybovou hlášku.
Pod nápovědou jsou boxy pro každé umístění, na kterém je aspoň jedna "vyskladnitelná" položka (taková, kterou požaduje úkol, i kdyby dostupné množství bylo pro úkol nedostatečné), boxy se všemi takovými položkami a počty dostupných kusů na daném umístění. Pokud možno, umístění jsou řazena inteligentně, tj. nahoře jsou ty, které uspokojí největší část úkolu, tak aby si skladník nemusel dlouho vybírat a mohl začít od prvních nabízených umístění.
### Načtení cílového umístění
Po načtení cílového umístění se nahoře (mezi boxem začínajícím *Priorita* a následující nápovědou) objeví box *Vyskladněné na (název cílového umístění)*. Dokud nebylo nic vyskladněno, je v pravé části boxu ikona ozubeného kolečka, která umožňuje cílové umístění ještě změnit. Zároveň se objeví řádka *Poslední načtení*. (*Frame/PickingGroup/2*)
### Načtení umístění
Ve druhém kroku je potřeba načíst první umístění, odkud se bude vyskladňovat, tj. jedno z níže nabízených. Načtení něčeho jiného vrací chybovou hlášku.
Načtené umístění se focusne, jeho box se barevně zvýrazní a boxy všech položek v něm se zvětší na dvouřádkové. Zároveň se objeví možnost unfocusnout umístění růžovou ikonou vpravo nahoře. (*Frame/PickingGroup/3*)
### Načtení (vyskladnění) položky
Dalším krokem je načtení jedné z položek ve focusnutém umístění. Načtení jiného umístění by vedlo k unfocusnutí tohoto umístění a focusnutí toho načteného. Načtená položka se focusne a objeví v horním boxu *Vyskladněné na (název cílového umístění)* s počtem kusů *1* a s možností úpravy této hodnoty (plusem, resp. mínusem o jedna nebo zadáním čísla do textového pole). Číslo za lomítkem ukazuje počet kusů této položky požadovaný pro splnění úkolu. Pokud na původním umístění byl víc než jeden kus této položky, zůstane box položky i v boxu původního umístění, počet kusů se zde ovšem sníží o 1. Oba tyto boxy odpovídající stejné položce jsou zvýrazněné (a zvýraznění boxu umístění je v tu chvíli méně výrazné).
Dalším načtením téže (focusnuté) položky se po jednom kusu snižuje počet v boxu původního umístění a zvyšuje v boxu *Vyskladněné na (název cílového umístění)*, aby obě čísla vždy reflektovala stavy "v regálu" a "na vozíku" a dohromady dávala vždy stejný součet. Číslo za lomítkem se nemění, to je dané zadáním úkolu. (situace po pěti načteních stejné položky: *Frame/PickingGroup/4*)
### Tlačítka plus a mínus
Tlačítko s mínusem způsobí vrácení jednoho kusu na focusnuté umístění (resp. poslední focusnuté umístění), ale jen dokud uživatel nevrátí všechny kusy, které z tohoto umístění vzal. Nelze vracet víc kusů, než na umístění původně bylo, proto při dosažení této hranice tlačítko s mínusem zešedne a přestane být klikatelné.
### Manuální úprava počtu kusů
Pokud uživatel zadá hodnotu vyšší než požadovaný počet kusů (číslo za lomítkem) nebo vyšší než dostupný počet kusů na focusnutém umístění, objeví se chybová hláška. Uživatel může zadat i nižší číslo, čímž dojde k vrácení (podobně jako klikáním na mínus), ale pokud by zadal příliš nízké číslo a celý rozdíl nešel na původní umístění vrátit, objeví se také chybová hláška.
### Unfocusnutí položky
Jakmile již nelze další kusy focusnuté položky přesunout, protože už je vyskladněn zadaný počet kusů (tj. číslo před lomítkem dosáhlo čísla za lomítkem) nebo protože na původním umístění došly (jejich počet klesl na nula), stane se následující:
- položka se unfocusne,
- zmizí zvýraznění položky v boxu *Vyskladněné na (název cílového umístění)*,
- zmizí textové pole pro úpravu počtu kusů
- zešedne tlačítko "plus" a přestane být klikatelné (protože již není co přidávat), ale plus ani mínus nezmizí (aby se zamezilo missclickům při zběsilém klikání, tlačítka plusu a mínusu zmizí až při focusnutí příští položky!),
- položka úplně zmizí v boxu původního umístění,
- hlavní zvýraznění se vrátí na box původního umístění, pokud v něm ještě zbývají nějaké další vyskladnitelné položky.
### Mizení položek a umístění
Jakmile byl od některé položky vyskladněn počet kusů zadaný úkolem, tato položka zmizí ze všech nabízených boxů umístění (protože už není potřeba) a stejně tak zmizí všechny boxy umístění, ve kterých už nezbývá žádná vyskladnitelná položka. Nabídka umístění tedy vždy ukazuje jen užitečná umístění a užitečné položky pro splnění zbytku úkolu.
### Unfocusnutí umístění
Jakmile zmizí poslední položka z focusnutého umístění nebo jakmile uživatel růžovou ikonou umístění unfocusne manuálně, toto umístění zmizí a nápověda se změní na *Vyberte a naskenujte další umístění*. (*Frame/PickingGroup/6*).
I pokud uživatel vyskladňuje stejnou položku z několika různých umístění, v horním boxu *Vyskladněné na (název cílového umístění)* se všechny kusy sečtou do jednoho boxu položky. Interně je ale stále potřeba pamatovat si, kolik kusů pochází ze kterého umístění kvůli limitům na vracení položek.
### Dokončení úkolu
Tímto způsobem vyskladňování pokračuje, dokud nejsou vyskladněné všechny položky předepsané zadáním úkolu (a progress bar se nedostane na 100 %). V tu chvíli se vše unfocusne (plus a mínus u poslední položky zůstává), zmizí všechny boxy umístění a zvýrazní se box *Potvrďte (nebo změňte) cílové umístění:*. Uživatel může změnit cílové umístění. (*Frame/PickingGroup/7*)
Pak musí zaškrtnout checkbox *Vše je na (název cílového umístění)*, v tu chvíli se zvýrazní poslední box s možností přidat poznámku a tlačítko *Předat ke schválení* se stane klikatelným. (*Frame/PickingGroup/7*)
Kliknutím na toto tlačítko je úkol dokončen a uživatel je vrácen na domovskou stránku Swordfishe s nabídkou úkolů.
## Inventura
Používá se převážně na mobilní čtečce (stránka *Mobile* ve Figmě).
### Definice progressu
*Objem práce* (v progress baru) popisuje celkový počet umístění, která už byla zkontrolována. Za zkontrolované umístění považujeme takové, se kterým už uživatel v rámci tohoto úkolu pracoval a později přešel na jiné. Dovolíme si odvážně předpokládat, že se uživatel typicky nebude ke kontrole jednoho umístění znovu vracet. *Hotovo* je poměr počtu zkontrolovaných umístění ku celkovému počtu umístění, kterých se úkol týká.
### Výchozí stav
Již od prvního otevření úkolu je zvýrazněná nápověda o nutnosti začít načtením jednoho z umístění (*Frame/Inventura/1*). Načtení položky v tomto stavu vrací chybovou hlášku.
Pod nápovědou jsou boxy pro každé umístění, které odpovídají zadání úkolu - tj. buď se například nachází v podskladu, kterého se inventura týká, nebo se na něm nachází nejméně jedna položka, která odpovídá zadání úkolu. V každém takovém boxu jsou pak vypsány všechny položky, které se na umístění nachází, případně pouze ty položky, které odpovídají zadání úkolu - např. v případě omezení na položku nebo výrobce. Pokud uživatel nedisponuje rolí vedoucí, nezobrazují se mu u položek žádné očekávané množství, aby nemohl inventuru takříkajíc "občůrat". Vedoucímu se ale při plnění úkolu (i v Detailech úkolu) zobrazuje očekávané množství dané položky.
### Načtení umístění
V prvním kroku je tedy potřeba načíst první umístění, které bude kontrolováno. Načtení něčeho jiného vrací chybovou hlášku.
Načtené umístění se focusne, jeho box se barevně zvýrazní a pokud boxy položek obsahují počet kusů, zvětší se na dvouřádkové. Zároveň se objeví možnost unfocusnout umístění růžovou ikonou vpravo nahoře. (*Frame/Inventura/2*)
### Načtení (zkontrolování) položky
Dalším krokem je načtení jedné z položek ve focusnutém umístění. Načtení jiného umístění by vedlo k unfocusnutí tohoto umístění a focusnutí toho načteného.
Načtená položka se focusne a objeví se u ní počet kusů *1* a s možností úpravy této hodnoty (plusem, resp. mínusem o jedna nebo zadáním čísla do textového pole). Dalším načtením téže (focusnuté) položky se po jednom kusu zvyšuje počet uvedený v boxu. (*Frame/Inventura/3*)
### Unfocusnutí umístění
Jakmile uživatel růžovou ikonou umístění unfocusne manuálně, nápověda se změní na *Vyberte a naskenujte další umístění*.
Pokud uživatel načte jiné umístění v průběhu načítání položek, rovnou se focusne toto nové umístění.
V obou případech se původní umístění přesune do pravého sloupce (desktop), nebo se obrazovka odscrolluje tak, aby z boxu původního umístění čouhalo jenom spodních pár pixelů.
### Dokončení úkolu
Tímto způsobem inventura pokračuje, dokud nebyla alespoň jednou načtena všechna umístění předepsaná zadáním úkolu (a progress bar se nedostane na 100 %). V tu chvíli se přirozeně doscrolluje až k poslednímu boxu (zebra) s možností přidat poznámku a tlačítkem *Předat ke schválení*, který se zvýrazní a tlačítko se stane klikatelným.
Kliknutím na toto tlačítko je úkol dokončen a uživatel je vrácen na domovskou stránku Swordfishe s nabídkou úkolů.
## Naskladnění
Používá se převážně na mobilní čtečce (stránka *Mobile* ve Figmě).
### Definice progressu
Objem práce (v progress baru) popisuje celkový počet kusů (jednotek) a také počet různých položek. Hotovo je poměr počtu kusů naskladněných na jednotlivá umístění (na začátku vždy 0) ku celkovému počtu kusů v úkolu.
### Výchozí stav
Již od prvního otevření úkolu je zvýrazněná nápověda, navádějící skladníka k načtení libovolné položky či umístění (*Frame/Loading/1*). Pod nápovědou se, pokud je to aplikovatelné, nachází box *K naskladnění* obsahující seznam položek, které se dle úkolu mají naskenovat.
### Přesun do inventáře
Naskenuje-li skladník kus bez zvolení umístění, tento se přesune do nového boxu *V přesunu* (*Frame/Packing/2*), ukazující obsah skladníkova inventáře. Do prvního využití se box *V přesunu* nezobrazuje, ale poté již po zbytek úkolu není odebrán. Zvýrazní se velký box *K naskladnění*, a malý box produktu, který je do inventáře přesouván, v obou velkých boxech, a tlačítka Plus a Mínus.
### Přesun na umístění
Naskenuje-li skladník umístění, může přesouvat položky na něj. Jsou-li nějaké položky ve skladníkově inventáři (boxu *V přesunu*), může je přesouvat pouze z něj, jinak umisťuje položky rovnou z boxu *K naskladnění*. Box, ze kterého je přesouváno, se vybarví.
Pokud některé položky nelze na umístění přesunot, jsou jejich boxíky přesunuty do spodní části boxu, zprůhledněny, a odděleny od přesouvatelných položek oznámením a tomto faktu (*Frame/Loading/3*).
Je-li přesouváno ze skladníkova inventáře, mezi boxem *V přesunu* a boxem umístění se ojeví tlačítko "Přesunout možné na \[umístění]", které automaticky přesune všechny naskladnitelné položky na dané umístění.
### Odfocusnutí umístění
Kdykoli během úkolu může umístění odfocusnout tlačítkem v pravém horním rohu, nebo přímo načíst jiné umístění, a pokračovat v úkolu.
Je-li vše možné přesunuto, ale do splnění úkolu stále chybí přesunout nějaké položky, je o tomto faktu skladník informován nápovědou (*Frame/Loading/4*).
Odfocusnutá umístění se hromadí "nad obrazovkou", a jsou přístupná scrollováním.
### Striknost
Pokud není striknost úkolu *Volná*, box aktivní položky se odbarvuje a vyšedává tlačítko Plus při dosažení maximálního počtu kusů na umístění.
## Balení
Používá se převážně na větší dotykové obrazovce (stránka *Desktop* ve Figmě).
### Definice progressu
*Objem práce* (v progress baru) popisuje celkový počet kusů (jednotek), počet různých položek a počet různých zásilek. *Hotovo* je poměr počtu zabalených kusů (na začátku vždy 0) ku celkovému počtu kusů v úkolu.
### Výchozí stav
Narozdíl od předchozích úkolů zde není třeba načíst žádné umístění. Nápověda v prostředním sloupci naznačuje, že lze přímo začít skenovat položky (*Frame/Packing/1*).
Pod nápovědou je pouze jeden box K zabalení, který obsahuje celý objem úkolu,tj. všechny položky ze všech zásilek, které je potřeba v rámci úkolu zabalit. Pokud možno, položky jsou řazeny inteligentně, tj. nejvýše umístěné jsou ty, které mají nejvíce kusů k zabalení.
V pravém sloupci je seznam všech zásilek, které jsou součástí úkolu.
### Plnění zásilky
Po načtení první položky se automaticky vybere a focusne jedna ze zásilek, do které daná položka patří (*Frame/Packing/2*). Po focusnutí je box této zásilky zobrazen přes střední i pravý sloupec zároveň, a zobrazeny jsou pro baliče nejdůležitější informace o dané zásilce, jako jméno a logo dopravce (s případnou poznámkou dopravce), typ fólie potřebný pro danou zásilku, a ve vedlejším sloupci je zvýrazněná poznámka zásilky.
Dále je ve středním sloupci (ale stále uvnitř boxu) vnitřní seznam položek *K Zabalení*, týkající se dané zásilky, a napravo sloupec *Zabaleno*, ukazující již načtené položky. Nezabalené položky, které nejsou součástí focuslé zásilky, jsou zobrazeny v separátním vyšedlém boxu ve středním sloupci pod boxem focuslé zásilky.
Načtená položka je vybarvená jak ve sloupci Zabaleno, tak ve sloupci K zabalení, za předpokladu že je v dané zásilce více kusů dané položky. Ve sloupci Zabaleno se též objeví tlačítka Plus a Mínus, podobně jako v předchozích úkolech (položky lze samozřejmě dále načítat ručně).
Položky lze dále načítat pouze ty, které jsou součástí dané zásilky. Zásilku *nelze* odfocusnout (byť lze její box dočasně minimalizovat a prohlížet jiné zásilky v případě potřeby), dokud není zabalená celá zásilka.
Jsou-li načteny všechny kusy dané položky v dané zásilce (*Frame/Packing/4*), její boxík se ještě neodfocusne, ale odbarví se, a tlačítko Plus zešedne. Ke kompletnímu odfocusnutí položky dochází až načtením jiné položky (což je umožněno vždy, i když ještě nejsou zabaleny všechny kusy právě focuslé položky).
### Dokončení zásilky
Po dobalení posledního kusu náležícího dané zásilce se otevře pop-up pro potřeby dokončení balení dané zásilky (*Frame/Packing/4*). Kromě základních informací o zásilce je možno vybrat počet balíků (defaultně 1) buď tlačítky Plus, Mínus, nebo zapsáním skrze klávesnici, a potvrzením tlačítkem *Vytisknout štítky a dokončit objednávku*.
Pop-up a velký box zásilky se poté zavřou, malý boxík zásilky vyšedne, zařadí se do pravého sloupce, a přesune se výše (*Frame/Packing/5*). Již dokončené úkoly se takto "kupí" nad aktivovaný box, s tím, že k zobrazení všech je potřeba vyscrollovat vzhůru; v defaultním stavu je vidět pouze jeden boxík, a to ještě ne celý, aby indikoval možnost scrollování.
Po dokončení všech zásilek se vybarví malý box Dokončení a umožní předání ke schválení.