Module: EnjuCirculation::EnjuItem

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/enju_circulation/enju_item.rb

Instance Method Summary collapse

Instance Method Details

#available_for_checkout?Boolean

Returns:

  • (Boolean)


94
95
96
97
98
99
100
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 94

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

#check_circulation_statusObject



60
61
62
63
64
65
66
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 60

def check_circulation_status
  #circulation_status.name_will_change!
  #return unless circulation_status.name_change.first == 'Removed'
  return unless circulation_status.name == 'Removed'
  errors[:base] << I18n.t('activerecord.errors.models.item.attributes.circulation_status_id.is_rented') if rented?
  errors[:base] << I18n.t('activerecord.errors.models.item.attributes.circulation_status_id.is_reserved') if reserved?
end

#checkin!Object



111
112
113
114
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 111

def checkin!
  self.circulation_status = CirculationStatus.find_by(name: 'Available On Shelf')
  save!
end

#checkout!(user) ⇒ Object



102
103
104
105
106
107
108
109
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 102

def checkout!(user)
  if reserved_by_user?(user)
    manifestation.next_reservation.update(checked_out_at: Time.zone.now)
    manifestation.next_reservation.transition_to!(:completed)
    manifestation.reload
  end
  update!(circulation_status: CirculationStatus.find_by(name: 'On Loan'))
end

#checkout_status(user) ⇒ Object



68
69
70
71
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 68

def checkout_status(user)
  return nil unless user
   user.profile.user_group.user_group_has_checkout_types.find_by(checkout_type_id: checkout_type.id)
end

#create_lending_policy(user) ⇒ Object



149
150
151
152
153
154
155
156
157
158
159
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 149

def create_lending_policy(user)
  rule = user.profile.user_group.user_group_has_checkout_types.find_by(checkout_type_id: checkout_type_id)
  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



161
162
163
164
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 161

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

#latest_checkoutObject



170
171
172
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 170

def latest_checkout
  checkouts.not_returned.order(created_at: :desc).first
end

#lending_rule(user) ⇒ Object



136
137
138
139
140
141
142
143
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 136

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

#next_reservationObject



166
167
168
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 166

def next_reservation
  Reserve.waiting.find_by(item_id: id)
end

#not_for_loan?Boolean

Returns:

  • (Boolean)


145
146
147
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 145

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

#rent?Boolean

Returns:

  • (Boolean)


78
79
80
81
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 78

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

#rented?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 83

def rented?
  rent?
end

#reserved?Boolean

Returns:

  • (Boolean)


73
74
75
76
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 73

def reserved?
  return true if manifestation.next_reservation
  false
end

#reserved_by_user?(user) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
90
91
92
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 87

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

#retain(librarian) ⇒ Object



116
117
118
119
120
121
122
123
124
125
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 116

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

#retained?Boolean

Returns:

  • (Boolean)


127
128
129
130
131
132
133
134
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 127

def retained?
  manifestation.reserves.retained.each do |reserve|
    if reserve.item == self
      return true
    end
  end
  false
end

#set_circulation_statusObject



56
57
58
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 56

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