Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 7bacc2aa

Von Bernd Bleßmann vor mehr als 2 Jahren hinzugefügt

  • ID 7bacc2aae8c0bf72a8fe1eaf757890184e6950f8
  • Vorgänger 8a052015
  • Nachfolger abafb475

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.

Unterschiede anzeigen:

SL/Controller/Order.pm
1847 1847
  my $destination_type = $::form->{type} eq sales_order_type() ? sales_quotation_type() : request_quotation_type();
1848 1848

  
1849 1849
  $self->order(SL::DB::Order->new_from($self->order, destination_type => $destination_type));
1850
  $self->{converted_from_oe_id} = delete $::form->{id};
1850
  delete $::form->{id};
1851

  
1852
  # no linked records from order to quotations
1853
  delete $::form->{$_} for qw(converted_from_oe_id converted_from_orderitems_ids);
1851 1854

  
1852 1855
  # set item ids to new fake id, to identify them as new items
1853 1856
  foreach my $item (@{$self->order->items_sorted}) {
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;

Auch abrufbar als: Unified diff