Merge branch 'dpt_trans_entfernen'
[kivitendo-erp.git] / SL / DB / Helper / CustomVariables.pm
index f56e486..c935cba 100644 (file)
@@ -18,11 +18,11 @@ sub import {
 
   $params{module}     ||= _calc_modules_from_overloads(%params) if $params{overloads};
   $params{sub_module} ||= '';
-  $params{id}         ||= 'id';
+  $params{id}         ||= _get_primary_key_column($caller_package);
 
   $params{module} || $params{sub_module}  or croak 'need param module or sub_module';
 
-  save_meta_info($caller_package, %params);
+  return unless save_meta_info($caller_package, %params);
   make_cvar_accessor($caller_package, %params);
   make_cvar_alias($caller_package, %params)      if $params{cvars_alias};
   make_cvar_by_configs($caller_package, %params);
@@ -36,21 +36,22 @@ sub save_meta_info {
   return 0 if $meta->{META_CVARS()};
 
   $meta->{META_CVARS()} = \%params;
+
+  return 1;
 }
 
 sub make_cvar_accessor {
   my ($caller_package, %params) = @_;
 
   my @module_filter = $params{module} ?
-    ("config.module" => $params{module}) :
+    ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module = '$params{module}')" ]) :
     ();
 
   $caller_package->meta->add_relationships(
     custom_variables => {
       type         => 'one to many',
       class        => 'SL::DB::CustomVariable',
-      column_map   => { ($params{id} || 'id') => 'trans_id' },
-      manager_args => { with_objects => 'config' },
+      column_map   => { $params{id} => 'trans_id' },
       query_args   => [ sub_module => $params{sub_module}, @module_filter ],
     }
   );
@@ -120,6 +121,7 @@ sub _all_configs {
 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;
   }
@@ -163,6 +165,17 @@ sub _calc_modules_from_overloads {
   return [ keys %modules ];
 }
 
+sub _get_primary_key_column {
+  my ($caller_package) = @_;
+  my $meta             = $caller_package->meta;
+
+  my $column_name;
+  $column_name = $meta->{primary_key}->{columns}->[0] if $meta->{primary_key} && (ref($meta->{primary_key}->{columns}) eq 'ARRAY') && (1 == scalar(@{ $meta->{primary_key}->{columns} }));
+
+  croak "Unable to retrieve primary key column name: meta information for package $caller_package not set up correctly" unless $column_name;
+
+  return $column_name;
+}
 
 1;