Module: EnjuCirculation::EnjuItem
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/enju_circulation/enju_item.rb
Instance Method Summary collapse
- #available_for_checkout? ⇒ Boolean
- #check_circulation_status ⇒ Object
- #checkin! ⇒ Object
- #checkout!(user) ⇒ Object
- #checkout_status(user) ⇒ Object
- #create_lending_policy(user) ⇒ Object
- #delete_lending_policy ⇒ Object
- #latest_checkout ⇒ Object
- #lending_rule(user) ⇒ Object
- #next_reservation ⇒ Object
- #not_for_loan? ⇒ Boolean
- #rent? ⇒ Boolean
- #rented? ⇒ Boolean
- #reserved? ⇒ Boolean
- #reserved_by_user?(user) ⇒ Boolean
- #retain(librarian) ⇒ Object
- #retained? ⇒ Boolean
- #set_circulation_status ⇒ Object
Instance Method Details
#available_for_checkout? ⇒ 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_status ⇒ Object
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_policy ⇒ Object
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_checkout ⇒ Object
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_reservation ⇒ Object
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
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
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
83 84 85 |
# File 'app/models/concerns/enju_circulation/enju_item.rb', line 83 def rented? rent? end |
#reserved? ⇒ 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
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.(librarian) end end end |
#retained? ⇒ 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_status ⇒ Object
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 |