Modele danych¶
Aplikacja używa kilku klas danych Dart do reprezentowania obiektów z Part-DB i lokalnej konfiguracji.
Part¶
Główna klasa reprezentująca komponent elektroniczny.
class Part {
final int id;
final String name;
final String partNumber; // IPN (7-cyfrowy identyfikator)
final String unit; // jednostka miary (np. "pcs", "m")
final double minAmount; // minimalny wymagany stan
final String description;
final String comment;
String category; // nazwa kategorii (uzupełniana osobno)
String manufacturer; // nazwa producenta (uzupełniana osobno)
final String tags;
List<PartLot> partLots; // lokalizacje magazynowe
List<PartParameter> parameters;
// Pola obliczane
double get totalStock; // suma amount z partii o znanej ilości
bool get hasUnknownStock; // któraś partia ma instock_unknown
bool get isLowStock; // minAmount > 0 && !hasUnknownStock && totalStock < minAmount
}
| Pole | Typ | Opis |
|---|---|---|
id |
int |
Identyfikator w Part-DB |
name |
String |
Pełna nazwa części |
partNumber |
String |
IPN (może być pusty) |
unit |
String |
Jednostka miary |
minAmount |
double |
Minimalny wymagany stan |
description |
String |
Opis tekstowy |
comment |
String |
Komentarz wewnętrzny |
category |
String |
Nazwa kategorii (mutowalny, wypełniany po pobraniu) |
manufacturer |
String |
Nazwa producenta (mutowalny) |
tags |
String |
Tagi rozdzielone przecinkami |
partLots |
List<PartLot> |
Lokalizacje z ilościami |
parameters |
List<PartParameter> |
Parametry techniczne |
totalStock |
double |
Obliczony: suma ilości z partLots (bez partii z instock_unknown) |
hasUnknownStock |
bool |
Obliczony: co najmniej jedna partia ma nieznaną ilość |
isLowStock |
bool |
Obliczony: minAmount > 0 && !hasUnknownStock && totalStock < minAmount |
Note
minAmount odczytywane jest z pola API minamount. Ilości są liczbami zmiennoprzecinkowymi i nigdy nie są zaokrąglane; interfejs formatuje je funkcją formatAmount() (12, 2.5).
PartLot¶
Reprezentuje partię magazynową – ilość w konkretnej lokalizacji.
class PartLot {
final int id;
final String locationName;
final String locationIri;
final String description;
String comment;
final bool instockUnknown;
double amount;
}
| Pole | Typ | Opis |
|---|---|---|
id |
int |
Identyfikator partii w Part-DB |
locationName |
String |
Nazwa lokalizacji (szuflada, regał...) |
amount |
double |
Ilość w tej lokalizacji |
description |
String |
Opis partii (aplikacja go nie modyfikuje) |
comment |
String |
Komentarz partii; notatki do zmian stanu dopisywane są na początku jako datowane linie |
instockUnknown |
bool |
Ilość w tej lokalizacji jest nieznana |
PartParameter¶
Pojedynczy parametr techniczny części.
class PartParameter {
final int id;
final String name;
String value; // wartość do wyświetlenia
final String unit;
final String? editableField; // 'value_text', 'value_typical' lub null (zakres)
final String editableValue; // surowa wartość pola editableField
}
| Pole | Typ | Opis |
|---|---|---|
id |
int |
Identyfikator parametru w Part-DB |
name |
String |
Nazwa parametru (np. „Wartość", „Obudowa") |
value |
String |
Wartość tekstowa (parsowana z kilku możliwych pól API) |
unit |
String |
Jednostka (np. „Ω", „F", „V") |
editableField |
String? |
Pole API, do którego aplikacja zapisuje zmianę; null dla zakresów min/max (tylko odczyt) |
Parsowanie wartości
Wartość do wyświetlenia pochodzi kolejno z formatted, value_text, value_typical, a na końcu value_min … value_max. Lista części zwraca tylko nazwy parametrów; wartości pochodzą z GET /api/parts/{id}.
ApiException¶
Wyjątek rzucany przez ApiService przy błędzie HTTP lub parsowania.
Używany do wyświetlania szczegółowych komunikatów błędów w UI (SnackBar).
LabelConfig¶
Konfiguracja parametrów etykiety Niimbot, persystowana przez SharedPreferences.
class LabelConfig {
List<LabelParamEntry> entries;
// Serializacja do/z JSON
// Zapis: SharedPreferences klucz 'niimbot_label_params'
}
class LabelParamEntry {
final String name; // nazwa parametru
bool enabled; // czy drukować ten parametr
bool bold; // czy pogrubiony
}
| Pole | Typ | Opis |
|---|---|---|
name |
String |
Nazwa parametru (musi pasować do PartParameter.name) |
enabled |
bool |
Czy parametr jest włączony na etykiecie |
bold |
bool |
Czy parametr drukowany jest pogrubioną czcionką |
LabelConfig implementuje logikę scalania: przy każdym otwarciu ekranu drukowania aktualna lista parametrów części jest łączona z zapisaną konfiguracją. Nowe parametry dodawane są na koniec jako włączone i niepogrubione; usunięte parametry są pomijane.
HistoryEntry¶
Wpis historii ostatnio oglądanych części. Przechowywany jako JSON w SharedPreferences.
Historia ograniczona jest do 20 ostatnich wpisów. Duplikaty (ten sam id) są usuwane przy dodawaniu nowego wpisu.