Beispielscript für CSV-Import über die Kommandozeile
[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 url='https://localhost/lx-office-erp/controller.pl'
18
19 function fail {
20   echo "$@"
21   exit 1
22 }
23
24 test -z $1 && fail "Kein CSV-Dateiname angegeben."
25 test -f $1 || fail "Datei '$1' nicht gefunden."
26 file="$1"
27
28 function do_curl {
29   local action="$1"
30
31   # ---- Hier ebenfalls die Parameter anpassen, falls notwendig. ----
32   # Die anpassbaren Parameter und ihre Werte sind:
33
34   # Allgemeine Parameter für alle importierbaren Sachen:
35
36   #   "profile.type": zu importierende Objekte: "parts": Artikel;
37   #   "customers_vendors": Kunden/Lieferanten; "contacts":
38   #   Ansprechpersonen; "addresses": Lieferanschriften
39
40   #   "escape_char": "quote", "singlequote" oder das Escape-Zeichen
41   #   selber
42
43   #   "quote_char": die gleichen Optionen wie "escape_char"
44
45   #   "sep_char": "comma", "semicolon", "space", "tab" oder das
46   #   Trennzeichen selber
47
48   #   "settings.numberformat": "1.000,00", "1000,00", "1,000.00",
49   #   "1000.00"
50
51   #   "settings.charset": Name eines Zeichensatzes. Meist "CP850" oder
52   #   "UTF-8".
53
54   #   "settings.duplicates": Doublettencheck; "no_check", "check_csv",
55   #   "check_db"
56
57   # Parameter für Artikel:
58
59   #   "settings.default_buchungsgruppe": Standard-Buchungsgruppe;
60   #   Datenbank-ID einer Buchungsgruppe
61
62   #   "settings.apply_buchungsgruppe": Buchungsgruppe wo anwenden:
63   #   "never", "all", "missing"
64
65   #   "settings.parts_type": Artikeltyp: "part", "service", "mixed"
66
67   #   "settings.article_number_policy": Artikel mit existierender
68   #   Artikelnummer: "update_prices", "insert_new"
69
70   #   "settings.sellprice_places": Anzahl Nachkommastellen
71   #   Verkaufspreise
72
73   #   "settings.sellprice_adjustment": Wert für Verkaufspreisanpassung
74
75   #   "settings.sellprice_adjustment_type": Art der
76   #   Verkaufspreisanpassung; "percent", "absolute"
77
78   #   "settings.shoparticle_if_missing": Shopartikel setzen falls
79   #   fehlt: "1", "0"
80
81   # Parameter für Kunden/Lieferanten:
82
83   #   "settings.table": Zieltabelle: "customer", "vendor"
84
85   # Parameter für Ansprechpartner:
86   #   Nur die Standard-Parameter von oben
87
88   # Parameter für Lieferanschriten:
89   #   Nur die Standard-Parameter von oben
90
91   curl \
92     --silent --insecure \
93     -F 'action=CsvImport/dispatch' \
94     -F "${action}=1" \
95     -F 'escape_char=quote' \
96     -F 'profile.type=parts' \
97     -F 'quote_char=quote' \
98     -F 'sep_char=semicolon' \
99     -F 'settings.apply_buchungsgruppe=all' \
100     -F 'settings.article_number_policy=update_prices' \
101     -F 'settings.charset=CP850' \
102     -F 'settings.default_buchungsgruppe=395' \
103     -F 'settings.duplicates=no_check' \
104     -F 'settings.numberformat=1.000,00' \
105     -F 'settings.parts_type=part' \
106     -F 'settings.sellprice_adjustment=0' \
107     -F 'settings.sellprice_adjustment_type=percent' \
108     -F 'settings.sellprice_places=2' \
109     -F 'settings.shoparticle_if_missing=0' \
110     -F "login=${login}" \
111     -F "password=${password}" \
112     -F "file=@${file}" \
113     ${url}
114 }
115
116 tmpf=$(mktemp)
117 do_curl 'action_test'  > $tmpf
118
119 if grep -q -i 'es wurden.*objekte gefunden, von denen.*' $tmpf; then
120   rm $tmpf
121   do_curl 'action_import' > $tmpf
122   if grep -i 'von.*objekten wurden importiert' $tmpf ; then
123     rm $tmpf
124   else
125     echo "Import schlug fehl. Ausgabe befindet sich in ${tmpf}"
126     exit 2
127   fi
128 else
129   echo "Test-Import nicht OK. Ausgabe befindet sich in ${tmpf}"
130   exit 2
131 fi