Zeiterfassung: Eingabemaske: Dauer auch in Stunden angeben können
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Tue, 4 May 2021 12:22:55 +0000 (14:22 +0200)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 5 May 2021 15:25:03 +0000 (17:25 +0200)
SL/Controller/TimeRecording.pm
locale/de/all
locale/en/all
templates/webpages/time_recording/form.html

index 745de90..db8d226 100644 (file)
@@ -16,6 +16,7 @@ use SL::DB::Part;
 use SL::DB::TimeRecording;
 use SL::DB::TimeRecordingArticle;
 use SL::Helper::Flash qw(flash);
+use SL::Helper::Number qw(_round_number _parse_number);
 use SL::Helper::UserPreferences::TimeRecording;
 use SL::Locale::String qw(t8);
 use SL::ReportGenerator;
@@ -146,7 +147,12 @@ sub init_time_recording {
 
   my %attributes = %{ $::form->{time_recording} || {} };
 
-  if (!$self->use_duration) {
+  if ($self->use_duration) {
+    if ($::form->{duration_h} || $::form->{duration_m}) {
+      $attributes{duration} = _round_number(_parse_number($::form->{duration_h}) * 60 + _parse_number($::form->{duration_m}), 0);
+    }
+
+  } else {
     foreach my $type (qw(start end)) {
       if ($::form->{$type . '_date'}) {
         my $date = DateTime->from_kivitendo($::form->{$type . '_date'});
index f88cbf5..a44b479 100755 (executable)
@@ -3983,6 +3983,7 @@ $self->{texts} = {
   'VAT ID and/or taxnumber must be given.' => 'UStId und/oder Steuernummer muss angegeben werden.',
   'VN'                          => 'Kred.-Nr.',
   'Valid'                       => 'Gültig',
+  'Valid are integer values and floating point numbers, e.g. 4.75h = 4 hours and 45 minutes.' => 'Erlaubt sind ganzzahlige Werte und Kommawerte: Beispiel: 4,75h = 4 Stunden und 45 Minuten.',
   'Valid from'                  => 'Gültig ab',
   'Valid until'                 => 'gültig bis',
   'Valid/Obsolete'              => 'Gültig/ungültig',
@@ -4269,7 +4270,6 @@ $self->{texts} = {
   'http'                        => 'http',
   'https'                       => 'https',
   'imported'                    => 'Importiert',
-  'in minutes'                  => 'in Minuten',
   'inactive'                    => 'inaktiv',
   'income'                      => 'Einnahmen-Überschuß-Rechnung',
   'internal error (see details)' => 'Interner Fehler (siehe Details)!',
@@ -4301,6 +4301,7 @@ $self->{texts} = {
   'list_of_transactions'        => 'buchungsliste',
   'male'                        => 'männlich',
   'max filesize'                => 'maximale Dateigröße',
+  'min'                         => 'min',
   'missing'                     => 'Fehlbestand',
   'missing file for action import' => 'Es wurde keine Datei zum Hochladen ausgewählt',
   'missing_br'                  => 'Fehl.',
index 1f5bfea..1310f3b 100644 (file)
@@ -3981,6 +3981,7 @@ $self->{texts} = {
   'VAT ID and/or taxnumber must be given.' => '',
   'VN'                          => '',
   'Valid'                       => '',
+  'Valid are integer values and floating point numbers, e.g. 4.75h = 4 hours and 45 minutes.' => '',
   'Valid from'                  => '',
   'Valid until'                 => '',
   'Valid/Obsolete'              => '',
@@ -4267,7 +4268,6 @@ $self->{texts} = {
   'http'                        => '',
   'https'                       => '',
   'imported'                    => '',
-  'in minutes'                  => '',
   'inactive'                    => '',
   'income'                      => 'GUV and BWA',
   'internal error (see details)' => '',
@@ -4299,6 +4299,7 @@ $self->{texts} = {
   'list_of_transactions'        => '',
   'male'                        => '',
   'max filesize'                => '',
+  'min'                         => '',
   'missing'                     => '',
   'missing file for action import' => '',
   'missing_br'                  => 'missing',
index 62e486f..233eb70 100644 (file)
       </td>
     </tr>
     <tr>
-      <th align="right">[% 'Duration' | $T8 %] ([% 'in minutes' | $T8 %])</th>
+      <th align="right">[% 'Duration' | $T8 %]</th>
       <td>
-        [% P.input_tag('time_recording.duration', SELF.time_recording.duration, size=11) %]
+        [% P.input_tag('duration_h', SELF.time_recording.duration_as_hours,   size=4, class='numeric') %] [% 'h' | $T8 %]<sup>(1)</sup>
+        [% P.input_tag('duration_m', SELF.time_recording.duration_as_minutes, size=4, class='numeric') %] [% 'min' | $T8%]
       </td>
     </tr>
    [%- ELSE %]
     </tr>
   </table>
 
+  [%- IF SELF.use_duration %]
+  <p>
+    <sup>(1)</sup>
+    [% 'Valid are integer values and floating point numbers, e.g. 4.75h = 4 hours and 45 minutes.' | $T8 %]
+  </p>
+  [%- END %]
+
 </form>