]> wagnertech.de Git - mfinanz.git/blobdiff - SL/DB/Unit.pm
restart apache2 in postinst
[mfinanz.git] / SL / DB / Unit.pm
index 900558fbd48ab8bb05795b7b4631e2444584a381..2c58ec66d95ab9e52f3a590bf912b07f8153afdb 100644 (file)
@@ -1,5 +1,8 @@
 package SL::DB::Unit;
 
+use List::MoreUtils qw(any);
+use List::Util qw(first);
+
 use strict;
 
 use SL::DB::MetaSetup::Unit;
@@ -12,6 +15,11 @@ __PACKAGE__->meta->add_relationships(
     class        => 'SL::DB::Unit',
     column_map   => { base_unit => 'name' },
   },
+  translations => {
+    type         => 'one to many',
+    class        => 'SL::DB::UnitsLanguage',
+    column_map   => { name => 'unit' },
+  },
 );
 
 __PACKAGE__->meta->initialize;
@@ -54,7 +62,32 @@ sub convert_to {
   my $my_base_factor    = $self->base_factor       || 1;
   my $other_base_factor = $other_unit->base_factor || 1;
 
-  return $qty * $my_base_factor / $other_base_factor;
+  return ($qty // 0) * $my_base_factor / $other_base_factor;
+}
+
+sub is_time_based {
+  my ($self) = @_;
+
+  return any { $_->id == $self->id } @{ SL::DB::Manager::Unit->time_based_units };
+}
+
+sub get_translation_obj {
+  my ($self, $language) = @_;
+
+  my $language_id = (ref($language) eq 'SL::DB::Language' ? $language->id : $language) || undef;
+
+  return first { $_->language_id => $language_id } @{ $self->translations || [] };
+}
+
+sub get_translation {
+  my ($self, $language, $qty) = @_;
+
+  my $translation     = $self->name; # fallback, if no translation found
+  my $translation_obj = $self->get_translation_obj(language => $language);
+  if ($translation_obj) {
+    $translation = (($qty // 0) > 1 || ($qty // 0) == 0) ? $translation_obj->localized_plural : $translation_obj->localized;
+  }
+  return $translation;
 }
 
 1;