enju_circulation 0.0.34 → 0.0.35

Sign up to get free protection for your applications and to get access to all the features.
@@ -56,7 +56,7 @@ class CheckedItemsController < ApplicationController
56
56
  @checked_item.basket = @basket
57
57
  @checked_item.librarian = current_user
58
58
 
59
- flash[:message] = []
59
+ flash[:message] = ''
60
60
  item_identifier = @checked_item.item_identifier.to_s.strip
61
61
  unless item_identifier.blank?
62
62
  item = Item.where(:item_identifier => item_identifier).first
@@ -34,6 +34,7 @@ class CheckinsController < ApplicationController
34
34
 
35
35
  # GET /checkins/new
36
36
  def new
37
+ flash[:message] = nil
37
38
  if flash[:checkin_basket_id]
38
39
  @basket = Basket.find(flash[:checkin_basket_id])
39
40
  else
@@ -1,8 +1,8 @@
1
1
  class CheckoutsController < ApplicationController
2
2
  before_filter :store_location, :only => :index
3
- load_and_authorize_resource :except => :index
4
- authorize_resource :only => :index
5
- before_filter :get_user, :only => :index
3
+ load_and_authorize_resource :except => [:index, :remove_all]
4
+ authorize_resource :only => [:index, :remove_all]
5
+ before_filter :get_user, :only => [:index, :remove_all]
6
6
  helper_method :get_item
7
7
  after_filter :convert_charset, :only => :index
8
8
  cache_sweeper :circulation_sweeper, :only => [:create, :update, :destroy]
@@ -133,4 +133,20 @@ class CheckoutsController < ApplicationController
133
133
  format.json { head :no_content }
134
134
  end
135
135
  end
136
+
137
+ def remove_all
138
+ if @user
139
+ unless current_user.has_role?('Librarian')
140
+ if @user != current_user
141
+ access_denied; return
142
+ end
143
+ end
144
+ Checkout.remove_all_history(@user)
145
+ end
146
+
147
+ respond_to do |format|
148
+ format.html { redirect_to checkouts_url, :notice => t('controller.successfully_deleted', :model => t('activerecord.models.checkout')) }
149
+ format.json { head :no_content }
150
+ end
151
+ end
136
152
  end
@@ -28,8 +28,8 @@ class Checkout < ActiveRecord::Base
28
28
  end
29
29
 
30
30
  def is_not_checked?
31
- checkout = Checkout.not_returned.find(self.item) rescue nil
32
- unless checkout.nil?
31
+ checkout = Checkout.not_returned.where(:item_id => item_id)
32
+ unless checkout.empty?
33
33
  errors[:base] << I18n.t('activerecord.errors.messages.checkin.already_checked_out')
34
34
  end
35
35
  end
@@ -107,6 +107,10 @@ class Checkout < ActiveRecord::Base
107
107
  end
108
108
  queues.size
109
109
  end
110
+
111
+ def self.remove_all_history(user)
112
+ user.checkouts.update_all(:user_id => nil)
113
+ end
110
114
  end
111
115
 
112
116
  # == Schema Information
@@ -1,4 +1,4 @@
1
- <div style="color: red"><%= flash[:message].try(:join) -%></div>
1
+ <div style="color: red"><%= flash[:message] -%></div>
2
2
 
3
3
  <div class="search_form">
4
4
  <%= form_for :checked_item, :html => {:method => :post}, :url => basket_checked_items_path(@basket), :remote => true do |f| -%>
@@ -50,6 +50,8 @@
50
50
  <%= link_to (image_tag 'icons/page_white_excel.png', :size => '16x16', :alt => 'CSV', :class => 'icon'), user_checkouts_path(user, :format => :csv, :locale => @locale.to_s) -%>
51
51
  </li>
52
52
  <%- end -%>
53
- </p>
54
-
53
+ </ul>
54
+ <ul>
55
+ <li><%= link_to t('checkout.remove_all_history'), checkouts_path, :method => :delete %></li>
56
+ </ul>
55
57
  </div>
@@ -1,4 +1,4 @@
1
- <div style="color: red"><%= flash[:message].to_s -%></div>
1
+ <div style="color: red"><%= flash[:message] -%></div>
2
2
  <div id="content_detail" class="ui-corner-all">
3
3
  <h1 class="title"><%= t('page.listing', :model => t('activerecord.models.reserve')) -%></h1>
4
4
  <div id="content_list">
@@ -122,6 +122,7 @@ en:
122
122
  checkout: "Checkout!"
123
123
  ignore_restriction: "Ignore restriction"
124
124
  already_checked_out: "This item is already checked out."
125
+ already_checked_out_try_again: "Item already checked out. Try again."
125
126
  checkout:
126
127
  user_checkout: "%{login_name}'s checkouts"
127
128
  library_group_checkout: "Checkouts in %{library_group_name}"
@@ -120,6 +120,7 @@ ja:
120
120
  checkout: "上記の資料を貸し出す"
121
121
  ignore_restriction: "制限を無視する"
122
122
  already_checked_out: "この資料はすでに貸し出されています。"
123
+ already_checked_out_try_again: "資料はすでに貸し出されています。もう一度やり直してください。"
123
124
  checkout:
124
125
  user_checkout: "%{login_name} さんの貸出資料"
125
126
  library_group_checkout: "%{library_group_name} での貸出"
data/config/routes.rb CHANGED
@@ -8,7 +8,9 @@ Rails.application.routes.draw do
8
8
  resources :checkins
9
9
  end
10
10
  resources :users do
11
- resources :checkouts, :only => :index
11
+ resources :checkouts, :only => :index do
12
+ put :remove_all, :on => :collection
13
+ end
12
14
  resources :reserves, :only => :index
13
15
  resources :baskets, :only => :index
14
16
  end
@@ -1,3 +1,3 @@
1
1
  module EnjuCirculation
2
- VERSION = "0.0.34"
2
+ VERSION = "0.0.35"
3
3
  end
@@ -264,6 +264,18 @@ describe CheckoutsController do
264
264
  put :update, :id => 'missing', :checkout => { }
265
265
  response.should be_missing
266
266
  end
267
+
268
+ it "should remove its own checkout history" do
269
+ put :remove_all, :user_id => users(:user1).username
270
+ users(:user1).checkouts.count.should eq 0
271
+ response.should redirect_to checkouts_url
272
+ end
273
+
274
+ it "should not remove other checkout history" do
275
+ put :remove_all, :user_id => users(:user2).username
276
+ users(:user1).checkouts.count.should_not eq 0
277
+ response.should redirect_to checkouts_url
278
+ end
267
279
  end
268
280
 
269
281
  describe "When logged in as Librarian" do
@@ -303,6 +315,18 @@ describe CheckoutsController do
303
315
  put :update, :id => 1, :checkout => { }
304
316
  response.should redirect_to checkout_url(assigns(:checkout))
305
317
  end
318
+
319
+ it "should remove its own checkout history" do
320
+ put :remove_all, :user_id => users(:user1).username
321
+ users(:user1).checkouts.count.should eq 0
322
+ response.should redirect_to checkouts_url
323
+ end
324
+
325
+ it "should not remove other checkout history" do
326
+ put :remove_all, :user_id => users(:user2).username
327
+ users(:user1).checkouts.count.should_not eq 0
328
+ response.should redirect_to checkouts_url
329
+ end
306
330
  end
307
331
 
308
332
  describe "When logged in as User" do
@@ -349,6 +373,18 @@ describe CheckoutsController do
349
373
  assigns(:checkout).should_not be_valid
350
374
  response.should be_success
351
375
  end
376
+
377
+ it "should remove its own checkout history" do
378
+ put :remove_all, :user_id => users(:user1).username
379
+ assigns(:user).checkouts.count.should eq 0
380
+ response.should redirect_to checkouts_url
381
+ end
382
+
383
+ it "should not remove other checkout history" do
384
+ put :remove_all, :user_id => users(:admin).username
385
+ assigns(:user).checkouts.count.should_not eq 0
386
+ response.should be_forbidden
387
+ end
352
388
  end
353
389
 
354
390
  describe "When not logged in" do
@@ -56,7 +56,7 @@ class BasketsController < ApplicationController
56
56
 
57
57
  respond_to do |format|
58
58
  if @basket.save
59
- format.html { redirect_to basket_checked_items_url(@basket), :notice => t('controller.successfully_created', :model => t('activerecord.models.basket')) }
59
+ format.html { redirect_to new_basket_checked_item_url(@basket), :notice => t('controller.successfully_created', :model => t('activerecord.models.basket')) }
60
60
  format.json { render :json => @basket, :status => :created, :location => @basket }
61
61
  else
62
62
  format.html { render :action => "new" }
@@ -71,7 +71,7 @@ class Ability
71
71
  manifestation.items.empty? and !manifestation.periodical_master? and !manifestation.is_reserved?
72
72
  end
73
73
  when 'User'
74
- can [:index, :create], Checkout
74
+ can [:index, :create, :remove_all], Checkout
75
75
  can [:show, :update, :destroy], Checkout do |checkout|
76
76
  checkout.user == user
77
77
  end
Binary file
Binary file
@@ -46,6 +46,14 @@ describe Checkout do
46
46
  it "should respond to send_overdue_notification" do
47
47
  Checkout.send_overdue_notification.should eq 1
48
48
  end
49
+
50
+ it "should destroy all history" do
51
+ user = users(:user1)
52
+ old_count = Checkout.count
53
+ Checkout.remove_all_history(user)
54
+ user.checkouts.count.should eq 0
55
+ Checkout.count.should eq old_count
56
+ end
49
57
  end
50
58
 
51
59
  # == 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.34
4
+ version: 0.0.35
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-05-18 00:00:00.000000000 Z
12
+ date: 2012-05-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -529,7 +529,6 @@ files:
529
529
  - MIT-LICENSE
530
530
  - Rakefile
531
531
  - README.rdoc
532
- - spec/controllers/baskets_controller_spec.rb
533
532
  - spec/controllers/carrier_type_has_checkout_types_controller_spec.rb
534
533
  - spec/controllers/checked_items_controller_spec.rb
535
534
  - spec/controllers/checkins_controller_spec.rb
@@ -714,7 +713,6 @@ files:
714
713
  - spec/fixtures/user_has_roles.yml
715
714
  - spec/fixtures/user_reserve_stats.yml
716
715
  - spec/fixtures/users.yml
717
- - spec/models/basket_spec.rb
718
716
  - spec/models/carrier_type_has_checkout_type_spec.rb
719
717
  - spec/models/checked_item_spec.rb
720
718
  - spec/models/checkin_spec.rb
@@ -761,7 +759,6 @@ signing_key:
761
759
  specification_version: 3
762
760
  summary: enju_circulation plugin
763
761
  test_files:
764
- - spec/controllers/baskets_controller_spec.rb
765
762
  - spec/controllers/carrier_type_has_checkout_types_controller_spec.rb
766
763
  - spec/controllers/checked_items_controller_spec.rb
767
764
  - spec/controllers/checkins_controller_spec.rb
@@ -946,7 +943,6 @@ test_files:
946
943
  - spec/fixtures/user_has_roles.yml
947
944
  - spec/fixtures/user_reserve_stats.yml
948
945
  - spec/fixtures/users.yml
949
- - spec/models/basket_spec.rb
950
946
  - spec/models/carrier_type_has_checkout_type_spec.rb
951
947
  - spec/models/checked_item_spec.rb
952
948
  - spec/models/checkin_spec.rb
@@ -1,379 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe BasketsController do
4
- fixtures :all
5
-
6
- describe "GET index" do
7
- describe "When logged in as Administrator" do
8
- login_admin
9
-
10
- it "assigns all baskets as @baskets" do
11
- get :index, :user_id => users(:user1).username
12
- assigns(:baskets).should_not be_empty
13
- response.should be_success
14
- end
15
-
16
- it "should get index without user_id" do
17
- get :index
18
- response.should be_success
19
- end
20
- end
21
-
22
- describe "When logged in as Librarian" do
23
- login_librarian
24
-
25
- it "assigns all baskets as @baskets" do
26
- get :index, :user_id => users(:user1).username
27
- assigns(:baskets).should_not be_empty
28
- response.should be_success
29
- end
30
- end
31
-
32
- describe "When logged in as User" do
33
- login_user
34
-
35
- it "assigns all baskets as @baskets" do
36
- get :index, :user_id => users(:user1).username
37
- assigns(:baskets).should be_empty
38
- response.should be_forbidden
39
- end
40
- end
41
-
42
- describe "When not logged in" do
43
- it "assigns all baskets as @baskets" do
44
- get :index, :user_id => users(:user1).username
45
- assigns(:baskets).should be_empty
46
- response.should redirect_to(new_user_session_url)
47
- end
48
- end
49
- end
50
-
51
- describe "GET show" do
52
- describe "When logged in as Administrator" do
53
- login_admin
54
-
55
- it "assigns the requested basket as @basket" do
56
- get :show, :id => 1, :user_id => users(:admin).username
57
- assigns(:basket).should eq(Basket.find(1))
58
- end
59
- end
60
-
61
- describe "When logged in as Librarian" do
62
- login_librarian
63
-
64
- it "assigns the requested basket as @basket" do
65
- get :show, :id => 1, :user_id => users(:admin).username
66
- assigns(:basket).should eq(Basket.find(1))
67
- end
68
- end
69
-
70
- describe "When logged in as User" do
71
- login_user
72
-
73
- it "assigns the requested basket as @basket" do
74
- get :show, :id => 1, :user_id => users(:admin).username
75
- assigns(:basket).should eq(Basket.find(1))
76
- response.should be_forbidden
77
- end
78
- end
79
-
80
- describe "When not logged in" do
81
- it "assigns the requested basket as @basket" do
82
- get :show, :id => 1, :user_id => users(:admin).username
83
- assigns(:basket).should eq(Basket.find(1))
84
- response.should redirect_to(new_user_session_url)
85
- end
86
- end
87
- end
88
-
89
- describe "GET new" do
90
- describe "When logged in as Administrator" do
91
- login_admin
92
-
93
- it "assigns the requested basket as @basket" do
94
- get :new
95
- assigns(:basket).should_not be_valid
96
- end
97
- end
98
-
99
- describe "When logged in as Librarian" do
100
- login_librarian
101
-
102
- it "assigns the requested basket as @basket" do
103
- get :new
104
- assigns(:basket).should_not be_valid
105
- end
106
- end
107
-
108
- describe "When logged in as User" do
109
- login_user
110
-
111
- it "should not assign the requested basket as @basket" do
112
- get :new
113
- assigns(:basket).should_not be_valid
114
- response.should be_forbidden
115
- end
116
- end
117
-
118
- describe "When not logged in" do
119
- it "should not assign the requested basket as @basket" do
120
- get :new
121
- assigns(:basket).should_not be_valid
122
- response.should redirect_to(new_user_session_url)
123
- end
124
- end
125
- end
126
-
127
- describe "GET edit" do
128
- describe "When logged in as Administrator" do
129
- login_admin
130
- before(:each) do
131
- @basket = baskets(:basket_00001)
132
- end
133
-
134
- it "assigns the requested basket as @basket" do
135
- get :edit, :id => @basket.id
136
- assigns(:basket).should eq(@basket)
137
- end
138
- end
139
-
140
- describe "When logged in as Librarian" do
141
- login_librarian
142
- before(:each) do
143
- @basket = baskets(:basket_00001)
144
- end
145
-
146
- it "assigns the requested basket as @basket" do
147
- get :edit, :id => @basket.id
148
- assigns(:basket).should eq(@basket)
149
- end
150
- end
151
-
152
- describe "When logged in as User" do
153
- login_user
154
- before(:each) do
155
- @basket = baskets(:basket_00001)
156
- end
157
-
158
- it "should not assign the requested basket as @basket" do
159
- get :edit, :id => @basket.id
160
- assigns(:basket).should eq(@basket)
161
- response.should be_forbidden
162
- end
163
- end
164
-
165
- describe "When not logged in" do
166
- before(:each) do
167
- @basket = baskets(:basket_00001)
168
- end
169
-
170
- it "should not assign the requested basket as @basket" do
171
- get :edit, :id => @basket.id
172
- assigns(:basket).should eq(@basket)
173
- response.should redirect_to new_user_session_url
174
- end
175
- end
176
- end
177
-
178
- describe "POST create" do
179
- before(:each) do
180
- @attrs = {:user_number => users(:user1).user_number }
181
- @invalid_attrs = {:user_number => 'invalid'}
182
- end
183
-
184
- describe "When logged in as Administrator" do
185
- login_admin
186
-
187
- describe "with valid params" do
188
- it "assigns a newly created basket as @basket" do
189
- post :create, :basket => {:user_number => users(:user1).user_number }
190
- assigns(:basket).should be_valid
191
- end
192
- end
193
-
194
- describe "with blank params" do
195
- it "assigns a newly created basket as @basket" do
196
- post :create, :basket => { }
197
- assigns(:basket).should_not be_valid
198
- end
199
- end
200
-
201
- describe "with invalid params" do
202
- it "assigns a newly created basket as @basket" do
203
- post :create, :basket => @invalid_attrs
204
- assigns(:basket).should_not be_valid
205
- end
206
- end
207
- end
208
-
209
- describe "When logged in as Librarian" do
210
- login_librarian
211
-
212
- describe "with valid params" do
213
- it "assigns a newly created basket as @basket" do
214
- post :create, :basket => {:user_number => users(:user1).user_number }
215
- assigns(:basket).should be_valid
216
- end
217
- end
218
-
219
- describe "with blank params" do
220
- it "assigns a newly created basket as @basket" do
221
- post :create, :basket => { }
222
- assigns(:basket).should_not be_valid
223
- end
224
- end
225
-
226
- describe "with invalid params" do
227
- it "assigns a newly created basket as @basket" do
228
- post :create, :basket => @invalid_attrs
229
- assigns(:basket).should_not be_valid
230
- end
231
- end
232
-
233
- it "should not create basket when user is suspended" do
234
- post :create, :basket => {:user_number => users(:user4).user_number }
235
- assigns(:basket).should_not be_valid
236
- assigns(:basket).errors["base"].include?(I18n.t('basket.this_account_is_suspended')).should be_true
237
- response.should be_success
238
- end
239
-
240
- it "should not create basket when user is not found" do
241
- post :create, :basket => {:user_number => 'not found' }
242
- assigns(:basket).should_not be_valid
243
- assigns(:basket).errors["base"].include?(I18n.t('user.not_found')).should be_true
244
- response.should be_success
245
- end
246
-
247
- it "should not create basket without user_number" do
248
- post :create, :basket => { }
249
- assigns(:basket).should_not be_valid
250
- response.should be_success
251
- end
252
-
253
- it "should create basket" do
254
- post :create, :basket => {:user_number => users(:user1).user_number }
255
- assigns(:basket).should be_valid
256
- response.should redirect_to basket_checked_items_url(assigns(:basket))
257
- end
258
-
259
- it "should not create basket without user_number" do
260
- post :create, :basket => { }
261
- assigns(:basket).should_not be_valid
262
- response.should be_success
263
- end
264
- end
265
-
266
- describe "When logged in as User" do
267
- login_user
268
-
269
- describe "with valid params" do
270
- it "assigns a newly created basket as @basket" do
271
- post :create, :basket => {:user_number => users(:user1).user_number }
272
- assigns(:basket).should_not be_valid
273
- end
274
-
275
- it "should be forbidden" do
276
- post :create, :basket => {:user_number => users(:user1).user_number }
277
- response.should be_forbidden
278
- end
279
- end
280
-
281
- it "should not create basket" do
282
- post :create, :basket => {:user_number => users(:user1).user_number }
283
- response.should be_forbidden
284
- end
285
- end
286
-
287
- describe "When not logged in" do
288
- describe "with blank params" do
289
- it "assigns a newly created basket as @basket" do
290
- post :create, :basket => { }
291
- assigns(:basket).should_not be_valid
292
- end
293
-
294
- it "should be redirected to new_user_session_url" do
295
- post :create, :basket => { }
296
- assigns(:basket).should_not be_valid
297
- assert_response :redirect
298
- response.should redirect_to new_user_session_url
299
- end
300
- end
301
- end
302
- end
303
-
304
- describe "PUT update" do
305
- before(:each) do
306
- @attrs = {:user_id => users(:user1).username}
307
- end
308
-
309
- describe "When logged in as Librarian" do
310
- login_librarian
311
-
312
- describe "with valid params" do
313
- it "updates the requested basket" do
314
- put :update, :id => 8, :basket => @attrs
315
- end
316
-
317
- it "assigns the requested basket as @basket" do
318
- put :update, :id => 8, :basket => @attrs
319
- assigns(:basket).checkouts.first.item.circulation_status.name.should eq 'On Loan'
320
- response.should redirect_to(user_checkouts_url(assigns(:basket).user))
321
- end
322
- end
323
- end
324
- end
325
-
326
- describe "DELETE destroy" do
327
- before(:each) do
328
- @basket = FactoryGirl.create(:basket)
329
- end
330
-
331
- describe "When logged in as Administrator" do
332
- login_fixture_admin
333
-
334
- it "should destroy basket without user_id" do
335
- delete :destroy, :id => 1, :basket => {:user_id => nil}, :user_id => users(:user1).username
336
- response.should redirect_to user_checkouts_url(assigns(:basket).user)
337
- end
338
-
339
- it "should destroy basket" do
340
- delete :destroy, :id => 1, :basket => { }, :user_id => users(:user1).username
341
- response.should redirect_to user_checkouts_url(assigns(:basket).user)
342
- end
343
- end
344
-
345
- describe "When logged in as Librarian" do
346
- login_fixture_librarian
347
-
348
- it "should destroy basket without user_id" do
349
- delete :destroy, :id => 1, :basket => {:user_id => nil}, :user_id => users(:user1).username
350
- response.should redirect_to user_checkouts_url(assigns(:basket).user)
351
- end
352
-
353
- it "should destroy basket" do
354
- delete :destroy, :id => 1, :basket => { }, :user_id => users(:user1).username
355
- response.should redirect_to user_checkouts_url(assigns(:basket).user)
356
- end
357
- end
358
-
359
- describe "When logged in as User" do
360
- login_fixture_user
361
-
362
- it "should not destroy basket" do
363
- delete :destroy, :id => 3, :user_id => users(:user1).username
364
- response.should be_forbidden
365
- end
366
- end
367
-
368
- describe "When not logged in" do
369
- it "destroys the requested basket" do
370
- delete :destroy, :id => @basket.id
371
- end
372
-
373
- it "should be forbidden" do
374
- delete :destroy, :id => @basket.id
375
- response.should redirect_to new_user_session_url
376
- end
377
- end
378
- end
379
- end
@@ -1,25 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'spec_helper'
3
-
4
- describe Basket do
5
- #pending "add some examples to (or delete) #{__FILE__}"
6
- fixtures :all
7
-
8
- it "should not create basket when user is not active" do
9
- Basket.create(:user => users(:user4)).id.should be_nil
10
- end
11
- end
12
-
13
- # == Schema Information
14
- #
15
- # Table name: baskets
16
- #
17
- # id :integer not null, primary key
18
- # user_id :integer
19
- # note :text
20
- # type :string(255)
21
- # lock_version :integer default(0), not null
22
- # created_at :datetime
23
- # updated_at :datetime
24
- #
25
-