epic-s6g
[kivitendo-erp.git] / SL / DB / Manager / PriceRuleItem.pm
index a96a8b3..ba3694c 100644 (file)
@@ -15,7 +15,7 @@ __PACKAGE__->make_manager_methods;
 use SL::Locale::String qw(t8);
 
 my @types = qw(
-  part customer vendor business partsgroup qty reqdate pricegroup
+  part customer vendor business partsgroup qty reqdate transdate pricegroup
 );
 
 my %ops = (
@@ -28,9 +28,10 @@ my %types = (
   'vendor'              => { description => t8('Vendor'),             customer => 0, vendor => 1, data_type => 'int',  data => sub { $_[0]->vendor->id }, },
   'business'            => { description => t8('Type of Business'),   customer => 1, vendor => 1, data_type => 'int',  data => sub { $_[0]->customervendor->business_id }, exclude_nulls => 1 },
   'reqdate'             => { description => t8('Reqdate'),            customer => 1, vendor => 1, data_type => 'date', data => sub { $_[0]->reqdate }, ops => 'date' },
+  'transdate'           => { description => t8('Transdate'),          customer => 1, vendor => 1, data_type => 'date', data => sub { $_[0]->transdate }, ops => 'date' },
   'part'                => { description => t8('Part'),               customer => 1, vendor => 1, data_type => 'int',  data => sub { $_[1]->part->id }, },
   'pricegroup'          => { description => t8('Pricegroup'),         customer => 1, vendor => 1, data_type => 'int',  data => sub { $_[1]->pricegroup_id }, exclude_nulls => 1 },
-  'partsgroup'          => { description => t8('Group'),              customer => 1, vendor => 1, data_type => 'int',  data => sub { $_[1]->part->partsgroup_id }, exclude_nulls => 1 },
+  'partsgroup'          => { description => t8('Partsgroup'),         customer => 1, vendor => 1, data_type => 'int',  data => sub { $_[1]->part->partsgroup_id }, exclude_nulls => 1 },
   'qty'                 => { description => t8('Qty'),                customer => 1, vendor => 1, data_type => 'num',  data => sub { $_[1]->qty }, ops => 'num' },
 );
 
@@ -64,7 +65,7 @@ sub not_matching_sql_and_values {
         push @values, $value;
       }
 
-      push @tokens, "type = '$type' AND " . join ' OR ', map "($_)", @sub_tokens;
+      push @tokens, "type = '$type' AND (@{[ join(' OR ', map qq|($_)|, @sub_tokens) ]})";
     }
   }
 
@@ -74,7 +75,39 @@ sub not_matching_sql_and_values {
 sub get_all_types {
   my ($class, $vc) = @_;
 
-  [ map { [ $_, $types{$_}{description} ] } grep { $types{$_}{$vc} } map { $_ } @types ];
+  $vc
+  ? [ map { [ $_, $types{$_}{description} ] } grep { $types{$_}{$vc} } map { $_ } @types ]
+  : [ map { [ $_, $types{$_}{description} ] } map { $_ } @types ]
 }
 
+sub get_type {
+  $types{$_[1]}
+}
+
+sub filter_match {
+  my ($self, $type, $value) = @_;
+
+  my $type_def = $types{$type};
+
+  if (!$type_def->{ops}) {
+    my $evalue   = $::form->get_standard_dbh->quote($value);
+    return "value_$type_def->{data_type} = $evalue";
+  } elsif ($type_def->{ops} eq 'date') {
+    my $date_value   = $::form->get_standard_dbh->quote(DateTime->from_kivitendo($value));
+    return "
+      (value_$type_def->{data_type} > $date_value AND op = 'lt') OR
+      (value_$type_def->{data_type} < $date_value AND op = 'gt') OR
+      (value_$type_def->{data_type} = $date_value AND op = 'eq')
+    ";
+  } elsif ($type_def->{ops} eq 'num') {
+    my $num_value   = $::form->get_standard_dbh->quote($::form->parse_amount(\%::myconfig, $value));
+    return "
+      (value_$type_def->{data_type} >= $num_value AND op = 'le') OR
+      (value_$type_def->{data_type} <= $num_value AND op = 'ge') OR
+      (value_$type_def->{data_type} =  $num_value AND op = 'eq')
+    ";
+  }
+}
+
+
 1;