BankTransaction: keine Leerzeichen am Ende vom Verwendungszweck einfügen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 3 Sep 2019 12:25:51 +0000 (14:25 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 3 Sep 2019 12:30:59 +0000 (14:30 +0200)
Wenn man mehrere Felder einfach mit `join(' ', @felder)` zusammenfügt,
so entstehen nun mal ein Haufen Leerzeichen, auch wenn alle Felder
selber leer sind. Das führt konkret beim Import von Banktransaktionen
dazu, dass das Verwendungszweck-Feld, das aus den Feldern
`purpose` (ohne Suffix) und `purpose1` bis `purpose13` gebildet wird,
sehr viele Leerzeichen am Ende oder in der Mitte hat, wenn die
Felder (größtenteils) nicht benutzt werden.

Löscht auch bei bestehenden Positionen in der Datenbank Leerzeichen am
Ende. Leerzeichen am Anfang oder in der Mitte werden hingegen nicht
angefasst.

SL/Controller/CsvImport/BankTransaction.pm
sql/Pg-upgrade2/bank_transactions_nuke_trailing_spaces_in_purpose.sql [new file with mode: 0644]

index db22be0..8b5b5e7 100644 (file)
@@ -175,20 +175,12 @@ sub join_purposes {
 
   my $object = $entry->{object};
 
-  my $purpose = join(' ', $entry->{raw_data}->{purpose},
-                         $entry->{raw_data}->{purpose1},
-                         $entry->{raw_data}->{purpose2},
-                         $entry->{raw_data}->{purpose3},
-                         $entry->{raw_data}->{purpose4},
-                         $entry->{raw_data}->{purpose5},
-                         $entry->{raw_data}->{purpose6},
-                         $entry->{raw_data}->{purpose7},
-                         $entry->{raw_data}->{purpose8},
-                         $entry->{raw_data}->{purpose9},
-                         $entry->{raw_data}->{purpose10},
-                         $entry->{raw_data}->{purpose11},
-                         $entry->{raw_data}->{purpose12},
-                         $entry->{raw_data}->{purpose13} );
+  my $purpose =
+    join ' ',
+    grep { ($_ // '') !~ m{^ *$} }
+    map  { $entry->{raw_data}->{"purpose$_"} }
+    ('', 1..13);
+
   $object->purpose($purpose);
 
 }
diff --git a/sql/Pg-upgrade2/bank_transactions_nuke_trailing_spaces_in_purpose.sql b/sql/Pg-upgrade2/bank_transactions_nuke_trailing_spaces_in_purpose.sql
new file mode 100644 (file)
index 0000000..8e9bb29
--- /dev/null
@@ -0,0 +1,6 @@
+-- @tag: bank_transactions_nuke_trailing_spaces_in_purpose
+-- @description: Banktransaktionen: überflüssige Leerzeichen am Ende des Verwendungszwecks entfernen
+-- @depends: release_3_5_4
+UPDATE bank_transactions
+SET purpose = regexp_replace(purpose, ' +$', '')
+WHERE purpose ~ ' +$';