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