]> wagnertech.de Git - mfinanz.git/blobdiff - SL/CVar.pm
Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
[mfinanz.git] / SL / CVar.pm
index 2408222782c2ab8a13b0e573a2336415ccf1723e..c0b3f43f07944590e13f608c8e2dde05dd27b1de 100644 (file)
@@ -7,7 +7,7 @@ use Scalar::Util qw(blessed);
 use Data::Dumper;
 
 use SL::DBUtils;
-use SL::MoreCommon qw(listify);
+use SL::MoreCommon qw(any listify);
 
 sub get_configs {
   $main::lxdebug->enter_sub();
@@ -243,6 +243,8 @@ sub get_custom_variables {
                      : $cvar->{type} eq 'timestamp' ? $act_var->{timestamp_value}
                      : $cvar->{type} eq 'number'    ? $act_var->{number_value}
                      : $cvar->{type} eq 'customer'  ? $act_var->{number_value}
+                     : $cvar->{type} eq 'vendor'    ? $act_var->{number_value}
+                     : $cvar->{type} eq 'part'      ? $act_var->{number_value}
                      : $cvar->{type} eq 'bool'      ? $act_var->{bool_value}
                      :                                $act_var->{text_value};
       $cvar->{valid} = $valid;
@@ -279,6 +281,12 @@ sub get_custom_variables {
     } elsif ($cvar->{type} eq 'customer') {
       require SL::DB::Customer;
       $cvar->{value} = SL::DB::Manager::Customer->find_by(id => $cvar->{value} * 1);
+    } elsif ($cvar->{type} eq 'vendor') {
+      require SL::DB::Vendor;
+      $cvar->{value} = SL::DB::Manager::Vendor->find_by(id => $cvar->{value} * 1);
+    } elsif ($cvar->{type} eq 'part') {
+      require SL::DB::Part;
+      $cvar->{value} = SL::DB::Manager::Part->find_by(id => $cvar->{value} * 1);
     }
   }
 
@@ -340,7 +348,7 @@ sub save_custom_variables {
 
     } elsif ($config->{type} eq 'bool') {
       push @values, $value ? 't' : 'f', undef, undef, undef;
-    } elsif ($config->{type} eq 'customer') {
+    } elsif (any { $config->{type} eq $_ } qw(customer vendor part)) {
       push @values, undef, undef, undef, $value * 1;
     }
 
@@ -357,7 +365,7 @@ sub save_custom_variables {
 
   $sth->finish();
 
-  $dbh->commit();
+  $dbh->commit() unless $params{dbh};
 
   $main::lxdebug->leave_sub();
 }
@@ -402,6 +410,7 @@ sub render_search_options {
 
   $params{include_prefix}   = 'l_' unless defined($params{include_prefix});
   $params{include_value}  ||= '1';
+  $params{filter_prefix}  ||= '';
 
   my $filter  = $form->parse_html_template('amcvar/search_filter',  \%params);
   my $include = $form->parse_html_template('amcvar/search_include', \%params);
@@ -497,10 +506,16 @@ sub build_filter_query {
 
       $not = 'NOT' if ($params{filter}->{$name} eq 'no');
       push @sub_where,  qq|COALESCE(cvar.bool_value, false) = TRUE|;
-    } elsif ($config->{type} eq 'customer') {
+    } elsif (any { $config->{type} eq $_ } qw(customer vendor part)) {
       next unless $params{filter}->{$name};
 
-      push @sub_where, qq|cvar.number_value * 1 IN (SELECT id FROM customer WHERE name ILIKE ?)|;
+      my $table = $config->{type};
+      push @sub_where, qq|cvar.number_value * 1 IN (SELECT id FROM $table WHERE name ILIKE ?)|;
+      push @sub_values, "%$params{filter}->{$name}%";
+    } elsif ($config->{type} eq 'part') {
+      next unless $params{filter}->{$name};
+
+      push @sub_where, qq|cvar.number_value * 1 IN (SELECT id FROM parts WHERE partnumber ILIKE ?)|;
       push @sub_values, "%$params{filter}->{$name}%";
     }
 
@@ -575,7 +590,9 @@ sub add_custom_variables_to_report {
           $cfg->{type} eq 'date'      ? $ref->{date_value}
         : $cfg->{type} eq 'timestamp' ? $ref->{timestamp_value}
         : $cfg->{type} eq 'number'    ? $form->format_amount($myconfig, $ref->{number_value} * 1, $cfg->{precision})
-        : $cfg->{type} eq 'customer'  ? SL::DB::Manager::Customer->find_by(id => 1* $ref->{number_value})->name
+        : $cfg->{type} eq 'customer'  ? (SL::DB::Manager::Customer->find_by(id => 1*$ref->{number_value}) || SL::DB::Customer->new)->name
+        : $cfg->{type} eq 'vendor'    ? (SL::DB::Manager::Vendor->find_by(id => 1*$ref->{number_value})   || SL::DB::Vendor->new)->name
+        : $cfg->{type} eq 'part'      ? (SL::DB::Manager::Part->find_by(id => 1*$ref->{number_value})     || SL::DB::Part->new)->partnumber
         : $cfg->{type} eq 'bool'      ? ($ref->{bool_value} ? $locale->text('Yes') : $locale->text('No'))
         :                               $ref->{text_value};
     }
@@ -658,7 +675,7 @@ sub save_custom_variables_validity {
 
   $sth->finish();
 
-  $dbh->commit();
+  $dbh->commit() unless $params{dbh};
 
   $main::lxdebug->leave_sub();
 }
@@ -716,6 +733,16 @@ sub parse {
   return $value;
 }
 
+sub format_to_template {
+  my ($self, $value, $config) = @_;
+  # stupid template expects everything formated. except objects
+  # do not use outside of print routines for legacy templates
+
+  return $::form->format_amount(\%::myconfig, $value) if $config->{type} eq 'number';
+  return $value->to_lxoffice if $config->{type} eq 'date' && blessed $value && $value->can('to_lxoffice');
+  return $value;
+}
+
 1;
 
 __END__