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 = (
- 'num' => { eq => '=', lt => '<', gt => '>' },
+ 'num' => { eq => '=', le => '<=', ge => '>=' },
'date' => { eq => '=', lt => '<', gt => '>' },
);
'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' },
- 'part' => { description => t8('Part'), customer => 1, vendor => 0, data_type => 'int', data => sub { $_[1]->part->id }, },
+ '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 },
'qty' => { description => t8('Qty'), customer => 1, vendor => 1, data_type => 'num', data => sub { $_[1]->qty }, ops => 'num' },
my $ops = $ops{$def->{ops}};
for (keys %$ops) {
- push @sub_tokens, "op = '$_' AND NOT value_$def->{data_type} $ops->{$_} ?";
+ push @sub_tokens, "op = '$_' AND NOT ? $ops->{$_} value_$def->{data_type}";
push @values, $value;
}
} else {
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;