Show only active phases

This commit is contained in:
Amaia Castro
2017-02-09 17:32:38 +01:00
parent 5d37997a69
commit 28de717300
4 changed files with 90 additions and 40 deletions

View File

@@ -8,10 +8,12 @@ class Legislation::ProcessesController < Legislation::BaseController
end end
def show def show
if @process.show_phase?(:allegations) && draft_version = @process.draft_versions.published.last if @process.active_phase?(:allegations) && @process.show_phase?(:allegations) && draft_version = @process.draft_versions.published.last
redirect_to legislation_process_draft_version_path(@process, draft_version) redirect_to legislation_process_draft_version_path(@process, draft_version)
else elsif @process.active_phase?(:debate)
redirect_to legislation_process_debate_path(@process) redirect_to legislation_process_debate_path(@process)
else
redirect_to legislation_process_allegations_path(@process)
end end
end end

View File

@@ -9,12 +9,10 @@ class Legislation::Process < ActiveRecord::Base
validates :title, presence: true validates :title, presence: true
validates :start_date, presence: true validates :start_date, presence: true
validates :end_date, presence: true validates :end_date, presence: true
validates :debate_start_date, presence: true validates :debate_start_date, presence: true, if: :debate_end_date?
validates :debate_end_date, presence: true validates :debate_end_date, presence: true, if: :debate_start_date?
validates :draft_publication_date, presence: true validates :allegations_start_date, presence: true, if: :allegations_end_date?
validates :allegations_start_date, presence: true validates :allegations_end_date, presence: true, if: :allegations_start_date?
validates :allegations_end_date, presence: true
validates :final_publication_date, presence: true
validate :valid_date_ranges validate :valid_date_ranges
scope :open, -> { where("start_date <= ? and end_date >= ?", Date.current, Date.current).order('id DESC') } scope :open, -> { where("start_date <= ? and end_date >= ?", Date.current, Date.current).order('id DESC') }
@@ -26,13 +24,13 @@ class Legislation::Process < ActiveRecord::Base
case phase case phase
when :debate when :debate
today >= debate_start_date && today <= debate_end_date active_phase?(:debate) && today >= debate_start_date && today <= debate_end_date
when :draft_publication when :draft_publication
today >= draft_publication_date active_phase?(:draft_publication) && today >= draft_publication_date
when :allegations when :allegations
today >= allegations_start_date && today <= allegations_end_date active_phase?(:allegations) && today >= allegations_start_date && today <= allegations_end_date
when :final_version_publication when :final_version_publication
today >= final_publication_date active_phase?(:final_version_publication) && today >= final_publication_date
end end
end end
@@ -42,13 +40,26 @@ class Legislation::Process < ActiveRecord::Base
case phase case phase
when :debate when :debate
today >= debate_start_date active_phase?(:debate) && today >= debate_start_date
when :draft_publication when :draft_publication
today >= draft_publication_date active_phase?(:draft_publication) && today >= draft_publication_date
when :allegations when :allegations
today >= allegations_start_date active_phase?(:allegations) && today >= allegations_start_date
when :final_version_publication when :final_version_publication
today >= final_publication_date active_phase?(:final_version_publication) && today >= final_publication_date
end
end
def active_phase?(phase)
case phase
when :debate
debate_start_date.present? && debate_end_date.present?
when :draft_publication
draft_publication_date.present?
when :allegations
allegations_start_date.present? && allegations_end_date.present?
when :final_version_publication
final_publication_date.present?
end end
end end

View File

@@ -3,30 +3,41 @@
<ul> <ul>
<%= render 'legislation/processes/key_dates_svg' %> <%= render 'legislation/processes/key_dates_svg' %>
<li <%= "class=active" if phase == :debate %>> <% if process.active_phase?(:debate) %>
<%= link_to legislation_process_debate_path(process) do %> <li <%= "class=active" if phase == :debate %>>
<h4><%= t('legislation.processes.shared.debate_dates') %></h4> <%= link_to legislation_process_debate_path(process) do %>
<p><%= format_date(process.debate_start_date) %> - <%= format_date(process.debate_end_date) %></p> <h4><%= t('legislation.processes.shared.debate_dates') %></h4>
<% end %> <p><%= format_date(process.debate_start_date) %> - <%= format_date(process.debate_end_date) %></p>
</li> <% end %>
<li <%= "class=active" if phase == :draft_publication %>> </li>
<%= link_to legislation_process_draft_publication_path(process) do %> <% end %>
<h4><%= t('legislation.processes.shared.draft_publication_date') %></h4>
<p><%= format_date(process.draft_publication_date) %></p> <% if process.active_phase?(:draft_publication) %>
<% end %> <li <%= "class=active" if phase == :draft_publication %>>
</li> <%= link_to legislation_process_draft_publication_path(process) do %>
<li <%= "class=active" if phase == :allegations %>> <h4><%= t('legislation.processes.shared.draft_publication_date') %></h4>
<%= link_to legislation_process_allegations_path(process) do %> <p><%= format_date(process.draft_publication_date) %></p>
<h4><%= t('legislation.processes.shared.allegations_dates') %></h4> <% end %>
<p><%= format_date(process.allegations_start_date) %> - <%= format_date(process.allegations_end_date) %></p> </li>
<% end %> <% end %>
</li>
<li <%= "class=active" if phase == :final_version_publication %>> <% if process.active_phase?(:allegations) %>
<%= link_to legislation_process_final_version_publication_path(process) do %> <li <%= "class=active" if phase == :allegations %>>
<h4><%= t('legislation.processes.shared.final_publication_date') %></h4> <%= link_to legislation_process_allegations_path(process) do %>
<p><%= format_date(process.final_publication_date) %></p> <h4><%= t('legislation.processes.shared.allegations_dates') %></h4>
<% end %> <p><%= format_date(process.allegations_start_date) %> - <%= format_date(process.allegations_end_date) %></p>
</li> <% end %>
</li>
<% end %>
<% if process.active_phase?(:final_version_publication) %>
<li <%= "class=active" if phase == :final_version_publication %>>
<%= link_to legislation_process_final_version_publication_path(process) do %>
<h4><%= t('legislation.processes.shared.final_publication_date') %></h4>
<p><%= format_date(process.final_publication_date) %></p>
<% end %>
</li>
<% end %>
</ul> </ul>
</div> </div>
</nav> </nav>

View File

@@ -7,6 +7,32 @@ RSpec.describe Legislation::Process, type: :model do
expect(process).to be_valid expect(process).to be_valid
end end
describe "dates validations" do
it "is invalid if debate_start_date is present but debate_end_date is not" do
process = build(:legislation_process, debate_start_date: Date.current, debate_end_date: "")
expect(process).to be_invalid
expect(process.errors.messages[:debate_end_date]).to include("can't be blank")
end
it "is invalid if debate_end_date is present but debate_start_date is not" do
process = build(:legislation_process, debate_start_date: nil, debate_end_date: Date.current)
expect(process).to be_invalid
expect(process.errors.messages[:debate_start_date]).to include("can't be blank")
end
it "is invalid if allegations_start_date is present but debate_end_date is not" do
process = build(:legislation_process, allegations_start_date: Date.current, allegations_end_date: "")
expect(process).to be_invalid
expect(process.errors.messages[:allegations_end_date]).to include("can't be blank")
end
it "is invalid if debate_end_date is present but allegations_start_date is not" do
process = build(:legislation_process, allegations_start_date: nil, allegations_end_date: Date.current)
expect(process).to be_invalid
expect(process.errors.messages[:allegations_start_date]).to include("can't be blank")
end
end
describe "date ranges validations" do describe "date ranges validations" do
it "is invalid if end_date is before start_date" do it "is invalid if end_date is before start_date" do
process = build(:legislation_process, start_date: Date.current, end_date: Date.current - 1.day) process = build(:legislation_process, start_date: Date.current, end_date: Date.current - 1.day)