my %types = (
'customer' => { description => t8('Customer'), customer => 1, vendor => 0, data_type => 'int', data => sub { $_[0]->customer->id }, },
'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 }, },
+ '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' },
- 'pricegroup' => { description => t8('Pricegroup'), customer => 1, vendor => 1, data_type => 'int', data => sub { $_[1]->pricegroup_id }, },
- 'partsgroup' => { description => t8('Group'), customer => 1, vendor => 1, data_type => 'int', data => sub { $_[1]->part->partsgroup_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 ($class, %params) = @_;
die 'must be called with a customer/vendor type' unless $params{type};
+ my @args = @params{'record', 'record_item'};
my (@tokens, @values);
my $def = $types{$type};
next unless $def->{$params{type}};
- if ($def->{ops}) {
- my $ops = $ops{$def->{ops}};
+ my $value = $def->{data}->(@args);
+ if ($def->{exclude_nulls} && !defined $value) {
+ push @tokens, "type = '$type'";
+ } else {
my @sub_tokens;
- for (keys %$ops) {
- push @sub_tokens, "op = '$_' AND NOT value_$def->{data_type} $ops->{$_} ?";
- push @values, $def->{data};
+ if ($def->{ops}) {
+ my $ops = $ops{$def->{ops}};
+
+ for (keys %$ops) {
+ push @sub_tokens, "op = '$_' AND NOT value_$def->{data_type} $ops->{$_} ?";
+ push @values, $value;
+ }
+ } else {
+ push @sub_tokens, "NOT value_$def->{data_type} = ?";
+ push @values, $value;
}
push @tokens, "type = '$type' AND " . join ' OR ', map "($_)", @sub_tokens;
- } else {
- push @tokens, "type = '$type' AND NOT value_$def->{data_type} = ?";
- push @values, $def->{data};
}
}