Module: EnjuCirculation::EnjuItem::InstanceMethods

Defined in:
lib/enju_circulation/item.rb

Instance Method Summary collapse

Instance Method Details

#available_for_checkout?Boolean

Returns:

  • (Boolean)


86
87
88
89
90
91
92
# File 'lib/enju_circulation/item.rb', line 86

def available_for_checkout?
  if circulation_status.name == 'On Loan'
    false
  else
    manifestation.items.for_checkout.include?(self)
  end
end

#checkin!Object



103
104
105
106
# File 'lib/enju_circulation/item.rb', line 103

def checkin!
  self.circulation_status = CirculationStatus.where(name: 'Available On Shelf').first
  save(validate: false)
end

#checkout!(user) ⇒ Object



94
95
96
97
98
99
100
101
# File 'lib/enju_circulation/item.rb', line 94

def checkout!(user)
  self.circulation_status = CirculationStatus.where(name: 'On Loan').first
  if reserved_by_user?(user)
    manifestation.next_reservation.update_attributes(checked_out_at: Time.zone.now)
    manifestation.next_reservation.transition_to!(:completed)
  end
  save!
end

#checkout_status(user) ⇒ Object



64
65
66
67
# File 'lib/enju_circulation/item.rb', line 64

def checkout_status(user)
  return nil unless user
   user.profile.user_group.user_group_has_checkout_types.where(:checkout_type_id => self.checkout_type.id).first
end

#create_lending_policy(user) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
# File 'lib/enju_circulation/item.rb', line 140

def create_lending_policy(user)
  rule = user.profile.user_group.user_group_has_checkout_types.where(checkout_type_id: checkout_type_id).first
  return nil unless rule
  LendingPolicy.create!(
    item_id: id,
    user_group_id: rule.user_group_id,
    fixed_due_date: rule.fixed_due_date,
    loan_period: rule.checkout_period,
    renewal: rule.checkout_renewal_limit
  )
end

#delete_lending_policyObject



152
153
154
155
# File 'lib/enju_circulation/item.rb', line 152

def delete_lending_policy
  return nil unless changes[:checkout_type_id]
  lending_policies.delete_all
end

#latest_checkoutObject



161
162
163
# File 'lib/enju_circulation/item.rb', line 161

def latest_checkout
  checkouts.order('checkouts.id').first
end

#lending_rule(user) ⇒ Object



127
128
129
130
131
132
133
134
# File 'lib/enju_circulation/item.rb', line 127

def lending_rule(user)
  policy = lending_policies.where(user_group_id: user.profile.user_group.id).first
  if policy
    policy
  else
    create_lending_policy(user)
  end
end

#next_reservationObject



157
158
159
# File 'lib/enju_circulation/item.rb', line 157

def next_reservation
  Reserve.waiting.where(:item_id => id).first
end

#not_for_loan?Boolean

Returns:

  • (Boolean)


136
137
138
# File 'lib/enju_circulation/item.rb', line 136

def not_for_loan?
  !manifestation.items.for_checkout.include?(self)
end

#rent?Boolean

Returns:

  • (Boolean)


74
75
76
77
# File 'lib/enju_circulation/item.rb', line 74

def rent?
  return true if self.checkouts.not_returned.select(:item_id).detect{|checkout| checkout.item_id == self.id}
  false
end

#reserved?Boolean

Returns:

  • (Boolean)


69
70
71
72
# File 'lib/enju_circulation/item.rb', line 69

def reserved?
  return true if manifestation.next_reservation
  false
end

#reserved_by_user?(user) ⇒ Boolean

Returns:

  • (Boolean)


79
80
81
82
83
84
# File 'lib/enju_circulation/item.rb', line 79

def reserved_by_user?(user)
  if manifestation.next_reservation
    return true if manifestation.next_reservation.user == user
  end
  false
end

#retain(librarian) ⇒ Object



108
109
110
111
112
113
114
115
116
117
# File 'lib/enju_circulation/item.rb', line 108

def retain(librarian)
  self.class.transaction do
    reservation = manifestation.next_reservation
    unless reservation.nil?
      reservation.item = self
      reservation.transition_to!(:retained)
      reservation.send_message(librarian)
    end
  end
end

#retained?Boolean

Returns:

  • (Boolean)


119
120
121
122
123
124
125
# File 'lib/enju_circulation/item.rb', line 119

def retained?
  if manifestation.next_reservation.try(:current_state) == 'retained' and  manifestation.next_reservation.item == self
    return true
  else
    false
  end
end

#set_circulation_statusObject



60
61
62
# File 'lib/enju_circulation/item.rb', line 60

def set_circulation_status
  self.circulation_status = CirculationStatus.where(:name => 'In Process').first if self.circulation_status.nil?
end