diff --git a/app/controllers/admin/legislation/processes_controller.rb b/app/controllers/admin/legislation/processes_controller.rb index 2c352a2db..995e34eee 100644 --- a/app/controllers/admin/legislation/processes_controller.rb +++ b/app/controllers/admin/legislation/processes_controller.rb @@ -45,7 +45,11 @@ class Admin::Legislation::ProcessesController < Admin::Legislation::BaseControll :draft_publication_date, :allegations_start_date, :allegations_end_date, - :result_publication_date + :result_publication_date, + :debate_phase_enabled, + :allegations_phase_enabled, + :draft_publication_enabled, + :result_publication_enabled ) end end diff --git a/app/models/legislation/process.rb b/app/models/legislation/process.rb index d7ad6cf62..61dc1f7a0 100644 --- a/app/models/legislation/process.rb +++ b/app/models/legislation/process.rb @@ -2,6 +2,8 @@ class Legislation::Process < ActiveRecord::Base acts_as_paranoid column: :hidden_at include ActsAsParanoidAliases + PHASES_AND_PUBLICATIONS = %i(debate_phase allegations_phase draft_publication result_publication).freeze + has_many :draft_versions, -> { order(:id) }, class_name: 'Legislation::DraftVersion', foreign_key: 'legislation_process_id', dependent: :destroy has_one :final_draft_version, -> { where final_version: true, status: 'published' }, class_name: 'Legislation::DraftVersion', foreign_key: 'legislation_process_id' has_many :questions, -> { order(:id) }, class_name: 'Legislation::Question', foreign_key: 'legislation_process_id', dependent: :destroy @@ -20,19 +22,23 @@ class Legislation::Process < ActiveRecord::Base scope :past, -> { where("end_date < ?", Date.current).order('id DESC') } def debate_phase - Legislation::Process::Phase.new(debate_start_date, debate_end_date) + Legislation::Process::Phase.new(debate_start_date, debate_end_date, debate_phase_enabled) end def allegations_phase - Legislation::Process::Phase.new(allegations_start_date, allegations_end_date) + Legislation::Process::Phase.new(allegations_start_date, allegations_end_date, allegations_phase_enabled) end def draft_publication - Legislation::Process::Publication.new(draft_publication_date) + Legislation::Process::Publication.new(draft_publication_date, draft_publication_enabled) end def result_publication - Legislation::Process::Publication.new(result_publication_date) + Legislation::Process::Publication.new(result_publication_date, result_publication_enabled) + end + + def enabled_phases_and_publications_count + PHASES_AND_PUBLICATIONS.count { |process| send(process).enabled? } end def total_comments diff --git a/app/models/legislation/process/phase.rb b/app/models/legislation/process/phase.rb index 1b8482a9a..5d677251d 100644 --- a/app/models/legislation/process/phase.rb +++ b/app/models/legislation/process/phase.rb @@ -2,13 +2,14 @@ class Legislation::Process::Phase - def initialize(start_date, end_date) + def initialize(start_date, end_date, enabled) @start_date = start_date @end_date = end_date + @enabled = enabled end def enabled? - @start_date.present? && @end_date.present? + @enabled end def started? diff --git a/app/models/legislation/process/publication.rb b/app/models/legislation/process/publication.rb index 10110f0e7..650914f95 100644 --- a/app/models/legislation/process/publication.rb +++ b/app/models/legislation/process/publication.rb @@ -2,12 +2,13 @@ class Legislation::Process::Publication - def initialize(publication_date) + def initialize(publication_date, enabled) @publication_date = publication_date + @enabled = enabled end def enabled? - @publication_date.present? + @enabled end def started? diff --git a/app/views/admin/legislation/processes/_form.html.erb b/app/views/admin/legislation/processes/_form.html.erb index 8233d5f14..7d2b21703 100644 --- a/app/views/admin/legislation/processes/_form.html.erb +++ b/app/views/admin/legislation/processes/_form.html.erb @@ -70,8 +70,7 @@ id: "debate_end_date" %>
- <%= check_box_tag :debate_phase_active, @process.debate_phase.enabled?, @process.new_record? || @process.debate_phase.enabled?, data: {disable_date: "debate"} %> - <%= label_tag :debate_phase_active, t('admin.legislation.processes.form.active') %> + <%= f.check_box :debate_phase_enabled, checked: @process.debate_phase.enabled?, label: t('admin.legislation.processes.form.enabled') %>
@@ -104,8 +103,7 @@ id: "allegations_end_date" %>
- <%= check_box_tag :allegations_phase_active, @process.allegations_phase.enabled?, @process.new_record? || @process.allegations_phase.enabled?, data: {disable_date: "allegations"} %> - <%= label_tag :allegations_phase_active, t('admin.legislation.processes.form.active') %> + <%= f.check_box :allegations_phase_enabled, checked: @process.allegations_phase.enabled?, label: t('admin.legislation.processes.form.enabled') %>
@@ -125,8 +123,7 @@ id: "draft_publication_date" %>
- <%= check_box_tag :draft_publication_phase_active, @process.draft_publication.enabled?, @process.new_record? || @process.draft_publication.enabled?, data: {disable_date: "draft_publication"} %> - <%= label_tag :draft_publication_phase_active, t('admin.legislation.processes.form.active') %> + <%= f.check_box :draft_publication_enabled, checked: @process.draft_publication.enabled?, label: t('admin.legislation.processes.form.enabled') %>

@@ -145,8 +142,7 @@ id: "result_publication_date" %>
- <%= check_box_tag :result_publication_phase_active, @process.result_publication.enabled?, @process.new_record? || @process.result_publication.enabled?, data: {disable_date: "final_publication"} %> - <%= label_tag :result_publication_phase_active, t('admin.legislation.processes.form.active') %> + <%= f.check_box :result_publication_enabled, checked: @process.result_publication.enabled?, label: t('admin.legislation.processes.form.enabled') %>

diff --git a/app/views/legislation/processes/_process.html.erb b/app/views/legislation/processes/_process.html.erb index a0a2d2e37..d5e44076a 100644 --- a/app/views/legislation/processes/_process.html.erb +++ b/app/views/legislation/processes/_process.html.erb @@ -17,28 +17,42 @@
-
-
-

<%= t('legislation.processes.shared.key_dates') %>

+ <% if process.enabled_phases_and_publications_count.positive? %> + <% column_width = 12 / process.enabled_phases_and_publications_count %> +
+
+

<%= t('legislation.processes.shared.key_dates') %>

+
-
-
-
-
<%= t('legislation.processes.shared.debate_dates') %>
-

<%= format_date(process.debate_start_date) %> - <%= format_date(process.debate_end_date) %>

+
+ <% if process.debate_phase.enabled? %> +
+
<%= t('legislation.processes.shared.debate_dates') %>
+

<%= format_date(process.debate_start_date) %> - <%= format_date(process.debate_end_date) %>

+
+ <% end %> + + <% if process.draft_publication.enabled? %> +
+
<%= t('legislation.processes.shared.draft_publication_date') %>
+

<%= format_date(process.draft_publication_date) %>

+
+ <% end %> + + <% if process.allegations_phase.enabled? %> +
+
<%= t('legislation.processes.shared.allegations_dates') %>
+

<%= format_date(process.allegations_start_date) %> - <%= format_date(process.allegations_end_date) %>

+
+ <% end %> + + <% if process.result_publication.enabled? %> +
+
<%= t('legislation.processes.shared.result_publication_date') %>
+

<%= format_date(process.result_publication_date) %>

+
+ <% end %>
-
-
<%= t('legislation.processes.shared.draft_publication_date') %>
-

<%= format_date(process.draft_publication_date) %>

-
-
-
<%= t('legislation.processes.shared.allegations_dates') %>
-

<%= format_date(process.allegations_start_date) %> - <%= format_date(process.allegations_end_date) %>

-
-
-
<%= t('legislation.processes.shared.result_publication_date') %>
-

<%= format_date(process.result_publication_date) %>

-
-
+ <% end %>
diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 15e0d2ed7..1ba256dfe 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -211,7 +211,7 @@ en: form: error: Error form: - active: Active + enabled: Enabled process: Process debate_phase: Debate phase allegations_phase: Allegations phase diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index bee867531..1cd133da4 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -211,7 +211,7 @@ es: form: error: Error form: - active: Activa + enabled: Habilitado process: Proceso debate_phase: Fase previa allegations_phase: Fase de alegaciones diff --git a/db/dev_seeds.rb b/db/dev_seeds.rb index d828262bf..2ac996f44 100644 --- a/db/dev_seeds.rb +++ b/db/dev_seeds.rb @@ -643,7 +643,11 @@ print "Creating legislation processes" draft_publication_date: Date.current + 1.day, allegations_start_date: Date.current + 2.days, allegations_end_date: Date.current + 3.days, - result_publication_date: Date.current + 4.days + result_publication_date: Date.current + 4.days, + debate_phase_enabled: true, + allegations_phase_enabled: true, + draft_publication_enabled: true, + result_publication_enabled: true ) end diff --git a/db/migrate/20170613203256_add_phase_pub_enabled_status_to_legislative_process.rb b/db/migrate/20170613203256_add_phase_pub_enabled_status_to_legislative_process.rb new file mode 100644 index 000000000..7e6ecda96 --- /dev/null +++ b/db/migrate/20170613203256_add_phase_pub_enabled_status_to_legislative_process.rb @@ -0,0 +1,8 @@ +class AddPhasePubEnabledStatusToLegislativeProcess < ActiveRecord::Migration + def change + add_column :legislation_processes, :debate_phase_enabled, :boolean, default: false + add_column :legislation_processes, :allegations_phase_enabled, :boolean, default: false + add_column :legislation_processes, :draft_publication_enabled, :boolean, default: false + add_column :legislation_processes, :result_publication_enabled, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 39c9d97a5..1062b3f91 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170613174317) do +ActiveRecord::Schema.define(version: 20170613203256) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -417,6 +417,10 @@ ActiveRecord::Schema.define(version: 20170613174317) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "summary" + t.boolean "debate_phase_enabled", default: false + t.boolean "allegations_phase_enabled", default: false + t.boolean "draft_publication_enabled", default: false + t.boolean "result_publication_enabled", default: false end add_index "legislation_processes", ["allegations_end_date"], name: "index_legislation_processes_on_allegations_end_date", using: :btree diff --git a/spec/factories.rb b/spec/factories.rb index cc39af5d7..c63792dce 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -612,6 +612,10 @@ FactoryGirl.define do allegations_start_date Date.current allegations_end_date Date.current + 3.days result_publication_date Date.current + 5.days + debate_phase_enabled true + allegations_phase_enabled true + draft_publication_enabled true + result_publication_enabled true trait :next do start_date Date.current + 2.days diff --git a/spec/features/admin/legislation/processes_spec.rb b/spec/features/admin/legislation/processes_spec.rb index 2c8de0d95..e945f6ce8 100644 --- a/spec/features/admin/legislation/processes_spec.rb +++ b/spec/features/admin/legislation/processes_spec.rb @@ -73,7 +73,7 @@ feature 'Admin legislation processes' do end context 'Update' do - scenario 'Deactivate debate phase', js: true do + scenario 'Remove summary text', js: true do process = create(:legislation_process, title: 'An example legislation process', summary: 'Summarizing the process', @@ -87,19 +87,43 @@ feature 'Admin legislation processes' do click_link "An example legislation process" expect(page).to have_selector("h2", text: "An example legislation process") - expect(find("#debate_phase_active")).to be_checked + expect(find("#legislation_process_debate_phase_enabled")).to be_checked - uncheck "debate_phase_active" fill_in 'legislation_process_summary', with: '' click_button "Save changes" expect(page).to have_content "Process updated successfully" - expect(find("#debate_start_date").value).to be_blank - expect(find("#debate_end_date").value).to be_blank visit legislation_processes_path expect(page).not_to have_content 'Summarizing the process' expect(page).to have_content 'Description of the process' end + + scenario 'Deactivate draft publication', js: true do + process = create(:legislation_process, + title: 'An example legislation process', + summary: 'Summarizing the process', + description: 'Description of the process') + visit admin_root_path + + within('#side_menu') do + click_link "Collaborative Legislation" + end + + click_link "An example legislation process" + + expect(find("#legislation_process_draft_publication_enabled")).to be_checked + + uncheck "legislation_process_draft_publication_enabled" + click_button "Save changes" + + expect(page).to have_content "Process updated successfully" + expect(find("#debate_start_date").value).not_to be_blank + expect(find("#debate_end_date").value).not_to be_blank + + click_link 'Click to visit' + + expect(page).not_to have_content 'Draft publication' + end end end diff --git a/spec/models/legislation/process/phase_spec.rb b/spec/models/legislation/process/phase_spec.rb index a92b36f78..40d6296b2 100644 --- a/spec/models/legislation/process/phase_spec.rb +++ b/spec/models/legislation/process/phase_spec.rb @@ -7,14 +7,14 @@ RSpec.describe Legislation::Process::Phase, type: :model do it "checks debate phase" do expect(process.debate_phase.enabled?).to be true - process.update_attributes(debate_start_date: nil, debate_end_date: nil) + process.update_attributes(debate_phase_enabled: false) expect(process.debate_phase.enabled?).to be false end it "checks allegations phase" do expect(process.allegations_phase.enabled?).to be true - process.update_attributes(allegations_start_date: nil, allegations_end_date: nil) + process.update_attributes(allegations_phase_enabled: false) expect(process.allegations_phase.enabled?).to be false end end diff --git a/spec/models/legislation/process/publication_spec.rb b/spec/models/legislation/process/publication_spec.rb index 4731d14b2..a489568d4 100644 --- a/spec/models/legislation/process/publication_spec.rb +++ b/spec/models/legislation/process/publication_spec.rb @@ -7,14 +7,14 @@ RSpec.describe Legislation::Process::Publication, type: :model do it "checks draft publication" do expect(process.draft_publication.enabled?).to be true - process.update_attributes(draft_publication_date: nil) + process.update_attributes(draft_publication_enabled: false) expect(process.draft_publication.enabled?).to be false end it "checks result publication" do expect(process.result_publication.enabled?).to be true - process.update_attributes(result_publication_date: nil) + process.update_attributes(result_publication_enabled: false) expect(process.result_publication.enabled?).to be false end end