From 699804db8dd6c5bf7a22ce17cc55c034ebc7e1ce Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Tue, 3 Sep 2019 14:25:51 +0200 Subject: [PATCH] =?utf8?q?BankTransaction:=20keine=20Leerzeichen=20am=20En?= =?utf8?q?de=20vom=20Verwendungszweck=20einf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 | 20 ++++++------------- ...ctions_nuke_trailing_spaces_in_purpose.sql | 6 ++++++ 2 files changed, 12 insertions(+), 14 deletions(-) create mode 100644 sql/Pg-upgrade2/bank_transactions_nuke_trailing_spaces_in_purpose.sql diff --git a/SL/Controller/CsvImport/BankTransaction.pm b/SL/Controller/CsvImport/BankTransaction.pm index db22be063..8b5b5e702 100644 --- a/SL/Controller/CsvImport/BankTransaction.pm +++ b/SL/Controller/CsvImport/BankTransaction.pm @@ -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 index 000000000..8e9bb295b --- /dev/null +++ b/sql/Pg-upgrade2/bank_transactions_nuke_trailing_spaces_in_purpose.sql @@ -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 ~ ' +$'; -- 2.20.1