Lokalny Magazyn Surowcow - aplikacja desktopowa do ewidencji surowcow, wazenia opakowan i druku etykiet ZPL
  • Python 90.1%
  • JavaScript 4.7%
  • HTML 1.8%
  • Zimpl 1.2%
  • CSS 1.2%
  • Other 1%
Find a file
Kamil 2482aaffbe release: wersja 4.0.0
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 02:24:13 +02:00
assets ikona: odświeżona ikona programu (metka z kodem kreskowym, styl warstwowy) 2026-10-12 01:34:49 +02:00
docs Etap 5 (2/3): budowa pod PySide6, licencja Qt, dokumentacja 4.0, CHANGELOG 2026-10-11 21:24:34 +02:00
lms release: wersja 4.0.0 2026-10-12 02:24:13 +02:00
lms-mobile legal: objecie projektu licencja GNU GPLv3 2026-10-10 17:50:05 +02:00
tests ui: aktualizacja z pliku ZIP także w Ustawienia › Aktualizacje 2026-10-12 00:59:37 +02:00
tools ikona: odświeżona ikona programu (metka z kodem kreskowym, styl warstwowy) 2026-10-12 01:34:49 +02:00
.claudeignore docs: dodaj CLAUDE.md i .claudeignore, popraw wersję i liczbę testów w README 2026-10-01 12:01:26 +02:00
.gitignore feat: zglaszanie bledow - paczka z logami, Forgejo, e-mail z zalacznikiem 2026-10-06 21:04:20 +02:00
build.bat Samotest exe (--samotest) i hiddenimports widokow: naprawa startu po zalogowaniu 2026-10-11 22:13:11 +02:00
CHANGELOG.md release: wersja 4.0.0 2026-10-12 02:24:13 +02:00
CLAUDE.md Etap 5 (2/3): budowa pod PySide6, licencja Qt, dokumentacja 4.0, CHANGELOG 2026-10-11 21:24:34 +02:00
file_version_info.txt release: wersja 4.0.0 2026-10-12 02:24:13 +02:00
icon.ico ikona: odświeżona ikona programu (metka z kodem kreskowym, styl warstwowy) 2026-10-12 01:34:49 +02:00
icon.png ikona: odświeżona ikona programu (metka z kodem kreskowym, styl warstwowy) 2026-10-12 01:34:49 +02:00
INSTRUKCJA_OPERATORA.md Etap 5 (2/3): budowa pod PySide6, licencja Qt, dokumentacja 4.0, CHANGELOG 2026-10-11 21:24:34 +02:00
LICENSE legal: objecie projektu licencja GNU GPLv3 2026-10-10 17:50:05 +02:00
magazyn_app.py Etap 5 (1/3): start w Qt, usuniecie interfejsu Tk, lms/qt -> lms/ui 2026-10-11 21:15:00 +02:00
magazyn_app.spec Samotest exe (--samotest) i hiddenimports widokow: naprawa startu po zalogowaniu 2026-10-11 22:13:11 +02:00
NOTICE-Qt.txt Etap 5 (2/3): budowa pod PySide6, licencja Qt, dokumentacja 4.0, CHANGELOG 2026-10-11 21:24:34 +02:00
README.md release: wersja 4.0.0 2026-10-12 02:24:13 +02:00
requirements-dev.txt feat(qt): fundament interfejsu Qt 6 (motyw, fonty, ikony, watki, dostepnosc) 2026-10-11 12:21:25 +02:00
requirements.txt Etap 5 (2/3): budowa pod PySide6, licencja Qt, dokumentacja 4.0, CHANGELOG 2026-10-11 21:24:34 +02:00
run.bat feat: Initial commit - LMS Desktop v2.5.1 and LMS Mobile PWA 2026-09-08 12:47:10 +02:00
run.sh feat: interfejs według Apple HIG — paleta, Inter, ikony Flaticon, nowa nawigacja 2026-09-26 03:47:25 +02:00
szablon.zpl feat: Initial commit - LMS Desktop v2.5.1 and LMS Mobile PWA 2026-09-08 12:47:10 +02:00
szablon_v2_kreskowy.zpl feat: kod QR o stałym rozmiarze na etykiecie, szablony v2 z kodem kreskowym i QR 2026-10-01 12:33:41 +02:00
szablon_v2_qr.zpl feat: kod QR o stałym rozmiarze na etykiecie, szablony v2 z kodem kreskowym i QR 2026-10-01 12:33:41 +02:00

Lokalny Magazyn Surowców (LMS)

Wersja 4.0.0 · aplikacja desktopowa Windows

Ewidencja surowców na magazynie: przyjęcie opakowania, ważenie przy każdym pobraniu, druk etykiet na drukarce Zebra (ZPL) i raport zmiany dla biura. Pracuje lokalnie, bez serwera — jeden plik .exe i jedna baza SQLite obok niego.

Instrukcja dla osoby pracującej przy wadze: INSTRUKCJA_OPERATORA.md


Co robi

Przyjęcie opakowania wybór surowca ze słownika SAP, waga, data, kod własny albo nadany automatycznie (EAN-13)
Pobranie skan kodu z etykiety, wpisanie pozostałej wagi, nowa etykieta
Etykiety ZPL druk po TCP na drukarkę Zebra, podgląd offline, edytor szablonu
Raport zmiany zestawienie wg indeksu SAP + ślad audytowy, .xlsx gotowy do druku
Historia filtry statusu i dat, wyszukiwanie, druk masowy, eksporty
Konta operatorów podpis chroniony PIN-em (PBKDF2), dziennik zdarzeń
Synchronizacja wymiana danych z terminalem mobilnym, z podglądem zmian przed importem

Uruchomienie

Z gotowego pliku

Pobierz magazyn_app.exe, uruchom dwuklikiem. Dane (lokalny_magazyn.db, katalog backups/, szablon.zpl, lms.log) powstają w %LOCALAPPDATA%\LMS; z pustym plikiem portable.flag obok exe — obok exe (tryb przenośny). Szczegóły i migracja ze starego układu: docs/DANE_PROGRAMU.md.

Ze źródeł

pip install -r requirements.txt
python magazyn_app.py

Wymagany Python 3.11 lub nowszy.

Kompilacja

Na Windows:

build.bat

Skrypt sprawdza zgodność numeru wersji w źródłach, uruchamia testy, kompiluje i kładzie obok pliku .exe szablon etykiety oraz ikonę. Przełączniki: /bez-testow, /zaleznosci (doinstaluje biblioteki i PyInstallera), /bez-pauzy.

Ręcznie, na dowolnym systemie:

pip install pyinstaller
pyinstaller --noconfirm --clean magazyn_app.spec

Wynik: dist/magazyn_app.exe — jeden plik, bez zależności zewnętrznych. Program czyta szablon.zpl i icon.ico z katalogu, w którym stoi, więc na stanowisko kopiuje się cały katalog dist, nie sam plik .exe.

Kompilacja z Linuksa (wine)

Wydanie 3.0.1 powstało w ten sposób. Potrzebny jest wine i Python dla Windows w osobnym prefiksie — Python systemowy z Linuksa da plik dla Linuksa:

export WINEPREFIX=~/.wine-lms
wineboot -u
wine python-3.12.10-amd64.exe /quiet InstallAllUsers=0 Include_tcltk=1 TargetDir=C:\Python312
wine "$WINEPREFIX/drive_c/Python312/python.exe" -m pip install -r requirements.txt -r requirements-dev.txt pyinstaller
WINEPATH='C:\Python312;C:\Python312\Scripts' wine cmd /c build.bat /bez-pauzy

Testy interfejsu idą bez ekranu (platforma Qt offscreen), więc nie potrzebują ani pulpitu, ani wine. Budowanie 4.0 pod wine nie było sprawdzane; wiążące jest budowanie na Windowsie (build.bat).


Układ projektu

lms/
├── config.py, dane.py   stałe, ścieżki, logger, katalog danych i migracja
├── database.py          połączenie, schemat, migracje, ustawienia, audyt, kopie
├── repozytorium/        odczyt i zapis danych dziedziny (jedyne miejsce z SQL)
├── uslugi/              reguły biznesowe bez okien — co system robi
├── ui/                  interfejs Qt 6: okno główne, widoki, okna, motyw, ikony, czcionki
├── tokeny_projektu.py   tokeny: kolory (jasny/ciemny), odstępy, rozmiary
├── export.py            raporty .xlsx i .html
├── zpl_generator.py     składanie etykiety (+ zpl_parser, zpl_qr, zpl_grafika)
├── print_service.py     wysyłka do drukarki
├── aktualizacje.py, forgejo.py, poczta.py, zgloszenia.py   aktualizacje i zgłaszanie błędów
└── mobile_sync.py       import i eksport plików wymiany
assets/fonts/            Inter i LMS Ikony — dołączane do exe
tools/                   budowanie: numer wersji, paczka wydania, font ikon
NOTICE-Qt.txt            informacja o Qt (LGPLv3), dołączana do wydania

Pełny opis warstw, modelu danych i widoków: docs/ARCHITECTURE.md.

Zasada warstw: poza database.py i repozytorium/ w projekcie nie ma zapytań SQL. Widok odczytuje formularz, woła usługę i pokazuje wynik — walidacja, generowanie kodów i kolejność zapisów należą do warstwy usług. Dzięki temu reguły biznesowe testuje się bez otwierania okna. Usługi i repozytorium nie importują ani Qt, ani Tk (pilnuje tego tests/test_bez_tk.py).

Widoki komunikują się przez zdarzenia okna (OPAKOWANIA_ZMIENIONE, SLOWNIK_ZMIENIONY), nie przez wołanie swoich metod, i powstają przy pierwszym wejściu.

Wygląd: paleta w tokeny_projektu.py to pary (jasny, ciemny) oparte na kolorach systemowych Apple; tryb idzie za ustawieniem Windows. Tekst w kroju Inter, ikony z fontu LMS Ikony. Zasady pilnowane testami (tests/test_paleta.py, tests/test_zasady_ui.py, tests/ui/test_qt_zgodnosc.py): kontrast min. 4,5:1 w obu trybach, jedna akcja główna na ekran, żadnych emoji, napisy bez wersalików, nazwy kontrolek dla czytnika ekranu.


Testy

pip install -r requirements-dev.txt
python -m pytest -q

Ponad 1300 przypadków. Interfejs Qt jest testowany bez ekranu (platforma offscreen, pytest-qt), więc zestaw uruchamia się też na maszynie bez pulpitu.


Dokumentacja

Dokument O czym
INSTRUKCJA_OPERATORA.md obsługa krok po kroku, dla magazynu
CHANGELOG.md co się zmieniło w kolejnych wersjach
docs/ARCHITECTURE.md architektura techniczna
docs/DECYZJA_ARCHITEKTONICZNA.md dlaczego porządkowaliśmy istniejący kod zamiast pisać od zera
docs/PLAN_NAPRAWY.md pięcioetapowy plan przebudowy i kryteria odbioru
docs/PLAN_UI.md zasady interfejsu Z1–Z6 (dokument historyczny przebudowy 3.x)
docs/PLAN_QT6.md przejście na Qt 6: plan, przebieg, wydania próbne
docs/KATALOG_UI_4.md katalog poprawek interfejsu 4.0 i decyzje projektowe
docs/ZGODNOSC_4_0.md zgodność 4.0 z 3.x: skróty, czynności, rzeczy do sprawdzenia
docs/SKROTY_KLAWISZOWE.md pełna lista skrótów
docs/SPECYFIKACJA_TECHNICZNA.md schemat bazy, formaty plików wymiany
docs/MANIFEST_WERSJI_MOBILNEJ.md zakres i stan wersji mobilnej

Wersja mobilna

Katalog lms-mobile/ zawiera aplikację PWA (Flask) na terminal. Jest zamrożona — desktop jest wersją podstawową. Wymiana danych odbywa się plikiem: ekran Synchronizacja [F8] zapisuje plik dla terminala i wczytuje sesje z powrotem.

Przed powrotem do tego wątku trzeba rozwiązać: brak uwierzytelniania w wersji mobilnej, podatność XSS i weryfikację PWA na fizycznym telefonie. Szczegóły w docs/MANIFEST_WERSJI_MOBILNEJ.md.


Zależności

Biblioteka Po co
PySide6-Essentials interfejs (Qt 6: QtCore, QtGui, QtWidgets); licencja LGPLv3 — patrz NOTICE-Qt.txt
openpyxl raporty .xlsx
segno kod QR w podglądzie etykiety
fonttools tylko do budowy fontu ikon i testów (requirements-dev.txt)

Fonty i ikony — licencje

Zasób Licencja Plik licencji
Inter (Inter-*.ttf) SIL Open Font License 1.1 assets/fonts/Inter-OFL.txt
Ikony: wycinek Flaticon UIcons (LMS-Ikony.ttf) Flaticon License — użycie bezpłatne z podaniem autorstwa assets/fonts/UIcons-LICENSE.txt

Uicons by Flaticon. Podpis wymagany przez licencję stoi też w pasku stanu programu — nie usuwaj go bez wykupienia subskrypcji Flaticon Premium.

Nowa ikona: dopisz ją w lms/ui/ikony.py i uruchom python tools/zbuduj_ikony.py <uicons-regular-rounded.woff> <rounded.css> (pliki z pakietu npm @flaticon/flaticon-uicons).


Licencja

Kod źródłowy programu objęty jest licencją GNU General Public License v3.0 (GPLv3).
Copyright (C) 2026 Kamil Adamus kamil@adamus.cloud.

Pełna treść licencji znajduje się w pliku LICENSE.

Dołączone zasoby podlegają własnym licencjom: