Added Ingredient editing
Improved Ingredient to match Measurement functionality
This commit is contained in:
parent
20deb944c3
commit
a4ec6a0c12
@ -4,43 +4,47 @@ class IngredientsController < ApplicationController
|
|||||||
menu_item :body_trackers
|
menu_item :body_trackers
|
||||||
|
|
||||||
helper :body_trackers
|
helper :body_trackers
|
||||||
|
helper_method :current_view
|
||||||
|
|
||||||
before_action :init_session_filters
|
before_action :init_session_filters
|
||||||
before_action :find_project_by_project_id,
|
before_action :find_project_by_project_id,
|
||||||
only: [:index, :nutrients, :create, :import, :filter, :filter_nutrients]
|
only: [:index, :new, :create, :nutrients, :filter, :import]
|
||||||
before_action :find_quantity_by_quantity_id, only: [:toggle_column]
|
before_action :find_quantity_by_quantity_id, only: [:toggle_column]
|
||||||
before_action :find_ingredient, only: [:destroy, :toggle]
|
before_action :find_ingredient, only: [:edit, :update, :destroy, :toggle]
|
||||||
before_action :authorize
|
before_action :authorize
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
self.current_view = :ingredients
|
||||||
|
prepare_items
|
||||||
|
end
|
||||||
|
|
||||||
|
def new
|
||||||
@ingredient = @project.ingredients.new
|
@ingredient = @project.ingredients.new
|
||||||
# passing attr for Nutrient after_initialize
|
# passing attr for Nutrient after_initialize
|
||||||
@ingredient.nutrients.new(ingredient: @ingredient)
|
@ingredient.nutrients.new(ingredient: @ingredient)
|
||||||
|
|
||||||
prepare_ingredients
|
|
||||||
@ingredients << @ingredient
|
|
||||||
end
|
|
||||||
|
|
||||||
def nutrients
|
|
||||||
@ingredient = @project.ingredients.new
|
|
||||||
@ingredient.nutrients.new(ingredient: @ingredient)
|
|
||||||
prepare_nutrients
|
|
||||||
end
|
|
||||||
|
|
||||||
def toggle_column
|
|
||||||
@project.nutrients_column_view.toggle_column!(@quantity)
|
|
||||||
prepare_nutrients
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@ingredient = @project.ingredients.new(ingredient_params)
|
@ingredient = @project.ingredients.new(ingredient_params)
|
||||||
if @ingredient.save
|
if @ingredient.save
|
||||||
flash[:notice] = 'Created new ingredient'
|
flash[:notice] = 'Created new ingredient'
|
||||||
redirect_to :back
|
prepare_items
|
||||||
else
|
else
|
||||||
prepare_ingredients
|
|
||||||
@ingredient.nutrients.new(ingredient: @ingredient) if @ingredient.nutrients.empty?
|
@ingredient.nutrients.new(ingredient: @ingredient) if @ingredient.nutrients.empty?
|
||||||
|
render :new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
if @ingredient.update(ingredient_params)
|
||||||
|
flash[:notice] = 'Updated ingredient'
|
||||||
|
prepare_items
|
||||||
render :index
|
render :index
|
||||||
|
else
|
||||||
|
render :edit
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -48,25 +52,28 @@ class IngredientsController < ApplicationController
|
|||||||
if @ingredient.destroy
|
if @ingredient.destroy
|
||||||
flash[:notice] = 'Deleted ingredient'
|
flash[:notice] = 'Deleted ingredient'
|
||||||
end
|
end
|
||||||
prepare_ingredients
|
|
||||||
render :toggle
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def toggle
|
def toggle
|
||||||
@ingredient.toggle_hidden!
|
@ingredient.toggle_hidden!
|
||||||
prepare_ingredients
|
prepare_items
|
||||||
|
end
|
||||||
|
|
||||||
|
def nutrients
|
||||||
|
self.current_view = :nutrients
|
||||||
|
prepare_items
|
||||||
|
end
|
||||||
|
|
||||||
|
def toggle_column
|
||||||
|
@project.nutrients_column_view.toggle_column!(@quantity)
|
||||||
|
prepare_items
|
||||||
|
render :index
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter
|
def filter
|
||||||
session[:i_filters] = params[:filters]
|
session[:i_filters] = params[:filters]
|
||||||
prepare_ingredients
|
prepare_items
|
||||||
render :toggle
|
render :index
|
||||||
end
|
|
||||||
|
|
||||||
def filter_nutrients
|
|
||||||
session[:i_filters] = params[:filters]
|
|
||||||
prepare_nutrients
|
|
||||||
render :toggle_nutrient_column
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def import
|
def import
|
||||||
@ -216,4 +223,15 @@ class IngredientsController < ApplicationController
|
|||||||
@ingredients, @requested_n, @extra_n, @formula_q = @project.ingredients
|
@ingredients, @requested_n, @extra_n, @formula_q = @project.ingredients
|
||||||
.filter(session[:i_filters], @quantities)
|
.filter(session[:i_filters], @quantities)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def prepare_items
|
||||||
|
(current_view == :nutrients) ? prepare_nutrients : prepare_ingredients
|
||||||
|
end
|
||||||
|
|
||||||
|
def current_view
|
||||||
|
@current_view || (params[:view_mode] == "nutrients" ? :nutrients : :ingredients)
|
||||||
|
end
|
||||||
|
def current_view=(cv)
|
||||||
|
@current_view = cv
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -40,6 +40,8 @@ module IngredientsHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
def action_links(i)
|
def action_links(i)
|
||||||
|
link_to(l(:button_edit), edit_ingredient_path(i, view_mode: current_view),
|
||||||
|
{remote: true, class: "icon icon-edit"}) +
|
||||||
delete_link(ingredient_path(i), {remote: true, data: {}})
|
delete_link(ingredient_path(i), {remote: true, data: {}})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<% if User.current.allowed_to?(:manage_common, @project) %>
|
<% if User.current.allowed_to?(:manage_common, @project) %>
|
||||||
<%= link_to t(".link_import_ingredients"), '#', class: 'icon icon-multiple',
|
<%= link_to t(".link_import_ingredients"), '#', class: 'icon icon-multiple',
|
||||||
onclick: '$("#import-ingredients").show(); $("#filename").focus(); return false;' %>
|
onclick: '$("#import-ingredients").show(); $("#filename").focus(); return false;' %>
|
||||||
<%= link_to t(".link_new_ingredient"), '#', class: 'icon icon-add',
|
<%= link_to t(".link_new_ingredient"),
|
||||||
onclick: '$("#add-ingredient").show(); $("#ingredient_name").focus(); return false;' %>
|
new_project_ingredient_path(@project, view_mode: current_view),
|
||||||
|
{remote: true, class: 'icon icon-add'} %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
15
app/views/ingredients/_edit_form.html.erb
Normal file
15
app/views/ingredients/_edit_form.html.erb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<%= labelled_form_for @ingredient,
|
||||||
|
url: ingredient_path(@ingredient, view_mode: current_view),
|
||||||
|
method: :patch, remote: true,
|
||||||
|
html: {id: 'ingredient-edit-form', name: 'ingredient-edit-form'} do |f| %>
|
||||||
|
|
||||||
|
<%= render partial: 'ingredients/form', locals: {f: f} %>
|
||||||
|
|
||||||
|
<div class="tabular">
|
||||||
|
<p>
|
||||||
|
<%= submit_tag l(:button_save) %>
|
||||||
|
<%= link_to l(:button_cancel), "#",
|
||||||
|
onclick: '$(this).closest("tr").remove(); return false;' %>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
@ -1,10 +1,3 @@
|
|||||||
<div id="add-ingredient" <%= 'style=display:none;' if @ingredient.errors.empty? %>>
|
|
||||||
<h2><%= t ".heading_new_ingredient" %></h2>
|
|
||||||
|
|
||||||
<%= labelled_form_for @ingredient,
|
|
||||||
url: project_ingredients_path(@project),
|
|
||||||
html: {id: 'ingredient-add-form', name: 'ingredient-add-form'} do |f| %>
|
|
||||||
|
|
||||||
<%= error_messages_for @ingredient %>
|
<%= error_messages_for @ingredient %>
|
||||||
|
|
||||||
<div class="box tabular">
|
<div class="box tabular">
|
||||||
@ -19,9 +12,8 @@
|
|||||||
<p><%= f.select :group, group_options, required: true %></p>
|
<p><%= f.select :group, group_options, required: true %></p>
|
||||||
<div class="splitcontent">
|
<div class="splitcontent">
|
||||||
<div class="splitcontentleft">
|
<div class="splitcontentleft">
|
||||||
<p>
|
<p><%= f.select :source_id, source_options,
|
||||||
<%= f.select :source_id, source_options, required: false, include_blank: true %>
|
{required: false, include_blank: t('.null_source')} %></p>
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="splitcontentright">
|
<div class="splitcontentright">
|
||||||
<p><%= f.text_field :source_ident, size: 25, required: false %></p>
|
<p><%= f.text_field :source_ident, size: 25, required: false %></p>
|
||||||
@ -30,11 +22,12 @@
|
|||||||
<% @ingredient.nutrients.each_with_index do |n, index| %>
|
<% @ingredient.nutrients.each_with_index do |n, index| %>
|
||||||
<%= f.fields_for 'nutrients_attributes', n, index: '' do |ff| %>
|
<%= f.fields_for 'nutrients_attributes', n, index: '' do |ff| %>
|
||||||
<p class="nutrient">
|
<p class="nutrient">
|
||||||
|
<%= ff.hidden_field :id %>
|
||||||
<%= ff.select :quantity_id, quantity_options,
|
<%= ff.select :quantity_id, quantity_options,
|
||||||
{include_blank: true, label: (index > 0 ? '' : :field_nutrients)} %>
|
{include_blank: true, required: true, label: (index > 0 ? '' : :field_nutrients)} %>
|
||||||
<%= ff.number_field :amount, {size: 8, min: 0, step: :any, label: ''} %>
|
<%= ff.number_field :amount, {size: 8, min: 0, step: :any, label: ''} %>
|
||||||
<%= ff.select :unit_id, unit_options, {label: ''} %>
|
<%= ff.select :unit_id, unit_options, {label: ''} %>
|
||||||
<%= ff.check_box :_destroy, {style: "display:none", label: ''} %>
|
<%= ff.hidden_field :_destroy %>
|
||||||
<%= link_to t(".button_delete_nutrient"), '#',
|
<%= link_to t(".button_delete_nutrient"), '#',
|
||||||
class: 'icon icon-del',
|
class: 'icon icon-del',
|
||||||
style: (@ingredient.nutrients.length > 1 ? "" : "display:none"),
|
style: (@ingredient.nutrients.length > 1 ? "" : "display:none"),
|
||||||
@ -43,37 +36,35 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<p>
|
<p>
|
||||||
<%= link_to t(".button_add_nutrient"), '#', class: 'icon icon-add',
|
<%= link_to t(".button_new_nutrient"), '#', class: 'icon icon-add',
|
||||||
onclick: 'addNutrient(); return false;' %>
|
onclick: 'newNutrient(); return false;' %>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<%= submit_tag l(:button_create) %>
|
|
||||||
<%= link_to l(:button_cancel), "#",
|
|
||||||
onclick: '$("#add-ingredient").hide(); return false;' %>
|
|
||||||
<% end %>
|
|
||||||
<hr>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%= javascript_tag do %>
|
<%= javascript_tag do %>
|
||||||
function addNutrient() {
|
function newNutrient() {
|
||||||
var row = $('p.nutrient:visible:last');
|
var form = $(event.target).closest('form');
|
||||||
|
var row = form.find('p.nutrient:visible:last');
|
||||||
var new_row = row.clone().insertAfter(row);
|
var new_row = row.clone().insertAfter(row);
|
||||||
new_row.find('input[id$=_amount], select[id$=_quantity_id]').val('');
|
new_row.find('input[id$=__id], input[id$=__amount], select[id$=_quantity__id]').val('');
|
||||||
new_row.find('select[id$=_unit_id]').val(row.find('select[id$=_unit_id]').val());
|
new_row.find('select[id$=__unit_id]').val(row.find('select[id$=__unit_id]').val());
|
||||||
new_row.find('label:first').text('');
|
new_row.find('input[id$=__destroy]').val('');
|
||||||
if ($('p.nutrient:visible').length > 1) {
|
new_row.find('label:first').hide();
|
||||||
$('p.nutrient a.icon-del').show();
|
form.find('p.nutrient:visible a.icon-del').show();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteNutrient() {
|
function deleteNutrient() {
|
||||||
|
var form = $(event.target).closest('form');
|
||||||
var row = $(event.target).closest('p.nutrient');
|
var row = $(event.target).closest('p.nutrient');
|
||||||
row.find('[id$=_destroy]').val(1);
|
if (row.find('input[id$=__id]').val()) {
|
||||||
// FIXME: should only hide() row if record already saved (to send _destroy to backend)
|
row.hide();
|
||||||
|
row.find('input[id$=__destroy]').val('1');
|
||||||
|
} else {
|
||||||
row.remove();
|
row.remove();
|
||||||
$('p.nutrient:visible:first label:first').text('<%= t "field_nutrients" %>');
|
}
|
||||||
if ($('p.nutrient:visible').length <= 1) {
|
form.find('p.nutrient:visible:first label:first').show();
|
||||||
$('p.nutrient a.icon-del').hide();
|
if (form.find('p.nutrient:visible').length <= 1) {
|
||||||
|
form.find('p.nutrient:visible a.icon-del').hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -16,7 +16,8 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<% @ingredients.each do |i| %>
|
<% @ingredients.each do |i| %>
|
||||||
<% next if i.new_record? %>
|
<% next if i.new_record? %>
|
||||||
<tr id="ingredient-<%= i.id %>" class="ingredient <%= 'hidden' if i.hidden %>">
|
<tr id="ingredient-<%= i.id %>"
|
||||||
|
class="ingredient primary<%= ' hidden' if i.hidden %>">
|
||||||
<td class="name ellipsible">
|
<td class="name ellipsible">
|
||||||
<%= link_to '', toggle_ingredient_path(i), {
|
<%= link_to '', toggle_ingredient_path(i), {
|
||||||
remote: true,
|
remote: true,
|
||||||
|
18
app/views/ingredients/_new_form.html.erb
Normal file
18
app/views/ingredients/_new_form.html.erb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<h2><%= t ".heading_new_ingredient" %></h2>
|
||||||
|
|
||||||
|
<%= labelled_form_for @ingredient,
|
||||||
|
url: project_ingredients_path(@project, view_mode: current_view),
|
||||||
|
remote: true,
|
||||||
|
html: {id: 'new-ingredient-form', name: 'new-ingredient-form'} do |f| %>
|
||||||
|
|
||||||
|
<%= render partial: 'ingredients/form', locals: {f: f} %>
|
||||||
|
|
||||||
|
<div class="tabular">
|
||||||
|
<p>
|
||||||
|
<%= submit_tag l(:button_create) %>
|
||||||
|
<%= link_to l(:button_cancel), "#",
|
||||||
|
onclick: '$("#new-ingredient").empty(); return false;' %>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<hr>
|
@ -1,5 +1,5 @@
|
|||||||
<%= render partial: 'ingredients/filters',
|
<%= render partial: 'ingredients/filters',
|
||||||
locals: {url: filter_nutrients_project_ingredients_path(@project)} %>
|
locals: {url: filter_project_ingredients_path(@project, view_mode: current_view)} %>
|
||||||
|
|
||||||
<% if @ingredients.any? %>
|
<% if @ingredients.any? %>
|
||||||
<%= render partial: 'ingredients/options' %>
|
<%= render partial: 'ingredients/options' %>
|
||||||
@ -13,7 +13,8 @@
|
|||||||
<th style="width:<%= 100/total_width %>%" class="closable ellipsible">
|
<th style="width:<%= 100/total_width %>%" class="closable ellipsible">
|
||||||
<div style="float:right;position:relative;">
|
<div style="float:right;position:relative;">
|
||||||
<%= link_to '',
|
<%= link_to '',
|
||||||
toggle_column_project_ingredients_path(@project, quantity_id: q.id),
|
toggle_column_project_ingredients_path(@project, quantity_id: q.id,
|
||||||
|
view_mode: current_view),
|
||||||
{class: "icon icon-close", method: :post, remote: true} %>
|
{class: "icon icon-close", method: :post, remote: true} %>
|
||||||
</div>
|
</div>
|
||||||
<%= q.name %>
|
<%= q.name %>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<fieldset id="options" class="collapsible">
|
<fieldset id="options" class="collapsible">
|
||||||
<legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
|
<legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
|
||||||
<div>
|
<div>
|
||||||
<%= form_tag toggle_column_project_ingredients_path(@project),
|
<%= form_tag toggle_column_project_ingredients_path(@project, view_mode: current_view),
|
||||||
id: 'toggle-column-form', name: 'toggle-column-form',
|
id: 'toggle-column-form', name: 'toggle-column-form',
|
||||||
method: :post, remote: true do %>
|
method: :post, remote: true do %>
|
||||||
|
|
||||||
|
7
app/views/ingredients/create.js.erb
Normal file
7
app/views/ingredients/create.js.erb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<%= render partial: 'body_trackers/flash' %>
|
||||||
|
$('#new-ingredient').empty();
|
||||||
|
<% if current_view == :nutrients %>
|
||||||
|
$('#nutrients').html('<%= j render partial: 'ingredients/nutrients' %>');
|
||||||
|
<% else %>
|
||||||
|
$('#ingredients').html('<%= j render partial: 'ingredients/index' %>');
|
||||||
|
<% end %>
|
4
app/views/ingredients/destroy.js.erb
Normal file
4
app/views/ingredients/destroy.js.erb
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<%= render partial: 'body_trackers/flash' %>
|
||||||
|
<% if @ingredient.destroyed? %>
|
||||||
|
$('tr[id=ingredient-<%= @ingredient.id %>]').nextUntil('tr.primary').addBack().remove();
|
||||||
|
<% end %>
|
9
app/views/ingredients/edit.js.erb
Normal file
9
app/views/ingredients/edit.js.erb
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<%= render partial: 'body_trackers/flash' %>
|
||||||
|
$('tr[id=ingredient-<%= @ingredient.id %>]').nextUntil('tr.primary', ':not(.ingredient)')
|
||||||
|
.remove();
|
||||||
|
var columns = $('table > thead > tr > th').length;
|
||||||
|
$('tr[id=ingredient-<%= @ingredient.id %>]').nextAll('tr.primary').first().before(
|
||||||
|
'<tr><td class="form" colspan="'+columns+'">' +
|
||||||
|
'<div id="edit-ingredient"><%= j render partial: "ingredients/edit_form" %></div>' +
|
||||||
|
'</td></tr>'
|
||||||
|
);
|
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
<%= render partial: 'ingredients/import' %>
|
<%= render partial: 'ingredients/import' %>
|
||||||
|
|
||||||
<%= render partial: 'ingredients/form' %>
|
<div id="new-ingredient">
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2><%= t ".heading" %></h2>
|
<h2><%= t ".heading" %></h2>
|
||||||
<div id='ingredients'>
|
<div id='ingredients'>
|
||||||
|
6
app/views/ingredients/index.js.erb
Normal file
6
app/views/ingredients/index.js.erb
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<%= render partial: 'body_trackers/flash' %>
|
||||||
|
<% if current_view == :nutrients %>
|
||||||
|
$('#nutrients').html('<%= j render partial: 'ingredients/nutrients' %>');
|
||||||
|
<% else %>
|
||||||
|
$('#ingredients').html('<%= j render partial: 'ingredients/index' %>');
|
||||||
|
<% end %>
|
2
app/views/ingredients/new.js.erb
Normal file
2
app/views/ingredients/new.js.erb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<%= render partial: 'body_trackers/flash' %>
|
||||||
|
$('#new-ingredient').html('<%= j render partial: 'ingredients/new_form' %>');
|
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
<%= render partial: 'ingredients/import' %>
|
<%= render partial: 'ingredients/import' %>
|
||||||
|
|
||||||
<%= render partial: 'ingredients/form' %>
|
<div id="new-ingredient">
|
||||||
|
</div>
|
||||||
|
|
||||||
<h2><%= t ".heading" %></h2>
|
<h2><%= t ".heading" %></h2>
|
||||||
<div id='nutrients'>
|
<div id='nutrients'>
|
||||||
|
@ -1,3 +1,2 @@
|
|||||||
$('div[id^=flash_]').remove();
|
<%= render partial: 'body_trackers/flash' %>
|
||||||
$('#content').prepend('<%= escape_javascript(render_flash_messages) %>');
|
$('#ingredients').html('<%= j render partial: 'ingredients/index' %>');
|
||||||
$('#ingredients').html('<%= escape_javascript(render partial: 'ingredients/index') %>');
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
$('div[id^=flash_]').remove();
|
|
||||||
$('#content').prepend('<%= escape_javascript(render_flash_messages) %>');
|
|
||||||
$('#nutrients').html('<%= escape_javascript(render partial: 'ingredients/nutrients') %>');
|
|
@ -86,12 +86,14 @@ en:
|
|||||||
Sample data row: "Brussels,100[g],other,3.4,300[mg],9".
|
Sample data row: "Brussels,100[g],other,3.4,300[mg],9".
|
||||||
Unit given in data row has precedence over that specified in header.'
|
Unit given in data row has precedence over that specified in header.'
|
||||||
form:
|
form:
|
||||||
heading_new_ingredient: 'New ingredient'
|
button_new_nutrient: 'Add nutrient'
|
||||||
button_add_nutrient: 'Add nutrient'
|
|
||||||
button_delete_nutrient: 'Delete'
|
button_delete_nutrient: 'Delete'
|
||||||
|
null_source: '- unspecified -'
|
||||||
groups:
|
groups:
|
||||||
other: 'other'
|
other: 'other'
|
||||||
meat: 'meat'
|
meat: 'meat'
|
||||||
|
new_form:
|
||||||
|
heading_new_ingredient: 'New ingredient'
|
||||||
index:
|
index:
|
||||||
heading: 'Ingredients'
|
heading: 'Ingredients'
|
||||||
heading_nutrient_view: 'Nutrient view'
|
heading_nutrient_view: 'Nutrient view'
|
||||||
|
@ -15,14 +15,13 @@ resources :projects, shallow: true do
|
|||||||
get 'filter'
|
get 'filter'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :ingredients, only: [:index, :create, :destroy] do
|
resources :ingredients, only: [:index, :new, :create, :edit, :update, :destroy] do
|
||||||
post 'toggle', on: :member
|
post 'toggle', on: :member
|
||||||
collection do
|
collection do
|
||||||
get 'nutrients'
|
get 'nutrients'
|
||||||
get 'filter'
|
|
||||||
get 'filter_nutrients'
|
|
||||||
post 'import'
|
|
||||||
post 'toggle_column'
|
post 'toggle_column'
|
||||||
|
get 'filter'
|
||||||
|
post 'import'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :sources, only: [:index, :create, :destroy]
|
resources :sources, only: [:index, :create, :destroy]
|
||||||
|
5
init.rb
5
init.rb
@ -17,7 +17,7 @@ Redmine::Plugin.register :body_tracking do
|
|||||||
permission :view_body_trackers, {
|
permission :view_body_trackers, {
|
||||||
body_trackers: [:index],
|
body_trackers: [:index],
|
||||||
measurements: [:index, :readouts, :filter],
|
measurements: [:index, :readouts, :filter],
|
||||||
ingredients: [:index, :nutrients, :filter, :filter_nutrients],
|
ingredients: [:index, :nutrients, :filter],
|
||||||
sources: [:index],
|
sources: [:index],
|
||||||
quantities: [:index, :parents, :filter],
|
quantities: [:index, :parents, :filter],
|
||||||
units: [:index],
|
units: [:index],
|
||||||
@ -25,7 +25,8 @@ Redmine::Plugin.register :body_tracking do
|
|||||||
permission :manage_common, {
|
permission :manage_common, {
|
||||||
body_trackers: [:defaults],
|
body_trackers: [:defaults],
|
||||||
measurements: [:new, :create, :edit, :update, :destroy, :retake, :toggle_column],
|
measurements: [:new, :create, :edit, :update, :destroy, :retake, :toggle_column],
|
||||||
ingredients: [:create, :destroy, :toggle, :import, :toggle_column],
|
ingredients: [:new, :create, :edit, :update, :destroy, :toggle, :toggle_column,
|
||||||
|
:import],
|
||||||
sources: [:create, :destroy],
|
sources: [:create, :destroy],
|
||||||
quantities: [:create, :edit, :update, :destroy, :move],
|
quantities: [:create, :edit, :update, :destroy, :move],
|
||||||
units: [:create, :destroy],
|
units: [:create, :destroy],
|
||||||
|
Reference in New Issue
Block a user