diff options
author | Go MAEDA <maeda@farend.jp> | 2024-08-08 04:24:44 +0000 |
---|---|---|
committer | Go MAEDA <maeda@farend.jp> | 2024-08-08 04:24:44 +0000 |
commit | c96ef014dd8405e70cc30c5da0f7cffc98a153d4 (patch) | |
tree | a814519a866ab9820e96130c894b81ae2f154ead | |
parent | 2bc9048bb1db4f7bbc872fb1a4a1ce922ad5173e (diff) | |
download | redmine-c96ef014dd8405e70cc30c5da0f7cffc98a153d4.tar.gz redmine-c96ef014dd8405e70cc30c5da0f7cffc98a153d4.zip |
Fix issue where minutes part of a time entry is displayed as 60 instead of being carried over (#36897).
Patch by Go MAEDA (user:maeda).
git-svn-id: https://svn.redmine.org/redmine/trunk@22946 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | lib/redmine/i18n.rb | 6 | ||||
-rw-r--r-- | test/helpers/application_helper_test.rb | 15 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/redmine/i18n.rb b/lib/redmine/i18n.rb index 83ecb05eb..0488fa289 100644 --- a/lib/redmine/i18n.rb +++ b/lib/redmine/i18n.rb @@ -92,12 +92,12 @@ module Redmine def format_hours(hours) return "" if hours.blank? + minutes = (hours * 60).round if Setting.timespan_format == 'minutes' - h = hours.floor - m = ((hours - h) * 60).round + h, m = minutes.divmod(60) "%d:%02d" % [h, m] else - number_with_delimiter(sprintf('%.2f', hours.to_f), delimiter: nil) + number_with_delimiter(sprintf('%.2f', minutes.fdiv(60)), delimiter: nil) end end diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb index 70c112732..8cb086f12 100644 --- a/test/helpers/application_helper_test.rb +++ b/test/helpers/application_helper_test.rb @@ -2204,6 +2204,21 @@ class ApplicationHelperTest < Redmine::HelperTest end end + def test_format_hours_rounds_to_nearest_minute + set_language_if_valid 'en' + + # 7h 59m 29s (7.991388888888889) -> 7h 59m (7.98) + # 7h 59m 30s (7.991666666666667) -> 8h 0m (8.00) + with_settings :timespan_format => 'minutes' do + assert_equal '7:59', format_hours(7.991388888888889) + assert_equal '8:00', format_hours(7.991666666666667) + end + with_settings :timespan_format => 'decimal' do + assert_equal '7.98', format_hours(7.991388888888889) + assert_equal '8.00', format_hours(7.991666666666667) + end + end + def test_format_hours_should_use_locale_decimal_separator to_test = {'en' => '0.75', 'de' => '0,75'} with_settings :timespan_format => 'decimal' do |