enju_circulation 0.1.0.pre36 → 0.1.0.pre37

Sign up to get free protection for your applications and to get access to all the features.
Files changed (398) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/carrier_type_has_checkout_types_controller.rb +11 -11
  3. data/app/controllers/checked_items_controller.rb +13 -13
  4. data/app/controllers/checkins_controller.rb +14 -15
  5. data/app/controllers/checkout_types_controller.rb +10 -10
  6. data/app/controllers/checkouts_controller.rb +18 -19
  7. data/app/controllers/item_has_use_restrictions_controller.rb +10 -10
  8. data/app/controllers/lending_policies_controller.rb +1 -1
  9. data/app/controllers/manifestation_checkout_stats_controller.rb +15 -13
  10. data/app/controllers/manifestation_reserve_stats_controller.rb +15 -13
  11. data/app/controllers/reserves_controller.rb +27 -28
  12. data/app/controllers/user_checkout_stats_controller.rb +15 -13
  13. data/app/controllers/user_group_has_checkout_types_controller.rb +11 -11
  14. data/app/controllers/user_reserve_stats_controller.rb +15 -13
  15. data/app/models/carrier_type_has_checkout_type.rb +6 -6
  16. data/app/models/checked_item.rb +20 -18
  17. data/app/models/checkin.rb +13 -14
  18. data/app/models/checkout.rb +20 -21
  19. data/app/models/checkout_stat_has_manifestation.rb +2 -2
  20. data/app/models/checkout_stat_has_user.rb +2 -2
  21. data/app/models/checkout_type.rb +9 -9
  22. data/app/models/circulation_status.rb +13 -3
  23. data/app/models/enju_circulation/ability.rb +1 -1
  24. data/app/models/item_has_use_restriction.rb +3 -3
  25. data/app/models/lending_policy.rb +4 -4
  26. data/app/models/manifestation_checkout_stat.rb +4 -3
  27. data/app/models/manifestation_checkout_stat_transition.rb +13 -0
  28. data/app/models/manifestation_reserve_stat.rb +4 -3
  29. data/app/models/manifestation_reserve_stat_transition.rb +13 -0
  30. data/app/models/reserve.rb +123 -157
  31. data/app/models/reserve_stat_has_manifestation.rb +2 -2
  32. data/app/models/reserve_stat_has_user.rb +2 -2
  33. data/app/models/reserve_state_machine.rb +93 -0
  34. data/app/models/reserve_transition.rb +20 -0
  35. data/app/models/use_restriction.rb +5 -5
  36. data/app/models/user_checkout_stat.rb +4 -3
  37. data/app/models/user_checkout_stat_transition.rb +13 -0
  38. data/app/models/user_group_has_checkout_type.rb +8 -8
  39. data/app/models/user_reserve_stat.rb +4 -3
  40. data/app/models/user_reserve_stat_transition.rb +13 -0
  41. data/app/views/carrier_type_has_checkout_types/_form.html.erb +3 -3
  42. data/app/views/carrier_type_has_checkout_types/edit.html.erb +1 -1
  43. data/app/views/carrier_type_has_checkout_types/index.html.erb +3 -3
  44. data/app/views/carrier_type_has_checkout_types/new.html.erb +1 -1
  45. data/app/views/carrier_type_has_checkout_types/show.html.erb +1 -1
  46. data/app/views/carrier_types/_checkout_form.html.erb +1 -1
  47. data/app/views/checked_items/_checked_item.html.erb +3 -3
  48. data/app/views/checked_items/_checkout.html.erb +3 -3
  49. data/app/views/checked_items/_list.html.erb +3 -3
  50. data/app/views/checked_items/edit.html.erb +1 -1
  51. data/app/views/checked_items/index.html.erb +1 -1
  52. data/app/views/checked_items/new.html.erb +3 -3
  53. data/app/views/checked_items/show.html.erb +1 -1
  54. data/app/views/checkins/_checkin.html.erb +3 -3
  55. data/app/views/checkins/_form.html.erb +1 -1
  56. data/app/views/checkins/_list.html.erb +2 -2
  57. data/app/views/checkins/edit.html.erb +1 -1
  58. data/app/views/checkins/index.html.erb +2 -2
  59. data/app/views/checkins/new.html.erb +3 -3
  60. data/app/views/checkins/show.html.erb +1 -1
  61. data/app/views/checkout_types/_form.html.erb +2 -2
  62. data/app/views/checkout_types/edit.html.erb +1 -1
  63. data/app/views/checkout_types/index.html.erb +4 -4
  64. data/app/views/checkout_types/new.html.erb +1 -1
  65. data/app/views/checkout_types/show.html.erb +2 -2
  66. data/app/views/checkouts/_index.html.erb +7 -7
  67. data/app/views/checkouts/_index_item.html.erb +5 -5
  68. data/app/views/checkouts/_index_overdue.html.erb +7 -7
  69. data/app/views/checkouts/_index_user.html.erb +13 -13
  70. data/app/views/checkouts/_list.html.erb +5 -5
  71. data/app/views/checkouts/_reserved_facet.html.erb +2 -2
  72. data/app/views/checkouts/edit.html.erb +8 -8
  73. data/app/views/checkouts/index.atom.builder +3 -3
  74. data/app/views/checkouts/index.html.erb +3 -3
  75. data/app/views/checkouts/index.rss.builder +9 -9
  76. data/app/views/checkouts/index.txt.erb +4 -0
  77. data/app/views/checkouts/new.html.erb +2 -2
  78. data/app/views/checkouts/show.html.erb +7 -7
  79. data/app/views/circulation_statuses/_form.html.erb +2 -2
  80. data/app/views/circulation_statuses/edit.html.erb +1 -1
  81. data/app/views/circulation_statuses/index.html.erb +3 -3
  82. data/app/views/circulation_statuses/new.html.erb +1 -1
  83. data/app/views/circulation_statuses/show.html.erb +1 -1
  84. data/app/views/item_has_use_restrictions/edit.html.erb +1 -1
  85. data/app/views/item_has_use_restrictions/index.html.erb +4 -4
  86. data/app/views/item_has_use_restrictions/new.html.erb +2 -2
  87. data/app/views/item_has_use_restrictions/show.html.erb +1 -1
  88. data/app/views/lending_policies/_form.html.erb +1 -1
  89. data/app/views/lending_policies/edit.html.erb +1 -1
  90. data/app/views/lending_policies/index.html.erb +2 -2
  91. data/app/views/lending_policies/new.html.erb +1 -1
  92. data/app/views/lending_policies/show.html.erb +2 -2
  93. data/app/views/manifestation_checkout_stats/_form.html.erb +1 -1
  94. data/app/views/manifestation_checkout_stats/edit.html.erb +1 -1
  95. data/app/views/manifestation_checkout_stats/index.html.erb +3 -4
  96. data/app/views/manifestation_checkout_stats/new.html.erb +1 -1
  97. data/app/views/manifestation_checkout_stats/show.html.erb +3 -4
  98. data/app/views/manifestation_checkout_stats/show.txt.erb +4 -0
  99. data/app/views/manifestation_reserve_stats/_form.html.erb +1 -1
  100. data/app/views/manifestation_reserve_stats/edit.html.erb +1 -1
  101. data/app/views/manifestation_reserve_stats/index.html.erb +3 -4
  102. data/app/views/manifestation_reserve_stats/new.html.erb +1 -1
  103. data/app/views/manifestation_reserve_stats/show.html.erb +3 -4
  104. data/app/views/manifestation_reserve_stats/show.txt.erb +4 -0
  105. data/app/views/my_accounts/_feed_token.html.erb +3 -3
  106. data/app/views/reserves/_form.html.erb +1 -1
  107. data/app/views/reserves/_new.html.erb +9 -9
  108. data/app/views/reserves/_new_user.html.erb +13 -13
  109. data/app/views/reserves/_state_facet.html.erb +2 -2
  110. data/app/views/reserves/_title.html.erb +1 -1
  111. data/app/views/reserves/edit.html.erb +7 -7
  112. data/app/views/reserves/index.atom.builder +3 -3
  113. data/app/views/reserves/index.html.erb +26 -26
  114. data/app/views/reserves/index.rss.builder +10 -10
  115. data/app/views/reserves/index.txt.erb +4 -0
  116. data/app/views/reserves/show.html.erb +9 -9
  117. data/app/views/use_restrictions/_form.html.erb +2 -2
  118. data/app/views/use_restrictions/edit.html.erb +1 -1
  119. data/app/views/use_restrictions/index.html.erb +3 -3
  120. data/app/views/use_restrictions/new.html.erb +1 -1
  121. data/app/views/use_restrictions/show.html.erb +1 -1
  122. data/app/views/user_checkout_stats/_form.html.erb +1 -1
  123. data/app/views/user_checkout_stats/edit.html.erb +1 -1
  124. data/app/views/user_checkout_stats/index.html.erb +3 -4
  125. data/app/views/user_checkout_stats/new.html.erb +1 -1
  126. data/app/views/user_checkout_stats/show.html.erb +3 -4
  127. data/app/views/user_checkout_stats/show.txt.erb +4 -0
  128. data/app/views/user_group_has_checkout_types/edit.html.erb +7 -7
  129. data/app/views/user_group_has_checkout_types/index.html.erb +3 -3
  130. data/app/views/user_group_has_checkout_types/new.html.erb +9 -9
  131. data/app/views/user_group_has_checkout_types/show.html.erb +1 -1
  132. data/app/views/user_groups/_checkout_form.html.erb +6 -6
  133. data/app/views/user_reserve_stats/_form.html.erb +1 -1
  134. data/app/views/user_reserve_stats/edit.html.erb +1 -1
  135. data/app/views/user_reserve_stats/index.html.erb +3 -4
  136. data/app/views/user_reserve_stats/new.html.erb +1 -1
  137. data/app/views/user_reserve_stats/show.html.erb +3 -4
  138. data/app/views/user_reserve_stats/show.txt.erb +4 -0
  139. data/app/views/users/_feed_token.html.erb +3 -3
  140. data/config/initializers/inflections.rb +3 -0
  141. data/config/locales/translation_en.yml +6 -0
  142. data/config/locales/translation_ja.yml +6 -0
  143. data/config/routes.rb +8 -10
  144. data/db/migrate/035_create_reserves.rb +0 -1
  145. data/db/migrate/20081212080038_create_manifestation_checkout_stats.rb +0 -1
  146. data/db/migrate/20081215094302_create_user_checkout_stats.rb +0 -1
  147. data/db/migrate/20081216190724_create_manifestation_reserve_stats.rb +0 -1
  148. data/db/migrate/20081220023628_create_user_reserve_stats.rb +0 -1
  149. data/db/migrate/20090321130448_add_completed_at_to_user_checkout_stat.rb +0 -4
  150. data/db/migrate/20140518050147_create_reserve_transitions.rb +14 -0
  151. data/db/migrate/20140810061942_add_user_id_to_user_checkout_stat.rb +12 -0
  152. data/db/migrate/20140810091231_add_checkout_icalendar_token_to_profile.rb +6 -0
  153. data/db/migrate/20140810091417_add_save_checkout_history_to_profile.rb +5 -0
  154. data/lib/enju_circulation/engine.rb +0 -4
  155. data/lib/enju_circulation/item.rb +4 -4
  156. data/lib/enju_circulation/manifestation.rb +2 -2
  157. data/lib/enju_circulation/profile.rb +26 -0
  158. data/lib/enju_circulation/user.rb +1 -1
  159. data/lib/enju_circulation/version.rb +1 -1
  160. data/lib/enju_circulation.rb +2 -0
  161. data/lib/generators/enju_circulation/setup/setup_generator.rb +2 -0
  162. data/lib/generators/enju_circulation/setup/templates/db/fixtures/circulation_statuses.yml +48 -25
  163. data/lib/generators/enju_circulation/setup/templates/db/fixtures/use_restrictions.yml +39 -13
  164. data/lib/tasks/circulation_status.rb +6 -0
  165. data/lib/tasks/enju_circulation_tasks.rake +14 -0
  166. data/lib/tasks/reserve.rb +5 -0
  167. data/lib/tasks/use_restriction.rb +6 -0
  168. data/spec/controllers/carrier_type_has_checkout_types_controller_spec.rb +21 -21
  169. data/spec/controllers/checkins_controller_spec.rb +22 -22
  170. data/spec/controllers/checkout_types_controller_spec.rb +21 -21
  171. data/spec/controllers/checkouts_controller_spec.rb +14 -14
  172. data/spec/controllers/circulation_statuses_controller_spec.rb +21 -21
  173. data/spec/controllers/item_has_use_restrictions_controller_spec.rb +21 -21
  174. data/spec/controllers/lending_policies_controller_spec.rb +21 -21
  175. data/spec/controllers/manifestation_checkout_stats_controller_spec.rb +21 -21
  176. data/spec/controllers/manifestation_reserve_stats_controller_spec.rb +21 -21
  177. data/spec/controllers/reserves_controller_spec.rb +32 -32
  178. data/spec/controllers/use_restrictions_controller_spec.rb +21 -21
  179. data/spec/controllers/user_checkout_stats_controller_spec.rb +21 -21
  180. data/spec/controllers/user_group_has_checkout_types_controller_spec.rb +21 -21
  181. data/spec/controllers/user_reserve_stats_controller_spec.rb +21 -21
  182. data/spec/dummy/app/models/user.rb +2 -46
  183. data/spec/dummy/config/environments/test.rb +2 -0
  184. data/spec/dummy/db/development.sqlite3 +0 -0
  185. data/spec/dummy/db/migrate/001_create_agents.rb +0 -8
  186. data/spec/dummy/db/migrate/005_create_manifestations.rb +7 -12
  187. data/spec/dummy/db/migrate/006_create_items.rb +0 -6
  188. data/spec/dummy/db/migrate/112_create_frequencies.rb +12 -0
  189. data/spec/dummy/db/migrate/117_create_form_of_works.rb +12 -0
  190. data/spec/dummy/db/migrate/154_create_messages.rb +0 -1
  191. data/spec/dummy/db/migrate/20080819181903_create_message_requests.rb +0 -2
  192. data/spec/dummy/db/migrate/20081028083142_create_agent_import_files.rb +20 -0
  193. data/spec/dummy/db/migrate/20081028083208_create_resource_import_files.rb +20 -0
  194. data/spec/dummy/db/migrate/20090705133942_add_attachments_picture_to_picture_file.rb +15 -0
  195. data/spec/dummy/db/migrate/20090705212043_add_attachments_attachment_to_manifestation.rb +15 -0
  196. data/spec/dummy/db/migrate/20090719201843_create_extents.rb +12 -0
  197. data/spec/dummy/db/migrate/20090720091106_create_medium_of_performances.rb +12 -0
  198. data/spec/dummy/db/migrate/20090720091429_create_content_types.rb +12 -0
  199. data/spec/dummy/db/migrate/20091025080447_create_licenses.rb +12 -0
  200. data/spec/dummy/db/migrate/20100129142347_create_import_requests.rb +14 -0
  201. data/spec/dummy/db/migrate/20100925043847_create_resource_import_results.rb +15 -0
  202. data/spec/dummy/db/migrate/20100925074559_create_agent_import_results.rb +12 -0
  203. data/spec/dummy/db/migrate/20110603184217_add_edit_mode_to_resource_import_file.rb +9 -0
  204. data/spec/dummy/db/migrate/20110620173525_add_bookstore_id_to_item.rb +11 -0
  205. data/spec/dummy/db/migrate/20111201155456_devise_create_users.rb +42 -0
  206. data/spec/dummy/db/migrate/20120125050502_add_depth_to_message.rb +6 -0
  207. data/spec/dummy/db/migrate/20120129020544_add_budget_type_id_to_item.rb +6 -0
  208. data/spec/dummy/db/migrate/20120319120638_add_content_type_id_to_manifestation.rb +6 -0
  209. data/spec/dummy/db/migrate/20120410104851_add_year_of_publication_to_manifestation.rb +5 -0
  210. data/spec/dummy/db/migrate/20120413072700_add_picture_meta_to_picture_file.rb +5 -0
  211. data/spec/dummy/db/migrate/20120413100352_add_fingerprint_to_picture_file.rb +5 -0
  212. data/spec/dummy/db/migrate/20120413161340_add_fingerprint_to_resource_import_file.rb +5 -0
  213. data/spec/dummy/db/migrate/20120413161403_add_fingerprint_to_agent_import_file.rb +5 -0
  214. data/spec/dummy/db/migrate/20120413170705_add_error_message_to_resource_import_file.rb +5 -0
  215. data/spec/dummy/db/migrate/20120413170720_add_error_message_to_agent_import_file.rb +5 -0
  216. data/spec/dummy/db/migrate/20120415164821_add_attachment_meta_to_manifestation.rb +5 -0
  217. data/spec/dummy/db/migrate/20120418081407_add_month_of_publication_to_manifestation.rb +5 -0
  218. data/spec/dummy/db/migrate/20120511072422_add_agent_identifier_to_agent.rb +6 -0
  219. data/spec/dummy/db/migrate/20120602141129_add_edit_mode_to_agent_import_file.rb +5 -0
  220. data/spec/dummy/db/migrate/20121116031206_add_fulltext_content_to_manifestation.rb +5 -0
  221. data/spec/dummy/db/migrate/20130221154434_add_additional_attributes_to_user.rb +16 -0
  222. data/spec/dummy/db/migrate/20130421155019_add_creator_string_to_series_statement.rb +7 -0
  223. data/spec/dummy/db/migrate/20130421164124_add_series_master_to_series_statement.rb +5 -0
  224. data/spec/dummy/db/migrate/20130429020822_add_root_manifestation_id_to_series_statement.rb +6 -0
  225. data/spec/dummy/db/migrate/20140122054321_create_profiles.rb +20 -0
  226. data/spec/dummy/db/migrate/20140518111006_create_message_transitions.rb +14 -0
  227. data/spec/dummy/db/migrate/20140518135713_create_message_request_transitions.rb +14 -0
  228. data/spec/dummy/db/migrate/20140519170214_create_resource_import_file_transitions.rb +14 -0
  229. data/spec/dummy/db/migrate/20140519171220_create_import_request_transitions.rb +14 -0
  230. data/spec/dummy/db/migrate/20140524020735_create_agent_import_file_transitions.rb +14 -0
  231. data/spec/dummy/db/migrate/20140614065404_create_resource_export_files.rb +11 -0
  232. data/spec/dummy/db/migrate/20140614141500_create_resource_export_file_transitions.rb +14 -0
  233. data/spec/dummy/db/migrate/20140628073524_add_user_encoding_to_agent_import_file.rb +5 -0
  234. data/spec/dummy/db/migrate/20140628073535_add_user_encoding_to_resource_import_file.rb +5 -0
  235. data/spec/dummy/db/migrate/20140720140916_add_binding_item_identifier_to_item.rb +8 -0
  236. data/spec/dummy/db/migrate/20140721151416_add_default_shelf_id_to_resource_import_file.rb +5 -0
  237. data/spec/dummy/db/migrate/20140802082007_add_manifestation_id_to_item.rb +6 -0
  238. data/spec/dummy/db/migrate/20140811031145_add_expired_at_to_profile.rb +5 -0
  239. data/spec/dummy/db/schema.rb +315 -56
  240. data/spec/dummy/db/test.sqlite3 +0 -0
  241. data/spec/dummy/solr/conf/admin-extra.html +31 -0
  242. data/spec/dummy/solr/conf/elevate.xml +36 -0
  243. data/spec/dummy/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
  244. data/spec/dummy/solr/conf/protwords.txt +21 -0
  245. data/spec/dummy/solr/conf/schema.xml +255 -0
  246. data/spec/dummy/solr/conf/scripts.conf +24 -0
  247. data/spec/dummy/solr/conf/solrconfig.xml +667 -0
  248. data/spec/dummy/solr/conf/spellings.txt +2 -0
  249. data/spec/dummy/solr/conf/stopwords.txt +58 -0
  250. data/spec/dummy/solr/conf/synonyms.txt +31 -0
  251. data/spec/dummy/solr/default/data/index/_7f0.fdt +0 -0
  252. data/spec/dummy/solr/default/data/index/_7f0.fdx +0 -0
  253. data/spec/dummy/solr/default/data/index/_7f0.fnm +0 -0
  254. data/spec/dummy/solr/default/data/index/_7f0.nvd +0 -0
  255. data/spec/dummy/solr/default/data/index/_7f0.nvm +0 -0
  256. data/spec/dummy/solr/default/data/index/_7f0.si +0 -0
  257. data/spec/dummy/solr/default/data/index/_7f0_Lucene41_0.doc +0 -0
  258. data/spec/dummy/solr/default/data/index/_7f0_Lucene41_0.pos +0 -0
  259. data/spec/dummy/solr/default/data/index/_7f0_Lucene41_0.tim +0 -0
  260. data/spec/dummy/solr/default/data/index/_7f0_Lucene41_0.tip +0 -0
  261. data/spec/dummy/solr/default/data/index/segments.gen +0 -0
  262. data/spec/dummy/solr/default/data/index/segments_bvw +0 -0
  263. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015394 +0 -0
  264. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015395 +0 -0
  265. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015396 +0 -0
  266. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015397 +0 -0
  267. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015398 +0 -0
  268. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015399 +0 -0
  269. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015400 +0 -0
  270. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015401 +0 -0
  271. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000015402 +0 -0
  272. data/spec/dummy/solr/development/data/index/segments.gen +0 -0
  273. data/spec/dummy/solr/development/data/index/segments_1 +0 -0
  274. data/spec/dummy/solr/solr.xml +8 -0
  275. data/spec/dummy/solr/test/data/index/segments.gen +0 -0
  276. data/spec/dummy/solr/test/data/index/segments_1 +0 -0
  277. data/spec/dummy/tmp/cache/assets/test/sprockets/0007f9aec08cc2727b3d00cd62cf1d0f +0 -0
  278. data/spec/dummy/tmp/cache/assets/test/sprockets/0440b81b0aae840cf287a686585a8cec +0 -0
  279. data/spec/dummy/tmp/cache/assets/test/sprockets/0e3e358e4fe4601ba5e435f6d0c86f12 +0 -0
  280. data/spec/dummy/tmp/cache/assets/test/sprockets/129cec5384c0f26fcfb0ce65048298c5 +0 -0
  281. data/spec/dummy/tmp/cache/assets/test/sprockets/1572dfd6f1e555f4be1aa60ddc3cb0c0 +0 -0
  282. data/spec/dummy/tmp/cache/assets/test/sprockets/181c975b1296d7ebe81714d5e64bc098 +0 -0
  283. data/spec/dummy/tmp/cache/assets/test/sprockets/1c1fbab93e4552626da626e0dbe70c74 +0 -0
  284. data/spec/dummy/tmp/cache/assets/test/sprockets/1e58a07a3701da9fb9c176d67162af2b +0 -0
  285. data/spec/dummy/tmp/cache/assets/test/sprockets/2b35ad8fee7e1228e205669278e2adda +0 -0
  286. data/spec/dummy/tmp/cache/assets/test/sprockets/2f09f58943a88f21e3a0318621391785 +0 -0
  287. data/spec/dummy/tmp/cache/assets/test/sprockets/2ffe508d0533d0afd2a37bb574eda40d +0 -0
  288. data/spec/dummy/tmp/cache/assets/test/sprockets/3753d928863ee65118b9f2da1c6e504d +0 -0
  289. data/spec/dummy/tmp/cache/assets/test/sprockets/40e90f0c329b14292a9ff1a2fe907b39 +0 -0
  290. data/spec/dummy/tmp/cache/assets/test/sprockets/45f3c74e1e31b58d9bda6908d5623290 +0 -0
  291. data/spec/dummy/tmp/cache/assets/test/sprockets/49a3464eb6bcffb3d9f5b47b133edabb +0 -0
  292. data/spec/dummy/tmp/cache/assets/test/sprockets/49d32c13d390c1b80d8b2705aac86579 +0 -0
  293. data/spec/dummy/tmp/cache/assets/test/sprockets/4aa18096a209e515f5f1df487622cdf4 +0 -0
  294. data/spec/dummy/tmp/cache/assets/test/sprockets/50e64f45f0cb4cee52fd3f3908f89a82 +0 -0
  295. data/spec/dummy/tmp/cache/assets/test/sprockets/51f7d34a9e9bebb47b7201cfebfec34d +0 -0
  296. data/spec/dummy/tmp/cache/assets/test/sprockets/5995180d1cfd7cad71ec6d9e1a538f0e +0 -0
  297. data/spec/dummy/tmp/cache/assets/test/sprockets/604e0e4b3c01d488d6fb087e9fdaeb94 +0 -0
  298. data/spec/dummy/tmp/cache/assets/test/sprockets/6401fc09d2b894df2ad251b007df145a +0 -0
  299. data/spec/dummy/tmp/cache/assets/test/sprockets/65a8d4d288e5f082f0166aa7be7a2464 +0 -0
  300. data/spec/dummy/tmp/cache/assets/test/sprockets/6f5d66df18892df6af39c9cfd784f0f5 +0 -0
  301. data/spec/dummy/tmp/cache/assets/test/sprockets/6fcdd2234a7c25f9d4179ca12fd9f7b4 +0 -0
  302. data/spec/dummy/tmp/cache/assets/test/sprockets/6fdb4513af157010ef79b56df44d665e +0 -0
  303. data/spec/dummy/tmp/cache/assets/test/sprockets/750439d8043ed022910956fbb55faa65 +0 -0
  304. data/spec/dummy/tmp/cache/assets/test/sprockets/811e5198d0dc4efe02d28c0c2215e207 +0 -0
  305. data/spec/dummy/tmp/cache/assets/test/sprockets/83ea20e0b25e77f5dce5bf733b088292 +0 -0
  306. data/spec/dummy/tmp/cache/assets/test/sprockets/9604073a83f822f13caaabd7e157bbbb +0 -0
  307. data/spec/dummy/tmp/cache/assets/test/sprockets/98d02556564ee10aef4c3397bb94d5b9 +0 -0
  308. data/spec/dummy/tmp/cache/assets/test/sprockets/9cfe4d48f5258863dbfb3623c797fb15 +0 -0
  309. data/spec/dummy/tmp/cache/assets/test/sprockets/a296264dcc89e1f8ab6382e678ffbe38 +0 -0
  310. data/spec/dummy/tmp/cache/assets/test/sprockets/aa2e1ada35daa496bb08e85fcb817536 +0 -0
  311. data/spec/dummy/tmp/cache/assets/test/sprockets/abee2d4cb18d15789dcdc9c680f3e6de +0 -0
  312. data/spec/dummy/tmp/cache/assets/test/sprockets/c1ab0ecf3cf57db41d9e4cd9306d8829 +0 -0
  313. data/spec/dummy/tmp/cache/assets/test/sprockets/c4a984c6feb506f3e1f9120a8d029bda +0 -0
  314. data/spec/dummy/tmp/cache/assets/test/sprockets/ccdcb26ebc6ef3b684368b368edf4f99 +0 -0
  315. data/spec/dummy/tmp/cache/assets/test/sprockets/d34b5413caa9407126db68d5d590804a +0 -0
  316. data/spec/dummy/tmp/cache/assets/test/sprockets/d4ac74c17332ad931b72f42d7997fcc0 +0 -0
  317. data/spec/dummy/tmp/cache/assets/test/sprockets/dd672deb061233e0db1d2f413d27213f +0 -0
  318. data/spec/dummy/tmp/cache/assets/test/sprockets/e1fcfb0faa3c12467a1c35251e04c8b1 +0 -0
  319. data/spec/dummy/tmp/cache/assets/test/sprockets/e2d21478696ac96ad895f7c3b8d31594 +0 -0
  320. data/spec/dummy/tmp/cache/assets/test/sprockets/e577e9ce00153ad2e59111f761d0fb15 +0 -0
  321. data/spec/dummy/tmp/cache/assets/test/sprockets/e9738177de2083b68d42e053a1529244 +0 -0
  322. data/spec/dummy/tmp/cache/assets/test/sprockets/e9ce2df3f0160329df69b22a911dbd04 +0 -0
  323. data/spec/dummy/tmp/cache/assets/test/sprockets/f2e83d3b5fe984832bfeff09b0e3b8d2 +0 -0
  324. data/spec/dummy/tmp/cache/assets/test/sprockets/f90eee17e0e5eaea50e6064ded54617c +0 -0
  325. data/spec/dummy/tmp/cache/assets/test/sprockets/fa8e81ce1d45228121b9df5618542190 +0 -0
  326. data/spec/dummy/tmp/cache/assets/test/sprockets/fbdc1d9347cb228f06807b76c6c2974e +0 -0
  327. data/spec/dummy/tmp/cache/stdout +1262 -0
  328. data/spec/dummy/tmp/pids/redis-test.pid +1 -0
  329. data/spec/factories/profile.rb +9 -0
  330. data/spec/factories/reserve.rb +7 -1
  331. data/spec/factories/user.rb +3 -9
  332. data/spec/fixtures/agents.yml +0 -12
  333. data/spec/fixtures/checkouts.yml +12 -1
  334. data/spec/fixtures/items.yml +48 -25
  335. data/spec/fixtures/manifestation_checkout_stats.yml +3 -4
  336. data/spec/fixtures/manifestation_reserve_stats.yml +3 -4
  337. data/spec/fixtures/message_requests.yml +0 -3
  338. data/spec/fixtures/message_templates.yml +41 -20
  339. data/spec/fixtures/profiles.yml +83 -0
  340. data/spec/fixtures/reserve_transitions.yml +88 -0
  341. data/spec/fixtures/reserves.yml +1 -18
  342. data/spec/fixtures/user_checkout_stats.yml +3 -4
  343. data/spec/fixtures/user_groups.yml +3 -3
  344. data/spec/fixtures/user_reserve_stats.yml +3 -4
  345. data/spec/fixtures/users.yml +0 -55
  346. data/spec/models/checked_item_spec.rb +2 -1
  347. data/spec/models/checkout_spec.rb +0 -1
  348. data/spec/models/manifestation_checkout_stat_spec.rb +4 -2
  349. data/spec/models/manifestation_reserve_stat_spec.rb +4 -2
  350. data/spec/models/reserve_spec.rb +9 -11
  351. data/spec/models/user_checkout_stat_spec.rb +4 -2
  352. data/spec/models/user_reserve_stat_spec.rb +4 -2
  353. data/spec/support/resque.rb +25 -22
  354. metadata +325 -92
  355. data/app/controllers/checkout_stat_has_manifestations_controller.rb +0 -81
  356. data/app/controllers/checkout_stat_has_users_controller.rb +0 -81
  357. data/app/controllers/reserve_stat_has_manifestations_controller.rb +0 -81
  358. data/app/controllers/reserve_stat_has_users_controller.rb +0 -81
  359. data/app/models/circulation_sweeper.rb +0 -24
  360. data/app/views/checkout_stat_has_manifestations/_form.html.erb +0 -15
  361. data/app/views/checkout_stat_has_manifestations/edit.html.erb +0 -13
  362. data/app/views/checkout_stat_has_manifestations/index.html.erb +0 -33
  363. data/app/views/checkout_stat_has_manifestations/new.html.erb +0 -12
  364. data/app/views/checkout_stat_has_manifestations/show.html.erb +0 -28
  365. data/app/views/checkout_stat_has_users/_form.html.erb +0 -15
  366. data/app/views/checkout_stat_has_users/edit.html.erb +0 -13
  367. data/app/views/checkout_stat_has_users/index.html.erb +0 -33
  368. data/app/views/checkout_stat_has_users/new.html.erb +0 -12
  369. data/app/views/checkout_stat_has_users/show.html.erb +0 -28
  370. data/app/views/checkouts/index.csv.erb +0 -4
  371. data/app/views/manifestation_checkout_stats/show.csv.erb +0 -4
  372. data/app/views/manifestation_reserve_stats/show.csv.erb +0 -4
  373. data/app/views/reserve_stat_has_manifestations/_form.html.erb +0 -15
  374. data/app/views/reserve_stat_has_manifestations/edit.html.erb +0 -13
  375. data/app/views/reserve_stat_has_manifestations/index.html.erb +0 -33
  376. data/app/views/reserve_stat_has_manifestations/new.html.erb +0 -12
  377. data/app/views/reserve_stat_has_manifestations/show.html.erb +0 -28
  378. data/app/views/reserve_stat_has_users/_form.html.erb +0 -15
  379. data/app/views/reserve_stat_has_users/edit.html.erb +0 -13
  380. data/app/views/reserve_stat_has_users/index.html.erb +0 -33
  381. data/app/views/reserve_stat_has_users/new.html.erb +0 -12
  382. data/app/views/reserve_stat_has_users/show.html.erb +0 -28
  383. data/app/views/reserves/index.csv.erb +0 -4
  384. data/app/views/user_checkout_stats/show.csv.erb +0 -4
  385. data/app/views/user_reserve_stats/show.csv.erb +0 -4
  386. data/db/fixtures/carrier_type_has_checkout_types.yml +0 -8
  387. data/db/fixtures/checkout_types.yml +0 -22
  388. data/db/fixtures/circulation_statuses.yml +0 -92
  389. data/db/fixtures/use_restrictions.yml +0 -79
  390. data/db/migrate/20130303104849_add_state_index_to_reserve.rb +0 -5
  391. data/spec/controllers/checkout_stat_has_manifestations_controller_spec.rb +0 -441
  392. data/spec/controllers/checkout_stat_has_users_controller_spec.rb +0 -441
  393. data/spec/controllers/reserve_stat_has_manifestations_controller_spec.rb +0 -441
  394. data/spec/controllers/reserve_stat_has_users_controller_spec.rb +0 -441
  395. data/spec/dummy/app/mailers/notifier.rb +0 -29
  396. data/spec/dummy/db/migrate/20110916053430_rename_manifestation_number_list_to_number_string.rb +0 -13
  397. data/spec/dummy/db/migrate/20111201155456_create_users.rb +0 -16
  398. data/spec/dummy/db/migrate/20111201155513_add_devise_to_users.rb +0 -44
@@ -1,46 +1,46 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  class Reserve < ActiveRecord::Base
3
+ include Statesman::Adapters::ActiveRecordModel
3
4
  attr_accessible :manifestation_id, :user_number, :expired_at
4
- attr_accessible :expired_at, :as => :user_update
5
+ attr_accessible :expired_at, as: :user_update
5
6
  attr_accessible :manifestation_id, :item_identifier, :user_number,
6
7
  :expired_at, :request_status_type, :canceled_at, :checked_out_at,
7
8
  :expiration_notice_to_patron, :expiration_notice_to_library, :item_id,
8
9
  :retained_at, :postponed_at, :force_retaining,
9
- :as => :admin
10
+ as: :admin
10
11
  scope :hold, where('item_id IS NOT NULL')
11
- scope :not_hold, where(:item_id => nil)
12
- scope :waiting, where('canceled_at IS NULL AND expired_at > ? AND state != ?', Time.zone.now, 'completed').order('reserves.id DESC')
13
- scope :retained, where('retained_at IS NOT NULL AND state = ?', 'retained')
14
- scope :completed, where('checked_out_at IS NOT NULL AND state = ?', 'completed')
15
- scope :canceled, where('canceled_at IS NOT NULL AND state = ?', 'canceled')
16
- scope :postponed, where('postponed_at IS NOT NULL AND state = ?', 'postponed')
17
- scope :will_expire_retained, lambda {|datetime| {:conditions => ['checked_out_at IS NULL AND canceled_at IS NULL AND expired_at <= ? AND state = ?', datetime, 'retained'], :order => 'expired_at'}}
18
- scope :will_expire_pending, lambda {|datetime| {:conditions => ['checked_out_at IS NULL AND canceled_at IS NULL AND expired_at <= ? AND state = ?', datetime, 'pending'], :order => 'expired_at'}}
19
- scope :created, lambda {|start_date, end_date| {:conditions => ['created_at >= ? AND created_at < ?', start_date, end_date]}}
20
- scope :not_sent_expiration_notice_to_patron, where(:state => 'expired', :expiration_notice_to_patron => false)
21
- scope :not_sent_expiration_notice_to_library, where(:state => 'expired', :expiration_notice_to_library => false)
22
- scope :sent_expiration_notice_to_patron, where(:state => 'expired', :expiration_notice_to_patron => true)
23
- scope :sent_expiration_notice_to_library, where(:state => 'expired', :expiration_notice_to_library => true)
24
- scope :not_sent_cancel_notice_to_agent, where(:state => 'canceled', :expiration_notice_to_patron => false)
25
- scope :not_sent_cancel_notice_to_library, where(:state => 'canceled', :expiration_notice_to_library => false)
26
-
27
- belongs_to :user #, :validate => true
28
- belongs_to :manifestation #, :validate => true
29
- belongs_to :librarian, :class_name => 'User' #, :validate => true
30
- belongs_to :item #, :validate => true
12
+ scope :not_hold, where(item_id: nil)
13
+ scope :waiting, -> {not_in_state(:completed, :expired).where('canceled_at IS NULL AND expired_at > ?', Time.zone.now).order('reserves.id DESC')}
14
+ scope :retained, -> {in_state(:retained).where('retained_at IS NOT NULL')}
15
+ scope :completed, -> {in_state(:completed).where('checked_out_at IS NOT NULL')}
16
+ scope :canceled, -> {in_state(:canceled).where('canceled_at IS NOT NULL')}
17
+ scope :postponed, -> {in_state(:postponed).where('postponed_at IS NOT NULL')}
18
+ scope :will_expire_retained, lambda {|datetime| in_state(:retained).where('checked_out_at IS NULL AND canceled_at IS NULL AND expired_at <= ?', datetime).order('expired_at')}
19
+ scope :will_expire_pending, lambda {|datetime| in_state(:pending).where('checked_out_at IS NULL AND canceled_at IS NULL AND expired_at <= ?', datetime).order('expired_at')}
20
+ scope :created, lambda {|start_date, end_date| {conditions: ['created_at >= ? AND created_at < ?', start_date, end_date]}}
21
+ scope :not_sent_expiration_notice_to_patron, -> {in_state(:expired).where(:expiration_notice_to_patron => false)}
22
+ scope :not_sent_expiration_notice_to_library, -> {in_state(:expired).where(:expiration_notice_to_library => false)}
23
+ scope :sent_expiration_notice_to_patron, -> {in_state(:expired).where(:expiration_notice_to_patron => true)}
24
+ scope :sent_expiration_notice_to_library, -> {in_state(:expired).where(:expiration_notice_to_library => true)}
25
+ scope :not_sent_cancel_notice_to_patron, -> {in_state(:canceled).where(:expiration_notice_to_patron => false)}
26
+ scope :not_sent_cancel_notice_to_library, -> {in_state(:canceled).where(:expiration_notice_to_library => false)}
27
+ belongs_to :user
28
+ belongs_to :manifestation, touch: true
29
+ belongs_to :librarian, class_name: 'User'
30
+ belongs_to :item, touch: true
31
31
  belongs_to :request_status_type
32
32
 
33
33
  validates_associated :user, :librarian, :request_status_type
34
- validates :manifestation, :associated => true #, :on => :create
34
+ validates :manifestation, :associated => true #, on: :create
35
35
  validates_presence_of :user, :request_status_type
36
- validates :manifestation, :presence => true, :unless => Proc.new{|reserve|
36
+ validates :manifestation, presence: true, :unless => Proc.new{|reserve|
37
37
  reserve.completed?
38
38
  }
39
- #validates_uniqueness_of :manifestation_id, :scope => :user_id
40
- validates_date :expired_at, :allow_blank => true
39
+ #validates_uniqueness_of :manifestation_id, scope: :user_id
40
+ validates_date :expired_at, allow_blank: true
41
41
  validate :manifestation_must_include_item
42
- validate :available_for_reservation?, :on => :create
43
- validates :item_id, :presence => true, :if => Proc.new{|reserve|
42
+ validate :available_for_reservation?, on: :create
43
+ validates :item_id, presence: true, :if => Proc.new{|reserve|
44
44
  if item_id_changed?
45
45
  if reserve.completed? or reserve.retained?
46
46
  unless item_id_change[0]
@@ -59,63 +59,25 @@ class Reserve < ActiveRecord::Base
59
59
  end
60
60
  end
61
61
  }
62
- validates :item_id, :uniqueness => {:scope => :state, :allow_blank => true},
63
- :if => Proc.new{|reserve|
64
- return false unless reserve.state_changed?
65
- return true if reserve.completed? or reserve.retained?
66
- }
67
62
  validate :valid_item?
68
63
  validate :retained_by_other_user?
69
- before_validation :set_manifestation, :on => :create
64
+ before_validation :set_manifestation, on: :create
70
65
  before_validation :set_item, :set_expired_at
71
- before_validation :set_user, :on => :update
72
- before_validation :set_request_status, :on => :create
66
+ before_validation :set_user, on: :update
67
+ before_validation :set_request_status, on: :create
73
68
 
74
69
  attr_accessor :user_number, :item_identifier, :force_retaining
75
70
 
76
- state_machine :initial => :pending do
77
- before_transition [:pending, :postponed] => :requested, :do => :do_request
78
- before_transition :retained => :postponed, :do => :postpone
79
- before_transition [:pending, :requested, :retained, :postponed] => :retained, :do => :retain
80
- before_transition [:pending ,:requested, :retained, :postponed] => :canceled, :do => :cancel
81
- before_transition [:pending, :requested, :retained, :postponed] => :expired, :do => :expire
82
- before_transition :retained => :completed, :do => :checkout
83
- after_transition any => any do |reserve, transition|
84
- if Rails.env == 'production'
85
- ExpireFragmentCache.expire_fragment_cache(reserve.manifestation)
86
- end
87
- end
88
-
89
- after_transition any => [:requested, :canceled, :retained, :postponed] do |reserve, transition|
90
- reserve.send_message
91
- end
92
-
93
- event :sm_request do
94
- transition [:pending, :requested] => :requested
95
- end
96
-
97
- event :sm_retain do
98
- transition [:pending, :requested, :retained, :postponed] => :retained
99
- end
100
-
101
- event :sm_cancel do
102
- transition [:pending, :requested, :retained, :postponed] => :canceled
103
- end
104
-
105
- event :sm_expire do
106
- transition [:pending, :requested, :retained, :postponed] => :expired
107
- end
108
-
109
- event :sm_postpone do
110
- transition :retained => :postponed
111
- end
71
+ paginates_per 10
112
72
 
113
- event :sm_complete do
114
- transition [:pending, :requested, :retained] => :completed
115
- end
73
+ def state_machine
74
+ ReserveStateMachine.new(self, transition_class: ReserveTransition)
116
75
  end
117
76
 
118
- paginates_per 10
77
+ has_many :reserve_transitions
78
+
79
+ delegate :can_transition_to?, :transition_to!, :transition_to, :current_state,
80
+ to: :state_machine
119
81
 
120
82
  searchable do
121
83
  text :username do
@@ -125,7 +87,7 @@ class Reserve < ActiveRecord::Base
125
87
  user.try(:username)
126
88
  end
127
89
  string :user_number do
128
- user.try(:user_number)
90
+ user.profile.try(:user_number)
129
91
  end
130
92
  time :created_at
131
93
  text :item_identifier do
@@ -137,7 +99,9 @@ class Reserve < ActiveRecord::Base
137
99
  boolean :hold do |reserve|
138
100
  self.hold.include?(reserve)
139
101
  end
140
- string :state
102
+ string :state do
103
+ current_state
104
+ end
141
105
  string :title_transcription do
142
106
  manifestation.try(:title_transcription)
143
107
  end
@@ -150,7 +114,7 @@ class Reserve < ActiveRecord::Base
150
114
  def set_item
151
115
  identifier = item_identifier.to_s.strip
152
116
  if identifier.present?
153
- item = Item.where(:item_identifier => identifier).first
117
+ item = Item.where(item_identifier: identifier).first
154
118
  self.item = item
155
119
  end
156
120
  end
@@ -158,14 +122,13 @@ class Reserve < ActiveRecord::Base
158
122
  def set_user
159
123
  number = user_number.to_s.strip
160
124
  if number.present?
161
- user = User.where(:user_number => number).first
162
- self.user = user
125
+ self.user = Profile.where(user_number: number).first.try(:user)
163
126
  end
164
127
  end
165
128
 
166
129
  def valid_item?
167
130
  if item_identifier.present?
168
- item = Item.where(:item_identifier => item_identifier).first
131
+ item = Item.where(item_identifier: item_identifier).first
169
132
  errors[:base] << I18n.t('reserve.invalid_item') unless item
170
133
  end
171
134
  end
@@ -173,24 +136,24 @@ class Reserve < ActiveRecord::Base
173
136
  def retained_by_other_user?
174
137
  return nil if force_retaining == '1'
175
138
  if item and !retained?
176
- if Reserve.retained.where(:item_id => item.item_identifier).count > 0
139
+ if Reserve.retained.where(item_id: item.item_identifier).count > 0
177
140
  errors[:base] << I18n.t('reserve.attempt_to_update_retained_reservation')
178
141
  end
179
142
  end
180
143
  end
181
144
 
182
145
  def set_request_status
183
- self.request_status_type = RequestStatusType.where(:name => 'In Process').first
146
+ self.request_status_type = RequestStatusType.where(name: 'In Process').first
184
147
  end
185
148
 
186
149
  def set_expired_at
187
- if self.user and self.manifestation
188
- if self.canceled_at.blank?
189
- if self.expired_at.blank?
190
- expired_period = self.manifestation.reservation_expired_period(self.user)
150
+ if user and manifestation
151
+ if canceled_at.blank?
152
+ if expired_at.blank?
153
+ expired_period = manifestation.reservation_expired_period(user)
191
154
  self.expired_at = (expired_period + 1).days.from_now.beginning_of_day
192
155
  elsif !completed?
193
- if self.expired_at.beginning_of_day < Time.zone.now
156
+ if expired_at.beginning_of_day < Time.zone.now
194
157
  errors[:base] << I18n.t('reserve.invalid_date')
195
158
  end
196
159
  end
@@ -200,70 +163,71 @@ class Reserve < ActiveRecord::Base
200
163
 
201
164
  def next_reservation
202
165
  if item
203
- Reserve.waiting.where(:manifestation_id => item.manifestation.id).first
166
+ Reserve.waiting.where(:manifestation_id => item.manifestation.id).readonly(false).first
204
167
  end
205
168
  end
206
169
 
207
170
  def send_message(sender = nil)
208
171
  sender = User.find(1) unless sender # TODO: システムからのメッセージの発信者
209
172
  Reserve.transaction do
210
- case state
173
+ case current_state
211
174
  when 'requested'
212
- message_template_to_agent = MessageTemplate.localized_template('reservation_accepted_for_patron', user.locale)
175
+ message_template_to_agent = MessageTemplate.localized_template('reservation_accepted_for_patron', user.profile.locale)
213
176
  request = MessageRequest.new
214
- request.assign_attributes({:sender => sender, :receiver => user, :message_template => message_template_to_agent}, :as => :admin)
215
- request.save_message_body(:manifestations => Array[manifestation], :user => user)
216
- request.sm_send_message! # 受付時は即時送信
217
- message_template_to_library = MessageTemplate.localized_template('reservation_accepted_for_library', user.locale)
177
+ request.assign_attributes({sender: sender, receiver: user, message_template: message_template_to_agent}, as: :admin)
178
+ request.save_message_body(manifestations: Array[manifestation], user: user)
179
+ request.transition_to!(:sent) # 受付時は即時送信
180
+ message_template_to_library = MessageTemplate.localized_template('reservation_accepted_for_library', user.profile.locale)
218
181
  request = MessageRequest.new
219
- request.assign_attributes({:sender => sender, :receiver => sender, :message_template => message_template_to_library}, :as => :admin)
220
- request.save_message_body(:manifestations => Array[manifestation], :user => user)
221
- request.sm_send_message! # 受付時は即時送信
182
+ request.assign_attributes({sender: sender, receiver: sender, message_template: message_template_to_library}, as: :admin)
183
+ request.save_message_body(manifestations: Array[manifestation], user: user)
184
+ request.transition_to!(:sent) # 受付時は即時送信
222
185
  when 'canceled'
223
- message_template_to_agent = MessageTemplate.localized_template('reservation_canceled_for_patron', user.locale)
186
+ message_template_to_agent = MessageTemplate.localized_template('reservation_canceled_for_patron', user.profile.locale)
224
187
  request = MessageRequest.new
225
- request.assign_attributes({:sender => sender, :receiver => user, :message_template => message_template_to_agent}, :as => :admin)
226
- request.save_message_body(:manifestations => Array[manifestation], :user => user)
227
- request.sm_send_message! # キャンセル時は即時送信
228
- message_template_to_library = MessageTemplate.localized_template('reservation_canceled_for_library', user.locale)
188
+ request.assign_attributes({sender: sender, receiver: user, message_template: message_template_to_agent}, as: :admin)
189
+ request.save_message_body(manifestations: Array[manifestation], user: user)
190
+ request.transition_to!(:sent) # キャンセル時は即時送信
191
+ message_template_to_library = MessageTemplate.localized_template('reservation_canceled_for_library', user.profile.locale)
229
192
  request = MessageRequest.new
230
- request.assign_attributes({:sender => sender, :receiver => sender, :message_template => message_template_to_library}, :as => :admin)
231
- request.save_message_body(:manifestations => Array[manifestation], :user => user)
232
- request.sm_send_message! # キャンセル時は即時送信
193
+ request.assign_attributes({sender: sender, receiver: sender, message_template: message_template_to_library}, as: :admin)
194
+ request.save_message_body(manifestations: Array[manifestation], user: user)
195
+ request.transition_to!(:sent) # キャンセル時は即時送信
233
196
  when 'expired'
234
- message_template_to_agent = MessageTemplate.localized_template('reservation_expired_for_patron', user.locale)
197
+ message_template_to_agent = MessageTemplate.localized_template('reservation_expired_for_patron', user.profile.locale)
235
198
  request = MessageRequest.new
236
- request.assign_attributes({:sender => sender, :receiver => user, :message_template => message_template_to_agent}, :as => :admin)
237
- request.save_message_body(:manifestations => Array[manifestation], :user => user)
238
- request.sm_send_message!
199
+ request.assign_attributes({sender: sender, receiver: user, message_template: message_template_to_agent}, as: :admin)
200
+ request.save_message_body(manifestations: Array[manifestation], user: user)
201
+ request.transition_to!(:sent)
202
+ reload
239
203
  self.update_attribute(:expiration_notice_to_patron, true)
240
- message_template_to_library = MessageTemplate.localized_template('reservation_expired_for_library', sender.locale)
204
+ message_template_to_library = MessageTemplate.localized_template('reservation_expired_for_library', sender.profile.locale)
241
205
  request = MessageRequest.new
242
- request.assign_attributes({:sender => sender, :receiver => sender, :message_template => message_template_to_library}, :as => :admin)
243
- request.save_message_body(:manifestations => Array[manifestation], :user => sender)
244
- request.sm_send_message!
206
+ request.assign_attributes({sender: sender, receiver: sender, message_template: message_template_to_library}, as: :admin)
207
+ request.save_message_body(manifestations: Array[manifestation], user: sender)
208
+ request.transition_to!(:sent)
245
209
  when 'retained'
246
- message_template_for_patron = MessageTemplate.localized_template('item_received_for_patron', user.locale)
210
+ message_template_for_patron = MessageTemplate.localized_template('item_received_for_patron', user.profile.locale)
247
211
  request = MessageRequest.new
248
- request.assign_attributes({:sender => sender, :receiver => user, :message_template => message_template_for_patron}, :as => :admin)
249
- request.save_message_body(:manifestations => Array[item.manifestation], :user => user)
250
- request.sm_send_message!
251
- message_template_for_library = MessageTemplate.localized_template('item_received_for_library', user.locale)
212
+ request.assign_attributes({sender: sender, receiver: user, message_template: message_template_for_patron}, as: :admin)
213
+ request.save_message_body(manifestations: Array[item.manifestation], user: user)
214
+ request.transition_to!(:sent)
215
+ message_template_for_library = MessageTemplate.localized_template('item_received_for_library', user.profile.locale)
252
216
  request = MessageRequest.new
253
- request.assign_attributes({:sender => sender, :receiver => sender, :message_template => message_template_for_library}, :as => :admin)
254
- request.save_message_body(:manifestations => Array[item.manifestation], :user => user)
255
- request.sm_send_message!
217
+ request.assign_attributes({sender: sender, receiver: sender, message_template: message_template_for_library}, as: :admin)
218
+ request.save_message_body(manifestations: Array[item.manifestation], user: user)
219
+ request.transition_to!(:sent)
256
220
  when 'postponed'
257
- message_template_for_patron = MessageTemplate.localized_template('reservation_postponed_for_patron', user.locale)
221
+ message_template_for_patron = MessageTemplate.localized_template('reservation_postponed_for_patron', user.profile.locale)
258
222
  request = MessageRequest.new
259
- request.assign_attributes({:sender => sender, :receiver => user, :message_template => message_template_for_patron}, :as => :admin)
260
- request.save_message_body(:manifestations => Array[manifestation], :user => user)
261
- request.sm_send_message!
262
- message_template_for_library = MessageTemplate.localized_template('reservation_postponed_for_library', user.locale)
223
+ request.assign_attributes({sender: sender, receiver: user, message_template: message_template_for_patron}, as: :admin)
224
+ request.save_message_body(manifestations: Array[manifestation], user: user)
225
+ request.transition_to!(:sent)
226
+ message_template_for_library = MessageTemplate.localized_template('reservation_postponed_for_library', user.profile.locale)
263
227
  request = MessageRequest.new
264
- request.assign_attributes({:sender => sender, :receiver => sender, :message_template => message_template_for_library}, :as => :admin)
265
- request.save_message_body(:manifestations => Array[manifestation], :user => user)
266
- request.sm_send_message!
228
+ request.assign_attributes({sender: sender, receiver: sender, message_template: message_template_for_library}, as: :admin)
229
+ request.save_message_body(manifestations: Array[manifestation], user: user)
230
+ request.transition_to!(:sent)
267
231
  else
268
232
  raise 'status not defined'
269
233
  end
@@ -274,19 +238,19 @@ class Reserve < ActiveRecord::Base
274
238
  sender = User.find(1) # TODO: システムからのメッセージの発信者
275
239
  case status
276
240
  when 'expired'
277
- message_template_to_library = MessageTemplate.localized_template('reservation_expired_for_library', sender.locale)
241
+ message_template_to_library = MessageTemplate.localized_template('reservation_expired_for_library', sender.profile.locale)
278
242
  request = MessageRequest.new
279
- request.assign_attributes({:sender => sender, :receiver => sender, :message_template => message_template_to_library}, :as => :admin)
280
- request.save_message_body(:manifestations => options[:manifestations])
281
- self.not_sent_expiration_notice_to_library.each do |reserve|
243
+ request.assign_attributes({sender: sender, receiver: sender, message_template: message_template_to_library}, as: :admin)
244
+ request.save_message_body(manifestations: options[:manifestations])
245
+ self.not_sent_expiration_notice_to_library.readonly(false).each do |reserve|
282
246
  reserve.expiration_notice_to_library = true
283
- reserve.save(:validate => false)
247
+ reserve.save(validate: false)
284
248
  end
285
249
  #when 'canceled'
286
250
  # message_template_to_library = MessageTemplate.localized_template('reservation_canceled_for_library', sender.locale)
287
251
  # request = MessageRequest.new
288
- # request.assign_attributes({:sender => sender, :receiver => sender, :message_template => message_template_to_library}, :as => :admin)
289
- # request.save_message_body(:manifestations => self.not_sent_expiration_notice_to_library.collect(&:manifestation))
252
+ # request.assign_attributes({sender: sender, receiver: sender, message_template: message_template_to_library}, as: :admin)
253
+ # request.save_message_body(manifestations: self.not_sent_expiration_notice_to_library.collect(&:manifestation))
290
254
  # self.not_sent_cancel_notice_to_library.each do |reserve|
291
255
  # reserve.update_attribute(:expiration_notice_to_library, true)
292
256
  # end
@@ -297,19 +261,19 @@ class Reserve < ActiveRecord::Base
297
261
 
298
262
  def self.expire
299
263
  Reserve.transaction do
300
- self.will_expire_retained(Time.zone.now.beginning_of_day).map{|r| r.sm_expire!}
301
- self.will_expire_pending(Time.zone.now.beginning_of_day).map{|r| r.sm_expire!}
264
+ self.will_expire_retained(Time.zone.now.beginning_of_day).readonly(false).map{|r| r.transition_to!(:expired)}
265
+ self.will_expire_pending(Time.zone.now.beginning_of_day).readonly(false).map{|r| r.transition_to!(:expired)}
302
266
 
303
267
  # キューに登録した時点では本文は作られないので
304
268
  # 予約の連絡をすませたかどうかを識別できるようにしなければならない
305
269
  # reserve.send_message('expired')
306
270
  User.find_each do |user|
307
271
  unless user.reserves.not_sent_expiration_notice_to_patron.empty?
308
- user.send_message('reservation_expired_for_patron', :manifestations => user.reserves.not_sent_expiration_notice_to_patron.collect(&:manifestation))
272
+ user.send_message('reservation_expired_for_patron', manifestations: user.reserves.not_sent_expiration_notice_to_patron.collect(&:manifestation))
309
273
  end
310
274
  end
311
275
  unless Reserve.not_sent_expiration_notice_to_library.empty?
312
- Reserve.send_message_to_library('expired', :manifestations => Reserve.not_sent_expiration_notice_to_library.collect(&:manifestation))
276
+ Reserve.send_message_to_library('expired', manifestations: Reserve.not_sent_expiration_notice_to_library.collect(&:manifestation))
313
277
  end
314
278
  end
315
279
  #rescue
@@ -343,27 +307,27 @@ class Reserve < ActiveRecord::Base
343
307
  end
344
308
 
345
309
  def completed?
346
- ['canceled', 'expired', 'completed'].include?(state)
310
+ ['canceled', 'expired', 'completed'].include?(current_state)
347
311
  end
348
312
 
349
313
  def retained?
350
- return true if state == 'retained'
314
+ return true if current_state == 'retained'
351
315
  false
352
316
  end
353
317
 
354
318
  private
355
319
  def do_request
356
- self.assign_attributes({:request_status_type => RequestStatusType.where(:name => 'In Process').first, :item_id => nil, :retained_at => nil}, :as => :admin)
320
+ self.assign_attributes({:request_status_type => RequestStatusType.where(name: 'In Process').first, item_id: nil, :retained_at => nil}, as: :admin)
357
321
  save!
358
322
  end
359
323
 
360
324
  def retain
361
325
  # TODO: 「取り置き中」の状態を正しく表す
362
- self.assign_attributes({:request_status_type => RequestStatusType.where(:name => 'In Process').first, :retained_at => Time.zone.now}, :as => :admin)
326
+ self.assign_attributes({:request_status_type => RequestStatusType.where(name: 'In Process').first, :retained_at => Time.zone.now}, as: :admin)
363
327
  Reserve.transaction do
364
328
  if item.try(:next_reservation)
365
329
  reservation = item.next_reservation
366
- reservation.sm_postpone!
330
+ reservation.transition_to!(:postponed)
367
331
  end
368
332
  save!
369
333
  end
@@ -371,13 +335,13 @@ class Reserve < ActiveRecord::Base
371
335
 
372
336
  def expire
373
337
  Reserve.transaction do
374
- self.assign_attributes({:request_status_type => RequestStatusType.where(:name => 'Expired').first, :canceled_at => Time.zone.now}, :as => :admin)
338
+ self.assign_attributes({:request_status_type => RequestStatusType.where(name: 'Expired').first, :canceled_at => Time.zone.now}, as: :admin)
375
339
  reserve = next_reservation
376
340
  if reserve
377
341
  reserve.item = item
378
342
  self.item = nil
379
343
  save!
380
- reserve.sm_retain!
344
+ reserve.transition_to!(:retained)
381
345
  end
382
346
  end
383
347
  logger.info "#{Time.zone.now} reserve_id #{self.id} expired!"
@@ -385,30 +349,30 @@ class Reserve < ActiveRecord::Base
385
349
 
386
350
  def cancel
387
351
  Reserve.transaction do
388
- self.assign_attributes({:request_status_type => RequestStatusType.where(:name => 'Cannot Fulfill Request').first, :canceled_at => Time.zone.now}, :as => :admin)
352
+ self.assign_attributes({:request_status_type => RequestStatusType.where(name: 'Cannot Fulfill Request').first, :canceled_at => Time.zone.now}, as: :admin)
389
353
  save!
390
354
  reserve = next_reservation
391
355
  if reserve
392
356
  reserve.item = item
393
357
  self.item = nil
394
358
  save!
395
- reserve.sm_retain!
359
+ reserve.transition_to!(:retained)
396
360
  end
397
361
  end
398
362
  end
399
363
 
400
364
  def checkout
401
- self.assign_attributes({:request_status_type => RequestStatusType.where(:name => 'Available For Pickup').first, :checked_out_at => Time.zone.now}, :as => :admin)
365
+ self.assign_attributes({:request_status_type => RequestStatusType.where(name: 'Available For Pickup').first, :checked_out_at => Time.zone.now}, as: :admin)
402
366
  save!
403
367
  end
404
368
 
405
369
  def postpone
406
370
  self.assign_attributes({
407
- :request_status_type => RequestStatusType.where(:name => 'In Process').first,
408
- :item_id => nil,
371
+ :request_status_type => RequestStatusType.where(name: 'In Process').first,
372
+ item_id: nil,
409
373
  :retained_at => nil,
410
374
  :postponed_at => Time.zone.now
411
- }, :as => :admin)
375
+ }, as: :admin)
412
376
  save!
413
377
  end
414
378
 
@@ -421,6 +385,10 @@ class Reserve < ActiveRecord::Base
421
385
  if defined?(EnjuInterLibraryLoan)
422
386
  has_one :inter_library_loan
423
387
  end
388
+
389
+ def self.transition_class
390
+ ReserveTransition
391
+ end
424
392
  end
425
393
 
426
394
  # == Schema Information
@@ -438,11 +406,9 @@ end
438
406
  # canceled_at :datetime
439
407
  # expired_at :datetime
440
408
  # deleted_at :datetime
441
- # state :string(255)
442
409
  # expiration_notice_to_patron :boolean default(FALSE)
443
410
  # expiration_notice_to_library :boolean default(FALSE)
444
411
  # retained_at :datetime
445
412
  # postponed_at :datetime
446
413
  # lock_version :integer default(0), not null
447
414
  #
448
-
@@ -1,11 +1,11 @@
1
1
  class ReserveStatHasManifestation < ActiveRecord::Base
2
2
  attr_accessible
3
3
  attr_accessible :manifestation_reserve_stat_id, :manifestation_id,
4
- :as => :admin
4
+ as: :admin
5
5
  belongs_to :manifestation_reserve_stat
6
6
  belongs_to :manifestation
7
7
 
8
- validates_uniqueness_of :manifestation_id, :scope => :manifestation_reserve_stat_id
8
+ validates_uniqueness_of :manifestation_id, scope: :manifestation_reserve_stat_id
9
9
  validates_presence_of :manifestation_reserve_stat_id, :manifestation_id
10
10
 
11
11
  paginates_per 10
@@ -1,11 +1,11 @@
1
1
  class ReserveStatHasUser < ActiveRecord::Base
2
2
  attr_accessible
3
3
  attr_accessible :user_reserve_stat_id, :user_id,
4
- :as => :admin
4
+ as: :admin
5
5
  belongs_to :user_reserve_stat
6
6
  belongs_to :user
7
7
 
8
- validates_uniqueness_of :user_id, :scope => :user_reserve_stat_id
8
+ validates_uniqueness_of :user_id, scope: :user_reserve_stat_id
9
9
  validates_presence_of :user_reserve_stat_id, :user_id
10
10
 
11
11
  paginates_per 10
@@ -0,0 +1,93 @@
1
+ class ReserveStateMachine
2
+ include Statesman::Machine
3
+ state :pending, initial: true
4
+ state :postponed
5
+ state :requested
6
+ state :retained
7
+ state :canceled
8
+ state :expired
9
+ state :completed
10
+
11
+ transition from: :pending, to: [:requested]
12
+ transition from: :postponed, to: [:requested, :retained, :canceled, :expired]
13
+ transition from: :retained, to: [:postponed, :canceled, :expired, :completed]
14
+ transition from: :requested, to: [:retained, :canceled, :expired, :completed]
15
+
16
+ after_transition(to: :requested) do |reserve|
17
+ reserve.update_attributes({request_status_type: RequestStatusType.where(name: 'In Process').first, item_id: nil, retained_at: nil}, as: :admin)
18
+ end
19
+
20
+ after_transition(to: :retained) do |reserve|
21
+ # TODO: 「取り置き中」の状態を正しく表す
22
+ reserve.update_attributes({request_status_type: RequestStatusType.where(name: 'In Process').first, retained_at: Time.zone.now}, as: :admin)
23
+ Reserve.transaction do
24
+ if reserve.item and reserve.next_reservation
25
+ reserve.item.reserves.waiting.readonly(false).map{|r|
26
+ if r != reserve
27
+ r.transition_to!(:postponed)
28
+ r.item = nil
29
+ r.save!
30
+ end
31
+ }
32
+ end
33
+ end
34
+ end
35
+
36
+ after_transition(to: :canceled) do |reserve|
37
+ Reserve.transaction do
38
+ reserve.update_attributes({request_status_type: RequestStatusType.where(name: 'Cannot Fulfill Request').first, canceled_at: Time.zone.now}, as: :admin)
39
+ next_reserve = reserve.next_reservation
40
+ if next_reserve
41
+ next_reserve.item = reserve.item
42
+ reserve.item = nil
43
+ reserve.save!
44
+ next_reserve.transition_to!(:retained)
45
+ end
46
+ end
47
+ end
48
+
49
+ after_transition(to: :expired) do |reserve|
50
+ Reserve.transaction do
51
+ reserve.update_attributes({request_status_type: RequestStatusType.where(name: 'Expired').first, canceled_at: Time.zone.now}, as: :admin)
52
+ next_reserve = reserve.next_reservation
53
+ if next_reserve
54
+ next_reserve.item = reserve.item
55
+ next_reserve.transition_to!(:retained)
56
+ reserve.item = nil
57
+ reserve.save!
58
+ end
59
+ end
60
+ Rails.logger.info "#{Time.zone.now} reserve_id #{reserve.id} expired!"
61
+ end
62
+
63
+ after_transition(to: :postponed) do |reserve|
64
+ reserve.update_attributes(item_id: nil, retained_at: nil, postponed_at: Time.zone.now, force_retaining: "1", as: :admin)
65
+ end
66
+
67
+ after_transition(to: :completed) do |reserve|
68
+ reserve.update_attributes(
69
+ request_status_type: RequestStatusType.where(name: 'Available For Pickup').first,
70
+ checked_out_at: Time.zone.now,
71
+ as: :admin)
72
+ end
73
+
74
+ after_transition(to: :requested) do |reserve|
75
+ reserve.send_message
76
+ end
77
+
78
+ after_transition(to: :expired) do |reserve|
79
+ reserve.send_message
80
+ end
81
+
82
+ after_transition(to: :postponed) do |reserve|
83
+ reserve.send_message
84
+ end
85
+
86
+ after_transition(to: :canceled) do |reserve|
87
+ reserve.send_message
88
+ end
89
+
90
+ after_transition(to: :retained) do |reserve|
91
+ reserve.send_message
92
+ end
93
+ end
@@ -0,0 +1,20 @@
1
+ class ReserveTransition < ActiveRecord::Base
2
+ include Statesman::Adapters::ActiveRecordTransition
3
+
4
+
5
+ belongs_to :reserve, inverse_of: :reserve_transitions
6
+ attr_accessible :to_state, :sort_key, :metadata
7
+ end
8
+
9
+ # == Schema Information
10
+ #
11
+ # Table name: reserve_transitions
12
+ #
13
+ # id :integer not null, primary key
14
+ # to_state :string(255)
15
+ # metadata :text default("{}")
16
+ # sort_key :integer
17
+ # reserve_id :integer
18
+ # created_at :datetime not null
19
+ # updated_at :datetime not null
20
+ #