From c14f9be5670a43aad883498e7bc6e37cf3922acb Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Tue, 12 Dec 2017 11:47:29 -0400 Subject: [PATCH 1/5] Add 'publication_date' attribute to Budget::Investment::Milestone --- ...1212154048_add_publication_date_to_milestones.rb | 13 +++++++++++++ db/schema.rb | 9 +++++---- 2 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 db/migrate/20171212154048_add_publication_date_to_milestones.rb diff --git a/db/migrate/20171212154048_add_publication_date_to_milestones.rb b/db/migrate/20171212154048_add_publication_date_to_milestones.rb new file mode 100644 index 000000000..e5e37bb24 --- /dev/null +++ b/db/migrate/20171212154048_add_publication_date_to_milestones.rb @@ -0,0 +1,13 @@ +class AddPublicationDateToMilestones < ActiveRecord::Migration + def up + change_table :budget_investment_milestones do |t| + t.datetime :publication_date + end + end + + def down + change_table :budget_investment_milestones do |t| + t.remove :publication_date + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 4d426cf9e..bc25f5e43 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: 20171127230716) do +ActiveRecord::Schema.define(version: 20171212154048) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -119,10 +119,11 @@ ActiveRecord::Schema.define(version: 20171127230716) do create_table "budget_investment_milestones", force: :cascade do |t| t.integer "investment_id" - t.string "title", limit: 80 + t.string "title", limit: 80 t.text "description" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.datetime "publication_date" end create_table "budget_investments", force: :cascade do |t| From 6d57d7607135642ae04b5012b3632dc381743527 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Wed, 13 Dec 2017 19:20:48 -0400 Subject: [PATCH 2/5] Admins can add a 'publication date' to milestones --- ...budget_investment_milestones_controller.rb | 16 ++++++---- app/models/budget/investment/milestone.rb | 1 + .../_form.html.erb | 4 +++ .../budget_investments/_milestones.html.erb | 32 +++++++++++-------- config/locales/en/activerecord.yml | 1 + config/locales/en/admin.yml | 3 +- config/locales/es/activerecord.yml | 3 +- config/locales/es/admin.yml | 1 + 8 files changed, 39 insertions(+), 22 deletions(-) diff --git a/app/controllers/admin/budget_investment_milestones_controller.rb b/app/controllers/admin/budget_investment_milestones_controller.rb index 2cea5f471..6fc18d084 100644 --- a/app/controllers/admin/budget_investment_milestones_controller.rb +++ b/app/controllers/admin/budget_investment_milestones_controller.rb @@ -14,7 +14,8 @@ class Admin::BudgetInvestmentMilestonesController < Admin::BaseController @milestone = Budget::Investment::Milestone.new(milestone_params) @milestone.investment = @investment if @milestone.save - redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), notice: t('admin.milestones.create.notice') + redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), + notice: t('admin.milestones.create.notice') else render :new end @@ -25,7 +26,8 @@ class Admin::BudgetInvestmentMilestonesController < Admin::BaseController def update if @milestone.update(milestone_params) - redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), notice: t('admin.milestones.update.notice') + redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), + notice: t('admin.milestones.update.notice') else render :edit end @@ -33,24 +35,24 @@ class Admin::BudgetInvestmentMilestonesController < Admin::BaseController def destroy @milestone.destroy - redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), notice: t('admin.milestones.delete.notice') + redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), + notice: t('admin.milestones.delete.notice') end private def milestone_params params.require(:budget_investment_milestone) - .permit(:title, :description, :budget_investment_id, + .permit(:title, :description, :publication_date, :budget_investment_id, image_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy]) end def load_budget_investment - @investment = Budget::Investment.find params[:budget_investment_id] + @investment = Budget::Investment.find(params[:budget_investment_id]) end def load_budget_investment_milestone - @milestone = Budget::Investment::Milestone.find params[:id] + @milestone = Budget::Investment::Milestone.find(params[:id]) end - end diff --git a/app/models/budget/investment/milestone.rb b/app/models/budget/investment/milestone.rb index b31b8640e..1e3177a23 100644 --- a/app/models/budget/investment/milestone.rb +++ b/app/models/budget/investment/milestone.rb @@ -7,6 +7,7 @@ class Budget validates :title, presence: true validates :investment, presence: true + validates :publication_date, presence: true def self.title_max_length 80 diff --git a/app/views/admin/budget_investment_milestones/_form.html.erb b/app/views/admin/budget_investment_milestones/_form.html.erb index 8ed5b8cca..9da2937d3 100644 --- a/app/views/admin/budget_investment_milestones/_form.html.erb +++ b/app/views/admin/budget_investment_milestones/_form.html.erb @@ -2,6 +2,10 @@ <%= f.text_field :title, maxlength: Budget::Investment::Milestone.title_max_length %> <%= f.text_area :description, rows: 5 %> + <%= f.text_field :publication_date, + value: @milestone.publication_date.present? ? l(@milestone.publication_date.to_date) : nil, + class: "js-calendar-full" %> + <%= render 'images/admin_image', imageable: @milestone, f: f %> <%= f.submit nil, class: "button success" %> diff --git a/app/views/admin/budget_investments/_milestones.html.erb b/app/views/admin/budget_investments/_milestones.html.erb index 4002d9468..0fc6e890d 100644 --- a/app/views/admin/budget_investments/_milestones.html.erb +++ b/app/views/admin/budget_investments/_milestones.html.erb @@ -5,6 +5,7 @@ <%= t("admin.milestones.index.table_id") %> <%= t("admin.milestones.index.table_title") %> <%= t("admin.milestones.index.table_description") %> + <%= t("admin.milestones.index.table_publication_date") %> <%= t("admin.milestones.index.image") %> <%= t("admin.milestones.index.table_actions") %> @@ -12,29 +13,34 @@ <% @investment.milestones.each do |milestone| %> + <%= milestone.id %> - <%= milestone.id %> - - - <%= link_to milestone.title, edit_admin_budget_budget_investment_budget_investment_milestone_path(@investment.budget, @investment, milestone) %> + <%= link_to milestone.title, + edit_admin_budget_budget_investment_budget_investment_milestone_path(@investment.budget, + @investment, + milestone) %> + <%= milestone.description %> + <% if milestone.publication_date.present? %> + <%= l(milestone.publication_date.to_date) %> + <% end %> - <%= milestone.description %> - - - <%= link_to t("admin.milestones.index.show_image"), milestone.image_url(:large), target: :_blank if milestone.image.present? %> + <%= link_to t("admin.milestones.index.show_image"), + milestone.image_url(:large), + target: :_blank if milestone.image.present? %> - <%= link_to t("admin.milestones.index.delete"), admin_budget_budget_investment_budget_investment_milestone_path(@investment.budget, @investment, milestone), + <%= link_to t("admin.milestones.index.delete"), + admin_budget_budget_investment_budget_investment_milestone_path(@investment.budget, + @investment, + milestone), method: :delete, - class: 'button hollow alert expanded' %> + class: "button hollow alert expanded" %> <% end %> <% else %> -

- <%= t('admin.milestones.index.no_milestones') %> -

+

<%= t("admin.milestones.index.no_milestones") %>

<% end %> diff --git a/config/locales/en/activerecord.yml b/config/locales/en/activerecord.yml index 89befa33b..f3952aaca 100644 --- a/config/locales/en/activerecord.yml +++ b/config/locales/en/activerecord.yml @@ -124,6 +124,7 @@ en: budget/investment/milestone: title: "Title" description: "Description" + publication_date: "Publication date" comment: body: "Comment" user: "User" diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 13ef24aa5..c6e14779a 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -193,6 +193,7 @@ en: table_id: "ID" table_title: "Title" table_description: "Description" + table_publication_date: "Publication date" table_actions: "Actions" delete: "Delete milestone" no_milestones: "Don't have defined milestones" @@ -1078,4 +1079,4 @@ en: updated_at: Updated at status_draft: Draft status_published: Published - locale: Language \ No newline at end of file + locale: Language diff --git a/config/locales/es/activerecord.yml b/config/locales/es/activerecord.yml index 16885db63..fe3ae694c 100644 --- a/config/locales/es/activerecord.yml +++ b/config/locales/es/activerecord.yml @@ -119,6 +119,7 @@ es: budget/investment/milestone: title: "Título" description: "Descripción" + publication_date: "Fecha de publicación" comment: body: "Comentario" user: "Usuario" @@ -287,4 +288,4 @@ es: record_invalid: "La validación falló: %{errors}" restrict_dependent_destroy: has_one: No se puede eliminar el registro porque existe un %{record} dependiente - has_many: No se puede eliminar el registro porque existen %{record} dependientes \ No newline at end of file + has_many: No se puede eliminar el registro porque existen %{record} dependientes diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index f2090ed1c..f3f5503f8 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -193,6 +193,7 @@ es: table_id: "ID" table_title: "Título" table_description: "Descripción" + table_publication_date: "Fecha de publicación" table_actions: "Acciones" delete: "Eliminar hito" no_milestones: "No hay hitos definidos" From 03ae14c613684fe20f729496ba191e5fc91417f8 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Wed, 13 Dec 2017 19:27:22 -0400 Subject: [PATCH 3/5] End-users will be shown a milestone's publication date if available --- app/views/budgets/investments/_milestones.html.erb | 11 +++++++---- config/locales/en/budgets.yml | 4 ++-- config/locales/es/budgets.yml | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/views/budgets/investments/_milestones.html.erb b/app/views/budgets/investments/_milestones.html.erb index 0d0c38984..ae700008d 100644 --- a/app/views/budgets/investments/_milestones.html.erb +++ b/app/views/budgets/investments/_milestones.html.erb @@ -12,10 +12,13 @@
  • <%= milestone.title %>

    - - <%= t("budgets.investments.show.milestone_publish_date", publish_date: l(milestone.created_at.to_date)) %> - - <%= image_tag(milestone.image_url(:large), {alt: milestone.image.title, class: "margin", id: "image_#{milestone.id}"}) if milestone.image.present? %> + <% if milestone.publication_date.present? %> + + <%= t("budgets.investments.show.milestone_publication_date", + publication_date: l(milestone.publication_date.to_date)) %> + + <% end %> + <%= image_tag(milestone.image_url(:large), { alt: milestone.image.title, class: "margin", id: "image_#{milestone.id}" }) if milestone.image.present? %>

    <%= milestone.description %>

  • diff --git a/config/locales/en/budgets.yml b/config/locales/en/budgets.yml index ac6445329..3710daf8a 100644 --- a/config/locales/en/budgets.yml +++ b/config/locales/en/budgets.yml @@ -110,7 +110,7 @@ en: comments_tab: Comments milestones_tab: Milestones no_milestones: Don't have defined milestones - milestone_publish_date: "Published %{publish_date}" + milestone_publication_date: "Published %{publication_date}" wrong_price_format: Only integer numbers investment: add: Vote @@ -151,4 +151,4 @@ en: amount_available: Available budget accepted: "Accepted spending proposal: " discarded: "Discarded spending proposal: " - incompatibles: Incompatibles \ No newline at end of file + incompatibles: Incompatibles diff --git a/config/locales/es/budgets.yml b/config/locales/es/budgets.yml index e3e92fe52..367bcecdc 100644 --- a/config/locales/es/budgets.yml +++ b/config/locales/es/budgets.yml @@ -110,7 +110,7 @@ es: comments_tab: Comentarios milestones_tab: Seguimiento no_milestones: No hay hitos definidos - milestone_publish_date: "Publicado el %{publish_date}" + milestone_publication_date: "Publicado el %{publication_date}" wrong_price_format: Solo puede incluir caracteres numéricos investment: add: Votar From 1e1028dcb49e49bdae8f7df1823e1526846b0896 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Wed, 13 Dec 2017 19:46:07 -0400 Subject: [PATCH 4/5] Adapt existing milestone-related specs to fit the new requirement --- spec/factories.rb | 1 + spec/features/admin/budget_investment_milestones_spec.rb | 7 ++++++- spec/features/budgets/investments_spec.rb | 5 ++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/spec/factories.rb b/spec/factories.rb index 42bc57fd5..f7b68dd3c 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -362,6 +362,7 @@ FactoryGirl.define do association :investment, factory: :budget_investment sequence(:title) { |n| "Budget investment milestone #{n} title" } description 'Milestone description' + publication_date Time.zone.today end factory :vote do diff --git a/spec/features/admin/budget_investment_milestones_spec.rb b/spec/features/admin/budget_investment_milestones_spec.rb index 7f9e3ff63..c7dde7371 100644 --- a/spec/features/admin/budget_investment_milestones_spec.rb +++ b/spec/features/admin/budget_investment_milestones_spec.rb @@ -18,6 +18,7 @@ feature 'Admin budget investment milestones' do expect(page).to have_content("Milestone") expect(page).to have_content(milestone.title) expect(page).to have_content(milestone.id) + expect(page).to have_content(milestone.publication_date.to_date) end scenario 'Displaying no_milestones text' do @@ -36,11 +37,13 @@ feature 'Admin budget investment milestones' do fill_in 'budget_investment_milestone_title', with: 'New title milestone' fill_in 'budget_investment_milestone_description', with: 'New description milestone' + fill_in 'budget_investment_milestone_publication_date', with: Time.zone.today.to_date click_button 'Create milestone' expect(page).to have_content 'New title milestone' expect(page).to have_content 'New description milestone' + expect(page).to have_content Time.zone.today.to_date end scenario "Show validation errors on milestone form" do @@ -53,7 +56,7 @@ feature 'Admin budget investment milestones' do click_button 'Create milestone' within "#new_budget_investment_milestone" do - expect(page).to have_content "can't be blank" + expect(page).to have_content "can't be blank", count: 2 expect(page).to have_content 'New description milestone' end end @@ -72,11 +75,13 @@ feature 'Admin budget investment milestones' do fill_in 'budget_investment_milestone_title', with: 'Changed title' fill_in 'budget_investment_milestone_description', with: 'Changed description' + fill_in 'budget_investment_milestone_publication_date', with: Time.zone.today.to_date click_button 'Update milestone' expect(page).to have_content 'Changed title' expect(page).to have_content 'Changed description' + expect(page).to have_content Time.zone.today.to_date expect(page).to have_link 'Show image' end end diff --git a/spec/features/budgets/investments_spec.rb b/spec/features/budgets/investments_spec.rb index 9cb1326b1..3e3aadf4d 100644 --- a/spec/features/budgets/investments_spec.rb +++ b/spec/features/budgets/investments_spec.rb @@ -493,8 +493,7 @@ feature 'Budget Investments' do scenario "Show milestones", :js do user = create(:user) investment = create(:budget_investment) - milestone = create(:budget_investment_milestone, investment: investment, title: "New text to show", - created_at: DateTime.new(2015, 9, 19).utc) + milestone = create(:budget_investment_milestone, investment: investment, title: "New text to show") image = create(:image, imageable: milestone) login_as(user) @@ -505,7 +504,7 @@ feature 'Budget Investments' do within("#tab-milestones") do expect(page).to have_content(milestone.title) expect(page).to have_content(milestone.description) - expect(page).to have_content("Published 2015-09-19") + expect(page).to have_content(Time.zone.today.to_date) expect(page.find("#image_#{milestone.id}")['alt']).to have_content image.title end end From b4782f73f2a5ba9fb210c2ebcd0ed6eefdd5b2a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Garc=C3=ADa?= Date: Thu, 14 Dec 2017 21:13:46 +0100 Subject: [PATCH 5/5] delete unnecessary parenthesis --- .../admin/budget_investment_milestones_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/budget_investment_milestones_controller.rb b/app/controllers/admin/budget_investment_milestones_controller.rb index d648a3193..73989939b 100644 --- a/app/controllers/admin/budget_investment_milestones_controller.rb +++ b/app/controllers/admin/budget_investment_milestones_controller.rb @@ -44,7 +44,7 @@ class Admin::BudgetInvestmentMilestonesController < Admin::BaseController def milestone_params params.require(:budget_investment_milestone) .permit(:title, :description, :publication_date, :budget_investment_id, - image_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy]), + image_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy], documents_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy]) end