app/controllers/loan_items_controller.rb
class LoanItemsController < ApplicationController
include DataControllerConfiguration::ProjectDataControllerConfiguration
before_action :set_loan_item, only: [:update, :destroy, :show, :edit]
after_action -> { set_pagination_headers(:loan_items) }, only: [:index], if: :json_request?
# GET /loan_items
# GET /loan_items.json
def index
respond_to do |format|
format.html {
@recent_objects = LoanItem.recent_from_project_id(sessions_current_project_id).order(updated_at: :desc).limit(10)
render '/shared/data/all/index'
}
format.json {
@loan_items = LoanItem.where(filter_params)
.with_project_id(sessions_current_project_id)
.page(params[:page])
.per(params[:per])
}
end
end
# GET /loan_items/1
# GET /loan_items/1.json
def show
end
# GET /loan_items/new
def new
@loan_item = LoanItem.new(loan: Loan.new)
end
# GET /loan_items/1/edit
def edit
end
def list
@loan_items = LoanItem.with_project_id(sessions_current_project_id).order(:id).page(params[:page]) #.per(10)
end
# POST /loan_items
# POST /loan_items.json
def create
@loan_item = LoanItem.new(loan_item_params)
respond_to do |format|
if @loan_item.save
format.html {redirect_back(fallback_location: (request.referer || root_path), notice: 'Loan item was successfully created.')}
format.json { render :show, status: :created, location: @loan_item }
else
format.html {redirect_back(fallback_location: (request.referer || root_path), notice: 'Loan item was NOT successfully created.')}
format.json { render json: @loan_item.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /loan_items/1
# PATCH/PUT /loan_items/1.json
def update
respond_to do |format|
if @loan_item.update(loan_item_params)
format.html { redirect_back(fallback_location: (request.referer || root_path), notice: 'Loan item was successfully updated.')}
format.json { render :show, status: :ok, location: @loan_item }
else
format.html { redirect_back(fallback_location: (request.referer || root_path), notice: 'Loan item was NOT successfully updated.' + @loan_item.errors.full_messages.join('; '))}
format.json { render json: @loan_item.errors, status: :unprocessable_entity }
end
end
end
# DELETE /loan_items/1
# DELETE /loan_items/1.json
def destroy
@loan_item.destroy
respond_to do |format|
format.html { destroy_redirect @loan_item, notice: 'Loan item was successfully destroyed.' }
format.json { head :no_content }
end
end
def search
if params[:id].blank?
redirect_to loan_items_path, alert: 'You must select an item from the list with a click or tab press before clicking show.'
else
redirect_to loan_item_path(params[:id])
end
end
def autocomplete
@loan_items = LoanItem.find_for_autocomplete(params.merge(project_id: sessions_current_project_id)).includes(:taxon_name)
data = @loan_items.collect do |t|
{id: t.id,
label: ApplicationController.helpers.loan_item_tag(t),
response_values: {
params[:method] => t.id
},
label_html: ApplicationController.helpers.loan_item_autocomplete_selected_tag(t)
}
end
render json: data
end
# TODO: JSON versions of this
# POST /loan_items/batch_create?batch_type=tags&loan_id=123&keyword_id=456&klass=Otu
# POST /loan_items/batch_create?batch_type=pinboard&loan_id=123&klass=Otu
# POST /loan_items/batch_create?batch_type=collection_object_filter&loan_id=123&collection_object_filter=<>
def batch_create
if @loan_items = LoanItem.batch_create(batch_params)
render :index
else
render json: {success: false}
end
end
# POST /loan_items/batch_return.json?collection_object_query=<>
def batch_return
if @loan_items = LoanItem.batch_return(batch_params)[:returned]
render :index
else
render json: {success: false}
end
end
# POST /loan_items/batch_move.json?collection_object_query=<>
def batch_move
if @loan_items = LoanItem.batch_move(batch_params)[:moved]
render :index
else
render json: {success: false}
end
end
private
def filter_params
params.permit(:loan_id)
end
def set_loan_item
@loan_item = LoanItem.with_project_id(sessions_current_project_id).find(params[:id])
end
def batch_params
params.permit(
:batch_type,
:loan_id,
:keyword_id,
:collection_object_status,
:date_returned,
:date_returned_jquery, #!? old forms only perhaps
:disposition,
:klass).to_h.symbolize_keys.merge(
project_id: sessions_current_project_id,
user_id: sessions_current_user_id,
collection_object_query: params[:collection_object_query]
)
end
def loan_item_params
params.require(:loan_item).permit(
:loan_id, :collection_object_status, :date_returned, :loan_item_object_id, :loan_item_object_type,
:date_returned_jquery, :disposition, :total,
:global_entity,
:position
)
end
end