Delete spending proposals
This commit is contained in:
@@ -3,7 +3,6 @@ class Admin::Api::StatsController < Admin::Api::BaseController
|
||||
def show
|
||||
unless params[:event].present? ||
|
||||
params[:visits].present? ||
|
||||
params[:spending_proposals].present? ||
|
||||
params[:budget_investments].present? ||
|
||||
params[:user_supported_budgets].present?
|
||||
return render json: {}, status: :bad_request
|
||||
@@ -19,10 +18,6 @@ class Admin::Api::StatsController < Admin::Api::BaseController
|
||||
ds.add "Visits", Visit.group_by_day(:started_at).count
|
||||
end
|
||||
|
||||
if params[:spending_proposals].present?
|
||||
ds.add "Spending proposals", SpendingProposal.group_by_day(:created_at).count
|
||||
end
|
||||
|
||||
if params[:budget_investments].present?
|
||||
ds.add "Budget Investments", Budget::Investment.group_by_day(:created_at).count
|
||||
end
|
||||
|
||||
@@ -91,7 +91,7 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
|
||||
end
|
||||
|
||||
def load_investment
|
||||
@investment = Budget::Investment.by_budget(@budget).find(params[:id])
|
||||
@investment = @budget.investments.find(params[:id])
|
||||
end
|
||||
|
||||
def load_admins
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
class Admin::SpendingProposalsController < Admin::BaseController
|
||||
include FeatureFlags
|
||||
before_action :load_filter_params
|
||||
feature_flag :spending_proposals
|
||||
|
||||
has_filters %w{valuation_open without_admin managed valuating valuation_finished all}, only: :index
|
||||
|
||||
load_and_authorize_resource
|
||||
|
||||
def index
|
||||
@spending_proposals = SpendingProposal.scoped_filter(filter_params, @current_filter)
|
||||
.order(cached_votes_up: :desc, created_at: :desc)
|
||||
.page(params[:page])
|
||||
end
|
||||
|
||||
def show
|
||||
end
|
||||
|
||||
def edit
|
||||
load_admins
|
||||
load_valuators
|
||||
load_tags
|
||||
end
|
||||
|
||||
def update
|
||||
if @spending_proposal.update(spending_proposal_params)
|
||||
redirect_to admin_spending_proposal_path(@spending_proposal, filter_params),
|
||||
notice: t("flash.actions.update.spending_proposal")
|
||||
else
|
||||
load_admins
|
||||
load_valuators
|
||||
load_tags
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
def summary
|
||||
@spending_proposals = SpendingProposal.group(:geozone).sum(:price).sort_by{|geozone, count| geozone.present? ? geozone.name : "z"}
|
||||
@spending_proposals_with_supports = SpendingProposal.with_supports.group(:geozone).sum(:price)
|
||||
.sort_by{|geozone, count| geozone.present? ? geozone.name : "z"}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def spending_proposal_params
|
||||
params.require(:spending_proposal).permit(:title, :description, :external_url, :geozone_id, :association_name,
|
||||
:administrator_id, :tag_list, valuator_ids: [])
|
||||
end
|
||||
|
||||
def filter_params
|
||||
params.permit(:geozone_id, :administrator_id, :tag_name, :valuator_id)
|
||||
end
|
||||
|
||||
def load_filter_params
|
||||
@filter_params ||= filter_params
|
||||
end
|
||||
|
||||
def load_admins
|
||||
@admins = Administrator.includes(:user).all
|
||||
end
|
||||
|
||||
def load_valuators
|
||||
@valuators = Valuator.includes(:user).all.order("description ASC").order("users.email ASC")
|
||||
end
|
||||
|
||||
def load_tags
|
||||
@tags = ActsAsTaggableOn::Tag.spending_proposal_tags
|
||||
end
|
||||
|
||||
end
|
||||
@@ -11,6 +11,7 @@ class Admin::StatsController < Admin::BaseController
|
||||
@debate_votes = Vote.where(votable_type: "Debate").count
|
||||
@proposal_votes = Vote.where(votable_type: "Proposal").count
|
||||
@comment_votes = Vote.where(votable_type: "Comment").count
|
||||
|
||||
@votes = Vote.count
|
||||
|
||||
@user_level_two = User.active.level_two_verified.count
|
||||
@@ -24,8 +25,6 @@ class Admin::StatsController < Admin::BaseController
|
||||
.count(:voter_id)
|
||||
|
||||
@user_ids_who_didnt_vote_proposals = @verified_users - @user_ids_who_voted_proposals
|
||||
|
||||
@spending_proposals = SpendingProposal.count
|
||||
budgets_ids = Budget.where.not(phase: "finished").pluck(:id)
|
||||
@budgets = budgets_ids.size
|
||||
@investments = Budget::Investment.where(budget_id: budgets_ids).count
|
||||
@@ -52,7 +51,6 @@ class Admin::StatsController < Admin::BaseController
|
||||
@users_who_have_sent_message = DirectMessage.select(:sender_id).distinct.count
|
||||
end
|
||||
|
||||
|
||||
def budgets
|
||||
@budgets = Budget.all
|
||||
end
|
||||
|
||||
@@ -73,10 +73,6 @@ class ApplicationController < ActionController::Base
|
||||
@proposal_votes = current_user ? current_user.proposal_votes(proposals) : {}
|
||||
end
|
||||
|
||||
def set_spending_proposal_votes(spending_proposals)
|
||||
@spending_proposal_votes = current_user ? current_user.spending_proposal_votes(spending_proposals) : {}
|
||||
end
|
||||
|
||||
def set_comment_flags(comments)
|
||||
@comment_flags = current_user ? current_user.comment_flags(comments) : {}
|
||||
end
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
class Management::SpendingProposalsController < Management::BaseController
|
||||
|
||||
before_action :only_verified_users, except: :print
|
||||
before_action :set_spending_proposal, only: [:vote, :show]
|
||||
|
||||
def index
|
||||
@spending_proposals = apply_filters_and_search(SpendingProposal).order(cached_votes_up: :desc).page(params[:page]).for_render
|
||||
set_spending_proposal_votes(@spending_proposals)
|
||||
end
|
||||
|
||||
def new
|
||||
@spending_proposal = SpendingProposal.new
|
||||
end
|
||||
|
||||
def create
|
||||
@spending_proposal = SpendingProposal.new(spending_proposal_params)
|
||||
@spending_proposal.author = managed_user
|
||||
|
||||
if @spending_proposal.save
|
||||
notice = t("flash.actions.create.notice", resource_name: t("activerecord.models.spending_proposal", count: 1))
|
||||
redirect_to management_spending_proposal_path(@spending_proposal), notice: notice
|
||||
else
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
set_spending_proposal_votes(@spending_proposal)
|
||||
end
|
||||
|
||||
def vote
|
||||
@spending_proposal.register_vote(managed_user, "yes")
|
||||
set_spending_proposal_votes(@spending_proposal)
|
||||
end
|
||||
|
||||
def print
|
||||
params[:geozone] ||= "all"
|
||||
@spending_proposals = apply_filters_and_search(SpendingProposal).order(cached_votes_up: :desc).for_render.limit(15)
|
||||
set_spending_proposal_votes(@spending_proposals)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_spending_proposal
|
||||
@spending_proposal = SpendingProposal.find(params[:id])
|
||||
end
|
||||
|
||||
def spending_proposal_params
|
||||
params.require(:spending_proposal).permit(:title, :description, :external_url, :geozone_id, :terms_of_service)
|
||||
end
|
||||
|
||||
def only_verified_users
|
||||
check_verified_user t("management.spending_proposals.alert.unverified_user")
|
||||
end
|
||||
|
||||
# This should not be necessary. Maybe we could create a specific show view for managers.
|
||||
def set_spending_proposal_votes(spending_proposals)
|
||||
@spending_proposal_votes = managed_user ? managed_user.spending_proposal_votes(spending_proposals) : {}
|
||||
end
|
||||
|
||||
def set_geozone_name
|
||||
if params[:geozone] == "all"
|
||||
@geozone_name = t("geozones.none")
|
||||
else
|
||||
@geozone_name = Geozone.find(params[:geozone]).name
|
||||
end
|
||||
end
|
||||
|
||||
def apply_filters_and_search(target)
|
||||
target = params[:unfeasible].present? ? target.unfeasible : target.not_unfeasible
|
||||
if params[:geozone].present?
|
||||
target = target.by_geozone(params[:geozone])
|
||||
set_geozone_name
|
||||
end
|
||||
target = target.search(params[:search]) if params[:search].present?
|
||||
target
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,76 +0,0 @@
|
||||
class SpendingProposalsController < ApplicationController
|
||||
include FeatureFlags
|
||||
|
||||
before_action :authenticate_user!, except: [:index, :show]
|
||||
before_action -> { flash.now[:notice] = flash[:notice].html_safe if flash[:html_safe] && flash[:notice] }
|
||||
|
||||
load_and_authorize_resource
|
||||
|
||||
feature_flag :spending_proposals
|
||||
|
||||
invisible_captcha only: [:create, :update], honeypot: :subtitle
|
||||
|
||||
respond_to :html, :js
|
||||
|
||||
def index
|
||||
@spending_proposals = apply_filters_and_search(SpendingProposal).page(params[:page]).for_render
|
||||
set_spending_proposal_votes(@spending_proposals)
|
||||
end
|
||||
|
||||
def new
|
||||
@spending_proposal = SpendingProposal.new
|
||||
end
|
||||
|
||||
def show
|
||||
set_spending_proposal_votes(@spending_proposal)
|
||||
end
|
||||
|
||||
def create
|
||||
@spending_proposal = SpendingProposal.new(spending_proposal_params)
|
||||
@spending_proposal.author = current_user
|
||||
|
||||
if @spending_proposal.save
|
||||
activity = "<a href='#{user_path(current_user, filter: :spending_proposals)}'>#{t('layouts.header.my_activity_link')}</a>"
|
||||
notice = t("flash.actions.create.spending_proposal", activity: activity)
|
||||
redirect_to @spending_proposal, notice: notice, flash: { html_safe: true }
|
||||
else
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
spending_proposal = SpendingProposal.find(params[:id])
|
||||
spending_proposal.destroy
|
||||
redirect_to user_path(current_user, filter: "spending_proposals"), notice: t("flash.actions.destroy.spending_proposal")
|
||||
end
|
||||
|
||||
def vote
|
||||
@spending_proposal.register_vote(current_user, "yes")
|
||||
set_spending_proposal_votes(@spending_proposal)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def spending_proposal_params
|
||||
params.require(:spending_proposal).permit(:title, :description, :external_url, :geozone_id, :association_name, :terms_of_service)
|
||||
end
|
||||
|
||||
def set_geozone_name
|
||||
if params[:geozone] == "all"
|
||||
@geozone_name = t("geozones.none")
|
||||
else
|
||||
@geozone_name = Geozone.find(params[:geozone]).name
|
||||
end
|
||||
end
|
||||
|
||||
def apply_filters_and_search(target)
|
||||
target = params[:unfeasible].present? ? target.unfeasible : target.not_unfeasible
|
||||
if params[:geozone].present?
|
||||
target = target.by_geozone(params[:geozone])
|
||||
set_geozone_name
|
||||
end
|
||||
target = target.search(params[:search]) if params[:search].present?
|
||||
target
|
||||
end
|
||||
|
||||
end
|
||||
@@ -33,10 +33,6 @@ module AdminHelper
|
||||
controller_name.starts_with?("budget")
|
||||
end
|
||||
|
||||
def menu_budget?
|
||||
["spending_proposals"].include?(controller_name)
|
||||
end
|
||||
|
||||
def menu_polls?
|
||||
%w[polls active_polls recounts results questions answers].include?(controller_name) ||
|
||||
controller.class.parent == Admin::Poll::Questions::Answers
|
||||
|
||||
@@ -8,9 +8,4 @@ module GeozonesHelper
|
||||
Geozone.all.order(name: :asc).collect { |g| [ g.name, g.id ] }
|
||||
end
|
||||
|
||||
def geozone_name_from_id(g_id)
|
||||
@all_geozones ||= Geozone.all.collect{ |g| [ g.id, g.name ] }.to_h
|
||||
@all_geozones[g_id] || t("geozones.none")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -8,4 +8,4 @@ module SettingsHelper
|
||||
@all_settings ||= Hash[ Setting.all.map{|s| [s.key, s.value.presence]} ]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
module SpendingProposalsHelper
|
||||
|
||||
def spending_proposal_tags_select_options
|
||||
ActsAsTaggableOn::Tag.spending_proposal_tags.pluck(:name)
|
||||
end
|
||||
|
||||
def namespaced_spending_proposal_path(spending_proposal, options = {})
|
||||
@namespace_spending_proposal_path ||= namespace
|
||||
case @namespace_spending_proposal_path
|
||||
when "management"
|
||||
management_spending_proposal_path(spending_proposal, options)
|
||||
else
|
||||
spending_proposal_path(spending_proposal, options)
|
||||
end
|
||||
end
|
||||
|
||||
def spending_proposal_count_for_geozone(scope, geozone, second_scope)
|
||||
if geozone.present?
|
||||
geozone.spending_proposals.send(scope).send(second_scope).count
|
||||
else
|
||||
SpendingProposal.where(geozone: nil).send(scope).send(second_scope).count
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -37,16 +37,6 @@ class Mailer < ApplicationMailer
|
||||
end
|
||||
end
|
||||
|
||||
def unfeasible_spending_proposal(spending_proposal)
|
||||
@spending_proposal = spending_proposal
|
||||
@author = spending_proposal.author
|
||||
@email_to = @author.email
|
||||
|
||||
with_user(@author) do
|
||||
mail(to: @email_to, subject: t("mailers.unfeasible_spending_proposal.subject", code: @spending_proposal.code))
|
||||
end
|
||||
end
|
||||
|
||||
def direct_message_for_receiver(direct_message)
|
||||
@direct_message = direct_message
|
||||
@receiver = @direct_message.receiver
|
||||
|
||||
@@ -89,8 +89,6 @@ module Abilities
|
||||
proposal.published?
|
||||
end
|
||||
can :vote_featured, Proposal
|
||||
can :vote, SpendingProposal
|
||||
can :create, SpendingProposal
|
||||
|
||||
can :vote, Legislation::Proposal
|
||||
can :vote_featured, Legislation::Proposal
|
||||
|
||||
@@ -14,9 +14,8 @@ module Abilities
|
||||
poll.expired? && poll.stats_enabled?
|
||||
end
|
||||
can :read, Poll::Question
|
||||
can [:read, :welcome], Budget
|
||||
can :read, SpendingProposal
|
||||
can :read, User
|
||||
can [:read, :welcome], Budget
|
||||
can [:read], Budget
|
||||
can [:read], Budget::Group
|
||||
can [:read, :print, :json_data], Budget::Investment
|
||||
|
||||
@@ -3,7 +3,6 @@ class Geozone < ApplicationRecord
|
||||
include Graphqlable
|
||||
|
||||
has_many :proposals
|
||||
has_many :spending_proposals
|
||||
has_many :debates
|
||||
has_many :users
|
||||
validates :name, presence: true
|
||||
|
||||
@@ -2,7 +2,7 @@ class SignatureSheet < ApplicationRecord
|
||||
belongs_to :signable, polymorphic: true
|
||||
belongs_to :author, class_name: "User", foreign_key: "author_id"
|
||||
|
||||
VALID_SIGNABLES = %w(Proposal Budget::Investment SpendingProposal)
|
||||
VALID_SIGNABLES = %w(Proposal Budget::Investment)
|
||||
|
||||
has_many :signatures
|
||||
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
class SpendingProposal < ApplicationRecord
|
||||
include Measurable
|
||||
include Sanitizable
|
||||
include Taggable
|
||||
include Searchable
|
||||
|
||||
acts_as_votable
|
||||
|
||||
belongs_to :author, -> { with_hidden }, class_name: "User", foreign_key: "author_id"
|
||||
belongs_to :geozone
|
||||
belongs_to :administrator
|
||||
has_many :valuation_assignments, dependent: :destroy
|
||||
has_many :valuators, through: :valuation_assignments
|
||||
|
||||
validates :title, presence: true
|
||||
validates :author, presence: true
|
||||
validates :description, presence: true
|
||||
validates :feasible_explanation, presence: { if: :feasible_explanation_required? }
|
||||
|
||||
validates :title, length: { in: 4..SpendingProposal.title_max_length }
|
||||
validates :description, length: { maximum: SpendingProposal.description_max_length }
|
||||
validates :terms_of_service, acceptance: { allow_nil: false }, on: :create
|
||||
|
||||
scope :valuation_open, -> { where(valuation_finished: false) }
|
||||
scope :without_admin, -> { valuation_open.where(administrator_id: nil) }
|
||||
scope :managed, -> { valuation_open.where(valuation_assignments_count: 0).where("administrator_id IS NOT ?", nil) }
|
||||
scope :valuating, -> { valuation_open.where("valuation_assignments_count > 0 AND valuation_finished = ?", false) }
|
||||
scope :valuation_finished, -> { where(valuation_finished: true) }
|
||||
scope :feasible, -> { where(feasible: true) }
|
||||
scope :unfeasible, -> { where(feasible: false) }
|
||||
scope :not_unfeasible, -> { where("feasible IS ? OR feasible = ?", nil, true) }
|
||||
scope :with_supports, -> { where("cached_votes_up > 0") }
|
||||
|
||||
scope :by_admin, ->(admin) { where(administrator_id: admin.presence) }
|
||||
scope :by_tag, ->(tag_name) { tagged_with(tag_name) }
|
||||
scope :by_valuator, ->(valuator) { where("valuation_assignments.valuator_id = ?", valuator.presence).joins(:valuation_assignments) }
|
||||
|
||||
scope :for_render, -> { includes(:geozone) }
|
||||
|
||||
before_validation :set_responsible_name
|
||||
|
||||
def description
|
||||
super.try :html_safe
|
||||
end
|
||||
|
||||
def self.scoped_filter(params, current_filter)
|
||||
results = self
|
||||
results = results.by_geozone(params[:geozone_id]) if params[:geozone_id].present?
|
||||
results = results.by_admin(params[:administrator_id]) if params[:administrator_id].present?
|
||||
results = results.by_tag(params[:tag_name]) if params[:tag_name].present?
|
||||
results = results.by_valuator(params[:valuator_id]) if params[:valuator_id].present?
|
||||
results = results.send(current_filter) if current_filter.present?
|
||||
results.includes(:geozone, administrator: :user, valuators: :user)
|
||||
end
|
||||
|
||||
def searchable_values
|
||||
{ title => "A",
|
||||
author.username => "B",
|
||||
geozone.try(:name) => "B",
|
||||
description => "C"
|
||||
}
|
||||
end
|
||||
|
||||
def self.search(terms)
|
||||
pg_search(terms)
|
||||
end
|
||||
|
||||
def self.by_geozone(geozone)
|
||||
if geozone == "all"
|
||||
where(geozone_id: nil)
|
||||
else
|
||||
where(geozone_id: geozone.presence)
|
||||
end
|
||||
end
|
||||
|
||||
def feasibility
|
||||
case feasible
|
||||
when true
|
||||
"feasible"
|
||||
when false
|
||||
"not_feasible"
|
||||
else
|
||||
"undefined"
|
||||
end
|
||||
end
|
||||
|
||||
def unfeasible_email_pending?
|
||||
unfeasible_email_sent_at.blank? && unfeasible? && valuation_finished?
|
||||
end
|
||||
|
||||
def unfeasible?
|
||||
feasible == false
|
||||
end
|
||||
|
||||
def valuation_finished?
|
||||
valuation_finished
|
||||
end
|
||||
|
||||
def feasible_explanation_required?
|
||||
valuation_finished? && unfeasible?
|
||||
end
|
||||
|
||||
def total_votes
|
||||
cached_votes_up + physical_votes
|
||||
end
|
||||
|
||||
def code
|
||||
"#{created_at.strftime("%Y")}-#{id}" + (administrator.present? ? "-A#{administrator.id}" : "")
|
||||
end
|
||||
|
||||
def send_unfeasible_email
|
||||
Mailer.unfeasible_spending_proposal(self).deliver_later
|
||||
update(unfeasible_email_sent_at: Time.current)
|
||||
end
|
||||
|
||||
def reason_for_not_being_votable_by(user)
|
||||
return :not_voting_allowed if Setting["feature.spending_proposal_features.voting_allowed"].blank?
|
||||
return :not_logged_in unless user
|
||||
return :not_verified unless user.can?(:vote, SpendingProposal)
|
||||
return :unfeasible if unfeasible?
|
||||
return :organization if user.organization?
|
||||
end
|
||||
|
||||
def votable_by?(user)
|
||||
reason_for_not_being_votable_by(user).blank?
|
||||
end
|
||||
|
||||
def register_vote(user, vote_value)
|
||||
if votable_by?(user)
|
||||
vote_by(voter: user, vote: vote_value)
|
||||
end
|
||||
end
|
||||
|
||||
def set_responsible_name
|
||||
self.responsible_name = author.try(:document_number) if author.try(:document_number).present?
|
||||
end
|
||||
|
||||
def self.finished_and_feasible
|
||||
valuation_finished.feasible
|
||||
end
|
||||
|
||||
def self.finished_and_unfeasible
|
||||
valuation_finished.unfeasible
|
||||
end
|
||||
|
||||
end
|
||||
@@ -25,7 +25,6 @@ class User < ApplicationRecord
|
||||
has_many :proposals, -> { with_hidden }, foreign_key: :author_id
|
||||
has_many :budget_investments, -> { with_hidden }, foreign_key: :author_id, class_name: "Budget::Investment"
|
||||
has_many :comments, -> { with_hidden }
|
||||
has_many :spending_proposals, foreign_key: :author_id
|
||||
has_many :failed_census_calls
|
||||
has_many :notifications
|
||||
has_many :direct_messages_sent, class_name: "DirectMessage", foreign_key: :sender_id
|
||||
@@ -117,11 +116,6 @@ class User < ApplicationRecord
|
||||
voted.each_with_object({}) { |v, h| h[v.votable_id] = v.value }
|
||||
end
|
||||
|
||||
def spending_proposal_votes(spending_proposals)
|
||||
voted = votes.for_spending_proposals(spending_proposals)
|
||||
voted.each_with_object({}) { |v, h| h[v.votable_id] = v.value }
|
||||
end
|
||||
|
||||
def budget_investment_votes(budget_investments)
|
||||
voted = votes.for_budget_investments(budget_investments)
|
||||
voted.each_with_object({}) { |v, h| h[v.votable_id] = v.value }
|
||||
|
||||
@@ -74,20 +74,6 @@
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% if feature?(:spending_proposals) %>
|
||||
<li class="section-title">
|
||||
<a href="#">
|
||||
<span class="icon-budget"></span>
|
||||
<strong><%= t("admin.menu.title_budgets") %></strong>
|
||||
</a>
|
||||
<ul <%= "class=is-active" if menu_budget? %>>
|
||||
<li <%= "class=is-active" if controller_name == "spending_proposals" %>>
|
||||
<%= link_to t("admin.menu.spending_proposals"), admin_spending_proposals_path %>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% messages_sections = %w(newsletters emails_download admin_notifications system_emails) %>
|
||||
<% messages_menu_active = messages_sections.include?(controller_name) %>
|
||||
<li class="section-title" <%= "class=is-active" if messages_menu_active %>>
|
||||
|
||||
@@ -11,11 +11,14 @@
|
||||
|
||||
<div class="row expanded">
|
||||
<div class="small-12 column">
|
||||
<%= f.text_field :title, maxlength: Budget::Investment.title_max_length %>
|
||||
<%= f.text_field :title,
|
||||
maxlength: Budget::Investment.title_max_length %>
|
||||
</div>
|
||||
|
||||
<div class="ckeditor small-12 column">
|
||||
<%= f.cktext_area :description, maxlength: Budget::Investment.description_max_length, ckeditor: { language: I18n.locale } %>
|
||||
<%= f.cktext_area :description,
|
||||
maxlength: Budget::Investment.description_max_length,
|
||||
ckeditor: { language: I18n.locale } %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<%= form_for(SpendingProposal.new, url: url, as: :spending_proposal, method: :get) do |f| %>
|
||||
<div class="row">
|
||||
<div class="small-12 medium-6 column">
|
||||
<%= text_field_tag :search, "", placeholder: t("admin.shared.spending_proposal_search.placeholder") %>
|
||||
</div>
|
||||
<div class="form-inline small-12 medium-3 column end">
|
||||
<%= f.submit t("admin.shared.spending_proposal_search.button"), class: "button" %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,35 +0,0 @@
|
||||
<table id="spending_proposals" class="investment-projects-summary">
|
||||
<th><%= t("admin.spending_proposals.summary.geozone_name") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.finished_and_feasible_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.finished_and_unfeasible_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.finished_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.in_evaluation_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.total_count") %></th>
|
||||
<th><%= t("admin.spending_proposals.summary.cost_for_geozone") %></th>
|
||||
|
||||
<% spending_proposals.each do |geozone, price| %>
|
||||
<tr id="<%= geozone.present? ? dom_id(geozone) : "geozone_all_city" %>">
|
||||
<td class="name">
|
||||
<%= geozone.present? ? geozone.name : t("geozones.none") %>
|
||||
</td>
|
||||
<td class="finished-and-feasible-count">
|
||||
<%= spending_proposal_count_for_geozone("finished_and_feasible", geozone, second_scope) %>
|
||||
</td>
|
||||
<td class="finished-and-unfeasible-count">
|
||||
<%= spending_proposal_count_for_geozone("finished_and_unfeasible", geozone, second_scope) %>
|
||||
</td>
|
||||
<td class="finished-count">
|
||||
<%= spending_proposal_count_for_geozone("valuation_finished", geozone, second_scope) %>
|
||||
</td>
|
||||
<td class="in-evaluation-count">
|
||||
<%= spending_proposal_count_for_geozone("valuating", geozone, second_scope) %>
|
||||
</td>
|
||||
<td class="total-count">
|
||||
<%= spending_proposal_count_for_geozone("all", geozone, second_scope) %>
|
||||
</td>
|
||||
<td class="total-price text-center">
|
||||
<%= number_to_currency(price) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
@@ -1,42 +0,0 @@
|
||||
<div class="callout primary float-right">
|
||||
<%= t "admin.spending_proposals.show.heading", id: @spending_proposal.id %>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<h1 class="inline-block"><%= @spending_proposal.title %></h1>
|
||||
|
||||
<div class="row small-collapse spending-proposal-info">
|
||||
<div class="small-12 medium-4 column">
|
||||
<p>
|
||||
<strong><%= t("admin.spending_proposals.show.geozone") %>:</strong>
|
||||
<%= geozone_name(@spending_proposal) %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-4 column">
|
||||
<p>
|
||||
<strong><%= t("admin.spending_proposals.show.by") %>:</strong>
|
||||
<%= link_to @spending_proposal.author.name, admin_hidden_user_path(@spending_proposal.author) %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-4 column">
|
||||
<p>
|
||||
<strong><%= t("admin.spending_proposals.show.sent") %>:</strong>
|
||||
<%= l @spending_proposal.created_at, format: :datetime %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<% if @spending_proposal.association_name.present? %>
|
||||
<p><strong><%= t("admin.spending_proposals.show.association_name") %>:</strong>
|
||||
<%= @spending_proposal.association_name %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<% if @spending_proposal.external_url.present? %>
|
||||
<p><%= text_with_links @spending_proposal.external_url %> <span class="icon-external small"></span></p>
|
||||
<% end %>
|
||||
|
||||
<%= safe_html_with_links @spending_proposal.description %>
|
||||
@@ -1,85 +0,0 @@
|
||||
<%= link_to t("admin.spending_proposals.index.summary_link"),
|
||||
summary_admin_spending_proposals_path,
|
||||
class: "button float-right" %>
|
||||
|
||||
<%= link_to t("admin.spending_proposals.index.valuator_summary_link"),
|
||||
summary_admin_valuators_path,
|
||||
class: "button float-right margin-right" %>
|
||||
|
||||
<h2 class="inline-block"><%= t("admin.spending_proposals.index.title") %></h2>
|
||||
|
||||
<div class="row margin">
|
||||
<%= form_tag admin_spending_proposals_path, method: :get, enforce_utf8: false do %>
|
||||
<div class="small-12 medium-3 column">
|
||||
<%= select_tag :administrator_id,
|
||||
options_for_select(admin_select_options, params[:administrator_id]),
|
||||
{ prompt: t("admin.spending_proposals.index.administrator_filter_all"),
|
||||
label: false,
|
||||
class: "js-submit-on-change" } %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-3 column">
|
||||
<%= select_tag :valuator_id,
|
||||
options_for_select(valuator_select_options, params[:valuator_id]),
|
||||
{ prompt: t("admin.spending_proposals.index.valuator_filter_all"),
|
||||
label: false,
|
||||
class: "js-submit-on-change" } %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-3 column">
|
||||
<%= select_tag :geozone_id,
|
||||
options_for_select(geozone_select_options.unshift([t("geozones.none"), "all"]), params[:geozone_id]),
|
||||
{ prompt: t("admin.spending_proposals.index.geozone_filter_all"),
|
||||
label: false,
|
||||
class: "js-submit-on-change" } %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-3 column">
|
||||
<%= select_tag :tag_name,
|
||||
options_for_select(spending_proposal_tags_select_options, params[:tag_name]),
|
||||
{ prompt: t("admin.spending_proposals.index.tags_filter_all"),
|
||||
label: false,
|
||||
class: "js-submit-on-change" } %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= render "shared/filter_subnav", i18n_namespace: "admin.spending_proposals.index" %>
|
||||
|
||||
<h3><%= page_entries_info @spending_proposals %></h3>
|
||||
|
||||
<table>
|
||||
<% @spending_proposals.each do |spending_proposal| %>
|
||||
<tr id="<%= dom_id(spending_proposal) %>" class="spending_proposal">
|
||||
<td>
|
||||
<strong><%= spending_proposal.id %></strong>
|
||||
</td>
|
||||
<td>
|
||||
<%= link_to spending_proposal.title,
|
||||
admin_spending_proposal_path(spending_proposal, @filter_params.to_h) %>
|
||||
</td>
|
||||
<td class="small">
|
||||
<% if spending_proposal.administrator.present? %>
|
||||
<span title="<%= t("admin.spending_proposals.index.assigned_admin") %>"><%= spending_proposal.administrator.name %></span>
|
||||
<% else %>
|
||||
<%= t("admin.spending_proposals.index.no_admin_assigned") %>
|
||||
<% end %>
|
||||
</td>
|
||||
<td class="small">
|
||||
<% if spending_proposal.valuators.size == 0 %>
|
||||
<%= t("admin.spending_proposals.index.no_valuators_assigned") %>
|
||||
<% else %>
|
||||
<%= spending_proposal.valuators.collect(&:description_or_name).join(", ") %>
|
||||
<% end %>
|
||||
</td>
|
||||
<td class="small">
|
||||
<%= geozone_name(spending_proposal) %>
|
||||
</td>
|
||||
<td class="small">
|
||||
<%= t("admin.spending_proposals.index.feasibility.#{spending_proposal.feasibility}", price: spending_proposal.price) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
|
||||
<%= paginate @spending_proposals %>
|
||||
@@ -106,14 +106,6 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<% if feature?(:spending_proposals) %>
|
||||
<div class="small-12 medium-3 column">
|
||||
<p class="featured">
|
||||
<%= t "admin.stats.show.summary.spending_proposals" %> <br>
|
||||
<span class="number"><%= number_with_delimiter(@spending_proposals) %></span>
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
|
||||
@@ -7,14 +7,20 @@
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.text_field :title, maxlength: SpendingProposal.title_max_length, data: { js_suggest_result: "js_suggest_result", js_suggest: "#js-suggest", js_url: suggest_budget_investments_path(@budget) }%>
|
||||
<%= f.text_field :title,
|
||||
maxlength: Budget::Investment.title_max_length,
|
||||
data: { js_suggest_result: "js_suggest_result",
|
||||
js_suggest: "#js-suggest",
|
||||
js_url: suggest_budget_investments_path(@budget) } %>
|
||||
</div>
|
||||
<div id="js-suggest"></div>
|
||||
|
||||
<%= f.invisible_captcha :subtitle %>
|
||||
|
||||
<div class="ckeditor small-12 column">
|
||||
<%= f.cktext_area :description, maxlength: SpendingProposal.description_max_length, ckeditor: { language: I18n.locale } %>
|
||||
<%= f.cktext_area :description,
|
||||
maxlength: Budget::Investment.description_max_length,
|
||||
ckeditor: { language: I18n.locale } %>
|
||||
</div>
|
||||
|
||||
<% if feature?(:allow_images) %>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
<%= t("budgets.results.spending_proposal") %>
|
||||
<%= t("budgets.results.investment_title") %>
|
||||
</th>
|
||||
<th scope="col" class="text-center">
|
||||
<%= t("budgets.results.ballot_lines_count") %>
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
<td style="padding-bottom: 20px; padding-left: 10px;">
|
||||
|
||||
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
|
||||
<%= t("mailers.unfeasible_spending_proposal.hi") %>
|
||||
</p>
|
||||
|
||||
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px; padding-left: 12px; border-left: 2px solid #ccc;">
|
||||
<%= @spending_proposal.feasible_explanation %>
|
||||
</p>
|
||||
|
||||
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
|
||||
<%= t("mailers.unfeasible_spending_proposal.new_html",
|
||||
url: link_to(t("mailers.unfeasible_spending_proposal.new_href"),
|
||||
new_spending_proposal_url, style: "color: #2895F1; text-decoration: underline;")) %>
|
||||
</p>
|
||||
|
||||
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
|
||||
<%= t("mailers.unfeasible_spending_proposal.sorry") %>
|
||||
</p>
|
||||
|
||||
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
|
||||
<%= t("mailers.unfeasible_spending_proposal.sincerely") %>
|
||||
</p>
|
||||
</td>
|
||||
@@ -64,29 +64,5 @@
|
||||
<%= t("management.menu.user_invites") %>
|
||||
<% end %>
|
||||
</li>
|
||||
|
||||
<%# temporarily commenting until obsolete spending_proposals is removed %>
|
||||
<% if false %>
|
||||
<li <%= "class=is-active" if controller_name == "spending_proposals" && action_name == "new" %>>
|
||||
<%= link_to new_management_spending_proposal_path do %>
|
||||
<span class="icon-budget"></span>
|
||||
<%= t("management.menu.create_spending_proposal") %>
|
||||
<% end %>
|
||||
</li>
|
||||
|
||||
<li <%= "class=is-active" if controller_name == "spending_proposals" && action_name == "index" %>>
|
||||
<%= link_to management_spending_proposals_path do %>
|
||||
<span class="icon-like"></span>
|
||||
<%= t("management.menu.support_spending_proposals") %>
|
||||
<% end %>
|
||||
</li>
|
||||
|
||||
<li <%= "class=is-active" if controller_name == "spending_proposals" && action_name == "print" %>>
|
||||
<%= link_to print_management_spending_proposals_path do %>
|
||||
<span class="icon-print"></span>
|
||||
<%= t("management.menu.print_spending_proposals") %>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<%= render partial: "spending_proposals/spending_proposal", locals: {spending_proposal: spending_proposal} %>
|
||||
@@ -1,2 +0,0 @@
|
||||
<%= render "spending_proposals/votes",
|
||||
{ spending_proposal: spending_proposal, vote_url: vote_management_spending_proposal_path(spending_proposal, value: "yes") } %>
|
||||
@@ -1,25 +0,0 @@
|
||||
<main>
|
||||
<span class="not-print">
|
||||
<%= render "admin/shared/spending_proposal_search", url: management_spending_proposals_path %>
|
||||
</span>
|
||||
|
||||
<div class="row">
|
||||
<div id="investment-projects" class="investment-projects-list small-12 medium-9 column">
|
||||
|
||||
|
||||
<div class="small-12 search-results">
|
||||
<%= content_tag(:h2, t("management.spending_proposals.filters.unfeasible")) if params[:unfeasible].present? %>
|
||||
<%= content_tag(:h2, t("management.spending_proposals.filters.by_geozone", geozone: @geozone_name)) if @geozone_name.present? %>
|
||||
<% if params[:search].present? %>
|
||||
<h2>
|
||||
<%= page_entries_info @spending_proposals %>
|
||||
<%= t("management.spending_proposals.search_results", count: @spending_proposals.size, search_term: params[:search]) %>
|
||||
</h2>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= render @spending_proposals %>
|
||||
<%= paginate @spending_proposals %>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
@@ -1,12 +0,0 @@
|
||||
<div class="spending-proposal-form">
|
||||
|
||||
<div class="clear float-right">
|
||||
<%= render "/shared/print" %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-9 column end">
|
||||
<h1 class=""><%= t("management.spending_proposals.create") %></h1>
|
||||
<%= render "spending_proposals/form", form_url: management_spending_proposals_url %>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1,33 +0,0 @@
|
||||
<main>
|
||||
<div class="row">
|
||||
<div id="investment-projects" class="investment-projects-list small-12 column">
|
||||
|
||||
<div class="not-print">
|
||||
<%= form_tag print_management_spending_proposals_path, method: :get, enforce_utf8: false do %>
|
||||
<div class="small-12 medium-4 column float-left">
|
||||
<%= select_tag :geozone,
|
||||
options_for_select(geozone_select_options.unshift([t("geozones.none"), "all"]), params[:geozone]),
|
||||
{ label: false,
|
||||
class: "js-submit-on-change" } %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<a id="print_link" href="javascript:window.print();" class="button warning float-right">
|
||||
<%= t("management.spending_proposals.print.print_button") %>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="small-12 search-results">
|
||||
<%= content_tag(:h2, t("management.spending_proposals.filters.unfeasible"), class: "inline-block") if params[:unfeasible].present? %>
|
||||
<%= content_tag(:h2, t("management.spending_proposals.filters.by_geozone", geozone: @geozone_name), class: "inline-block") if @geozone_name.present? %>
|
||||
<%= content_tag(:h2, t("management.spending_proposals.search_results", count: @spending_proposals.size, search_term: params[:search]), class: "inline-block") if params[:search].present? %>
|
||||
</div>
|
||||
|
||||
<%= render @spending_proposals %>
|
||||
|
||||
<div class="for-print-only">
|
||||
<p><strong><%= t("management.print.spending_proposals_info") %></strong></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
@@ -1,3 +0,0 @@
|
||||
<%= render "/shared/print" %>
|
||||
|
||||
<%= render template: "spending_proposals/show" %>
|
||||
@@ -1 +0,0 @@
|
||||
<%= render template: "spending_proposals/vote" %>
|
||||
@@ -14,7 +14,7 @@
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% if (feature?(:spending_proposals) || feature?(:budgets)) &&
|
||||
<% if feature?(:budgets) &&
|
||||
(current_user.administrator? || current_user.valuator?) %>
|
||||
<li>
|
||||
<%= link_to t("layouts.header.valuation"), valuation_root_path %>
|
||||
|
||||
@@ -37,14 +37,6 @@
|
||||
accesskey: "4" %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% if feature?(:spending_proposals) %>
|
||||
<li>
|
||||
<%= layout_menu_link_to t("layouts.header.spending_proposals"),
|
||||
spending_proposals_path,
|
||||
controller_name == "spending_proposals",
|
||||
accesskey: "s" %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% if feature?(:budgets) %>
|
||||
<li>
|
||||
<%= layout_menu_link_to t("layouts.header.budgets"),
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
<%= form_for(@spending_proposal, url: form_url) do |f| %>
|
||||
<%= render "shared/errors", resource: @spending_proposal %>
|
||||
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<%= f.label :title, t("spending_proposals.form.title") %>
|
||||
<%= f.text_field :title, maxlength: SpendingProposal.title_max_length, placeholder: t("spending_proposals.form.title"), label: false %>
|
||||
</div>
|
||||
|
||||
<%= f.invisible_captcha :subtitle %>
|
||||
|
||||
<div class="ckeditor small-12 column">
|
||||
<%= f.label :description, t("spending_proposals.form.description") %>
|
||||
<%= f.cktext_area :description, maxlength: SpendingProposal.description_max_length, ckeditor: { language: I18n.locale }, label: false %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.label :external_url, t("spending_proposals.form.external_url") %>
|
||||
<%= f.text_field :external_url, placeholder: t("spending_proposals.form.external_url"), label: false %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.label :geozone_id, t("spending_proposals.form.geozone") %>
|
||||
<%= f.select :geozone_id, geozone_select_options, {include_blank: t("geozones.none"), label: false} %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.label :association_name, t("spending_proposals.form.association_name_label") %>
|
||||
<%= f.text_field :association_name, placeholder: t("spending_proposals.form.association_name"), label: false %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<% if @spending_proposal.new_record? %>
|
||||
<%= f.label :terms_of_service do %>
|
||||
<%= f.check_box :terms_of_service, title: t("form.accept_terms_title"), label: false %>
|
||||
<span class="checkbox">
|
||||
<%= t("form.accept_terms",
|
||||
policy: link_to(t("form.policy"), "/privacy", target: "blank"),
|
||||
conditions: link_to(t("form.conditions"), "/conditions", target: "blank")).html_safe %>
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="actions small-12 column">
|
||||
<%= f.submit(class: "button", value: t("spending_proposals.form.submit_buttons.#{action_name}")) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,15 +0,0 @@
|
||||
<div class="sidebar-divider"></div>
|
||||
<h2 class="sidebar-title"><%= t("spending_proposals.index.sidebar.geozones") %></h2>
|
||||
<br>
|
||||
<div class="geozone">
|
||||
<%= link_to t("geozones.all"), spending_proposals_path(geozone: nil) %>
|
||||
<%= link_to t("geozones.none"), spending_proposals_path(geozone: "all") %>
|
||||
<% Geozone.all.each do |geozone| %>
|
||||
<%= link_to geozone.name, spending_proposals_path(geozone: geozone.id) %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="sidebar-divider"></div>
|
||||
<h2 class="sidebar-title"><%= t("spending_proposals.index.sidebar.feasibility") %></h2>
|
||||
<br>
|
||||
<%= link_to t("spending_proposals.index.sidebar.unfeasible"), spending_proposals_path(unfeasible: "1") %>
|
||||
@@ -1,59 +0,0 @@
|
||||
<div id="<%= dom_id(spending_proposal) %>" class="investment-project clear">
|
||||
<div class="panel">
|
||||
<div class="row">
|
||||
|
||||
<div class="small-12 medium-9 column">
|
||||
<div class="investment-project-content">
|
||||
|
||||
<% cache [locale_and_user_status(spending_proposal), "index", spending_proposal, spending_proposal.author] do %>
|
||||
<span class="label-investment-project float-left"><%= t("spending_proposals.spending_proposal.spending_proposal") %></span>
|
||||
<span class="icon-budget"></span>
|
||||
<h3><%= link_to spending_proposal.title, namespaced_spending_proposal_path(spending_proposal) %></h3>
|
||||
<p class="investment-project-info">
|
||||
|
||||
<%= l spending_proposal.created_at.to_date %>
|
||||
|
||||
<% if spending_proposal.author.hidden? || spending_proposal.author.erased? %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="author">
|
||||
<%= t("spending_proposals.show.author_deleted") %>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="author">
|
||||
<%= spending_proposal.author.name %>
|
||||
</span>
|
||||
<% if spending_proposal.author.display_official_position_badge? %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="label round level-<%= spending_proposal.author.official_level %>">
|
||||
<%= spending_proposal.author.official_position %>
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% if spending_proposal.author.verified_organization? %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="label round is-association">
|
||||
<%= t("shared.collective") %>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<span class="bullet"> • </span>
|
||||
<%= geozone_name(spending_proposal) %>
|
||||
</p>
|
||||
<div class="investment-project-description">
|
||||
<p><%= link_to spending_proposal.description, namespaced_spending_proposal_path(spending_proposal) %></p>
|
||||
<div class="truncate"></div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="<%= dom_id(spending_proposal) %>_votes" class="small-12 medium-3 column supports-container">
|
||||
<%= render "votes",
|
||||
{ spending_proposal: spending_proposal, vote_url: vote_spending_proposal_path(spending_proposal, value: "yes") } %>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,45 +0,0 @@
|
||||
<div class="supports text-center">
|
||||
|
||||
<% reason = spending_proposal.reason_for_not_being_votable_by(current_user) %>
|
||||
<% voting_allowed = true unless reason.presence == :not_voting_allowed %>
|
||||
<% user_voted_for = voted_for?(@spending_proposal_votes, spending_proposal) %>
|
||||
|
||||
<span class="total-supports <%= "no-button" unless voting_allowed || user_voted_for %>">
|
||||
<%= t("spending_proposals.spending_proposal.supports", count: spending_proposal.total_votes) %>
|
||||
</span>
|
||||
|
||||
<div class="in-favor">
|
||||
<% if user_voted_for %>
|
||||
<div class="supported callout success">
|
||||
<%= t("spending_proposals.spending_proposal.already_supported") %>
|
||||
</div>
|
||||
<% elsif voting_allowed %>
|
||||
<%= link_to vote_url,
|
||||
class: "button button-support small expanded",
|
||||
title: t("spending_proposals.spending_proposal.support_title"), method: "post", remote: true,
|
||||
"aria-hidden" => css_for_aria_hidden(reason) do %>
|
||||
<%= t("spending_proposals.spending_proposal.support") %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% if reason.present? && !user_voted_for %>
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<p>
|
||||
<%= t("votes.spending_proposals.#{reason}",
|
||||
verify_account: link_to(t("votes.verify_account"), verification_path),
|
||||
signin: link_to(t("votes.signin"), new_user_session_path),
|
||||
signup: link_to(t("votes.signup"), new_user_registration_path)
|
||||
).html_safe %>
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if user_voted_for && setting["twitter_handle"] %>
|
||||
<%= render partial: "shared/social_share", locals: {
|
||||
title: spending_proposal.title,
|
||||
url: spending_proposal_url(spending_proposal),
|
||||
description: spending_proposal.title
|
||||
} %>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -1,39 +0,0 @@
|
||||
<% provide :title do %><%= t("spending_proposals.index.title") %><% end %>
|
||||
<% content_for :header_addon do %>
|
||||
<%= render "shared/search_form",
|
||||
search_path: spending_proposals_path(page: 1),
|
||||
i18n_namespace: "spending_proposals.index.search_form" %>
|
||||
<% end %>
|
||||
|
||||
<main>
|
||||
<h1 class="show-for-sr"><%= t("shared.outline.budget") %></h1>
|
||||
|
||||
<div class="row">
|
||||
<div id="investment-projects" class="investment-projects-list small-12 medium-9 column">
|
||||
|
||||
<div class="small-12 search-results">
|
||||
<%= content_tag(:h2, t("spending_proposals.index.unfeasible")) if params[:unfeasible].present? %>
|
||||
<%= content_tag(:h2, t("spending_proposals.index.by_geozone", geozone: @geozone_name)) if @geozone_name.present? %>
|
||||
<% if params[:search].present? %>
|
||||
<h2>
|
||||
<%= page_entries_info @spending_proposals %>
|
||||
<%= t("spending_proposals.index.search_results", count: @spending_proposals.size, search_term: params[:search]) %>
|
||||
</h2>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="show-for-small-only">
|
||||
<%= link_to t("spending_proposals.index.start_spending_proposal"), new_spending_proposal_path, class: "button expanded" %>
|
||||
</div>
|
||||
<%= render partial: "spending_proposals/spending_proposal", collection: @spending_proposals %>
|
||||
<%= paginate @spending_proposals %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-3 column">
|
||||
<aside id="sidebar" class="margin-bottom">
|
||||
<%= render "sidebar" %>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</main>
|
||||
@@ -1,25 +0,0 @@
|
||||
<div class="spending-proposal-form row margin-top">
|
||||
|
||||
<div class="small-12 medium-9 column">
|
||||
<%= back_link_to %>
|
||||
|
||||
<h1><%= t("spending_proposals.new.start_new") %></h1>
|
||||
<div data-alert class="callout primary">
|
||||
<%= link_to "/spending_proposals_info", title: t("shared.target_blank_html"), target: "_blank" do %>
|
||||
<%= t("spending_proposals.new.more_info")%>
|
||||
<% end %>
|
||||
</div>
|
||||
<%= render "spending_proposals/form", form_url: spending_proposals_url %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-3 column">
|
||||
<span class="icon-budget float-right"></span>
|
||||
<h2><%= t("spending_proposals.new.recommendations_title") %></h2>
|
||||
<ul class="recommendations">
|
||||
<li><%= t("spending_proposals.new.recommendation_one") %></li>
|
||||
<li><%= t("spending_proposals.new.recommendation_two") %></li>
|
||||
<li><%= t("spending_proposals.new.recommendation_three") %></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1,52 +0,0 @@
|
||||
<% provide :title do %><%= @spending_proposal.title %><% end %>
|
||||
|
||||
<section class="investment-project-show">
|
||||
<div id="<%= dom_id(@spending_proposal) %>" class="row">
|
||||
<div class="small-12 medium-9 column">
|
||||
|
||||
<h1><%= @spending_proposal.title %></h1>
|
||||
|
||||
<div class="investment-project-info">
|
||||
<%= render "/shared/author_info", resource: @spending_proposal %>
|
||||
|
||||
<span class="bullet"> • </span>
|
||||
<%= l @spending_proposal.created_at.to_date %>
|
||||
<span class="bullet"> • </span>
|
||||
<%= geozone_name(@spending_proposal) %>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<p id="spending_proposal_code">
|
||||
<%= t("spending_proposals.show.code") %>
|
||||
<strong><%= @spending_proposal.id %></strong>
|
||||
</p>
|
||||
|
||||
<%= safe_html_with_links @spending_proposal.description.html_safe %>
|
||||
|
||||
<% if @spending_proposal.external_url.present? %>
|
||||
<div class="document-link">
|
||||
<%= text_with_links @spending_proposal.external_url %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
</div>
|
||||
|
||||
<aside class="small-12 medium-3 column">
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3><%= t("votes.supports") %></h3>
|
||||
<div class="text-center">
|
||||
<div id="<%= dom_id(@spending_proposal) %>_votes">
|
||||
<%= render "votes",
|
||||
{ spending_proposal: @spending_proposal, vote_url: vote_spending_proposal_path(@spending_proposal, value: "yes") } %>
|
||||
</div>
|
||||
</div>
|
||||
<%= render partial: "shared/social_share", locals: {
|
||||
share_title: t("spending_proposals.show.share"),
|
||||
title: @spending_proposal.title,
|
||||
url: spending_proposal_url(@spending_proposal),
|
||||
description: @spending_proposal.title
|
||||
} %>
|
||||
</aside>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
@@ -1 +0,0 @@
|
||||
$("#<%= dom_id(@spending_proposal) %>_votes").html("<%= j render("spending_proposals/votes", spending_proposal: @spending_proposal, vote_url: vote_spending_proposal_path(@spending_proposal, value: "yes")) %>");
|
||||
@@ -111,7 +111,6 @@ search:
|
||||
ignore_missing:
|
||||
- "unauthorized.*"
|
||||
- "activerecord.models.proposal"
|
||||
- "activerecord.models.spending_proposal"
|
||||
- "activerecord.errors.models.proposal_notification.*"
|
||||
- "activerecord.errors.models.direct_message.*"
|
||||
- "errors.messages.blank"
|
||||
@@ -138,7 +137,6 @@ ignore_unused:
|
||||
- "admin.proposal_notifications.index.filter*"
|
||||
- "admin.budgets.index.filter*"
|
||||
- "admin.budget_investments.index.filter*"
|
||||
- "admin.spending_proposals.index.filter*"
|
||||
- "admin.organizations.index.filter*"
|
||||
- "admin.hidden_users.index.filter*"
|
||||
- "admin.hidden_budget_investments.index.filter*"
|
||||
@@ -181,7 +179,6 @@ ignore_unused:
|
||||
- "proposals.index.select_order"
|
||||
- "proposals.index.orders.*"
|
||||
- "proposals.index.section_header.*"
|
||||
- "spending_proposals.index.search_form.*"
|
||||
- "*.index.search_form.*"
|
||||
- "notifications.notification.action.*"
|
||||
- "legislation.processes.index.filter*"
|
||||
@@ -201,9 +198,6 @@ ignore_unused:
|
||||
# - "simple_form.{yes,no}"
|
||||
# - "simple_form.{placeholders,hints,labels}.*"
|
||||
# - "simple_form.{error_notification,required}.:"
|
||||
#### Review unused keys after merge with Budgest (both en and es)
|
||||
- users.show.confirm_deletion_spending_proposal
|
||||
- users.show.delete_spending_proposal
|
||||
- verification.letter.create.flash.offices_url
|
||||
- verification.letter.new.offices_url
|
||||
- votes.budget_investments.different_heading_assigned*
|
||||
|
||||
@@ -73,13 +73,6 @@ module ActsAsTaggableOn
|
||||
Tag.category.pluck(:name)
|
||||
end
|
||||
|
||||
def self.spending_proposal_tags
|
||||
ActsAsTaggableOn::Tag.where("taggings.taggable_type" => "SpendingProposal")
|
||||
.includes(:taggings)
|
||||
.order(:name)
|
||||
.distinct
|
||||
end
|
||||
|
||||
def self.graphql_field_name
|
||||
:tag
|
||||
end
|
||||
@@ -97,6 +90,6 @@ module ActsAsTaggableOn
|
||||
def custom_counter_field_name_for(taggable_type)
|
||||
"#{taggable_type.underscore.pluralize}_count"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -25,10 +25,6 @@ ActsAsVotable::Vote.class_eval do
|
||||
where(votable_type: "Legislation::Proposal", votable_id: proposals)
|
||||
end
|
||||
|
||||
def self.for_spending_proposals(spending_proposals)
|
||||
where(votable_type: "SpendingProposal", votable_id: spending_proposals)
|
||||
end
|
||||
|
||||
def self.for_budget_investments(budget_investments=Budget::Investment.all)
|
||||
where(votable_type: "Budget::Investment", votable_id: budget_investments)
|
||||
end
|
||||
|
||||
@@ -71,9 +71,6 @@ en:
|
||||
proposal:
|
||||
one: "Citizen proposal"
|
||||
other: "Citizen proposals"
|
||||
spending_proposal:
|
||||
one: "Investment project"
|
||||
other: "Investment projects"
|
||||
site_customization/page:
|
||||
one: Custom page
|
||||
other: Custom pages
|
||||
@@ -203,13 +200,6 @@ en:
|
||||
organization:
|
||||
name: "Name of organisation"
|
||||
responsible_name: "Person responsible for the group"
|
||||
spending_proposal:
|
||||
administrator_id: "Administrator"
|
||||
association_name: "Association name"
|
||||
description: "Description"
|
||||
external_url: "Link to additional documentation"
|
||||
geozone_id: "Scope of operation"
|
||||
title: "Title"
|
||||
poll:
|
||||
name: "Name"
|
||||
starts_at: "Start Date"
|
||||
|
||||
@@ -690,7 +690,6 @@ en:
|
||||
officials: Officials
|
||||
organizations: Organisations
|
||||
settings: Global settings
|
||||
spending_proposals: Spending proposals
|
||||
stats: Statistics
|
||||
signature_sheets: Signature Sheets
|
||||
site_customization:
|
||||
@@ -1299,9 +1298,6 @@ en:
|
||||
proposal_search:
|
||||
button: Search
|
||||
placeholder: Search proposals by title, code, description or question
|
||||
spending_proposal_search:
|
||||
button: Search
|
||||
placeholder: Search spending proposals by title or description
|
||||
user_search:
|
||||
button: Search
|
||||
placeholder: Search user by name or email
|
||||
@@ -1322,52 +1318,6 @@ en:
|
||||
color_help: Hexadecimal format
|
||||
show_results_and_stats: "Show results and stats"
|
||||
results_and_stats_reminder: "Marking these checkboxes the results and/or stats will be publicly available and every user will see them."
|
||||
spending_proposals:
|
||||
index:
|
||||
geozone_filter_all: All zones
|
||||
administrator_filter_all: All administrators
|
||||
valuator_filter_all: All valuators
|
||||
tags_filter_all: All tags
|
||||
filters:
|
||||
valuation_open: Open
|
||||
without_admin: Without assigned admin
|
||||
managed: Managed
|
||||
valuating: Under valuation
|
||||
valuation_finished: Valuation finished
|
||||
all: All
|
||||
title: Investment projects for participatory budgeting
|
||||
assigned_admin: Assigned administrator
|
||||
no_admin_assigned: No admin assigned
|
||||
no_valuators_assigned: No valuators assigned
|
||||
summary_link: "Investment project summary"
|
||||
valuator_summary_link: "Valuator summary"
|
||||
feasibility:
|
||||
feasible: "Feasible (%{price})"
|
||||
not_feasible: "Not feasible"
|
||||
undefined: "Undefined"
|
||||
show:
|
||||
assigned_admin: Assigned administrator
|
||||
assigned_valuators: Assigned valuators
|
||||
back: Back
|
||||
classification: Classification
|
||||
heading: "Investment project %{id}"
|
||||
edit: Edit
|
||||
edit_classification: Edit classification
|
||||
association_name: Association
|
||||
by: By
|
||||
sent: Sent
|
||||
geozone: Scope
|
||||
dossier: Dossier
|
||||
edit_dossier: Edit dossier
|
||||
tags: Tags
|
||||
undefined: Undefined
|
||||
edit:
|
||||
classification: Classification
|
||||
assigned_valuators: Valuators
|
||||
submit_button: Update
|
||||
tags: Tags
|
||||
tags_placeholder: "Write the tags you want separated by commas (,)"
|
||||
undefined: Undefined
|
||||
geozones:
|
||||
index:
|
||||
title: Geozone
|
||||
@@ -1438,7 +1388,6 @@ en:
|
||||
proposals: Proposals
|
||||
budgets: Open budgets
|
||||
budget_investments: Investment projects
|
||||
spending_proposals: Spending Proposals
|
||||
unverified_users: Unverified users
|
||||
user_level_three: Level three users
|
||||
user_level_two: Level two users
|
||||
@@ -1455,7 +1404,6 @@ en:
|
||||
polls: Polls
|
||||
graph:
|
||||
debate_created: Debates
|
||||
spending_proposals: Investment projects
|
||||
visit: Visits
|
||||
level_2_user: Level 2 users
|
||||
proposal_created: Citizen proposals
|
||||
|
||||
@@ -165,15 +165,15 @@ en:
|
||||
page_title: "%{budget} - Results"
|
||||
heading: "Participatory budget results"
|
||||
heading_selection_title: "By district"
|
||||
spending_proposal: Proposal title
|
||||
ballot_lines_count: Votes
|
||||
hide_discarded_link: Hide discarded
|
||||
show_all_link: Show all
|
||||
price: Price
|
||||
amount_available: Available budget
|
||||
accepted: "Accepted spending proposal: "
|
||||
discarded: "Discarded spending proposal: "
|
||||
accepted: "Accepted investment: "
|
||||
discarded: "Discarded investment: "
|
||||
incompatibles: Incompatibles
|
||||
investment_title: Project title
|
||||
investment_proyects: List of all investment projects
|
||||
unfeasible_investment_proyects: List of all unfeasible investment projects
|
||||
not_selected_investment_proyects: List of all investment projects not selected for balloting
|
||||
|
||||
@@ -179,7 +179,6 @@ en:
|
||||
policy: Privacy Policy
|
||||
proposal: Proposal
|
||||
proposal_notification: "Notification"
|
||||
spending_proposal: Spending proposal
|
||||
budget/investment: Investment
|
||||
budget/group: Budget Group
|
||||
budget/heading: Budget Heading
|
||||
@@ -193,7 +192,6 @@ en:
|
||||
image: Image
|
||||
geozones:
|
||||
none: All city
|
||||
all: All scopes
|
||||
layouts:
|
||||
application:
|
||||
chrome: Google Chrome
|
||||
@@ -248,7 +246,6 @@ en:
|
||||
proposals: Proposals
|
||||
poll_questions: Voting
|
||||
budgets: Participatory budgeting
|
||||
spending_proposals: Spending Proposals
|
||||
notification_item:
|
||||
new_notifications:
|
||||
one: You have a new notification
|
||||
@@ -764,7 +761,6 @@ en:
|
||||
unflag: Unflag
|
||||
unfollow_entity: "Unfollow %{entity}"
|
||||
outline:
|
||||
budget: Participatory budget
|
||||
searcher: Searcher
|
||||
go_to_page: "Go to page of "
|
||||
share: Share
|
||||
@@ -787,54 +783,6 @@ en:
|
||||
whatsapp: WhatsApp
|
||||
telegram: "%{org} Telegram"
|
||||
instagram: "%{org} Instagram"
|
||||
spending_proposals:
|
||||
form:
|
||||
association_name_label: "If you propose in name of an assocation or collective add the name here"
|
||||
association_name: "Association name"
|
||||
description: Description
|
||||
external_url: Link to additional documentation
|
||||
geozone: Scope of operation
|
||||
submit_buttons:
|
||||
create: Create
|
||||
new: Create
|
||||
title: Spending proposal title
|
||||
index:
|
||||
title: Participatory budgeting
|
||||
unfeasible: Unfeasible investment projects
|
||||
by_geozone: "Investment projects with scope: %{geozone}"
|
||||
search_form:
|
||||
button: Search
|
||||
placeholder: Investment projects...
|
||||
title: Search
|
||||
search_results:
|
||||
one: " containing the term '%{search_term}'"
|
||||
other: " containing the term '%{search_term}'"
|
||||
sidebar:
|
||||
geozones: Scope of operation
|
||||
feasibility: Feasibility
|
||||
unfeasible: Unfeasible
|
||||
start_spending_proposal: Create an investment project
|
||||
new:
|
||||
more_info: How do participatory budgeting works?
|
||||
recommendation_one: It's mandatory that the proposal makes reference to a budgetable action.
|
||||
recommendation_three: Try to go into details when describing your spending proposal so the reviewing team undertands your points.
|
||||
recommendation_two: Any proposal or comment suggesting illegal action will be deleted.
|
||||
recommendations_title: How to create a spending proposal
|
||||
start_new: Create spending proposal
|
||||
show:
|
||||
author_deleted: User deleted
|
||||
code: "Proposal code:"
|
||||
share: Share
|
||||
wrong_price_format: Only integer numbers
|
||||
spending_proposal:
|
||||
spending_proposal: Investment project
|
||||
already_supported: You have already supported this. Share it!
|
||||
support: Support
|
||||
support_title: Support this project
|
||||
supports:
|
||||
one: 1 support
|
||||
other: "%{count} supports"
|
||||
zero: No supports
|
||||
stats:
|
||||
index:
|
||||
visits: Visits
|
||||
@@ -917,12 +865,6 @@ en:
|
||||
unauthenticated: You must %{signin} or %{signup} to continue.
|
||||
verified_only: Only verified users can vote on proposals; %{verify_account}.
|
||||
verify_account: verify your account
|
||||
spending_proposals:
|
||||
not_logged_in: You must %{signin} or %{signup} to continue.
|
||||
not_verified: Only verified users can vote on proposals; %{verify_account}.
|
||||
organization: Organizations are not permitted to vote
|
||||
unfeasible: Unfeasible investment projects can not be supported
|
||||
not_voting_allowed: Voting phase is closed
|
||||
budget_investments:
|
||||
not_logged_in: You must %{signin} or %{signup} to continue.
|
||||
not_verified: Only verified users can vote on investment projects; %{verify_account}.
|
||||
|
||||
@@ -20,13 +20,6 @@ en:
|
||||
new_reply_by_html: There is a new response from <b>%{commenter}</b> to your comment on
|
||||
subject: Someone has responded to your comment
|
||||
title: New response to your comment
|
||||
unfeasible_spending_proposal:
|
||||
hi: "Dear user,"
|
||||
new_html: "For all these, we invite you to elaborate a <strong>new proposal</strong> that adjusts to the conditions of this process. You can do it following this link: %{url}."
|
||||
new_href: "new investment project"
|
||||
sincerely: "Sincerely"
|
||||
sorry: "Sorry for the inconvenience and we again thank you for your invaluable participation."
|
||||
subject: "Your investment project '%{code}' has been marked as unfeasible"
|
||||
proposal_notification_digest:
|
||||
info: "Here are the new notifications that have been published by authors of the proposals that you have supported in %{org_name}."
|
||||
title: "Proposal notifications in %{org_name}"
|
||||
|
||||
@@ -62,9 +62,6 @@ en:
|
||||
create_proposal: Create proposal
|
||||
print_proposals: Print proposals
|
||||
support_proposals: Support proposals
|
||||
create_spending_proposal: Create spending proposal
|
||||
print_spending_proposals: Print spending proposals
|
||||
support_spending_proposals: Support spending proposals
|
||||
create_budget_investment: Create budget investment
|
||||
print_budget_investments: Print budget investments
|
||||
support_budget_investments: Support budget investments
|
||||
@@ -79,7 +76,6 @@ en:
|
||||
print:
|
||||
proposals_info: Create your proposal on http://url.consul
|
||||
proposals_title: "Proposals:"
|
||||
spending_proposals_info: Participate at http://url.consul
|
||||
budget_investments_info: Participate at http://url.consul
|
||||
print_info: Print this info
|
||||
proposals:
|
||||
@@ -110,18 +106,6 @@ en:
|
||||
search_results:
|
||||
one: " containing the term '%{search_term}'"
|
||||
other: " containing the term '%{search_term}'"
|
||||
spending_proposals:
|
||||
alert:
|
||||
unverified_user: User is not verified
|
||||
create: Create spending proposal
|
||||
filters:
|
||||
unfeasible: Unfeasible investment projects
|
||||
by_geozone: "Investment projects with scope: %{geozone}"
|
||||
print:
|
||||
print_button: Print
|
||||
search_results:
|
||||
one: " containing the term '%{search_term}'"
|
||||
other: " containing the term '%{search_term}'"
|
||||
sessions:
|
||||
signed_out: Signed out successfully.
|
||||
signed_out_managed_user: User session signed out successfully.
|
||||
|
||||
@@ -12,7 +12,6 @@ en:
|
||||
poll_question_answer_image: "Image uploaded successfully"
|
||||
proposal: "Proposal created successfully."
|
||||
proposal_notification: "Your message has been sent correctly."
|
||||
spending_proposal: "Spending proposal created successfully. You can access it from %{activity}"
|
||||
budget_investment: "Budget Investment created successfully."
|
||||
signature_sheet: "Signature sheet created successfully"
|
||||
topic: "Topic created successfully."
|
||||
@@ -26,13 +25,11 @@ en:
|
||||
poll_booth: "Booth updated successfully."
|
||||
active_poll: "Polls description updated successfully."
|
||||
proposal: "Proposal updated successfully."
|
||||
spending_proposal: "Investment project updated succesfully."
|
||||
budget_investment: "Investment project updated succesfully."
|
||||
topic: "Topic updated successfully."
|
||||
valuator_group: "Valuator group updated successfully"
|
||||
translation: "Translation updated successfully"
|
||||
destroy:
|
||||
spending_proposal: "Spending proposal deleted succesfully."
|
||||
budget_investment: "Investment project deleted succesfully."
|
||||
error: "Could not delete"
|
||||
topic: "Topic deleted successfully."
|
||||
|
||||
@@ -93,11 +93,6 @@ en:
|
||||
featured_proposals_description: "Shows featured proposals on index proposals page"
|
||||
signature_sheets: "Signature sheets"
|
||||
signature_sheets_description: "It allows adding from the Administration panel signatures collected on-site to Proposals and investment projects of the Participative Budgets"
|
||||
spending_proposals: "Spending proposals"
|
||||
spending_proposals_description: "⚠️ NOTE: This functionality has been replaced by Participatory Budgeting and will disappear in new versions"
|
||||
spending_proposal_features:
|
||||
voting_allowed: Voting on investment projects - Preselection phase
|
||||
voting_allowed_description: "⚠️ NOTE: This functionality has been replaced by Participatory Budgeting and will disappear in new versions"
|
||||
user:
|
||||
recommendations: "Recommendations"
|
||||
recommendations_description: "Shows users recommendations on the homepage based on the tags of the following items"
|
||||
|
||||
@@ -71,9 +71,6 @@ es:
|
||||
proposal:
|
||||
one: "Propuesta ciudadana"
|
||||
other: "Propuestas ciudadanas"
|
||||
spending_proposal:
|
||||
one: "Propuesta de inversión"
|
||||
other: "Proyectos de gasto"
|
||||
site_customization/page:
|
||||
one: Página
|
||||
other: Páginas
|
||||
@@ -203,13 +200,6 @@ es:
|
||||
organization:
|
||||
name: "Nombre de la organización"
|
||||
responsible_name: "Persona responsable del colectivo"
|
||||
spending_proposal:
|
||||
administrator_id: "Administrador"
|
||||
association_name: "Nombre de la asociación"
|
||||
description: "Descripción"
|
||||
external_url: "Enlace a documentación adicional"
|
||||
geozone_id: "Ámbito de actuación"
|
||||
title: "Título"
|
||||
poll:
|
||||
name: "Nombre"
|
||||
starts_at: "Fecha de apertura"
|
||||
|
||||
@@ -689,7 +689,6 @@ es:
|
||||
officials: Cargos públicos
|
||||
organizations: Organizaciones
|
||||
settings: Configuración global
|
||||
spending_proposals: Propuestas de inversión
|
||||
stats: Estadísticas
|
||||
signature_sheets: Hojas de firmas
|
||||
site_customization:
|
||||
@@ -714,7 +713,6 @@ es:
|
||||
content_block:
|
||||
update: "Actualizar Bloque"
|
||||
title_moderated_content: Contenido moderado
|
||||
title_budgets: Presupuestos
|
||||
title_profiles: Perfiles
|
||||
title_settings: Configuración
|
||||
title_site_customization: Contenido del sitio
|
||||
@@ -1299,9 +1297,6 @@ es:
|
||||
proposal_search:
|
||||
button: Buscar
|
||||
placeholder: Buscar propuestas por título, código, descripción o pregunta
|
||||
spending_proposal_search:
|
||||
button: Buscar
|
||||
placeholder: Buscar propuestas por título o descripción
|
||||
user_search:
|
||||
button: Buscar
|
||||
placeholder: Buscar usuario por nombre o email
|
||||
@@ -1322,62 +1317,6 @@ es:
|
||||
color_help: Formato hexadecimal
|
||||
show_results_and_stats: "Mostrar resultados y estadísticas"
|
||||
results_and_stats_reminder: "Si marcas estas casillas los resultados y/o estadísticas serán públicos y podrán verlos todos los usuarios."
|
||||
spending_proposals:
|
||||
index:
|
||||
geozone_filter_all: Todos los ámbitos de actuación
|
||||
administrator_filter_all: Todos los administradores
|
||||
valuator_filter_all: Todos los evaluadores
|
||||
tags_filter_all: Todas las etiquetas
|
||||
filters:
|
||||
valuation_open: Abiertas
|
||||
without_admin: Sin administrador
|
||||
managed: Gestionando
|
||||
valuating: En evaluación
|
||||
valuation_finished: Evaluación finalizada
|
||||
all: Todas
|
||||
title: Propuestas de inversión para presupuestos participativos
|
||||
assigned_admin: Administrador asignado
|
||||
no_admin_assigned: Sin admin asignado
|
||||
no_valuators_assigned: Sin evaluador
|
||||
summary_link: "Resumen de propuestas"
|
||||
valuator_summary_link: "Resumen de evaluadores"
|
||||
feasibility:
|
||||
feasible: "Viable (%{price})"
|
||||
not_feasible: "Inviable"
|
||||
undefined: "Sin definir"
|
||||
show:
|
||||
assigned_admin: Administrador asignado
|
||||
assigned_valuators: Evaluadores asignados
|
||||
back: Volver
|
||||
classification: Clasificación
|
||||
heading: "Propuesta de inversión %{id}"
|
||||
edit: Editar
|
||||
edit_classification: Editar clasificación
|
||||
association_name: Asociación
|
||||
by: Autor
|
||||
sent: Fecha
|
||||
geozone: Ámbito
|
||||
dossier: Informe
|
||||
edit_dossier: Editar informe
|
||||
tags: Etiquetas
|
||||
undefined: Sin definir
|
||||
edit:
|
||||
classification: Clasificación
|
||||
assigned_valuators: Evaluadores
|
||||
submit_button: Actualizar
|
||||
tags: Etiquetas
|
||||
tags_placeholder: "Escribe las etiquetas que desees separadas por comas (,)"
|
||||
undefined: Sin definir
|
||||
summary:
|
||||
title: Resumen de propuestas de inversión
|
||||
title_proposals_with_supports: Resumen para propuestas que han superado la fase de apoyos
|
||||
geozone_name: Ámbito de ciudad
|
||||
finished_and_feasible_count: Finalizadas viables
|
||||
finished_and_unfeasible_count: Finalizadas inviables
|
||||
finished_count: Finalizadas
|
||||
in_evaluation_count: En evaluación
|
||||
total_count: Total
|
||||
cost_for_geozone: Coste total
|
||||
geozones:
|
||||
index:
|
||||
title: Zonas
|
||||
@@ -1448,7 +1387,6 @@ es:
|
||||
proposals: Propuestas
|
||||
budgets: Presupuestos abiertos
|
||||
budget_investments: Proyectos de gasto
|
||||
spending_proposals: Propuestas de inversión
|
||||
unverified_users: Usuarios sin verificar
|
||||
user_level_three: Usuarios de nivel tres
|
||||
user_level_two: Usuarios de nivel dos
|
||||
@@ -1465,7 +1403,6 @@ es:
|
||||
polls: Votaciones
|
||||
graph:
|
||||
debate_created: Debates
|
||||
spending_proposals: Propuestas de inversión
|
||||
visit: Visitas
|
||||
level_2_user: Usuarios nivel 2
|
||||
proposal_created: Propuestas Ciudadanas
|
||||
|
||||
@@ -165,7 +165,6 @@ es:
|
||||
page_title: "%{budget} - Resultados"
|
||||
heading: "Resultados presupuestos participativos"
|
||||
heading_selection_title: "Ámbito de actuación"
|
||||
spending_proposal: Título de la propuesta
|
||||
ballot_lines_count: Votos
|
||||
hide_discarded_link: Ocultar descartados
|
||||
show_all_link: Mostrar todos
|
||||
@@ -174,6 +173,7 @@ es:
|
||||
accepted: "Proyecto de gasto aceptado: "
|
||||
discarded: "Proyecto de gasto descartado: "
|
||||
incompatibles: Incompatibles
|
||||
investment_title: Título del proyecto de gasto
|
||||
investment_proyects: Ver lista completa de proyectos de gasto
|
||||
unfeasible_investment_proyects: Ver lista de proyectos de gasto inviables
|
||||
not_selected_investment_proyects: Ver lista de proyectos de gasto no seleccionados para la votación final
|
||||
|
||||
@@ -179,7 +179,6 @@ es:
|
||||
policy: Política de privacidad
|
||||
proposal: la propuesta
|
||||
proposal_notification: "la notificación"
|
||||
spending_proposal: la propuesta de gasto
|
||||
budget/investment: el proyecto de gasto
|
||||
budget/group: el grupo de partidas presupuestarias
|
||||
budget/heading: la partida presupuestaria
|
||||
@@ -193,7 +192,6 @@ es:
|
||||
image: Imagen
|
||||
geozones:
|
||||
none: Toda la ciudad
|
||||
all: Todos los ámbitos de actuación
|
||||
layouts:
|
||||
application:
|
||||
chrome: Google Chrome
|
||||
@@ -248,7 +246,6 @@ es:
|
||||
proposals: Propuestas
|
||||
poll_questions: Votaciones
|
||||
budgets: Presupuestos participativos
|
||||
spending_proposals: Propuestas de inversión
|
||||
notification_item:
|
||||
new_notifications:
|
||||
one: Tienes una nueva notificación
|
||||
@@ -762,7 +759,6 @@ es:
|
||||
unflag: Deshacer denuncia
|
||||
unfollow_entity: "Dejar de seguir %{entity}"
|
||||
outline:
|
||||
budget: Presupuestos participativos
|
||||
searcher: Buscador
|
||||
go_to_page: "Ir a la página de "
|
||||
share: Compartir
|
||||
@@ -785,54 +781,6 @@ es:
|
||||
whatsapp: WhatsApp
|
||||
telegram: "Telegram de %{org}"
|
||||
instagram: "Instagram de %{org}"
|
||||
spending_proposals:
|
||||
form:
|
||||
association_name_label: "Si propones en nombre de una asociación o colectivo añade el nombre aquí"
|
||||
association_name: "Nombre de la asociación"
|
||||
description: Descripción detallada
|
||||
external_url: Enlace a documentación adicional
|
||||
geozone: Ámbito de actuación
|
||||
submit_buttons:
|
||||
create: Crear
|
||||
new: Crear
|
||||
title: Título de la propuesta de gasto
|
||||
index:
|
||||
title: Presupuestos participativos
|
||||
unfeasible: Propuestas de inversión no viables
|
||||
by_geozone: "Propuestas de inversión con ámbito: %{geozone}"
|
||||
search_form:
|
||||
button: Buscar
|
||||
placeholder: Propuestas de inversión...
|
||||
title: Buscar
|
||||
search_results:
|
||||
one: " que contiene '%{search_term}'"
|
||||
other: " que contienen '%{search_term}'"
|
||||
sidebar:
|
||||
geozones: Ámbitos de actuación
|
||||
feasibility: Viabilidad
|
||||
unfeasible: No viables
|
||||
start_spending_proposal: Crea una propuesta de inversión
|
||||
new:
|
||||
more_info: '¿Cómo funcionan los presupuestos participativos?'
|
||||
recommendation_one: Es fundamental que haga referencia a una actuación presupuestable.
|
||||
recommendation_three: Intenta detallar lo máximo posible la propuesta para que el equipo de gobierno encargado de estudiarla tenga las menor dudas posibles.
|
||||
recommendation_two: Cualquier propuesta o comentario que implique acciones ilegales será eliminada.
|
||||
recommendations_title: Cómo crear una propuesta de gasto
|
||||
start_new: Crear una propuesta de gasto
|
||||
show:
|
||||
author_deleted: Usuario eliminado
|
||||
code: "Código de la propuesta:"
|
||||
share: Compartir
|
||||
wrong_price_format: Solo puede incluir caracteres numéricos
|
||||
spending_proposal:
|
||||
spending_proposal: Propuesta de inversión
|
||||
already_supported: Ya has apoyado este proyecto. ¡Compártelo!
|
||||
support: Apoyar
|
||||
support_title: Apoyar este proyecto
|
||||
supports:
|
||||
zero: Sin apoyos
|
||||
one: 1 apoyo
|
||||
other: "%{count} apoyos"
|
||||
stats:
|
||||
index:
|
||||
visits: Visitas
|
||||
@@ -915,12 +863,6 @@ es:
|
||||
unauthenticated: Necesitas %{signin} o %{signup} para continuar.
|
||||
verified_only: Las propuestas sólo pueden ser votadas por usuarios verificados, %{verify_account}.
|
||||
verify_account: verifica tu cuenta
|
||||
spending_proposals:
|
||||
not_logged_in: Necesitas %{signin} o %{signup} para continuar.
|
||||
not_verified: Las propuestas de inversión sólo pueden ser apoyadas por usuarios verificados, %{verify_account}.
|
||||
organization: Las organizaciones no pueden votar.
|
||||
unfeasible: No se pueden votar propuestas inviables.
|
||||
not_voting_allowed: El periodo de votación está cerrado.
|
||||
budget_investments:
|
||||
not_logged_in: Necesitas %{signin} o %{signup} para continuar.
|
||||
not_verified: Los proyectos de gasto sólo pueden ser apoyadas por usuarios verificados, %{verify_account}.
|
||||
|
||||
@@ -20,13 +20,6 @@ es:
|
||||
new_reply_by_html: Hay una nueva respuesta de <b>%{commenter}</b> a tu comentario en
|
||||
subject: Alguien ha respondido a tu comentario
|
||||
title: Nueva respuesta a tu comentario
|
||||
unfeasible_spending_proposal:
|
||||
hi: "Estimado/a usuario/a"
|
||||
new_html: "Por todo ello, te invitamos a que elabores una <strong>nueva propuesta</strong> que se ajuste a las condiciones de este proceso. Esto lo puedes hacer en este enlace: %{url}."
|
||||
new_href: "nueva propuesta de inversión"
|
||||
sincerely: "Atentamente"
|
||||
sorry: "Sentimos las molestias ocasionadas y volvemos a darte las gracias por tu inestimable participación."
|
||||
subject: "Tu propuesta de inversión '%{code}' ha sido marcada como inviable"
|
||||
proposal_notification_digest:
|
||||
info: "A continuación te mostramos las nuevas notificaciones que han publicado los autores de las propuestas que estás apoyando en %{org_name}."
|
||||
title: "Notificaciones de propuestas en %{org_name}"
|
||||
|
||||
@@ -62,9 +62,6 @@ es:
|
||||
create_proposal: Crear propuesta
|
||||
print_proposals: Imprimir propuestas
|
||||
support_proposals: Apoyar propuestas
|
||||
create_spending_proposal: Crear una propuesta de gasto
|
||||
print_spending_proposals: Imprimir propts. de inversión
|
||||
support_spending_proposals: Apoyar propts. de inversión
|
||||
create_budget_investment: Crear proyectos de gasto
|
||||
print_budget_investments: Imprimir proyectos de gasto
|
||||
support_budget_investments: Apoyar proyectos de gasto
|
||||
@@ -79,7 +76,6 @@ es:
|
||||
print:
|
||||
proposals_info: Haz tu propuesta en http://url.consul
|
||||
proposals_title: "Propuestas:"
|
||||
spending_proposals_info: Participa en http://url.consul
|
||||
budget_investments_info: Participa en http://url.consul
|
||||
print_info: Imprimir esta información
|
||||
proposals:
|
||||
@@ -110,18 +106,6 @@ es:
|
||||
search_results:
|
||||
one: " que contiene '%{search_term}'"
|
||||
other: " que contienen '%{search_term}'"
|
||||
spending_proposals:
|
||||
alert:
|
||||
unverified_user: Usuario no verificado
|
||||
create: Crear una propuesta de gasto
|
||||
filters:
|
||||
unfeasible: Propuestas de inversión no viables
|
||||
by_geozone: "Propuestas de inversión con ámbito: %{geozone}"
|
||||
print:
|
||||
print_button: Imprimir
|
||||
search_results:
|
||||
one: " que contiene '%{search_term}'"
|
||||
other: " que contienen '%{search_term}'"
|
||||
sessions:
|
||||
signed_out: Has cerrado la sesión correctamente.
|
||||
signed_out_managed_user: Se ha cerrado correctamente la sesión del usuario.
|
||||
|
||||
@@ -12,7 +12,6 @@ es:
|
||||
poll_question_answer_image: "Imagen cargada correctamente"
|
||||
proposal: "Propuesta creada correctamente."
|
||||
proposal_notification: "Tu mensaje ha sido enviado correctamente."
|
||||
spending_proposal: "Propuesta de inversión creada correctamente. Puedes acceder a ella desde %{activity}"
|
||||
budget_investment: "Proyecto de gasto creado correctamente."
|
||||
signature_sheet: "Hoja de firmas creada correctamente"
|
||||
topic: "Tema creado correctamente."
|
||||
@@ -26,13 +25,11 @@ es:
|
||||
poll_booth: "Urna actualizada correctamente."
|
||||
active_poll: "Descripción general de votaciones actualizada correctamente."
|
||||
proposal: "Propuesta actualizada correctamente."
|
||||
spending_proposal: "Propuesta de inversión actualizada correctamente."
|
||||
budget_investment: "Proyecto de gasto actualizado correctamente"
|
||||
topic: "Tema actualizado correctamente."
|
||||
valuator_group: "Grupo de evaluadores actualizado correctamente"
|
||||
translation: "Traducción actualizada correctamente"
|
||||
destroy:
|
||||
spending_proposal: "Propuesta de inversión eliminada."
|
||||
budget_investment: "Proyecto de gasto eliminado."
|
||||
error: "No se pudo borrar"
|
||||
topic: "Tema eliminado."
|
||||
|
||||
@@ -93,11 +93,6 @@ es:
|
||||
featured_proposals_description: "Muestra propuestas destacadas en la página principal de propuestas"
|
||||
signature_sheets: "Hojas de firmas"
|
||||
signature_sheets_description: "Permite añadir desde el panel de Administración firmas recogidas de forma presencial a Propuestas y proyectos de gasto de los Presupuestos participativos"
|
||||
spending_proposals: "Propuestas de inversión"
|
||||
spending_proposals_description: "⚠️ NOTA: Esta funcionalidad ha sido sustituida por Pesupuestos Participativos y desaparecerá en nuevas versiones"
|
||||
spending_proposal_features:
|
||||
voting_allowed: Votaciones de preselección sobre propuestas de inversión.
|
||||
voting_allowed_description: "⚠️ NOTA: Esta funcionalidad ha sido sustituida por Pesupuestos Participativos y desaparecerá en nuevas versiones"
|
||||
user:
|
||||
recommendations: "Recomendaciones"
|
||||
recommendations_description: "Muestra a los usuarios recomendaciones en la homepage basado en las etiquetas de los elementos que sigue"
|
||||
|
||||
@@ -42,15 +42,6 @@ namespace :admin do
|
||||
end
|
||||
end
|
||||
|
||||
resources :spending_proposals, only: [:index, :show, :edit, :update] do
|
||||
member do
|
||||
patch :assign_admin
|
||||
patch :assign_valuators
|
||||
end
|
||||
|
||||
get :summary, on: :collection
|
||||
end
|
||||
|
||||
resources :proposal_notifications, only: :index do
|
||||
member do
|
||||
put :restore
|
||||
|
||||
@@ -19,11 +19,5 @@ resources :budgets, only: [:show, :index] do
|
||||
resource :executions, only: :show, controller: "budgets/executions"
|
||||
end
|
||||
|
||||
scope "/participatory_budget" do
|
||||
resources :spending_proposals, only: [:index, :new, :create, :show, :destroy], path: "investment_projects" do
|
||||
post :vote, on: :member
|
||||
end
|
||||
end
|
||||
|
||||
get "investments/:id/json_data", action: :json_data, controller: "budgets/investments"
|
||||
get "/budgets/:budget_id/investments/:id/json_data", action: :json_data, controller: "budgets/investments"
|
||||
|
||||
@@ -31,11 +31,6 @@ namespace :management do
|
||||
get :print, on: :collection
|
||||
end
|
||||
|
||||
resources :spending_proposals, only: [:index, :new, :create, :show] do
|
||||
post :vote, on: :member
|
||||
get :print, on: :collection
|
||||
end
|
||||
|
||||
resources :budgets, only: :index do
|
||||
collection do
|
||||
get :create_investments
|
||||
|
||||
@@ -26,7 +26,6 @@ require_relative "dev_seeds/tags_categories"
|
||||
require_relative "dev_seeds/debates"
|
||||
require_relative "dev_seeds/proposals"
|
||||
require_relative "dev_seeds/budgets"
|
||||
require_relative "dev_seeds/spending_proposals"
|
||||
require_relative "dev_seeds/comments"
|
||||
require_relative "dev_seeds/votes"
|
||||
require_relative "dev_seeds/flags"
|
||||
|
||||
@@ -33,8 +33,6 @@ section "Creating Settings" do
|
||||
Setting.create(key: "process.legislation", value: "true")
|
||||
|
||||
Setting.create(key: "feature.featured_proposals", value: "true")
|
||||
Setting.create(key: "feature.spending_proposals", value: nil)
|
||||
Setting.create(key: "feature.spending_proposal_features.voting_allowed", value: nil)
|
||||
|
||||
Setting.create(key: "feature.twitter_login", value: "true")
|
||||
Setting.create(key: "feature.facebook_login", value: "true")
|
||||
@@ -65,6 +63,7 @@ section "Creating Settings" do
|
||||
Setting.create(key: "map.latitude", value: 40.4332002)
|
||||
Setting.create(key: "map.longitude", value: -3.7009591)
|
||||
Setting.create(key: "map.zoom", value: 10)
|
||||
|
||||
Setting.create(key: "featured_proposals_number", value: 3)
|
||||
Setting.create(key: "proposal_notification_minimum_interval_in_days", value: 0)
|
||||
Setting.create(key: "direct_message_max_per_day", value: 3)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
section "Creating Spending Proposals" do
|
||||
tags = Faker::Lorem.words(10)
|
||||
60.times do
|
||||
geozone = Geozone.all.sample
|
||||
author = User.all.sample
|
||||
description = "<p>#{Faker::Lorem.paragraphs.join("</p><p>")}</p>"
|
||||
feasible_explanation = "<p>#{Faker::Lorem.paragraphs.join("</p><p>")}</p>"
|
||||
valuation_finished = [true, false].sample
|
||||
feasible = [true, false].sample
|
||||
created_at = rand((Time.current - 1.week)..Time.current)
|
||||
spending_proposal = SpendingProposal.create!(author: author,
|
||||
title: Faker::Lorem.sentence(3).truncate(60),
|
||||
external_url: Faker::Internet.url,
|
||||
description: description,
|
||||
created_at: created_at,
|
||||
geozone: [geozone, nil].sample,
|
||||
feasible: feasible,
|
||||
feasible_explanation: feasible_explanation,
|
||||
valuation_finished: valuation_finished,
|
||||
tag_list: tags.sample(3).join(","),
|
||||
price: rand(1000000),
|
||||
terms_of_service: "1")
|
||||
end
|
||||
end
|
||||
5
db/migrate/20190311215516_destroy_spending_proposals.rb
Normal file
5
db/migrate/20190311215516_destroy_spending_proposals.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
class DestroySpendingProposals < ActiveRecord::Migration
|
||||
def change
|
||||
drop_table :spending_proposals
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,6 @@
|
||||
class DestroySpendingProposalAssociations < ActiveRecord::Migration
|
||||
def change
|
||||
remove_column :tags, :spending_proposals_count
|
||||
remove_column :valuators, :spending_proposals_count
|
||||
end
|
||||
end
|
||||
@@ -74,7 +74,6 @@ Setting["process.legislation"] = true
|
||||
|
||||
# Feature flags
|
||||
Setting["feature.featured_proposals"] = nil
|
||||
Setting["feature.spending_proposals"] = nil
|
||||
Setting["feature.twitter_login"] = true
|
||||
Setting["feature.facebook_login"] = true
|
||||
Setting["feature.google_login"] = true
|
||||
@@ -90,9 +89,6 @@ Setting["feature.allow_images"] = true
|
||||
Setting["feature.allow_attached_documents"] = true
|
||||
Setting["feature.help_page"] = true
|
||||
|
||||
# Spending proposals feature flags
|
||||
Setting["feature.spending_proposal_features.voting_allowed"] = nil
|
||||
|
||||
# Proposal notifications
|
||||
Setting["proposal_notification_minimum_interval_in_days"] = 3
|
||||
Setting["direct_message_max_per_day"] = 3
|
||||
|
||||
@@ -10,7 +10,15 @@ namespace :settings do
|
||||
"banner-img.banner-img-one",
|
||||
"banner-img.banner-img-two",
|
||||
"banner-img.banner-img-three",
|
||||
"verification_offices_url"
|
||||
"verification_offices_url",
|
||||
"feature.spending_proposals",
|
||||
"feature.spending_proposal_features.phase1",
|
||||
"feature.spending_proposal_features.phase2",
|
||||
"feature.spending_proposal_features.phase3",
|
||||
"feature.spending_proposal_features.voting_allowed",
|
||||
"feature.spending_proposal_features.final_voting_allowed",
|
||||
"feature.spending_proposal_features.open_results_page",
|
||||
"feature.spending_proposal_features.valuation_allowed"
|
||||
]
|
||||
|
||||
deprecated_keys.each do |key|
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
namespace :spending_proposals do
|
||||
|
||||
desc "Check if there are any spending proposals in DB"
|
||||
task check: :environment do
|
||||
if !Rails.env.production?
|
||||
puts "Please run this rake task in your production environment."
|
||||
else
|
||||
if SpendingProposal.any?
|
||||
puts "WARNING"
|
||||
puts "You have spending proposals in your database."
|
||||
puts "This model has been deprecated in favor of budget investments."
|
||||
puts "In the next CONSUL release spending proposals will be deleted."
|
||||
puts "If you do not need to keep this data, you don't have to do anything else."
|
||||
print "If you would like to migrate the data from spending proposals to budget investments "
|
||||
puts "please check this PR https://github.com/consul/consul/pull/3431."
|
||||
else
|
||||
puts "All good!"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,13 +1,4 @@
|
||||
FactoryBot.define do
|
||||
factory :spending_proposal do
|
||||
sequence(:title) { |n| "Spending Proposal #{n} title" }
|
||||
description "Spend money on this"
|
||||
feasible_explanation "This proposal is not viable because..."
|
||||
external_url "http://external_documention.org"
|
||||
terms_of_service "1"
|
||||
association :author, factory: :user
|
||||
end
|
||||
|
||||
factory :budget do
|
||||
sequence(:name) { |n| "#{Faker::Lorem.word} #{n}" }
|
||||
currency_symbol "€"
|
||||
|
||||
@@ -3,7 +3,7 @@ require "rails_helper"
|
||||
describe "Admin feature flags" do
|
||||
|
||||
before do
|
||||
Setting["feature.spending_proposals"] = true
|
||||
Setting["process.budgets"] = true
|
||||
login_as(create(:administrator).user)
|
||||
end
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@ describe "Stats" do
|
||||
end
|
||||
|
||||
describe "Budget investments" do
|
||||
|
||||
context "Supporting phase" do
|
||||
before do
|
||||
@budget = create(:budget)
|
||||
@@ -244,6 +245,7 @@ describe "Stats" do
|
||||
end
|
||||
|
||||
context "graphs" do
|
||||
|
||||
scenario "event graphs", :js do
|
||||
campaign = create(:campaign)
|
||||
|
||||
@@ -260,6 +262,7 @@ describe "Stats" do
|
||||
expect(page).to have_content event_created_at.strftime("%Y-%m-%d")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context "Proposal notifications" do
|
||||
|
||||
@@ -65,8 +65,6 @@ describe "Admin" do
|
||||
end
|
||||
|
||||
scenario "Admin access links" do
|
||||
Setting["feature.spending_proposals"] = true
|
||||
|
||||
login_as(administrator)
|
||||
visit root_path
|
||||
|
||||
@@ -74,8 +72,6 @@ describe "Admin" do
|
||||
expect(page).to have_link("Moderation")
|
||||
expect(page).to have_link("Valuation")
|
||||
expect(page).to have_link("Management")
|
||||
|
||||
Setting["feature.spending_proposals"] = nil
|
||||
end
|
||||
|
||||
scenario "Admin dashboard" do
|
||||
|
||||
@@ -218,34 +218,6 @@ describe "Emails" do
|
||||
expect(email).to have_subject("Instrucciones de confirmación")
|
||||
end
|
||||
|
||||
scenario "Email on unfeasible spending proposal" do
|
||||
Setting["feature.spending_proposals"] = true
|
||||
|
||||
spending_proposal = create(:spending_proposal)
|
||||
administrator = create(:administrator)
|
||||
valuator = create(:valuator)
|
||||
spending_proposal.update(administrator: administrator)
|
||||
spending_proposal.valuators << valuator
|
||||
|
||||
login_as(valuator.user)
|
||||
visit edit_valuation_spending_proposal_path(spending_proposal)
|
||||
|
||||
choose "spending_proposal_feasible_false"
|
||||
fill_in "spending_proposal_feasible_explanation", with: "This is not legal as stated in Article 34.9"
|
||||
check "spending_proposal_valuation_finished"
|
||||
click_button "Save changes"
|
||||
|
||||
expect(page).to have_content "Dossier updated"
|
||||
spending_proposal.reload
|
||||
|
||||
email = open_last_email
|
||||
expect(email).to have_subject("Your investment project '#{spending_proposal.code}' has been marked as unfeasible")
|
||||
expect(email).to deliver_to(spending_proposal.author.email)
|
||||
expect(email).to have_body_text(spending_proposal.feasible_explanation)
|
||||
|
||||
Setting["feature.spending_proposals"] = nil
|
||||
end
|
||||
|
||||
context "Direct Message" do
|
||||
|
||||
scenario "Receiver email" do
|
||||
|
||||
@@ -129,11 +129,10 @@ describe "Notifications" do
|
||||
end
|
||||
|
||||
scenario "Notification's notifiable model no longer includes Notifiable module" do
|
||||
create(:notification, notifiable: create(:spending_proposal), user: user)
|
||||
create(:notification, notifiable: create(:poll_question), user: user)
|
||||
|
||||
click_notifications_icon
|
||||
expect(page).to have_content("This resource is not available anymore.", count: 2)
|
||||
expect(page).to have_content("This resource is not available anymore.", count: 1)
|
||||
end
|
||||
|
||||
context "Admin Notifications" do
|
||||
|
||||
@@ -69,34 +69,5 @@ describe "Official positions" do
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context "Spending proposals" do
|
||||
|
||||
before do
|
||||
Setting["feature.spending_proposals"] = true
|
||||
@spending_proposal1 = create(:spending_proposal, author: @user1)
|
||||
@spending_proposal2 = create(:spending_proposal, author: @user2)
|
||||
end
|
||||
|
||||
after do
|
||||
Setting["feature.spending_proposals"] = nil
|
||||
end
|
||||
|
||||
scenario "Index" do
|
||||
visit spending_proposals_path
|
||||
|
||||
expect_badge_for("spending_proposal", @spending_proposal1)
|
||||
expect_no_badge_for("spending_proposal", @spending_proposal2)
|
||||
end
|
||||
|
||||
scenario "Show" do
|
||||
visit spending_proposal_path(@spending_proposal1)
|
||||
expect_badge_for("spending_proposal", @spending_proposal1)
|
||||
|
||||
visit spending_proposal_path(@spending_proposal2)
|
||||
expect_no_badge_for("spending_proposal", @spending_proposal2)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -368,106 +368,4 @@ describe "Votes" do
|
||||
end
|
||||
end
|
||||
|
||||
describe "Spending Proposals" do
|
||||
before do
|
||||
Setting["feature.spending_proposals"] = true
|
||||
Setting["feature.spending_proposal_features.voting_allowed"] = true
|
||||
login_as(@manuela)
|
||||
end
|
||||
|
||||
after do
|
||||
Setting["feature.spending_proposals"] = nil
|
||||
end
|
||||
|
||||
describe "Index" do
|
||||
scenario "Index shows user votes on proposals" do
|
||||
spending_proposal1 = create(:spending_proposal)
|
||||
spending_proposal2 = create(:spending_proposal)
|
||||
spending_proposal3 = create(:spending_proposal)
|
||||
create(:vote, voter: @manuela, votable: spending_proposal1, vote_flag: true)
|
||||
|
||||
visit spending_proposals_path
|
||||
|
||||
within("#investment-projects") do
|
||||
within("#spending_proposal_#{spending_proposal1.id}_votes") do
|
||||
expect(page).to have_content "You have already supported this. Share it!"
|
||||
end
|
||||
|
||||
within("#spending_proposal_#{spending_proposal2.id}_votes") do
|
||||
expect(page).not_to have_content "You have already supported this. Share it!"
|
||||
end
|
||||
|
||||
within("#spending_proposal_#{spending_proposal3.id}_votes") do
|
||||
expect(page).not_to have_content "You have already supported this. Share it!"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Create from spending proposal index", :js do
|
||||
spending_proposal = create(:spending_proposal)
|
||||
visit spending_proposals_path
|
||||
|
||||
within(".supports") do
|
||||
find(".in-favor a").click
|
||||
|
||||
expect(page).to have_content "1 support"
|
||||
expect(page).to have_content "You have already supported this. Share it!"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "Single spending proposal" do
|
||||
before do
|
||||
@proposal = create(:spending_proposal)
|
||||
end
|
||||
|
||||
scenario "Show no votes" do
|
||||
visit spending_proposal_path(@proposal)
|
||||
expect(page).to have_content "No supports"
|
||||
end
|
||||
|
||||
scenario "Trying to vote multiple times", :js do
|
||||
visit spending_proposal_path(@proposal)
|
||||
|
||||
within(".supports") do
|
||||
find(".in-favor a").click
|
||||
expect(page).to have_content "1 support"
|
||||
|
||||
expect(page).not_to have_selector ".in-favor a"
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Create from proposal show", :js do
|
||||
visit spending_proposal_path(@proposal)
|
||||
|
||||
within(".supports") do
|
||||
find(".in-favor a").click
|
||||
|
||||
expect(page).to have_content "1 support"
|
||||
expect(page).to have_content "You have already supported this. Share it!"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Disable voting on spending proposals", :js do
|
||||
login_as(@manuela)
|
||||
Setting["feature.spending_proposal_features.voting_allowed"] = nil
|
||||
spending_proposal = create(:spending_proposal)
|
||||
|
||||
visit spending_proposals_path
|
||||
|
||||
within("#spending_proposal_#{spending_proposal.id}") do
|
||||
find("div.supports").hover
|
||||
expect_message_voting_not_allowed
|
||||
end
|
||||
|
||||
visit spending_proposal_path(spending_proposal)
|
||||
|
||||
within("#spending_proposal_#{spending_proposal.id}") do
|
||||
find("div.supports").hover
|
||||
expect_message_voting_not_allowed
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -31,19 +31,4 @@ describe GeozonesHelper do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#geozone_name_from_id" do
|
||||
|
||||
it "returns geozone name if present" do
|
||||
g1 = create(:geozone, name: "AAA")
|
||||
g2 = create(:geozone, name: "BBB")
|
||||
|
||||
expect(geozone_name_from_id(g1.id)).to eq "AAA"
|
||||
expect(geozone_name_from_id(g2.id)).to eq "BBB"
|
||||
end
|
||||
|
||||
it "returns default string for no geozone if geozone is blank" do
|
||||
expect(geozone_name_from_id(nil)).to eq "All city"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -73,10 +73,6 @@ describe Abilities::Common do
|
||||
it { should_not be_able_to(:vote, Proposal) }
|
||||
it { should_not be_able_to(:vote_featured, Proposal) }
|
||||
|
||||
it { should be_able_to(:index, SpendingProposal) }
|
||||
it { should_not be_able_to(:create, SpendingProposal) }
|
||||
it { should_not be_able_to(:destroy, SpendingProposal) }
|
||||
|
||||
it { should_not be_able_to(:comment_as_administrator, debate) }
|
||||
it { should_not be_able_to(:comment_as_moderator, debate) }
|
||||
it { should_not be_able_to(:comment_as_administrator, proposal) }
|
||||
@@ -189,8 +185,6 @@ describe Abilities::Common do
|
||||
end
|
||||
|
||||
describe "when level 2 verified" do
|
||||
let(:own_spending_proposal) { create(:spending_proposal, author: user) }
|
||||
|
||||
let(:own_direct_message) { create(:direct_message, sender: user) }
|
||||
|
||||
before{ user.update(residence_verified_at: Time.current, confirmed_phone: "1") }
|
||||
@@ -200,12 +194,6 @@ describe Abilities::Common do
|
||||
it { should be_able_to(:vote_featured, Proposal) }
|
||||
end
|
||||
|
||||
describe "Spending Proposal" do
|
||||
it { should be_able_to(:create, SpendingProposal) }
|
||||
it { should_not be_able_to(:destroy, create(:spending_proposal)) }
|
||||
it { should_not be_able_to(:destroy, own_spending_proposal) }
|
||||
end
|
||||
|
||||
describe "Direct Message" do
|
||||
it { should be_able_to(:new, DirectMessage) }
|
||||
it { should be_able_to(:create, DirectMessage) }
|
||||
@@ -270,7 +258,6 @@ describe Abilities::Common do
|
||||
end
|
||||
|
||||
describe "when level 3 verified" do
|
||||
let(:own_spending_proposal) { create(:spending_proposal, author: user) }
|
||||
let(:own_direct_message) { create(:direct_message, sender: user) }
|
||||
|
||||
before{ user.update(verified_at: Time.current) }
|
||||
@@ -278,10 +265,6 @@ describe Abilities::Common do
|
||||
it { should be_able_to(:vote, Proposal) }
|
||||
it { should be_able_to(:vote_featured, Proposal) }
|
||||
|
||||
it { should be_able_to(:create, SpendingProposal) }
|
||||
it { should_not be_able_to(:destroy, create(:spending_proposal)) }
|
||||
it { should_not be_able_to(:destroy, own_spending_proposal) }
|
||||
|
||||
it { should be_able_to(:new, DirectMessage) }
|
||||
it { should be_able_to(:create, DirectMessage) }
|
||||
it { should be_able_to(:show, own_direct_message) }
|
||||
|
||||
@@ -24,9 +24,6 @@ describe Abilities::Everyone do
|
||||
|
||||
it { should be_able_to(:show, Comment) }
|
||||
|
||||
it { should be_able_to(:index, SpendingProposal) }
|
||||
it { should_not be_able_to(:create, SpendingProposal) }
|
||||
|
||||
it { should be_able_to(:index, Budget) }
|
||||
|
||||
it { should_not be_able_to(:manage, Dashboard::Action) }
|
||||
|
||||
@@ -29,11 +29,6 @@ describe Geozone do
|
||||
expect(geozone).not_to be_safe_to_destroy
|
||||
end
|
||||
|
||||
it "is false when already linked to spending proposal" do
|
||||
create(:spending_proposal, geozone: geozone)
|
||||
expect(geozone).not_to be_safe_to_destroy
|
||||
end
|
||||
|
||||
it "is false when already linked to debate" do
|
||||
create(:debate, geozone: geozone)
|
||||
expect(geozone).not_to be_safe_to_destroy
|
||||
|
||||
@@ -47,13 +47,6 @@ describe SignatureSheet do
|
||||
expect(signature_sheet.name).to eq("Citizen proposal #{proposal.id}")
|
||||
end
|
||||
|
||||
it "returns name for spending proposal signature sheets" do
|
||||
spending_proposal = create(:spending_proposal)
|
||||
signature_sheet.signable = spending_proposal
|
||||
|
||||
expect(signature_sheet.name).to eq("Investment project #{spending_proposal.id}")
|
||||
end
|
||||
|
||||
it "returns name for budget investment signature sheets" do
|
||||
budget_investment = create(:budget_investment)
|
||||
signature_sheet.signable = budget_investment
|
||||
|
||||
@@ -10,4 +10,5 @@ module Budgets
|
||||
expect(page).to have_content "Remove"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user