From dfb76ebf04df9aed8ba63d7b51bc558d2928030e Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Thu, 17 Nov 2011 18:18:14 +0100 Subject: [PATCH] =?utf8?q?Beispielscript=20f=C3=BCr=20CSV-Import=20=C3=BCb?= =?utf8?q?er=20die=20Kommandozeile?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- scripts/csv-import-from-shell.sh | 131 +++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 scripts/csv-import-from-shell.sh diff --git a/scripts/csv-import-from-shell.sh b/scripts/csv-import-from-shell.sh new file mode 100644 index 000000000..c0e88904a --- /dev/null +++ b/scripts/csv-import-from-shell.sh @@ -0,0 +1,131 @@ +#!/bin/bash + +# Ein Script, das demonstriert, wie sich CSV-Dateien über die +# Kommandozeile importieren lassen. Dabei gibt es zwei Orte, an denen +# das Script angepasst werden muss. Diese sind entsprechend mit +# Kommentaren versehen. +# +# Der Aufruf erfolgt mit einem Parameter: dem Dateinamen der +# CSV-Datei. Als Ausgabe erscheint bei Erfolg gar nichts (und +# Exit-Code 0). Im Fehlerfall werden eine Meldung und der Name einer +# temporären Datei ausgegeben, in der der HTML-Code der Fehlermeldung +# sichtbar ist. Exit-Code ist dann 2. + +# ---- Logindaten und URL anpassen: ---- +login=MyLxOfficeUserName +password=MySecretPassword +url='https://localhost/lx-office-erp/controller.pl' + +function fail { + echo "$@" + exit 1 +} + +test -z $1 && fail "Kein CSV-Dateiname angegeben." +test -f $1 || fail "Datei '$1' nicht gefunden." +file="$1" + +function do_curl { + local action="$1" + + # ---- Hier ebenfalls die Parameter anpassen, falls notwendig. ---- + # Die anpassbaren Parameter und ihre Werte sind: + + # Allgemeine Parameter für alle importierbaren Sachen: + + # "profile.type": zu importierende Objekte: "parts": Artikel; + # "customers_vendors": Kunden/Lieferanten; "contacts": + # Ansprechpersonen; "addresses": Lieferanschriften + + # "escape_char": "quote", "singlequote" oder das Escape-Zeichen + # selber + + # "quote_char": die gleichen Optionen wie "escape_char" + + # "sep_char": "comma", "semicolon", "space", "tab" oder das + # Trennzeichen selber + + # "settings.numberformat": "1.000,00", "1000,00", "1,000.00", + # "1000.00" + + # "settings.charset": Name eines Zeichensatzes. Meist "CP850" oder + # "UTF-8". + + # "settings.duplicates": Doublettencheck; "no_check", "check_csv", + # "check_db" + + # Parameter für Artikel: + + # "settings.default_buchungsgruppe": Standard-Buchungsgruppe; + # Datenbank-ID einer Buchungsgruppe + + # "settings.apply_buchungsgruppe": Buchungsgruppe wo anwenden: + # "never", "all", "missing" + + # "settings.parts_type": Artikeltyp: "part", "service", "mixed" + + # "settings.article_number_policy": Artikel mit existierender + # Artikelnummer: "update_prices", "insert_new" + + # "settings.sellprice_places": Anzahl Nachkommastellen + # Verkaufspreise + + # "settings.sellprice_adjustment": Wert für Verkaufspreisanpassung + + # "settings.sellprice_adjustment_type": Art der + # Verkaufspreisanpassung; "percent", "absolute" + + # "settings.shoparticle_if_missing": Shopartikel setzen falls + # fehlt: "1", "0" + + # Parameter für Kunden/Lieferanten: + + # "settings.table": Zieltabelle: "customer", "vendor" + + # Parameter für Ansprechpartner: + # Nur die Standard-Parameter von oben + + # Parameter für Lieferanschriten: + # Nur die Standard-Parameter von oben + + curl \ + --silent --insecure \ + -F 'action=CsvImport/dispatch' \ + -F "${action}=1" \ + -F 'escape_char=quote' \ + -F 'profile.type=parts' \ + -F 'quote_char=quote' \ + -F 'sep_char=semicolon' \ + -F 'settings.apply_buchungsgruppe=all' \ + -F 'settings.article_number_policy=update_prices' \ + -F 'settings.charset=CP850' \ + -F 'settings.default_buchungsgruppe=395' \ + -F 'settings.duplicates=no_check' \ + -F 'settings.numberformat=1.000,00' \ + -F 'settings.parts_type=part' \ + -F 'settings.sellprice_adjustment=0' \ + -F 'settings.sellprice_adjustment_type=percent' \ + -F 'settings.sellprice_places=2' \ + -F 'settings.shoparticle_if_missing=0' \ + -F "login=${login}" \ + -F "password=${password}" \ + -F "file=@${file}" \ + ${url} +} + +tmpf=$(mktemp) +do_curl 'action_test' > $tmpf + +if grep -q -i 'es wurden.*objekte gefunden, von denen.*' $tmpf; then + rm $tmpf + do_curl 'action_import' > $tmpf + if grep -i 'von.*objekten wurden importiert' $tmpf ; then + rm $tmpf + else + echo "Import schlug fehl. Ausgabe befindet sich in ${tmpf}" + exit 2 + fi +else + echo "Test-Import nicht OK. Ausgabe befindet sich in ${tmpf}" + exit 2 +fi -- 2.20.1