Merge branch 'test' of ../kivitendo-erp_20220811
[kivitendo-erp.git] / sql / Pg-upgrade2 / delete_wrong_charts_for_taxkeys.pl
1 # @tag: delete_wrong_charts_for_taxkeys
2 # @description: Uralte falsch angelegte Automatikkonten raus -> Chance auf tax.chart_id unique setzen
3 # @depends: release_3_6_0
4 # @ignore: 0
5 package SL::DBUpgrade2::delete_wrong_charts_for_taxkeys;
6
7 use strict;
8 use utf8;
9
10 use parent qw(SL::DBUpgrade2::Base);
11
12 sub delete_chart_id_tax {
13   my $self = shift;
14
15   my $q_fetch = <<SQL;
16     SELECT chart_id
17     FROM tax where chart_id is not null
18     GROUP BY chart_id HAVING COUNT(*) > 1
19 SQL
20
21   # skr03
22   my $q_update = <<SQL;
23     UPDATE tax
24     SET chart_id = NULL
25     WHERE chart_id = ?
26     AND rate = 0.16
27     AND (taxkey = 19 OR taxkey = 13)
28     AND EXISTS (SELECT * FROM defaults WHERE coa = 'Germany-DATEV-SKR03EU')
29 SQL
30
31   my $h_fetch = $self->dbh->prepare($q_fetch);
32   $h_fetch->execute || $::form->dberror($q_fetch);
33
34   my $h_update_03 = $self->dbh->prepare($q_update);
35
36   while (my $entry = $h_fetch->fetchrow_hashref) {
37     $h_update_03->execute($entry->{chart_id}) || $::form->dberror($q_update);
38   }
39   # might be unique now
40   $h_fetch->execute || $::form->dberror($q_fetch);
41
42   if (!$h_fetch->fetchrow_hashref) {
43     my $q_unique = <<SQL;
44       alter table tax
45       ADD CONSTRAINT chart_id_unique_tax UNIQUE (chart_id)
46 SQL
47     my $q_unique_p = $self->dbh->prepare($q_unique);
48     $q_unique_p->execute || $::form->dberror($q_unique_p);
49   }
50 }
51
52 sub run {
53   my ($self) = @_;
54
55   return 1 unless $self->check_coa('Germany-DATEV-SKR03EU');
56
57   $self->delete_chart_id_tax;
58
59   return 1;
60 }
61
62 1;