Verknüfpte Belege: Keine Verknüpfungen zu Angebot von Angebot oder Auftrag.
[kivitendo-erp.git] / sql / Pg-upgrade2 / record_links_remove_to_quotation.pl
1 # @tag: record_links_remove_to_quotation
2 # @description: Verknüpfte Positionen mit Ziel Angebot und dazugehörige Belegverknüpfung entfernen, wenn Quelle Angebot oder Auftrag.
3 # @depends: release_3_6_0
4 package SL::DBUpgrade2::record_links_remove_to_quotation;
5
6 use strict;
7 use utf8;
8
9 use parent qw(SL::DBUpgrade2::Base);
10
11 use SL::DBUtils;
12
13 sub run {
14   my ($self) = @_;
15
16   my $query = qq|SELECT record_links.id AS rl_id, from_oe.id AS from_oe_id, to_oe.id AS to_oe_id FROM record_links
17                    LEFT JOIN orderitems from_oi ON (from_oi.id = from_id)
18                    LEFT JOIN orderitems to_oi   ON (to_oi.id   = to_id)
19                    LEFT JOIN oe         from_oe ON (from_oe.id = from_oi.trans_id)
20                    LEFT JOIN oe         to_oe   ON (to_oe.id   = to_oi.trans_id)
21                  WHERE from_table = 'orderitems'
22                    AND to_table   = 'orderitems'
23                    AND to_oe.quotation IS TRUE|;
24
25   my $refs = selectall_hashref_query($::form, $self->dbh, $query);
26
27   my $query_delete_oi_links = qq|
28     DELETE FROM record_links WHERE id = ?;
29   |;
30   my $sth_delete_oi_links = $self->dbh->prepare($query_delete_oi_links);
31
32   my $query_delete_oe_links = qq|
33     DELETE FROM record_links WHERE from_table = 'oe' AND to_table = 'oe' AND from_id = ? AND to_id = ?;
34   |;
35   my $sth_delete_oe_links = $self->dbh->prepare($query_delete_oe_links);
36
37   my %oe_links;
38   foreach my $ref (@$refs) {
39     $sth_delete_oi_links->execute($ref->{rl_id}) || $::form->dberror($query_delete_oi_links);
40     $oe_links{$ref->{from_oe_id} . ':' . $ref->{to_oe_id}} = 1;
41   }
42
43   for my $from_to (keys %oe_links) {
44     my ($from_oe_id, $to_oe_id) = split ':', $from_to;
45     $sth_delete_oe_links->execute($from_oe_id, $to_oe_id) || $::form->dberror($query_delete_oe_links);
46   }
47
48   return 1;
49 }
50
51 1;