mirror of
https://github.com/meineerde/redmine.git
synced 2026-01-31 19:47:14 +00:00
Adds interval ratio setting to progressbar custom field (#42335).
Patch by Marius BĂLTEANU (user:marius.balteanu) and Go MAEDA (user:maeda). git-svn-id: https://svn.redmine.org/redmine/trunk@23686 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
d76cf64516
commit
ce94a1d71a
@ -101,7 +101,8 @@ class CustomField < ApplicationRecord
|
||||
'version_status',
|
||||
'extensions_allowed',
|
||||
'full_width_layout',
|
||||
'thousands_delimiter'
|
||||
'thousands_delimiter',
|
||||
'ratio_interval'
|
||||
)
|
||||
|
||||
def copy_from(arg, options={})
|
||||
|
||||
@ -1086,8 +1086,15 @@ module Redmine
|
||||
class ProgressbarFormat < Numeric
|
||||
add 'progressbar'
|
||||
|
||||
self.form_partial = nil
|
||||
self.form_partial = 'custom_fields/formats/progressbar'
|
||||
self.totalable_supported = false
|
||||
field_attributes :ratio_interval
|
||||
|
||||
# Take the default value from Setting.issue_done_ratio_interval.to_i
|
||||
# in order to have a consistent behaviour for default ratio interval.
|
||||
def self.default_ratio_interval
|
||||
Setting.issue_done_ratio_interval.to_i
|
||||
end
|
||||
|
||||
def label
|
||||
"label_progressbar"
|
||||
@ -1112,11 +1119,19 @@ module Redmine
|
||||
order_statement(custom_field)
|
||||
end
|
||||
|
||||
def before_custom_field_save(custom_field)
|
||||
super
|
||||
|
||||
if custom_field.ratio_interval.blank?
|
||||
custom_field.ratio_interval = self.class.default_ratio_interval
|
||||
end
|
||||
end
|
||||
|
||||
def edit_tag(view, tag_id, tag_name, custom_value, options={})
|
||||
view.select_tag(
|
||||
tag_name,
|
||||
view.options_for_select(
|
||||
(0..100).step(Setting.issue_done_ratio_interval.to_i).to_a.collect {|r| ["#{r} %", r]},
|
||||
(0..100).step(custom_value.custom_field.ratio_interval.to_i).to_a.collect {|r| ["#{r} %", r]},
|
||||
custom_value.value
|
||||
),
|
||||
options.merge(id: tag_id, style: "width: 75px;")
|
||||
@ -1124,7 +1139,7 @@ module Redmine
|
||||
end
|
||||
|
||||
def bulk_edit_tag(view, tag_id, tag_name, custom_field, objects, value, options={})
|
||||
opts = view.options_for_select([[l(:label_no_change_option), '']] + (0..100).step(Setting.issue_done_ratio_interval.to_i).to_a.collect {|r| ["#{r} %", r]})
|
||||
opts = view.options_for_select([[l(:label_no_change_option), '']] + (0..100).step(custom_field.ratio_interval.to_i).to_a.collect {|r| ["#{r} %", r]})
|
||||
view.select_tag(tag_name, opts, options.merge(id: tag_id, style: "width: 75px;")) +
|
||||
bulk_clear_tag(view, tag_id, tag_name, custom_field, value)
|
||||
end
|
||||
|
||||
@ -282,6 +282,23 @@ class CustomFieldsControllerTest < Redmine::ControllerTest
|
||||
assert_select '[name=?]', 'custom_field[full_width_layout]', 0
|
||||
end
|
||||
|
||||
def test_setting_ratio_interval_should_be_present_only_for_progressbar_format
|
||||
get(
|
||||
:new,
|
||||
:params => {
|
||||
:type => 'IssueCustomField',
|
||||
:custom_field => {
|
||||
:field_format => 'progressbar'
|
||||
}
|
||||
}
|
||||
)
|
||||
assert_response :success
|
||||
assert_select '[name=?]', 'custom_field[ratio_interval]' do
|
||||
assert_select 'option[value=?]', '5'
|
||||
assert_select 'option[value=?][selected=?]', '10', 'selected'
|
||||
end
|
||||
end
|
||||
|
||||
def test_new_js
|
||||
get(
|
||||
:new,
|
||||
|
||||
@ -5996,6 +5996,16 @@ class IssuesControllerTest < Redmine::ControllerTest
|
||||
end
|
||||
end
|
||||
|
||||
def test_get_edit_with_custom_field_progress_bar
|
||||
cf = IssueCustomField.generate!(:tracker_ids => [1], :is_for_all => true, :field_format => 'progressbar')
|
||||
|
||||
@request.session[:user_id] = 1
|
||||
get(:edit, :params => {:id => 1})
|
||||
assert_response :success
|
||||
|
||||
assert_select "select[id=?]", "issue_custom_field_values_#{cf.id}", 1
|
||||
end
|
||||
|
||||
def test_get_edit_with_me_assigned_to_id
|
||||
@request.session[:user_id] = 2
|
||||
get(
|
||||
|
||||
@ -21,7 +21,7 @@ require_relative '../../../../test_helper'
|
||||
require 'redmine/field_format'
|
||||
|
||||
module Redmine::FieldFormat
|
||||
class ProgressbarFormatTest < ActiveSupport::TestCase
|
||||
class ProgressbarFormatTest < ActionView::TestCase
|
||||
def setup
|
||||
@field = IssueCustomField.new(name: 'ProgressbarTest', field_format: 'progressbar')
|
||||
@format = Redmine::FieldFormat::ProgressbarFormat.instance
|
||||
@ -81,5 +81,40 @@ module Redmine::FieldFormat
|
||||
options = @format.query_filter_options(@field, nil)
|
||||
assert_equal :integer, options[:type]
|
||||
end
|
||||
|
||||
def test_default_ratio_interval_should_be_default_issue_done_ratio_interval
|
||||
@field.save
|
||||
assert_equal 10, @field.ratio_interval
|
||||
end
|
||||
|
||||
def test_ratio_interval
|
||||
@field.update(ratio_interval: 5)
|
||||
assert_equal 5, @field.ratio_interval
|
||||
end
|
||||
|
||||
def test_edit_tag_possible_values_with_ratio_interval
|
||||
[5, 10].each do |ratio_interval|
|
||||
@field.update(ratio_interval: ratio_interval)
|
||||
value = CustomValue.new(custom_field: @field, value: '90')
|
||||
|
||||
tag = @field.format.edit_tag(self, 'id', 'name', value)
|
||||
assert_select_in tag, 'select' do
|
||||
assert_select 'option', 100 / ratio_interval + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_bulk_edit_tag_possible_values_with_ratio_interval
|
||||
[5, 10].each do |ratio_interval|
|
||||
@field.update(ratio_interval: ratio_interval)
|
||||
value = CustomValue.new(custom_field: @field, value: '90')
|
||||
objects = [Issue.new, Issue.new]
|
||||
|
||||
tag = @field.format.bulk_edit_tag(self, 'id', 'name', @field, objects, value)
|
||||
assert_select_in tag, 'select' do |select|
|
||||
assert_select select.first, 'option', 100 / ratio_interval + 2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user