X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FManager%2FUnit.pm;h=aa55ffa7682ecad2e9a092ee49cf31afe72ae9c9;hb=5d244100bb104bb9319cd806fdf072fa37253d1c;hp=8b3c138a8852d08aa8ba19bd970c6d3d651d1c39;hpb=d0535d474013611f57691dee2e4542115a4f0123;p=kivitendo-erp.git diff --git a/SL/DB/Manager/Unit.pm b/SL/DB/Manager/Unit.pm index 8b3c138a8..aa55ffa76 100644 --- a/SL/DB/Manager/Unit.pm +++ b/SL/DB/Manager/Unit.pm @@ -6,10 +6,19 @@ use SL::DB::Helper::Manager; use base qw(SL::DB::Helper::Manager); use SL::DB::Helper::Sorted; +use SL::DB::Helper::Filtered; + +use List::Util qw(first); sub object_class { 'SL::DB::Unit' } __PACKAGE__->make_manager_methods; +__PACKAGE__->add_filter_specs( + convertible_to => sub { + my ($key, $value, $prefix) = @_; + return __PACKAGE__->convertible_to_filter($key, $value, $prefix); + }, +); sub _sort_spec { return ( default => [ 'sortkey', 1 ], @@ -18,4 +27,39 @@ sub _sort_spec { }); } +sub convertible_to_filter { + my ($class, $key, $unit_name, $prefix) = @_; + + return () unless $unit_name; + + $prefix //= ''; + + my $unit = $class->find_by(name => $unit_name); + if (!$unit) { + $::lxdebug->warn("Unit manager: No unit with name $unit_name"); + return (); + } + + return ("${prefix}name" => [ map { $_->name } @{ $unit->convertible_units } ]); +} + +sub all_units { + my ($class) = @_; + $::request->cache('all_units')->{sorted} //= $class->get_all_sorted; +} + +sub find_h_unit { + my ($class) = @_; + + return $::request->cache('unit_manager')->{h_unit} //= first { $_->name =~ m{^(?: Std | h | Stunde )$}x } @{ $class->all_units }; +} + +sub time_based_units { + my ($class) = @_; + + my $h_unit = $class->find_h_unit; + return [] if !$h_unit; + return $::request->cache('unit_manager')->{units} //= $h_unit->convertible_units; +} + 1;