Skip to content

Commit c493762

Browse files
committed
Merge develop for 1.22.0 release
# Conflicts: # CHANGELOG.md # README.md # RELEASE.md # shopify-sync/CHANGELOG.md # shopify-sync/shopify_sync.py # shopify-sync/sync_version.py # tests/test_shopify_sync_logging.py
2 parents 5716780 + 6c174b8 commit c493762

34 files changed

Lines changed: 10897 additions & 1538 deletions

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,18 @@ lagerverwaltung.log
1010
logs/
1111
settings.local.json
1212
gls/*.pdf
13+
gls/
1314
exports/
1415
gls/*.txt
1516
gls/*.env
1617
gls/*credentials*
1718
post/*.env
1819
post/*credentials*
20+
post/labels/
1921
lieferschein_*.pdf
2022
delivery_note_template.pdf
2123
local_only/
2224
webspace/
2325
fonts/
26+
.codex
27+
.codex/

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,31 @@ Nur Releases auf `main`. Entwicklungszwischenstaende werden ueber Git-Branches u
44
Release-Eintraege nennen die zugehoerige Shopify-Sync-Version und verweisen auf
55
[shopify-sync/CHANGELOG.md](/home/chrisi/Lagerverwaltung/shopify-sync/CHANGELOG.md).
66

7+
## [1.22.0] - in Vorbereitung
8+
9+
Zugehoeriger Shopify-Sync-Release: `1.0.0`
10+
11+
### Added
12+
- Versand mit Deutsche Post INTERNETMARKE einschliesslich Produktkatalog, Produktauswahl und Labelerzeugung.
13+
- Carrier `Adresslabel` fuer reine Adresslabels ohne Sendungsnummer und ohne Shopify-Fulfillment.
14+
- Lokales Bundle fuer private Dateien und portable Einstellungen mit Import auf neuen Arbeitsplaetzen.
15+
- Bedienungsanleitung und Versanddoku in deutscher und englischer Sprache.
16+
17+
### Changed
18+
- Versandablaeufe fuer Einzel-Label, Bulk, Teilausfuehrung und manuelle Labels vereinheitlicht.
19+
- Carrier-Auswahl, Carrier-Settings und Versandhistory sind generisch fuer mehrere Versanddienstleister organisiert.
20+
- Bulk-Druck fasst Labels und Lieferscheine je Lauf zu einer gemeinsamen Datei zusammen.
21+
- Versand- und Lieferscheinordner koennen ueber die Einstellungen ausgewaehlt werden; Standardpfade liegen unter `~/Dokumente/Lagerverwaltung/`.
22+
- Hauptansicht und Auftragsansicht arbeiten mit lokalen Snapshots fuer schnellere Bedienung bei langsamer Datenbankverbindung.
23+
- README auf Projektueberblick reduziert und auf Handbuch, Versanddoku und Releases ausgerichtet.
24+
25+
### Fixed
26+
- Sync-Version und Laufzeitstatus werden zentral gespeichert und in der TUI angezeigt.
27+
- Shopify-Fulfillment uebertraegt Carrier, Trackingnummer und bei Bedarf Tracking-URL carrierabhaengig.
28+
- Shopify-Kundendaten stehen fuer manuelle Versandlabels lokal zur Auswahl bereit.
29+
- Start und Laufzeit bei nicht erreichbarer Datenbank werden mit einem einheitlichen Dialog abgefangen.
30+
- Versandhistory verwendet durchgaengig die Tabelle `shipping_labels`.
31+
732
## [1.20.028] - 2026-03-24
833

934
### Fixed

README.en.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<p align="center">
2+
<img src="assets/lager-mc.svg" alt="Lager MC" width="160">
3+
</p>
4+
5+
# Lagerverwaltung
6+
7+
Terminal-based inventory management with storage locations, order handling, stocktaking, Shopify integration and shipping workflows.
8+
9+
License: [MIT](/home/chrisi/Lagerverwaltung/LICENSE)
10+
11+
## Core features
12+
13+
- maintain items, storage locations and stock quantities
14+
- import and process Shopify orders
15+
- create pick lists, delivery notes and shipping labels
16+
- shipping with GLS, Deutsche Post INTERNETMARKE and address labels
17+
- partial execution, bulk execution and shipping history
18+
- stocktaking with snapshots, CSV export and apply step
19+
- local bundle files for new workstations
20+
21+
## Current shipping state
22+
23+
Implemented carrier integrations:
24+
25+
- `GLS`
26+
- `Deutsche Post INTERNETMARKE`
27+
28+
Also available:
29+
30+
- `Address label` for internal labels without a carrier API
31+
32+
The carrier structure uses central carrier definitions with shared shipping history and Shopify handover.
33+
34+
## Documentation
35+
36+
- User manual: [docs/bedienungsanleitung.en.md](/home/chrisi/Lagerverwaltung/docs/bedienungsanleitung.en.md)
37+
- Shipping integration notes: [docs/shipping-providers.en.md](/home/chrisi/Lagerverwaltung/docs/shipping-providers.en.md)
38+
- Release history: [CHANGELOG.md](/home/chrisi/Lagerverwaltung/CHANGELOG.md)
39+
- GitHub Releases: <https://github.com/xoquox/Lagerverwaltung/releases>
40+
41+
## Repository variants
42+
43+
- Fork with the core inventory features without Shopify integration and shipping: [simple-storage-core](https://github.com/b4ckspace/simple-storage-core)

README.md

Lines changed: 26 additions & 240 deletions
Original file line numberDiff line numberDiff line change
@@ -4,257 +4,43 @@
44

55
# Lagerverwaltung
66

7-
Terminalbasierte Lagerverwaltung fuer kleine bis mittlere Teilelager mit Shopify-Anbindung, Lagerplatzlogik, Picklisten, Lieferscheinen, Inventur und Labeldruck.
7+
Terminalbasierte Lagerverwaltung mit Lagerplatzpflege, Bestellansicht, Inventur, Shopify-Anbindung und Versandabwicklung.
88

99
Lizenz: [MIT](/home/chrisi/Lagerverwaltung/LICENSE)
1010

11-
## Funktionen
11+
## Kernfunktionen
1212

13-
- Artikel suchen, bearbeiten und lokal anlegen
14-
- Lagerplaetze nach `Regal / Fach / Platz` pflegen
15-
- Bestellungen aus Shopify synchronisieren
16-
- Zahlungs- und Fulfillment-Status im Auftragsfenster anzeigen
17-
- Picklisten per Drucker drucken
18-
- Lieferscheine als PDF erzeugen oder per Drucker drucken
19-
- Brother-QL-Etiketten drucken
20-
- Inventur starten, zaehlen, exportieren und uebernehmen
21-
- extern gelagerte Fulfillment-Artikel ausblenden
13+
- Artikel, Lagerplaetze und Bestandsmengen pflegen
14+
- Bestellungen aus Shopify einlesen und im Auftragsfenster bearbeiten
15+
- Picklisten, Lieferscheine und Versandlabels erzeugen
16+
- Versand mit GLS, Deutsche Post INTERNETMARKE und Adresslabels
17+
- Teilausfuehrung, Bulk-Ausfuehrung und Versandhistory
18+
- Inventur mit Snapshot, CSV-Export und Uebernahme
19+
- lokale Bundle-Dateien fuer neue Arbeitsplaetze
2220

23-
## Projektstruktur
21+
## Aktueller Versandstand
2422

25-
- [lager_mc.py](/home/chrisi/Lagerverwaltung/lager_mc.py)
26-
Hauptanwendung fuer Lager, Bestellungen und Inventur.
27-
- [label_print.py](/home/chrisi/Lagerverwaltung/label_print.py)
28-
Etikettendruck fuer Brother-QL-Drucker.
29-
- [delivery_note.py](/home/chrisi/Lagerverwaltung/delivery_note.py)
30-
PDF-Erzeugung fuer Lieferscheine auf Basis der Vorlage.
31-
- [app_settings.py](/home/chrisi/Lagerverwaltung/app_settings.py)
32-
Laedt Projekt-Defaults und lokale Overrides.
33-
- [app_version.py](/home/chrisi/Lagerverwaltung/app_version.py)
34-
Zentrale Versionsdefinition fuer Release- und Entwicklungsstaende.
35-
- [settings.json](/home/chrisi/Lagerverwaltung/settings.json)
36-
Versionierte Standardkonfiguration des Projekts.
37-
- [CHANGELOG.md](/home/chrisi/Lagerverwaltung/CHANGELOG.md)
38-
Release-Historie fuer Stande auf `main`.
39-
- [RELEASE.md](/home/chrisi/Lagerverwaltung/RELEASE.md)
40-
Branching-, Release- und Changelog-Regeln.
41-
- [shopify-sync/shopify_sync.py](/home/chrisi/Lagerverwaltung/shopify-sync/shopify_sync.py)
42-
Separater Shopify-Sync fuer Produkte, Bestand und Bestellungen.
43-
- [shopify-sync/sync_version.py](/home/chrisi/Lagerverwaltung/shopify-sync/sync_version.py)
44-
Eigene Versionsquelle fuer den separaten Shopify-Sync.
45-
- [shopify-sync/CHANGELOG.md](/home/chrisi/Lagerverwaltung/shopify-sync/CHANGELOG.md)
46-
Release-Historie nur fuer den Shopify-Sync.
47-
- [post/internetmarke_client.py](/home/chrisi/Lagerverwaltung/post/internetmarke_client.py)
48-
Vorbereitung fuer Deutsche Post INTERNETMARKE.
23+
Produktive Carrier-Integrationen:
4924

50-
## Voraussetzungen
25+
- `GLS`
26+
- `Deutsche Post INTERNETMARKE`
5127

52-
- Python 3.11+
53-
- PostgreSQL
54-
- `curses`
55-
- fuer Labeldruck: `Pillow`, `python-barcode`, `brother_ql`
56-
- fuer Listen-/Lieferschein-Druck: Drucksystem mit `lp`
57-
- fuer HTML/CSS-Lieferscheine: `WeasyPrint` (inkl. Systembibliotheken wie cairo/pango)
28+
Zusaetzlich vorhanden:
5829

59-
Die Anwendung erweitert benoetigte Datenbankspalten und legt die Tabellen fuer Bestellungen und Inventur bei Bedarf selbst an.
30+
- `Adresslabel` fuer interne Labels ohne Carrier-API
6031

61-
## Konfiguration
32+
Die Carrier-Struktur verwendet zentrale Carrier-Definitionen mit gemeinsamer Versandhistory und Shopify-Anbindung.
6233

63-
Es gibt zwei Ebenen:
34+
## Dokumentation
6435

65-
- [settings.json](/home/chrisi/Lagerverwaltung/settings.json)
66-
versionierte Projekt-Defaults
67-
- `settings.local.json`
68-
lokale, nicht versionierte Laufzeitwerte
36+
- Bedienungsanleitung: [docs/bedienungsanleitung.md](/home/chrisi/Lagerverwaltung/docs/bedienungsanleitung.md)
37+
- Versand-Integrationsdoku: [docs/versanddienstleister.md](/home/chrisi/Lagerverwaltung/docs/versanddienstleister.md)
38+
- English README: [README.en.md](/home/chrisi/Lagerverwaltung/README.en.md)
39+
- English user manual: [docs/bedienungsanleitung.en.md](/home/chrisi/Lagerverwaltung/docs/bedienungsanleitung.en.md)
40+
- English shipping integration notes: [docs/shipping-providers.en.md](/home/chrisi/Lagerverwaltung/docs/shipping-providers.en.md)
41+
- Release-Historie: [CHANGELOG.md](/home/chrisi/Lagerverwaltung/CHANGELOG.md)
42+
- GitHub Releases: <https://github.com/xoquox/Lagerverwaltung/releases>
6943

44+
## Varianten
7045

71-
Wichtige Einstellungen:
72-
73-
- `db_host`, `db_name`, `db_user`, `db_pass`
74-
- `language` (`de` oder `en`)
75-
- `color_theme` (`blue`, `green`, `mono`, `megatrends`, `smoth`, `norton`, `gold-standard`, `subtile`, `monokai`)
76-
- `color_theme_file` (optional, Pfad zu eigener JSON-Datei mit Themes)
77-
- `printer_uri`, `printer_model`, `label_size`
78-
- `label_font_regular`, `label_font_condensed` (optional, lokale TrueType/OpenType Fonts fuer Labeldruck)
79-
- `location_regex_regal`, `location_regex_fach`, `location_regex_platz`
80-
- `picklist_printer`
81-
- `delivery_note_printer`
82-
- `pdf_output_dir`
83-
- `delivery_note_template_path` (optional, lokaler Pfad zur PDF-Vorlage ausserhalb von Git)
84-
- `delivery_note_logo_source` (optional, lokaler Pfad oder `https://`-URL fuer das Logo)
85-
- `delivery_note_sender_name`
86-
- `delivery_note_sender_street`
87-
- `delivery_note_sender_city`
88-
- `delivery_note_sender_email`
89-
- `shipping_carrier`
90-
- `shipping_label_printer_gls`, `shipping_label_printer_dhl`, `shipping_label_printer_post`
91-
- `shipping_label_format_gls`, `shipping_label_format_dhl`, `shipping_label_format_post`
92-
- `shipping_label_printer`, `shipping_label_format` (Fallback/Legacy)
93-
- `shipping_services`, `shipping_packaging_weight_grams`
94-
- `gls_api_url`, `gls_user`, `gls_password`, `gls_contact_id`
95-
- `post_api_url`, `post_user`, `post_password`, `post_partner_id`
96-
97-
## Entwicklung und Releases
98-
99-
- `main` bleibt produktiv und enthaelt nur getestete Releases.
100-
- `develop` ist der Integrationsbranch fuer neue Arbeit.
101-
- Neue Aufgaben starten in `feature/*` und werden erst nach `develop`, dann nach `main` uebernommen.
102-
- `CHANGELOG.md` wird nur beim Merge eines fertigen Stands nach `main` ergaenzt.
103-
- `app_version.py` fuehrt die sichtbare Versionsnummer:
104-
- Release auf `main`: z. B. `1.21.0`
105-
- Entwicklungsstand auf `develop`: z. B. `1.21.0-dev`
106-
- Der Shopify-Sync hat zusaetzlich eine eigene Versionsquelle in [sync_version.py](/home/chrisi/Lagerverwaltung/shopify-sync/sync_version.py)
107-
und ein eigenes Sync-Changelog in [shopify-sync/CHANGELOG.md](/home/chrisi/Lagerverwaltung/shopify-sync/CHANGELOG.md).
108-
- Release-Eintraege in [CHANGELOG.md](/home/chrisi/Lagerverwaltung/CHANGELOG.md) enthalten die zugehoerige Sync-Version
109-
und verweisen auf das separate Sync-Changelog.
110-
111-
## Shopify-Sync
112-
113-
Der Sync laeuft getrennt von der TUI und kann direkt oder im Container gestartet werden.
114-
Er hat eine eigene Versionierung und ein eigenes Changelog:
115-
116-
- [shopify-sync/sync_version.py](/home/chrisi/Lagerverwaltung/shopify-sync/sync_version.py)
117-
- [shopify-sync/CHANGELOG.md](/home/chrisi/Lagerverwaltung/shopify-sync/CHANGELOG.md)
118-
119-
Mindestens benoetigte Shopify-Scopes:
120-
121-
- `read_products`
122-
- `read_inventory`
123-
- `write_inventory`
124-
- `read_locations`
125-
- `read_orders`
126-
127-
Zusaetzlich:
128-
129-
- `read_all_orders`
130-
falls Bestellungen aelter als 60 Tage geladen werden sollen
131-
132-
Der Sync schreibt unter anderem:
133-
134-
- Bestellungen und Positionen
135-
- Fulfillment-Status
136-
- Zahlungsstatus
137-
138-
Version der laufenden Sync-Instanz abfragen:
139-
140-
```bash
141-
python3 shopify-sync/shopify_sync.py --version
142-
python3 shopify-sync/shopify_sync.py version --json
143-
```
144-
145-
Im Docker-Container typischerweise:
146-
147-
```bash
148-
docker exec -it shopify-sync python /app/shopify_sync.py --version
149-
docker exec -it shopify-sync python /app/shopify_sync.py version --json
150-
```
151-
152-
Die JSON-Ausgabe liefert Service, Version und Zeitstempel der laufenden Sync-Instanz.
153-
154-
## Installation
155-
156-
Automatische Installation fuer die meisten Linux-Distributionen:
157-
158-
```bash
159-
git clone <repo-url>
160-
cd Lagerverwaltung
161-
./scripts/install-linux.sh
162-
```
163-
164-
Das Script erkennt `dnf`, `apt`, `pacman` oder `zypper` automatisch, installiert Systempakete, erstellt `.venv` und legt einen Starter unter `~/.local/bin/lager-mc` an.
165-
166-
Manueller Start ohne Install-Script:
167-
168-
```bash
169-
git clone <repo-url>
170-
cd Lagerverwaltung
171-
python3 -m py_compile lager_mc.py
172-
python3 lager_mc.py
173-
```
174-
175-
Falls Pakete fehlen:
176-
177-
```bash
178-
pip install psycopg2-binary pillow python-barcode brother_ql requests python-dotenv
179-
```
180-
181-
## Druck
182-
183-
### Labeldruck
184-
185-
Etiketten werden ueber [label_print.py](/home/chrisi/Lagerverwaltung/label_print.py) erzeugt. Unterstuetzt werden Brother-QL-Netzwerkdrucker.
186-
187-
Wenn gewuenscht, koennen benutzerdefinierte lokale Fontdateien in den Einstellungen gesetzt werden:
188-
189-
```json
190-
{
191-
"label_font_regular": "/pfad/zu/deinem/font-regular.ttf",
192-
"label_font_condensed": "/pfad/zu/deinem/font-condensed.ttf"
193-
}
194-
```
195-
196-
### Picklisten
197-
198-
Picklisten werden textbasiert ueber den in den Einstellungen hinterlegten Drucker gesendet.
199-
200-
### Lieferscheine
201-
202-
Lieferscheine werden standardmaessig ueber HTML/CSS mit WeasyPrint erzeugt.
203-
`delivery_note_template_path` kann optional auf eine `.html`/`.htm`-Datei zeigen, um das Layout frei anzupassen.
204-
Wenn stattdessen eine `.pdf`-Vorlage hinterlegt wird, nutzt die Anwendung den Legacy-PDF-Renderer.
205-
206-
Beispiel (`settings.local.json`):
207-
208-
```json
209-
{
210-
"delivery_note_template_path": "/home/<user>/Dokumente/lager/lieferschein_template.html",
211-
"delivery_note_logo_source": "https://example.com/logo.png"
212-
}
213-
```
214-
215-
Unterstuetzt werden:
216-
217-
- PDF-Export
218-
- getrennten Drucker
219-
- mehrseitige Ausgabe
220-
- Seitennummerierung
221-
222-
## Logging
223-
224-
Rotierende Logdateien liegen unter [logs](/home/chrisi/Lagerverwaltung/logs):
225-
226-
- [logs/lagerverwaltung.log](/home/chrisi/Lagerverwaltung/logs/lagerverwaltung.log)
227-
- [logs/druck.log](/home/chrisi/Lagerverwaltung/logs/druck.log)
228-
229-
Beispiel:
230-
231-
```bash
232-
export LAGERVERWALTUNG_LOG_LEVEL=DEBUG
233-
```
234-
235-
## Tests
236-
237-
```bash
238-
python3 -m unittest discover -s tests -v
239-
```
240-
- In den Einstellungen koennen `language` und `color_theme` ueber eine Auswahl (F4) gewaehlt werden, ohne Werte manuell zu tippen.
241-
242-
Beispiel fuer eigene Themes (`color_theme_file`):
243-
244-
```json
245-
{
246-
"themes": {
247-
"my-blue": {
248-
"pair_1_fg": "white",
249-
"pair_1_bg": "blue",
250-
"pair_2_fg": "black",
251-
"pair_2_bg": "cyan",
252-
"pair_3_fg": "white",
253-
"pair_3_bg": "black"
254-
}
255-
}
256-
}
257-
```
258-
259-
Erlaubte Farbnamen: `black`, `red`, `green`, `brown`, `yellow`, `blue`, `magenta`, `cyan`, `white`,
260-
`brightblack`, `brightred`, `brightgreen`, `brightyellow`, `brightblue`, `brightmagenta`, `brightcyan`, `brightwhite`.
46+
- Fork mit den Kernfunktionen fuer Lagerverwaltung ohne Shopify-Integration und Versand: [simple-storage-core](https://github.com/b4ckspace/simple-storage-core)

0 commit comments

Comments
 (0)