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)


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

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

#checkin!Object



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

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

#checkout!(user) ⇒ Object



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

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



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

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



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

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



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

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

#latest_checkoutObject



154
155
156
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 154

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

#lending_rule(user) ⇒ Object



120
121
122
123
124
125
126
127
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 120

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



150
151
152
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 150

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

#not_for_loan?Boolean

Returns:

  • (Boolean)


129
130
131
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 129

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

#rent?Boolean

Returns:

  • (Boolean)


66
67
68
69
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 66

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)


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

def reserved?
  return true if manifestation.next_reservation
  false
end

#reserved_by_user?(user) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#retain(librarian) ⇒ Object



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

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)


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

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

#set_circulation_statusObject



52
53
54
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 52

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