app/controllers/loss_items_controller.rb
class LossItemsController < ApplicationController
include NotificationSound
before_filter :check_librarian
before_filter :get_user
before_filter :get_agent, :get_manifestation
helper_method :get_shelf
helper_method :get_library
helper_method :get_item
def index
@count = {}
search = Sunspot.new_search(Item)
set_role_query(current_user, search)
# set query
query = params[:query].to_s.strip
@query = query.dup
query = params[:query].gsub("-", "") if params[:query]
query = "#{query}*" if query.size == 1
@date_of_birth = params[:birth_date].to_s.dup
@address = params[:address]
query_user, flash[:message] = User.set_query("", params[:birth_date], params[:address])
page = params[:page] || 1
@status = params[:status]
# search loss_item
query = "#{query} #{query_user}" if query_user.present?
logger.debug query
@loss_items = LossItem.search do
fulltext query
with(:status).equal_to @status unless @status.blank?
end.results
@loss_items = @loss_items.uniq
@loss_items = @loss_items.sort{|a, b| b.id <=> a.id}
@loss_items = Kaminari.paginate_array(@loss_items).page(page).per(25)
#@count[:query_result] = @loss_items.total_entries
end
def show
@loss_item = LossItem.find(params[:id])
end
def new
if params[:item_id] and params[:user_id]
@loss_item = LossItem.new(:item_id => params[:item_id], :user_id => params[:user_id])
else
@loss_item = LossItem.new
end
end
def edit
@inputed = true
@loss_item = LossItem.find(params[:id])
end
def create
LossItem.transaction do
flash[:notice] = ""
@loss_item = LossItem.new(params[:loss_item])
if params[:user_number]
@user_number = params[:user_number]
@loss_item.user_id = User.where(:user_number => @user_number).first.id
end
@loss_item.status = LossItem::UnPaid
@loss_item.save!
@item = Item.find(params[:loss_item][:item_id])
if @item.rent?
unless @item.blank?
get_basket
unless @basket
@basket = Basket.new(:user => current_user)
@basket.save!(:validate => false)
end
@checkin = @basket.checkins.new(:item_id => @item.id, :librarian_id => current_user.id)
@checkin.item = @item
user_id = @item.checkouts.select {|checkout| checkout.checkin_id.nil?}.first.user_id rescue nil
if @checkin.save(:validate => false)
messages = []
flash[:message] = ''
flash[:sound] = ''
flash[:notice] << t('checkin.successfully_checked_in', :model => t('activerecord.models.checkin')) + '<br />'
item_messages = @checkin.item_checkin(current_user, true)
unless item_messages.blank?
item_messages.each do |message|
messages << message if message
end
end
messages.each do |message|
return_message, return_sound = error_message_and_sound(message)
flash[:message] << return_message + '<br />' unless message == 'checkin.other_library_item'
flash[:message] << t('checkin.other_library', :model => @checkin.item.shelf.library.display_name) + '<br />' if message == 'checkin.other_library_item'
flash[:sound] = return_sound if return_sound
end
end
end
end
@item.circulation_status = CirculationStatus.where(:name => 'Lost').first
@item.save!
flash[:notice] << t('controller.successfully_updated', :model => t('activerecord.models.circulation_status'))
end
respond_to do |format|
format.html { redirect_to loss_item_url(@loss_item) }
format.json { head :no_content }
end
rescue #Exception => e
logger.error "Failed to loss_item: #{$!}"
logger.error "Failed to loss_item: #{$@}"
respond_to do |format|
#flash[:message] = t('activerecord.attributes.item.fail_update_loss_item')
format.html { render :action => "new" }
format.json { render :json => @loss_item.errors, :status => :unprocessable_entity }
end
end
def update
@loss_item = LossItem.find(params[:id])
LossItem.transaction do
@loss_item.status = params[:loss_item][:status]
@loss_item.note = params[:loss_item][:note]
@loss_item.save!
@item = Item.find(@loss_item.item_id)
@item.circulation_status = CirculationStatus.where(:name => 'Lost').first if @loss_item.status == 0
@item.circulation_status = CirculationStatus.where(:name => 'Removed').first if @loss_item.status == 1
@item.save!
flash[:notice] = t('controller.successfully_updated', :model => t('activerecord.models.loss_item')) + '<br />'
flash[:notice] << t('controller.successfully_updated', :model => t('activerecord.models.circulation_status'))
respond_to do |format|
format.html { redirect_to(@loss_item) }
end
end
rescue
#flash[:message] = t('activerecord.attributes.loss_item.fail_update')
respond_to do |format|
format.html { render :action => "edit" }
format.json { render :json => @loss_item.errors, :status => :unprocessable_entity }
end
end
def destroy
@loss_item = LossItem.find(params[:id])
@loss_item.destroy
respond_to do |format|
format.html { redirect_to(loss_items_url) }
format.json { head :no_content }
end
end
private
def set_list(obj, status)
unless obj.blank?
obj.each do |i|
@same_items = LossItem.where(:item_id => i.id) if obj == @items and status.blank?
@same_items = LossItem.where(:item_id => i.id, :status => status) if obj == @items and !status.blank?
@same_items = LossItem.where(:user_id => i.id) if obj == @users and status.blank?
@same_items = LossItem.where(:user_id => i.id, :status => status) if obj == @users and !status.blank?
if @same_items.length > 0
@same_items.each do |s|
@loss_items << s
end
end
end
end
end
end