Merge pull request #3810 from consul/remove_tracker_role
Remove tracker role
This commit is contained in:
@@ -4,15 +4,13 @@
|
|||||||
initialize: function() {
|
initialize: function() {
|
||||||
$(".js-budget-users-list [type='checkbox']").on({
|
$(".js-budget-users-list [type='checkbox']").on({
|
||||||
change: function() {
|
change: function() {
|
||||||
var admin_count, tracker_count, valuator_count;
|
var admin_count, valuator_count;
|
||||||
|
|
||||||
admin_count = $("#administrators_list :checked").length;
|
admin_count = $("#administrators_list :checked").length;
|
||||||
valuator_count = $("#valuators_list :checked").length;
|
valuator_count = $("#valuators_list :checked").length;
|
||||||
tracker_count = $("#trackers_list :checked").length;
|
|
||||||
|
|
||||||
App.I18n.set_pluralize($(".js-budget-show-administrators-list"), admin_count);
|
App.I18n.set_pluralize($(".js-budget-show-administrators-list"), admin_count);
|
||||||
App.I18n.set_pluralize($(".js-budget-show-valuators-list"), valuator_count);
|
App.I18n.set_pluralize($(".js-budget-show-valuators-list"), valuator_count);
|
||||||
App.I18n.set_pluralize($(".js-budget-show-trackers-list"), tracker_count);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$(".js-budget-show-users-list").on({
|
$(".js-budget-show-users-list").on({
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class Tracking::BudgetInvestmentMilestonesController < Tracking::MilestonesController
|
class Admin::BudgetInvestmentMilestonesController < Admin::MilestonesController
|
||||||
private
|
private
|
||||||
|
|
||||||
def milestoneable
|
def milestoneable
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
class Admin::BudgetInvestmentProgressBarsController < Admin::ProgressBarsController
|
||||||
|
private
|
||||||
|
|
||||||
|
def progressable
|
||||||
|
Budget::Investment.find(params[:budget_investment_id])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -87,7 +87,7 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
|
|||||||
def budget_investment_params
|
def budget_investment_params
|
||||||
attributes = [:external_url, :heading_id, :administrator_id, :tag_list,
|
attributes = [:external_url, :heading_id, :administrator_id, :tag_list,
|
||||||
:valuation_tag_list, :incompatible, :visible_to_valuators, :selected,
|
:valuation_tag_list, :incompatible, :visible_to_valuators, :selected,
|
||||||
:milestone_tag_list, tracker_ids: [], valuator_ids: [], valuator_group_ids: []]
|
:milestone_tag_list, valuator_ids: [], valuator_group_ids: []]
|
||||||
params.require(:budget_investment).permit(attributes, translation_params(Budget::Investment))
|
params.require(:budget_investment).permit(attributes, translation_params(Budget::Investment))
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -101,7 +101,6 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
|
|||||||
|
|
||||||
def load_staff
|
def load_staff
|
||||||
@admins = @budget.administrators.includes(:user)
|
@admins = @budget.administrators.includes(:user)
|
||||||
@trackers = @budget.trackers.includes(:user).order(description: :asc).order("users.email ASC")
|
|
||||||
@valuators = @budget.valuators.includes(:user).order(description: :asc).order("users.email ASC")
|
@valuators = @budget.valuators.includes(:user).order(description: :asc).order("users.email ASC")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -71,8 +71,7 @@ class Admin::BudgetsController < Admin::BaseController
|
|||||||
valid_attributes = [:phase,
|
valid_attributes = [:phase,
|
||||||
:currency_symbol,
|
:currency_symbol,
|
||||||
administrator_ids: [],
|
administrator_ids: [],
|
||||||
valuator_ids: [],
|
valuator_ids: []
|
||||||
tracker_ids: []
|
|
||||||
] + descriptions
|
] + descriptions
|
||||||
params.require(:budget).permit(*valid_attributes, *report_attributes, translation_params(Budget))
|
params.require(:budget).permit(*valid_attributes, *report_attributes, translation_params(Budget))
|
||||||
end
|
end
|
||||||
@@ -83,7 +82,6 @@ class Admin::BudgetsController < Admin::BaseController
|
|||||||
|
|
||||||
def load_staff
|
def load_staff
|
||||||
@admins = Administrator.includes(:user)
|
@admins = Administrator.includes(:user)
|
||||||
@trackers = Tracker.includes(:user).order(description: :asc).order("users.email ASC")
|
|
||||||
@valuators = Valuator.includes(:user).order(description: :asc).order("users.email ASC")
|
@valuators = Valuator.includes(:user).order(description: :asc).order("users.email ASC")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class Admin::Legislation::MilestonesController < Tracking::MilestonesController
|
class Admin::Legislation::MilestonesController < Admin::MilestonesController
|
||||||
include FeatureFlags
|
include FeatureFlags
|
||||||
feature_flag :legislation
|
feature_flag :legislation
|
||||||
|
|
||||||
@@ -11,4 +11,8 @@ class Admin::Legislation::MilestonesController < Tracking::MilestonesController
|
|||||||
def milestoneable
|
def milestoneable
|
||||||
::Legislation::Process.find(params[:process_id])
|
::Legislation::Process.find(params[:process_id])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def milestoneable_path
|
||||||
|
admin_legislation_process_milestones_path(milestoneable)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class Tracking::Legislation::ProgressBarsController < Tracking::ProgressBarsController
|
class Admin::Legislation::ProgressBarsController < Admin::ProgressBarsController
|
||||||
include FeatureFlags
|
include FeatureFlags
|
||||||
feature_flag :legislation
|
feature_flag :legislation
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
class Tracking::MilestonesController < Tracking::BaseController
|
class Admin::MilestonesController < Admin::BaseController
|
||||||
include Translatable
|
include Translatable
|
||||||
include ImageAttributes
|
include ImageAttributes
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ class Tracking::MilestonesController < Tracking::BaseController
|
|||||||
def create
|
def create
|
||||||
@milestone = @milestoneable.milestones.new(milestone_params)
|
@milestone = @milestoneable.milestones.new(milestone_params)
|
||||||
if @milestone.save
|
if @milestone.save
|
||||||
redirect_to milestoneable_path, notice: t("tracking.milestones.create.notice")
|
redirect_to milestoneable_path, notice: t("admin.milestones.create.notice")
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
@@ -28,7 +28,7 @@ class Tracking::MilestonesController < Tracking::BaseController
|
|||||||
|
|
||||||
def update
|
def update
|
||||||
if @milestone.update(milestone_params)
|
if @milestone.update(milestone_params)
|
||||||
redirect_to milestoneable_path, notice: t("tracking.milestones.update.notice")
|
redirect_to milestoneable_path, notice: t("admin.milestones.update.notice")
|
||||||
else
|
else
|
||||||
render :edit
|
render :edit
|
||||||
end
|
end
|
||||||
@@ -36,7 +36,7 @@ class Tracking::MilestonesController < Tracking::BaseController
|
|||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@milestone.destroy!
|
@milestone.destroy!
|
||||||
redirect_to milestoneable_path, notice: t("tracking.milestones.delete.notice")
|
redirect_to milestoneable_path, notice: t("admin.milestones.delete.notice")
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -67,7 +67,6 @@ class Tracking::MilestonesController < Tracking::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def milestoneable_path
|
def milestoneable_path
|
||||||
polymorphic_path([current_user.administrator? ? :admin : :tracking,
|
polymorphic_path([:admin, *resource_hierarchy_for(@milestone.milestoneable)])
|
||||||
*resource_hierarchy_for(@milestone.milestoneable)])
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
class Tracking::ProgressBarsController < Tracking::BaseController
|
class Admin::ProgressBarsController < Admin::BaseController
|
||||||
include Translatable
|
include Translatable
|
||||||
|
|
||||||
before_action :load_progressable
|
before_action :load_progressable
|
||||||
@@ -15,7 +15,7 @@ class Tracking::ProgressBarsController < Tracking::BaseController
|
|||||||
def create
|
def create
|
||||||
@progress_bar = @progressable.progress_bars.new(progress_bar_params)
|
@progress_bar = @progressable.progress_bars.new(progress_bar_params)
|
||||||
if @progress_bar.save
|
if @progress_bar.save
|
||||||
redirect_to progress_bars_index, notice: t("tracking.progress_bars.create.notice")
|
redirect_to progress_bars_index, notice: t("admin.progress_bars.create.notice")
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
@@ -26,7 +26,7 @@ class Tracking::ProgressBarsController < Tracking::BaseController
|
|||||||
|
|
||||||
def update
|
def update
|
||||||
if @progress_bar.update(progress_bar_params)
|
if @progress_bar.update(progress_bar_params)
|
||||||
redirect_to progress_bars_index, notice: t("tracking.progress_bars.update.notice")
|
redirect_to progress_bars_index, notice: t("admin.progress_bars.update.notice")
|
||||||
else
|
else
|
||||||
render :edit
|
render :edit
|
||||||
end
|
end
|
||||||
@@ -34,7 +34,7 @@ class Tracking::ProgressBarsController < Tracking::BaseController
|
|||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@progress_bar.destroy!
|
@progress_bar.destroy!
|
||||||
redirect_to progress_bars_index, notice: t("tracking.progress_bars.delete.notice")
|
redirect_to progress_bars_index, notice: t("admin.progress_bars.delete.notice")
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -64,6 +64,6 @@ class Tracking::ProgressBarsController < Tracking::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def progress_bars_index
|
def progress_bars_index
|
||||||
polymorphic_path([:tracking, *resource_hierarchy_for(@progressable), ProgressBar.new])
|
polymorphic_path([:admin, *resource_hierarchy_for(@progressable), ProgressBar.new])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
class Tracking::ProposalMilestonesController < Tracking::MilestonesController
|
class Admin::ProposalMilestonesController < Admin::MilestonesController
|
||||||
private
|
private
|
||||||
|
|
||||||
def milestoneable
|
def milestoneable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
class Tracking::ProposalProgressBarsController < Tracking::ProgressBarsController
|
class Admin::ProposalProgressBarsController < Admin::ProgressBarsController
|
||||||
private
|
private
|
||||||
|
|
||||||
def progressable
|
def progressable
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
class Admin::TrackersController < Admin::BaseController
|
|
||||||
load_and_authorize_resource
|
|
||||||
|
|
||||||
before_action :set_tracker, only: [:show, :edit, :update, :destroy]
|
|
||||||
|
|
||||||
def show
|
|
||||||
@tracker = Tracker.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def index
|
|
||||||
@trackers = @trackers.page(params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def search
|
|
||||||
@users = User.search(params[:name_or_email])
|
|
||||||
.includes(:tracker)
|
|
||||||
.page(params[:page])
|
|
||||||
.for_render
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@tracker = Tracker.new(tracker_params)
|
|
||||||
@tracker.save!
|
|
||||||
|
|
||||||
redirect_to admin_trackers_path
|
|
||||||
end
|
|
||||||
|
|
||||||
def edit
|
|
||||||
@tracker = Tracker.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
@tracker = Tracker.find(params[:id])
|
|
||||||
if @tracker.update(tracker_params)
|
|
||||||
notice = t("admin.trackers.form.updated")
|
|
||||||
redirect_to [:admin, @tracker], notice: notice
|
|
||||||
else
|
|
||||||
render :edit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
@tracker.destroy!
|
|
||||||
redirect_to admin_trackers_path
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_tracker
|
|
||||||
@tracker = Tracker.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def tracker_params
|
|
||||||
params[:tracker][:description] = nil if params[:tracker][:description].blank?
|
|
||||||
params.require(:tracker).permit(:user_id, :description, :budget_investment_count)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
class Tracking::BaseController < ApplicationController
|
|
||||||
layout "admin"
|
|
||||||
|
|
||||||
before_action :authenticate_user!
|
|
||||||
before_action :verify_tracker
|
|
||||||
|
|
||||||
skip_authorization_check
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def verify_tracker
|
|
||||||
raise CanCan::AccessDenied unless current_user&.tracker? || current_user&.administrator?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
class Tracking::BudgetInvestmentProgressBarsController < Tracking::ProgressBarsController
|
|
||||||
before_action :restrict_access_to_assigned_items
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def progressable
|
|
||||||
Budget::Investment.find(params[:budget_investment_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def restrict_access_to_assigned_items
|
|
||||||
return if current_user.administrator? ||
|
|
||||||
Budget::TrackerAssignment.exists?(investment_id: params[:budget_investment_id],
|
|
||||||
tracker_id: current_user.tracker.id)
|
|
||||||
|
|
||||||
raise ActionController::RoutingError.new("Not Found")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
class Tracking::BudgetInvestmentsController < Tracking::BaseController
|
|
||||||
include FeatureFlags
|
|
||||||
include CommentableActions
|
|
||||||
|
|
||||||
feature_flag :budgets
|
|
||||||
|
|
||||||
before_action :restrict_access_to_assigned_items, only: [:show, :edit]
|
|
||||||
before_action :load_budget
|
|
||||||
before_action :load_investment, only: [:show, :edit]
|
|
||||||
|
|
||||||
has_orders %w[oldest], only: [:show, :edit]
|
|
||||||
|
|
||||||
load_and_authorize_resource :investment, class: "Budget::Investment"
|
|
||||||
|
|
||||||
def index
|
|
||||||
@heading_filters = heading_filters
|
|
||||||
@investments = if current_user.tracker? && @budget.present?
|
|
||||||
current_user.tracker.investments_by_heading(heading_params, @budget)
|
|
||||||
.page(params[:page])
|
|
||||||
else
|
|
||||||
Budget::Investment.none.page(params[:page])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
end
|
|
||||||
|
|
||||||
def edit
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def resource_model
|
|
||||||
Budget::Investment
|
|
||||||
end
|
|
||||||
|
|
||||||
def resource_name
|
|
||||||
resource_model.parameterize(separator: "_")
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_budget
|
|
||||||
@budget = Budget.find(params[:budget_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_investment
|
|
||||||
@investment = @budget.investments.find params[:id]
|
|
||||||
end
|
|
||||||
|
|
||||||
def heading_filters
|
|
||||||
investments = @budget.investments.by_tracker(current_user.tracker&.id).distinct
|
|
||||||
investment_headings = Budget::Heading.where(id: investments.pluck(:heading_id))
|
|
||||||
.order(name: :asc)
|
|
||||||
all_headings_filter = [
|
|
||||||
{
|
|
||||||
name: t("valuation.budget_investments.index.headings_filter_all"),
|
|
||||||
id: nil,
|
|
||||||
count: investments.size
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
investment_headings.reduce(all_headings_filter) do |filters, heading|
|
|
||||||
filters << {
|
|
||||||
name: heading.name,
|
|
||||||
id: heading.id,
|
|
||||||
count: investments.select { |i| i.heading_id == heading.id }.size
|
|
||||||
}
|
|
||||||
end.uniq
|
|
||||||
end
|
|
||||||
|
|
||||||
def restrict_access_to_assigned_items
|
|
||||||
return if current_user.administrator? ||
|
|
||||||
Budget::TrackerAssignment.exists?(investment_id: params[:id],
|
|
||||||
tracker_id: current_user.tracker.id)
|
|
||||||
|
|
||||||
raise ActionController::RoutingError.new("Not Found")
|
|
||||||
end
|
|
||||||
|
|
||||||
def heading_params
|
|
||||||
params.permit(:heading_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
class Tracking::BudgetsController < Tracking::BaseController
|
|
||||||
include FeatureFlags
|
|
||||||
feature_flag :budgets
|
|
||||||
|
|
||||||
load_and_authorize_resource
|
|
||||||
|
|
||||||
def index
|
|
||||||
@budget = current_budget
|
|
||||||
if @budget.present?
|
|
||||||
@investments = @budget.investments
|
|
||||||
.by_tracker(current_user.tracker)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
class Tracking::Legislation::MilestonesController < Tracking::MilestonesController
|
|
||||||
include FeatureFlags
|
|
||||||
feature_flag :legislation
|
|
||||||
|
|
||||||
def index
|
|
||||||
@process = milestoneable
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def milestoneable
|
|
||||||
::Legislation::Process.find(params[:process_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def milestoneable_path
|
|
||||||
admin_legislation_process_milestones_path(milestoneable)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
module TrackersHelper
|
|
||||||
def tracker_label(tracker)
|
|
||||||
truncate([tracker.name, tracker.email, tracker.description].compact.join(" - "), length: 100)
|
|
||||||
end
|
|
||||||
|
|
||||||
def tracker_back_path(progressable)
|
|
||||||
if progressable.class.to_s == "Legislation::Process"
|
|
||||||
admin_legislation_process_milestones_path(progressable)
|
|
||||||
else
|
|
||||||
polymorphic_path([tracker_namespace, *resource_hierarchy_for(progressable)])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def tracker_namespace
|
|
||||||
current_user.administrator? ? :admin : :tracking
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -10,7 +10,7 @@ module TranslatableFormHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
def backend_translations_enabled?
|
def backend_translations_enabled?
|
||||||
(controller.class.parents & [Admin, Management, Valuation, Tracking]).any?
|
(controller.class.parents & [Admin, Management, Valuation]).any?
|
||||||
end
|
end
|
||||||
|
|
||||||
def highlight_translation_html_class
|
def highlight_translation_html_class
|
||||||
|
|||||||
@@ -55,13 +55,11 @@ module UsersHelper
|
|||||||
current_user&.poll_officer?
|
current_user&.poll_officer?
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_tracker?
|
|
||||||
current_user&.tracker?
|
|
||||||
end
|
|
||||||
|
|
||||||
def show_admin_menu?(user = nil)
|
def show_admin_menu?(user = nil)
|
||||||
current_administrator? || current_moderator? || current_valuator? || current_manager? ||
|
unless namespace == "officing"
|
||||||
current_tracker? || (user&.administrator?) || current_poll_officer?
|
current_administrator? || current_moderator? || current_valuator? || current_manager? ||
|
||||||
|
(user&.administrator?) || current_poll_officer?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def interests_title_text(user)
|
def interests_title_text(user)
|
||||||
|
|||||||
@@ -99,7 +99,6 @@ module Abilities
|
|||||||
can [:create, :destroy], DirectUpload
|
can [:create, :destroy], DirectUpload
|
||||||
|
|
||||||
can [:deliver], Newsletter, hidden_at: nil
|
can [:deliver], Newsletter, hidden_at: nil
|
||||||
can [:manage], ::Tracker
|
|
||||||
can [:manage], Dashboard::AdministratorTask
|
can [:manage], Dashboard::AdministratorTask
|
||||||
|
|
||||||
can [:edit, :update], DownloadSetting
|
can [:edit, :update], DownloadSetting
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
module Abilities
|
|
||||||
class Tracker
|
|
||||||
include CanCan::Ability
|
|
||||||
|
|
||||||
def initialize(user)
|
|
||||||
can :index, Budget
|
|
||||||
can [:index, :show, :edit], Budget::Investment
|
|
||||||
can :manage, Milestone
|
|
||||||
can :manage, ProgressBar
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -8,7 +8,6 @@ class Ability
|
|||||||
|
|
||||||
if user # logged-in users
|
if user # logged-in users
|
||||||
merge Abilities::Valuator.new(user) if user.valuator?
|
merge Abilities::Valuator.new(user) if user.valuator?
|
||||||
merge Abilities::Tracker.new(user) if user.tracker?
|
|
||||||
|
|
||||||
if user.administrator?
|
if user.administrator?
|
||||||
merge Abilities::Administrator.new(user)
|
merge Abilities::Administrator.new(user)
|
||||||
|
|||||||
@@ -32,8 +32,6 @@ class Budget < ApplicationRecord
|
|||||||
has_many :headings, through: :groups
|
has_many :headings, through: :groups
|
||||||
has_many :lines, through: :ballots, class_name: "Budget::Ballot::Line"
|
has_many :lines, through: :ballots, class_name: "Budget::Ballot::Line"
|
||||||
has_many :phases, class_name: "Budget::Phase"
|
has_many :phases, class_name: "Budget::Phase"
|
||||||
has_many :budget_trackers
|
|
||||||
has_many :trackers, through: :budget_trackers
|
|
||||||
has_many :budget_administrators
|
has_many :budget_administrators
|
||||||
has_many :administrators, through: :budget_administrators
|
has_many :administrators, through: :budget_administrators
|
||||||
has_many :budget_valuators
|
has_many :budget_valuators
|
||||||
|
|||||||
@@ -51,9 +51,6 @@ class Budget
|
|||||||
inverse_of: :commentable,
|
inverse_of: :commentable,
|
||||||
class_name: "Comment"
|
class_name: "Comment"
|
||||||
|
|
||||||
has_many :tracker_assignments, dependent: :destroy
|
|
||||||
has_many :trackers, through: :tracker_assignments
|
|
||||||
|
|
||||||
delegate :name, :email, to: :author, prefix: true
|
delegate :name, :email, to: :author, prefix: true
|
||||||
|
|
||||||
validates_translation :title, presence: true, length: { in: 4..Budget::Investment.title_max_length }
|
validates_translation :title, presence: true, length: { in: 4..Budget::Investment.title_max_length }
|
||||||
@@ -108,10 +105,6 @@ class Budget
|
|||||||
where("budget_valuator_assignments.valuator_id = ?", valuator_id).joins(:valuator_assignments)
|
where("budget_valuator_assignments.valuator_id = ?", valuator_id).joins(:valuator_assignments)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.by_tracker(tracker_id)
|
|
||||||
where("budget_tracker_assignments.tracker_id = ?", tracker_id).joins(:tracker_assignments)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.by_valuator_group(valuator_group_id)
|
def self.by_valuator_group(valuator_group_id)
|
||||||
joins(:valuator_group_assignments).
|
joins(:valuator_group_assignments).
|
||||||
where("budget_valuator_group_assignments.valuator_group_id = ?", valuator_group_id)
|
where("budget_valuator_group_assignments.valuator_group_id = ?", valuator_group_id)
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
class Budget
|
|
||||||
class TrackerAssignment < ApplicationRecord
|
|
||||||
belongs_to :tracker, counter_cache: :budget_investment_count
|
|
||||||
belongs_to :investment, counter_cache: true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
class BudgetTracker < ApplicationRecord
|
|
||||||
belongs_to :budget
|
|
||||||
belongs_to :tracker
|
|
||||||
end
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
class Tracker < ApplicationRecord
|
|
||||||
belongs_to :user, touch: true
|
|
||||||
|
|
||||||
delegate :name, :email, :name_and_email, to: :user
|
|
||||||
|
|
||||||
has_many :tracker_assignments, dependent: :destroy, class_name: "Budget::TrackerAssignment"
|
|
||||||
has_many :investments, through: :tracker_assignments, class_name: "Budget::Investment"
|
|
||||||
|
|
||||||
validates :user_id, presence: true, uniqueness: true
|
|
||||||
|
|
||||||
def description_or_email
|
|
||||||
description.presence || email
|
|
||||||
end
|
|
||||||
|
|
||||||
def description_or_name
|
|
||||||
description.presence || name
|
|
||||||
end
|
|
||||||
|
|
||||||
def assigned_investment_ids
|
|
||||||
investment_ids
|
|
||||||
end
|
|
||||||
|
|
||||||
def investments_by_heading(params, budget)
|
|
||||||
results = investments.by_budget(budget)
|
|
||||||
if params[:heading_id].present?
|
|
||||||
results = results.by_heading(params[:heading_id])
|
|
||||||
end
|
|
||||||
results
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -14,7 +14,6 @@ class User < ApplicationRecord
|
|||||||
has_one :administrator
|
has_one :administrator
|
||||||
has_one :moderator
|
has_one :moderator
|
||||||
has_one :valuator
|
has_one :valuator
|
||||||
has_one :tracker
|
|
||||||
has_one :manager
|
has_one :manager
|
||||||
has_one :poll_officer, class_name: "Poll::Officer"
|
has_one :poll_officer, class_name: "Poll::Officer"
|
||||||
has_one :organization
|
has_one :organization
|
||||||
@@ -198,10 +197,6 @@ class User < ApplicationRecord
|
|||||||
valuator.present?
|
valuator.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def tracker?
|
|
||||||
tracker.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def manager?
|
def manager?
|
||||||
manager.present?
|
manager.present?
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -212,10 +212,6 @@
|
|||||||
<%= link_to t("admin.menu.valuators"), admin_valuators_path %>
|
<%= link_to t("admin.menu.valuators"), admin_valuators_path %>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li <%= "class=is-active" if controller_name == "trackers" %>>
|
|
||||||
<%= link_to t("admin.menu.trackers"), admin_trackers_path %>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li <%= "class=is-active" if controller_name == "managers" %>>
|
<li <%= "class=is-active" if controller_name == "managers" %>>
|
||||||
<%= link_to t("admin.menu.managers"), admin_managers_path %>
|
<%= link_to t("admin.menu.managers"), admin_managers_path %>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -89,16 +89,6 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="small-12 column">
|
|
||||||
<hr>
|
|
||||||
<%= f.label :tracker_ids, t("admin.budget_investments.edit.assigned_trackers") %>
|
|
||||||
<ul>
|
|
||||||
<%= f.collection_check_boxes :tracker_ids, @trackers, :id, :email do |b| %>
|
|
||||||
<li><%= b.label(title: tracker_label(b.object)) { b.check_box + truncate(b.object.description_or_email, length: 60) } %></li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row expanded margin-top">
|
<div class="row expanded margin-top">
|
||||||
|
|||||||
@@ -50,15 +50,6 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="assigned_trackers">
|
|
||||||
<strong><%= t("admin.budget_investments.show.assigned_trackers") %>:</strong>
|
|
||||||
<% if @investment.trackers.any? %>
|
|
||||||
<%= @investment.trackers.collect(&:name_and_email).join(", ") %>
|
|
||||||
<% else %>
|
|
||||||
<%= t("admin.budget_investments.show.undefined") %>
|
|
||||||
<% end %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= link_to t("admin.budget_investments.show.edit_classification"),
|
<%= link_to t("admin.budget_investments.show.edit_classification"),
|
||||||
edit_admin_budget_budget_investment_path(@budget, @investment,
|
edit_admin_budget_budget_investment_path(@budget, @investment,
|
||||||
@@ -77,4 +68,4 @@
|
|||||||
|
|
||||||
<%= render "admin/change_logs/change_log", logs: @logs %>
|
<%= render "admin/change_logs/change_log", logs: @logs %>
|
||||||
|
|
||||||
<%= render "tracking/milestones/milestones", milestoneable: @investment %>
|
<%= render "admin/milestones/milestones", milestoneable: @investment %>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="margin-top">
|
<div class="margin-top">
|
||||||
<% %w[administrators valuators trackers].each do |staff| %>
|
<% %w[administrators valuators].each do |staff| %>
|
||||||
<div class="small-12 medium-4 column end">
|
<div class="small-12 medium-4 column end">
|
||||||
<%= link_to t("admin.budgets.edit.#{staff}", count: @budget.send(staff).count),
|
<%= link_to t("admin.budgets.edit.#{staff}", count: @budget.send(staff).count),
|
||||||
"#",
|
"#",
|
||||||
@@ -35,7 +35,6 @@
|
|||||||
<div class="margin-top">
|
<div class="margin-top">
|
||||||
<%= render "/admin/budgets/association", assignable_type: "administrators", assignables: @admins, form: f %>
|
<%= render "/admin/budgets/association", assignable_type: "administrators", assignables: @admins, form: f %>
|
||||||
<%= render "/admin/budgets/association", assignable_type: "valuators", assignables: @valuators, form: f %>
|
<%= render "/admin/budgets/association", assignable_type: "valuators", assignables: @valuators, form: f %>
|
||||||
<%= render "/admin/budgets/association", assignable_type: "trackers", assignables: @trackers, form: f %>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% if @budget.phases.present? %>
|
<% if @budget.phases.present? %>
|
||||||
|
|||||||
@@ -9,4 +9,4 @@
|
|||||||
|
|
||||||
<%= render "admin/legislation/processes/subnav", process: @process, active: "milestones" %>
|
<%= render "admin/legislation/processes/subnav", process: @process, active: "milestones" %>
|
||||||
<%= render "summary_form", process: @process %>
|
<%= render "summary_form", process: @process %>
|
||||||
<%= render "tracking/milestones/milestones", milestoneable: @process %>
|
<%= render "admin/milestones/milestones", milestoneable: @process %>
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<%= render "shared/globalize_locales", resource: @milestone %>
|
<%= render "shared/globalize_locales", resource: @milestone %>
|
||||||
|
|
||||||
<%= translatable_form_for [:tracking, *resource_hierarchy_for(@milestone)] do |f| %>
|
<%= translatable_form_for [:admin, *resource_hierarchy_for(@milestone)] do |f| %>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="small-12 medium-6 margin-bottom column">
|
<div class="small-12 medium-6 margin-bottom column">
|
||||||
<%= f.select :status_id,
|
<%= f.select :status_id,
|
||||||
@statuses.collect { |s| [s.name, s.id] },
|
@statuses.collect { |s| [s.name, s.id] },
|
||||||
{ include_blank: @statuses.any? ? "" : t("tracking.milestones.form.no_statuses_defined") },
|
{ include_blank: @statuses.any? ? "" : t("admin.milestones.form.no_statuses_defined") },
|
||||||
{ disabled: @statuses.blank? } %>
|
{ disabled: @statuses.blank? } %>
|
||||||
<%= link_to t("tracking.milestones.form.admin_statuses"),
|
<%= link_to t("admin.milestones.form.admin_statuses"),
|
||||||
admin_milestone_statuses_path %>
|
admin_milestone_statuses_path %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<h2 class="inline-block"><%= t("tracking.milestones.index.milestone") %></h2>
|
<h2 class="inline-block"><%= t("admin.milestones.index.milestone") %></h2>
|
||||||
|
|
||||||
<%= link_to t("tracking.progress_bars.manage"),
|
<%= link_to t("admin.progress_bars.manage"),
|
||||||
polymorphic_path([:tracking, *resource_hierarchy_for(milestoneable.progress_bars.new)]),
|
polymorphic_path([:admin, *resource_hierarchy_for(milestoneable.progress_bars.new)]),
|
||||||
class: "button hollow float-right" %>
|
class: "button hollow float-right" %>
|
||||||
|
|
||||||
<% if milestoneable.milestone_tag_list.any? %>
|
<% if milestoneable.milestone_tag_list.any? %>
|
||||||
@@ -16,14 +16,14 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><%= t("tracking.milestones.index.table_id") %></th>
|
<th><%= t("admin.milestones.index.table_id") %></th>
|
||||||
<th><%= t("tracking.milestones.index.table_title") %></th>
|
<th><%= t("admin.milestones.index.table_title") %></th>
|
||||||
<th><%= t("tracking.milestones.index.table_description") %></th>
|
<th><%= t("admin.milestones.index.table_description") %></th>
|
||||||
<th><%= t("tracking.milestones.index.table_publication_date") %></th>
|
<th><%= t("admin.milestones.index.table_publication_date") %></th>
|
||||||
<th><%= t("tracking.milestones.index.table_status") %></th>
|
<th><%= t("admin.milestones.index.table_status") %></th>
|
||||||
<th><%= t("tracking.milestones.index.image") %></th>
|
<th><%= t("admin.milestones.index.image") %></th>
|
||||||
<th><%= t("tracking.milestones.index.documents") %></th>
|
<th><%= t("admin.milestones.index.documents") %></th>
|
||||||
<th><%= t("tracking.milestones.index.table_actions") %></th>
|
<th><%= t("admin.milestones.index.table_actions") %></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
<td class="text-center"><%= milestone.id %></td>
|
<td class="text-center"><%= milestone.id %></td>
|
||||||
<td>
|
<td>
|
||||||
<%= link_to milestone.title,
|
<%= link_to milestone.title,
|
||||||
polymorphic_path([:tracking, *resource_hierarchy_for(milestone)],
|
polymorphic_path([:admin, *resource_hierarchy_for(milestone)],
|
||||||
action: :edit) %>
|
action: :edit) %>
|
||||||
</td>
|
</td>
|
||||||
<td class="small small-5"><%= milestone.description %></td>
|
<td class="small small-5"><%= milestone.description %></td>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
<%= milestone.status.present? ? milestone.status.name : "" %>
|
<%= milestone.status.present? ? milestone.status.name : "" %>
|
||||||
</td>
|
</td>
|
||||||
<td class="small">
|
<td class="small">
|
||||||
<%= link_to t("tracking.milestones.index.show_image"),
|
<%= link_to t("admin.milestones.index.show_image"),
|
||||||
milestone.image_url(:large),
|
milestone.image_url(:large),
|
||||||
target: :_blank if milestone.image.present? %>
|
target: :_blank if milestone.image.present? %>
|
||||||
</td>
|
</td>
|
||||||
@@ -58,8 +58,8 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td class="small-2">
|
<td class="small-2">
|
||||||
<%= link_to t("tracking.milestones.index.delete"),
|
<%= link_to t("admin.milestones.index.delete"),
|
||||||
polymorphic_path([:tracking, *resource_hierarchy_for(milestone)]),
|
polymorphic_path([:admin, *resource_hierarchy_for(milestone)]),
|
||||||
method: :delete,
|
method: :delete,
|
||||||
class: "button hollow alert expanded" %>
|
class: "button hollow alert expanded" %>
|
||||||
</td>
|
</td>
|
||||||
@@ -68,12 +68,12 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<% else %>
|
<% else %>
|
||||||
<p><%= t("tracking.milestones.index.no_milestones") %></p>
|
<p><%= t("admin.milestones.index.no_milestones") %></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= link_to t("tracking.milestones.index.new_milestone"),
|
<%= link_to t("admin.milestones.index.new_milestone"),
|
||||||
polymorphic_path([:tracking, *resource_hierarchy_for(milestoneable.milestones.new)],
|
polymorphic_path([:admin, *resource_hierarchy_for(milestoneable.milestones.new)],
|
||||||
action: :new),
|
action: :new),
|
||||||
class: "button hollow" %>
|
class: "button hollow" %>
|
||||||
</p>
|
</p>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<%= back_link_to milestoneable_path %>
|
<%= back_link_to milestoneable_path %>
|
||||||
|
|
||||||
<h2><%= t("tracking.milestones.edit.title") %></h2>
|
<h2><%= t("admin.milestones.edit.title") %></h2>
|
||||||
|
|
||||||
<div class="milestone-edit">
|
<div class="milestone-edit">
|
||||||
<%= render "form" %>
|
<%= render "form" %>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="small-12 column">
|
<div class="small-12 column">
|
||||||
<%= back_link_to milestoneable_path %>
|
<%= back_link_to milestoneable_path %>
|
||||||
|
|
||||||
<h1><%= t("tracking.milestones.new.creating") %></h1>
|
<h1><%= t("admin.milestones.new.creating") %></h1>
|
||||||
|
|
||||||
<%= render "form" %>
|
<%= render "form" %>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<%= render "shared/globalize_locales", resource: @progress_bar %>
|
<%= render "shared/globalize_locales", resource: @progress_bar %>
|
||||||
|
|
||||||
<%= translatable_form_for [:tracking, *resource_hierarchy_for(@progress_bar)] do |f| %>
|
<%= translatable_form_for [:admin, *resource_hierarchy_for(@progress_bar)] do |f| %>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="small-12 medium-6 column">
|
<div class="small-12 medium-6 column">
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<h2 class="inline-block"><%= t("tracking.progress_bars.index.title") %></h2>
|
<h2 class="inline-block"><%= t("admin.progress_bars.index.title") %></h2>
|
||||||
|
|
||||||
<%= link_to t("tracking.progress_bars.index.new_progress_bar"),
|
<%= link_to t("admin.progress_bars.index.new_progress_bar"),
|
||||||
polymorphic_path(
|
polymorphic_path(
|
||||||
[:tracking, *resource_hierarchy_for(ProgressBar.new(progressable: progressable))],
|
[:admin, *resource_hierarchy_for(ProgressBar.new(progressable: progressable))],
|
||||||
action: :new
|
action: :new
|
||||||
),
|
),
|
||||||
class: "button float-right" %>
|
class: "button float-right" %>
|
||||||
@@ -11,10 +11,10 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><%= t("tracking.progress_bars.index.table_id") %></th>
|
<th><%= t("admin.progress_bars.index.table_id") %></th>
|
||||||
<th><%= t("tracking.progress_bars.index.table_kind") %></th>
|
<th><%= t("admin.progress_bars.index.table_kind") %></th>
|
||||||
<th><%= t("tracking.progress_bars.index.table_title") %></th>
|
<th><%= t("admin.progress_bars.index.table_title") %></th>
|
||||||
<th class="text-center"><%= t("tracking.progress_bars.index.table_percentage") %></th>
|
<th class="text-center"><%= t("admin.progress_bars.index.table_percentage") %></th>
|
||||||
<th><%= t("admin.actions.actions") %></th>
|
<th><%= t("admin.actions.actions") %></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
<% if progress_bar.title.present? %>
|
<% if progress_bar.title.present? %>
|
||||||
<%= progress_bar.title %>
|
<%= progress_bar.title %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<strong><%= t("tracking.progress_bars.index.primary") %></strong>
|
<strong><%= t("admin.progress_bars.index.primary") %></strong>
|
||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
@@ -37,12 +37,12 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<%= link_to t("admin.actions.edit"),
|
<%= link_to t("admin.actions.edit"),
|
||||||
polymorphic_path([:tracking, *resource_hierarchy_for(progress_bar)],
|
polymorphic_path([:admin, *resource_hierarchy_for(progress_bar)],
|
||||||
action: :edit),
|
action: :edit),
|
||||||
class: "button hollow" %>
|
class: "button hollow" %>
|
||||||
|
|
||||||
<%= link_to t("admin.actions.delete"),
|
<%= link_to t("admin.actions.delete"),
|
||||||
polymorphic_path([:tracking, *resource_hierarchy_for(progress_bar)]),
|
polymorphic_path([:admin, *resource_hierarchy_for(progress_bar)]),
|
||||||
method: :delete,
|
method: :delete,
|
||||||
class: "button hollow alert" %>
|
class: "button hollow alert" %>
|
||||||
</td>
|
</td>
|
||||||
@@ -52,6 +52,6 @@
|
|||||||
</table>
|
</table>
|
||||||
<% else %>
|
<% else %>
|
||||||
<div class="callout primary">
|
<div class="callout primary">
|
||||||
<%= t("tracking.progress_bars.index.no_progress_bars") %>
|
<%= t("admin.progress_bars.index.no_progress_bars") %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
15
app/views/admin/progress_bars/edit.html.erb
Normal file
15
app/views/admin/progress_bars/edit.html.erb
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<% if @progress_bar.primary? %>
|
||||||
|
<% bar_title = t("admin.progress_bars.edit.title.primary") %>
|
||||||
|
<% else %>
|
||||||
|
<% bar_title = t("admin.progress_bars.edit.title.secondary", title: @progress_bar.title) %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% provide :title do %>
|
||||||
|
<%= "#{t("admin.header.title")} - #{bar_title}" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%= back_link_to progress_bars_index %>
|
||||||
|
|
||||||
|
<h2><%= bar_title %></h2>
|
||||||
|
|
||||||
|
<%= render "form" %>
|
||||||
9
app/views/admin/progress_bars/index.html.erb
Normal file
9
app/views/admin/progress_bars/index.html.erb
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<% provide :title do %>
|
||||||
|
<%= "#{t("admin.header.title")} - #{t("admin.progress_bars.index.title")}" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%= back_link_to polymorphic_path([:admin, *resource_hierarchy_for(@progressable)]) %>
|
||||||
|
|
||||||
|
<div class="clear"></div>
|
||||||
|
|
||||||
|
<%= render "admin/progress_bars/progress_bars", progressable: @progressable %>
|
||||||
9
app/views/admin/progress_bars/new.html.erb
Normal file
9
app/views/admin/progress_bars/new.html.erb
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<% provide :title do %>
|
||||||
|
<%= "#{t("admin.header.title")} - #{t("admin.progress_bars.new.creating")}" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%= back_link_to progress_bars_index %>
|
||||||
|
|
||||||
|
<h2><%= t("admin.progress_bars.new.creating") %></h2>
|
||||||
|
|
||||||
|
<%= render "form" %>
|
||||||
@@ -32,4 +32,4 @@
|
|||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= render "tracking/milestones/milestones", milestoneable: @proposal %>
|
<%= render "admin/milestones/milestones", milestoneable: @proposal %>
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
<%= back_link_to admin_trackers_path %>
|
|
||||||
|
|
||||||
<h2><%= t("admin.trackers.form.edit_title") %></h2>
|
|
||||||
|
|
||||||
<div class="callout highlight">
|
|
||||||
<strong><%= @tracker.name %></strong><br>
|
|
||||||
<%= @tracker.email %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="margin-top">
|
|
||||||
<%= form_for [:admin, @tracker] do |f| %>
|
|
||||||
<%= f.text_field :description %>
|
|
||||||
<%= f.submit t("admin.trackers.form.update"), class: "button success" %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
<h2 class="inline-block"><%= t("admin.trackers.index.title") %></h2>
|
|
||||||
|
|
||||||
<%= render "admin/shared/user_search", url: search_admin_trackers_path %>
|
|
||||||
|
|
||||||
<div id="trackers">
|
|
||||||
<% if @trackers.any? %>
|
|
||||||
<h3 class="margin"><%= page_entries_info @trackers %></h3>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<th scope="col"><%= t("admin.trackers.index.name") %></th>
|
|
||||||
<th scope="col"><%= t("admin.trackers.index.email") %></th>
|
|
||||||
<th scope="col"><%= t("admin.valuators.index.description") %></th>
|
|
||||||
<th scope="col" class="small-3"><%= t("admin.actions.actions") %></th>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<% @trackers.each do |tracker| %>
|
|
||||||
<tr>
|
|
||||||
<td><%= link_to tracker.name, admin_tracker_path(tracker) %></td>
|
|
||||||
<td><%= tracker.email %></td>
|
|
||||||
<td>
|
|
||||||
<% if tracker.description.present? %>
|
|
||||||
<%= tracker.description %>
|
|
||||||
<% else %>
|
|
||||||
<%= t("admin.trackers.index.no_description") %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%= link_to t("admin.actions.edit"),
|
|
||||||
edit_admin_tracker_path(tracker),
|
|
||||||
class: "button hollow" %>
|
|
||||||
<%= link_to t("admin.valuators.valuator.delete"),
|
|
||||||
admin_tracker_path(tracker),
|
|
||||||
method: :delete,
|
|
||||||
class: "button hollow alert" %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<%= paginate @trackers %>
|
|
||||||
<% else %>
|
|
||||||
<div class="callout primary">
|
|
||||||
<%= t("admin.trackers.index.no_trackers") %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
<h2><%= t("admin.trackers.search.title") %></h2>
|
|
||||||
|
|
||||||
<%= render "admin/shared/user_search", url: search_admin_trackers_path %>
|
|
||||||
|
|
||||||
<div id="trackers">
|
|
||||||
<% if @users.any? %>
|
|
||||||
<h3 class="margin"><%= page_entries_info @users %></h3>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<th scope="col"><%= t("admin.trackers.index.name") %></th>
|
|
||||||
<th scope="col"><%= t("admin.trackers.index.email") %></th>
|
|
||||||
<th scope="col"><%= t("admin.trackers.index.description") %></th>
|
|
||||||
<th scope="col"><%= t("admin.shared.actions") %></th>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<% @users.each do |user| %>
|
|
||||||
<tr>
|
|
||||||
<td><%= user.name %></td>
|
|
||||||
<td><%= user.email %></td>
|
|
||||||
<td>
|
|
||||||
<% if user.tracker %>
|
|
||||||
<% if user.tracker.description.present? %>
|
|
||||||
<%= user.tracker.description %>
|
|
||||||
<% else %>
|
|
||||||
<%= t("admin.trackers.index.no_description") %>
|
|
||||||
<% end %>
|
|
||||||
<% else %>
|
|
||||||
<%= t("admin.trackers.index.no_description") %>
|
|
||||||
<% end %>
|
|
||||||
<td>
|
|
||||||
<% if user.tracker? %>
|
|
||||||
<%= link_to t("admin.actions.edit"),
|
|
||||||
edit_admin_tracker_path(user.tracker),
|
|
||||||
class: "button hollow" %>
|
|
||||||
|
|
||||||
<%= link_to t("admin.valuators.valuator.delete"),
|
|
||||||
admin_tracker_path(user.tracker),
|
|
||||||
method: :delete,
|
|
||||||
class: "button hollow alert" %>
|
|
||||||
<% else %>
|
|
||||||
<%= form_for Tracker.new(user: user), url: admin_trackers_path do |f| %>
|
|
||||||
<%= f.hidden_field :user_id %>
|
|
||||||
<%= f.submit t("admin.trackers.tracker.add"),
|
|
||||||
class: "button success expanded" %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<% else %>
|
|
||||||
<div class="callout alert margin">
|
|
||||||
<%= t("admin.shared.no_search_results") %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
<%= back_link_to admin_trackers_path %>
|
|
||||||
|
|
||||||
<%= link_to t("admin.actions.edit"), edit_admin_tracker_path(@tracker), class: "button hollow float-right" %>
|
|
||||||
|
|
||||||
<div class="clear"></div>
|
|
||||||
|
|
||||||
<h2><%= @tracker.name %></h2>
|
|
||||||
|
|
||||||
<div class="callout highlight">
|
|
||||||
<p>
|
|
||||||
<strong><%= t("admin.trackers.show.email") %></strong><br>
|
|
||||||
<%= @tracker.email %>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong><%= t("admin.trackers.show.description") %></strong><br>
|
|
||||||
<% if @tracker.description.present? %>
|
|
||||||
<%= @tracker.description %>
|
|
||||||
<% else %>
|
|
||||||
<%= t("admin.trackers.show.no_description") %>
|
|
||||||
<% end %>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
@@ -21,13 +21,6 @@
|
|||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% if (feature?(:budgets)) &&
|
|
||||||
(current_user.administrator? || current_user.tracker?) %>
|
|
||||||
<li>
|
|
||||||
<%= link_to t("layouts.header.tracking"), tracking_root_path %>
|
|
||||||
</li>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if current_user.administrator? || current_user.manager? %>
|
<% if current_user.administrator? || current_user.manager? %>
|
||||||
<li>
|
<li>
|
||||||
<%= link_to t("layouts.header.management"), management_sign_in_path %>
|
<%= link_to t("layouts.header.management"), management_sign_in_path %>
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
<nav class="admin-sidebar">
|
|
||||||
<ul id="valuation_menu">
|
|
||||||
<li>
|
|
||||||
<%= link_to t("tracking.menu.title"), tracking_root_path %>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<% if feature?(:budgets) %>
|
|
||||||
<li <%= "class=is-active" if controller_name == "budget_investments" %>>
|
|
||||||
<%= link_to tracking_budgets_path do %>
|
|
||||||
<span class="icon-budget"></span>
|
|
||||||
<%= t("tracking.menu.budgets") %>
|
|
||||||
<% end %>
|
|
||||||
</li>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<%= link_to tracking_budget_budget_investment_path(@budget, @investment), class: "back" do %>
|
|
||||||
<span class="icon-angle-left"></span>
|
|
||||||
<%= "#{t("tracking.budget_investments.show.title")} #{@investment.id}" %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<h1><%= @investment.title %></h1>
|
|
||||||
|
|
||||||
<%= auto_link_already_sanitized_html wysiwyg(@investment.description) %>
|
|
||||||
|
|
||||||
<%= render "tracking/milestones/milestones", milestoneable: @investment %>
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
<h2>
|
|
||||||
<%= @budget.name %> - <%= t("tracking.budget_investments.index.title") %>
|
|
||||||
<small><%= t("tracking.budget_investments.index.assigned_to", tracker: current_user.name) %></small>
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<div class="row expanded collapse margin-bottom">
|
|
||||||
<% @heading_filters.each_slice(8) do |slice| %>
|
|
||||||
<div class="small-12 medium-4 column select-heading">
|
|
||||||
<% slice.each do |filter| %>
|
|
||||||
<%= link_to tracking_budget_budget_investments_path(budget_id: @budget.id, heading_id: filter[:id]),
|
|
||||||
class: "#{"is-active" if params[:heading_id].to_s == filter[:id].to_s}" do %>
|
|
||||||
<%= filter[:name] %> (<%= filter[:count] %>)
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<% if @investments.any? %>
|
|
||||||
<h3><%= page_entries_info @investments %></h3>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th><%= t("tracking.budget_investments.index.table_id") %></th>
|
|
||||||
<th><%= t("tracking.budget_investments.index.table_title") %></th>
|
|
||||||
<th><%= t("tracking.budget_investments.index.table_heading_name") %></th>
|
|
||||||
<th><%= t("tracking.budget_investments.index.table_actions") %></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<% @investments.each do |investment| %>
|
|
||||||
<tr id="<%= dom_id(investment) %>" class="budget_investment">
|
|
||||||
<td>
|
|
||||||
<strong><%= investment.id %></strong>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%= link_to investment.title, tracking_budget_budget_investment_path(@budget, investment) %>
|
|
||||||
</td>
|
|
||||||
<td class="small">
|
|
||||||
<%= investment.heading.name %>
|
|
||||||
</td>
|
|
||||||
<td class="small">
|
|
||||||
<%= link_to t("tracking.budget_investments.index.edit"),
|
|
||||||
edit_tracking_budget_budget_investment_path(@budget, investment),
|
|
||||||
class: "button hollow expanded" %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<%= paginate @investments %>
|
|
||||||
<% else %>
|
|
||||||
<div class="callout primary">
|
|
||||||
<%= t("tracking.budget_investments.index.no_investments") %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
<%= back_link_to tracking_budget_budget_investments_path %>
|
|
||||||
|
|
||||||
<h2><%= t("tracking.budget_investments.show.title") %> <%= @investment.id %> </h2>
|
|
||||||
<h1><%= @investment.title %></h1>
|
|
||||||
|
|
||||||
<%= auto_link_already_sanitized_html wysiwyg(@investment.description) %>
|
|
||||||
|
|
||||||
<% if @investment.external_url.present? %>
|
|
||||||
<p><%= sanitize_and_auto_link @investment.external_url %></p>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<h2><%= t("tracking.budget_investments.show.info") %></h2>
|
|
||||||
|
|
||||||
<p><strong><%= t("tracking.budget_investments.show.by") %>:</strong>
|
|
||||||
<%= @investment.author.name %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p><strong><%= t("tracking.budget_investments.show.heading") %>:</strong>
|
|
||||||
<%= @investment.heading.name %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p><strong><%= t("tracking.budget_investments.show.sent") %>:</strong>
|
|
||||||
<%= l @investment.created_at, format: :datetime %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2><%= t("tracking.budget_investments.show.responsibles") %></h2>
|
|
||||||
|
|
||||||
<p><strong><%= t("tracking.budget_investments.show.assigned_admin") %>:</strong>
|
|
||||||
<% if @investment.administrator.present? %>
|
|
||||||
<%= @investment.administrator.name_and_email %>
|
|
||||||
<% else %>
|
|
||||||
<%= t("tracking.budget_investments.show.undefined") %>
|
|
||||||
<% end %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p><strong><%= t("trackers.budget_investments.show.assigned_trackers") %>:</strong></p>
|
|
||||||
<div id="assigned_trackers">
|
|
||||||
<ul>
|
|
||||||
<% @investment.trackers.each do |tracker| %>
|
|
||||||
<li><%= tracker.name_and_email %></li>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if @investment.trackers.empty? %>
|
|
||||||
<li><%= t("tracking.budget_investments.show.undefined") %></li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
<h2 class="inline-block"><%= t("tracking.budgets.index.title") %></h2>
|
|
||||||
|
|
||||||
<% if @budget.present? %>
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th><%= t("tracking.budgets.index.table_name") %></th>
|
|
||||||
<th><%= t("tracking.budgets.index.table_phase") %></th>
|
|
||||||
<th><%= t("tracking.budgets.index.table_assigned_investments_tracking_open") %></th>
|
|
||||||
<th><%= t("tracking.budgets.index.table_actions") %></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr id="<%= dom_id(@budget) %>" class="budget">
|
|
||||||
<td>
|
|
||||||
<%= @budget.name %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%= t("budgets.phase.#{@budget.phase}") %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%= @investments.count %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%= link_to t("tracking.budgets.index.tracking"),
|
|
||||||
tracking_budget_budget_investments_path(budget_id: @budget.id),
|
|
||||||
class: "button hollow expanded" %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<% else %>
|
|
||||||
<div class="callout primary clear">
|
|
||||||
<%= t("tracking.budgets.index.no_budgets") %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<% if @progress_bar.primary? %>
|
|
||||||
<% bar_title = t("tracking.progress_bars.edit.title.primary") %>
|
|
||||||
<% else %>
|
|
||||||
<% bar_title = t("tracking.progress_bars.edit.title.secondary", title: @progress_bar.title) %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% provide :title do %>
|
|
||||||
<%= "#{t("tracking.header.title")} - #{bar_title}" %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<%= back_link_to progress_bars_index %>
|
|
||||||
|
|
||||||
<h2><%= bar_title %></h2>
|
|
||||||
|
|
||||||
<%= render "form" %>
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<% provide :title do %>
|
|
||||||
<%= "#{t("admin.header.title")} - #{t("tracking.progress_bars.index.title")}" %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<%= back_link_to tracker_back_path(@progressable) %>
|
|
||||||
|
|
||||||
<div class="clear"></div>
|
|
||||||
|
|
||||||
<%= render "tracking/progress_bars/progress_bars", progressable: @progressable %>
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<% provide :title do %>
|
|
||||||
<%= "#{t("admin.header.title")} - #{t("tracking.progress_bars.new.creating")}" %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<%= back_link_to progress_bars_index %>
|
|
||||||
|
|
||||||
<h2><%= t("tracking.progress_bars.new.creating") %></h2>
|
|
||||||
|
|
||||||
<%= render "form" %>
|
|
||||||
@@ -47,7 +47,6 @@ data:
|
|||||||
- config/locales/%{locale}/milestones.yml
|
- config/locales/%{locale}/milestones.yml
|
||||||
- config/locales/%{locale}/stats.yml
|
- config/locales/%{locale}/stats.yml
|
||||||
- config/locales/%{locale}/download.yml
|
- config/locales/%{locale}/download.yml
|
||||||
- config/locales/%{locale}/tracking.yml
|
|
||||||
|
|
||||||
# Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom:
|
# Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom:
|
||||||
# `i18n-tasks normalize -p` will force move the keys according to these rules
|
# `i18n-tasks normalize -p` will force move the keys according to these rules
|
||||||
@@ -141,7 +140,7 @@ ignore_unused:
|
|||||||
- "admin.hidden_proposals.index.filter*"
|
- "admin.hidden_proposals.index.filter*"
|
||||||
- "admin.proposal_notifications.index.filter*"
|
- "admin.proposal_notifications.index.filter*"
|
||||||
- "admin.budgets.index.filter*"
|
- "admin.budgets.index.filter*"
|
||||||
- "admin.budgets.edit.(administrators|trackers|valuators).*"
|
- "admin.budgets.edit.(administrators|valuators).*"
|
||||||
- "admin.budget_investments.index.filter*"
|
- "admin.budget_investments.index.filter*"
|
||||||
- "admin.organizations.index.filter*"
|
- "admin.organizations.index.filter*"
|
||||||
- "admin.hidden_users.index.filter*"
|
- "admin.hidden_users.index.filter*"
|
||||||
|
|||||||
@@ -102,13 +102,8 @@ en:
|
|||||||
zero: "Select valuators"
|
zero: "Select valuators"
|
||||||
one: "1 valuator selected"
|
one: "1 valuator selected"
|
||||||
other: "%{count} valuators selected"
|
other: "%{count} valuators selected"
|
||||||
trackers:
|
|
||||||
zero: "Select trackers"
|
|
||||||
one: "1 tracker selected"
|
|
||||||
other: "%{count} trackers selected"
|
|
||||||
empty_administrators: "There are no administrators"
|
empty_administrators: "There are no administrators"
|
||||||
empty_valuators: "There are no valuators"
|
empty_valuators: "There are no valuators"
|
||||||
empty_trackers: "There are no trackers"
|
|
||||||
destroy:
|
destroy:
|
||||||
success_notice: Budget deleted successfully
|
success_notice: Budget deleted successfully
|
||||||
unable_notice: You cannot delete a budget that has associated investments
|
unable_notice: You cannot delete a budget that has associated investments
|
||||||
@@ -254,7 +249,6 @@ en:
|
|||||||
"false": "No"
|
"false": "No"
|
||||||
valuator_groups: "Valuator Groups"
|
valuator_groups: "Valuator Groups"
|
||||||
preview: Investment preview
|
preview: Investment preview
|
||||||
assigned_trackers: "Assigned trackers"
|
|
||||||
edit:
|
edit:
|
||||||
classification: Classification
|
classification: Classification
|
||||||
compatibility: Compatibility
|
compatibility: Compatibility
|
||||||
@@ -265,11 +259,36 @@ en:
|
|||||||
user_tags: User assigned tags
|
user_tags: User assigned tags
|
||||||
tags_placeholder: "Write the tags you want separated by commas (,)"
|
tags_placeholder: "Write the tags you want separated by commas (,)"
|
||||||
undefined: Undefined
|
undefined: Undefined
|
||||||
assigned_trackers: "Trackers"
|
|
||||||
search_unfeasible: Search unfeasible
|
search_unfeasible: Search unfeasible
|
||||||
milestones:
|
milestones:
|
||||||
index:
|
index:
|
||||||
|
table_id: "ID"
|
||||||
|
table_title: "Title"
|
||||||
|
table_description: "Description"
|
||||||
|
table_publication_date: "Publication date"
|
||||||
|
table_status: Status
|
||||||
|
table_actions: "Actions"
|
||||||
|
delete: "Delete milestone"
|
||||||
|
no_milestones: "Don't have defined milestones"
|
||||||
|
image: "Image"
|
||||||
|
show_image: "Show image"
|
||||||
|
documents: "Documents"
|
||||||
|
milestone: Milestone
|
||||||
|
new_milestone: Create new milestone
|
||||||
milestone_tags: Milestone Tags
|
milestone_tags: Milestone Tags
|
||||||
|
form:
|
||||||
|
admin_statuses: Manage statuses
|
||||||
|
no_statuses_defined: There are no defined statuses yet
|
||||||
|
new:
|
||||||
|
creating: Create milestone
|
||||||
|
edit:
|
||||||
|
title: Edit milestone
|
||||||
|
create:
|
||||||
|
notice: New milestone created successfully!
|
||||||
|
update:
|
||||||
|
notice: Milestone updated successfully
|
||||||
|
delete:
|
||||||
|
notice: Milestone successfully deleted
|
||||||
statuses:
|
statuses:
|
||||||
index:
|
index:
|
||||||
title: Milestone statuses
|
title: Milestone statuses
|
||||||
@@ -676,7 +695,6 @@ en:
|
|||||||
title_booths: Voting booths
|
title_booths: Voting booths
|
||||||
legislation: Collaborative Legislation
|
legislation: Collaborative Legislation
|
||||||
users: Users
|
users: Users
|
||||||
trackers: "Trackers"
|
|
||||||
dashboard: Proposals dashboard
|
dashboard: Proposals dashboard
|
||||||
administrator_tasks: Resources requested
|
administrator_tasks: Resources requested
|
||||||
dashboard_actions: Resources and actions
|
dashboard_actions: Resources and actions
|
||||||
@@ -1575,29 +1593,6 @@ en:
|
|||||||
edited_by: "Edited by"
|
edited_by: "Edited by"
|
||||||
actions: "Actions"
|
actions: "Actions"
|
||||||
empty: "There are not changes logged"
|
empty: "There are not changes logged"
|
||||||
trackers:
|
|
||||||
index:
|
|
||||||
title: Trackers
|
|
||||||
name: Name
|
|
||||||
email: Email
|
|
||||||
description: Description
|
|
||||||
no_description: No description
|
|
||||||
no_trackers: There are no trackers.
|
|
||||||
tracker:
|
|
||||||
add: "Add to trackers"
|
|
||||||
form:
|
|
||||||
update: Update Tracker
|
|
||||||
updated: "Tracker updated succesfully."
|
|
||||||
edit_title: "Trackers: Edit tracker"
|
|
||||||
show:
|
|
||||||
email: Email
|
|
||||||
description: Description
|
|
||||||
no_description: No description.
|
|
||||||
search:
|
|
||||||
title: Trackers
|
|
||||||
progress_bars:
|
|
||||||
index:
|
|
||||||
title: "Progress bars"
|
|
||||||
local_census_records:
|
local_census_records:
|
||||||
index:
|
index:
|
||||||
title: Manage local census
|
title: Manage local census
|
||||||
|
|||||||
@@ -255,7 +255,6 @@ en:
|
|||||||
other: You have %{count} new notifications
|
other: You have %{count} new notifications
|
||||||
notifications: Notifications
|
notifications: Notifications
|
||||||
no_notifications: "You don't have new notifications"
|
no_notifications: "You don't have new notifications"
|
||||||
tracking: "Tracking"
|
|
||||||
admin:
|
admin:
|
||||||
watch_form_message: "You have unsaved changes. Do you confirm to leave the page?"
|
watch_form_message: "You have unsaved changes. Do you confirm to leave the page?"
|
||||||
notifications:
|
notifications:
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
en:
|
|
||||||
tracking:
|
|
||||||
header:
|
|
||||||
title: Tracking
|
|
||||||
menu:
|
|
||||||
title: Tracking
|
|
||||||
budgets: Participatory budgets
|
|
||||||
budgets:
|
|
||||||
index:
|
|
||||||
title: Participatory budgets
|
|
||||||
table_name: Name
|
|
||||||
table_phase: Phase
|
|
||||||
table_assigned_investments_tracking_open: Investment projects assigned with tracking open
|
|
||||||
table_actions: Actions
|
|
||||||
tracking: Tracking
|
|
||||||
no_budgets: "There are no budgets"
|
|
||||||
budget_investments:
|
|
||||||
index:
|
|
||||||
assigned_to: "Assigned to %{tracker}"
|
|
||||||
title: Investment projects
|
|
||||||
edit: Edit milestones
|
|
||||||
table_id: ID
|
|
||||||
table_title: Title
|
|
||||||
table_heading_name: Heading name
|
|
||||||
table_actions: Actions
|
|
||||||
no_investments: "There are no investment projects."
|
|
||||||
show:
|
|
||||||
title: Investment project
|
|
||||||
info: Author info
|
|
||||||
by: Sent by
|
|
||||||
sent: Sent at
|
|
||||||
heading: Heading
|
|
||||||
undefined: "Undefined"
|
|
||||||
responsibles: Responsibles
|
|
||||||
assigned_admin: Assigned admin
|
|
||||||
milestones:
|
|
||||||
index:
|
|
||||||
table_id: "ID"
|
|
||||||
table_title: "Title"
|
|
||||||
table_description: "Description"
|
|
||||||
table_publication_date: "Publication date"
|
|
||||||
table_status: Status
|
|
||||||
table_actions: "Actions"
|
|
||||||
delete: "Delete milestone"
|
|
||||||
no_milestones: "Don't have defined milestones"
|
|
||||||
image: "Image"
|
|
||||||
show_image: "Show image"
|
|
||||||
documents: "Documents"
|
|
||||||
milestone: Milestone
|
|
||||||
new_milestone: Create new milestone
|
|
||||||
form:
|
|
||||||
admin_statuses: Manage statuses
|
|
||||||
no_statuses_defined: There are no defined statuses yet
|
|
||||||
new:
|
|
||||||
creating: Create milestone
|
|
||||||
edit:
|
|
||||||
title: Edit milestone
|
|
||||||
create:
|
|
||||||
notice: New milestone created successfully!
|
|
||||||
update:
|
|
||||||
notice: Milestone updated successfully
|
|
||||||
delete:
|
|
||||||
notice: Milestone successfully deleted
|
|
||||||
progress_bars:
|
|
||||||
manage: "Manage progress bars"
|
|
||||||
index:
|
|
||||||
title: "Progress bars"
|
|
||||||
no_progress_bars: "There are no progress bars"
|
|
||||||
new_progress_bar: "Create new progress bar"
|
|
||||||
primary: "Primary progress bar"
|
|
||||||
table_id: "ID"
|
|
||||||
table_kind: "Type"
|
|
||||||
table_title: "Title"
|
|
||||||
table_percentage: "Current progress"
|
|
||||||
new:
|
|
||||||
creating: "Create progress bar"
|
|
||||||
edit:
|
|
||||||
title:
|
|
||||||
primary: "Edit primary progress bar"
|
|
||||||
secondary: "Edit progress bar %{title}"
|
|
||||||
create:
|
|
||||||
notice: "Progress bar created successfully!"
|
|
||||||
update:
|
|
||||||
notice: "Progress bar updated successfully"
|
|
||||||
delete:
|
|
||||||
notice: "Progress bar deleted successfully"
|
|
||||||
trackers:
|
|
||||||
budget_investments:
|
|
||||||
show:
|
|
||||||
assigned_trackers: "Assigned trackers"
|
|
||||||
@@ -102,13 +102,8 @@ es:
|
|||||||
zero: "Seleccionar evaluadores"
|
zero: "Seleccionar evaluadores"
|
||||||
one: "1 evaluador seleccionado"
|
one: "1 evaluador seleccionado"
|
||||||
other: "%{count} evaluadores seleccionados"
|
other: "%{count} evaluadores seleccionados"
|
||||||
trackers:
|
|
||||||
zero: "Seleccionar gestores de seguimiento"
|
|
||||||
one: "1 gestor de seguimiento seleccionado"
|
|
||||||
other: "%{count} gestores de seguimiento seleccionados"
|
|
||||||
empty_administrators: "No hay administradores"
|
empty_administrators: "No hay administradores"
|
||||||
empty_valuators: "No hay evaluadores"
|
empty_valuators: "No hay evaluadores"
|
||||||
empty_trackers: "No hay gestores de seguimiento"
|
|
||||||
destroy:
|
destroy:
|
||||||
success_notice: Presupuesto eliminado correctamente
|
success_notice: Presupuesto eliminado correctamente
|
||||||
unable_notice: No se puede eliminar un presupuesto con proyectos asociados
|
unable_notice: No se puede eliminar un presupuesto con proyectos asociados
|
||||||
@@ -254,7 +249,6 @@ es:
|
|||||||
"false": "No"
|
"false": "No"
|
||||||
valuator_groups: "Grupos de evaluadores"
|
valuator_groups: "Grupos de evaluadores"
|
||||||
preview: Vista previa
|
preview: Vista previa
|
||||||
assigned_trackers: "Gestores de seguimiento asignados"
|
|
||||||
edit:
|
edit:
|
||||||
classification: Clasificación
|
classification: Clasificación
|
||||||
compatibility: Compatibilidad
|
compatibility: Compatibilidad
|
||||||
@@ -265,11 +259,36 @@ es:
|
|||||||
user_tags: Etiquetas asignadas por el usuario
|
user_tags: Etiquetas asignadas por el usuario
|
||||||
tags_placeholder: "Escribe las etiquetas que desees separadas por comas (,)"
|
tags_placeholder: "Escribe las etiquetas que desees separadas por comas (,)"
|
||||||
undefined: Sin definir
|
undefined: Sin definir
|
||||||
assigned_trackers: "Gestores de seguimiento"
|
|
||||||
search_unfeasible: Buscar inviables
|
search_unfeasible: Buscar inviables
|
||||||
milestones:
|
milestones:
|
||||||
index:
|
index:
|
||||||
|
table_id: "ID"
|
||||||
|
table_title: "Título"
|
||||||
|
table_description: "Descripción"
|
||||||
|
table_publication_date: "Fecha de publicación"
|
||||||
|
table_status: Estado
|
||||||
|
table_actions: "Acciones"
|
||||||
|
delete: "Eliminar hito"
|
||||||
|
no_milestones: "No hay hitos definidos"
|
||||||
|
image: "Imagen"
|
||||||
|
show_image: "Mostrar imagen"
|
||||||
|
documents: "Documentos"
|
||||||
|
milestone: Seguimiento
|
||||||
|
new_milestone: Crear nuevo hito
|
||||||
milestone_tags: Etiquetas de Seguimiento
|
milestone_tags: Etiquetas de Seguimiento
|
||||||
|
form:
|
||||||
|
admin_statuses: Gestionar estados
|
||||||
|
no_statuses_defined: No hay estados definidos
|
||||||
|
new:
|
||||||
|
creating: Crear hito
|
||||||
|
edit:
|
||||||
|
title: Editar hito
|
||||||
|
create:
|
||||||
|
notice: "¡Nuevo hito creado con éxito!"
|
||||||
|
update:
|
||||||
|
notice: Hito actualizado
|
||||||
|
delete:
|
||||||
|
notice: Hito borrado correctamente
|
||||||
statuses:
|
statuses:
|
||||||
index:
|
index:
|
||||||
title: Estados de seguimiento
|
title: Estados de seguimiento
|
||||||
@@ -675,7 +694,6 @@ es:
|
|||||||
title_booths: Urnas de votación
|
title_booths: Urnas de votación
|
||||||
legislation: Legislación colaborativa
|
legislation: Legislación colaborativa
|
||||||
users: Usuarios
|
users: Usuarios
|
||||||
trackers: "Gestores de seguimiento"
|
|
||||||
dashboard: Panel de progreso de propuestas
|
dashboard: Panel de progreso de propuestas
|
||||||
administrator_tasks: Recursos solicitados
|
administrator_tasks: Recursos solicitados
|
||||||
dashboard_actions: Recursos y acciones
|
dashboard_actions: Recursos y acciones
|
||||||
@@ -1574,29 +1592,6 @@ es:
|
|||||||
edited_by: "Editado por"
|
edited_by: "Editado por"
|
||||||
actions: "Acciones"
|
actions: "Acciones"
|
||||||
empty: "No hay cambios registrados"
|
empty: "No hay cambios registrados"
|
||||||
trackers:
|
|
||||||
index:
|
|
||||||
title: Gestores de seguimiento
|
|
||||||
name: Nombre
|
|
||||||
email: Email
|
|
||||||
description: Descripción
|
|
||||||
no_description: Sin descripción
|
|
||||||
no_trackers: No hay gestores de seguimiento.
|
|
||||||
tracker:
|
|
||||||
add: "Añadir a gestores de seguimiento"
|
|
||||||
form:
|
|
||||||
update: "Actualizar gestor"
|
|
||||||
updated: "Gestor de seguimiento actualizado correctamente."
|
|
||||||
edit_title: "Gestores de seguimiento: Editar gestor"
|
|
||||||
show:
|
|
||||||
email: Email
|
|
||||||
description: Descripción
|
|
||||||
no_description: Sin descripción.
|
|
||||||
search:
|
|
||||||
title: Trackers
|
|
||||||
progress_bars:
|
|
||||||
index:
|
|
||||||
title: "Barras de progreso"
|
|
||||||
local_census_records:
|
local_census_records:
|
||||||
index:
|
index:
|
||||||
title: Gestionar censo local
|
title: Gestionar censo local
|
||||||
|
|||||||
@@ -255,7 +255,6 @@ es:
|
|||||||
other: Tienes %{count} notificaciones nuevas
|
other: Tienes %{count} notificaciones nuevas
|
||||||
notifications: Notificaciones
|
notifications: Notificaciones
|
||||||
no_notifications: "No tienes notificaciones nuevas"
|
no_notifications: "No tienes notificaciones nuevas"
|
||||||
tracking: "Seguimiento"
|
|
||||||
admin:
|
admin:
|
||||||
watch_form_message: "Has realizado cambios que no han sido guardados. ¿Seguro que quieres abandonar la página?"
|
watch_form_message: "Has realizado cambios que no han sido guardados. ¿Seguro que quieres abandonar la página?"
|
||||||
notifications:
|
notifications:
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
es:
|
|
||||||
tracking:
|
|
||||||
header:
|
|
||||||
title: Seguimiento
|
|
||||||
menu:
|
|
||||||
title: Seguimiento
|
|
||||||
budgets: Presupuestos participativos
|
|
||||||
budgets:
|
|
||||||
index:
|
|
||||||
title: Presupuestos participativos
|
|
||||||
table_name: Nombre
|
|
||||||
table_phase: Fase
|
|
||||||
table_assigned_investments_tracking_open: Prop. Inv. asignadas en segumiento
|
|
||||||
table_actions: Acciones
|
|
||||||
tracking: Seguimiento
|
|
||||||
no_budgets: "No hay presupuestos"
|
|
||||||
budget_investments:
|
|
||||||
index:
|
|
||||||
assigned_to: "Asignadas a %{tracker}"
|
|
||||||
title: Proyectos de gasto
|
|
||||||
edit: Editar seguimiento
|
|
||||||
table_id: ID
|
|
||||||
table_title: Título
|
|
||||||
table_heading_name: Nombre de la partida
|
|
||||||
table_actions: Acciones
|
|
||||||
no_investments: "No hay proyectos de gasto."
|
|
||||||
show:
|
|
||||||
title: Proyecto de gasto
|
|
||||||
info: Datos de envío
|
|
||||||
by: Enviada por
|
|
||||||
sent: Fecha de creación
|
|
||||||
heading: Partida
|
|
||||||
undefined: Sin definir
|
|
||||||
responsibles: Responsables
|
|
||||||
assigned_admin: Administrador asignado
|
|
||||||
milestones:
|
|
||||||
index:
|
|
||||||
table_id: "ID"
|
|
||||||
table_title: "Título"
|
|
||||||
table_description: "Descripción"
|
|
||||||
table_publication_date: "Fecha de publicación"
|
|
||||||
table_status: Estado
|
|
||||||
table_actions: "Acciones"
|
|
||||||
delete: "Eliminar hito"
|
|
||||||
no_milestones: "No hay hitos definidos"
|
|
||||||
image: "Imagen"
|
|
||||||
show_image: "Mostrar imagen"
|
|
||||||
documents: "Documentos"
|
|
||||||
milestone: Seguimiento
|
|
||||||
new_milestone: Crear nuevo hito
|
|
||||||
form:
|
|
||||||
admin_statuses: Gestionar estados
|
|
||||||
no_statuses_defined: No hay estados definidos
|
|
||||||
new:
|
|
||||||
creating: Crear hito
|
|
||||||
edit:
|
|
||||||
title: Editar hito
|
|
||||||
create:
|
|
||||||
notice: "¡Nuevo hito creado con éxito!"
|
|
||||||
update:
|
|
||||||
notice: Hito actualizado
|
|
||||||
delete:
|
|
||||||
notice: Hito borrado correctamente
|
|
||||||
progress_bars:
|
|
||||||
manage: "Gestionar barras de progreso"
|
|
||||||
index:
|
|
||||||
title: "Barras de progreso"
|
|
||||||
no_progress_bars: "No hay barras de progreso"
|
|
||||||
new_progress_bar: "Crear nueva barra de progreso"
|
|
||||||
primary: "Barra de progreso principal"
|
|
||||||
table_id: "ID"
|
|
||||||
table_kind: "Tipo"
|
|
||||||
table_title: "Título"
|
|
||||||
table_percentage: "Progreso"
|
|
||||||
new:
|
|
||||||
creating: "Crear barra de progreso"
|
|
||||||
edit:
|
|
||||||
title:
|
|
||||||
primary: "Editar barra de progreso principal"
|
|
||||||
secondary: "Editar barra de progreso %{title}"
|
|
||||||
create:
|
|
||||||
notice: "¡Barra de progreso creada con éxito!"
|
|
||||||
update:
|
|
||||||
notice: "Barra de progreso actualizada"
|
|
||||||
delete:
|
|
||||||
notice: "Barra de progreso eliminada correctamente"
|
|
||||||
trackers:
|
|
||||||
budget_investments:
|
|
||||||
show:
|
|
||||||
assigned_trackers: "Gestores de seguimiento asignados"
|
|
||||||
@@ -24,7 +24,6 @@ Rails.application.routes.draw do
|
|||||||
draw :tag
|
draw :tag
|
||||||
draw :user
|
draw :user
|
||||||
draw :valuation
|
draw :valuation
|
||||||
draw :tracking
|
|
||||||
draw :verification
|
draw :verification
|
||||||
|
|
||||||
root "welcome#index"
|
root "welcome#index"
|
||||||
|
|||||||
@@ -62,6 +62,9 @@ namespace :admin do
|
|||||||
|
|
||||||
resources :budget_investments, only: [:index, :show, :edit, :update] do
|
resources :budget_investments, only: [:index, :show, :edit, :update] do
|
||||||
member { patch :toggle_selection }
|
member { patch :toggle_selection }
|
||||||
|
|
||||||
|
resources :milestones, controller: "budget_investment_milestones"
|
||||||
|
resources :progress_bars, except: :show, controller: "budget_investment_progress_bars"
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :budget_phases, only: [:edit, :update]
|
resources :budget_phases, only: [:edit, :update]
|
||||||
@@ -103,11 +106,6 @@ namespace :admin do
|
|||||||
get :summary, on: :collection
|
get :summary, on: :collection
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :trackers, only: [:show, :index, :edit, :update, :create, :destroy] do
|
|
||||||
get :search, on: :collection
|
|
||||||
get :summary, on: :collection
|
|
||||||
end
|
|
||||||
|
|
||||||
resources :valuator_groups
|
resources :valuator_groups
|
||||||
|
|
||||||
resources :managers, only: [:index, :create, :destroy] do
|
resources :managers, only: [:index, :create, :destroy] do
|
||||||
@@ -210,7 +208,8 @@ namespace :admin do
|
|||||||
member { patch :toggle_selection }
|
member { patch :toggle_selection }
|
||||||
end
|
end
|
||||||
resources :draft_versions
|
resources :draft_versions
|
||||||
resources :milestones, only: :index
|
resources :milestones
|
||||||
|
resources :progress_bars, except: :show
|
||||||
resource :homepage, only: [:edit, :update]
|
resource :homepage, only: [:edit, :update]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
namespace :tracking do
|
|
||||||
root to: "budgets#index"
|
|
||||||
|
|
||||||
resources :budgets, only: :index do
|
|
||||||
resources :budget_investments, only: [:index, :show, :edit] do
|
|
||||||
resources :milestones, controller: "budget_investment_milestones"
|
|
||||||
resources :progress_bars, except: :show, controller: "budget_investment_progress_bars"
|
|
||||||
patch :track, on: :member
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
resources :proposals, only: [:index, :show] do
|
|
||||||
resources :milestones, controller: "proposal_milestones"
|
|
||||||
resources :progress_bars, except: :show, controller: "proposal_progress_bars"
|
|
||||||
end
|
|
||||||
|
|
||||||
namespace :legislation do
|
|
||||||
resources :processes, only: [:index, :show] do
|
|
||||||
resources :milestones
|
|
||||||
resources :progress_bars, except: :show
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
12
db/migrate/20191101183155_remove_trackers.rb
Normal file
12
db/migrate/20191101183155_remove_trackers.rb
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
class RemoveTrackers < ActiveRecord::Migration[5.0]
|
||||||
|
def up
|
||||||
|
remove_column :budget_investments, :tracker_assignments_count, :integer
|
||||||
|
drop_table :budget_tracker_assignments
|
||||||
|
drop_table :budget_trackers
|
||||||
|
drop_table :trackers
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
fail ActiveRecord::IrreversibleMigration
|
||||||
|
end
|
||||||
|
end
|
||||||
34
db/schema.rb
34
db/schema.rb
@@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20191031210734) do
|
ActiveRecord::Schema.define(version: 20191101183155) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
@@ -297,7 +297,6 @@ ActiveRecord::Schema.define(version: 20191031210734) do
|
|||||||
t.datetime "confirmed_hide_at"
|
t.datetime "confirmed_hide_at"
|
||||||
t.datetime "ignored_flag_at"
|
t.datetime "ignored_flag_at"
|
||||||
t.integer "flags_count", default: 0
|
t.integer "flags_count", default: 0
|
||||||
t.integer "tracker_assignments_count"
|
|
||||||
t.integer "original_heading_id"
|
t.integer "original_heading_id"
|
||||||
t.index ["administrator_id"], name: "index_budget_investments_on_administrator_id", using: :btree
|
t.index ["administrator_id"], name: "index_budget_investments_on_administrator_id", using: :btree
|
||||||
t.index ["author_id"], name: "index_budget_investments_on_author_id", using: :btree
|
t.index ["author_id"], name: "index_budget_investments_on_author_id", using: :btree
|
||||||
@@ -340,24 +339,6 @@ ActiveRecord::Schema.define(version: 20191031210734) do
|
|||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "budget_tracker_assignments", force: :cascade do |t|
|
|
||||||
t.integer "tracker_id"
|
|
||||||
t.integer "investment_id"
|
|
||||||
t.datetime "created_at", null: false
|
|
||||||
t.datetime "updated_at", null: false
|
|
||||||
t.index ["investment_id"], name: "index_budget_tracker_assignments_on_investment_id", using: :btree
|
|
||||||
t.index ["tracker_id"], name: "index_budget_tracker_assignments_on_tracker_id", using: :btree
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "budget_trackers", force: :cascade do |t|
|
|
||||||
t.integer "budget_id"
|
|
||||||
t.integer "tracker_id"
|
|
||||||
t.datetime "created_at", null: false
|
|
||||||
t.datetime "updated_at", null: false
|
|
||||||
t.index ["budget_id"], name: "index_budget_trackers_on_budget_id", using: :btree
|
|
||||||
t.index ["tracker_id"], name: "index_budget_trackers_on_tracker_id", using: :btree
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "budget_translations", force: :cascade do |t|
|
create_table "budget_translations", force: :cascade do |t|
|
||||||
t.integer "budget_id", null: false
|
t.integer "budget_id", null: false
|
||||||
t.string "locale", null: false
|
t.string "locale", null: false
|
||||||
@@ -1504,15 +1485,6 @@ ActiveRecord::Schema.define(version: 20191031210734) do
|
|||||||
t.index ["hidden_at"], name: "index_topics_on_hidden_at", using: :btree
|
t.index ["hidden_at"], name: "index_topics_on_hidden_at", using: :btree
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "trackers", force: :cascade do |t|
|
|
||||||
t.integer "user_id"
|
|
||||||
t.string "description"
|
|
||||||
t.integer "budget_investment_count", default: 0
|
|
||||||
t.datetime "created_at", null: false
|
|
||||||
t.datetime "updated_at", null: false
|
|
||||||
t.index ["user_id"], name: "index_trackers_on_user_id", using: :btree
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "users", force: :cascade do |t|
|
create_table "users", force: :cascade do |t|
|
||||||
t.string "email", default: ""
|
t.string "email", default: ""
|
||||||
t.string "encrypted_password", default: "", null: false
|
t.string "encrypted_password", default: "", null: false
|
||||||
@@ -1700,9 +1672,6 @@ ActiveRecord::Schema.define(version: 20191031210734) do
|
|||||||
add_foreign_key "budget_administrators", "administrators"
|
add_foreign_key "budget_administrators", "administrators"
|
||||||
add_foreign_key "budget_administrators", "budgets"
|
add_foreign_key "budget_administrators", "budgets"
|
||||||
add_foreign_key "budget_investments", "communities"
|
add_foreign_key "budget_investments", "communities"
|
||||||
add_foreign_key "budget_tracker_assignments", "trackers"
|
|
||||||
add_foreign_key "budget_trackers", "budgets"
|
|
||||||
add_foreign_key "budget_trackers", "trackers"
|
|
||||||
add_foreign_key "budget_valuators", "budgets"
|
add_foreign_key "budget_valuators", "budgets"
|
||||||
add_foreign_key "budget_valuators", "valuators"
|
add_foreign_key "budget_valuators", "valuators"
|
||||||
add_foreign_key "dashboard_administrator_tasks", "users"
|
add_foreign_key "dashboard_administrator_tasks", "users"
|
||||||
@@ -1743,7 +1712,6 @@ ActiveRecord::Schema.define(version: 20191031210734) do
|
|||||||
add_foreign_key "proposals", "communities"
|
add_foreign_key "proposals", "communities"
|
||||||
add_foreign_key "related_content_scores", "related_contents"
|
add_foreign_key "related_content_scores", "related_contents"
|
||||||
add_foreign_key "related_content_scores", "users"
|
add_foreign_key "related_content_scores", "users"
|
||||||
add_foreign_key "trackers", "users"
|
|
||||||
add_foreign_key "users", "geozones"
|
add_foreign_key "users", "geozones"
|
||||||
add_foreign_key "valuators", "users"
|
add_foreign_key "valuators", "users"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -98,10 +98,6 @@ FactoryBot.define do
|
|||||||
user
|
user
|
||||||
end
|
end
|
||||||
|
|
||||||
factory :tracker do
|
|
||||||
user
|
|
||||||
end
|
|
||||||
|
|
||||||
factory :valuator do
|
factory :valuator do
|
||||||
user
|
user
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -245,9 +245,8 @@ describe "Admin budgets" do
|
|||||||
scenario "Deselect all selected staff", :js do
|
scenario "Deselect all selected staff", :js do
|
||||||
admin = Administrator.first
|
admin = Administrator.first
|
||||||
valuator = create(:valuator)
|
valuator = create(:valuator)
|
||||||
tracker = create(:tracker)
|
|
||||||
|
|
||||||
budget = create(:budget, administrators: [admin], valuators: [valuator], trackers: [tracker])
|
budget = create(:budget, administrators: [admin], valuators: [valuator])
|
||||||
|
|
||||||
visit edit_admin_budget_path(budget)
|
visit edit_admin_budget_path(budget)
|
||||||
click_link "1 administrator selected"
|
click_link "1 administrator selected"
|
||||||
@@ -260,17 +259,11 @@ describe "Admin budgets" do
|
|||||||
|
|
||||||
expect(page).to have_link "Select valuators"
|
expect(page).to have_link "Select valuators"
|
||||||
|
|
||||||
click_link "1 tracker selected"
|
|
||||||
uncheck tracker.name
|
|
||||||
|
|
||||||
expect(page).to have_link "Select trackers"
|
|
||||||
|
|
||||||
click_button "Update Budget"
|
click_button "Update Budget"
|
||||||
visit edit_admin_budget_path(budget)
|
visit edit_admin_budget_path(budget)
|
||||||
|
|
||||||
expect(page).to have_link "Select administrators"
|
expect(page).to have_link "Select administrators"
|
||||||
expect(page).to have_link "Select valuators"
|
expect(page).to have_link "Select valuators"
|
||||||
expect(page).to have_link "Select trackers"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -356,7 +356,7 @@ describe "Admin edit translatable records" do
|
|||||||
let(:translatable) { create(:milestone) }
|
let(:translatable) { create(:milestone) }
|
||||||
|
|
||||||
scenario "Shows an error message" do
|
scenario "Shows an error message" do
|
||||||
visit edit_tracking_budget_budget_investment_milestone_path(*resource_hierarchy_for(translatable))
|
visit edit_admin_budget_budget_investment_milestone_path(*resource_hierarchy_for(translatable))
|
||||||
|
|
||||||
click_link "Remove language"
|
click_link "Remove language"
|
||||||
click_link "Remove language"
|
click_link "Remove language"
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ describe "Poll Officing" do
|
|||||||
expect(page).not_to have_link("Moderation")
|
expect(page).not_to have_link("Moderation")
|
||||||
end
|
end
|
||||||
|
|
||||||
xscenario "Officing dashboard" do
|
scenario "Officing dashboard" do
|
||||||
create(:poll_officer, user: user)
|
create(:poll_officer, user: user)
|
||||||
create(:poll)
|
create(:poll)
|
||||||
login_as(user)
|
login_as(user)
|
||||||
|
|||||||
@@ -1,351 +0,0 @@
|
|||||||
require "rails_helper"
|
|
||||||
|
|
||||||
describe "Valuation budget investments" do
|
|
||||||
let(:budget) { create(:budget) }
|
|
||||||
let(:tracker) do
|
|
||||||
create(:tracker, user: create(:user, username: "Rachel", email: "rachel@trackers.org"))
|
|
||||||
end
|
|
||||||
|
|
||||||
before do
|
|
||||||
login_as(tracker.user)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "Disabled with a feature flag" do
|
|
||||||
Setting["process.budgets"] = nil
|
|
||||||
expect do
|
|
||||||
visit tracking_budget_budget_investments_path(create(:budget))
|
|
||||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "Display link to tracking section" do
|
|
||||||
visit root_path
|
|
||||||
expect(page).to have_link "Tracking", href: tracking_root_path
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "Index" do
|
|
||||||
scenario "Index shows budget investments assigned to current tracker" do
|
|
||||||
investment1 = create(:budget_investment, budget: budget)
|
|
||||||
investment2 = create(:budget_investment, budget: budget)
|
|
||||||
|
|
||||||
investment1.trackers << tracker
|
|
||||||
|
|
||||||
visit tracking_budget_budget_investments_path(budget)
|
|
||||||
|
|
||||||
expect(page).to have_content(investment1.title)
|
|
||||||
expect(page).not_to have_content(investment2.title)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "Index shows no budget investment to admins no trackers" do
|
|
||||||
investment1 = create(:budget_investment, budget: budget)
|
|
||||||
investment2 = create(:budget_investment, budget: budget)
|
|
||||||
|
|
||||||
investment1.trackers << tracker
|
|
||||||
|
|
||||||
logout
|
|
||||||
login_as create(:administrator).user
|
|
||||||
visit tracking_budget_budget_investments_path(budget)
|
|
||||||
|
|
||||||
expect(page).not_to have_content(investment1.title)
|
|
||||||
expect(page).not_to have_content(investment2.title)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "Index displays investments paginated" do
|
|
||||||
per_page = Kaminari.config.default_per_page
|
|
||||||
(per_page + 2).times do
|
|
||||||
investment = create(:budget_investment, budget: budget)
|
|
||||||
investment.trackers << tracker
|
|
||||||
end
|
|
||||||
|
|
||||||
visit tracking_budget_budget_investments_path(budget)
|
|
||||||
|
|
||||||
expect(page).to have_css(".budget_investment", count: per_page)
|
|
||||||
within("ul.pagination") do
|
|
||||||
expect(page).to have_content("1")
|
|
||||||
expect(page).to have_content("2")
|
|
||||||
expect(page).not_to have_content("3")
|
|
||||||
click_link "Next", exact: false
|
|
||||||
end
|
|
||||||
|
|
||||||
expect(page).to have_css(".budget_investment", count: 2)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "headings" do
|
|
||||||
investment1 = create(:budget_investment,
|
|
||||||
budget: budget,
|
|
||||||
title: "investment 1",
|
|
||||||
heading: create(:budget_heading, name: "first_heading"))
|
|
||||||
investment2 = create(:budget_investment,
|
|
||||||
budget: budget, title: "investment 2",
|
|
||||||
heading: create(:budget_heading, name: "last_heading"))
|
|
||||||
create(:budget_investment,
|
|
||||||
budget: budget,
|
|
||||||
title: "investment 3",
|
|
||||||
heading: create(:budget_heading, name: "no_heading"))
|
|
||||||
|
|
||||||
investment1.trackers << tracker
|
|
||||||
investment2.trackers << tracker
|
|
||||||
|
|
||||||
visit tracking_budget_budget_investments_path(budget)
|
|
||||||
|
|
||||||
expect(page).to have_link("All headings (2)")
|
|
||||||
expect(page).to have_link("last_heading (1)")
|
|
||||||
expect(page).to have_link("first_heading (1)")
|
|
||||||
expect(page).not_to have_link("no_heading (1)")
|
|
||||||
|
|
||||||
expect(page).to have_content("investment 1")
|
|
||||||
expect(page).to have_content("investment 2")
|
|
||||||
expect(page).not_to have_content("investment 3")
|
|
||||||
|
|
||||||
expect(page.find(".select-heading .is-active")).to have_content("All headings")
|
|
||||||
|
|
||||||
click_on "last_heading (1)"
|
|
||||||
|
|
||||||
expect(page.find(".select-heading .is-active")).to have_content("last_heading (1)")
|
|
||||||
expect(page).not_to have_content("investment 1")
|
|
||||||
expect(page).to have_content("investment 2")
|
|
||||||
expect(page).not_to have_content("investment 3")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "Show" do
|
|
||||||
let(:administrator) do
|
|
||||||
create(:administrator, user: create(:user, username: "Ana", email: "ana@admins.org"))
|
|
||||||
end
|
|
||||||
let(:second_tracker) do
|
|
||||||
create(:tracker, user: create(:user, username: "Rick", email: "rick@trackers.org"))
|
|
||||||
end
|
|
||||||
let(:investment) do
|
|
||||||
create(:budget_investment, budget: budget, administrator: administrator)
|
|
||||||
end
|
|
||||||
|
|
||||||
before do
|
|
||||||
investment.trackers << [tracker, second_tracker]
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "visible for assigned trackers" do
|
|
||||||
visit tracking_budget_budget_investments_path(budget)
|
|
||||||
|
|
||||||
click_link investment.title
|
|
||||||
|
|
||||||
expect(page).to have_content(investment.title)
|
|
||||||
expect(page).to have_content(investment.description)
|
|
||||||
expect(page).to have_content(investment.author.name)
|
|
||||||
expect(page).to have_content(investment.heading.name)
|
|
||||||
|
|
||||||
within("#assigned_trackers") do
|
|
||||||
expect(page).to have_content("Rachel (rachel@trackers.org)")
|
|
||||||
expect(page).to have_content("Rick (rick@trackers.org)")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "visible for admins" do
|
|
||||||
logout
|
|
||||||
login_as create(:administrator).user
|
|
||||||
|
|
||||||
visit tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content(investment.title)
|
|
||||||
expect(page).to have_content(investment.description)
|
|
||||||
expect(page).to have_content(investment.author.name)
|
|
||||||
expect(page).to have_content(investment.heading.name)
|
|
||||||
expect(page).to have_content("Ana (ana@admins.org)")
|
|
||||||
|
|
||||||
within("#assigned_trackers") do
|
|
||||||
expect(page).to have_content("Rachel (rachel@trackers.org)")
|
|
||||||
expect(page).to have_content("Rick (rick@trackers.org)")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "not visible for not assigned trackers" do
|
|
||||||
logout
|
|
||||||
login_as create(:tracker).user
|
|
||||||
|
|
||||||
expect do
|
|
||||||
visit tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
end.to raise_error "Not Found"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "Milestones" do
|
|
||||||
let(:admin) { create(:administrator) }
|
|
||||||
let(:investment) do
|
|
||||||
create(:budget_investment, budget: budget, administrator: admin)
|
|
||||||
end
|
|
||||||
|
|
||||||
before do
|
|
||||||
investment.trackers << tracker
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "visit investment manage milestones" do
|
|
||||||
visit tracking_budget_budget_investments_path(budget)
|
|
||||||
|
|
||||||
click_link "Edit milestones"
|
|
||||||
|
|
||||||
expect(page).to have_content("Milestone")
|
|
||||||
expect(page).to have_content(investment.title)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "create investment milestones" do
|
|
||||||
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Milestone")
|
|
||||||
expect(page).to have_content(investment.title)
|
|
||||||
|
|
||||||
click_link "Create new milestone"
|
|
||||||
|
|
||||||
expect(page).to have_content("Create milestone")
|
|
||||||
fill_in("Description", with: "Test Description")
|
|
||||||
page.find("#milestone_publication_date").set(Date.current)
|
|
||||||
|
|
||||||
click_button "Create milestone"
|
|
||||||
|
|
||||||
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Test Description")
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "delete investment milestones" do
|
|
||||||
milestone = create(:milestone,
|
|
||||||
milestoneable: investment,
|
|
||||||
description: "Test delete milestone")
|
|
||||||
|
|
||||||
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Test delete milestone")
|
|
||||||
|
|
||||||
page.find("#milestone_#{milestone.id}").click_link("Delete milestone")
|
|
||||||
|
|
||||||
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).not_to have_content("Test delete milestone")
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "edit investment milestones" do
|
|
||||||
milestone = create(:milestone, milestoneable: investment, description: "Test edit milestone")
|
|
||||||
|
|
||||||
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Test edit milestone")
|
|
||||||
|
|
||||||
page.find("#milestone_#{milestone.id}").first("a").click
|
|
||||||
|
|
||||||
expect(page).to have_content("Edit milestone")
|
|
||||||
expect(page).to have_content("Test edit milestone")
|
|
||||||
fill_in("Description", with: "Test edited milestone")
|
|
||||||
|
|
||||||
click_button "Update milestone"
|
|
||||||
|
|
||||||
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).not_to have_content("Test edit milestone")
|
|
||||||
expect(page).to have_content("Test edited milestone")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "Progress Bars" do
|
|
||||||
let(:admin) { create(:administrator) }
|
|
||||||
let(:investment) do
|
|
||||||
create(:budget_investment, budget: budget, administrator: admin)
|
|
||||||
end
|
|
||||||
|
|
||||||
before do
|
|
||||||
investment.trackers << tracker
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "view index" do
|
|
||||||
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
||||||
|
|
||||||
click_link "Manage progress bars"
|
|
||||||
|
|
||||||
expect(page).to have_content("Progress bars")
|
|
||||||
|
|
||||||
logout
|
|
||||||
login_as create(:tracker, user: create(:user)).user
|
|
||||||
|
|
||||||
expect do
|
|
||||||
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
||||||
end.to raise_error "Not Found"
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "create primary progress bar" do
|
|
||||||
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Progress bars")
|
|
||||||
|
|
||||||
click_link "Create new progress bar"
|
|
||||||
|
|
||||||
expect(page).to have_content("Create progress bar")
|
|
||||||
|
|
||||||
select("Primary", from: "Type")
|
|
||||||
fill_in("Current progress", with: 50)
|
|
||||||
|
|
||||||
click_button "Create Progress bar"
|
|
||||||
|
|
||||||
expect(page).to have_content("Progress bars")
|
|
||||||
|
|
||||||
expect(page).to have_content("Primary")
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "create secondary progress bar" do
|
|
||||||
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Progress bars")
|
|
||||||
|
|
||||||
click_link "Create new progress bar"
|
|
||||||
|
|
||||||
expect(page).to have_content("Create progress bar")
|
|
||||||
|
|
||||||
select("Secondary", from: "Type")
|
|
||||||
fill_in("Title", with: "secondary_progress_bar")
|
|
||||||
fill_in("Current progress", with: 50)
|
|
||||||
|
|
||||||
click_button "Create Progress bar"
|
|
||||||
|
|
||||||
expect(page).to have_content("Progress bars")
|
|
||||||
|
|
||||||
expect(page).to have_content("secondary_progress_bar")
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "delete" do
|
|
||||||
create(:progress_bar, progressable: investment)
|
|
||||||
secondary_progress_bar = create(:progress_bar,
|
|
||||||
:secondary,
|
|
||||||
title: "to delete",
|
|
||||||
progressable: investment)
|
|
||||||
|
|
||||||
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Primary")
|
|
||||||
expect(page).to have_content(secondary_progress_bar.title)
|
|
||||||
|
|
||||||
page.find("#progress_bar_#{secondary_progress_bar.id}").click_link("Delete")
|
|
||||||
|
|
||||||
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Primary")
|
|
||||||
expect(page).not_to have_content(secondary_progress_bar.title)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "edit" do
|
|
||||||
create(:progress_bar, progressable: investment)
|
|
||||||
secondary_progress_bar = create(:progress_bar,
|
|
||||||
:secondary,
|
|
||||||
title: "to edit",
|
|
||||||
progressable: investment)
|
|
||||||
|
|
||||||
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
||||||
|
|
||||||
expect(page).to have_content("Primary")
|
|
||||||
expect(page).to have_content(secondary_progress_bar.title)
|
|
||||||
|
|
||||||
page.find("#progress_bar_#{secondary_progress_bar.id}").click_link("Edit")
|
|
||||||
|
|
||||||
fill_in("Title", with: "edited")
|
|
||||||
click_button "Update Progress bar"
|
|
||||||
|
|
||||||
expect(page).to have_content("Progress bars")
|
|
||||||
|
|
||||||
expect(page).to have_content("edited")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
require "rails_helper"
|
|
||||||
|
|
||||||
describe "Tracking budgets" do
|
|
||||||
before do
|
|
||||||
tracker = create(:tracker, user: create(:user, username: "Rachel",
|
|
||||||
email: "rachel@trackers.org"))
|
|
||||||
login_as(tracker.user)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "Disabled with a feature flag" do
|
|
||||||
Setting["process.budgets"] = nil
|
|
||||||
expect { visit tracking_budgets_path }.to raise_exception(FeatureFlags::FeatureDisabled)
|
|
||||||
end
|
|
||||||
|
|
||||||
context "Index" do
|
|
||||||
scenario "Displaying budgets" do
|
|
||||||
budget = create(:budget)
|
|
||||||
visit tracking_budgets_path
|
|
||||||
|
|
||||||
expect(page).to have_content(budget.name)
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario "With no budgets" do
|
|
||||||
visit tracking_budgets_path
|
|
||||||
|
|
||||||
expect(page).to have_content "There are no budgets"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -5,7 +5,7 @@ shared_examples "admin_progressable" do |factory_name, path_name|
|
|||||||
let(:progressable_path) { send(path_name, *resource_hierarchy_for(progressable)) }
|
let(:progressable_path) { send(path_name, *resource_hierarchy_for(progressable)) }
|
||||||
|
|
||||||
let(:path) do
|
let(:path) do
|
||||||
polymorphic_path([:tracking, *resource_hierarchy_for(progressable.progress_bars.new)])
|
polymorphic_path([:admin, *resource_hierarchy_for(progressable.progress_bars.new)])
|
||||||
end
|
end
|
||||||
|
|
||||||
context "Index" do
|
context "Index" do
|
||||||
|
|||||||
Reference in New Issue
Block a user