diff --git a/app/controllers/quantities_controller.rb b/app/controllers/quantities_controller.rb
index 043b9de..944ac4b 100644
--- a/app/controllers/quantities_controller.rb
+++ b/app/controllers/quantities_controller.rb
@@ -3,7 +3,8 @@ class QuantitiesController < ApplicationController
before_action :init_session_filters
before_action :find_project_by_project_id, only: [:index, :new, :create, :filter, :parents]
- before_action :find_quantity, only: [:edit, :update, :destroy, :move]
+ before_action :find_quantity, only: [:edit, :update, :destroy, :move,
+ :new_child, :create_child]
before_action :authorize
def index
@@ -75,6 +76,24 @@ class QuantitiesController < ApplicationController
render :index
end
+ def new_child
+ @parent_quantity = @quantity
+ @quantity = @project.quantities.new
+ @quantity.domain = @parent_quantity.domain
+ @quantity.parent = @parent_quantity
+ @quantity.build_formula
+ end
+
+ def create_child
+ @quantity = @project.quantities.new(quantity_params)
+ if @quantity.save
+ flash[:notice] = 'Created new quantity'
+ prepare_quantities
+ else
+ render :new_child
+ end
+ end
+
private
def init_session_filters
diff --git a/app/views/quantities/_index.html.erb b/app/views/quantities/_index.html.erb
index 3d509d1..b63cfd6 100644
--- a/app/views/quantities/_index.html.erb
+++ b/app/views/quantities/_index.html.erb
@@ -46,6 +46,10 @@
<%= q.description %> |
<%= checked_image q.formula %> |
+ <%= link_to l(:button_child), new_child_quantity_path(q), {
+ remote: true,
+ class: "icon icon-add"
+ } %>
<%= link_to l(:button_edit), edit_quantity_path(q), {
remote: true,
class: "icon icon-edit"
diff --git a/app/views/quantities/_new_child_form.html.erb b/app/views/quantities/_new_child_form.html.erb
new file mode 100644
index 0000000..b78077f
--- /dev/null
+++ b/app/views/quantities/_new_child_form.html.erb
@@ -0,0 +1,15 @@
+<%= labelled_form_for @quantity,
+ url: create_child_quantity_path(@parent_quantity),
+ remote: true,
+ html: {id: 'new-child-form', name: 'new-child-form'} do |f| %>
+
+ <%= render partial: 'quantities/form', locals: {f: f} %>
+
+
+
+ <%= submit_tag l(:button_create) %>
+ <%= link_to l(:button_cancel), "#",
+ onclick: '$(this).closest("tr").remove(); return false;' %>
+
+
+<% end %>
diff --git a/app/views/quantities/create_child.js.erb b/app/views/quantities/create_child.js.erb
new file mode 100644
index 0000000..dd4e21b
--- /dev/null
+++ b/app/views/quantities/create_child.js.erb
@@ -0,0 +1,2 @@
+<%= render partial: 'body_trackers/flash' %>
+$('#quantities').html('<%= j render partial: 'quantities/index' %>');
diff --git a/app/views/quantities/new_child.js.erb b/app/views/quantities/new_child.js.erb
new file mode 100644
index 0000000..1272e4c
--- /dev/null
+++ b/app/views/quantities/new_child.js.erb
@@ -0,0 +1,8 @@
+<%= render partial: 'body_trackers/flash' %>
+$('tr[id=quantity-<%= @parent_quantity.id %>]').nextUntil('tr.quantity').remove();
+var columns = $('table > thead > tr > th').length;
+$('tr[id=quantity-<%= @parent_quantity.id %>]').nextAll('tr.quantity').first().before(
+ ' | ' +
+ ' <%= j render partial: "quantities/new_child_form" %> ' +
+ ' |
'
+);
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 795d2d0..6db430e 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -17,6 +17,7 @@ en:
field_code: 'Formula'
field_shortname: 'Short name'
button_retake: 'Retake'
+ button_child: 'Child'
activerecord:
errors:
models:
diff --git a/config/routes.rb b/config/routes.rb
index 9702467..22ca0f1 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -27,6 +27,8 @@ resources :projects, shallow: true do
resources :sources, only: [:index, :create, :destroy]
resources :quantities, only: [:index, :new, :create, :edit, :update, :destroy] do
member do
+ get 'new_child'
+ post 'create_child'
post 'move/:direction', to: 'quantities#move', as: :move
end
collection do
diff --git a/init.rb b/init.rb
index 419aaef..40478f0 100644
--- a/init.rb
+++ b/init.rb
@@ -28,7 +28,7 @@ Redmine::Plugin.register :body_tracking do
ingredients: [:new, :create, :edit, :update, :destroy, :toggle, :toggle_column,
:import],
sources: [:create, :destroy],
- quantities: [:new, :create, :edit, :update, :destroy, :move],
+ quantities: [:new, :create, :edit, :update, :destroy, :move, :new_child, :create_child],
units: [:create, :destroy],
}, require: :loggedin
end