SL::DB::Helpers::Attr as_date geht jetzt auch mit 'now()'.
[kivitendo-erp.git] / SL / DB / Helper / Attr.pm
index 463bfd6..6f2dd55 100644 (file)
@@ -30,9 +30,11 @@ sub make {
 sub _make_by_type {
   my ($package, $name, $type) = @_;
   _as_number ($package, $name, places => -2) if $type =~ /numeric | real | float/xi;
-  _as_percent($package, $name, places =>  0) if $type =~ /numeric | real | float/xi;
+  _as_percent($package, $name, places =>  2) if $type =~ /numeric | real | float/xi;
   _as_number ($package, $name, places =>  0) if $type =~ /int/xi;
   _as_date   ($package, $name)               if $type =~ /date | timestamp/xi;
+  _as_timestamp($package, $name)             if $type =~ /timestamp/xi;
+  _as_bool_yn($package, $name)               if $type =~ /bool/xi;
 }
 
 sub _as_number {
@@ -92,7 +94,7 @@ sub _as_date {
     return $self->$attribute
       ? $::locale->reformat_date(
           { dateformat => 'yy-mm-dd' },
-          ( $self->$attribute eq 'now'
+          ( ($self->$attribute eq 'now' || $self->$attribute eq 'now()')
              ? DateTime->now
              : $self->$attribute
           )->ymd,
@@ -104,6 +106,49 @@ sub _as_date {
   return 1;
 }
 
+sub _as_timestamp {
+  my $package     = shift;
+  my $attribute   = shift;
+  my %params      = @_;
+
+  my $accessor    = sub {
+    my ($precision, $self, $string) = @_;
+
+    $self->$attribute($string ? $::locale->parse_date_to_object($string) : undef) if @_ > 2;
+
+    my $dt = $self->$attribute;
+    return undef unless $dt;
+
+    $dt = DateTime->now if !ref($dt) && ($dt eq 'now');
+
+    return $::locale->format_date_object($dt, precision => $precision);
+  };
+
+  no strict 'refs';
+  *{ $package . '::' . $attribute . '_as_timestamp'    } = sub { $accessor->('minute',      @_) };
+  *{ $package . '::' . $attribute . '_as_timestamp_s'  } = sub { $accessor->('second',      @_) };
+  *{ $package . '::' . $attribute . '_as_timestamp_ms' } = sub { $accessor->('millisecond', @_) };
+
+  return 1;
+}
+
+sub _as_bool_yn {
+  my ($package, $attribute, %params) = @_;
+
+  no strict 'refs';
+  *{ $package . '::' . $attribute . '_as_bool_yn' } = sub {
+    my ($self) = @_;
+
+    if (@_ > 1) {
+      die 'not an accessor';
+    }
+
+    return !defined $self->$attribute ? ''
+         :          $self->$attribute ? $::locale->text('Yes')
+         :                              $::locale->text('No');
+  }
+}
+
 1;
 
 
@@ -111,6 +156,8 @@ sub _as_date {
 
 __END__
 
+=encoding utf-8
+
 =head1 NAME
 
 SL::DB::Helper::Attr - attribute helpers
@@ -126,10 +173,19 @@ SL::DB::Helper::Attr - attribute helpers
 
 =head1 DESCRIPTION
 
+Makes attribute helpers.
+
 =head1 FUNCTIONS
 
+see for yourself.
+
 =head1 BUGS
 
+None yet.
+
 =head1 AUTHOR
 
+Sven Schöling <s.schoeling@linet-services.de>,
+Moritz Bunkus <m.bunkus@linet-services.de>
+
 =cut