a1a465364608cbe0527380c572521bd094ec662b
[kivitendo-erp.git] / sql / Pg-upgrade2 / defaults_split_address.pl
1 # @tag: defaults_split_address
2 # @description: Adress-Feld in Mandantenkonfiguration in einzelne Bestandteile aufteilen
3 # @depends: release_3_5_4
4 package SL::DBUpgrade2::defaults_split_address;
5
6 use strict;
7 use utf8;
8
9 use parent qw(SL::DBUpgrade2::Base);
10
11 sub run {
12   my ($self) = @_;
13
14   my ($address) = $self->dbh->selectrow_array("SELECT address FROM defaults");
15
16   my (@street, $zipcode, $city, $country);
17   my @lines = grep { $_ } split m{\r*\n+}, $address // '';
18
19   foreach my $line (@lines) {
20     if ($line =~ m{^(?:[a-z]+[ -])?(\d+) +(.+)}i) {
21       ($zipcode, $city) = ($1, $2);
22
23     } elsif ($zipcode) {
24       $country = $line;
25
26     } else {
27       push @street, $line;
28     }
29   }
30
31   $self->db_query(<<SQL);
32     ALTER TABLE defaults
33     ADD COLUMN  address_street1 TEXT,
34     ADD COLUMN  address_street2 TEXT,
35     ADD COLUMN  address_zipcode TEXT,
36     ADD COLUMN  address_city    TEXT,
37     ADD COLUMN  address_country TEXT,
38     DROP COLUMN address
39 SQL
40
41   $self->db_query(<<SQL, bind => [ map { $_ // '' } ($street[0], $street[1], $zipcode, $city, $country) ]);
42     UPDATE defaults
43     SET address_street1 = ?,
44         address_street2 = ?,
45         address_zipcode = ?,
46         address_city    = ?,
47         address_country = ?
48 SQL
49
50   return 1;
51 }
52
53 1;