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.part_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
116 # Spaltenzuordnungen für Benutzerdefinierte Variablen:
117 # Beispiel (Achtung, die Reihenfolge ist wichtig):
119 # "mappings[+].from=vm_product_length"
120 # "mappings[].to=cvar_vm_product_length"
121 # "mappings[+].from=vm_product_width"
122 # "mappings[].to=cvar_vm_product_width"
123 # "mappings[+].from=vm_product_height"
124 # "mappings[].to=cvar_vm_product_height"
128 -H 'Content-Type:multipart/form-data' \
129 --silent --insecure \
130 -F 'action=CsvImport/dispatch' \
132 -F 'escape_char=quote' \
133 -F 'profile.type=parts' \
134 -F 'quote_char=quote' \
135 -F 'sep_char=semicolon' \
136 -F 'settings.apply_buchungsgruppe=all' \
137 -F 'settings.article_number_policy=update_prices' \
138 -F 'settings.charset=CP850' \
139 -F 'settings.default_buchungsgruppe=395' \
140 -F 'settings.duplicates=no_check' \
141 -F 'settings.numberformat=1.000,00' \
142 -F 'settings.part_type=part' \
143 -F 'settings.sellprice_adjustment=0' \
144 -F 'settings.sellprice_adjustment_type=percent' \
145 -F 'settings.sellprice_places=2' \
146 -F 'settings.shoparticle_if_missing=0' \
147 -F "{AUTH}login=${login}" \
148 -F "{AUTH}password=${password}" \
149 -F "{AUTH}client_id=${client_id}" \
155 do_curl 'action_test' > $tmpf
157 if grep -q -i 'Ihr Import wird verarbeitet' $tmpf; then
159 do_curl 'action_import' > $tmpf
160 if grep -i 'Ihr Import wird verarbeitet' $tmpf ; then
163 echo "Import schlug fehl. Ausgabe befindet sich in ${tmpf}"
167 echo "Test-Import nicht OK. Ausgabe befindet sich in ${tmpf}"