Lieferbedingungen analog zu Zahlungsbedingungen eingeführt.
[kivitendo-erp.git] / SL / DB / Helper / CustomVariables.pm
index c935cba..373a60c 100644 (file)
@@ -4,7 +4,6 @@ use strict;
 use Carp;
 use Data::Dumper;
 use List::Util qw(first);
-use SL::DB::CustomVariableConfig;
 
 use constant META_CVARS => 'cvars_config';
 
@@ -43,8 +42,11 @@ sub save_meta_info {
 sub make_cvar_accessor {
   my ($caller_package, %params) = @_;
 
-  my @module_filter = $params{module} ?
-    ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module = '$params{module}')" ]) :
+  my $modules = ('ARRAY' eq ref $params{module}) ?
+      join ',', @{ $params{module} } :
+      $params{module};
+  my @module_filter = $modules ?
+    ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module IN ( '$modules' ))" ]) : # " make emacs happy
     ();
 
   $caller_package->meta->add_relationships(
@@ -79,7 +81,19 @@ sub make_cvar_by_configs {
     my $cvars       = $self->custom_variables;
     my %cvars_by_config = map { $_->config_id => $_ } @$cvars;
 
-    my @return  = map { $cvars_by_config{$_->id} || _new_cvar($self, %params, config => $_) } @$configs;
+    my @return = map(
+      {
+        if ( $cvars_by_config{$_->id} ) {
+          $cvars_by_config{$_->id};
+        }
+        else {
+          my $cvar = _new_cvar($self, %params, config => $_);
+          $self->add_custom_variables($cvar);
+          $cvar;
+        }
+      }
+      @$configs
+    );
 
     return \@return;
   }
@@ -113,6 +127,9 @@ sub make_cvar_by_name {
 
 sub _all_configs {
   my (%params) = @_;
+
+  require SL::DB::CustomVariableConfig;
+
   $params{module}
     ? SL::DB::Manager::CustomVariableConfig->get_all(query => [ module => $params{module} ])
     : SL::DB::Manager::CustomVariableConfig->get_all;
@@ -122,8 +139,8 @@ sub _overload_by_module {
   my ($module, %params) = @_;
 
   keys %{ $params{overloads} }; # reset each iterator
-  while (my ($fk, $class) = each %{ $params{overloads} }) {
-    return ($fk, $class) if $class->meta->{META_CVARS()}->{module} eq $module;
+  while (my ($fk, $def) = each %{ $params{overloads} }) {
+    return ($fk, $def->{class}) if $def->{module} eq $module;
   }
 
   croak "unknown overload, cannot resolve module $module";
@@ -155,11 +172,8 @@ sub _calc_modules_from_overloads {
   my (%params) = @_;
   my %modules;
 
-  while (my ($fk, $class) = each %{ $params{overloads} }) {
-    eval "require $class"; # make sure the class is loaded
-    my $module = $class->meta->{META_CVARS()}->{module};
-    next if ref $module;
-    $modules{$module} = 1;
+  for my $def (values %{ $params{overloads} || {} }) {
+    $modules{$def->{module}} = 1;
   }
 
   return [ keys %modules ];
@@ -200,7 +214,10 @@ SL::DB::Helper::CustomVariables - Mixin to provide custom variables relations
     sub_module  => 'orderitems',
     cvars_alias => 1,
     overloads   => {
-      parts_id    => 'SL::DB::Part',
+      parts_id    => {
+        class => 'SL::DB::Part',
+        module => 'IC',
+      }
     }
   );