Týdenní stav vybavení
Zadávání a historie
/equipment: jeden výkaz pro jeden sklad a středeční datum. Rozbalovací seznam nabízí středu aktuálního kalendářního týdne a dvě následující středy. Výchozí je středa aktuálního týdne (i o víkendu). Starší výkazy se doplňují a opravují přes historii.- Aktuální týden a výchozí měsíc historie se určují podle
Europe/Prague, včetně letního času, nezávisle na časové zóně serveru. Čas posledního uložení zůstává v UTC. - V režimu opravy (
edit=1) se datum pouze zobrazuje, bez výběru. Starší přímé odkazy se středečním datem mimo nabídku se přesměrují do tohoto režimu. Nové zadání bezedit=1přijímá pouze jednu ze tří nabízených kontrol. - Šest kategorií: naskladňovací místa, tablety, váhy, balicí místa, páskovačky, odesílací místa. Funkční místo zahrnuje i potřebný tablet a váhu.
- Počty
total(celkem) afunctional(funkční) jsou nepovinné. Vyplněné hodnoty musí být celá čísla od 0 do 999999999; pokud jsou vyplněné obě, platífunctional <= total. Prázdné pole je nezadaná hodnota, nikoli nula. Lze uložit i celý prázdný výkaz. - Formulář vždy načte uložené hodnoty pro vybraný sklad a středu, pokud výkaz existuje; jinak jsou početní pole prázdná. Stejně funguje nové zadání i oprava z historie. Neuložené změny při změně skladu nebo data vyžadují potvrzení.
- Uložení nahrazuje celý výkaz včetně prázdných polí. Sklad a středeční datum jsou povinné.
/equipment/history: výběr skladu, roku a měsíce, všechny středy daného měsíce, přehled celkem / funkční (pomlčka = nezadáno), odkazy Upravit/Doplnit. Chybějící výkaz není nula a nepřebírá hodnoty z minulého týdne.- Přístup mají stejní uživatelé jako k denním formulářům (
access=true); administrátor není vyžadován. POST vyžaduje také token formuláře uložený v session. - Nabídka Směny sdružuje Aktivní dny kontroly, Obsazenost směn a Do CME. Odkaz Obsazenost směn zůstává dostupný pouze oprávněným administrátorům.
Dříve uložené páteční výkazy zůstávají pod původním datem dostupné v historii a API a lze je opravit. Nový páteční výkaz již nelze vytvořit.
CSV
Soubor ${DATA_DIR}/sp-equipment.csv vzniká při prvním uložení. Klíč je
warehouse_id,inspection_date. Oprava nahradí daný záznam, ostatní sklady a týdny
zachová. Ukládá se poslední podoba výkazu, nikoli historie jednotlivých změn.
Sloupce: warehouse_id, inspection_date, pro každou kategorii níže sloupce
<key>_total a <key>_functional, dále updated_at (UTC ISO 8601) a updated_by
(ID uživatele). Souběžné zápisy aplikace jsou serializovány pomocí
sp-equipment.csv.lock; soubor se nahrazuje atomicky. Externí editory tento zámek
musí respektovat. Při současné opravě stejného výkazu platí poslední uložená verze.
Čtecí API
GET /api/v1/warehouses/equipment?from=2026-10-01&to=2026-10-31&warehouse_id=1
- Povinné
fromato: YYYY-MM-DD, včetně obou mezí, nejvýše 366 dní, roky 2020–2100. Meze nemusejí být středy. - Volitelné
warehouse_id: ID existujícího skladu; bez něj všechny sklady. - Vyžaduje
Authorization: Bearer <token>ze stávajícího registrusp-api-tokens.csv, také přiAUTH_REQUIRED=0. Browser session token nenahrazuje. 401: chybějící, neplatný či vypnutý token.400: neplatné filtry.200: pouze uložené výkazy, vzestupně podle data kontroly a ID skladu. Prázdný výsledek mádata: []ameta.record_count: 0.
Každá položka data obsahuje warehouse: {id, name}, inspection_date,
equipment, updated_at a updated_by. Objekt equipment obsahuje šest klíčů,
každý s hodnotami {total, functional}: celé číslo nebo null pro nezadaný počet.
V CSV jsou nezadané počty prázdné buňky; nuly se zachovávají jako 0.
| Klíč | Kategorie |
|---|---|
stocking_stations |
Naskladňovací místa |
tablets |
Tablety |
scales |
Váhy |
packing_stations |
Balicí místa |
strapping_machines |
Páskovačky |
dispatch_stations |
Odesílací místa |
Příklad volání
Proměnná API_TOKEN obsahuje platný token z registru; skutečný token nepatří do
dokumentace ani do verzovaného kódu.
curl --fail-with-body \
-H "Authorization: Bearer $API_TOKEN" \
"http://127.0.0.1:5004/api/v1/warehouses/equipment?from=2026-10-01&to=2026-10-31&warehouse_id=1"
Pro všechny sklady vynechte warehouse_id. Pro jednu konkrétní středu nastavte
from i to na stejné datum. Filtr se vztahuje k datu kontroly, nikoli k času
poslední úpravy.
Příklad odpovědi
Ilustrační hodnoty, nikoli skutečná provozní data:
{
"data": [
{
"warehouse": {"id": 1, "name": "Jablonec"},
"inspection_date": "2026-10-28",
"equipment": {
"stocking_stations": {"total": 16, "functional": 15},
"tablets": {"total": 66, "functional": 58},
"scales": {"total": 2, "functional": 1},
"packing_stations": {"total": 38, "functional": 38},
"strapping_machines": {"total": 3, "functional": 2},
"dispatch_stations": {"total": null, "functional": null}
},
"updated_at": "2026-10-30T10:21:29Z",
"updated_by": "10655"
}
],
"meta": {"record_count": 1}
}
updated_at je čas posledního uložení v UTC, updated_by je ID autora jako řetězec.
Oprava vrací poslední uloženou podobu výkazu. I zcela prázdný uložený výkaz je
samostatný záznam se všemi počty null; chybějící výkaz v odpovědi vůbec není.
Bez odpovídajících záznamů vrátí API HTTP 200:
{"data": [], "meta": {"record_count": 0}}
Chyby mají tvar {"error": {"message": "..."}}. Odpověď 401 navíc obsahuje
hlavičku WWW-Authenticate: Bearer realm="shift-planner-app-api".
Výkazy jsou podkladem pro ruční plánování. Automatický výpočet počtu lidí ani pravidelné připomínky nejsou součástí této funkce.