diff --git a/app/controllers/timelog_controller.rb b/app/controllers/timelog_controller.rb index 9cfe16312..0cfdd18db 100644 --- a/app/controllers/timelog_controller.rb +++ b/app/controllers/timelog_controller.rb @@ -172,19 +172,33 @@ class TimelogController < ApplicationController def bulk_update attributes = parse_params_for_bulk_update(params[:time_entry]) - unsaved_time_entry_ids = [] + unsaved_time_entries = [] + saved_time_entries = [] + @time_entries.each do |time_entry| time_entry.reload time_entry.safe_attributes = attributes call_hook(:controller_time_entries_bulk_edit_before_save, { :params => params, :time_entry => time_entry }) - unless time_entry.save - logger.info "time entry could not be updated: #{time_entry.errors.full_messages}" if logger && logger.info? - # Keep unsaved time_entry ids to display them in flash error - unsaved_time_entry_ids << time_entry.id + if time_entry.save + saved_time_entries << time_entry + else + unsaved_time_entries << time_entry end end - set_flash_from_bulk_time_entry_save(@time_entries, unsaved_time_entry_ids) - redirect_back_or_default project_time_entries_path(@projects.first) + + if unsaved_time_entries.empty? + flash[:notice] = l(:notice_successful_update) unless saved_time_entries.empty? + redirect_back_or_default project_time_entries_path(@projects.first) + else + @saved_time_entries = @time_entries + @unsaved_time_entries = unsaved_time_entries + @time_entries = TimeEntry.where(:id => unsaved_time_entries.map(&:id)). + preload(:project => :time_entry_activities). + preload(:user).to_a + + bulk_edit + render :action => 'bulk_edit' + end end def destroy @@ -243,17 +257,6 @@ private render_404 end - def set_flash_from_bulk_time_entry_save(time_entries, unsaved_time_entry_ids) - if unsaved_time_entry_ids.empty? - flash[:notice] = l(:notice_successful_update) unless time_entries.empty? - else - flash[:error] = l(:notice_failed_to_save_time_entries, - :count => unsaved_time_entry_ids.size, - :total => time_entries.size, - :ids => '#' + unsaved_time_entry_ids.join(', #')) - end - end - def find_optional_issue if params[:issue_id].present? @issue = Issue.find(params[:issue_id]) diff --git a/app/views/timelog/bulk_edit.html.erb b/app/views/timelog/bulk_edit.html.erb index 640f7d893..96c953151 100644 --- a/app/views/timelog/bulk_edit.html.erb +++ b/app/views/timelog/bulk_edit.html.erb @@ -1,5 +1,21 @@

<%= l(:label_bulk_edit_selected_time_entries) %>

+<% if @unsaved_time_entries.present? %> +
+ + <%= l(:notice_failed_to_save_time_entries, + :count => @unsaved_time_entries.size, + :total => @saved_time_entries.size, + :ids => @unsaved_time_entries.map {|i| "##{i.id}"}.join(', ')) %> + + +
+<% end %> +