scinote-web/app/controllers/repository_stock_values_controller.rb

86 lines
2.6 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
class RepositoryStockValuesController < ApplicationController
include RepositoryDatatableHelper # for use of serialize_repository_cell_value method on stock update
before_action :load_vars
before_action :check_manage_permissions
def new; end
def edit; end
def create_or_update
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,
params[:repository_stock_value][:comment]
)
end
render json: {
stock_managable: true,
stock_status: @repository_stock_value.status,
}.merge(
serialize_repository_cell_value(
@repository_stock_value.repository_cell, current_team, @repository,
reminders_enabled: Repository.reminders_enabled?
)
)
end
private
def update!
@repository_stock_value.update_data!(repository_stock_value_params, 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,
repository_cell: repository_cell,
created_by: current_user,
last_modified_by: current_user,
comment: repository_stock_value_params[:comment].presence
)
@repository_stock_value.save!
end
def load_vars
@repository = Repository.find(params[:repository_id])
@repository_row = @repository.repository_rows.find(params[:id])
@repository_column = @repository.repository_columns.find_by(data_type: 'RepositoryStockValue')
@repository_stock_value = @repository_row.repository_stock_value
end
def check_manage_permissions
render_403 unless can_manage_repository_stock?(@repository)
end
def repository_stock_value_params
params.require(:repository_stock_value).permit(:unit_item_id, :amount, :comment, :low_stock_threshold)
end
def log_activity(operator, change_amount, unit, new_amount, comment)
Activities::CreateActivityService
.call(activity_type: "inventory_item_stock_#{operator}",
owner: current_user,
2022-02-14 17:37:58 +08:00
subject: @repository,
team: @repository.team,
message_items: {
repository: @repository.id,
repository_row: @repository_row.id,
change_amount: change_amount,
unit: unit,
new_amount: new_amount,
comment: comment
})
end
end