Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 988028c3

Von Moritz Bunkus vor fast 8 Jahren hinzugefügt

  • ID 988028c38ea624e169b15ed3d0aeec1c5ef86ac9
  • Vorgänger 504fcaf1
  • Nachfolger 522eb5a4

CVars: beim Einlesen für Sub-Modules Gültigkeit richtig bestimmen

Werden für CVars für Belege eingelesen (z.B. Aufträge), wo also
»sub_module« gesetzt ist (hier: »orderitems«), so steht in der
CVar-Spalte »trans_id« die Datenbank-ID des referenzierten
Sub-Items (hier: »orderitems.id«) drin und nicht die ID des Items, auf
das sich die Konfiguration selber bezieht.

Die Gültigkeit einer CVar wird hingegen nicht am Beleg selber sondern
eine Ebene darüber, am Warenstammdatum, festgemacht. Das bedeutet, dass
in der Spalte »custom_variables_validity.trans_id« die Artikel-ID
enthalten ist.

Übergeben bekommt die Funktion zum Einlesen der CVars aber die ID des
Orderitems.

Also muss das Datenbankquery unterschiedliche Tabellen und Spalten
abfragen, je nachdem, ob »sub_module« gesetzt ist oder nicht.

Unterschiede anzeigen:

SL/CVar.pm
2 2

  
3 3
use strict;
4 4

  
5
use Carp;
5 6
use List::MoreUtils qw(any);
6 7
use List::Util qw(first);
7 8
use Scalar::Util qw(blessed);
......
134 135
      do_statement($form, $h_var, $q_var, @values);
135 136
      $act_var = $h_var->fetchrow_hashref();
136 137

  
137
      $valid = $self->get_custom_variables_validity(config_id => $cvar->{id}, trans_id => $params{trans_id});
138
      $valid = $self->get_custom_variables_validity(config_id => $cvar->{id}, trans_id => $params{trans_id}, sub_module => $params{sub_module});
138 139
    } else {
139 140
      $valid = !$cvar->{flag_defaults_to_invalid};
140 141
    }
......
588 589
  $main::lxdebug->leave_sub();
589 590
}
590 591

  
591
sub get_custom_variables_validity {
592
  $main::lxdebug->enter_sub(2);
592
my %_validity_sub_module_mapping = (
593
  orderitems           => { table => 'orderitems',           result_column => 'parts_id', trans_id_column => 'id', },
594
  delivery_order_items => { table => 'delivery_order_items', result_column => 'parts_id', trans_id_column => 'id', },
595
  invoice              => { table => 'invoice',              result_column => 'parts_id', trans_id_column => 'id', },
596
);
593 597

  
598
sub get_custom_variables_validity {
594 599
  my $self     = shift;
595 600
  my %params   = @_;
596 601

  
......
601 606

  
602 607
  my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);
603 608

  
604
  my $query    = qq|SELECT id FROM custom_variables_validity WHERE config_id = ? AND trans_id = ? LIMIT 1|;
609
  my $query;
605 610

  
606
  my ($invalid) = selectfirst_array_query($form, $dbh, $query, conv_i($params{config_id}), conv_i($params{trans_id}));
611
  if ($params{sub_module}) {
612
    my %mapping = %{ $_validity_sub_module_mapping{ $params{sub_module} } || croak("Invalid sub_module '" . $params{sub_module} . "'") };
613
    $query = <<SQL;
614
      SELECT cvv.id
615
      FROM $mapping{table} mt
616
      LEFT JOIN custom_variables_validity cvv ON (cvv.trans_id = mt.$mapping{result_column})
617
      WHERE (cvv.config_id                = ?)
618
        AND (mt.$mapping{trans_id_column} = ?)
619
      LIMIT 1
620
SQL
621
  } else {
622
    $query = <<SQL;
623
      SELECT id
624
      FROM custom_variables_validity
625
      WHERE (config_id = ?)
626
        AND (trans_id  = ?)
627
      LIMIT 1
628
SQL
629
  }
607 630

  
608
  $main::lxdebug->leave_sub(2);
631
  my ($invalid) = selectfirst_array_query($form, $dbh, $query, conv_i($params{config_id}), conv_i($params{trans_id}));
609 632

  
610 633
  return !$invalid;
611 634
}

Auch abrufbar als: Unified diff