X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FManager%2FPriceRule.pm;h=d5b5489d67e181d85a7cd3f7d2bb23eb2c541be3;hb=deb4d2dbb676d7d6f69dfe7815d6e0cb09bd4a44;hp=e94fd1546352cf2fba10afce3c40d64b4160cd4b;hpb=0fe023a4ee7e467bfb5f23a87800b8723c8ccacd;p=kivitendo-erp.git diff --git a/SL/DB/Manager/PriceRule.pm b/SL/DB/Manager/PriceRule.pm index e94fd1546..d5b5489d6 100644 --- a/SL/DB/Manager/PriceRule.pm +++ b/SL/DB/Manager/PriceRule.pm @@ -7,6 +7,10 @@ use strict; use parent qw(SL::DB::Helper::Manager); +use constant PRICE_NEW => 0; +use constant PRICE_REDUCED_MASTER_DATA => 1; +use constant PRICE_DISCOUNT => 2; + use SL::DB::Helper::Filtered; use SL::DB::Helper::Paginated; use SL::DB::Helper::Sorted; @@ -17,6 +21,28 @@ use SL::Locale::String qw(t8); 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) = @_; @@ -54,6 +80,12 @@ sub get_all_matching { $self->get_all(query => [ id => \@ids ]); } +sub all_price_types { + [ PRICE_NEW, t8('Price') ], + [ PRICE_REDUCED_MASTER_DATA, t8('Reduced Master Data') ], + [ PRICE_DISCOUNT, t8('Discount') ], +} + sub _sort_spec { return ( columns => { SIMPLE => 'ALL', }, default => [ 'name', 1 ],