SpeciesFileGroup/taxonworks

View on GitHub
app/controllers/observation_matrix_column_items_controller.rb

Summary

Maintainability
A
2 hrs
Test Coverage
class ObservationMatrixColumnItemsController < ApplicationController
  include DataControllerConfiguration::ProjectDataControllerConfiguration
  before_action :set_observation_matrix_column_item, only: [:show, :edit, :update, :destroy]

  # GET /observation_matrix_column_items
  # GET /observation_matrix_column_items.json
  def index
    respond_to do |format|
      format.html do
        @recent_objects = ObservationMatrixColumnItem.recent_from_project_id(sessions_current_project_id)
          .order(updated_at: :desc).limit(10)
        render '/shared/data/all/index'
      end
      format.json {
        @observation_matrix_column_items = ObservationMatrixColumnItem.where(filter_params).with_project_id(sessions_current_project_id)
      }
    end
  end

  # GET /observation_matrix_column_items/1
  # GET /observation_matrix_column_items/1.json
  def show
  end

  def list
    @observation_matrix_column_items = ObservationMatrixColumnItem.with_project_id(sessions_current_project_id)
      .page(params[:page])
  end

  # GET /observation_matrix_column_items/1/edit
  def edit
    redirect_to new_matrix_task_path(@observation_matrix_column_item.observation_matrix) and return
  end

  # POST /observation_matrix_column_items.json
  def create
    @observation_matrix_column_item = ObservationMatrixColumnItem.new(observation_matrix_column_item_params)
    respond_to do |format|
      if @observation_matrix_column_item.save
        format.json { render :show, status: :created, location: @observation_matrix_column_item.metamorphosize }
      else
        format.json { render json: @observation_matrix_column_item.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /observation_matrix_column_items/1.json
  def update
    respond_to do |format|
      if @observation_matrix_column_item.update(observation_matrix_column_item_params)
        format.json { render :show, status: :ok, location: @observation_matrix_column_item.metamorphosize }
      else
        format.json { render json: @observation_matrix_column_item.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /observation_matrix_column_items/1
  # DELETE /observation_matrix_column_items/1.json
  def destroy
    @observation_matrix_column_item.destroy
    respond_to do |format|
      if @observation_matrix_column_item.destroyed?
        format.html {
          redirect_to observation_matrix_column_items_url,
          notice: 'Matrix column item was successfully destroyed.' }
        format.json { head :no_content }
      else
        format.html {redirect_back(fallback_location: (request.referer || root_path), notice: 'Observation matrix column item was not destroyed, ' + @observation_matrix_column_item.errors.full_messages.join('; '))}
        format.json {render json: @observation_matrix_column_item.errors, status: :unprocessable_entity}
      end
    end
  end


  # POST /observation_matrix_column_items/batch_create?batch_type=tags&observation_matrix_id=123&keyword_id=456&klass=ObservationMatrixColumnItem::Single
  # POST /observation_matrix_column_items/batch_create?batch_type=pinboard&observation_matrix_id=123&klass=ObservationMatrixColumnItem::Single
  def batch_create
    if @loan_items = ObservationMatrixColumnItem.batch_create(batch_params)
      render :index
    else
      render json: {success: false}
    end 
  end

  private

  def batch_params
    params.permit(
      :batch_type,
      :observation_matrix_id,
      :target_observation_matrix_id,
      :keyword_id,
      :descriptor_id,
      :observation_matrix_column_item_id,
      :klass,
      descriptor_id: [],
      observation_matrix_column_item_id: []
    ).to_h
      .symbolize_keys
      .merge(project_id: sessions_current_project_id, user_id: sessions_current_user_id)
  end

  def filter_params
    params.permit(:observation_matrix_id, :descriptor_id, :type)
  end

  def set_observation_matrix_column_item
    @observation_matrix_column_item = ObservationMatrixColumnItem.where(project_id: sessions_current_project_id).find(params[:id])
  end

  def observation_matrix_column_item_params
    params.require(:observation_matrix_column_item).permit(
      :controlled_vocabulary_term_id,
      :observation_matrix_id,
      :type,
      :descriptor_id,
      :keyword_id, 
      :position)
  end
end