epic-s6ts
[kivitendo-erp.git] / scripts / csv-import-from-shell.sh
1 #!/bin/bash
2
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.
7 #
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.
13
14 # ---- Logindaten und URL anpassen: ----
15 login=MyLxOfficeUserName
16 password=MySecretPassword
17 client_id=ClientDatabaseID
18 url='https://localhost/kivitendo-erp/controller.pl'
19
20 function fail {
21   echo "$@"
22   exit 1
23 }
24
25 test -z "$1" && fail "Kein CSV-Dateiname angegeben."
26 test -f "$1" || fail "Datei '$1' nicht gefunden."
27 file="$1"
28
29 function do_curl {
30   local action="$1"
31
32   # ---- Hier ebenfalls die Parameter anpassen, falls notwendig. ----
33   # Die anpassbaren Parameter und ihre Werte sind:
34
35   # Allgemeine Parameter für alle importierbaren Sachen:
36
37   #   "profile.type": zu importierende Objekte: "parts": Artikel;
38   #   "customers_vendors": Kunden/Lieferanten; "contacts":
39   #   Ansprechpersonen; "addresses": Lieferanschriften
40
41   #   "escape_char": "quote", "singlequote" oder das Escape-Zeichen
42   #   selber
43
44   #   "quote_char": die gleichen Optionen wie "escape_char"
45
46   #   "sep_char": "comma", "semicolon", "space", "tab" oder das
47   #   Trennzeichen selber
48
49   #   "settings.numberformat": "1.000,00", "1000,00", "1,000.00",
50   #   "1000.00"
51
52   #   "settings.charset": Name eines Zeichensatzes. Meist "CP850" oder
53   #   "UTF-8".
54
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.
60
61   # Parameter für Artikel:
62
63   #   "settings.default_buchungsgruppe": Standard-Buchungsgruppe;
64   #   Datenbank-ID einer Buchungsgruppe
65
66   #   "settings.apply_buchungsgruppe": Buchungsgruppe wo anwenden:
67   #   "never", "all", "missing"
68
69   #   "settings.part_type": Artikeltyp: "part", "service", "mixed"
70
71   #   "settings.article_number_policy": Artikel mit existierender
72   #   Artikelnummer: "update_prices", "insert_new"
73
74   #   "settings.sellprice_places": Anzahl Nachkommastellen
75   #   Verkaufspreise
76
77   #   "settings.sellprice_adjustment": Wert für Verkaufspreisanpassung
78
79   #   "settings.sellprice_adjustment_type": Art der
80   #   Verkaufspreisanpassung; "percent", "absolute"
81
82   #   "settings.shoparticle_if_missing": Shopartikel setzen falls
83   #   fehlt: "1", "0"
84
85   #   "settings.duplicates_partnumber=1": Doublettencheck nach
86   #   Artikelnummer (nur, wenn "settings.duplicates" auch gesetzt
87   #   ist).
88
89   #   "settings.duplicates_description=1": Doublettencheck nach
90   #   Artikelnummer (nur, wenn "settings.duplicates" auch gesetzt
91   #   ist).
92
93   # Parameter für Kunden/Lieferanten:
94
95   #   "settings.table": Zieltabelle: "customer", "vendor"
96
97   #   "settings.duplicates_name=1": Doublettencheck nach
98   #   Kunden-/Lieferantennamen (nur, wenn "settings.duplicates" auch
99   #   gesetzt ist).
100
101   # Parameter für Ansprechperson:
102
103   #   "settings.duplicates_cp_name=1": Doublettencheck nach Namen der
104   #   Ansprechperson (nur, wenn "settings.duplicates" auch gesetzt
105   #   ist).
106
107   # Parameter für Lieferanschriten:
108   #   Nur die Standard-Parameter von oben
109
110   # Parameter für Projekte:
111
112   #   "settings.duplicates_projectnumber=1": Doublettencheck nach
113   #   Projektnummer (nur, wenn "settings.duplicates" auch gesetzt
114   #   ist).
115
116   # Spaltenzuordnungen für Benutzerdefinierte Variablen:
117   #   Beispiel (Achtung, die Reihenfolge ist wichtig):
118
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"
125
126   curl \
127     -X 'POST' \
128     -H 'Content-Type:multipart/form-data' \
129     --silent --insecure \
130     -F 'action=CsvImport/dispatch' \
131     -F "${action}=1" \
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}" \
150     -F "file=@${file}" \
151     ${url}
152 }
153
154 tmpf=$(mktemp)
155 do_curl 'action_test'  > $tmpf
156
157 if grep -q -i 'Ihr Import wird verarbeitet' $tmpf; then
158   rm $tmpf
159   do_curl 'action_import' > $tmpf
160   if grep -i 'Ihr Import wird verarbeitet' $tmpf ; then
161     rm $tmpf
162   else
163     echo "Import schlug fehl. Ausgabe befindet sich in ${tmpf}"
164     exit 2
165   fi
166 else
167   echo "Test-Import nicht OK. Ausgabe befindet sich in ${tmpf}"
168   exit 2
169 fi