Class: Reserve

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/reserve.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#item_identifierObject

Returns the value of attribute item_identifier.



36
37
38
# File 'app/models/reserve.rb', line 36

def item_identifier
  @item_identifier
end

#user_numberObject

Returns the value of attribute user_number.



36
37
38
# File 'app/models/reserve.rb', line 36

def user_number
  @user_number
end

Class Method Details

.expireObject



183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'app/models/reserve.rb', line 183

def self.expire
  Reserve.transaction do
    self.will_expire_retained(Time.zone.now.beginning_of_day).map{|r| r.sm_expire!}
    self.will_expire_pending(Time.zone.now.beginning_of_day).map{|r| r.sm_expire!}

    # キューに登録した時点では本文は作られないので
    # 予約の連絡をすませたかどうかを識別できるようにしなければならない
    # reserve.send_message('expired')
    User.find_each do |user|
      unless user.reserves.not_sent_expiration_notice_to_patron.empty?
        user.send_message('reservation_expired_for_patron', :manifestations => user.reserves.not_sent_expiration_notice_to_patron.collect(&:manifestation))
      end
    end
    unless Reserve.not_sent_expiration_notice_to_library.empty?
      Reserve.send_message_to_library('expired', :manifestations => Reserve.not_sent_expiration_notice_to_library.collect(&:manifestation))
    end
  end
#rescue
#  logger.info "#{Time.zone.now} expiring reservations failed!"
end

.per_pageObject



71
72
73
# File 'app/models/reserve.rb', line 71

def self.per_page
  10
end

.send_message_to_library(status, options = {}) ⇒ Object



161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'app/models/reserve.rb', line 161

def self.send_message_to_library(status, options = {})
  sender = User.find(1) # TODO: システムからのメッセージの発信者
  case status
  when 'expired'
    message_template_to_library = MessageTemplate.localized_template('reservation_expired_for_library', sender.locale)
    request = MessageRequest.create!(:sender => sender, :receiver => sender, :message_template => message_template_to_library)
    request.save_message_body(:manifestations => options[:manifestations])
    self.not_sent_expiration_notice_to_library.each do |reserve|
      reserve.update_attribute(:expiration_notice_to_library, true)
    end
  #when 'canceled'
  #  message_template_to_library = MessageTemplate.localized_template('reservation_canceled_for_library', sender.locale)
  #  request = MessageRequest.create!(:sender => sender, :receiver => sender, :message_template => message_template_to_library)
  #  request.save_message_body(:manifestations => self.not_sent_expiration_notice_to_library.collect(&:manifestation))
  #  self.not_sent_cancel_notice_to_library.each do |reserve|
  #    reserve.update_attribute(:expiration_notice_to_library, true)
  #  end
  else
    raise 'status not defined'
  end
end

Instance Method Details

#available_for_reservation?Boolean

Returns:

  • (Boolean)


204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'app/models/reserve.rb', line 204

def available_for_reservation?
  if manifestation
    if manifestation.is_reserved_by?(user)
      errors[:base] << I18n.t('reserve.this_manifestation_is_already_reserved')
    end
    if user.try(:reached_reservation_limit?, manifestation)
      errors[:base] << I18n.t('reserve.excessed_reservation_limit')
    end

    expired_period = manifestation.try(:reservation_expired_period, user)
    if expired_period.nil?
      errors[:base] << I18n.t('reserve.this_patron_cannot_reserve')
    end
  end
end

#do_requestObject



97
98
99
# File 'app/models/reserve.rb', line 97

def do_request
  self.update_attributes({:request_status_type => RequestStatusType.where(:name => 'In Process').first})
end

#manifestation_must_include_itemObject



101
102
103
104
105
106
# File 'app/models/reserve.rb', line 101

def manifestation_must_include_item
  unless item_id.blank?
    item = Item.find(item_id) rescue nil
    errors[:base] << I18n.t('reserve.invalid_item') unless manifestation.items.include?(item)
  end
end

#next_reservationObject



108
109
110
111
112
# File 'app/models/reserve.rb', line 108

def next_reservation
  if item
    Reserve.waiting.where(:manifestation_id => item.manifestation.id).first
  end
end

#send_message(sender = nil) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'app/models/reserve.rb', line 114

def send_message(sender = nil)
  sender = User.find(1) unless sender # TODO: システムからのメッセージの発信者
  Reserve.transaction do
    case state
    when 'requested'
      message_template_to_patron = MessageTemplate.localized_template('reservation_accepted_for_patron', user.locale)
      request = MessageRequest.create!(:sender => sender, :receiver => user, :message_template => message_template_to_patron)
      request.save_message_body(:manifestations => Array[manifestation], :user => user)
      request.sm_send_message! # 受付時は即時送信
      message_template_to_library = MessageTemplate.localized_template('reservation_accepted_for_library', user.locale)
      request = MessageRequest.create!(:sender => sender, :receiver => sender, :message_template => message_template_to_library)
      request.save_message_body(:manifestations => Array[manifestation], :user => user)
      request.sm_send_message! # 受付時は即時送信
    when 'canceled'
      message_template_to_patron = MessageTemplate.localized_template('reservation_canceled_for_patron', user.locale)
      request = MessageRequest.create!(:sender => sender, :receiver => user, :message_template => message_template_to_patron)
      request.save_message_body(:manifestations => Array[manifestation], :user => user)
      request.sm_send_message! # キャンセル時は即時送信
      message_template_to_library = MessageTemplate.localized_template('reservation_canceled_for_library', user.locale)
      request = MessageRequest.create!(:sender => sender, :receiver => sender, :message_template => message_template_to_library)
      request.save_message_body(:manifestations => Array[manifestation], :user => user)
      request.sm_send_message! # キャンセル時は即時送信
    when 'expired'
      message_template_to_patron = MessageTemplate.localized_template('reservation_expired_for_patron', user.locale)
      request = MessageRequest.create!(:sender => sender, :receiver => user, :message_template => message_template_to_patron)
      request.save_message_body(:manifestations => Array[manifestation], :user => user)
      request.sm_send_message!
      self.update_attribute(:expiration_notice_to_patron, true)
      message_template_to_library = MessageTemplate.localized_template('reservation_expired_for_library', sender.locale)
      request = MessageRequest.create!(:sender => sender, :receiver => sender, :message_template => message_template_to_library)
      request.save_message_body(:manifestations => Array[manifestation], :user => sender)
      request.sm_send_message!
    when 'retained'
      message_template_for_patron = MessageTemplate.localized_template('item_received_for_patron', user.locale)
      request = MessageRequest.create!(:sender => sender, :receiver => user, :message_template => message_template_for_patron)
      request.save_message_body(:manifestations => Array[item.manifestation], :user => user)
      request.sm_send_message!
      message_template_for_library = MessageTemplate.localized_template('item_received_for_library', user.locale)
      request = MessageRequest.create!(:sender => sender, :receiver => sender, :message_template => message_template_for_library)
      request.save_message_body(:manifestations => Array[item.manifestation], :user => user)
      request.sm_send_message!
    else
      raise 'status not defined'
    end
  end
end

#set_expired_atObject



84
85
86
87
88
89
90
91
92
93
94
95
# File 'app/models/reserve.rb', line 84

def set_expired_at
  if self.user and self.manifestation
    if self.canceled_at.blank?
      if self.expired_at.blank?
        expired_period = self.manifestation.reservation_expired_period(self.user)
        self.expired_at = (expired_period + 1).days.from_now.beginning_of_day
      elsif self.expired_at.beginning_of_day < Time.zone.now
        errors[:base] << I18n.t('reserve.invalid_date')
      end
    end
  end
end

#set_item_and_manifestationObject



75
76
77
78
# File 'app/models/reserve.rb', line 75

def set_item_and_manifestation
  item = Item.where(:item_identifier => item_identifier).first
  manifestation = item.manifestation if item
end

#set_request_statusObject



80
81
82
# File 'app/models/reserve.rb', line 80

def set_request_status
  self.request_status_type = RequestStatusType.where(:name => 'In Process').first
end