Revision 986282c1
Von Sven Schöling vor mehr als 10 Jahren hinzugefügt
SL/Controller/PriceRule.pm | ||
---|---|---|
push @filter_strings, "$_->[1]: $_->[0]" if $_->[0];
|
||
}
|
||
|
||
if ($filter->{has_item_type}) {
|
||
push @filter_strings, sprintf "%s: %s", t8('Has item type'), join ', ', map {
|
||
SL::DB::Manager::PriceRuleItem->get_type($_)->{description}
|
||
} @{ $filter->{has_item_type} || [] };
|
||
}
|
||
|
||
$self->{filter_summary} = join ', ', @filter_strings;
|
||
}
|
||
|
||
sub all_price_rule_item_types {
|
||
SL::DB::Manager::PriceRuleItem->get_all_types($_[0]->price_rule->type);
|
||
SL::DB::Manager::PriceRuleItem->get_all_types($_[0]->vc || $_[0]->price_rule->type);
|
||
}
|
||
|
||
sub add_javascripts {
|
SL/DB/Manager/PriceRule.pm | ||
---|---|---|
sub object_class { 'SL::DB::PriceRule' }
|
||
|
||
__PACKAGE__->make_manager_methods;
|
||
__PACKAGE__->add_filter_specs(
|
||
has_item_type => sub {
|
||
my ($key, $values, $prefix) = @_;
|
||
return unless @$values;
|
||
|
||
my $each_type = "SELECT DISTINCT price_rules_id FROM price_rule_items WHERE type = %s";
|
||
my $sub_query = join ' INTERSECT ', map { sprintf $each_type, $::form->get_standard_dbh->quote($_) } @$values;
|
||
return or => [ ${prefix} . 'id' => [ \$sub_query ] ];
|
||
},
|
||
item_type_matches => sub {
|
||
my ($key, $values, $prefix) = @_;
|
||
return unless @$values;
|
||
return unless 'HASH' eq ref $values->[0];
|
||
return unless grep $_, values %{ $values->[0] };
|
||
|
||
my $each_type = "SELECT DISTINCT price_rules_id FROM price_rule_items WHERE type = %s AND (%s)";
|
||
my $sub_query = join ' INTERSECT ', map {
|
||
sprintf $each_type, $::form->get_standard_dbh->quote($_), SL::DB::Manager::PriceRuleItem->filter_match($_, $values->[0]{$_})
|
||
} grep { $values->[0]{$_} } keys %{ $values->[0] };
|
||
return or => [ ${prefix} . 'id' => [ \$sub_query ] ];
|
||
},
|
||
);
|
||
|
||
sub get_matching_filter {
|
||
my ($class, %params) = @_;
|
SL/DB/Manager/PriceRuleItem.pm | ||
---|---|---|
[ map { [ $_, $types{$_}{description} ] } grep { $types{$_}{$vc} } 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;
|
locale/de/all | ||
---|---|---|
'HTML Templates' => 'HTML-Vorlagen',
|
||
'Handling of WebDAV' => 'Behandlung von WebDAV',
|
||
'Hardcopy' => 'Seite drucken',
|
||
'Has item type' => 'Hat Regeltypen',
|
||
'Has serial number' => 'Hat eine Serienummer',
|
||
'Heading' => 'Überschrift',
|
||
'Help Template Variables' => 'Hilfe zu Dokumenten-Variablen',
|
templates/webpages/price_rule/_filter.html | ||
---|---|---|
<div class='filter_toggle' style='display:none'>
|
||
<a href='#' onClick='javascript:$(".filter_toggle").toggle()'>[% 'Hide Filter' | $T8 %]</a>
|
||
<table id='filter_table'>
|
||
<tr>
|
||
<tr>
|
||
<th align="right">[% 'Description' | $T8 %]</th>
|
||
<td>[% L.input_tag('filter.name:substr::ilike', filter.name_substr__ilike, size = 20) %]</td>
|
||
<td>[% L.input_tag('filter.name:substr::ilike', filter.name_substr__ilike, size = 20, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Part' | $T8 %]</th>
|
||
<td>[% L.part_picker('filter.item_type_matches[].part', FORM.filter.item_type_matches.0.part, style='width: 300px') %]</td>
|
||
</tr>
|
||
[%- IF SELF.vc == 'customer' %]
|
||
<tr>
|
||
<th align="right">[% 'Customer' | $T8 %]</th>
|
||
<td>[% L.customer_vendor_picker('filter.item_type_matches[].customer', FORM.filter.item_type_matches.0.customer, type='customer', style='width: 300px') %]</td>
|
||
</tr>
|
||
[%- END %]
|
||
[%- IF SELF.vc == 'vendor' %]
|
||
<tr>
|
||
<th align="right">[% 'Vendor' | $T8 %]</th>
|
||
<td>[% L.customer_vendor_picker('filter.item_type_matches[].vendor', FORM.filter.item_type_matches.0.vendor, type='vendor', style='width: 300px') %]</td>
|
||
</tr>
|
||
[%- END %]
|
||
<tr>
|
||
<th align="right">[% 'Business' | $T8 %]</th>
|
||
<td>[% L.select_tag('filter.item_type_matches[].business', SELF.businesses, title_key='description', default=FORM.filter.item_type_matches.0.business, with_empty=1, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Group' | $T8 %]</th>
|
||
<td>[% L.select_tag('filter.item_type_matches[].partsgroup', SELF.partsgroups, title_key='partsgroup', default=FORM.filter.item_type_matches.0.partsgroup, with_empty=1, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Qty' | $T8 %]</th>
|
||
<td>[% L.input_tag('filter.item_type_matches[].qty', FORM.filter.item_type_matches.0.qty, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Reqdate' | $T8 %]</th>
|
||
<td>[% L.date_tag('filter.item_type_matches[].reqdate', FORM.filter.item_type_matches.0.reqdate, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Transdate' | $T8 %]</th>
|
||
<td>[% L.date_tag('filter.item_type_matches[].transdate', FORM.filter.item_type_matches.0.transdate, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Pricegroup' | $T8 %]</th>
|
||
<td>[% L.select_tag('filter.item_type_matches[].pricegroup', SELF.pricegroups, default=FORM.filter.item_type_matches.0.pricegroup, title_key='pricegroup', with_empty=1, style='width: 300px') %]<br>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Price' | $T8 %]</th>
|
||
<td>[% L.input_tag('filter.price:number', filter.price_number, size=20) %]</td>
|
||
<td>[% L.input_tag('filter.price:number', filter.price_number, size=20, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Discount' | $T8 %]</th>
|
||
<td>[% L.input_tag('filter.discount:number', filter.discount_number, size=20) %]</td>
|
||
<td>[% L.input_tag('filter.discount:number', filter.discount_number, size=20, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Priority' | $T8 %]</th>
|
||
... | ... | |
<th align="right">[% 'Obsolete' | $T8 %]</th>
|
||
<td>[% L.select_tag('filter.obsolete', [ [ '', LxERP.t8('Both') ], [ 0, LxERP.t8('Valid') ], [ 1 , LxERP.t8('Obsolete')]], default=filter.obsolete, style='width: 300px') %]</td>
|
||
</tr>
|
||
<tr>
|
||
<th align="right">[% 'Has item type' | $T8 %]</th>
|
||
<td>
|
||
[%- FOREACH type = SELF.all_price_rule_item_types %]
|
||
[%- L.checkbox_tag('filter.has_item_type[]', value=type.0, label=type.1, checked=filter.has_item_type_.${type.0}) %]
|
||
[%- END %]
|
||
</td>
|
||
</tr>
|
||
|
||
</table>
|
||
|
||
[% L.hidden_tag('action', 'PriceRule/dispatch') %]
|
Auch abrufbar als: Unified diff
PriceRule: Mehr Filteroptionen