mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-27 18:52:07 +08:00
105 lines
3.4 KiB
Ruby
105 lines
3.4 KiB
Ruby
# 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
|
|
render json: {
|
|
html: render_to_string(
|
|
partial: 'repository_stock_values/manage_modal_content',
|
|
locals: {
|
|
repository_row: @repository_row,
|
|
repository_stock_column: @repository_column,
|
|
unit_items: @repository_column.repository_stock_unit_items,
|
|
repository_stock_value: RepositoryStockValue.new
|
|
}
|
|
)
|
|
}
|
|
end
|
|
|
|
def edit
|
|
render json: {
|
|
html: render_to_string(
|
|
partial: 'repository_stock_values/manage_modal_content',
|
|
locals: {
|
|
repository_row: @repository_row,
|
|
repository_stock_column: @repository_column,
|
|
unit_items: @repository_column.repository_stock_unit_items,
|
|
repository_stock_value: @repository_stock_value
|
|
}
|
|
)
|
|
}
|
|
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,
|
|
manageStockUrl: edit_repository_stock_repository_repository_row_url(@repository, @repository_row)
|
|
}.merge(serialize_repository_cell_value(@repository_stock_value.repository_cell, current_team, @repository))
|
|
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,
|
|
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
|