def processForm(self, REQUEST, RESPONSE): example = self.form.get('example') datei = self.form.get('datei') if datei: data = self.read_data(datei) self.session.data['altdaten'] = data return h.SubmitOrBack( legend='Altdaten übernehmen', action='altimport', method='post', hidden=(('altdaten_validiert', '1'), ), zeilen=("Kein Fehler gefunden. Altdaten in die Datenbank übernehmen?", ) ).display() altdaten_validiert = self.form.get('altdaten_validiert') if altdaten_validiert: data = self.session.data['altdaten'] AltdatenList(where='').deleteall() altd_list = AltdatenList(data) altd_list.insertall() res = h.Meldung( legend="Altdaten erfolgreich importiert", zeilen=("Altdaten erfolgreich importiert.", "%s Datensätze eingelesen" % len(altd_list), 'Weiter zum Hauptmenü ...', ), onClick="go_to_url('menu')", ) return res.display() if self.session.data.get('altdaten'): del self.session.data['altdaten'] fname = 'demo_altdaten.csv' demo_altdaten = os.path.join(config.EBKUS_HOME, 'sql', fname) if example == '1': f = open(demo_altdaten) content = f.read() f.close() self.RESPONSE.setHeader('content-type', 'text/plain; charset=iso-8859-1') #self.RESPONSE.setHeader('content-disposition', 'attachment; filename=%s' % fname) self.RESPONSE.setBody(content) return elif example == '2': f = open(demo_altdaten) content = f.read() f.close() self.RESPONSE.setHeader('content-type', "text/csv; charset=iso-8859-1") self.RESPONSE.setHeader('content-disposition', 'attachment; filename=%s' % fname) self.RESPONSE.setBody(content) return erste_zeile = ';'.join(['"%s"' % f for f in self.get_altdaten_felder()][1:]) hinweise_csv = h.FieldsetDataTable( legend='Hinweise zur CSV-Datei', daten=[[h.String(string="Die CSV-Datei muss genauso aufgebaut sein wie die " + '<a href="altimport?example=1">Beispieldatei</a>.<br /> ' + "Dieses Format kann direkt mit Open Office oder MS Excel " + "geöffnet und geschrieben werden " + '(<a href="altimport?example=2">Beispiel</a>).', n_col=2, ) ], [h.String(string='Erste Zeile:' ), h.String(string= "In der ersten Zeile müssen in jeder Spalte " " die entsprechenden Feldnamen stehen: " "%s<em><Umbruch wg. Lesbarkeit></em> %s" % (erste_zeile[:60], erste_zeile[60:]) ), ], [h.String(string='Feldtrennzeichen:' ), h.String(string=';' ), ], [h.String(string='Texttrennzeichen:' ), h.String(string='"' ), ], [h.String(string='Texttrennzeichen im Text:' ), h.String(string='"" (Verdoppelung)' ), ], [h.String(string='Zeilenumbrüche in einem Feld:' ), h.String(string='zulässig' ), ], [h.String(string='Kodierung:' ), h.String(string='iso-8859-1, iso-8859-15, latin-1, WinLatin1 ' '(Das ist das, ' 'was im großen und ganzen ' 'standardmäßig von Open Office und MS Excel erzeugt wird, zumindest ' 'was die Umlaute und das EssZett betrifft. Es ist nicht Unicode oder utf8) ' ), ], ], ) hinweise_felder = h.FieldsetDataTable( legend='Hinweise zu den Feldern', daten=[[h.String(string="Felder können leer sein, die entsprechenden " 'Daten stehen dann nicht für eine Übernahme zur Verfügung.', n_col=2, ) ], [h.String(string='geburtsdatum:' ), h.String(string= "Tag . Monat . Jahr <br /> " "Das Jahr muss vierstellig sein, Tag und Monat ein- oder zweistellig, <br /> " "z.B. 1.1.2002, 10.01.1999" ), ], [h.String(string='geschlecht:' ), h.String(string='m oder w, alles andere ist ungültig' ), ], [h.String(string='jahr:' ), h.String(string='eine vierstellige Zahl' ), ], [h.String(string='strasse:' ), h.String(string='Endung mit <em>strasse, Strasse, straße, Straße</em> ' 'werden zu <em>str.</em> bzw. <em>Str.</em> normalisiert.' ), ], [h.String(string='hausnummer:' ), h.String(string='ein- bis dreistellige Zahl und evt. ein Buchstabe als ' 'Zusatz, der zum großgeschriebenen Buchstaben normalisiert wird.' ), ], [h.String(string='plz:' ), h.String(string='fünfstellige Zahl' ), ], ], ) altdimport = h.FieldsetFormInputTable( legend='Altdaten importieren (evt. bereits vorhandene werden ersetzt)', name='altimport',action="altimport",method="post", daten=[[h.UploadItem(label='Lokaler Dateiname', name='datei', tip='CSV-Datei mit Altdaten hochladen', class_="textboxverylarge", ), ]], button=h.Button(value="Hochladen", name='op', tip="Gewählte Datei mit Altdaten hochladen", type='submit', n_col=2, ), ) res = h.Page( title='Altdaten importieren', breadcrumbs = (('Administratorhauptmenü', 'menu'), ), hidden=(), rows=(self.get_hauptmenu(), altdimport, hinweise_csv, hinweise_felder, ), ) return res.display()