Skip to content

Commit

Permalink
Merge pull request #213 from Intevation/i18n
Browse files Browse the repository at this point in the history
Update i18n branch
  • Loading branch information
g-tom authored Aug 16, 2024
2 parents 14b7fd0 + 98d5e49 commit 54846c8
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 111 deletions.
21 changes: 15 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@ psql -d fisumwelt --command "CREATE EXTENSION postgis;"
psql -d fisumwelt --command "CREATE USER auikadmin with password 'secret';"
psql -d fisumwelt -f version1_0_schema.sql
psql -d fisumwelt -f updateTo_1_1_0.sql
psql -d fisumwelt -f import_csv.sql
```

Optional können Beispiel-Daten [importiert](#datenimport) werden.
Im Docker-Setup erfolgt das automatisch.

### Konfigurieren der Anwendung

Vor dem Starten der Anwendung muss in der `auik.properties` der Eintrag `auik.system.dburl` gesetzt werden um die Verbindung mit der Datenbank zu ermöglichen.
Expand Down Expand Up @@ -80,24 +82,31 @@ Das AUI-K Handbuch ist als pdf-Datei unter [doc/AUI-K_Handbuch.pdf](doc/AUI-K_Ha

## Datenimport

Mithilfe des mitgelieferten [SQL-Skripts](data/db/import_csv.sql_) können Adressdaten als CSV in die Datenbank importiert werden.
Das entsprechende CSV muss dabei die folgenden Spalten enthalten:
Mithilfe des mitgelieferten [SQL-Skripts](data/db/import_csv.sql) können Adressdaten als CSV in die Datenbank importiert werden.
Die entsprechende CSV-Datei muss eine Titel-Zeile und folgende Spalten enthalten:

```csv
Klassifizierung,Wirtschaftszweig,Firmenname,Name,Vorname,E-Mail,Telefon,Fax,Plz,Ort,Straße,Hausnr.,Zusatz,Bemerkung
namezus,wirtschaftszweig,name,namebetrbeauf,vornamebetrbeauf,email,telefon,telefax,plz,ort,strasse,hausnr,hausnrzus,bemerkungen
```

Tatsächlich wird die erste Zeile der CSV-Datei ignoriert,
aber der Inhalt der Spalten muss den genannten Spalten im Datenbank-Schema
entsprechen.

Die [CSV Beispieldatei](data/db/import.csv) kann hier als Vorlage dienen.

Der Import selbst lässt sich bspw. über eine Kommandozeile auslösen:

```bash
cd data/db
psql -d fisumwelt -f import_csv.sql
psql -d fisumwelt -f import_csv.sql <import.csv
```

`fisumwelt` ist hier der Datenbankname, je nach Datenbank-Setup müssen ggf. weitere Parameter ergänzt werden.
Die Daten müssen für den Import als `import.csv` im selben Verzeichnis wie das SQL-Skript abgelegt werden.

Manche der importierten Daten werden nur beim Start der Anwendung geladen,
so dass ein Neustart der Anwendung nach dem Import erforderlich ist,
damit alle Daten korrekt dargestellt werden.

## Anpassen von Feldbeschriftungen

Expand Down
2 changes: 1 addition & 1 deletion data/db/import.csv
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Klassifizierung,Wirtschaftszweig,Firmenname,Name,Vorname,E-Mail,Telefon,Fax,Plz,Ort,Straße,Hausnr.,Zusatz,Bemerkung
namezus,wirtschaftszweig,name,namebetrbeauf,vornamebetrbeauf,email,telefon,telefax,plz,ort,strasse,hausnr,hausnrzus,bemerkungen
Beispielklassifizerung,12.11. Beispielwirtschaftszweig,Muster GmbH,Mustermann,Max,[email protected],01234-123123,01234-321321,33602,Bielefeld,August-Bebel-Straße,75,,Bemerkung1
Beispielklassifizerung,12.12. Beispielwirtschaftszweig2,Muster eG,Mustermann,Erika,[email protected],01234-543543,01234-345345,33602,Bielefeld,August-Bebel-Straße,75,a,Bemerkung2
127 changes: 44 additions & 83 deletions data/db/import_csv.sql
Original file line number Diff line number Diff line change
@@ -1,110 +1,71 @@
--Script to import data from a csv input into the auik database
--Expected filename is: import.csv
--Expected format is:
--Klassifizierung,Wirtschaftszweig,Firmenname,Name,Vorname,E-Mail,Telefon,Fax,Plz,Ort,Straße,Hausnr.,Zusatz,Bermerkung
--(Header is suported, Expected delimiter: ,)
-- Script to import data from a CSV input into the AUI-K database.
-- Expected format is a CSV file with header matching the temporary
-- table created in this script.

BEGIN;
-- Create temporary import table
CREATE TEMP TABLE temp_import (
id SERIAL PRIMARY KEY,
klassifizierung character varying(255),
namezus character varying(255),
wirtschaftszweig character varying(255),
firmenname character varying(255),
name character varying(255),
vorname character varying(255),
namebetrbeauf character varying(255),
vornamebetrbeauf character varying(255),
email character varying(255),
telefon character varying(255),
fax character varying(255),
telefax character varying(255),
plz character varying(255),
ort character varying(255),
strasse character varying(255),
hausnr integer,
zusatz character varying(255),
bemerkung character varying(255)
hausnrzus character varying(255),
bemerkungen character varying(255)
);

CREATE OR REPLACE FUNCTION insert_row(
klassifizierung character varying(255),
wirtschaftszweig_name character varying(255),
firmenname character varying(255),
name character varying(255),
vorname character varying(255),
email character varying(255),
telefon character varying(255),
fax character varying(255),
plz character varying(255),
ort character varying(255),
strasse character varying(255),
hausnr integer,
zusatz character varying(255),
bemerkung character varying(255)
)
RETURNS void
AS $$
DECLARE
address_id integer;
wirtschaftszweig_id integer;
BEGIN
-- Insert basis.adresse part and return id
INSERT INTO basis.adresse (strasse, hausnr, hausnrzus, plz, ort)
VALUES (strasse, hausnr, zusatz, plz, ort)
RETURNING id INTO address_id;
-- Get or insert wirtschaftszweig
IF EXISTS (SELECT 1 FROM basis.wirtschaftszweig WHERE wirtschaftszweig = wirtschaftszweig_name) THEN
SELECT id INTO wirtschaftszweig_id
FROM basis.wirtschaftszweig
WHERE wirtschaftszweig = wirtschaftszweig_name;
ELSE
INSERT INTO basis.wirtschaftszweig (id, wirtschaftszweig)
VALUES (
(SELECT COALESCE(MAX(id) + 1, 0) FROM basis.wirtschaftszweig),
wirtschaftszweig_name
);
SELECT MAX(id) FROM basis.wirtschaftszweig INTO wirtschaftszweig_id;
END IF;

-- Insert inhaber
INSERT INTO basis.inhaber (adresseid, name, namebetrbeauf, vornamebetrbeauf, telefon, telefax, email,
bemerkungen, wirtschaftszweigid, namezus)
VALUES (address_id, firmenname, name, vorname, telefon, fax, email, bemerkung, wirtschaftszweig_id, klassifizierung);
END;
$$
LANGUAGE plpgsql;

-- Copy import data to temporary table
COPY temp_import(
klassifizierung, wirtschaftszweig, firmenname,
name, vorname, email, telefon, fax, plz, ort, strasse,
hausnr, zusatz, bemerkung)
FROM '/opt/auik_db/import.csv'
DELIMITER ','
CSV HEADER;
\copy temp_import FROM pstdin (FORMAT csv, HEADER true)

-- Copy data to their respective tables
DO
$$
DECLARE resultRow RECORD;
address_id integer;
wirtschaftszweig_id integer;
BEGIN
FOR resultRow IN
SELECT * FROM temp_import
LOOP
PERFORM insert_row(
resultRow.klassifizierung ,
resultRow.wirtschaftszweig,
resultRow.firmenname,
resultRow.name,
resultRow.vorname,
resultRow.email,
resultRow.telefon,
resultRow.fax,
resultRow.plz,
resultRow.ort,
resultRow.strasse,
resultRow.hausnr,
resultRow.zusatz,
resultRow.bemerkung
);
-- Insert basis.adresse part and return id
INSERT INTO basis.adresse (strasse, hausnr, hausnrzus, plz, ort)
VALUES (resultRow.strasse, resultRow.hausnr,
resultRow.hausnrzus, resultRow.plz, resultRow.ort)
RETURNING id INTO address_id;

-- Get or insert wirtschaftszweig
IF resultRow.wirtschaftszweig IS NULL THEN
wirtschaftszweig_id = null;
ELSEIF EXISTS (SELECT 1 FROM basis.wirtschaftszweig
WHERE wirtschaftszweig = resultRow.wirtschaftszweig) THEN
SELECT id INTO wirtschaftszweig_id
FROM basis.wirtschaftszweig
WHERE wirtschaftszweig = resultRow.wirtschaftszweig;
ELSE
INSERT INTO basis.wirtschaftszweig (id, wirtschaftszweig)
VALUES (
(SELECT COALESCE(MAX(id) + 1, 0) FROM basis.wirtschaftszweig),
resultRow.wirtschaftszweig)
RETURNING id INTO wirtschaftszweig_id;
END IF;

-- Insert inhaber
INSERT INTO basis.inhaber (
adresseid, name, namebetrbeauf, vornamebetrbeauf,
telefon, telefax, email,
bemerkungen, wirtschaftszweigid, namezus)
VALUES (address_id, resultRow.name,
resultRow.namebetrbeauf, resultRow.vornamebetrbeauf,
resultRow.telefon, resultRow.telefax, resultRow.email,
resultRow.bemerkungen, wirtschaftszweig_id,
resultRow.namezus);
END LOOP;
END
$$;
Expand Down
2 changes: 1 addition & 1 deletion docker/init_db.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ psql -q -d $DB_NAME --command "CREATE USER ${USERNAME} with password '${USER_PW}
echo "Applying schema"
psql -q -d $DB_NAME -f $schema_file
psql -q -d $DB_NAME -f $update_file_1_1_0
psql -q -d $DB_NAME -f $import_script

psql -q -d $DB_NAME -f $import_script <$schema_dir/import.csv
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,12 @@ public class BetreiberEditor extends AbstractApplyEditor {
private JCheckBox daten_esatzungCheck;
private JCheckBox daten_whgCheck;
private JCheckBox ueberschgebCheck;
private JComboBox strassenBox;
private JComboBox wirtschaftszweigBox;
private JComboBox gemarkungBox;
private JComboBox entwGebBox;
private JComboBox standortGgBox;
private JComboBox wEinzugsGebBox;
private JComboBox<String> strassenBox;
private JComboBox<Wirtschaftszweig> wirtschaftszweigBox;
private JComboBox<Gemarkung> gemarkungBox;
private JComboBox<String> entwGebBox;
private JComboBox<Standortgghwsg> standortGgBox;
private JComboBox<Wassereinzugsgebiet> wEinzugsGebBox;


private Gemarkung[] gemarkungen = null;
Expand Down Expand Up @@ -218,18 +218,18 @@ protected JComponent buildContentArea() {

flurFeld = new LimitedTextField(50);
flurStkFeld = new LimitedTextField(50);
gemarkungBox = new JComboBox();
entwGebBox = new JComboBox();
standortGgBox = new JComboBox();
wEinzugsGebBox = new JComboBox();
gemarkungBox = new JComboBox<Gemarkung>();
entwGebBox = new JComboBox<String>();
standortGgBox = new JComboBox<Standortgghwsg>();
wEinzugsGebBox = new JComboBox<Wassereinzugsgebiet>();

bemerkungsArea = new LimitedTextArea(2000);
bemerkungsArea.setLineWrap(true);
bemerkungsArea.setWrapStyleWord(true);
JScrollPane bemerkungsScroller = new JScrollPane(bemerkungsArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

wirtschaftszweigBox = new JComboBox();
wirtschaftszweigBox = new JComboBox<Wirtschaftszweig>();
wirtschaftszweigBox.setRenderer(new LongNameComboBoxRenderer());

// Der folgende KeyListener wird benutzt um bei Enter
Expand Down Expand Up @@ -485,7 +485,7 @@ protected void doNonUILogic() throws RuntimeException {
protected void doUIUpdateLogic() throws RuntimeException {

if (tabstreets != null) {
strassenBox.setModel(new DefaultComboBoxModel(tabstreets));
strassenBox.setModel(new DefaultComboBoxModel<String>(tabstreets));
}
if (adressenTabelle != null) {

Expand All @@ -508,29 +508,31 @@ protected void doUIUpdateLogic() throws RuntimeException {
}

if (wirtschaftszweige != null) {
wirtschaftszweigBox.setModel(new DefaultComboBoxModel(wirtschaftszweige));
wirtschaftszweigBox.setModel(new DefaultComboBoxModel<Wirtschaftszweig>(wirtschaftszweige));
wirtschaftszweigBox.setSelectedItem(getBetreiber().getWirtschaftszweig());
}
if (gemarkungen != null)
{
gemarkungBox.setModel(new DefaultComboBoxModel(gemarkungen));
gemarkungBox.setModel(new DefaultComboBoxModel<Gemarkung>(gemarkungen));
gemarkungBox.setSelectedItem(adresse.getGemarkung());
}
if (standortggs != null)
{
standortGgBox.setModel(new DefaultComboBoxModel(standortggs));
standortGgBox.setModel(
new DefaultComboBoxModel<Standortgghwsg>(standortggs));
standortGgBox.setSelectedItem(adresse.getStandortgghwsg());
}

if (entwgebiete != null)
{
entwGebBox.setModel(new DefaultComboBoxModel(entwgebiete));
entwGebBox.setModel(
new DefaultComboBoxModel<String>(entwgebiete));
entwGebBox.setSelectedItem(adresse.getEntgebid());
}

if (wEinzugsgebiete != null)
{
wEinzugsGebBox.setModel(new DefaultComboBoxModel(wEinzugsgebiete));
wEinzugsGebBox.setModel(new DefaultComboBoxModel<Wassereinzugsgebiet>(wEinzugsgebiete));
wEinzugsGebBox.setSelectedItem(adresse.getWassereinzugsgebiet());
}

Expand Down Expand Up @@ -995,7 +997,7 @@ public void updateAdresse() {
inhaber.setStandorts(standorts);
standort.setE32(bts.getX());
standort.setN32(bts.getY());
List std = new ArrayList<Standort>();
List<Standort> std = new ArrayList<Standort>();
for (Standort x : standorts)
std.add(x);
standorteModel.setList(std);
Expand All @@ -1009,7 +1011,7 @@ public void updateAdresse() {

private Component getStrassenBox() {

strassenBox = new JComboBox();
strassenBox = new JComboBox<String>();
strassenBox.setRenderer(new LongNameComboBoxRenderer());
strassenBox.setEnabled(false);

Expand All @@ -1027,7 +1029,7 @@ private final class BetreiberListener implements ActionListener {
public void actionPerformed(ActionEvent e) {

if (e.getSource() == strassenBox) {
adressenModel.setStrasse(strassenBox.getSelectedItem().toString());
adressenModel.setStrasse((String) strassenBox.getSelectedItem());
adressenModel.updateList();

}
Expand Down

0 comments on commit 54846c8

Please sign in to comment.