예제 #1
0
 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&uuml ...',
                     ),
             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>&lt;Umbruch wg. Lesbarkeit&gt;</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()