Actions for budgets' headings added. Edit headings, delete headings if not budget investments associated and add link in order to see budgets investments filtered by the heading.

Cambios para hacer commit:
	modificado:    app/controllers/admin/budget_headings_controller.rb
	modificado:    app/models/budget/heading.rb
	nuevo archivo: app/views/admin/budget_headings/_errors.html.erb
	nuevo archivo: app/views/admin/budget_headings/edit.js.erb
	nuevo archivo: app/views/admin/budget_headings/update.js.erb
	modificado:    app/views/admin/budgets/_group.html.erb
	nuevo archivo: app/views/admin/budgets/_heading.html.erb
	nuevo archivo: app/views/admin/budgets/_heading_form.html.erb
	modificado:    config/locales/en/activerecord.yml
	modificado:    config/locales/es/activerecord.yml
	modificado:    spec/features/admin/budgets_spec.rb
	modificado:    spec/models/budget/heading_spec.rb
This commit is contained in:
iagirre
2017-09-25 15:40:17 +02:00
parent 7fa21afa56
commit f7e96067b0
12 changed files with 161 additions and 43 deletions

View File

@@ -9,6 +9,27 @@ class Admin::BudgetHeadingsController < Admin::BaseController
@headings = @budget_group.headings
end
def edit
@budget = Budget.find params[:budget_id]
@budget_group = @budget.groups.find params[:budget_group_id]
@heading = Budget::Heading.find params[:id]
end
def update
@budget = Budget.find params[:budget_id]
@budget_group = @budget.groups.find params[:budget_group_id]
@heading = Budget::Heading.find params[:id]
@heading.assign_attributes(budget_heading_params)
@errors = @heading.errors.full_messages unless @heading.save
end
def destroy
@heading = Budget::Heading.find params[:id]
@heading.destroy
@budget = Budget.find params[:budget_id]
redirect_to admin_budget_path(@budget)
end
private
def budget_heading_params

View File

@@ -20,7 +20,11 @@ class Budget
end
def name_exists_in_budget_headings
group.budget.headings.where(name: name).any?
group.budget.headings.where(name: name).where.not(id: id).any?
end
def can_be_deleted?
investments.empty?
end
end

View File

@@ -0,0 +1,7 @@
<div id='error_explanation' class='callout alert'>
<ul>
<% errors.each do |error| %>
<li><%= error %></li>
<% end %>
</ul>
</div>

View File

@@ -0,0 +1 @@
$("#heading-<%=@heading.id%>").html("<td colspan='4'><%= j render("admin/budgets/heading_form", group: @budget_group, budget: @budget, heading: @heading) %></td>");

View File

@@ -0,0 +1,5 @@
<% if @errors %>
$("#heading-<%=@heading.id%> div#error_explanation").replaceWith("<%= j render("admin/budget_headings/errors", errors: @errors) %>");
<% else %>
$("#heading-<%=@heading.id%>").html("<td colspan='4'><%= j render("admin/budgets/heading", group: @budget_group, budget: @budget, heading: @heading) %></td>");
<% end %>

View File

@@ -1,7 +1,7 @@
<table>
<thead>
<tr>
<th colspan="3" class="with-button">
<th colspan="4" class="with-button">
<%= group.name %>
<%= link_to t("admin.budgets.form.add_heading"), "#", class: "button float-right js-toggle-link", data: { "toggle-selector" => "#group-#{group.id}-new-heading-form" } %>
</th>
@@ -11,7 +11,7 @@
</thead>
<tbody>
<tr>
<td colspan="3">
<td colspan="4">
<div class="callout primary">
<%= t("admin.budgets.form.no_heading") %>
</div>
@@ -22,6 +22,7 @@
<th><%= t("admin.budgets.form.table_heading") %></th>
<th><%= t("admin.budgets.form.table_amount") %></th>
<th><%= t("admin.budgets.form.table_population") %></th>
<th><%= t("admin.actions.actions") %></th>
</tr>
</thead>
<tbody>
@@ -29,51 +30,14 @@
<!-- new heading form -->
<tr id="group-<%= group.id %>-new-heading-form" style="display:none">
<td colspan="3">
<%= form_for [:admin, @budget, group, Budget::Heading.new], remote: true do |f| %>
<label><%= t("admin.budgets.form.heading") %></label>
<%= f.text_field :name,
label: false,
maxlength: 50,
placeholder: t("admin.budgets.form.heading") %>
<div class="row">
<div class="small-12 medium-6 column">
<label><%= t("admin.budgets.form.amount") %></label>
<%= f.text_field :price,
label: false,
maxlength: 8,
placeholder: t("admin.budgets.form.amount") %>
</div>
</div>
<div class="row">
<div class="small-12 medium-6 column">
<label><%= t("admin.budgets.form.population") %></label>
<%= f.text_field :population,
label: false,
maxlength: 8,
placeholder: t("admin.budgets.form.population") %>
</div>
</div>
<%= f.submit t("admin.budgets.form.save_heading"), class: "button success" %>
<% end %>
<td colspan="4">
<%= render "admin/budgets/heading_form", group: group, budget: @budget, heading: Budget::Heading.new %>
</td>
</tr>
<!-- /. new heading form -->
<!-- headings list -->
<% headings.each do |heading| %>
<tr>
<td>
<%= heading.name %>
</td>
<td>
<%= heading.price %>
</td>
<td>
<%= heading.population %>
</td>
</tr>
<%= render "admin/budgets/heading", group: group, budget: @budget, heading: heading %>
<% end %>
<!-- /. headings list -->
</tbody>

View File

@@ -0,0 +1,27 @@
<tr id="heading-<%=heading.id%>">
<td>
<%= heading.name %>
</td>
<td>
<%= heading.price %>
</td>
<td>
<%= heading.population %>
</td>
<td>
<%= link_to t("admin.actions.edit"),
edit_admin_budget_budget_group_budget_heading_path(budget_id: group.budget.id, budget_group_id: group.id, id: heading.id),
class: "button hollow",
remote: true%>
<%= link_to t("admin.budget_investments.index.title"),
admin_budget_budget_investments_path(budget_id: group.budget.id, heading_id: heading.id),
class: "button hollow"%>
<% if heading.can_be_deleted? %>
<%= link_to t('admin.administrators.administrator.delete'),
#admin_budget_budget_group_budget_headings_path(group.budget.id, group.id),
[:admin, group.budget, group, heading],
method: :delete,
class: "button hollow alert"%>
<% end %>
</td>
</tr>

View File

@@ -0,0 +1,30 @@
<%= form_for [:admin, budget, group, heading], remote: true do |f| %>
<label><%= t("admin.budgets.form.heading") %></label>
<%= f.text_field :name,
label: false,
maxlength: 50,
placeholder: t("admin.budgets.form.heading") %>
<div class="row">
<div class="small-12 medium-6 column">
<label><%= t("admin.budgets.form.amount") %></label>
<%= f.text_field :price,
label: false,
maxlength: 8,
placeholder: t("admin.budgets.form.amount") %>
</div>
</div>
<div class="row">
<div class="small-12 medium-6 column">
<label><%= t("admin.budgets.form.population") %></label>
<%= f.text_field :population,
label: false,
maxlength: 8,
placeholder: t("admin.budgets.form.population") %>
</div>
</div>
<%= f.submit t("admin.budgets.form.save_heading"), class: "button success" %>
<div id="error_explanation"></div>
<% end %>

View File

@@ -107,6 +107,10 @@ en:
budget/investment/milestone:
title: "Title"
description: "Description"
budget/heading:
name: "Heading name"
price: "Price"
population: "Population"
comment:
body: "Comment"
user: "User"

View File

@@ -99,6 +99,10 @@ es:
title: "Título"
location: "Ubicación"
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, escribe su nombre"
budget/heading:
name: "Nombre de la partida"
price: "Cantidad"
population: "Población"
comment:
body: "Comentario"
user: "Usuario"

View File

@@ -199,5 +199,43 @@ feature 'Admin budgets' do
end
end
scenario 'Update heading', :js do
budget = create(:budget, name: 'Yearly participatory budget')
group = create(:budget_group, budget: budget, name: 'Districts improvments')
heading = create(:budget_heading, group: group, name: "District 1")
heading = create(:budget_heading, group: group, name: "District 3")
visit admin_budget_path(budget)
within("#heading-#{heading.id}") do
click_link 'Edit'
fill_in 'budget_heading_name', with: 'District 2'
fill_in 'budget_heading_price', with: '10000'
fill_in 'budget_heading_population', with: '6000'
click_button 'Save heading'
end
expect(page).to have_content 'District 2'
expect(page).to have_content '10000'
expect(page).to have_content '6000'
end
scenario 'Delete heading', :js do
budget = create(:budget, name: 'Yearly participatory budget')
group = create(:budget_group, budget: budget, name: 'Districts improvments')
heading = create(:budget_heading, group: group, name: "District 1")
visit admin_budget_path(budget)
expect(page).to have_content 'District 1'
within("#heading-#{heading.id}") do
click_link 'Delete'
end
expect(page).to_not have_content 'District 1'
end
end
end

View File

@@ -25,4 +25,17 @@ describe Budget::Heading do
end
end
describe "heading" do
it "can be deleted if not budget's investments associated" do
heading1 = create(:budget_heading, group: group, name: 'name')
heading2 = create(:budget_heading, group: group, name: 'name 2')
create(:budget_investment, heading: heading1)
expect(heading1.can_be_deleted?).to eq false
expect(heading2.can_be_deleted?).to eq true
end
end
end