decidim-budgets 0.0.3 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/images/decidim/budgets/icon.svg +16 -4
- data/app/assets/javascripts/decidim/budgets/progressFixed.js.es6 +23 -0
- data/app/assets/javascripts/decidim/budgets/projects.js.es6 +5 -4
- data/app/assets/stylesheets/decidim/budgets/budget/_budget-list.scss +1 -1
- data/app/commands/decidim/budgets/add_line_item.rb +4 -2
- data/app/commands/decidim/budgets/admin/create_project.rb +0 -1
- data/app/commands/decidim/budgets/admin/update_project.rb +0 -1
- data/app/commands/decidim/budgets/checkout.rb +7 -3
- data/app/controllers/decidim/budgets/admin/application_controller.rb +9 -0
- data/app/controllers/decidim/budgets/admin/attachments_controller.rb +29 -0
- data/app/controllers/decidim/budgets/line_items_controller.rb +2 -0
- data/app/controllers/decidim/budgets/orders_controller.rb +2 -0
- data/app/forms/decidim/budgets/admin/project_form.rb +1 -2
- data/app/models/decidim/budgets/order.rb +16 -1
- data/app/models/decidim/budgets/project.rb +17 -0
- data/app/services/decidim/budgets/project_search.rb +0 -1
- data/app/views/decidim/budgets/admin/projects/_form.html.erb +0 -4
- data/app/views/decidim/budgets/admin/projects/edit.html.erb +1 -1
- data/app/views/decidim/budgets/admin/projects/index.html.erb +1 -0
- data/app/views/decidim/budgets/admin/projects/new.html.erb +1 -1
- data/app/views/decidim/budgets/line_items/update_budget.js.erb +9 -7
- data/app/views/decidim/budgets/projects/_budget_confirm.html.erb +27 -25
- data/app/views/decidim/budgets/projects/_budget_summary.html.erb +4 -13
- data/app/views/decidim/budgets/projects/_order_progress.html.erb +23 -21
- data/app/views/decidim/budgets/projects/_order_selected_projects.html.erb +25 -23
- data/app/views/decidim/budgets/projects/_order_total_budget.html.erb +3 -1
- data/app/views/decidim/budgets/projects/_project.html.erb +32 -30
- data/app/views/decidim/budgets/projects/_project_budget_button.html.erb +2 -2
- data/app/views/decidim/budgets/projects/_projects.html.erb +1 -3
- data/app/views/decidim/budgets/projects/index.html.erb +0 -3
- data/app/views/decidim/budgets/projects/show.html.erb +7 -12
- data/config/i18n-tasks.yml +2 -0
- data/config/locales/ca.yml +30 -6
- data/config/locales/en.yml +27 -7
- data/config/locales/es.yml +28 -4
- data/config/locales/eu.yml +5 -0
- data/db/migrate/20170207101750_remove_short_description_from_decidim_projects.rb +5 -0
- data/lib/decidim/budgets/admin_engine.rb +4 -1
- data/lib/decidim/budgets/feature.rb +17 -6
- data/lib/decidim/budgets/test/factories.rb +2 -3
- metadata +28 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36a0cd87302d85abc1401b212ba7f792da11a7b2
|
4
|
+
data.tar.gz: 0ba3e53eca08d996c1d7ef4e515b113e60246815
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f290147ea2a65b093245248598014046266abdeb3ee57fda81051f66297129b19b5d899867f74af9a93bf9a9bdf4af0295ac51c9fa814010993bc0e1e496c14
|
7
|
+
data.tar.gz: cefabce04a878a30200a62e6a5d4e28542f43bfd0e976324a6e45b6a0f6666f92e5e0edcfc713f3424b9c80cd65c4ebd79748e6aac158d0f7fb956906dd9b601
|
@@ -1,4 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4
|
+
viewBox="0 0 36 36" style="enable-background:new 0 0 36 36;" xml:space="preserve">
|
5
|
+
<g>
|
6
|
+
<path d="M18,36C8.1,36,0,27.9,0,18S8.1,0,18,0s18,8.1,18,18S27.9,36,18,36z M18,2C9.2,2,2,9.2,2,18s7.2,16,16,16s16-7.2,16-16
|
7
|
+
S26.8,2,18,2z"/>
|
8
|
+
</g>
|
9
|
+
<g>
|
10
|
+
<g>
|
11
|
+
<path d="M17.1,28.3c-5.3,0-9.9-4.4-9.9-9.8c0-5.5,4.9-9.5,9.3-9.5H18v9h9v0.9C27,23.2,22.7,28.3,17.1,28.3z M16,10.7
|
12
|
+
c-4,0.6-6.5,3.7-6.5,7.6c0,4.3,3.6,8,7.7,8c3.9,0,7-3.3,7.6-6.3H16V10.7z"/>
|
13
|
+
</g>
|
14
|
+
<path d="M30,16H20V6h0.6c4.5,0,9.4,4.4,9.4,8.9V16z M22,14h5.5C27,11,24,8.6,22,8V14z"/>
|
15
|
+
</g>
|
16
|
+
</svg>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
$(() => {
|
2
|
+
const checkProgressPosition = () => {
|
3
|
+
let progressFix = document.querySelector("[data-progressbox-fixed]"),
|
4
|
+
progressRef = document.querySelector("[data-progress-reference]"),
|
5
|
+
progressVisibleClass = "is-progressbox-visible";
|
6
|
+
|
7
|
+
if (!progressRef) {
|
8
|
+
return;
|
9
|
+
}
|
10
|
+
|
11
|
+
let progressPosition = progressRef.getBoundingClientRect().bottom;
|
12
|
+
if (progressPosition > 0) {
|
13
|
+
progressFix.classList.remove(progressVisibleClass);
|
14
|
+
} else {
|
15
|
+
progressFix.classList.add(progressVisibleClass);
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
window.addEventListener("scroll", checkProgressPosition);
|
20
|
+
|
21
|
+
window.DecidimBudgets = window.DecidimBudgets || {};
|
22
|
+
window.DecidimBudgets.checkProgressPosition = checkProgressPosition;
|
23
|
+
});
|
@@ -1,3 +1,4 @@
|
|
1
|
+
// = require ./progressFixed
|
1
2
|
// = require_self
|
2
3
|
|
3
4
|
$(() => {
|
@@ -5,7 +6,7 @@ $(() => {
|
|
5
6
|
const $budgetSummaryTotal = $('.budget-summary__total');
|
6
7
|
const $budgetExceedModal = $('#budget-excess');
|
7
8
|
|
8
|
-
const totalBudget = $budgetSummaryTotal.
|
9
|
+
const totalBudget = parseInt($budgetSummaryTotal.attr('data-total-budget'), 10);
|
9
10
|
|
10
11
|
const cancelEvent = (event) => {
|
11
12
|
event.stopPropagation();
|
@@ -13,14 +14,14 @@ $(() => {
|
|
13
14
|
};
|
14
15
|
|
15
16
|
$projects.on('click', '.budget--list__action', (event) => {
|
16
|
-
const currentBudget = $('.budget-summary__progressbox').
|
17
|
+
const currentBudget = parseInt($('.budget-summary__progressbox').attr('data-current-budget'), 10);
|
17
18
|
const $currentTarget = $(event.currentTarget);
|
18
|
-
const projectBudget = $currentTarget.
|
19
|
+
const projectBudget = parseInt($currentTarget.attr('data-budget'), 10);
|
19
20
|
|
20
21
|
if ($currentTarget.attr('disabled')) {
|
21
22
|
cancelEvent(event);
|
22
23
|
|
23
|
-
} else if ($currentTarget.
|
24
|
+
} else if ($currentTarget.attr('data-add') && ((currentBudget + projectBudget) > totalBudget)) {
|
24
25
|
$budgetExceedModal.foundation('toggle');
|
25
26
|
cancelEvent(event);
|
26
27
|
}
|
@@ -19,15 +19,19 @@ module Decidim
|
|
19
19
|
#
|
20
20
|
# Returns nothing.
|
21
21
|
def call
|
22
|
-
return broadcast(:invalid) unless
|
23
|
-
checkout!
|
22
|
+
return broadcast(:invalid, @order) unless checkout!
|
24
23
|
broadcast(:ok, @order)
|
25
24
|
end
|
26
25
|
|
27
26
|
private
|
28
27
|
|
29
28
|
def checkout!
|
30
|
-
@order
|
29
|
+
return unless @order
|
30
|
+
|
31
|
+
@order.with_lock do
|
32
|
+
@order.checked_out_at = Time.current
|
33
|
+
@order.save
|
34
|
+
end
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
@@ -8,6 +8,15 @@ module Decidim
|
|
8
8
|
# Note that it inherits from `Decidim::Features::BaseController`, which
|
9
9
|
# override its layout and provide all kinds of useful methods.
|
10
10
|
class ApplicationController < Decidim::Admin::Features::BaseController
|
11
|
+
helper_method :projects, :project
|
12
|
+
|
13
|
+
def projects
|
14
|
+
@projects ||= Project.where(feature: current_feature)
|
15
|
+
end
|
16
|
+
|
17
|
+
def project
|
18
|
+
@project ||= projects.find(params[:id])
|
19
|
+
end
|
11
20
|
end
|
12
21
|
end
|
13
22
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Budgets
|
4
|
+
module Admin
|
5
|
+
# Controller that allows managing all the attachments for a participatory
|
6
|
+
# process.
|
7
|
+
#
|
8
|
+
class AttachmentsController < Admin::ApplicationController
|
9
|
+
include Decidim::Admin::Concerns::HasAttachments
|
10
|
+
|
11
|
+
def after_destroy_path
|
12
|
+
projects_path
|
13
|
+
end
|
14
|
+
|
15
|
+
def attached_to
|
16
|
+
project
|
17
|
+
end
|
18
|
+
|
19
|
+
def project
|
20
|
+
@project ||= projects.find(params[:project_id])
|
21
|
+
end
|
22
|
+
|
23
|
+
def authorization_object
|
24
|
+
project.feature
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -8,15 +8,14 @@ module Decidim
|
|
8
8
|
include TranslationsHelper
|
9
9
|
|
10
10
|
translatable_attribute :title, String
|
11
|
-
translatable_attribute :short_description, String
|
12
11
|
translatable_attribute :description, String
|
12
|
+
|
13
13
|
attribute :budget, Integer
|
14
14
|
attribute :decidim_scope_id, Integer
|
15
15
|
attribute :decidim_category_id, Integer
|
16
16
|
attribute :proposal_ids, Array[Integer]
|
17
17
|
|
18
18
|
validates :title, translatable_presence: true
|
19
|
-
validates :short_description, translatable_presence: true
|
20
19
|
validates :description, translatable_presence: true
|
21
20
|
validates :budget, presence: true, numericality: { greater_than: 0 }
|
22
21
|
|
@@ -16,9 +16,17 @@ module Decidim
|
|
16
16
|
validates :user, presence: true, uniqueness: { scope: :feature }
|
17
17
|
validate :user_belongs_to_organization
|
18
18
|
|
19
|
+
validates :total_budget, numericality: {
|
20
|
+
greater_than_or_equal_to: :minimum_budget
|
21
|
+
}, if: :checked_out?
|
22
|
+
|
23
|
+
validates :total_budget, numericality: {
|
24
|
+
less_than_or_equal_to: :maximum_budget
|
25
|
+
}
|
26
|
+
|
19
27
|
# Public: Returns the sum of project budgets
|
20
28
|
def total_budget
|
21
|
-
|
29
|
+
projects.to_a.sum(&:budget)
|
22
30
|
end
|
23
31
|
|
24
32
|
# Public: Returns true if the order has been checked out
|
@@ -38,9 +46,16 @@ module Decidim
|
|
38
46
|
|
39
47
|
# Public: Returns the required minimum budget to checkout
|
40
48
|
def minimum_budget
|
49
|
+
return 0 unless feature
|
41
50
|
feature.settings.total_budget.to_f * (feature.settings.vote_threshold_percent.to_f / 100)
|
42
51
|
end
|
43
52
|
|
53
|
+
# Public: Returns the required maximum budget to checkout
|
54
|
+
def maximum_budget
|
55
|
+
return 0 unless feature
|
56
|
+
feature.settings.total_budget.to_f
|
57
|
+
end
|
58
|
+
|
44
59
|
private
|
45
60
|
|
46
61
|
def user_belongs_to_organization
|
@@ -8,8 +8,25 @@ module Decidim
|
|
8
8
|
include Decidim::HasFeature
|
9
9
|
include Decidim::HasScope
|
10
10
|
include Decidim::HasCategory
|
11
|
+
include Decidim::HasAttachments
|
12
|
+
include Decidim::Comments::Commentable
|
11
13
|
|
12
14
|
feature_manifest_name "budgets"
|
15
|
+
|
16
|
+
# Public: Overrides the `commentable?` Commentable concern method.
|
17
|
+
def commentable?
|
18
|
+
feature.settings.comments_enabled?
|
19
|
+
end
|
20
|
+
|
21
|
+
# Public: Overrides the `accepts_new_comments?` Commentable concern method.
|
22
|
+
def accepts_new_comments?
|
23
|
+
commentable? && !feature.active_step_settings.comments_blocked
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public: Overrides the `comments_have_votes?` Commentable concern method.
|
27
|
+
def comments_have_votes?
|
28
|
+
true
|
29
|
+
end
|
13
30
|
end
|
14
31
|
end
|
15
32
|
end
|
@@ -17,7 +17,6 @@ module Decidim
|
|
17
17
|
query
|
18
18
|
.where(localized_search_text_in(:title), text: "%#{search_text}%")
|
19
19
|
.or(query.where(localized_search_text_in(:description), text: "%#{search_text}%"))
|
20
|
-
.or(query.where(localized_search_text_in(:short_description), text: "%#{search_text}%"))
|
21
20
|
end
|
22
21
|
|
23
22
|
# Handle the scope_id filter
|
@@ -19,6 +19,7 @@
|
|
19
19
|
</td>
|
20
20
|
<td class="actions">
|
21
21
|
<%= link_to t("actions.edit", scope: "decidim.budgets"), edit_project_path(project) if can? :update, current_feature %>
|
22
|
+
<%= link_to t("actions.attachments", scope: "decidim.budgets"), project_attachments_path(project) if can? :update, current_feature %>
|
22
23
|
<%= link_to t("actions.destroy", scope: "decidim.budgets"), project_path(project), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.budgets") } if can? :destroy, current_feature %>
|
23
24
|
</td>
|
24
25
|
</tr>
|
@@ -5,17 +5,19 @@ var $projectItem = $('#project-<%= project.id %>-item');
|
|
5
5
|
var $projectBudgetButton = $('#project-<%= project.id %>-budget-button');
|
6
6
|
var $budgetConfirm = $('#budget-confirm');
|
7
7
|
|
8
|
-
$orderTotalBudget
|
9
|
-
$orderSelectedProjects
|
10
|
-
$orderProgress
|
11
|
-
$budgetConfirm
|
8
|
+
morphdom($orderTotalBudget[0], '<%= j(render partial: 'decidim/budgets/projects/order_total_budget') %>');
|
9
|
+
morphdom($orderSelectedProjects[0], '<%= j(render partial: 'decidim/budgets/projects/order_selected_projects') %>');
|
10
|
+
morphdom($orderProgress[0], '<%= j(render partial: 'decidim/budgets/projects/order_progress') %>');
|
11
|
+
morphdom($budgetConfirm[0], '<%= j(render partial: 'decidim/budgets/projects/budget_confirm') %>')
|
12
12
|
|
13
|
-
$(
|
13
|
+
$("#order-progress").foundation();
|
14
14
|
|
15
15
|
if ($projectItem.length > 0) {
|
16
|
-
$projectItem
|
16
|
+
morphdom($projectItem[0], '<%= j(render partial: 'decidim/budgets/projects/project', locals: { project: project }) %>');
|
17
17
|
}
|
18
18
|
|
19
19
|
if ($projectBudgetButton.length > 0) {
|
20
|
-
$projectBudgetButton
|
20
|
+
morphdom($projectBudgetButton[0], '<%= j(render partial: 'decidim/budgets/projects/project_budget_button', locals: { project: project }) %>');
|
21
21
|
}
|
22
|
+
|
23
|
+
window.DecidimBudgets.checkProgressPosition();
|
@@ -1,30 +1,32 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<
|
4
|
-
|
5
|
-
<
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
1
|
+
<div class="reveal" data-reveal id="budget-confirm">
|
2
|
+
<% if current_order.present? %>
|
3
|
+
<div class="reveal__header">
|
4
|
+
<h3 class="reveal__title"><%= t('.title') %></h3>
|
5
|
+
<button class="close-button" data-close aria-label="<%= t('.cancel') %>" type="button">
|
6
|
+
<span aria-hidden="true">×</span>
|
7
|
+
</button>
|
8
|
+
</div>
|
9
|
+
<p><%= t('.description') %></p>
|
10
|
+
<div class="card card--secondary">
|
11
|
+
<ul class="card__content">
|
12
|
+
<% current_order.projects.each do |project| %>
|
13
|
+
<li class="budget-summary__selected-item">
|
14
|
+
<%= link_to translated_attribute(project.title), project %>
|
15
|
+
<strong class="budget-summary__selected-number">
|
16
|
+
<%= budget_to_currency project.budget %>
|
17
|
+
</strong>
|
18
|
+
</li>
|
19
|
+
<% end %>
|
20
|
+
</ul>
|
21
|
+
</div>
|
22
|
+
<p class="text-center"><%= t('.are_you_sure') %></p>
|
22
23
|
<div class="row">
|
23
24
|
<div class="columns medium-8 medium-offset-2">
|
24
25
|
<%= button_to t('.confirm'), checkout_order_path, class: "button expanded" %>
|
25
26
|
</div>
|
26
27
|
</div>
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
<% end %>
|
28
|
+
<div class="text-center">
|
29
|
+
<button class="link" data-close><%= t('.cancel') %></button>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
32
|
+
</div>
|
@@ -20,27 +20,18 @@
|
|
20
20
|
</span>
|
21
21
|
</div>
|
22
22
|
|
23
|
-
|
24
|
-
<%= render partial: 'order_progress' %>
|
25
|
-
</div>
|
23
|
+
<%= render partial: 'order_progress' %>
|
26
24
|
|
27
25
|
<div>
|
28
26
|
<span class="mini-title">
|
29
27
|
<%= t('.assigned') %>
|
30
|
-
|
31
|
-
<%= render partial: 'order_total_budget' %>
|
32
|
-
</strong>
|
28
|
+
<%= render partial: 'order_total_budget' %>
|
33
29
|
</span>
|
34
30
|
</div>
|
35
31
|
</div>
|
36
32
|
|
37
|
-
|
38
|
-
<%= render partial: 'order_selected_projects' %>
|
39
|
-
</div>
|
33
|
+
<%= render partial: 'order_selected_projects' %>
|
40
34
|
</div>
|
41
35
|
|
42
36
|
<%= render partial: "budget_excess" %>
|
43
|
-
|
44
|
-
<div class="reveal" data-reveal id="budget-confirm">
|
45
|
-
<%= render partial: "budget_confirm" %>
|
46
|
-
</div>
|
37
|
+
<%= render partial: "budget_confirm" %>
|
@@ -1,24 +1,8 @@
|
|
1
|
-
<div
|
2
|
-
<div class="
|
3
|
-
<div class="progress-
|
4
|
-
<!--Change width and text dynamically.-->
|
5
|
-
<div class="progress-meter budget-progress__meter" style="width: <%= current_order_budget_percent %>%">
|
6
|
-
<p class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</p>
|
7
|
-
</div>
|
8
|
-
</div>
|
9
|
-
<% unless current_order_checked_out? %>
|
10
|
-
<% if current_order_can_be_checked_out? %>
|
11
|
-
<button class="button small button--sc" data-toggle="budget-confirm"><%= t('.vote') %></button>
|
12
|
-
<% else %>
|
13
|
-
<button class="button small button--sc" data-toggle="budget-confirm" disabled><%= t('.vote') %></button>
|
14
|
-
<% end %>
|
15
|
-
<% end %>
|
16
|
-
</div>
|
17
|
-
|
18
|
-
<div class="progressbox-fixed-wrapper" data-progressbox-fixed>
|
19
|
-
<div class="budget-summary__progressbox budget-summary__progressbox--fixed">
|
20
|
-
<div class="progress budget-progress budget-progress--fixed" role="progressbar" tabindex="0" aria-valuenow="<%= current_order_budget_percent %>" aria-valuemin="<%= feature_settings.vote_threshold_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemax="100">
|
1
|
+
<div id="order-progress">
|
2
|
+
<div class="budget-summary__progressbox" data-current-budget="<%= current_order ? current_order.total_budget : 0 %>">
|
3
|
+
<div class="progress budget-progress" role="progressbar" tabindex="0" aria-valuenow="<%= current_order_budget_percent %>" aria-valuemin="<%= feature_settings.vote_threshold_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemax="100">
|
21
4
|
<div class="progress-meter progress-meter--minimum" style="width: <%= 100 - current_order_budget_percent %>%"></div>
|
5
|
+
<!--Change width and text dynamically.-->
|
22
6
|
<div class="progress-meter budget-progress__meter" style="width: <%= current_order_budget_percent %>%">
|
23
7
|
<p class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</p>
|
24
8
|
</div>
|
@@ -31,4 +15,22 @@
|
|
31
15
|
<% end %>
|
32
16
|
<% end %>
|
33
17
|
</div>
|
34
|
-
|
18
|
+
|
19
|
+
<div class="progressbox-fixed-wrapper" data-progressbox-fixed>
|
20
|
+
<div class="budget-summary__progressbox budget-summary__progressbox--fixed">
|
21
|
+
<div class="progress budget-progress budget-progress--fixed" role="progressbar" tabindex="0" aria-valuenow="<%= current_order_budget_percent %>" aria-valuemin="<%= feature_settings.vote_threshold_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemax="100">
|
22
|
+
<div class="progress-meter progress-meter--minimum" style="width: <%= 100 - current_order_budget_percent %>%"></div>
|
23
|
+
<div class="progress-meter budget-progress__meter" style="width: <%= current_order_budget_percent %>%">
|
24
|
+
<p class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</p>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
<% unless current_order_checked_out? %>
|
28
|
+
<% if current_order_can_be_checked_out? %>
|
29
|
+
<button class="button small button--sc" data-toggle="budget-confirm"><%= t('.vote') %></button>
|
30
|
+
<% else %>
|
31
|
+
<button class="button small button--sc" data-toggle="budget-confirm" disabled><%= t('.vote') %></button>
|
32
|
+
<% end %>
|
33
|
+
<% end %>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
@@ -1,25 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<
|
4
|
-
<
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
<
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
<%=
|
1
|
+
<div id="order-selected-projects">
|
2
|
+
<% if current_order&.projects&.any? %>
|
3
|
+
<div class="card__content budget-summary__selected">
|
4
|
+
<button data-toggle="reveal-selected">
|
5
|
+
<strong><%= current_order.projects.size %> </strong><%= t('.selected_projects', count: current_order.projects.size) %>
|
6
|
+
<%= icon("caret-bottom", class:"icon--small", aria_label: t('.view'), role: "img") %>
|
7
|
+
</button>
|
8
|
+
<div id="reveal-selected" class="hide" data-toggler=".hide">
|
9
|
+
<ul class="budget-summary__selected-list">
|
10
|
+
<% current_order.projects.each do |project| %>
|
11
|
+
<li class="budget-summary__selected-item">
|
12
|
+
<%= link_to translated_attribute(project.title), project %>
|
13
|
+
<strong class="budget-summary__selected-number">
|
14
|
+
<%= budget_to_currency project.budget %>
|
15
|
+
</strong>
|
16
|
+
<% unless current_order_checked_out? %>
|
17
|
+
<%= button_to order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true }, form: { style: "display: inline" } do %>
|
18
|
+
<%= icon("trash", aria_label: t('.remove'), role: "img") %>
|
19
|
+
<% end %>
|
18
20
|
<% end %>
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
</
|
21
|
+
</li>
|
22
|
+
<% end %>
|
23
|
+
</ul>
|
24
|
+
</div>
|
23
25
|
</div>
|
24
|
-
|
25
|
-
|
26
|
+
<% end %>
|
27
|
+
</div>
|
@@ -1,40 +1,42 @@
|
|
1
|
-
<div class="card--
|
2
|
-
<div>
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
<%= render partial: "decidim/budgets/projects/tags", locals: { project: project } %>
|
9
|
-
</div>
|
10
|
-
</div>
|
11
|
-
<% if current_user.present? %>
|
12
|
-
<% if current_order && current_order.projects.include?(project) %>
|
13
|
-
<div class="card--list__data budget-list__data budget-list__data--added">
|
14
|
-
<span class="card--list__data__number budget-list__number">
|
15
|
-
<%= budget_to_currency(project.budget) %>
|
16
|
-
</span>
|
17
|
-
<%= button_to order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true, budget: project.budget }, disabled: current_order_checked_out?, class: "button tiny budget--list__action success" do %>
|
18
|
-
<%= icon("check", class: "icon--small", aria_label: t('.remove'), role: "img") %>
|
1
|
+
<div id="project-<%= project.id %>-item" class="card--list__item">
|
2
|
+
<div class="card--list__text">
|
3
|
+
<div>
|
4
|
+
<%= link_to project, class: "card__link" do %>
|
5
|
+
<h5 class="card__title budget-list__title">
|
6
|
+
<%= translated_attribute project.title %>
|
7
|
+
</h5>
|
19
8
|
<% end %>
|
9
|
+
<%= render partial: "decidim/budgets/projects/tags", locals: { project: project } %>
|
20
10
|
</div>
|
11
|
+
</div>
|
12
|
+
<% if current_user.present? %>
|
13
|
+
<% if current_order && current_order.projects.include?(project) %>
|
14
|
+
<div class="card--list__data budget-list__data budget-list__data--added">
|
15
|
+
<span class="card--list__data__number budget-list__number">
|
16
|
+
<%= budget_to_currency(project.budget) %>
|
17
|
+
</span>
|
18
|
+
<%= action_authorized_button_to "vote", order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true, budget: project.budget }, disabled: current_order_checked_out?, class: "button tiny budget--list__action success" do %>
|
19
|
+
<%= icon("check", class: "icon--small", aria_label: t('.remove'), role: "img") %>
|
20
|
+
<% end %>
|
21
|
+
</div>
|
22
|
+
<% else %>
|
23
|
+
<div class="card--list__data budget-list__data">
|
24
|
+
<span class="card--list__data__number budget-list__number">
|
25
|
+
<%= budget_to_currency(project.budget) %>
|
26
|
+
</span>
|
27
|
+
<%= action_authorized_button_to "vote", order_line_item_path(project_id: project), method: :post, remote: true, data: { disable: true, budget: project.budget, add: true }, disabled: current_order_checked_out?, class: "button tiny hollow budget--list__action" do %>
|
28
|
+
<%= icon("check", class: "icon--small", aria_label: t('.add'), role: "img") %>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
21
32
|
<% else %>
|
22
33
|
<div class="card--list__data budget-list__data">
|
23
34
|
<span class="card--list__data__number budget-list__number">
|
24
35
|
<%= budget_to_currency(project.budget) %>
|
25
36
|
</span>
|
26
|
-
|
37
|
+
<a href="#" class="button tiny hollow budget--list__action disabled" data-toggle="loginModal">
|
27
38
|
<%= icon("check", class: "icon--small", aria_label: t('.add'), role: "img") %>
|
28
|
-
|
39
|
+
</a>
|
29
40
|
</div>
|
30
41
|
<% end %>
|
31
|
-
|
32
|
-
<div class="card--list__data budget-list__data">
|
33
|
-
<span class="card--list__data__number budget-list__number">
|
34
|
-
<%= budget_to_currency(project.budget) %>
|
35
|
-
</span>
|
36
|
-
<a href="#" class="button tiny hollow budget--list__action disabled" data-toggle="loginModal">
|
37
|
-
<%= icon("check", class: "icon--small", aria_label: t('.add'), role: "img") %>
|
38
|
-
</a>
|
39
|
-
</div>
|
40
|
-
<% end %>
|
42
|
+
</div>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<% if current_user.present? %>
|
2
2
|
<% if current_order && current_order.projects.include?(project) %>
|
3
|
-
<%=
|
3
|
+
<%= action_authorized_button_to "vote", t('.added'), order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true, budget: project.budget }, disabled: current_order_checked_out?, class: "button expanded button--sc success budget--list__action" %>
|
4
4
|
<% else %>
|
5
|
-
<%=
|
5
|
+
<%= action_authorized_button_to "vote", t('.add'), order_line_item_path(project_id: project), method: :post, remote: true, data: { disable: true, budget: project.budget, add: true }, disabled: current_order_checked_out?, class: "button expanded button--sc budget--list__action" %>
|
6
6
|
<% end %>
|
7
7
|
<% else %>
|
8
8
|
<button class="button expanded button--sc disabled" data-toggle="loginModal"><%= t('.add') %></button>
|
@@ -1,8 +1,6 @@
|
|
1
1
|
<div class="card card--list budget-list">
|
2
2
|
<% projects.each do |project| %>
|
3
|
-
|
4
|
-
<%= render partial: 'project', locals: { project: project } %>
|
5
|
-
</div>
|
3
|
+
<%= render partial: 'project', locals: { project: project } %>
|
6
4
|
<% end %>
|
7
5
|
</div>
|
8
6
|
<%= decidim_paginate projects, random_seed: random_seed %>
|
@@ -1,5 +1,3 @@
|
|
1
|
-
<% content_for(:title, t(".title")) %>
|
2
|
-
|
3
1
|
<% if current_user.present? %>
|
4
2
|
<div class="row column">
|
5
3
|
<%= render partial: "budget_summary", locals: { include_heading: true } %>
|
@@ -23,4 +21,3 @@
|
|
23
21
|
|
24
22
|
<%= javascript_include_tag("decidim/filters") %>
|
25
23
|
<%= javascript_include_tag("decidim/budgets/projects") %>
|
26
|
-
<%= render partial: "decidim/shared/login_modal" %>
|
@@ -1,4 +1,7 @@
|
|
1
|
-
<%
|
1
|
+
<% add_decidim_meta_tags(
|
2
|
+
title: translated_attribute(project.title),
|
3
|
+
description: translated_attribute(project.description)
|
4
|
+
) %>
|
2
5
|
|
3
6
|
<div class="row column view-header">
|
4
7
|
<% if current_user.present? %>
|
@@ -27,22 +30,14 @@
|
|
27
30
|
</div>
|
28
31
|
<div class="columns mediumlarge-8 mediumlarge-pull-4">
|
29
32
|
<div class="section">
|
30
|
-
<%== translated_attribute project.short_description %>
|
31
|
-
<%= render partial: "tags", locals: { project: project } %>
|
32
|
-
</div>
|
33
|
-
<div class="section">
|
34
|
-
<h3 class="section-heading"><%= t(".project_description") %></h3>
|
35
33
|
<%== translated_attribute project.description %>
|
34
|
+
<%= render partial: "tags", locals: { project: project } %>
|
36
35
|
</div>
|
37
36
|
<%= linked_resources_for project, :proposals, "included_proposals" %>
|
38
37
|
</div>
|
39
38
|
</div>
|
40
39
|
|
41
|
-
<%=
|
42
|
-
<% if feature_settings.comments_always_enabled || current_settings.comments_enabled %>
|
43
|
-
<%= comments_for project, votable: true %>
|
44
|
-
<% end %>
|
45
|
-
<% end %>
|
40
|
+
<%= comments_for project %>
|
46
41
|
|
42
|
+
<%= attachments_for project %>
|
47
43
|
<%= javascript_include_tag("decidim/budgets/projects") %>
|
48
|
-
<%= render partial: "decidim/shared/login_modal" %>
|
data/config/i18n-tasks.yml
CHANGED
data/config/locales/ca.yml
CHANGED
@@ -1,7 +1,17 @@
|
|
1
1
|
ca:
|
2
|
+
activemodel:
|
3
|
+
attributes:
|
4
|
+
project:
|
5
|
+
budget: Pressupost
|
6
|
+
decidim_category_id: Categoria
|
7
|
+
decidim_scope_id: Àmbit
|
8
|
+
description: Descripció
|
9
|
+
proposal_ids: Propostes relacionades
|
10
|
+
title: Títol
|
2
11
|
decidim:
|
3
12
|
budgets:
|
4
13
|
actions:
|
14
|
+
attachments: Adjunts
|
5
15
|
confirm_destroy: Estàs segur que vols eliminar aquest projecte?
|
6
16
|
destroy: Esborrar
|
7
17
|
edit: Editar
|
@@ -15,6 +25,8 @@ ca:
|
|
15
25
|
create:
|
16
26
|
invalid: Hi ha hagut un problema creant aquest projecte
|
17
27
|
success: Projecte creat correctament
|
28
|
+
destroy:
|
29
|
+
success: Projecte eliminat correctament
|
18
30
|
edit:
|
19
31
|
title: Editar projecte
|
20
32
|
update: Actualitzar projecte
|
@@ -32,7 +44,7 @@ ca:
|
|
32
44
|
title: Títol
|
33
45
|
projects:
|
34
46
|
budget_confirm:
|
35
|
-
are_you_sure:
|
47
|
+
are_you_sure: Hi estàs d'acord? Un cop hagis confirmat el teu vot, no podràs canviar-lo.
|
36
48
|
cancel: Cancel·lar
|
37
49
|
confirm: Confirmar
|
38
50
|
description: Aquests són els projectes que has seleccionat per formar part del pressupost.
|
@@ -43,12 +55,13 @@ ca:
|
|
43
55
|
ok: D'acord
|
44
56
|
title: Pressupost superat
|
45
57
|
budget_summary:
|
58
|
+
are_you_sure: Estàs segur de que vols cancel·lar el teu vot?
|
46
59
|
assigned: 'Assignat:'
|
47
60
|
cancel_order: eliminar el teu vot i començar de nou
|
48
61
|
checked_out:
|
49
|
-
description: Ja has votat pel pressupost. Si
|
62
|
+
description: Ja has votat pel pressupost. Si has canviat d'idea, pots %{cancel_link}.
|
50
63
|
title: Vot pels pressupostos completat
|
51
|
-
description:
|
64
|
+
description: En quins projectes creus que hem de destinar el pressupost? Has d'assignar com a mínim %{minimum_budget} als projectes que desitges i votar amb les teves preferències per definir el pressupost.
|
52
65
|
title: Tu decideixes el pressupost
|
53
66
|
count:
|
54
67
|
projects_count:
|
@@ -58,8 +71,6 @@ ca:
|
|
58
71
|
category: Categoria
|
59
72
|
scopes: Àmbits
|
60
73
|
search: Cerca
|
61
|
-
index:
|
62
|
-
title: Títol
|
63
74
|
order_progress:
|
64
75
|
vote: Votar
|
65
76
|
order_selected_projects:
|
@@ -76,9 +87,22 @@ ca:
|
|
76
87
|
added: Afegit
|
77
88
|
show:
|
78
89
|
budget: Pressupost
|
79
|
-
project_description: Descripció del projecte
|
80
90
|
view_all_projects: Veure tots els projectes
|
81
91
|
features:
|
82
92
|
budgets:
|
83
93
|
name: Pressupostos
|
94
|
+
settings:
|
95
|
+
global:
|
96
|
+
comments_enabled: Comentaris habilitats
|
97
|
+
total_budget: Pressupost total
|
98
|
+
vote_threshold_percent: Percentatge del pressupost mínim per fer el vot
|
99
|
+
step:
|
100
|
+
comments_blocked: Comentaris bloquejats
|
101
|
+
orders:
|
102
|
+
checkout:
|
103
|
+
error: S'ha produït un error en processar el teu vot
|
104
|
+
success: El teu vot s'ha tramitat amb èxit
|
105
|
+
destroy:
|
106
|
+
error: S'ha produït un error en cancel·lar el seu vot
|
107
|
+
success: El seu vot ha estat cancel·lat correctament
|
84
108
|
total_budget: Pressupost total
|
data/config/locales/en.yml
CHANGED
@@ -1,8 +1,18 @@
|
|
1
1
|
---
|
2
2
|
en:
|
3
|
+
activemodel:
|
4
|
+
attributes:
|
5
|
+
project:
|
6
|
+
budget: Budget
|
7
|
+
decidim_category_id: Category
|
8
|
+
decidim_scope_id: Scope
|
9
|
+
description: Description
|
10
|
+
proposal_ids: Related proposals
|
11
|
+
title: Title
|
3
12
|
decidim:
|
4
13
|
budgets:
|
5
14
|
actions:
|
15
|
+
attachments: Attachments
|
6
16
|
confirm_destroy: Are you sure you want to delete this project?
|
7
17
|
destroy: Delete
|
8
18
|
edit: Edit
|
@@ -35,14 +45,17 @@ en:
|
|
35
45
|
title: Title
|
36
46
|
projects:
|
37
47
|
budget_confirm:
|
38
|
-
are_you_sure: Do you agree? Once you have confirmed your vote, you can not
|
48
|
+
are_you_sure: Do you agree? Once you have confirmed your vote, you can not
|
49
|
+
change it.
|
39
50
|
cancel: Cancel
|
40
51
|
confirm: Confirm
|
41
52
|
description: These are the projects you have chosen to be part of the budget.
|
42
53
|
title: Confirm vote
|
43
54
|
budget_excess:
|
44
55
|
close: Close
|
45
|
-
description: This project exceeds the maximum budget and can not be added.
|
56
|
+
description: This project exceeds the maximum budget and can not be added.
|
57
|
+
If you want, you can delete a project you have already selected to add,
|
58
|
+
or make your vote with your preferences.
|
46
59
|
ok: OK
|
47
60
|
title: Maximum budget exceeded
|
48
61
|
budget_summary:
|
@@ -50,9 +63,12 @@ en:
|
|
50
63
|
assigned: 'Assigned:'
|
51
64
|
cancel_order: delete your vote and start over
|
52
65
|
checked_out:
|
53
|
-
description: You've already voted for the budget. If you've changed your
|
66
|
+
description: You've already voted for the budget. If you've changed your
|
67
|
+
mind, you can %{cancel_link}.
|
54
68
|
title: Budget vote completed
|
55
|
-
description:
|
69
|
+
description: What projects do you think we should allocate budget for? Assign
|
70
|
+
at least %{minimum_budget} to the projects you want and vote with your
|
71
|
+
preferences to define the budget.
|
56
72
|
title: You decide the budget
|
57
73
|
count:
|
58
74
|
projects_count:
|
@@ -62,8 +78,6 @@ en:
|
|
62
78
|
category: Category
|
63
79
|
scopes: Scopes
|
64
80
|
search: Search
|
65
|
-
index:
|
66
|
-
title: Title
|
67
81
|
order_progress:
|
68
82
|
vote: Vote
|
69
83
|
order_selected_projects:
|
@@ -80,11 +94,17 @@ en:
|
|
80
94
|
added: Added
|
81
95
|
show:
|
82
96
|
budget: Budget
|
83
|
-
project_description: Project description
|
84
97
|
view_all_projects: View all projects
|
85
98
|
features:
|
86
99
|
budgets:
|
87
100
|
name: Budgets
|
101
|
+
settings:
|
102
|
+
global:
|
103
|
+
comments_enabled: Comments enabled
|
104
|
+
total_budget: Total budget
|
105
|
+
vote_threshold_percent: Vote threshold percent
|
106
|
+
step:
|
107
|
+
comments_blocked: Comments blocked
|
88
108
|
orders:
|
89
109
|
checkout:
|
90
110
|
error: An error ocurred while processing your vote
|
data/config/locales/es.yml
CHANGED
@@ -1,7 +1,17 @@
|
|
1
1
|
es:
|
2
|
+
activemodel:
|
3
|
+
attributes:
|
4
|
+
project:
|
5
|
+
budget: Presupuesto
|
6
|
+
decidim_category_id: Categoría
|
7
|
+
decidim_scope_id: Ámbito
|
8
|
+
description: Descripción
|
9
|
+
proposal_ids: Propuestas relacionadas
|
10
|
+
title: Título
|
2
11
|
decidim:
|
3
12
|
budgets:
|
4
13
|
actions:
|
14
|
+
attachments: Archivos adjuntos
|
5
15
|
confirm_destroy: '¿Estás seguro de que deseas eliminar este proyecto?'
|
6
16
|
destroy: Borrar
|
7
17
|
edit: Editar
|
@@ -15,6 +25,8 @@ es:
|
|
15
25
|
create:
|
16
26
|
invalid: Ha habido un problema al crear este proyecto
|
17
27
|
success: Proyecto creado con éxito
|
28
|
+
destroy:
|
29
|
+
success: Proyecto eliminado exitosamente
|
18
30
|
edit:
|
19
31
|
title: Editar proyecto
|
20
32
|
update: Actualizar proyecto
|
@@ -43,12 +55,13 @@ es:
|
|
43
55
|
ok: De acuerdo
|
44
56
|
title: Presupuesto excedido
|
45
57
|
budget_summary:
|
58
|
+
are_you_sure: '¿Estás seguro de que deseas cancelar tu voto?'
|
46
59
|
assigned: 'Asignado:'
|
47
60
|
cancel_order: eliminar tu voto y empezar de nuevo
|
48
61
|
checked_out:
|
49
62
|
description: Ya has votado para el presupuesto. Si has cambiado de idea, puedes %{cancel_link}.
|
50
63
|
title: Voto enviado correctamente
|
51
|
-
description:
|
64
|
+
description: '¿Qué proyectos crees que deberíamos asignar el presupuesto? Asigna por lo menos %{minimum_budget} a los proyectos que desees y vota para definir el presupuesto.'
|
52
65
|
title: Tú decides el presupuesto
|
53
66
|
count:
|
54
67
|
projects_count:
|
@@ -58,8 +71,6 @@ es:
|
|
58
71
|
category: Categoría
|
59
72
|
scopes: Ámbitos
|
60
73
|
search: Buscar
|
61
|
-
index:
|
62
|
-
title: Título
|
63
74
|
order_progress:
|
64
75
|
vote: Votar
|
65
76
|
order_selected_projects:
|
@@ -76,9 +87,22 @@ es:
|
|
76
87
|
added: Añadido
|
77
88
|
show:
|
78
89
|
budget: Presupuesto
|
79
|
-
project_description: Descripción del proyecto
|
80
90
|
view_all_projects: Ver todos los proyectos
|
81
91
|
features:
|
82
92
|
budgets:
|
83
93
|
name: Presupuestos
|
94
|
+
settings:
|
95
|
+
global:
|
96
|
+
comments_enabled: Comentarios habilitados
|
97
|
+
total_budget: Presupuesto total
|
98
|
+
vote_threshold_percent: Porcentaje mínimo del presupuesto
|
99
|
+
step:
|
100
|
+
comments_blocked: Comentarios bloqueados
|
101
|
+
orders:
|
102
|
+
checkout:
|
103
|
+
error: Se ha producido un error al procesar tu voto
|
104
|
+
success: Tu voto se ha tramitado con éxito
|
105
|
+
destroy:
|
106
|
+
error: Ha habido un error al cancelar tu voto
|
107
|
+
success: Tu voto ha sido cancelado correctamente
|
84
108
|
total_budget: Presupuesto total
|
@@ -8,6 +8,8 @@ Decidim.register_feature(:budgets) do |feature|
|
|
8
8
|
feature.icon = "decidim/budgets/icon.svg"
|
9
9
|
feature.stylesheet = "decidim/budgets/budgets"
|
10
10
|
|
11
|
+
feature.actions = %(vote)
|
12
|
+
|
11
13
|
feature.on(:before_destroy) do |instance|
|
12
14
|
raise StandardError, "Can't remove this feature" if Decidim::Budgets::Project.where(feature: instance).any?
|
13
15
|
end
|
@@ -20,11 +22,11 @@ Decidim.register_feature(:budgets) do |feature|
|
|
20
22
|
feature.settings(:global) do |settings|
|
21
23
|
settings.attribute :total_budget, type: :integer, default: 100_000_000
|
22
24
|
settings.attribute :vote_threshold_percent, type: :integer, default: 70
|
23
|
-
settings.attribute :
|
25
|
+
settings.attribute :comments_enabled, type: :boolean, default: true
|
24
26
|
end
|
25
27
|
|
26
28
|
feature.settings(:step) do |settings|
|
27
|
-
settings.attribute :
|
29
|
+
settings.attribute :comments_blocked, type: :boolean, default: false
|
28
30
|
end
|
29
31
|
|
30
32
|
feature.seeds do
|
@@ -34,6 +36,7 @@ Decidim.register_feature(:budgets) do |feature|
|
|
34
36
|
feature = Decidim::Feature.create!(
|
35
37
|
name: Decidim::Features::Namer.new(process.organization.available_locales, :budgets).i18n_name,
|
36
38
|
manifest_name: :budgets,
|
39
|
+
published_at: Time.current,
|
37
40
|
participatory_process: process
|
38
41
|
)
|
39
42
|
|
@@ -46,12 +49,20 @@ Decidim.register_feature(:budgets) do |feature|
|
|
46
49
|
description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
|
47
50
|
Decidim::Faker::Localized.paragraph(3)
|
48
51
|
end,
|
49
|
-
short_description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
|
50
|
-
Decidim::Faker::Localized.paragraph(3)
|
51
|
-
end,
|
52
52
|
budget: Faker::Number.number(8)
|
53
53
|
)
|
54
|
-
|
54
|
+
Decidim::Attachment.create!(
|
55
|
+
title: Decidim::Faker::Localized.sentence(2),
|
56
|
+
description: Decidim::Faker::Localized.sentence(5),
|
57
|
+
file: File.new(Decidim::Dev.asset("city.jpeg")),
|
58
|
+
attached_to: project
|
59
|
+
)
|
60
|
+
Decidim::Attachment.create!(
|
61
|
+
title: Decidim::Faker::Localized.sentence(2),
|
62
|
+
description: Decidim::Faker::Localized.sentence(5),
|
63
|
+
file: File.new(Decidim::Dev.asset("Exampledocument.pdf")),
|
64
|
+
attached_to: project
|
65
|
+
)
|
55
66
|
Decidim::Comments::Seed.comments_for(project)
|
56
67
|
end
|
57
68
|
end
|
@@ -3,7 +3,7 @@ require "decidim/faker/localized"
|
|
3
3
|
require "decidim/dev"
|
4
4
|
|
5
5
|
FactoryGirl.define do
|
6
|
-
factory :budget_feature,
|
6
|
+
factory :budget_feature, parent: :feature do
|
7
7
|
name { Decidim::Features::Namer.new(participatory_process.organization.available_locales, :budgets).i18n_name }
|
8
8
|
manifest_name :budgets
|
9
9
|
participatory_process
|
@@ -26,9 +26,8 @@ FactoryGirl.define do
|
|
26
26
|
factory :project, class: Decidim::Budgets::Project do
|
27
27
|
title { Decidim::Faker::Localized.sentence(3) }
|
28
28
|
description { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
|
29
|
-
short_description { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
|
30
29
|
budget { Faker::Number.number(8) }
|
31
|
-
feature { create(:budget_feature) }
|
30
|
+
feature { create(:budget_feature) }
|
32
31
|
end
|
33
32
|
|
34
33
|
factory :order, class: Decidim::Budgets::Order do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-budgets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josep Jaume Rey Peroy
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-02-
|
13
|
+
date: 2017-02-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: decidim-core
|
@@ -18,28 +18,28 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.0.
|
21
|
+
version: 0.0.5
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - '='
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 0.0.
|
28
|
+
version: 0.0.5
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: decidim-comments
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - '='
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: 0.0.
|
35
|
+
version: 0.0.5
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - '='
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.0.
|
42
|
+
version: 0.0.5
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rectify
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,28 +88,42 @@ dependencies:
|
|
88
88
|
requirements:
|
89
89
|
- - '='
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: 0.0.
|
91
|
+
version: 0.0.5
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - '='
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0.0.
|
98
|
+
version: 0.0.5
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: decidim-proposals
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
103
|
- - '='
|
104
104
|
- !ruby/object:Gem::Version
|
105
|
-
version: 0.0.
|
105
|
+
version: 0.0.5
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
110
|
- - '='
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0.0.
|
112
|
+
version: 0.0.5
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: decidim-admin
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - '='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 0.0.5
|
120
|
+
type: :development
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - '='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 0.0.5
|
113
127
|
description: ''
|
114
128
|
email:
|
115
129
|
- josepjaume@gmail.com
|
@@ -123,6 +137,7 @@ files:
|
|
123
137
|
- Rakefile
|
124
138
|
- app/assets/config/decidim_budgets_manifest.js
|
125
139
|
- app/assets/images/decidim/budgets/icon.svg
|
140
|
+
- app/assets/javascripts/decidim/budgets/progressFixed.js.es6
|
126
141
|
- app/assets/javascripts/decidim/budgets/projects.js.es6
|
127
142
|
- app/assets/stylesheets/decidim/budgets/_budgets.scss
|
128
143
|
- app/assets/stylesheets/decidim/budgets/budget/_budget-list.scss
|
@@ -136,6 +151,7 @@ files:
|
|
136
151
|
- app/commands/decidim/budgets/remove_line_item.rb
|
137
152
|
- app/controllers/concerns/decidim/budgets/needs_current_order.rb
|
138
153
|
- app/controllers/decidim/budgets/admin/application_controller.rb
|
154
|
+
- app/controllers/decidim/budgets/admin/attachments_controller.rb
|
139
155
|
- app/controllers/decidim/budgets/admin/projects_controller.rb
|
140
156
|
- app/controllers/decidim/budgets/application_controller.rb
|
141
157
|
- app/controllers/decidim/budgets/line_items_controller.rb
|
@@ -174,9 +190,11 @@ files:
|
|
174
190
|
- config/locales/ca.yml
|
175
191
|
- config/locales/en.yml
|
176
192
|
- config/locales/es.yml
|
193
|
+
- config/locales/eu.yml
|
177
194
|
- db/migrate/20170127114122_create_projects.rb
|
178
195
|
- db/migrate/20170130095615_create_orders.rb
|
179
196
|
- db/migrate/20170130101825_create_line_items.rb
|
197
|
+
- db/migrate/20170207101750_remove_short_description_from_decidim_projects.rb
|
180
198
|
- lib/decidim/budgets.rb
|
181
199
|
- lib/decidim/budgets/admin.rb
|
182
200
|
- lib/decidim/budgets/admin_engine.rb
|