# frozen_string_literal: true class RepositoryStockValuesController < ApplicationController include RepositoryDatatableHelper # for use of display_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(display_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