enju_circulation 0.0.69 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,39 +31,79 @@ class CheckoutsController < ApplicationController
31
31
  end
32
32
 
33
33
  unless icalendar_user
34
- if current_user.try(:has_role?, 'Librarian')
35
- if @user
36
- @checkouts = @user.checkouts.not_returned.order('checkouts.id DESC').page(params[:page]).per_page(per_page)
34
+ search = Checkout.search
35
+ if @user
36
+ user = @user
37
+ if current_user.try(:has_role?, 'Librarian')
38
+ search.build do
39
+ with(:username).equal_to user.username
40
+ with(:checked_in_at).equal_to nil unless user.save_checkout_history
41
+ end
37
42
  else
38
- if @item
39
- @checkouts = @item.checkouts.order('checkouts.id DESC').page(params[:page]).per_page(per_page)
43
+ if current_user == user
44
+ redirect_to checkouts_url(:format => params[:format])
45
+ return
40
46
  else
41
- if params[:view] == 'overdue'
42
- if params[:days_overdue]
43
- date = params[:days_overdue].to_i.days.ago.beginning_of_day
44
- else
45
- date = 1.days.ago.beginning_of_day
46
- end
47
- @checkouts = Checkout.overdue(date).order('checkouts.id DESC').page(params[:page]).per_page(per_page)
48
- else
49
- @checkouts = Checkout.not_returned.order('checkouts.id DESC').page(params[:page]).per_page(per_page)
50
- end
47
+ access_denied
48
+ return
51
49
  end
52
50
  end
53
51
  else
54
- # 一般ユーザ
55
- if current_user == @user
56
- redirect_to checkouts_url(:format => params[:format])
57
- return
58
- else
59
- if @user
60
- access_denied
61
- return
62
- else
63
- @checkouts = current_user.checkouts.not_returned.order('checkouts.id DESC').page(params[:page]).per_page(per_page)
52
+ unless current_user.try(:has_role?, 'Librarian')
53
+ search.build do
54
+ with(:username).equal_to current_user.username
55
+ end
56
+ end
57
+
58
+ search.build do
59
+ with(:checked_in_at).equal_to nil
60
+ end
61
+ end
62
+
63
+ if current_user.try(:has_role?, 'Librarian')
64
+ if @item
65
+ item = @item
66
+ search.build do
67
+ with(:item_identifier).equal_to item.item_identifier
64
68
  end
65
69
  end
70
+ else
71
+ if @item
72
+ access_denied; return
73
+ end
74
+ end
75
+
76
+ if params[:view] == 'overdue'
77
+ if params[:days_overdue]
78
+ date = params[:days_overdue].to_i.days.ago.beginning_of_day
79
+ else
80
+ date = 1.days.ago.beginning_of_day
81
+ end
82
+ search.build do
83
+ with(:due_date).less_than date
84
+ with(:checked_in_at).equal_to nil
85
+ end
86
+ end
87
+
88
+ if params[:reserved].present?
89
+ if params[:reserved] == 'true'
90
+ @reserved = reserved = true
91
+ elsif params[:reserved] == 'false'
92
+ @reserved = reserved = false
93
+ end
94
+ search.build do
95
+ with(:reserved).equal_to reserved
96
+ end
97
+ end
98
+
99
+ search.build do
100
+ order_by :created_at, :desc
101
+ facet :reserved
66
102
  end
103
+ page = params[:page] || 1
104
+ search.query.paginate(page.to_i, Checkout.per_page)
105
+ @checkouts = search.execute!.results
106
+ @checkouts_facet = search.facet(:reserved).rows
67
107
  end
68
108
 
69
109
  @days_overdue = params[:days_overdue] ||= 1
@@ -32,7 +32,7 @@ class Checkin < ActiveRecord::Base
32
32
  message = ''
33
33
  Checkin.transaction do
34
34
  checkouts = Checkout.not_returned.where(:item_id => item_id).select(
35
- [:id, :item_id, :user_id, :basket_id, :due_date, :lock_version]
35
+ [:id, :item_id, :user_id, :basket_id, :due_date, :lock_version, :created_at]
36
36
  )
37
37
  item.checkin!
38
38
  checkouts.each do |checkout|
@@ -23,6 +23,26 @@ class Checkout < ActiveRecord::Base
23
23
  validate :is_not_checked?, :on => :create
24
24
  validates_date :due_date
25
25
 
26
+ searchable do
27
+ string :username do
28
+ user.try(:username)
29
+ end
30
+ string :user_number do
31
+ user.try(:user_number)
32
+ end
33
+ string :item_identifier do
34
+ item.item_identifier
35
+ end
36
+ time :due_date
37
+ time :created_at
38
+ time :checked_in_at do
39
+ checkin.try(:created_at)
40
+ end
41
+ boolean :reserved do
42
+ reserved?
43
+ end
44
+ end
45
+
26
46
  def self.per_page
27
47
  10
28
48
  end
@@ -35,20 +55,21 @@ class Checkout < ActiveRecord::Base
35
55
  end
36
56
 
37
57
  def checkout_renewable?
38
- return false if self.overdue?
39
- if self.item
40
- return false if self.over_checkout_renewal_limit?
41
- return false if self.reserved?
58
+ return false if overdue?
59
+ if item
60
+ return false if over_checkout_renewal_limit?
61
+ return false if reserved?
42
62
  end
43
63
  true
44
64
  end
45
65
 
46
66
  def reserved?
47
- return true if self.item.reserved?
67
+ return true if item.try(:reserved?)
68
+ false
48
69
  end
49
70
 
50
71
  def over_checkout_renewal_limit?
51
- return true if self.item.checkout_status(self.user).checkout_renewal_limit <= self.checkout_renewal_count
72
+ return true if item.checkout_status(user).checkout_renewal_limit <= checkout_renewal_count
52
73
  end
53
74
 
54
75
  def overdue?
@@ -60,7 +81,7 @@ class Checkout < ActiveRecord::Base
60
81
  end
61
82
 
62
83
  def is_today_due_date?
63
- if Time.zone.now.beginning_of_day == self.due_date.beginning_of_day
84
+ if Time.zone.now.beginning_of_day == due_date.beginning_of_day
64
85
  return true
65
86
  else
66
87
  return false
@@ -69,17 +90,17 @@ class Checkout < ActiveRecord::Base
69
90
 
70
91
  def get_new_due_date
71
92
  return nil unless user
72
- if self.item
73
- if self.checkout_renewal_count <= self.item.checkout_status(user).checkout_renewal_limit
74
- new_due_date = Time.zone.now.advance(:days => self.item.checkout_status(user).checkout_period).beginning_of_day
93
+ if item
94
+ if checkout_renewal_count <= item.checkout_status(user).checkout_renewal_limit
95
+ new_due_date = Time.zone.now.advance(:days => item.checkout_status(user).checkout_period).beginning_of_day
75
96
  else
76
- new_due_date = self.due_date
97
+ new_due_date = due_date
77
98
  end
78
99
  end
79
100
  end
80
101
 
81
102
  def self.manifestations_count(start_date, end_date, manifestation)
82
- self.completed(start_date, end_date).where(:item_id => manifestation.items.collect(&:id)).count
103
+ completed(start_date, end_date).where(:item_id => manifestation.items.pluck('items.id')).count
83
104
  end
84
105
 
85
106
  def self.send_due_date_notification
@@ -12,7 +12,7 @@
12
12
  <%= render 'manifestations/show_index', :manifestation => checked_item.item.manifestation -%>
13
13
  </td>
14
14
  <td><%= link_to checked_item.item.item_identifier, checked_item.item -%></td>
15
- <td><%= l(checked_item.due_date, :format => :only_date) -%></td>
15
+ <td><%= l(checked_item.due_date, :formats => :only_date) -%></td>
16
16
  <td><%= link_to t('page.destroy'), checked_item, :data => {:confirm => t('page.are_you_sure')}, :method => :delete -%></td>
17
17
  </tr>
18
18
  <%- end -%>
@@ -14,7 +14,7 @@
14
14
  <%= render 'manifestations/holding', :manifestation => checkout.item.manifestation -%>
15
15
  </td>
16
16
  <td><%= link_to checkout.item.item_identifier, checkout.item -%></td>
17
- <td><%= l(checkout.due_date, :format => :only_date) -%></td>
17
+ <td><%= l(checkout.due_date, :formats => :only_date) -%></td>
18
18
  </tr>
19
19
  <%- end -%>
20
20
  </table>
@@ -24,7 +24,7 @@
24
24
  </td>
25
25
  <td>
26
26
  <%- if checkin.checkout -%>
27
- <%= l(checkin.checkout.due_date, :format => :only_date) -%>
27
+ <%= l(checkin.checkout.due_date, :formats => :only_date) -%>
28
28
  <%- end -%>
29
29
  </td>
30
30
  <td>
@@ -15,6 +15,9 @@
15
15
  <ul>
16
16
  <li><%= link_to t('checkout.my_checkout'), user_checkouts_path(current_user) -%></li>
17
17
  <li><%= link_to t('page.overdue'), checkouts_path(:view => 'overdue') -%></li>
18
+ </ul>
19
+ <%= render 'reserved_facet' %>
20
+ <ul>
18
21
  <li>
19
22
  <%= link_to 'RSS', checkouts_path(:format => :rss) -%>
20
23
  <%= link_to (image_tag 'icons/feed.png', :size => '16x16', :alt => 'RSS', :class => 'icon'), checkouts_path(:format => :rss) -%>
@@ -24,6 +24,7 @@
24
24
  <ul>
25
25
  <li><%= link_to t('page.back_to', :model => t('activerecord.models.checkout')), checkouts_path -%></li>
26
26
  </ul>
27
+ <%= render 'reserved_facet' %>
27
28
  <p>
28
29
  <%= link_to (image_tag 'icons/feed.png', :size => '16x16', :alt => 'RSS', :class => 'icon'), checkouts_path(:format => :rss, :view => 'overdue') -%>
29
30
  (<%= link_to 'RSS', checkouts_path(:format => :rss, :view => 'overdue') -%>)
@@ -20,6 +20,7 @@
20
20
  </li>
21
21
  <%- end -%>
22
22
  </ul>
23
+ <%= render 'reserved_facet' %>
23
24
  <ul>
24
25
  <li><%= link_to t('activerecord.models.reserve'), user_reserves_path(user) -%></li>
25
26
  <%- if current_user.has_role?('Librarian') -%>
@@ -21,7 +21,7 @@
21
21
  (<%= link_to checkout.item.item_identifier, checkout.item -%>)
22
22
  </td>
23
23
  <td>
24
- <%= l(checkout.due_date, :format => :only_date) -%>
24
+ <%= l(checkout.due_date, :formats => :only_date) -%>
25
25
  <br />
26
26
  <% if checkout.checkin %>
27
27
  <strong><%= t('checkout.returned') %></strong>
@@ -0,0 +1,14 @@
1
+ <h4><%= t('checkout.reserved') %></h4>
2
+ <ul>
3
+ <%- @checkouts_facet.each do |facet| -%>
4
+ <% facet.value ? facet_reserved = true : facet_reserved = false %>
5
+ <li>
6
+ <%- if @reserved == facet_reserved -%><strong><%- end -%>
7
+ <%= link_to "#{localized_boolean(facet.value)} (#{facet.count})", url_for(params.merge(:page => nil, :reserved => facet.value.to_s, :view => nil, :only_path => true)) -%>
8
+ <%- if @reserved == facet_reserved -%></strong><%- end -%>
9
+ </li>
10
+ <%- end -%>
11
+ <%- unless @reserved.nil? -%>
12
+ <li><%= link_to t('page.remove_this_facet'), url_for(params.merge(:reserved => nil, :page => nil, :view => nil, :only_path => true)) -%></li>
13
+ <%- end -%>
14
+ </ul>
@@ -7,7 +7,7 @@
7
7
  <h3><%= t('checkout.renewal') -%></h3>
8
8
  <%- if @checkout.checkout_renewable? -%>
9
9
  <%= form_for(@checkout) do |f| -%>
10
- <%= t('checkout.new_due_date') -%>: <%= l(@new_due_date, :format => :only_date) if @new_due_date -%>
10
+ <%= t('checkout.new_due_date') -%>: <%= l(@new_due_date, :formats => :only_date) if @new_due_date -%>
11
11
  <%= f.hidden_field :due_date, :value => @new_due_date -%>
12
12
  <br />
13
13
  <%= f.submit %>
@@ -10,7 +10,7 @@
10
10
  </p>
11
11
  <p>
12
12
  <strong><%= t('activerecord.attributes.checkout.due_date') -%></strong><br />
13
- <%= l(@checkout.due_date, :format => :only_date) if @checkout.due_date -%>
13
+ <%= l(@checkout.due_date, :formats => :only_date) if @checkout.due_date -%>
14
14
  </p>
15
15
  <%- if can? :destroy, @checkout -%>
16
16
  <p>
@@ -21,7 +21,7 @@
21
21
 
22
22
  <p>
23
23
  <strong><%= t('activerecord.attributes.lending_policy.fixed_due_date') -%>:</strong>
24
- <%= l(@lending_policy.fixed_due_date, :format => :only_date) if @lending_policy.fixed_due_date -%>
24
+ <%= l(@lending_policy.fixed_due_date, :formats => :only_date) if @lending_policy.fixed_due_date -%>
25
25
  </p>
26
26
 
27
27
  <p>
@@ -22,7 +22,7 @@
22
22
  <%= render 'title', :reserve => reserve -%>
23
23
  </td>
24
24
  <td><%= i18n_state(reserve.state) -%></td>
25
- <td><%= l(reserve.expired_at, :format => :only_date) -%></td>
25
+ <td><%= l(reserve.expired_at, :formats => :only_date) -%></td>
26
26
  <%- if can? :destroy, reserve -%>
27
27
  <td>
28
28
  <%= link_to t('page.edit'), edit_reserve_path(reserve) -%>
@@ -33,7 +33,7 @@
33
33
 
34
34
  <p>
35
35
  <strong><%= t('activerecord.attributes.reserve.expired_at') -%>:</strong>
36
- <%= l(@reserve.expired_at, :format => :only_date) if @reserve.expired_at -%>
36
+ <%= l(@reserve.expired_at, :formats => :only_date) if @reserve.expired_at -%>
37
37
  </p>
38
38
 
39
39
  <p>
@@ -143,6 +143,7 @@ en:
143
143
  returned: "Returned"
144
144
  my_checkout: "My checkout"
145
145
  remove_all_history: "Remove all checkout history"
146
+ reserved: "Reserved"
146
147
  checkin:
147
148
  item_not_found: "Item not found."
148
149
  enter_item_identifier: "Enter item identifier."
@@ -141,6 +141,7 @@ ja:
141
141
  returned: "返却済み"
142
142
  my_checkout: "自分の貸出"
143
143
  remove_all_history: "すべての貸出履歴を削除"
144
+ reserved: "予約あり"
144
145
  checkin:
145
146
  item_not_found: "資料が見つかりません。"
146
147
  enter_item_identifier: "所蔵情報番号を入力してください。"
@@ -1,3 +1,3 @@
1
1
  module EnjuCirculation
2
- VERSION = "0.0.69"
2
+ VERSION = "0.0.70"
3
3
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe CheckoutsController do
4
4
  fixtures :all
5
5
 
6
- describe "GET index" do
6
+ describe "GET index", :solr => true do
7
7
  before(:each) do
8
8
  FactoryGirl.create(:admin)
9
9
  end
@@ -13,7 +13,7 @@ describe CheckoutsController do
13
13
 
14
14
  it "assigns all checkouts as @checkouts" do
15
15
  get :index
16
- assigns(:checkouts).should eq(Checkout.not_returned.order('checkouts.id DESC').page(1))
16
+ assigns(:checkouts).should eq Checkout.not_returned.order('checkouts.id DESC').page(1)
17
17
  end
18
18
 
19
19
  it "should get other user's index" do
Binary file
@@ -41,7 +41,7 @@ checkout_00004:
41
41
  librarian_id: 1
42
42
  checkout_renewal_count: 0
43
43
  due_date: <%= 2.day.from_now.beginning_of_day %>
44
- created_at: 2007-09-08 01:39:03.210081 +09:00
44
+ created_at: 2007-09-08 01:39:04.210081 +09:00
45
45
  basket_id: 3
46
46
  checkout_00005:
47
47
  item_id: 5
@@ -52,7 +52,7 @@ checkout_00005:
52
52
  librarian_id: 1
53
53
  checkout_renewal_count: 0
54
54
  due_date: <%= 2.day.from_now.beginning_of_day %>
55
- created_at: 2007-09-08 01:39:03.210081 +09:00
55
+ created_at: 2007-09-08 01:39:05.210081 +09:00
56
56
  basket_id: 4
57
57
  checkout_00006:
58
58
  item_id: 7
@@ -63,7 +63,7 @@ checkout_00006:
63
63
  librarian_id: 2
64
64
  checkout_renewal_count: 0
65
65
  due_date: 2010-09-15 00:00:00 +09:00
66
- created_at: 2007-09-08 01:39:03.210081 +09:00
66
+ created_at: 2007-09-08 01:39:06.210081 +09:00
67
67
  checkout_00007:
68
68
  item_id: 7
69
69
  updated_at: 2007-09-09 21:15:11.648996 +09:00
@@ -73,7 +73,7 @@ checkout_00007:
73
73
  librarian_id: 1
74
74
  checkout_renewal_count: 0
75
75
  due_date: <%= 2.day.from_now.beginning_of_day %>
76
- created_at: 2007-09-08 01:39:03.210081 +09:00
76
+ created_at: 2007-09-08 01:39:07.210081 +09:00
77
77
  basket_id: 5
78
78
  checkout_00008:
79
79
  item_id: 8
@@ -84,7 +84,7 @@ checkout_00008:
84
84
  librarian_id: 1
85
85
  checkout_renewal_count: 0
86
86
  due_date: <%= 2.day.from_now.beginning_of_day %>
87
- created_at: 2007-09-08 01:39:03.210081 +09:00
87
+ created_at: 2007-09-08 01:39:08.210081 +09:00
88
88
  basket_id: 6
89
89
  checkout_00009:
90
90
  item_id: 9
@@ -95,7 +95,7 @@ checkout_00009:
95
95
  librarian_id: 1
96
96
  checkout_renewal_count: 1
97
97
  due_date: <%= 2.day.from_now.beginning_of_day %>
98
- created_at: 2007-09-08 01:39:03.210081 +09:00
98
+ created_at: 2007-09-08 01:39:09.210081 +09:00
99
99
  basket_id: 7
100
100
  checkout_00010:
101
101
  item_id: 13
@@ -106,7 +106,7 @@ checkout_00010:
106
106
  librarian_id: 1
107
107
  checkout_renewal_count: 1
108
108
  due_date: <%= 2.day.from_now.beginning_of_day %>
109
- created_at: 2007-09-08 01:39:03.210081 +09:00
109
+ created_at: 2007-09-08 01:39:10.210081 +09:00
110
110
  basket_id: 7
111
111
  checkout_00011:
112
112
  item_id: 14
@@ -117,7 +117,7 @@ checkout_00011:
117
117
  librarian_id: 1
118
118
  checkout_renewal_count: 1
119
119
  due_date: <%= 180.days.ago.beginning_of_day %>
120
- created_at: 2007-09-08 01:39:03.210081 +09:00
120
+ created_at: 2007-09-08 01:39:11.210081 +09:00
121
121
  basket_id: 7
122
122
  checkout_00012:
123
123
  item_id: 6
@@ -128,7 +128,7 @@ checkout_00012:
128
128
  librarian_id: 1
129
129
  checkout_renewal_count: 1
130
130
  due_date: <%= 180.days.ago.beginning_of_day %>
131
- created_at: 2007-09-08 01:39:03.210081 +09:00
131
+ created_at: 2007-09-08 01:39:12.210081 +09:00
132
132
  basket_id: 8
133
133
  checkin_id: 5
134
134
  checkout_00013:
@@ -140,7 +140,7 @@ checkout_00013:
140
140
  librarian_id: 1
141
141
  checkout_renewal_count: 1
142
142
  due_date: <%= 180.days.ago.beginning_of_day %>
143
- created_at: 2007-09-08 01:39:03.210081 +09:00
143
+ created_at: 2007-09-08 01:39:13.210081 +09:00
144
144
  basket_id: 8
145
145
  checkin_id: 4
146
146
  # == Schema Information
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enju_circulation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.69
4
+ version: 0.0.70
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-05 00:00:00.000000000 Z
12
+ date: 2012-07-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -332,6 +332,7 @@ files:
332
332
  - app/views/checkouts/_index_overdue.html.erb
333
333
  - app/views/checkouts/_index_user.html.erb
334
334
  - app/views/checkouts/_list.html.erb
335
+ - app/views/checkouts/_reserved_facet.html.erb
335
336
  - app/views/checkouts/edit.html.erb
336
337
  - app/views/checkouts/index.atom.builder
337
338
  - app/views/checkouts/index.csv.erb