Merge branch 'test' of ../kivitendo-erp_20220811
[kivitendo-erp.git] / sql / Pg-upgrade2 / delete_wrong_charts_for_taxkeys_04.pl
1 # @tag: delete_wrong_charts_for_taxkeys_04
2 # @description: SKR04: 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_04;
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   # SKR04
22   my $q_update_04 = <<SQL;
23     UPDATE tax
24     SET chart_id = NULL
25     WHERE chart_id = ?
26     AND rate = 0.16
27     AND (taxkey = 3 OR taxkey = 9)
28     AND EXISTS (SELECT * FROM defaults WHERE coa = 'Germany-DATEV-SKR04EU')
29 SQL
30
31
32   my $h_fetch = $self->dbh->prepare($q_fetch);
33   $h_fetch->execute || $::form->dberror($q_fetch);
34
35   my $h_update_04 = $self->dbh->prepare($q_update_04);
36
37   while (my $entry = $h_fetch->fetchrow_hashref) {
38     $h_update_04->execute($entry->{chart_id}) || $::form->dberror($q_update_04);
39   }
40   # might be unique now
41   $h_fetch->execute || $::form->dberror($q_fetch);
42
43   if (!$h_fetch->fetchrow_hashref) {
44     my $q_unique = <<SQL;
45       alter table tax
46       ADD CONSTRAINT chart_id_unique_tax UNIQUE (chart_id)
47 SQL
48     my $q_unique_p = $self->dbh->prepare($q_unique);
49     $q_unique_p->execute || $::form->dberror($q_unique_p);
50   }
51 }
52
53 sub run {
54   my ($self) = @_;
55
56   return 1 unless $self->check_coa('Germany-DATEV-SKR04EU');
57
58   $self->delete_chart_id_tax;
59
60   return 1;
61 }
62
63 1;