Factur-X/ZUGFeRD: in »Factur-X/ZUGFeRD« umbenannt
[kivitendo-erp.git] / SL / DB / Helper / TranslatedAttributes.pm
index 51e7e29..2c3857c 100644 (file)
@@ -10,13 +10,18 @@ our @EXPORT = qw(translated_attribute save_attribute_translation);
 use Carp;
 
 sub translated_attribute {
-  my ($self, $attribute, $language_id, %params) = @_;
+  my ($self, $attribute, $language_id, $verbatim) = @_;
 
-  $language_id      = _check($self, $attribute, $language_id);
-  my $translation   = _find_translation($self, $attribute, $language_id, 0);
-  $translation    ||= _find_translation($self, $attribute, undef,        0);
+  $language_id        = _check($self, $attribute, $language_id, $verbatim);
+  my $translation_obj = _find_translation($self, $attribute, $language_id, 0);
+  my $translation     = $translation_obj ? $translation_obj->translation : '';
 
-  return $translation ? $translation->translation : $self->$attribute;
+  return $translation if $verbatim || $translation;
+
+  $translation_obj = _find_translation($self, $attribute, undef, 0);
+  $translation     = $translation_obj ? $translation_obj->translation : '';
+
+  return $translation || $self->$attribute;
 }
 
 sub save_attribute_translation {
@@ -28,12 +33,12 @@ sub save_attribute_translation {
 }
 
 sub _check {
-  my ($self, $attribute, $language_id) = @_;
+  my ($self, $attribute, $language_id, $verbatim) = @_;
 
   croak "Invalid attribute '${attribute}'" unless $self->can($attribute);
-  croak "Object has not been saved yet"    unless $self->id;
+  croak "Object has not been saved yet"    unless $self->id || $verbatim;
 
-  return ref($language_id) eq 'SL::DB::Language' ? $language_id->id : $language_id;
+  return (ref($language_id) eq 'SL::DB::Language' ? $language_id->id : $language_id) || undef;
 }
 
 sub _find_translation {
@@ -78,17 +83,18 @@ Usage:
 
 =over 4
 
-=item C<translated_attribute $attribute, $language_id>
+=item C<translated_attribute $attribute, $language_id, $verbatim>
 
 Returns the translation stored for the attribute C<$attribute> and the
 language C<$language_id> (either an ID or an instance of
 L<SL::DB::Language>).
 
-If no translation exists for C<$language_id> or if C<$language_id> is
-undefined then the default translation is looked up.
+If C<$verbatim> is falsish and either no translation exists for
+C<$language_id> or if C<$language_id> is undefined then the default
+translation is looked up.
 
-If neither translation exists then the value of C<< $self->$attribute >>
-is returned.
+If C<$verbatim> is falsish and neither translation exists then the
+value of C<< $self->$attribute >> is returned.
 
 Requires that C<$self> has a primary ID column named C<id> and that
 the object has been saved.