Module: EnjuCirculation::EnjuItem::InstanceMethods
- Defined in:
- lib/enju_circulation/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
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_policy ⇒ Object
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_checkout ⇒ Object
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_reservation ⇒ Object
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
136 137 138 |
# File 'lib/enju_circulation/item.rb', line 136 def not_for_loan? !manifestation.items.for_checkout.include?(self) end |
#rent? ⇒ 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
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
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.(librarian) end end end |
#retained? ⇒ 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_status ⇒ Object
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 |