Tag-Presenter: man_days_tag()-Funktion
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 11 Mar 2013 11:20:44 +0000 (12:20 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 11 Mar 2013 11:57:07 +0000 (12:57 +0100)
SL/Presenter/Tag.pm
locale/de/all

index b42d61d..6fefd12 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use parent qw(Exporter);
 
 use Exporter qw(import);
-our @EXPORT = qw(html_tag input_tag name_to_id select_tag stringify_attributes);
+our @EXPORT = qw(html_tag input_tag man_days_tag name_to_id select_tag stringify_attributes);
 
 use Carp;
 
@@ -14,6 +14,12 @@ my %_valueless_attributes = map { $_ => 1 } qw(
   readonly selected
 );
 
+sub _call_on {
+  my ($object, $method, @params) = @_;
+  return $object->$method(@params);
+}
+
+
 sub stringify_attributes {
   my ($self, %params) = @_;
 
@@ -45,6 +51,20 @@ sub input_tag {
   return $self->html_tag('input', undef, %attributes, name => $name, value => $value);
 }
 
+sub man_days_tag {
+  my ($self, $name, $object, %attributes) = @_;
+
+  my $size           =  delete($attributes{size})   || 5;
+  my $method         =  $name;
+  $method            =~ s/^.*\.//;
+
+  my $time_selection =  $self->input_tag( "${name}_as_man_days_string", _call_on($object, "${method}_as_man_days_string"), %attributes, size => $size);
+  my $unit_selection =  $self->select_tag("${name}_as_man_days_unit",   [[ 'h', $::locale->text('h') ], [ 'man_day', $::locale->text('MD') ]],
+                                          %attributes, default => _call_on($object, "${method}_as_man_days_unit"));
+
+  return $time_selection . $unit_selection;
+}
+
 sub name_to_id {
   my ($self, $name) = @_;
 
@@ -225,6 +245,26 @@ Creates a HTML 'input type=text' tag named C<$name> with the value
 C<$value> and with arbitrary HTML attributes from C<%attributes>. The
 tag's C<id> defaults to C<name_to_id($name)>.
 
+=item C<man_days_tag $name, $object, %attributes>
+
+Creates two HTML inputs: a text input for entering a number and a drop
+down box for chosing the unit (either 'man days' or 'hours').
+
+C<$object> must be a L<Rose::DB::Object> instance using the
+L<SL::DB::Helper::AttrDuration> helper.
+
+C<$name> is supposed to be the name of the underlying column,
+e.g. C<time_estimation> for an instance of
+C<SL::DB::RequirementSpecItem>. If C<$name> has the form
+C<prefix.method> then the full C<$name> is used for the input's base
+names while the methods called on C<$object> are only the suffix. This
+makes it possible to write statements like e.g.
+
+  [% P.man_days_tag("requirement_spec_item.time_estimation", SELF.item) %]
+
+The attribute C<size> can be used to set the text input's size. It
+defaults to 5.
+
 =item C<select_tag $name, \@collection, %attributes>
 
 Creates a HTML 'select' tag named C<$name> with the contents of one
index ded0869..5e12166 100644 (file)
@@ -1162,6 +1162,7 @@ $self->{texts} = {
   'Long Dates'                  => 'Lange Monatsnamen',
   'Long Description'            => 'Langtext',
   'MAILED'                      => 'Gesendet',
+  'MD'                          => 'PT',
   'Main Preferences'            => 'Grundeinstellungen',
   'Main sorting'                => 'Hauptsortierung',
   'Make'                        => 'Lieferant',
@@ -2416,6 +2417,7 @@ $self->{texts} = {
   'found'                       => 'Gefunden',
   'from (time)'                 => 'von',
   'general_ledger_list'         => 'buchungsjournal',
+  'h'                           => 'h',
   'history'                     => 'Historie',
   'history search engine'       => 'Historien Suchmaschine',
   'inactive'                    => 'inaktiv',