|
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;
|
Verknüfpte Belege: Keine Verknüpfungen zu Angebot von Angebot oder Auftrag.
Ein Angbot beginnt immer einen neuen Workflow (es sei denn der Vorgänger ist
ein Pflichtenheft).
Das kann sonst dazu führen, dass eine Position mehrere Angebote als Vorgänger
hat und dann kann das Angebot nicht mehr gedruckt werden. Auch logisch ist
das nicht sinnvoll.
Fix im Auftrags-Controller und Upgrade-Skript, um solche Verknüpfungen zu
entfernen.