From e4e0cb65de29a2f26662e3f447894c51d99b6032 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Salvador=20P=C3=A9rez=20Garc=C3=ADa?= Date: Tue, 12 Jun 2018 09:53:11 +0200 Subject: [PATCH] Implements #142 Dashboard actions can be proposed actions or resources --- .../admin/proposal_dashboard_actions_controller.rb | 10 ++++++++-- app/models/proposal_dashboard_action.rb | 4 ++++ .../admin/proposal_dashboard_actions/_form.html.erb | 9 +++++++++ .../admin/proposal_dashboard_actions/index.html.erb | 2 ++ config/locales/en/activerecord.yml | 1 + config/locales/en/admin.yml | 3 +++ config/locales/es/activerecord.yml | 1 + config/locales/es/admin.yml | 3 +++ ...03_add_action_type_to_proposal_dashboard_actions.rb | 7 +++++++ db/schema.rb | 1 + spec/factories.rb | 9 +++++++++ spec/models/proposal_dashboard_action_spec.rb | 10 +++++++++- 12 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20180612072003_add_action_type_to_proposal_dashboard_actions.rb diff --git a/app/controllers/admin/proposal_dashboard_actions_controller.rb b/app/controllers/admin/proposal_dashboard_actions_controller.rb index ff5126a64..30fa994fe 100644 --- a/app/controllers/admin/proposal_dashboard_actions_controller.rb +++ b/app/controllers/admin/proposal_dashboard_actions_controller.rb @@ -8,7 +8,13 @@ class Admin::ProposalDashboardActionsController < Admin::BaseController end def new - @proposal_dashboard_action = ProposalDashboardAction.new(active: true, day_offset: 0, required_supports: 0, request_to_administrators: true) + @proposal_dashboard_action = ProposalDashboardAction.new( + active: true, + day_offset: 0, + required_supports: 0, + request_to_administrators: true, + action_type: 'proposed_action' + ) end def create @@ -41,7 +47,7 @@ class Admin::ProposalDashboardActionsController < Admin::BaseController def proposal_dashboard_action_params params .require(:proposal_dashboard_action) - .permit(:title, :description, :link, :request_to_administrators, :day_offset, :required_supports, :order, :active) + .permit(:title, :description, :link, :request_to_administrators, :day_offset, :required_supports, :order, :active, :action_type) end diff --git a/app/models/proposal_dashboard_action.rb b/app/models/proposal_dashboard_action.rb index 8a548cd2b..6dd581485 100644 --- a/app/models/proposal_dashboard_action.rb +++ b/app/models/proposal_dashboard_action.rb @@ -4,6 +4,8 @@ class ProposalDashboardAction < ActiveRecord::Base acts_as_paranoid column: :hidden_at include ActsAsParanoidAliases + enum action_type: %i[proposed_action resource] + validates :title, presence: true, allow_blank: false, @@ -14,6 +16,8 @@ class ProposalDashboardAction < ActiveRecord::Base allow_blank: false, length: { in: 4..255 } + validates :action_type, presence: true + validates :day_offset, presence: true, numericality: { diff --git a/app/views/admin/proposal_dashboard_actions/_form.html.erb b/app/views/admin/proposal_dashboard_actions/_form.html.erb index 075aa13c6..1b1f7a3aa 100644 --- a/app/views/admin/proposal_dashboard_actions/_form.html.erb +++ b/app/views/admin/proposal_dashboard_actions/_form.html.erb @@ -16,6 +16,15 @@ +
+ <%= f.label :action_type %> + <% ProposalDashboardAction.action_types.keys.each do |action_type_value| %> + <%= f.radio_button :action_type, action_type_value, label: false %> + <%= f.label "action_type_#{action_type_value}", t("admin.proposal_dashboard_actions.action_type.#{action_type_value}") %> +
+ <% end %> +
+
<%= f.check_box :request_to_administrators, label: ProposalDashboardAction.human_attribute_name(:request_to_administrators) %>
diff --git a/app/views/admin/proposal_dashboard_actions/index.html.erb b/app/views/admin/proposal_dashboard_actions/index.html.erb index f2897150c..807e7d797 100644 --- a/app/views/admin/proposal_dashboard_actions/index.html.erb +++ b/app/views/admin/proposal_dashboard_actions/index.html.erb @@ -9,6 +9,7 @@ <%= ProposalDashboardAction.human_attribute_name(:title) %> + <%= ProposalDashboardAction.human_attribute_name(:action_type) %> <%= ProposalDashboardAction.human_attribute_name(:active) %> @@ -24,6 +25,7 @@ <% @proposal_dashboard_actions.each do |action| %> <%= action.title %> + <%= t("admin.proposal_dashboard_actions.action_type.#{action.action_type}") %> <%= active_human_readable(action.active) %> <%= link_to t('admin.proposal_dashboard_actions.index.edit'), diff --git a/config/locales/en/activerecord.yml b/config/locales/en/activerecord.yml index 22b83bc1d..d305d3bbf 100644 --- a/config/locales/en/activerecord.yml +++ b/config/locales/en/activerecord.yml @@ -271,6 +271,7 @@ en: required_supports: Required supports for the activation order: Order active: Active + action_type: Type errors: models: user: diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index de30a03ee..1c81a9343 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -1091,6 +1091,9 @@ en: success: Geozone successfully deleted error: This geozone can't be deleted since there are elements attached to it proposal_dashboard_actions: + action_type: + proposed_action: Proposed action + resource: Resource index: create: Create edit: Edit diff --git a/config/locales/es/activerecord.yml b/config/locales/es/activerecord.yml index 20ef0b330..cd9376892 100644 --- a/config/locales/es/activerecord.yml +++ b/config/locales/es/activerecord.yml @@ -272,6 +272,7 @@ es: required_supports: Soportes requeridos para la activación order: Orden active: Activa + action_type: Tipo errors: models: user: diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index a77b9cc07..13b66a2dc 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -1091,6 +1091,9 @@ es: success: Distrito borrado correctamente error: No se puede borrar el distrito porque ya tiene elementos asociados proposal_dashboard_actions: + action_type: + proposed_action: Acción propuesta + resource: Recurso index: create: Crear edit: Editar diff --git a/db/migrate/20180612072003_add_action_type_to_proposal_dashboard_actions.rb b/db/migrate/20180612072003_add_action_type_to_proposal_dashboard_actions.rb new file mode 100644 index 000000000..58bb748ce --- /dev/null +++ b/db/migrate/20180612072003_add_action_type_to_proposal_dashboard_actions.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddActionTypeToProposalDashboardActions < ActiveRecord::Migration + def change + add_column :proposal_dashboard_actions, :action_type, :integer, null: false, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index 8b2b2c2e2..e4decd4e8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -888,6 +888,7 @@ ActiveRecord::Schema.define(version: 20180711224810) do t.integer "order", default: 0 t.boolean "active", default: true t.datetime "hidden_at" + t.integer "action_type", default: 0, null: false end create_table "proposal_notifications", force: :cascade do |t| diff --git a/spec/factories.rb b/spec/factories.rb index 5dce17d4d..3707da650 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1039,6 +1039,7 @@ LOREM_IPSUM order 0 active true hidden_at nil + action_type 'proposed_action' trait :admin_request do link nil @@ -1061,5 +1062,13 @@ LOREM_IPSUM trait :deleted do hidden_at { Time.now.utc } end + + trait :proposed_action do + action_type 'proposed_action' + end + + trait :resource do + action_type 'resource' + end end end diff --git a/spec/models/proposal_dashboard_action_spec.rb b/spec/models/proposal_dashboard_action_spec.rb index 006970547..875820090 100644 --- a/spec/models/proposal_dashboard_action_spec.rb +++ b/spec/models/proposal_dashboard_action_spec.rb @@ -9,7 +9,8 @@ describe ProposalDashboardAction do day_offset: day_offset, required_supports: required_supports, link: link, - request_to_administrators: request_to_administrators + request_to_administrators: request_to_administrators, + action_type: action_type end let(:title) { Faker::Lorem.sentence } @@ -18,6 +19,7 @@ describe ProposalDashboardAction do let(:required_supports) { 0 } let(:link) { nil } let(:request_to_administrators) { true } + let(:action_type) { 'resource' } it { is_expected.to be_valid } @@ -126,5 +128,11 @@ describe ProposalDashboardAction do it { is_expected.to be_valid } end end + + context 'when action type is nil' do + let(:action_type) { nil } + + it { is_expected.not_to be_valid } + end end