diff --git a/app/views/timelog/_form.html.erb b/app/views/timelog/_form.html.erb old mode 100644 new mode 100755 index 2d1134c..aa62ffc --- a/app/views/timelog/_form.html.erb +++ b/app/views/timelog/_form.html.erb @@ -2,15 +2,14 @@ <%= back_url_hidden_field_tag %>
- <% if @time_entry.new_record? %> - <% if params[:project_id] %> - <%= hidden_field_tag 'project_id', params[:project_id] %> - <% elsif params[:issue_id] %> - <%= hidden_field_tag 'issue_id', params[:issue_id] %> - <% else %> -

<%= f.select :project_id, project_tree_options_for_select(Project.allowed_to(:log_time).to_a, :selected => @time_entry.project, :include_blank => true), :required => true %>

- <% end %> + <% if @time_entry.new_record? && params[:project_id] %> + <%= hidden_field_tag 'project_id', params[:project_id] %> + <% elsif @time_entry.new_record? && params[:issue_id] %> + <%= hidden_field_tag 'issue_id', params[:issue_id] %> + <% else %> +

<%= f.select :project_id, project_tree_options_for_select(Project.allowed_to(:log_time).to_a, :selected => @time_entry.project, :include_blank => true), :required => true %>

<% end %> +

<%= f.text_field :issue_id, :size => 6, :required => Setting.timelog_required_fields.include?('issue_id') %> @@ -29,6 +28,9 @@ <%= javascript_tag do %> $(document).ready(function(){ + $('#time_entry_project_id').change(function(){ + $('#time_entry_issue_id').val(''); + }); $('#time_entry_project_id, #time_entry_issue_id').change(function(){ $.ajax({ url: '<%= escape_javascript(@time_entry.new_record? ? new_time_entry_path(:format => 'js') : edit_time_entry_path(:format => 'js')) %>', @@ -45,10 +47,10 @@ term: request.term }; var project_id; - <% if @project %> - project_id = '<%= @project.id %>'; + <% if @time_entry.new_record? && @project %> + project_id = '<%= @project.id %>'; <% else %> - project_id = $('#time_entry_project_id').val(); + project_id = $('#time_entry_project_id').val(); <% end %> if(project_id){ data['project_id'] = project_id; diff --git a/app/views/timelog/bulk_edit.html.erb b/app/views/timelog/bulk_edit.html.erb old mode 100644 new mode 100755 index 640f7d8..95e9e48 --- a/app/views/timelog/bulk_edit.html.erb +++ b/app/views/timelog/bulk_edit.html.erb @@ -12,6 +12,14 @@

+ + <%= select_tag('time_entry[project_id]', + project_tree_options_for_select(Project.allowed_to(:log_time).to_a, + :include_blank => l(:label_no_change_option), + :selected => @target_project)) %> +

+ +

<%= text_field :time_entry, :issue_id, :size => 6 %>

diff --git a/app/views/timelog/edit.js.erb b/app/views/timelog/edit.js.erb old mode 100644 new mode 100755 index cd78611..4cba8cf --- a/app/views/timelog/edit.js.erb +++ b/app/views/timelog/edit.js.erb @@ -1 +1,2 @@ +$('#time_entry_activity_id').html('<%= escape_javascript options_for_select(activity_collection_for_select_options(@time_entry), @time_entry.activity_id) %>'); $('#time_entry_issue').html('<%= escape_javascript link_to_issue(@time_entry.issue) if @time_entry.issue.try(:visible?) %>'); diff --git a/test/functional/timelog_controller_test.rb b/test/functional/timelog_controller_test.rb old mode 100644 new mode 100755 index baad0c9..ead9190 --- a/test/functional/timelog_controller_test.rb +++ b/test/functional/timelog_controller_test.rb @@ -125,6 +125,14 @@ class TimelogControllerTest < Redmine::ControllerTest assert_select 'option', :text => '--- Please select ---' end + def test_get_edit_should_show_projects_select + @request.session[:user_id] = 2 + get :edit, :params => {:id => 2, :project_id => nil} + assert_response :success + + assert_select 'select[name=?]', 'time_entry[project_id]' + end + def test_post_create @request.session[:user_id] = 3 assert_difference 'TimeEntry.count' do @@ -489,6 +497,37 @@ class TimelogControllerTest < Redmine::ControllerTest assert_select_error /Issue is invalid/ end + def test_update_should_allow_to_change_project + entry = TimeEntry.generate!(:project_id => 1) + + @request.session[:user_id] = 1 + put :update, :params => { + :id => entry.id, + :time_entry => { + :project_id => '2' + } + } + assert_response 302 + entry.reload + + assert_equal 2, entry.project_id + end + + def test_update_should_fail_with_issue_from_another_project + entry = TimeEntry.generate!(:project_id => 1, :issue_id => 1) + + @request.session[:user_id] = 1 + put :update, :params => { + :id => entry.id, + :time_entry => { + :project_id => '2' + } + } + + assert_response :success + assert_select_error /Issue is invalid/ + end + def test_get_bulk_edit @request.session[:user_id] = 2