]> wagnertech.de Git - mfinanz.git/blobdiff - SL/DB/Unit.pm
SL::DB::Unit::base_factor: Verwendung von $::request->cache()
[mfinanz.git] / SL / DB / Unit.pm
index 54b104d4fc7774374963afbd17ef5dafe2d8cdc7..e8d260c6797d795a4d9cb989dc6cdcbf27011790 100644 (file)
@@ -4,10 +4,11 @@ use strict;
 
 use SL::DB::MetaSetup::Unit;
 use SL::DB::Manager::Unit;
+use SL::DB::Helper::ActsAsList;
 
 __PACKAGE__->meta->add_relationships(
   base => {
-    type         => 'one to one',
+    type         => 'many to one',
     class        => 'SL::DB::Unit',
     column_map   => { base_unit => 'name' },
   },
@@ -26,21 +27,25 @@ sub unit_class {
 
 sub convertible_units {
   my $self = shift;
+  my $all_units = scalar(@_) && (ref($_[0]) eq 'ARRAY') ? $_[0] : \@_;
+  $all_units    = SL::DB::Manager::Unit->get_all if !@{ $all_units };
   return [
     sort { $a->sortkey <=> $b->sortkey }
     grep { $_->unit_class->name eq $self->unit_class->name }
-    @{ SL::DB::Manager::Unit->get_all }
+    @{ $all_units }
   ];
 }
 
 sub base_factor {
   my ($self) = @_;
 
-  if (!defined $self->{__base_factor}) {
-    $self->{__base_factor} = !$self->base_unit || !$self->factor || ($self->name eq $self->base_unit) ? 1 : $self->factor * $self->base->base_factor;
+  my $cache = $::request->cache('base_factor');
+
+  if (!defined $cache->{$self->id}) {
+    $cache->{$self->id} = !$self->base_unit || !$self->factor || ($self->name eq $self->base_unit) ? 1 : $self->factor * $self->base->base_factor;
   }
 
-  return $self->{__base_factor};
+  return $cache->{$self->id};
 }
 
 sub convert_to {