decidim-budgets 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|