diff --git a/app/controllers/dashboard/base_controller.rb b/app/controllers/dashboard/base_controller.rb index 2755e74c9..14a4f7ff6 100644 --- a/app/controllers/dashboard/base_controller.rb +++ b/app/controllers/dashboard/base_controller.rb @@ -1,5 +1,5 @@ class Dashboard::BaseController < ApplicationController - before_action :authenticate_user! + before_action :authenticate_user!, :detect_new_actions_after_last_login include Dashboard::HasProposal @@ -35,4 +35,9 @@ class Dashboard::BaseController < ApplicationController def next_goal @next_goal ||= Dashboard::Action.next_goal_for(proposal) end + + def detect_new_actions_after_last_login + author_last_login = proposal.author.last_sign_in_at.to_date + @new_actions_since_last_login = Dashboard::Action.detect_new_actions_since(author_last_login, proposal) + end end diff --git a/app/helpers/proposals_dashboard_helper.rb b/app/helpers/proposals_dashboard_helper.rb index 58d468e1b..e45cd50ed 100644 --- a/app/helpers/proposals_dashboard_helper.rb +++ b/app/helpers/proposals_dashboard_helper.rb @@ -83,4 +83,12 @@ module ProposalsDashboardHelper return t("dashboard.resource.resource_requested") if resource.requested_for?(proposal) t("dashboard.resource.request_resource") end + + def is_new_action_since_last_login?(proposed_action, new_actions_since_last_login) + new_actions_since_last_login.include?(proposed_action.id) if new_actions_since_last_login.present? + end + + def new_resources_since_last_login?(resources, new_actions_since_last_login) + resources.pluck(:id).any? {|id| new_actions_since_last_login.include?(id) } if resources.present? + end end diff --git a/app/views/dashboard/_menu.html.erb b/app/views/dashboard/_menu.html.erb index 463ad470c..c6d633e79 100644 --- a/app/views/dashboard/_menu.html.erb +++ b/app/views/dashboard/_menu.html.erb @@ -18,12 +18,18 @@ <%= link_to recommended_actions_proposal_dashboard_path(proposal.to_param) do %> <%= t("dashboard.menu.recommended_actions") %> <% end %> + <% if new_resources_since_last_login?(proposed_actions, @new_actions_since_last_login) %> + <%= t("dashboard.progress.new_action" ) %> + <% end %> <% if resources_menu_visible?(proposal, resources) %>
<%= l(proposed_action.executed_actions.find_by(proposal: proposal).executed_at.to_date) %> diff --git a/app/views/dashboard/_resource.html.erb b/app/views/dashboard/_resource.html.erb index d9a66ac67..a0447d518 100644 --- a/app/views/dashboard/_resource.html.erb +++ b/app/views/dashboard/_resource.html.erb @@ -3,6 +3,9 @@ data-equalizer-watch="resources" title="<%= resource_tooltip(resource, proposal) %>">
<%= resource.short_description %>
diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index c3a0bc3c9..ce6469246 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -497,6 +497,7 @@ en: progress: Acumulated progress supports: Supports success: Ideal progress + new_action: New index: title: Edition edit_proposal_link: Edit proposal diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index b5aaeb310..5d9dc6bb4 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -497,6 +497,7 @@ es: progress: Progreso acumulado supports: Apoyos success: Progreso ideal + new_action: Nuevo index: title: Edición edit_proposal_link: Editar propuesta diff --git a/spec/features/dashboard/dashboard_spec.rb b/spec/features/dashboard/dashboard_spec.rb index 85bd04aaf..0d6e4eedf 100644 --- a/spec/features/dashboard/dashboard_spec.rb +++ b/spec/features/dashboard/dashboard_spec.rb @@ -384,4 +384,74 @@ feature "Proposal's dashboard" do expect(page).to have_content("No recommended actions done") end + describe "detect_new_actions_after_last_login" do + + before do + proposal.author.update(last_sign_in_at: Date.yesterday) + end + + scenario "Display tag 'new' on resouce when it is new for author since last login" do + resource = create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: false) + + visit progress_proposal_dashboard_path(proposal) + + within "#dashboard_action_#{resource.id}" do + expect(page).to have_content('New') + end + end + + scenario "Not display tag 'new' on resouce when there is not new resources since last login" do + resource = create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: false) + proposal.author.update(last_sign_in_at: Date.today) + + visit progress_proposal_dashboard_path(proposal) + + within "#dashboard_action_#{resource.id}" do + expect(page).not_to have_content('New') + end + end + + scenario "Display tag 'new' on proposed_action when it is new for author since last login" do + proposed_action = create(:dashboard_action, :proposed_action, :active, day_offset: 0, published_proposal: false) + + visit progress_proposal_dashboard_path(proposal) + + within "#dashboard_action_#{proposed_action.id}" do + expect(page).to have_content('New') + end + end + + scenario "Not display tag 'new' on proposed_action when there is not new proposed_action since last login" do + proposed_action = create(:dashboard_action, :proposed_action, :active, day_offset: 0, published_proposal: false) + proposal.author.update(last_sign_in_at: Date.today) + + visit progress_proposal_dashboard_path(proposal) + + within "#dashboard_action_#{proposed_action.id}" do + expect(page).not_to have_content('New') + end + end + + scenario "Display tag 'new' on sidebar menu when there is a new resouce since last login" do + resource = create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: false) + + visit progress_proposal_dashboard_path(proposal) + + within "#side_menu" do + expect(page).to have_content('New') + end + end + + scenario "Not display tag 'new' on sidebar menu when there is not a new resouce since last login" do + resource = create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: false) + proposal.author.update(last_sign_in_at: Date.today) + + visit progress_proposal_dashboard_path(proposal) + + within "#side_menu" do + expect(page).not_to have_content('New') + end + end + + end end