diff --git a/app/helpers/projects.rb b/app/helpers/projects.rb index 0574110..6de249c 100755 --- a/app/helpers/projects.rb +++ b/app/helpers/projects.rb @@ -1,7 +1,7 @@ class Main helpers do - def show_date(datetime) + def show_date(datetime, warn_date_is_past=true) if (datetime.nil?) haml "%span.emphasis none", :layout => false else @@ -13,7 +13,8 @@ def show_date(datetime) raise ArgumentError, "Invalid object passed to show_date" end full_date = datetime.strftime("%m.%d.%Y") - haml "%span{:title => \"#{full_date}\"} #{nice_date(datetime)}", :layout => false + @warn = (warn_date_is_past && Date.today > datetime.to_date) + haml "%span{:title => \"#{full_date}\", :class => \"#{@warn ? "warn" : ""}\"} #{nice_date(datetime)}", :layout => false end end diff --git a/app/models/project_meta.rb b/app/models/project_meta.rb index c25f777..d8a2492 100755 --- a/app/models/project_meta.rb +++ b/app/models/project_meta.rb @@ -12,7 +12,7 @@ class ProjectMeta < ActiveRecord::Base validates_numericality_of :developer_id, :department_id, :num_stories, :num_completed_stories, { :allow_nil => true } # named scopes - named_scope :all_sorted, :order => "name ASC" + named_scope :all_sorted, :order => "current_target_date ASC, name ASC" named_scope :active, :conditions => {:is_active => true} named_scope :inactive, :conditions => {:is_active => false} @@ -49,15 +49,6 @@ def department Department.find department_id if !department_id.nil? end - def original_target_date=(date) - raise ArgumentError, "Cannot change original target date, it has already been changed" unless self.original_target_date.nil?; - self[:original_target_date] = date - end - - def reset_original_target_date - self[:original_target_date] = nil - end - def sync(project) raise ArgumentError, "Cannot sync with invalid project object" if project.nil? || !project.is_a?(Project) self[:name] = project.name diff --git a/app/routes/projects.rb b/app/routes/projects.rb index 4ddbdd6..475309d 100755 --- a/app/routes/projects.rb +++ b/app/routes/projects.rb @@ -62,11 +62,8 @@ class Main unless @project.nil? @project.developer_id = params[:developer_id] @project.department_id = params[:department_id] - if params.include?("original_target_date") && !params["original_target_date"].strip.empty? - @project.original_target_date = params[:original_target_date] - elsif params.include?("clear_original_target_date") - @project.reset_original_target_date - end + @project.original_target_date = nil if params.include?("clear_original_target_date") + @project.original_target_date = params[:original_target_date].strip unless !params.include?("original_target_date") || params["original_target_date"].strip.empty? @project.save! add_message "Successfully updated project settings." else diff --git a/app/views/css/main.sass b/app/views/css/main.sass index 241ec58..9a8c83c 100755 --- a/app/views/css/main.sass +++ b/app/views/css/main.sass @@ -87,7 +87,7 @@ form.inline-button #wrapper +cf :margin 0 auto - :width 800px + :width 1000px :border 3px solid #333 :border-style none solid :background #ccc @@ -194,5 +194,9 @@ table.data-vertical :background #EB938E :border 1px solid #881A15 +.warn + :color #FF7F00 + + .center :text-align center \ No newline at end of file diff --git a/app/views/layout.haml b/app/views/layout.haml index a43ae8d..2e870ba 100755 --- a/app/views/layout.haml +++ b/app/views/layout.haml @@ -5,6 +5,8 @@ %meta{:"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8"}/ %link{:rel => "stylesheet", :href => "/css/reset.css", :type => "text/css"}/ %link{:rel => "stylesheet", :href => "/css/main.css", :type => "text/css"}/ + %script{:type => "text/javascript", :src => "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"} + %script{:type => "text/javascript", :src => "/js/application.js"} %body #wrapper diff --git a/app/views/partials/project_list.haml b/app/views/partials/project_list.haml index 35f99cf..7b8a6af 100644 --- a/app/views/partials/project_list.haml +++ b/app/views/partials/project_list.haml @@ -3,6 +3,7 @@ %th Name %th Dev. %th Dept. + %th Original %th Current %th Completion %th Actions @@ -13,16 +14,17 @@ %a{:href => external_project_link(project), :title => "Project on Pivotal Tracker (External link)", :target => "_blank"} ⬀ %td!= link_to_developer(project.developer) %td!= link_to_department(project.department) - - if false || !has_stories?(project) || all_stories_completed?(project) - %td{:colspan => 2, :class => "center"} + - if !has_stories?(project) || all_stories_completed?(project) + %td{:colspan => 3, :class => "center"} - if !has_stories?(project) %span.emphasis No Stories - unless project.developer.nil? — - %a{:href => "mailto:#{project.developer.email}?subject=Provide%20Stories&body=Please%20provide%20stories%20for%20pivotal%20project%20#{project.url}"} Notify + %a{:href => "mailto:#{project.developer.email}?subject=Provide%20Stories&body=Please%20provide%20stories%20for%20pivotal%20project%20#{external_project_link(project)}"} Notify - elsif all_stories_completed?(project) .emphasis Completed - else + %td!= show_date(project.original_target_date) %td!= show_date(project.current_target_date) %td= "#{show_float project.completion_ratio}%" %td diff --git a/app/views/projects/edit.haml b/app/views/projects/edit.haml index 3f635b1..c1d7669 100755 --- a/app/views/projects/edit.haml +++ b/app/views/projects/edit.haml @@ -13,16 +13,20 @@ .row .label Original Target Date .input - - if @project.original_target_date.nil? + #original-date-input{:style => (@project.original_target_date.nil? ? nil : "display:none;")} %input{:type => "text", :name => "original_target_date", :value => @project.current_target_date.strftime("%m/%d/%Y")} ( - %a{:href => "javascript:void(0);", :onclick => "document.forms[0].original_target_date.value = '';", :title => "Clear Original Date"} Clear - ) - - else - != show_date @project.current_target_date - ( - %input{:type => "checkbox", :name => "clear_original_target_date", :value => "1"} Clear + %a{:href => "javascript:void(0);", :onclick => "$('input[name=original_target_date]').val('');", :title => "Clear Original Date"} Clear + , + %a{:href => "javascript:void(0);", :onclick => "$('input[name=original_target_date]').val('#{@project.current_target_date.strftime("%m/%d/%Y")}');", :title => "Reset to Original Date"} Original ) + - unless @project.original_target_date.nil? + #original-date-display + != show_date @project.current_target_date + ( + %label + %input{:type => "checkbox", :name => "clear_original_target_date", :value => "1"} Clear + ) .row .label   .input diff --git a/app/views/projects/index.haml b/app/views/projects/index.haml index 6f186aa..938628b 100755 --- a/app/views/projects/index.haml +++ b/app/views/projects/index.haml @@ -6,6 +6,8 @@ - unless @projects.nil? || @projects.empty? .context-nav.right + %a{:href => "http://www.pivotaltracker.com/dashboard", :title => "New Project on Pivotal", :target => "_blank"} New + | - if @archive_view %a{:href => "/projects", :title => "Show Active Projects"} Active - else diff --git a/app/views/projects/show.haml b/app/views/projects/show.haml index 41bcbf5..8968adb 100755 --- a/app/views/projects/show.haml +++ b/app/views/projects/show.haml @@ -22,12 +22,28 @@ %tr{:class => alt_row_color} %th Department %td!= link_to_department(@project.department) - %tr{:class => alt_row_color} - %th Original Target - %td!= show_date(@project.original_target_date) - %tr{:class => alt_row_color} - %th Current Target - %td!= show_date(@project.current_target_date) - %tr{:class => alt_row_color} - %th Completion - %td= "#{@project.num_completed_stories}/#{@project.num_stories} (#{show_float @project.completion_ratio}%)" + - if !has_stories?(@project) || all_stories_completed?(@project) + %tr + %th Original Target + %td{:rowspan => 3, :class => "center"} + - if !has_stories?(@project) + %span.emphasis No Stories + - unless @project.developer.nil? + — + %a{:href => "mailto:#{@project.developer.email}?subject=Provide%20Stories&body=Please%20provide%20stories%20for%20pivotal%20project%20#{external_project_link(@project)}"} Notify + - elsif all_stories_completed?(@project) + .emphasis Completed + %tr + %th Current Target + %tr + %th Completion + - else + %tr{:class => alt_row_color} + %th Original Target + %td!= show_date(@project.original_target_date) + %tr{:class => alt_row_color} + %th Current Target + %td!= show_date(@project.current_target_date) + %tr{:class => alt_row_color} + %th Completion + %td= "#{@project.num_completed_stories}/#{@project.num_stories} (#{show_float @project.completion_ratio}%)" diff --git a/public/js/application.js b/public/js/application.js new file mode 100644 index 0000000..6ffd721 --- /dev/null +++ b/public/js/application.js @@ -0,0 +1,10 @@ +$(document).ready(function(){ + $("input[name='clear_original_target_date']:checkbox").click(function(){ + if ($(this).attr("checked")) + { + $("#original-date-display").hide(); + $("#original-date-input").show(); + $("#original-date-input input").select(); + } + }); +}); \ No newline at end of file