Kivitendo Einheiten-Migration für ZUGFeRD (m² und m³)
This commit is contained in:
commit
37f22574cd
72
README.md
Normal file
72
README.md
Normal file
@ -0,0 +1,72 @@
|
||||
# Kivitendo Einheiten-Migration für ZUGFeRD
|
||||
|
||||
## Zweck
|
||||
Diese Skripte ändern Einheiten in Kivitendo von Text-Format zu Unicode-Hochzahlen für ZUGFeRD-Kompatibilität.
|
||||
|
||||
## Hintergrund
|
||||
Kivitendo erkennt beim ZUGFeRD-Export nur bestimmte Einheiten als valide.
|
||||
Die korrekten Formate sind:
|
||||
- `m²` (mit hochgestellter 2) statt `m2` oder `MTK`
|
||||
- `m³` (mit hochgestellter 3) statt `m3` oder `MTQ`
|
||||
|
||||
## Dateien
|
||||
- `change_m3_to_m_hoch_3.sql` - Ändert m3 → m³
|
||||
|
||||
## Anwendung
|
||||
|
||||
### Voraussetzungen
|
||||
- PostgreSQL Zugriff
|
||||
- Backup der Datenbank (empfohlen!)
|
||||
|
||||
### Backup erstellen
|
||||
```bash
|
||||
sudo -u postgres pg_dumpall > /root/postgres_backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
```
|
||||
|
||||
### Skript ausführen
|
||||
```bash
|
||||
sudo -u postgres psql -d <datenbankname> -f change_m3_to_m_hoch_3.sql
|
||||
```
|
||||
|
||||
**Beispiel für Datenbank "hemi":**
|
||||
```bash
|
||||
cp change_m3_to_m_hoch_3.sql /tmp/
|
||||
chmod 644 /tmp/change_m3_to_m_hoch_3.sql
|
||||
sudo -u postgres psql -d hemi -f /tmp/change_m3_to_m_hoch_3.sql
|
||||
```
|
||||
|
||||
## Was wird geändert?
|
||||
|
||||
Das Skript führt folgende Schritte aus:
|
||||
1. Entfernt temporär Foreign Key Constraints
|
||||
2. Aktualisiert Einheit in folgenden Tabellen:
|
||||
- `units` (Einheiten-Stammdaten)
|
||||
- `parts` (Artikel)
|
||||
- `invoice` (Rechnungspositionen)
|
||||
- `orderitems` (Auftragspositionen)
|
||||
- `delivery_order_items` (Lieferscheinpositionen)
|
||||
- `units_language` (Einheiten-Übersetzungen)
|
||||
3. Stellt Foreign Key Constraints wieder her
|
||||
4. Zeigt Statistik der geänderten Datensätze
|
||||
|
||||
## Sicherheit
|
||||
|
||||
✅ **Transaction-basiert:** Bei Fehler wird automatisch zurückgerollt (ROLLBACK)
|
||||
✅ **Alle referenzierten Tabellen werden aktualisiert**
|
||||
⚠️ **Historische Daten werden ebenfalls geändert** (Foreign Keys erzwingen das)
|
||||
|
||||
## Beispiel-Ausgabe
|
||||
```
|
||||
Fertig! m3 -> m³ geändert
|
||||
tabelle | anzahl
|
||||
-------------+--------
|
||||
Artikel: | 31
|
||||
Rechnungen: | 194
|
||||
Aufträge: | 162
|
||||
```
|
||||
|
||||
## Erstellt am
|
||||
2026-01-31
|
||||
|
||||
## Version
|
||||
1.0
|
||||
48
change_m3_to_m_hoch_3.sql
Normal file
48
change_m3_to_m_hoch_3.sql
Normal file
@ -0,0 +1,48 @@
|
||||
-- ============================================================================
|
||||
-- Kivitendo: m3 -> m³ ändern (für ZUGFeRD-Kompatibilität)
|
||||
-- ============================================================================
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- Constraints temporär entfernen
|
||||
ALTER TABLE assortment_items DROP CONSTRAINT IF EXISTS assortment_items_unit_fkey;
|
||||
ALTER TABLE delivery_order_items DROP CONSTRAINT IF EXISTS delivery_order_items_unit_fkey;
|
||||
ALTER TABLE invoice DROP CONSTRAINT IF EXISTS invoice_unit_fkey;
|
||||
ALTER TABLE orderitems DROP CONSTRAINT IF EXISTS orderitems_unit_fkey;
|
||||
ALTER TABLE parts DROP CONSTRAINT IF EXISTS parts_unit_fkey;
|
||||
ALTER TABLE units_language DROP CONSTRAINT IF EXISTS units_language_unit_fkey;
|
||||
|
||||
-- ALLE Tabellen updaten: m3 -> m³
|
||||
UPDATE units SET name = 'm³' WHERE name = 'm3';
|
||||
UPDATE parts SET unit = 'm³' WHERE unit = 'm3';
|
||||
UPDATE invoice SET unit = 'm³' WHERE unit = 'm3';
|
||||
UPDATE orderitems SET unit = 'm³' WHERE unit = 'm3';
|
||||
UPDATE delivery_order_items SET unit = 'm³' WHERE unit = 'm3';
|
||||
UPDATE units_language SET unit = 'm³' WHERE unit = 'm3';
|
||||
|
||||
-- Constraints wieder hinzufügen
|
||||
ALTER TABLE assortment_items ADD CONSTRAINT assortment_items_unit_fkey
|
||||
FOREIGN KEY (unit) REFERENCES units(name);
|
||||
ALTER TABLE delivery_order_items ADD CONSTRAINT delivery_order_items_unit_fkey
|
||||
FOREIGN KEY (unit) REFERENCES units(name);
|
||||
ALTER TABLE invoice ADD CONSTRAINT invoice_unit_fkey
|
||||
FOREIGN KEY (unit) REFERENCES units(name);
|
||||
ALTER TABLE orderitems ADD CONSTRAINT orderitems_unit_fkey
|
||||
FOREIGN KEY (unit) REFERENCES units(name);
|
||||
ALTER TABLE parts ADD CONSTRAINT parts_unit_fkey
|
||||
FOREIGN KEY (unit) REFERENCES units(name);
|
||||
ALTER TABLE units_language ADD CONSTRAINT units_language_unit_fkey
|
||||
FOREIGN KEY (unit) REFERENCES units(name);
|
||||
|
||||
-- Ergebnis anzeigen
|
||||
SELECT 'Fertig! m3 -> m³ geändert' as status;
|
||||
SELECT 'Artikel:' as tabelle, COUNT(*) as anzahl FROM parts WHERE unit = 'm³'
|
||||
UNION ALL
|
||||
SELECT 'Rechnungen:', COUNT(*) FROM invoice WHERE unit = 'm³'
|
||||
UNION ALL
|
||||
SELECT 'Aufträge:', COUNT(*) FROM orderitems WHERE unit = 'm³';
|
||||
|
||||
SELECT 'Alle Einheiten:' as info;
|
||||
SELECT name FROM units ORDER BY sortkey;
|
||||
|
||||
COMMIT;
|
||||
Loading…
x
Reference in New Issue
Block a user