Rework of milestones
This commit is contained in:
parent
b01f8b63c2
commit
190e483fb4
8 changed files with 72 additions and 34 deletions
|
@ -531,9 +531,14 @@ pre {
|
|||
}
|
||||
}
|
||||
|
||||
.milestone .progress {
|
||||
margin-bottom: 0;
|
||||
margin-top: 4px;
|
||||
.milestone {
|
||||
&.milestone-closed {
|
||||
background: #eee;
|
||||
}
|
||||
.progress {
|
||||
margin-bottom: 0;
|
||||
margin-top: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.float-link {
|
||||
|
|
|
@ -12,11 +12,12 @@ class MilestonesController < ProjectResourceController
|
|||
|
||||
def index
|
||||
@milestones = case params[:f]
|
||||
when 'all'; @project.milestones
|
||||
else @project.milestones.active
|
||||
when 'all'; @project.milestones.order("closed, due_date DESC")
|
||||
when 'closed'; @project.milestones.closed.order("due_date DESC")
|
||||
else @project.milestones.active.order("due_date ASC")
|
||||
end
|
||||
|
||||
@milestones = @milestones.includes(:project).order("due_date")
|
||||
@milestones = @milestones.includes(:project)
|
||||
@milestones = @milestones.page(params[:page]).per(20)
|
||||
end
|
||||
|
||||
|
|
|
@ -19,12 +19,19 @@ class Milestone < ActiveRecord::Base
|
|||
has_many :issues
|
||||
has_many :merge_requests
|
||||
|
||||
scope :active, where(closed: false)
|
||||
scope :closed, where(closed: true)
|
||||
|
||||
validates :title, presence: true
|
||||
validates :project, presence: true
|
||||
validates :closed, inclusion: { in: [true, false] }
|
||||
|
||||
def self.active
|
||||
where("due_date > ? OR due_date IS NULL", Date.today)
|
||||
def expired?
|
||||
if due_date
|
||||
due_date < Date.today
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
def participants
|
||||
|
@ -52,4 +59,12 @@ class Milestone < ActiveRecord::Base
|
|||
def expires_at
|
||||
"expires at #{due_date.stamp("Aug 21, 2011")}" if due_date
|
||||
end
|
||||
|
||||
def can_be_closed?
|
||||
issues.count > 0 && open? && issues.opened.count.zero?
|
||||
end
|
||||
|
||||
def open?
|
||||
!closed
|
||||
end
|
||||
end
|
||||
|
|
|
@ -22,7 +22,7 @@ class Snippet < ActiveRecord::Base
|
|||
belongs_to :author, class_name: "User"
|
||||
has_many :notes, as: :noteable, dependent: :destroy
|
||||
|
||||
delegate :name, :email, to: :author, prefix: true
|
||||
delegate :name, :email, to: :author, prefix: true, allow_nil: true
|
||||
|
||||
validates :author, presence: true
|
||||
validates :project, presence: true
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
%p= link_to_gfm truncate(issue.title, length: 100), project_issue_path(issue.project, issue), class: "row_title"
|
||||
|
||||
%span.update-author
|
||||
%small.cdark= "##{issue.id}"
|
||||
%span.cdark= "##{issue.id}"
|
||||
- if issue.assignee
|
||||
assigned to #{issue.assignee_name}
|
||||
- else
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
%li{class: "milestone", id: dom_id(milestone) }
|
||||
%li{class: "milestone milestone-#{milestone.closed ? 'closed' : 'open'}", id: dom_id(milestone) }
|
||||
.right
|
||||
- if can? current_user, :admin_milestone, milestone.project
|
||||
- if can?(current_user, :admin_milestone, milestone.project) and milestone.open?
|
||||
= link_to edit_project_milestone_path(milestone.project, milestone), class: "btn small edit-milestone-link grouped" do
|
||||
%i.icon-edit
|
||||
Edit
|
||||
%h4
|
||||
= link_to_gfm truncate(milestone.title, length: 100), project_milestone_path(milestone.project, milestone)
|
||||
- if milestone.expired? and not milestone.closed
|
||||
%span.cred (Expired)
|
||||
%small
|
||||
= milestone.expires_at
|
||||
.row
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
%li{class: ("active" if (params[:f] == "active" || !params[:f]))}
|
||||
= link_to project_milestones_path(@project, f: "active") do
|
||||
Active
|
||||
%li{class: ("active" if params[:f] == "closed")}
|
||||
= link_to project_milestones_path(@project, f: "closed") do
|
||||
Closed
|
||||
%li{class: ("active" if params[:f] == "all")}
|
||||
= link_to project_milestones_path(@project, f: "all") do
|
||||
All
|
||||
|
@ -19,7 +22,7 @@
|
|||
= render @milestones
|
||||
|
||||
- if @milestones.present?
|
||||
%li.bottom= paginate @milestones, remote: true, theme: "gitlab"
|
||||
%li.bottom= paginate @milestones, theme: "gitlab"
|
||||
- else
|
||||
%li
|
||||
%h3.nothing_here_message Nothing to show here
|
||||
|
|
|
@ -1,31 +1,41 @@
|
|||
%h3.page_title
|
||||
Milestone ##{@milestone.id}
|
||||
%small
|
||||
= @milestone.expires_at
|
||||
.row
|
||||
.span6
|
||||
%h3.page_title
|
||||
Milestone ##{@milestone.id}
|
||||
%small
|
||||
= @milestone.expires_at
|
||||
.back_link
|
||||
= link_to project_milestones_path(@project) do
|
||||
← To milestones list
|
||||
.span6
|
||||
.right
|
||||
- unless @milestone.closed
|
||||
= link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn small grouped", title: "New Issue" do
|
||||
%i.icon-plus
|
||||
New Issue
|
||||
= link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn edit-milestone-link small grouped"
|
||||
- if can?(current_user, :admin_milestone, @project)
|
||||
= link_to edit_project_milestone_path(@project, @milestone), class: "btn small grouped" do
|
||||
%i.icon-edit
|
||||
Edit
|
||||
|
||||
%span.right
|
||||
= link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn small grouped", title: "New Issue" do
|
||||
%i.icon-plus
|
||||
New Issue
|
||||
= link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn edit-milestone-link small grouped"
|
||||
- if can?(current_user, :admin_milestone, @project)
|
||||
= link_to edit_project_milestone_path(@project, @milestone), class: "btn small grouped" do
|
||||
%i.icon-edit
|
||||
Edit
|
||||
|
||||
.back_link
|
||||
= link_to project_milestones_path(@project) do
|
||||
← To milestones list
|
||||
|
||||
- if @milestone.can_be_closed?
|
||||
%hr
|
||||
%p
|
||||
%span All issues for this milestone are closed. You may close milestone now.
|
||||
= link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {closed: true }), method: :put, class: "btn small danger"
|
||||
|
||||
.main_box
|
||||
.top_box_content
|
||||
%h5
|
||||
%h4.box-title
|
||||
- if @milestone.closed
|
||||
.alert-message.error.status_info Closed
|
||||
- else
|
||||
.alert-message.success.status_info Open
|
||||
.error.status_info Closed
|
||||
- elsif @milestone.expired?
|
||||
.error.status_info Expired
|
||||
|
||||
= gfm escape_once(@milestone.title)
|
||||
%small.right= @milestone.expires_at
|
||||
|
||||
.middle_box_content
|
||||
%h5
|
||||
|
@ -34,6 +44,7 @@
|
|||
#{@milestone.closed_items_count} closed
|
||||
–
|
||||
#{@milestone.open_items_count} open
|
||||
%span.right= @milestone.expires_at
|
||||
.progress.progress-info
|
||||
.bar{style: "width: #{@milestone.percent_complete}%;"}
|
||||
|
||||
|
@ -43,6 +54,7 @@
|
|||
= preserve do
|
||||
= markdown @milestone.description
|
||||
|
||||
|
||||
.row
|
||||
.span6
|
||||
%table.milestone-issue-filter
|
||||
|
|
Loading…
Reference in a new issue