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
- #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
- #reserved? ⇒ Boolean
- #reserved_by_user?(user) ⇒ Boolean
- #retain(librarian) ⇒ Object
- #retained? ⇒ Boolean
- #set_circulation_status ⇒ Object
Instance Method Details
#available_for_checkout? ⇒ 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_policy ⇒ Object
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_checkout ⇒ Object
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_reservation ⇒ Object
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
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
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
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
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.(librarian) end end end |
#retained? ⇒ 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_status ⇒ Object
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 |