From b2ecaca21e06f889be150b7b89685833d6eac9ed Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 20 May 2008 20:58:35 -0700 Subject: [PATCH] Made the new deliverable form to submit via Ajax * Added DeliverablesController#create * Refactored each deliverable row to a partial * Added RJS to update the page after a submission #1135 --- app/controllers/deliverables_controller.rb | 16 ++++++++++++++++ app/models/deliverable.rb | 2 ++ app/views/deliverables/_deliverable.html.erb | 9 +++++++++ app/views/deliverables/_form.html.erb | 5 +++-- app/views/deliverables/_list.html.erb | 12 ++---------- app/views/deliverables/create.js.rjs | 19 +++++++++++++++++++ 6 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 app/views/deliverables/_deliverable.html.erb create mode 100644 app/views/deliverables/create.js.rjs diff --git a/app/controllers/deliverables_controller.rb b/app/controllers/deliverables_controller.rb index 99e95d5..42f0980 100644 --- a/app/controllers/deliverables_controller.rb +++ b/app/controllers/deliverables_controller.rb @@ -30,6 +30,22 @@ class DeliverablesController < ApplicationController render :partial => 'common/preview' end + def create + @deliverable = Deliverable.new(params[:deliverable]) + @deliverable.project = @project + + respond_to do |format| + if @deliverable.save + @flash = l(:notice_successful_create) + format.html { redirect_to :action => 'index' } + format.js { render :action => 'create.js.rjs'} + else + # TODO: Failed save + end + end + + end + private def find_project @project = Project.find(params[:id]) diff --git a/app/models/deliverable.rb b/app/models/deliverable.rb index 4499b1d..67c4094 100644 --- a/app/models/deliverable.rb +++ b/app/models/deliverable.rb @@ -1,4 +1,6 @@ class Deliverable < ActiveRecord::Base + unloadable + belongs_to :project attr_accessor :overhead diff --git a/app/views/deliverables/_deliverable.html.erb b/app/views/deliverables/_deliverable.html.erb new file mode 100644 index 0000000..9480122 --- /dev/null +++ b/app/views/deliverables/_deliverable.html.erb @@ -0,0 +1,9 @@ + + <%= content_tag(:td, deliverable.id) %> + <%= content_tag(:td, deliverable.score) %> + <%= content_tag(:td, deliverable.subject) %> + <%= content_tag(:td, number_to_currency(deliverable.cost)) %> + <%= content_tag(:td, number_to_currency(deliverable.spent)) %> + <%= content_tag(:td, format_date(deliverable.due_date)) %> + <%= content_tag(:td, progress_bar(deliverable.progress, :width => '80px')) %> + diff --git a/app/views/deliverables/_form.html.erb b/app/views/deliverables/_form.html.erb index 83e124f..44cf5de 100644 --- a/app/views/deliverables/_form.html.erb +++ b/app/views/deliverables/_form.html.erb @@ -1,7 +1,8 @@

New Deliverable

-<% labelled_tabular_form_for :deliverable, @deliverable, - :html => {:multipart => true, :id => 'deliverable-form'} do |f| %> +<% remote_form_for :deliverable, @deliverable, :url => {:controller => 'deliverables', :action => 'create', :id => @project }, + :method => :post, :builder => TabularFormBuilder, :lang => current_language, + :html => {:multipart => true, :id => 'deliverable-form', :class => 'tabular'} do |f| %> <%= error_messages_for 'deliverable' %>
diff --git a/app/views/deliverables/_list.html.erb b/app/views/deliverables/_list.html.erb index c584804..210f209 100644 --- a/app/views/deliverables/_list.html.erb +++ b/app/views/deliverables/_list.html.erb @@ -1,5 +1,5 @@ <% form_tag({}) do -%> - +
<%# TODO: Other sorts %> <%= sort_header_tag("#{Deliverable.table_name}.id", :caption => '#', :default_order => 'desc') %> @@ -12,15 +12,7 @@ <% deliverables.each do |deliverable| -%> - - <%= content_tag(:td, deliverable.id) %> - <%= content_tag(:td, deliverable.score) %> - <%= content_tag(:td, deliverable.subject) %> - <%= content_tag(:td, number_to_currency(deliverable.cost)) %> - <%= content_tag(:td, number_to_currency(deliverable.spent)) %> - <%= content_tag(:td, format_date(deliverable.due_date)) %> - <%= content_tag(:td, progress_bar(deliverable.progress, :width => '80px')) %> - + <%= render :partial => 'deliverable', :locals => { :deliverable => deliverable} %> <% end -%>
diff --git a/app/views/deliverables/create.js.rjs b/app/views/deliverables/create.js.rjs new file mode 100644 index 0000000..7979a31 --- /dev/null +++ b/app/views/deliverables/create.js.rjs @@ -0,0 +1,19 @@ +# If there is no deliverable list, refresh the page +page << "if ($('deliverable-list') == null) {document.location.reload()}" + +# Add deliverable to list +page.insert_html :top, 'deliverable-list', :partial => 'deliverable', :locals => {:deliverable => @deliverable} + +# Remove errors if found +page.select('#errorExplanation').each do |value| + page.remove value +end + +page << "Form.reset($('deliverable-form'))" + +# Add a fading out flash +page.insert_html :before, 'new-deliverable', content_tag(:div, @flash, :class => "flash notice", :id => 'rjs-flash') +page.delay(3) do + page.visual_effect :fade, 'rjs-flash' +end +