Angebot/Auftrag: "Als neu speichern": Warnung bei ungültigen Artikeln
[kivitendo-erp.git] / sql / Pg-upgrade2 / change_taxzone_id_0.pl
1 # @tag: change_taxzone_id_0
2 # @description: Verändert die id von 0 auf einen anderen Wert größer 0 in tax_zones, wenn es so einen Eintrag gibt und setzt zwei Fremdschlüssel von Tabellen ar/ap auf tax_zones.
3 # @depends: convert_taxzone taxzone_default_id taxzone_sortkey
4 package SL::DBUpgrade2::change_taxzone_id_0;
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 $query = qq|SELECT id FROM tax_zones ORDER BY id DESC LIMIT 1|;
15   my ($id) = $self->dbh->selectrow_array($query);
16   $id++;
17
18   $query = qq|SELECT * FROM tax_zones WHERE id=0|;
19   my $sth = $self->dbh->prepare($query);
20   $sth->execute || $::form->dberror($query);
21
22   if (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
23
24     $query = qq|INSERT INTO tax_zones (id, description, sortkey) VALUES (?,?,?)|;
25     $self->db_query($query, bind => [ $id, $ref->{description}, $ref->{sortkey} ]);
26
27     $query = qq|UPDATE taxzone_charts SET taxzone_id=$id WHERE taxzone_id=0|;
28     $self->db_query($query);
29
30     $query = qq|DELETE FROM tax_zones WHERE id=0|;
31     $self->db_query($query);
32
33     #Adapt ar/ap and customer/vendor tables to the new taxzone_id
34     $query = qq|UPDATE ar SET taxzone_id=$id WHERE taxzone_id=0|;
35     $self->db_query($query);
36
37     $query = qq|UPDATE ap SET taxzone_id=$id WHERE taxzone_id=0|;
38     $self->db_query($query);
39
40     $query = qq|UPDATE customer SET taxzone_id=$id WHERE taxzone_id=0|;
41     $self->db_query($query);
42
43     $query = qq|UPDATE vendor SET taxzone_id=$id WHERE taxzone_id=0|;
44     $self->db_query($query);
45   }
46
47   # Remove default 0 for taxzone_id
48   $query = qq|ALTER TABLE customer ALTER COLUMN taxzone_id DROP default|;
49   $self->db_query($query);
50
51   $query = qq|ALTER TABLE vendor ALTER COLUMN taxzone_id DROP default|;
52   $self->db_query($query);
53
54   #Set Constraints:
55   $query = qq|ALTER TABLE ar ADD FOREIGN KEY (taxzone_id) REFERENCES tax_zones (id)|;
56   $self->db_query($query);
57
58   $query = qq|ALTER TABLE ap ADD FOREIGN KEY (taxzone_id) REFERENCES tax_zones (id)|;
59   $self->db_query($query);
60
61   $query = qq|ALTER TABLE customer ADD FOREIGN KEY (taxzone_id) REFERENCES tax_zones (id)|;
62   $self->db_query($query);
63
64   $query = qq|ALTER TABLE vendor ADD FOREIGN KEY (taxzone_id) REFERENCES tax_zones (id)|;
65   $self->db_query($query);
66
67   $sth->finish;
68
69   return 1;
70 } # end run
71
72 1;