scinote-web/app/controllers/repository_stock_values_controller.rb
2023-09-18 16:42:01 +02:00

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