From cdbf1f5fa0e7e2f38d36af583e07ed96fab2efd0 Mon Sep 17 00:00:00 2001 From: artoscinote <85488244+artoscinote@users.noreply.github.com> Date: Wed, 2 Feb 2022 10:33:02 +0100 Subject: [PATCH] Implement stock management activities [SCI-6452] (#3810) * Implement stock management activities [SCI-6452] * PR code fixes [SCI-6452] --- app/assets/javascripts/repositories/stock.js | 6 +- .../javascripts/sitewide/dropdown_selector.js | 11 +++ .../repository_stock_values_controller.rb | 84 ++++++++++++------- app/helpers/repository_datatable_helper.rb | 2 +- app/models/activity.rb | 2 + .../references/_repository_row.html.erb | 2 + .../_manage_modal_content.erb | 8 +- config/initializers/extends.rb | 11 ++- config/locales/global_activities/en.yml | 3 + ...005_create_repository_stock_unit_items.rb} | 0 10 files changed, 92 insertions(+), 37 deletions(-) create mode 100644 app/views/global_activities/references/_repository_row.html.erb rename db/migrate/{20220117103522_create_repository_stock_unit_items.rb => 20220110151005_create_repository_stock_unit_items.rb} (100%) diff --git a/app/assets/javascripts/repositories/stock.js b/app/assets/javascripts/repositories/stock.js index ea31742e5..c11f94594 100644 --- a/app/assets/javascripts/repositories/stock.js +++ b/app/assets/javascripts/repositories/stock.js @@ -18,7 +18,7 @@ var RepositoryStockValues = (function() { closeOnSelect: true, selectAppearance: 'simple', onChange: function() { - $('.stock-final-container .units').text(dropdownSelector.getValues(UNIT_SELECTOR)); + $('.stock-final-container .units').text(dropdownSelector.getLabels(UNIT_SELECTOR)); } }); @@ -35,6 +35,8 @@ var RepositoryStockValues = (function() { $stockInput.data('operator', $(this).data('operator')); dropdownSelector.selectValues(UNIT_SELECTOR, $('#initial_units').val()); + $('#operator').val($(this).data('operator')); + switch ($(this).data('operator')) { case 'set': $stockInput.val($stockInput.data('currentAmount')); @@ -74,6 +76,8 @@ var RepositoryStockValues = (function() { newAmount = currentAmount; break; } + $('#change_amount').val(inputAmount); + $('#repository_stock_value_amount').val(newAmount); $('.stock-final-container .value').text(newAmount); }); diff --git a/app/assets/javascripts/sitewide/dropdown_selector.js b/app/assets/javascripts/sitewide/dropdown_selector.js index acfa3aa42..d32c1bfbf 100644 --- a/app/assets/javascripts/sitewide/dropdown_selector.js +++ b/app/assets/javascripts/sitewide/dropdown_selector.js @@ -896,6 +896,17 @@ var dropdownSelector = (function() { return values; }, + // Get selected labels + getLabels: function(selector) { + var labels; + if ($(selector).length === 0) return false; + labels = $.map(getCurrentData($(selector).next()), (v) => { + return v.label; + }); + if ($(selector).data('config').singleSelect) return labels[0]; + + return labels; + }, // Get all data getData: function(selector) { if ($(selector).length === 0) return false; diff --git a/app/controllers/repository_stock_values_controller.rb b/app/controllers/repository_stock_values_controller.rb index 1a5513771..fcf0fb877 100644 --- a/app/controllers/repository_stock_values_controller.rb +++ b/app/controllers/repository_stock_values_controller.rb @@ -33,40 +33,51 @@ class RepositoryStockValuesController < ApplicationController end def create_or_update - if @repository_stock_value # update - ActiveRecord::Base.transaction do - @repository_stock_value.update_stock_with_ledger!( - repository_stock_value_params[:amount], - @repository, - repository_stock_value_params[:comment].presence - ) - @repository_stock_value.repository_stock_unit_item = - @repository_column.repository_stock_unit_items.find(repository_stock_value_params[:unit_item_id]) - @repository_stock_value.update_data!(repository_stock_value_params[:amount], current_user) - end - else - ActiveRecord::Base.transaction do # create - repository_cell = @repository_row.repository_cells.create(repository_column: @repository_column) - @repository_stock_value = RepositoryStockValue.new_with_payload( - repository_stock_value_params[:amount], - repository_cell: repository_cell, - created_by: current_user, - last_modified_by: current_user, - repository_stock_unit_item: @repository_column.repository_stock_unit_items - .find(repository_stock_value_params[:unit_item_id]) - ) - @repository_stock_value.save! - @repository_stock_value.update_stock_with_ledger!( - repository_stock_value_params[:amount], - @repository, - repository_stock_value_params[:comment].presence - ) - end + ActiveRecord::Base.transaction do + @repository_stock_value ? update! : create! + + log_activity( + params[:operator], + params[:change_amount], + @repository_stock_value.repository_stock_unit_item.data, + @repository_stock_value.amount + ) end + + render json: @repository_stock_vlaue end private + def update! + @repository_stock_value.update_stock_with_ledger!( + repository_stock_value_params[:amount], + @repository, + repository_stock_value_params[:comment].presence + ) + @repository_stock_value.repository_stock_unit_item = + @repository_column.repository_stock_unit_items.find(repository_stock_value_params[:unit_item_id]) + @repository_stock_value.update_data!(repository_stock_value_params[:amount], current_user) + end + + def create! + repository_cell = @repository_row.repository_cells.create(repository_column: @repository_column) + @repository_stock_value = RepositoryStockValue.new_with_payload( + repository_stock_value_params[:amount], + repository_cell: repository_cell, + created_by: current_user, + last_modified_by: current_user, + repository_stock_unit_item: @repository_column.repository_stock_unit_items + .find(repository_stock_value_params[:unit_item_id]) + ) + @repository_stock_value.save! + @repository_stock_value.update_stock_with_ledger!( + repository_stock_value_params[:amount], + @repository, + repository_stock_value_params[:comment].presence + ) + end + def load_vars @repository = Repository.find(params[:repository_id]) @repository_row = @repository.repository_rows.find(params[:id]) @@ -81,4 +92,19 @@ class RepositoryStockValuesController < ApplicationController def repository_stock_value_params params.require(:repository_stock_value).permit(:unit_item_id, :amount, :comment) end + + def log_activity(operator, change_amount, unit, new_amount) + Activities::CreateActivityService + .call(activity_type: "inventory_item_stock_#{operator}", + owner: current_user, + subject: @repository_row, + team: @repository.team, + message_items: { + repository: @repository.id, + repository_row: @repository_row.id, + change_amount: change_amount, + unit: unit, + new_amount: new_amount + }) + end end diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index 5c8d30003..301e03e67 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -21,7 +21,7 @@ module RepositoryDatatableHelper 'recordInfoUrl': Rails.application.routes.url_helpers.repository_repository_row_path(repository, record) }.merge(default_cells) - if options[:include_stock_consumption] + if record.repository.has_stock_management? row['manageStockUrl'] = if record.has_stock? Rails.application.routes.url_helpers .edit_repository_stock_repository_repository_row_url( diff --git a/app/models/activity.rb b/app/models/activity.rb index 088838615..2ae7bc464 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -150,6 +150,8 @@ class Activity < ApplicationRecord when Repository breadcrumbs[:repository] = subject.name generate_breadcrumb(subject.team) + when RepositoryRow + generate_breadcrumb(subject.repository) when Result breadcrumbs[:result] = subject.name generate_breadcrumb(subject.my_module) diff --git a/app/views/global_activities/references/_repository_row.html.erb b/app/views/global_activities/references/_repository_row.html.erb new file mode 100644 index 000000000..ecdf9d1c6 --- /dev/null +++ b/app/views/global_activities/references/_repository_row.html.erb @@ -0,0 +1,2 @@ +<%= render partial: "global_activities/references/repository_base.html.erb", + locals: { team: team, subject: subject.repository, breadcrumbs: breadcrumbs, values: values, type_of: type_of } %> diff --git a/app/views/repository_stock_values/_manage_modal_content.erb b/app/views/repository_stock_values/_manage_modal_content.erb index 8c2b64e8d..639be5cbb 100644 --- a/app/views/repository_stock_values/_manage_modal_content.erb +++ b/app/views/repository_stock_values/_manage_modal_content.erb @@ -9,7 +9,9 @@
<%= t('repository_stock_values.manage_modal.enter_amount') %>