3 # Ein Script, das demonstriert, wie sich CSV-Dateien über die
 
   4 # Kommandozeile importieren lassen. Dabei gibt es zwei Orte, an denen
 
   5 # das Script angepasst werden muss. Diese sind entsprechend mit
 
   6 # Kommentaren versehen.
 
   8 # Der Aufruf erfolgt mit einem Parameter: dem Dateinamen der
 
   9 # CSV-Datei. Als Ausgabe erscheint bei Erfolg gar nichts (und
 
  10 # Exit-Code 0). Im Fehlerfall werden eine Meldung und der Name einer
 
  11 # temporären Datei ausgegeben, in der der HTML-Code der Fehlermeldung
 
  12 # sichtbar ist. Exit-Code ist dann 2.
 
  14 # ---- Logindaten und URL anpassen: ----
 
  15 login=MyLxOfficeUserName
 
  16 password=MySecretPassword
 
  17 client_id=ClientDatabaseID
 
  18 url='https://localhost/kivitendo-erp/controller.pl'
 
  25 test -z "$1" && fail "Kein CSV-Dateiname angegeben."
 
  26 test -f "$1" || fail "Datei '$1' nicht gefunden."
 
  32   # ---- Hier ebenfalls die Parameter anpassen, falls notwendig. ----
 
  33   # Die anpassbaren Parameter und ihre Werte sind:
 
  35   # Allgemeine Parameter für alle importierbaren Sachen:
 
  37   #   "profile.type": zu importierende Objekte: "parts": Artikel;
 
  38   #   "customers_vendors": Kunden/Lieferanten; "contacts":
 
  39   #   Ansprechpersonen; "addresses": Lieferanschriften
 
  41   #   "escape_char": "quote", "singlequote" oder das Escape-Zeichen
 
  44   #   "quote_char": die gleichen Optionen wie "escape_char"
 
  46   #   "sep_char": "comma", "semicolon", "space", "tab" oder das
 
  49   #   "settings.numberformat": "1.000,00", "1000,00", "1,000.00",
 
  52   #   "settings.charset": Name eines Zeichensatzes. Meist "CP850" oder
 
  55   #   "settings.duplicates": Doublettencheck; "no_check", "check_csv",
 
  56   #   "check_db". Falls angestellt wird, werden weitere Einstellungen
 
  57   #   "settings.duplicates_....=1" benötigt, die vom Programm logisch
 
  58   #   mit "und" verknüpft werden. Diese Einstellungen sind für jeden
 
  59   #   Typ weiter unten beschrieben.
 
  61   # Parameter für Artikel:
 
  63   #   "settings.default_buchungsgruppe": Standard-Buchungsgruppe;
 
  64   #   Datenbank-ID einer Buchungsgruppe
 
  66   #   "settings.apply_buchungsgruppe": Buchungsgruppe wo anwenden:
 
  67   #   "never", "all", "missing"
 
  69   #   "settings.parts_type": Artikeltyp: "part", "service", "mixed"
 
  71   #   "settings.article_number_policy": Artikel mit existierender
 
  72   #   Artikelnummer: "update_prices", "insert_new"
 
  74   #   "settings.sellprice_places": Anzahl Nachkommastellen
 
  77   #   "settings.sellprice_adjustment": Wert für Verkaufspreisanpassung
 
  79   #   "settings.sellprice_adjustment_type": Art der
 
  80   #   Verkaufspreisanpassung; "percent", "absolute"
 
  82   #   "settings.shoparticle_if_missing": Shopartikel setzen falls
 
  85   #   "settings.duplicates_partnumber=1": Doublettencheck nach
 
  86   #   Artikelnummer (nur, wenn "settings.duplicates" auch gesetzt
 
  89   #   "settings.duplicates_description=1": Doublettencheck nach
 
  90   #   Artikelnummer (nur, wenn "settings.duplicates" auch gesetzt
 
  93   # Parameter für Kunden/Lieferanten:
 
  95   #   "settings.table": Zieltabelle: "customer", "vendor"
 
  97   #   "settings.duplicates_name=1": Doublettencheck nach
 
  98   #   Kunden-/Lieferantennamen (nur, wenn "settings.duplicates" auch
 
 101   # Parameter für Ansprechperson:
 
 103   #   "settings.duplicates_cp_name=1": Doublettencheck nach Namen der
 
 104   #   Ansprechperson (nur, wenn "settings.duplicates" auch gesetzt
 
 107   # Parameter für Lieferanschriten:
 
 108   #   Nur die Standard-Parameter von oben
 
 110   # Parameter für Projekte:
 
 112   #   "settings.duplicates_projectnumber=1": Doublettencheck nach
 
 113   #   Projektnummer (nur, wenn "settings.duplicates" auch gesetzt
 
 117     --silent --insecure \
 
 118     -F 'action=CsvImport/dispatch' \
 
 120     -F 'escape_char=quote' \
 
 121     -F 'profile.type=parts' \
 
 122     -F 'quote_char=quote' \
 
 123     -F 'sep_char=semicolon' \
 
 124     -F 'settings.apply_buchungsgruppe=all' \
 
 125     -F 'settings.article_number_policy=update_prices' \
 
 126     -F 'settings.charset=CP850' \
 
 127     -F 'settings.default_buchungsgruppe=395' \
 
 128     -F 'settings.duplicates=no_check' \
 
 129     -F 'settings.numberformat=1.000,00' \
 
 130     -F 'settings.parts_type=part' \
 
 131     -F 'settings.sellprice_adjustment=0' \
 
 132     -F 'settings.sellprice_adjustment_type=percent' \
 
 133     -F 'settings.sellprice_places=2' \
 
 134     -F 'settings.shoparticle_if_missing=0' \
 
 135     -F "{AUTH}login=${login}" \
 
 136     -F "{AUTH}password=${password}" \
 
 137     -F "{AUTH}client_id=${client_id}" \
 
 143 do_curl 'action_test'  > $tmpf
 
 145 if grep -q -i 'es wurden.*objekte gefunden, von denen.*' $tmpf; then
 
 147   do_curl 'action_import' > $tmpf
 
 148   if grep -i 'von.*objekten wurden importiert' $tmpf ; then
 
 151     echo "Import schlug fehl. Ausgabe befindet sich in ${tmpf}"
 
 155   echo "Test-Import nicht OK. Ausgabe befindet sich in ${tmpf}"