enju_circulation 0.2.5 → 0.3.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +4 -4
- data/Rakefile +2 -2
- data/app/assets/config/enju_circulation_manifest.js +0 -0
- data/app/controllers/carrier_type_has_checkout_types_controller.rb +2 -1
- data/app/controllers/checked_items_controller.rb +2 -1
- data/app/controllers/checkins_controller.rb +4 -3
- data/app/controllers/checkout_types_controller.rb +2 -1
- data/app/controllers/checkouts_controller.rb +1 -0
- data/app/controllers/circulation_statuses_controller.rb +2 -1
- data/app/controllers/demands_controller.rb +2 -1
- data/app/controllers/item_has_use_restrictions_controller.rb +1 -0
- data/app/controllers/lending_policies_controller.rb +2 -1
- data/app/controllers/manifestation_checkout_stats_controller.rb +2 -1
- data/app/controllers/manifestation_reserve_stats_controller.rb +2 -1
- data/app/controllers/reserves_controller.rb +5 -4
- data/app/controllers/use_restrictions_controller.rb +2 -1
- data/app/controllers/user_checkout_stats_controller.rb +2 -1
- data/app/controllers/user_group_has_checkout_types_controller.rb +4 -3
- data/app/controllers/user_reserve_stats_controller.rb +2 -1
- data/app/helpers/items_helper.rb +3 -3
- data/app/models/carrier_type_has_checkout_type.rb +2 -2
- data/app/models/checked_item.rb +10 -9
- data/app/models/checkin.rb +4 -4
- data/app/models/checkout.rb +14 -14
- data/app/models/checkout_stat_has_manifestation.rb +3 -3
- data/app/models/checkout_stat_has_user.rb +3 -3
- data/app/models/checkout_type.rb +2 -2
- data/app/models/circulation_status.rb +1 -0
- data/app/models/concerns/enju_circulation/enju_basket.rb +1 -1
- data/app/models/concerns/enju_circulation/enju_item.rb +17 -17
- data/app/models/concerns/enju_circulation/enju_manifestation.rb +6 -6
- data/app/models/concerns/enju_circulation/enju_user.rb +9 -9
- data/app/models/concerns/enju_circulation/enju_user_group.rb +5 -5
- data/app/models/item_has_use_restriction.rb +2 -2
- data/app/models/lending_policy.rb +2 -2
- data/app/models/manifestation_checkout_stat.rb +4 -3
- data/app/models/manifestation_checkout_stat_transition.rb +2 -2
- data/app/models/manifestation_reserve_stat.rb +4 -3
- data/app/models/manifestation_reserve_stat_transition.rb +1 -1
- data/app/models/reserve.rb +46 -45
- data/app/models/reserve_stat_has_manifestation.rb +2 -2
- data/app/models/reserve_stat_has_user.rb +4 -4
- data/app/models/reserve_state_machine.rb +6 -6
- data/app/models/reserve_transition.rb +1 -1
- data/app/models/use_restriction.rb +1 -0
- data/app/models/user_checkout_stat.rb +3 -2
- data/app/models/user_checkout_stat_transition.rb +1 -1
- data/app/models/user_group_has_checkout_type.rb +6 -6
- data/app/models/user_reserve_stat.rb +3 -2
- data/app/models/user_reserve_stat_transition.rb +1 -1
- data/app/policies/checkout_policy.rb +3 -3
- data/app/policies/reserve_policy.rb +3 -3
- data/app/views/checkouts/index.rss.builder +4 -4
- data/app/views/checkouts/index.txt.ruby +13 -0
- data/app/views/reserves/index.rss.builder +5 -5
- data/db/migrate/032_create_checkins.rb +1 -1
- data/db/migrate/033_create_checkouts.rb +1 -1
- data/db/migrate/035_create_reserves.rb +1 -1
- data/db/migrate/121_create_checked_items.rb +1 -1
- data/db/migrate/127_create_use_restrictions.rb +1 -1
- data/db/migrate/129_create_item_has_use_restrictions.rb +1 -1
- data/db/migrate/132_create_circulation_statuses.rb +1 -1
- data/db/migrate/20081030023412_create_checkout_types.rb +2 -2
- data/db/migrate/20081030023518_create_user_group_has_checkout_types.rb +1 -1
- data/db/migrate/20081030023615_create_carrier_type_has_checkout_types.rb +1 -1
- data/db/migrate/20081212075554_create_checkout_stat_has_manifestations.rb +1 -1
- data/db/migrate/20081212080038_create_manifestation_checkout_stats.rb +1 -1
- data/db/migrate/20081215094302_create_user_checkout_stats.rb +1 -1
- data/db/migrate/20081215094955_create_checkout_stat_has_users.rb +1 -1
- data/db/migrate/20081216190517_create_reserve_stat_has_manifestations.rb +1 -1
- data/db/migrate/20081216190724_create_manifestation_reserve_stats.rb +1 -1
- data/db/migrate/20081220023628_create_user_reserve_stats.rb +1 -1
- data/db/migrate/20081220034117_create_reserve_stat_has_users.rb +1 -1
- data/db/migrate/20090321130448_add_completed_at_to_user_checkout_stat.rb +1 -1
- data/db/migrate/20090831220301_create_lending_policies.rb +2 -2
- data/db/migrate/20110301134521_add_expire_date_to_reserve.rb +1 -1
- data/db/migrate/20110328130826_add_current_checkout_count_to_user_group_has_checkout_type.rb +1 -1
- data/db/migrate/20110621093332_remove_expire_date_from_reserve.rb +1 -1
- data/db/migrate/20110627122938_add_number_of_day_to_notify_overdue_to_user_group.rb +4 -4
- data/db/migrate/20111129044509_add_pickup_location_to_reserve.rb +1 -1
- data/db/migrate/20120424103932_add_librarian_id_to_checked_item.rb +1 -1
- data/db/migrate/20130303124821_add_retained_at_to_reserve.rb +1 -1
- data/db/migrate/20130304015019_add_postponed_at_to_reserve.rb +1 -1
- data/db/migrate/20130416054135_add_circulation_status_id_to_item.rb +1 -1
- data/db/migrate/20130519065638_add_lock_version_to_reserve.rb +2 -2
- data/db/migrate/20130519065837_add_lock_version_to_checkin.rb +2 -2
- data/db/migrate/20140518050147_create_reserve_transitions.rb +1 -1
- data/db/migrate/20140528045518_create_user_checkout_stat_transitions.rb +1 -1
- data/db/migrate/20140528045539_create_user_reserve_stat_transitions.rb +1 -1
- data/db/migrate/20140528045600_create_manifestation_checkout_stat_transitions.rb +1 -1
- data/db/migrate/20140528045617_create_manifestation_reserve_stat_transitions.rb +1 -1
- data/db/migrate/20140810061942_add_user_id_to_user_checkout_stat.rb +1 -1
- data/db/migrate/20140810091231_add_checkout_icalendar_token_to_profile.rb +2 -2
- data/db/migrate/20140810091417_add_save_checkout_history_to_profile.rb +2 -2
- data/db/migrate/20141014065831_add_shelf_id_to_checkout.rb +1 -1
- data/db/migrate/20141020120523_add_library_id_to_checkout.rb +1 -1
- data/db/migrate/20150106001709_create_demands.rb +1 -1
- data/db/migrate/20160703184619_add_most_recent_to_reserve_transitions.rb +1 -1
- data/db/migrate/20160703184650_add_most_recent_to_manifestation_checkout_stat_transitions.rb +1 -1
- data/db/migrate/20160703184723_add_most_recent_to_manifestation_reserve_stat_transitions.rb +1 -1
- data/db/migrate/20160703184747_add_most_recent_to_user_checkout_stat_transitions.rb +1 -1
- data/db/migrate/20160703184805_add_most_recent_to_user_reserve_stat_transitions.rb +1 -1
- data/db/migrate/20160703190209_add_foreign_key_on_manifestation_id_to_reserve.rb +1 -1
- data/db/migrate/20180107161035_add_constraints_to_most_recent_for_reserve_transitions.rb +2 -2
- data/db/migrate/20180107161951_add_constraints_to_most_recent_for_user_checkout_stat_transitions.rb +2 -2
- data/db/migrate/20180107162009_add_constraints_to_most_recent_for_user_reserve_stat_transitions.rb +2 -2
- data/db/migrate/20180107162029_add_constraints_to_most_recent_for_manifestation_checkout_stat_transitions.rb +2 -2
- data/db/migrate/20180107162048_add_constraints_to_most_recent_for_manifestation_reserve_stat_transitions.rb +2 -2
- data/lib/enju_circulation/helper.rb +8 -8
- data/lib/enju_circulation/version.rb +1 -1
- data/lib/generators/enju_circulation/setup/setup_generator.rb +1 -1
- data/lib/generators/enju_circulation/setup/templates/config/schedule.rb +2 -2
- data/lib/tasks/enju_circulation_tasks.rake +30 -6
- data/spec/controllers/carrier_type_has_checkout_types_controller_spec.rb +45 -45
- data/spec/controllers/checked_items_controller_spec.rb +42 -42
- data/spec/controllers/checkins_controller_spec.rb +49 -49
- data/spec/controllers/checkout_types_controller_spec.rb +45 -45
- data/spec/controllers/checkouts_controller_spec.rb +63 -63
- data/spec/controllers/circulation_statuses_controller_spec.rb +45 -45
- data/spec/controllers/item_has_use_restrictions_controller_spec.rb +45 -45
- data/spec/controllers/lending_policies_controller_spec.rb +44 -44
- data/spec/controllers/manifestation_checkout_stats_controller_spec.rb +45 -45
- data/spec/controllers/manifestation_reserve_stats_controller_spec.rb +45 -45
- data/spec/controllers/profiles_controller_spec.rb +1 -1
- data/spec/controllers/reserves_controller_spec.rb +95 -95
- data/spec/controllers/use_restrictions_controller_spec.rb +45 -45
- data/spec/controllers/user_checkout_stats_controller_spec.rb +45 -45
- data/spec/controllers/user_group_has_checkout_types_controller_spec.rb +44 -44
- data/spec/controllers/user_reserve_stats_controller_spec.rb +45 -45
- data/spec/dummy/app/assets/config/manifest.js +4 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -2
- data/spec/dummy/bin/rails +1 -1
- data/spec/dummy/bin/setup +21 -12
- data/spec/dummy/bin/update +29 -0
- data/spec/dummy/bin/yarn +11 -0
- data/spec/dummy/config/application.rb +6 -17
- data/spec/dummy/config/cable.yml +9 -0
- data/spec/dummy/config/environment.rb +4 -4
- data/spec/dummy/config/environments/development.rb +24 -11
- data/spec/dummy/config/environments/production.rb +28 -16
- data/spec/dummy/config/environments/test.rb +8 -8
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/dummy/config/initializers/content_security_policy.rb +25 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/puma.rb +47 -0
- data/spec/dummy/config/routes.rb +4 -2
- data/spec/dummy/config/spring.rb +6 -0
- data/spec/dummy/db/migrate/001_create_agents.rb +7 -7
- data/spec/dummy/db/migrate/002_devise_create_users.rb +6 -7
- data/spec/dummy/db/migrate/005_create_manifestations.rb +13 -13
- data/spec/dummy/db/migrate/006_create_items.rb +6 -6
- data/spec/dummy/db/migrate/012_create_owns.rb +3 -3
- data/spec/dummy/db/migrate/015_create_creates.rb +3 -3
- data/spec/dummy/db/migrate/041_create_roles.rb +3 -3
- data/spec/dummy/db/migrate/047_create_produces.rb +3 -3
- data/spec/dummy/db/migrate/059_create_libraries.rb +1 -1
- data/spec/dummy/db/migrate/069_create_shelves.rb +1 -1
- data/spec/dummy/db/migrate/073_create_carrier_types.rb +2 -2
- data/spec/dummy/db/migrate/077_create_user_groups.rb +2 -2
- data/spec/dummy/db/migrate/080_create_library_groups.rb +1 -1
- data/spec/dummy/db/migrate/112_create_frequencies.rb +2 -2
- data/spec/dummy/db/migrate/113_create_events.rb +4 -4
- data/spec/dummy/db/migrate/114_create_event_categories.rb +2 -2
- data/spec/dummy/db/migrate/117_create_form_of_works.rb +2 -2
- data/spec/dummy/db/migrate/120_create_baskets.rb +1 -1
- data/spec/dummy/db/migrate/124_create_bookstores.rb +2 -2
- data/spec/dummy/db/migrate/125_create_donates.rb +3 -3
- data/spec/dummy/db/migrate/130_create_request_status_types.rb +2 -2
- data/spec/dummy/db/migrate/131_create_request_types.rb +2 -2
- data/spec/dummy/db/migrate/133_create_agent_merges.rb +2 -2
- data/spec/dummy/db/migrate/134_create_agent_merge_lists.rb +1 -1
- data/spec/dummy/db/migrate/149_create_message_templates.rb +6 -6
- data/spec/dummy/db/migrate/154_create_messages.rb +3 -3
- data/spec/dummy/db/migrate/20080819181903_create_message_requests.rb +1 -1
- data/spec/dummy/db/migrate/20080830154109_create_realizes.rb +3 -3
- data/spec/dummy/db/migrate/20080830172106_create_exemplifies.rb +4 -4
- data/spec/dummy/db/migrate/20080905191442_create_agent_types.rb +2 -2
- data/spec/dummy/db/migrate/20081006090811_create_subscriptions.rb +1 -1
- data/spec/dummy/db/migrate/20081006093246_create_subscribes.rb +1 -1
- data/spec/dummy/db/migrate/20081023092436_create_search_engines.rb +6 -6
- data/spec/dummy/db/migrate/20081025083323_create_countries.rb +9 -10
- data/spec/dummy/db/migrate/20081025083905_create_languages.rb +6 -7
- data/spec/dummy/db/migrate/20081027150907_create_picture_files.rb +2 -2
- data/spec/dummy/db/migrate/20081028083142_create_agent_import_files.rb +1 -1
- data/spec/dummy/db/migrate/20081028083208_create_resource_import_files.rb +1 -1
- data/spec/dummy/db/migrate/20081028093607_create_event_import_files.rb +1 -1
- data/spec/dummy/db/migrate/20090519203307_create_participates.rb +3 -3
- data/spec/dummy/db/migrate/20090705133942_add_attachments_picture_to_picture_file.rb +1 -1
- data/spec/dummy/db/migrate/20090705212043_add_attachments_attachment_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20090720091106_create_medium_of_performances.rb +2 -2
- data/spec/dummy/db/migrate/20090720091429_create_content_types.rb +2 -2
- data/spec/dummy/db/migrate/20090812151902_create_agent_relationship_types.rb +2 -2
- data/spec/dummy/db/migrate/20091012101112_add_dcndl_schema.rb +1 -1
- data/spec/dummy/db/migrate/20091025080447_create_licenses.rb +2 -2
- data/spec/dummy/db/migrate/20091202124834_create_versions.rb +4 -4
- data/spec/dummy/db/migrate/20091214131723_create_series_statements.rb +1 -1
- data/spec/dummy/db/migrate/20100129142347_create_import_requests.rb +1 -1
- data/spec/dummy/db/migrate/20100211105551_add_admin_networks_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20100223121519_rename_series_statement_title_to_original_title.rb +1 -1
- data/spec/dummy/db/migrate/20100314190054_add_opening_hour_to_library.rb +1 -1
- data/spec/dummy/db/migrate/20100321235924_add_series_statement_identifier_to_series_statement.rb +1 -1
- data/spec/dummy/db/migrate/20100525124311_create_manifestation_relationships.rb +1 -1
- data/spec/dummy/db/migrate/20100606065209_create_user_has_roles.rb +1 -1
- data/spec/dummy/db/migrate/20100606073747_create_agent_relationships.rb +1 -1
- data/spec/dummy/db/migrate/20100607044753_create_manifestation_relationship_types.rb +2 -2
- data/spec/dummy/db/migrate/20100814091104_add_position_to_agent_relationship.rb +1 -1
- data/spec/dummy/db/migrate/20100925043847_create_resource_import_results.rb +1 -1
- data/spec/dummy/db/migrate/20100925074559_create_agent_import_results.rb +1 -1
- data/spec/dummy/db/migrate/20100925074639_create_event_import_results.rb +1 -1
- data/spec/dummy/db/migrate/20101212070145_add_acquired_at_to_item.rb +1 -1
- data/spec/dummy/db/migrate/20110222073537_add_url_to_library_group.rb +2 -2
- data/spec/dummy/db/migrate/20110301035123_add_pub_date_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20110301121550_add_birth_date_and_death_date_to_agent.rb +1 -1
- data/spec/dummy/db/migrate/20110318183304_add_valid_period_for_new_user_to_user_group.rb +2 -2
- data/spec/dummy/db/migrate/20110603184217_add_edit_mode_to_resource_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20110619064807_add_edition_string_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20110620173525_add_bookstore_id_to_item.rb +1 -1
- data/spec/dummy/db/migrate/20110627034940_create_series_statement_merge_lists.rb +1 -1
- data/spec/dummy/db/migrate/20110627035057_create_series_statement_merges.rb +3 -3
- data/spec/dummy/db/migrate/20110913115320_add_lft_and_rgt_to_message.rb +1 -1
- data/spec/dummy/db/migrate/20110916091020_add_volume_number_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20110916103953_add_manifestaiton_id_to_series_statement.rb +1 -1
- data/spec/dummy/db/migrate/20110918162329_add_note_to_series_statement.rb +1 -1
- data/spec/dummy/db/migrate/20111124110059_create_create_types.rb +1 -1
- data/spec/dummy/db/migrate/20111124110319_create_realize_types.rb +1 -1
- data/spec/dummy/db/migrate/20111124110355_create_produce_types.rb +1 -1
- data/spec/dummy/db/migrate/20111124112131_add_create_type_to_create.rb +1 -1
- data/spec/dummy/db/migrate/20120105074911_add_isil_to_library.rb +1 -1
- data/spec/dummy/db/migrate/20120125050502_add_depth_to_message.rb +1 -2
- data/spec/dummy/db/migrate/20120125152919_add_title_subseries_transcription_to_series_statement.rb +1 -2
- data/spec/dummy/db/migrate/20120129014038_create_budget_types.rb +1 -1
- data/spec/dummy/db/migrate/20120129020544_add_budget_type_id_to_item.rb +1 -2
- data/spec/dummy/db/migrate/20120319120638_add_content_type_id_to_manifestation.rb +2 -3
- data/spec/dummy/db/migrate/20120319173203_create_accepts.rb +1 -1
- data/spec/dummy/db/migrate/20120410104851_add_year_of_publication_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20120413051535_add_event_import_fingerprint_to_event_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20120413072700_add_picture_meta_to_picture_file.rb +1 -1
- data/spec/dummy/db/migrate/20120413100352_add_fingerprint_to_picture_file.rb +1 -1
- data/spec/dummy/db/migrate/20120413161340_add_fingerprint_to_resource_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20120413161403_add_fingerprint_to_agent_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20120413170705_add_error_message_to_resource_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20120413170720_add_error_message_to_agent_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20120413170734_add_error_message_to_event_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20120415060342_rename_event_import_file_imported_at_to_executed_at.rb +1 -1
- data/spec/dummy/db/migrate/20120415164821_add_attachment_meta_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20120418081407_add_month_of_publication_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20120510140958_add_closed_to_shelf.rb +2 -2
- data/spec/dummy/db/migrate/20120511072422_add_agent_identifier_to_agent.rb +1 -1
- data/spec/dummy/db/migrate/20120602141129_add_edit_mode_to_agent_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20121116031206_add_fulltext_content_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20130221154434_add_additional_attributes_to_user.rb +4 -4
- data/spec/dummy/db/migrate/20130412083556_add_latitude_and_longitude_to_library.rb +1 -1
- data/spec/dummy/db/migrate/20130421093852_add_periodical_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20130421155019_add_creator_string_to_series_statement.rb +1 -1
- data/spec/dummy/db/migrate/20130421164124_add_series_master_to_series_statement.rb +1 -1
- data/spec/dummy/db/migrate/20130429020822_add_root_manifestation_id_to_series_statement.rb +1 -1
- data/spec/dummy/db/migrate/20130506175303_create_identifier_types.rb +1 -1
- data/spec/dummy/db/migrate/20130506175834_create_identifiers.rb +3 -3
- data/spec/dummy/db/migrate/20130509185724_add_statement_of_responsibility_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20140110122216_create_user_import_files.rb +1 -1
- data/spec/dummy/db/migrate/20140110131010_create_user_import_results.rb +1 -1
- data/spec/dummy/db/migrate/20140122054321_create_profiles.rb +2 -2
- data/spec/dummy/db/migrate/20140518111006_create_message_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140518135713_create_message_request_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140519170214_create_resource_import_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140519171220_create_import_request_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140523171309_create_event_import_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140524020735_create_agent_import_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140524074813_create_user_import_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140610123439_drop_email_unique_constraint_enju_leaf_rc10.rb +1 -1
- data/spec/dummy/db/migrate/20140614065404_create_resource_export_files.rb +1 -1
- data/spec/dummy/db/migrate/20140614141500_create_resource_export_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140628071719_add_user_encoding_to_event_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140628072217_add_user_encoding_to_user_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140628073524_add_user_encoding_to_agent_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140628073535_add_user_encoding_to_resource_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140709113413_create_user_export_files.rb +1 -1
- data/spec/dummy/db/migrate/20140709113905_create_user_export_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140720140916_add_binding_item_identifier_to_item.rb +1 -1
- data/spec/dummy/db/migrate/20140720170714_add_default_library_id_to_user_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140720170735_add_default_user_group_id_to_user_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140720192418_add_default_library_id_to_event_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140721151416_add_default_shelf_id_to_resource_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140802082007_add_manifestation_id_to_item.rb +1 -1
- data/spec/dummy/db/migrate/20140811031145_add_expired_at_to_profile.rb +1 -1
- data/spec/dummy/db/migrate/20140812152348_create_event_export_files.rb +1 -1
- data/spec/dummy/db/migrate/20140812153137_create_event_export_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140813182425_add_publication_place_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20140814070854_add_default_event_category_id_to_event_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140821151023_create_colors.rb +1 -1
- data/spec/dummy/db/migrate/20140822114527_add_error_message_to_resource_import_result.rb +1 -1
- data/spec/dummy/db/migrate/20140823083524_add_extent_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20140823094847_add_dimensions_to_manifestation.rb +1 -1
- data/spec/dummy/db/migrate/20140823095740_rename_manifestation_periodical_to_serial.rb +1 -1
- data/spec/dummy/db/migrate/20141003181336_add_full_name_transcription_to_profile.rb +1 -1
- data/spec/dummy/db/migrate/20141003182825_add_date_of_birth_to_profile.rb +1 -1
- data/spec/dummy/db/migrate/20150117111136_add_foreign_key_to_items_referencing_manifestations.rb +1 -1
- data/spec/dummy/db/migrate/20150221063719_add_settings_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20150506105356_add_error_message_to_user_import_result.rb +1 -1
- data/spec/dummy/db/migrate/20150924115059_create_withdraws.rb +1 -1
- data/spec/dummy/db/migrate/20151125004028_add_profile_id_to_agent.rb +1 -1
- data/spec/dummy/db/migrate/20151213070943_add_translation_table_to_library_group.rb +5 -13
- data/spec/dummy/db/migrate/20151213072705_add_footer_banner_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20160610093229_add_html_snippet_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20160627232219_add_most_recent_to_user_import_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20160627232316_add_most_recent_to_user_export_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20160703185015_add_most_recent_to_message_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20160801080612_add_most_recent_to_import_request_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20160801080619_add_most_recent_to_resource_import_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20160801080637_add_most_recent_to_resource_export_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20160801080643_add_most_recent_to_agent_import_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20160811102604_add_picture_width_to_picture_file.rb +1 -1
- data/spec/dummy/db/migrate/20160813191647_add_max_number_of_results_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20160813191733_add_family_name_first_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20160813192542_add_pub_year_facet_range_interval_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20160813203039_add_user_id_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20160814165332_add_most_recent_to_message_request_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20160820004638_add_attachment_attachment_to_carrier_types.rb +1 -1
- data/spec/dummy/db/migrate/20170305064014_add_csv_charset_conversion_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20171014084528_add_header_logo_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20171119051258_set_not_null_to_manifestation_id_on_items.rb +1 -1
- data/spec/dummy/db/migrate/20171126133835_rename_login_banner_to_old_login_banner.rb +1 -1
- data/spec/dummy/db/migrate/20171126135238_add_foreign_key_to_library_group_id_on_library.rb +1 -1
- data/spec/dummy/db/migrate/20180102162311_add_header_logo_meta_to_library_group.rb +1 -1
- data/spec/dummy/db/migrate/20180107160726_add_constraints_to_most_recent_for_user_import_file_transitions.rb +2 -2
- data/spec/dummy/db/migrate/20180107160740_add_constraints_to_most_recent_for_user_export_file_transitions.rb +2 -2
- data/spec/dummy/db/migrate/20180107161311_add_constraints_to_most_recent_for_agent_import_file_transitions.rb +2 -2
- data/spec/dummy/db/migrate/20180107161331_add_constraints_to_most_recent_for_resource_import_file_transitions.rb +2 -2
- data/spec/dummy/db/migrate/20180107161347_add_constraints_to_most_recent_for_resource_export_file_transitions.rb +2 -2
- data/spec/dummy/db/migrate/20180107161410_add_constraints_to_most_recent_for_import_request_transitions.rb +2 -2
- data/spec/dummy/db/schema.rb +858 -936
- data/spec/factories/bookstore.rb +5 -0
- data/spec/factories/budget_types.rb +18 -0
- data/spec/factories/checkout.rb +1 -1
- data/spec/factories/item.rb +6 -4
- data/spec/factories/manifestation_checkout_stat.rb +4 -3
- data/spec/factories/manifestation_reserve_stat.rb +4 -3
- data/spec/factories/profile.rb +1 -1
- data/spec/factories/reserve.rb +2 -3
- data/spec/factories/user.rb +4 -4
- data/spec/factories/user_checkout_stat.rb +4 -3
- data/spec/factories/user_reserve_stat.rb +4 -3
- data/spec/fixtures/content_types.yml +98 -0
- data/spec/fixtures/frequencies.yml +68 -0
- data/spec/helpers/items_helper_spec.rb +1 -1
- data/spec/models/basket_spec.rb +1 -1
- data/spec/models/carrier_type_has_checkout_type_spec.rb +1 -1
- data/spec/models/checkin_spec.rb +3 -1
- data/spec/models/checkout_spec.rb +2 -2
- data/spec/models/checkout_stat_has_manifestation_spec.rb +1 -1
- data/spec/models/checkout_stat_has_user_spec.rb +1 -1
- data/spec/models/checkout_type_spec.rb +1 -1
- data/spec/models/circulation_status_spec.rb +1 -1
- data/spec/models/item_has_use_resetriction_spec.rb +1 -1
- data/spec/models/lending_policy_spec.rb +1 -1
- data/spec/models/reserve_spec.rb +1 -1
- data/spec/models/reserve_stat_has_manifestation_spec.rb +1 -1
- data/spec/models/reserve_stat_has_user_spec.rb +1 -1
- data/spec/models/use_resetriction_spec.rb +1 -1
- data/spec/models/user_spec.rb +2 -2
- data/spec/rails_helper.rb +1 -14
- data/spec/routing/checked_items_routing_spec.rb +7 -7
- data/spec/support/tasks.rb +30 -0
- data/spec/tasks/export_checkout_spec.rb +37 -0
- data/spec/views/checkout_types/edit.html.erb_spec.rb +8 -8
- data/spec/views/checkout_types/index.html.erb_spec.rb +9 -9
- data/spec/views/checkout_types/new.html.erb_spec.rb +8 -8
- data/spec/views/checkout_types/show.html.erb_spec.rb +4 -4
- data/spec/views/checkouts/show.html.erb_spec.rb +2 -2
- data/spec/views/reserves/index.html.erb_spec.rb +5 -5
- data/spec/views/use_restrictions/edit.html.erb_spec.rb +8 -8
- data/spec/views/use_restrictions/index.html.erb_spec.rb +9 -9
- data/spec/views/use_restrictions/new.html.erb_spec.rb +8 -8
- data/spec/views/use_restrictions/show.html.erb_spec.rb +4 -4
- metadata +80 -61
- data/app/views/checkouts/index.txt.erb +0 -4
data/app/models/checkout.rb
CHANGED
@@ -6,20 +6,20 @@ class Checkout < ActiveRecord::Base
|
|
6
6
|
scope :completed, lambda {|start_date, end_date| where('checkouts.created_at >= ? AND checkouts.created_at < ?', start_date, end_date)}
|
7
7
|
scope :on, lambda {|date| where('created_at >= ? AND created_at < ?', date.beginning_of_day, date.tomorrow.beginning_of_day)}
|
8
8
|
|
9
|
-
belongs_to :user
|
9
|
+
belongs_to :user, optional: true
|
10
10
|
delegate :username, :user_number, to: :user, prefix: true
|
11
11
|
belongs_to :item, touch: true
|
12
|
-
belongs_to :checkin
|
12
|
+
belongs_to :checkin, optional: true
|
13
13
|
belongs_to :librarian, class_name: 'User'
|
14
14
|
belongs_to :basket
|
15
|
-
belongs_to :shelf
|
16
|
-
belongs_to :library
|
15
|
+
belongs_to :shelf, optional: true
|
16
|
+
belongs_to :library, optional: true
|
17
17
|
|
18
|
-
validates_associated :user, :item, :librarian, :checkin
|
18
|
+
validates_associated :user, :item, :librarian, :checkin # , :basket
|
19
19
|
# TODO: 貸出履歴を保存しない場合は、ユーザ名を削除する
|
20
|
-
#validates_presence_of :user, :item, :basket
|
21
|
-
|
22
|
-
|
20
|
+
# validates_presence_of :user, :item, :basket
|
21
|
+
validates :item_id, :basket_id, :due_date, presence: true
|
22
|
+
validates :item_id, uniqueness: { scope: [:basket_id, :user_id] }
|
23
23
|
validate :is_not_checked?, on: :create
|
24
24
|
validate :renewable?, on: :update
|
25
25
|
validates_date :due_date
|
@@ -59,13 +59,13 @@ class Checkout < ActiveRecord::Base
|
|
59
59
|
def renewable?
|
60
60
|
return nil if checkin
|
61
61
|
messages = []
|
62
|
-
if !operator
|
62
|
+
if !operator && overdue?
|
63
63
|
messages << I18n.t('checkout.you_have_overdue_item')
|
64
64
|
end
|
65
|
-
if !operator
|
65
|
+
if !operator && reserved?
|
66
66
|
messages << I18n.t('checkout.this_item_is_reserved')
|
67
67
|
end
|
68
|
-
if !operator
|
68
|
+
if !operator && over_checkout_renewal_limit?
|
69
69
|
messages << I18n.t('checkout.excessed_renewal_limit')
|
70
70
|
end
|
71
71
|
if messages.empty?
|
@@ -121,10 +121,10 @@ class Checkout < ActiveRecord::Base
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def self.manifestations_count(start_date, end_date, manifestation)
|
124
|
-
|
125
|
-
|
124
|
+
where(
|
125
|
+
arel_table[:created_at].gteq start_date
|
126
126
|
).where(
|
127
|
-
|
127
|
+
arel_table[:created_at].lt end_date
|
128
128
|
)
|
129
129
|
.where(
|
130
130
|
item_id: manifestation.items.pluck('items.id')
|
@@ -1,11 +1,11 @@
|
|
1
1
|
class CheckoutStatHasManifestation < ActiveRecord::Base
|
2
|
-
#attr_accessible :manifestation_checkout_stat_id, :manifestation_id,
|
2
|
+
# attr_accessible :manifestation_checkout_stat_id, :manifestation_id,
|
3
3
|
# as: :admin
|
4
4
|
belongs_to :manifestation_checkout_stat
|
5
5
|
belongs_to :manifestation
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
validates :manifestation_id, uniqueness: { scope: :manifestation_checkout_stat_id }
|
8
|
+
validates :manifestation_checkout_stat_id, :manifestation_id, presence: true
|
9
9
|
|
10
10
|
paginates_per 10
|
11
11
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
class CheckoutStatHasUser < ActiveRecord::Base
|
2
|
-
#attr_accessible :user_checkout_stat_id, :user_id,
|
2
|
+
# attr_accessible :user_checkout_stat_id, :user_id,
|
3
3
|
# as: :admin
|
4
4
|
belongs_to :user_checkout_stat
|
5
5
|
belongs_to :user
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
validates :user_id, uniqueness: { scope: :user_checkout_stat_id }
|
8
|
+
validates :user_checkout_stat_id, :user_id, presence: true
|
9
9
|
|
10
10
|
paginates_per 10
|
11
11
|
end
|
data/app/models/checkout_type.rb
CHANGED
@@ -7,8 +7,8 @@ class CheckoutType < ActiveRecord::Base
|
|
7
7
|
has_many :user_groups, through: :user_group_has_checkout_types
|
8
8
|
has_many :carrier_type_has_checkout_types, dependent: :destroy
|
9
9
|
has_many :carrier_types, through: :carrier_type_has_checkout_types
|
10
|
-
#has_many :item_has_checkout_types, dependent: :destroy
|
11
|
-
#has_many :items, through: :item_has_checkout_types
|
10
|
+
# has_many :item_has_checkout_types, dependent: :destroy
|
11
|
+
# has_many :items, through: :item_has_checkout_types
|
12
12
|
has_many :items
|
13
13
|
|
14
14
|
paginates_per 10
|
@@ -31,14 +31,14 @@ module EnjuCirculation
|
|
31
31
|
has_many :checkouts
|
32
32
|
has_many :reserves
|
33
33
|
has_many :checked_items
|
34
|
-
has_many :baskets, :
|
35
|
-
belongs_to :circulation_status, :
|
34
|
+
has_many :baskets, through: :checked_items
|
35
|
+
belongs_to :circulation_status, validate: true
|
36
36
|
belongs_to :checkout_type
|
37
|
-
has_many :lending_policies, :
|
38
|
-
has_one :item_has_use_restriction, :
|
39
|
-
has_one :use_restriction, :
|
37
|
+
has_many :lending_policies, dependent: :destroy
|
38
|
+
has_one :item_has_use_restriction, dependent: :destroy
|
39
|
+
has_one :use_restriction, through: :item_has_use_restriction
|
40
40
|
validates_associated :circulation_status, :checkout_type
|
41
|
-
|
41
|
+
validates :circulation_status, :checkout_type, presence: true
|
42
42
|
searchable do
|
43
43
|
string :circulation_status do
|
44
44
|
circulation_status.name
|
@@ -50,12 +50,12 @@ module EnjuCirculation
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def set_circulation_status
|
53
|
-
self.circulation_status = CirculationStatus.
|
53
|
+
self.circulation_status = CirculationStatus.find_by(name: 'In Process') if circulation_status.nil?
|
54
54
|
end
|
55
55
|
|
56
56
|
def checkout_status(user)
|
57
57
|
return nil unless user
|
58
|
-
user.profile.user_group.user_group_has_checkout_types.
|
58
|
+
user.profile.user_group.user_group_has_checkout_types.find_by(checkout_type_id: checkout_type.id)
|
59
59
|
end
|
60
60
|
|
61
61
|
def reserved?
|
@@ -64,7 +64,7 @@ module EnjuCirculation
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def rent?
|
67
|
-
return true if
|
67
|
+
return true if checkouts.not_returned.select(:item_id).detect{|checkout| checkout.item_id == id}
|
68
68
|
false
|
69
69
|
end
|
70
70
|
|
@@ -84,17 +84,17 @@ module EnjuCirculation
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def checkout!(user)
|
87
|
-
self.circulation_status = CirculationStatus.where(name: 'On Loan').first
|
88
87
|
if reserved_by_user?(user)
|
89
|
-
manifestation.next_reservation.
|
88
|
+
manifestation.next_reservation.update(checked_out_at: Time.zone.now)
|
90
89
|
manifestation.next_reservation.transition_to!(:completed)
|
90
|
+
manifestation.reload
|
91
91
|
end
|
92
|
-
|
92
|
+
update!(circulation_status: CirculationStatus.find_by(name: 'On Loan'))
|
93
93
|
end
|
94
94
|
|
95
95
|
def checkin!
|
96
|
-
self.circulation_status = CirculationStatus.
|
97
|
-
save
|
96
|
+
self.circulation_status = CirculationStatus.find_by(name: 'Available On Shelf')
|
97
|
+
save!
|
98
98
|
end
|
99
99
|
|
100
100
|
def retain(librarian)
|
@@ -118,7 +118,7 @@ module EnjuCirculation
|
|
118
118
|
end
|
119
119
|
|
120
120
|
def lending_rule(user)
|
121
|
-
policy = lending_policies.
|
121
|
+
policy = lending_policies.find_by(user_group_id: user.profile.user_group.id)
|
122
122
|
if policy
|
123
123
|
policy
|
124
124
|
else
|
@@ -131,7 +131,7 @@ module EnjuCirculation
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def create_lending_policy(user)
|
134
|
-
rule = user.profile.user_group.user_group_has_checkout_types.
|
134
|
+
rule = user.profile.user_group.user_group_has_checkout_types.find_by(checkout_type_id: checkout_type_id)
|
135
135
|
return nil unless rule
|
136
136
|
LendingPolicy.create!(
|
137
137
|
item_id: id,
|
@@ -148,7 +148,7 @@ module EnjuCirculation
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def next_reservation
|
151
|
-
Reserve.waiting.
|
151
|
+
Reserve.waiting.find_by(item_id: id)
|
152
152
|
end
|
153
153
|
|
154
154
|
def latest_checkout
|
@@ -3,7 +3,7 @@ module EnjuCirculation
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
has_many :reserves, :
|
6
|
+
has_many :reserves, foreign_key: :manifestation_id
|
7
7
|
|
8
8
|
searchable do
|
9
9
|
boolean :reservable do
|
@@ -13,12 +13,12 @@ module EnjuCirculation
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def next_reservation
|
16
|
-
|
16
|
+
reserves.waiting.order('reserves.created_at ASC').readonly(false).first
|
17
17
|
end
|
18
18
|
|
19
19
|
def available_checkout_types(user)
|
20
20
|
if user
|
21
|
-
user.profile.user_group.user_group_has_checkout_types.available_for_carrier_type(
|
21
|
+
user.profile.user_group.user_group_has_checkout_types.available_for_carrier_type(carrier_type)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -34,7 +34,7 @@ module EnjuCirculation
|
|
34
34
|
|
35
35
|
def is_reserved_by?(user)
|
36
36
|
return nil unless user
|
37
|
-
reserve = Reserve.waiting.where(:
|
37
|
+
reserve = Reserve.waiting.where(user_id: user.id, manifestation_id: id).first
|
38
38
|
if reserve
|
39
39
|
reserve
|
40
40
|
else
|
@@ -43,7 +43,7 @@ module EnjuCirculation
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def is_reserved?
|
46
|
-
if
|
46
|
+
if reserves.present?
|
47
47
|
true
|
48
48
|
else
|
49
49
|
false
|
@@ -51,7 +51,7 @@ module EnjuCirculation
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def checkouts(start_date, end_date)
|
54
|
-
Checkout.completed(start_date, end_date).where(:
|
54
|
+
Checkout.completed(start_date, end_date).where(item_id: items.collect(&:id))
|
55
55
|
end
|
56
56
|
|
57
57
|
def checkout_period(user)
|
@@ -3,14 +3,14 @@ module EnjuCirculation
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
has_many :checkouts, :
|
7
|
-
has_many :reserves, :
|
8
|
-
has_many :reserved_manifestations, :
|
6
|
+
has_many :checkouts, dependent: :nullify
|
7
|
+
has_many :reserves, dependent: :destroy
|
8
|
+
has_many :reserved_manifestations, through: :reserves, source: :manifestation
|
9
9
|
has_many :checkout_stat_has_users
|
10
|
-
has_many :user_checkout_stats, :
|
10
|
+
has_many :user_checkout_stats, through: :checkout_stat_has_users
|
11
11
|
has_many :reserve_stat_has_users
|
12
|
-
has_many :user_reserve_stats, :
|
13
|
-
has_many :baskets, :
|
12
|
+
has_many :user_reserve_stats, through: :reserve_stat_has_users
|
13
|
+
has_many :baskets, dependent: :destroy
|
14
14
|
|
15
15
|
before_destroy :check_item_before_destroy
|
16
16
|
end
|
@@ -26,20 +26,20 @@ module EnjuCirculation
|
|
26
26
|
checkout_count = {}
|
27
27
|
CheckoutType.all.each do |checkout_type|
|
28
28
|
# 資料種別ごとの貸出中の冊数を計算
|
29
|
-
checkout_count[:"#{checkout_type.name}"] =
|
29
|
+
checkout_count[:"#{checkout_type.name}"] = checkouts.count_by_sql(["
|
30
30
|
SELECT count(item_id) FROM checkouts
|
31
31
|
WHERE item_id IN (
|
32
32
|
SELECT id FROM items
|
33
33
|
WHERE checkout_type_id = ?
|
34
34
|
)
|
35
|
-
AND user_id = ? AND checkin_id IS NULL", checkout_type.id,
|
35
|
+
AND user_id = ? AND checkin_id IS NULL", checkout_type.id, id]
|
36
36
|
)
|
37
37
|
end
|
38
38
|
checkout_count
|
39
39
|
end
|
40
40
|
|
41
41
|
def reached_reservation_limit?(manifestation)
|
42
|
-
return true if profile.user_group.user_group_has_checkout_types.available_for_carrier_type(manifestation.carrier_type).where(:
|
42
|
+
return true if profile.user_group.user_group_has_checkout_types.available_for_carrier_type(manifestation.carrier_type).where(user_group_id: profile.user_group.id).collect(&:reservation_limit).max.to_i <= reserves.waiting.size
|
43
43
|
false
|
44
44
|
end
|
45
45
|
|
@@ -6,12 +6,12 @@ module EnjuCirculation
|
|
6
6
|
has_many :user_group_has_checkout_types, dependent: :destroy
|
7
7
|
has_many :checkout_types, through: :user_group_has_checkout_types
|
8
8
|
has_many :lending_policies
|
9
|
-
accepts_nested_attributes_for :user_group_has_checkout_types, :
|
9
|
+
accepts_nested_attributes_for :user_group_has_checkout_types, allow_destroy: true, reject_if: :all_blank
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
validates :number_of_day_to_notify_due_date,
|
12
|
+
:number_of_day_to_notify_overdue,
|
13
|
+
:number_of_time_to_notify_overdue,
|
14
|
+
numericality: { greater_than_or_equal_to: 0 }
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -4,8 +4,8 @@ class ItemHasUseRestriction < ActiveRecord::Base
|
|
4
4
|
accepts_nested_attributes_for :use_restriction
|
5
5
|
|
6
6
|
validates_associated :item, :use_restriction
|
7
|
-
|
8
|
-
|
7
|
+
validates :use_restriction, presence: true
|
8
|
+
validates :item, presence: { on: :update }
|
9
9
|
|
10
10
|
paginates_per 10
|
11
11
|
end
|
@@ -3,8 +3,8 @@ class LendingPolicy < ActiveRecord::Base
|
|
3
3
|
belongs_to :item
|
4
4
|
belongs_to :user_group
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
validates :item, :user_group, presence: true
|
7
|
+
validates :user_group_id, uniqueness: { scope: :item_id }
|
8
8
|
validates_date :fixed_due_date, allow_blank: true
|
9
9
|
|
10
10
|
paginates_per 10
|
@@ -17,15 +17,15 @@ class ManifestationCheckoutStat < ActiveRecord::Base
|
|
17
17
|
end
|
18
18
|
|
19
19
|
delegate :can_transition_to?, :transition_to!, :transition_to, :current_state,
|
20
|
-
|
20
|
+
to: :state_machine
|
21
21
|
|
22
22
|
def calculate_count!
|
23
23
|
self.started_at = Time.zone.now
|
24
24
|
Manifestation.find_each do |manifestation|
|
25
25
|
daily_count = Checkout.manifestations_count(start_date.beginning_of_day, end_date.tomorrow.beginning_of_day, manifestation)
|
26
|
-
#manifestation.update_attributes({daily_checkouts_count: daily_count, total_count: manifestation.total_count + daily_count})
|
26
|
+
# manifestation.update_attributes({daily_checkouts_count: daily_count, total_count: manifestation.total_count + daily_count})
|
27
27
|
if daily_count > 0
|
28
|
-
|
28
|
+
manifestations << manifestation
|
29
29
|
sql = ['UPDATE checkout_stat_has_manifestations SET checkouts_count = ? WHERE manifestation_checkout_stat_id = ? AND manifestation_id = ?', daily_count, id, manifestation.id]
|
30
30
|
ManifestationCheckoutStat.connection.execute(
|
31
31
|
self.class.send(:sanitize_sql_array, sql)
|
@@ -38,6 +38,7 @@ class ManifestationCheckoutStat < ActiveRecord::Base
|
|
38
38
|
end
|
39
39
|
|
40
40
|
private
|
41
|
+
|
41
42
|
def self.transition_class
|
42
43
|
ManifestationCheckoutStatTransition
|
43
44
|
end
|
@@ -2,8 +2,8 @@ class ManifestationCheckoutStatTransition < ActiveRecord::Base
|
|
2
2
|
include Statesman::Adapters::ActiveRecordTransition
|
3
3
|
|
4
4
|
|
5
|
-
belongs_to :
|
6
|
-
#attr_accessible :to_state, :sort_key, :metadata
|
5
|
+
belongs_to :manifestation_checkout_stat, inverse_of: :manifestation_checkout_stat_transitions
|
6
|
+
# attr_accessible :to_state, :sort_key, :metadata
|
7
7
|
end
|
8
8
|
|
9
9
|
# == Schema Information
|
@@ -17,15 +17,15 @@ class ManifestationReserveStat < ActiveRecord::Base
|
|
17
17
|
end
|
18
18
|
|
19
19
|
delegate :can_transition_to?, :transition_to!, :transition_to, :current_state,
|
20
|
-
|
20
|
+
to: :state_machine
|
21
21
|
|
22
22
|
def calculate_count!
|
23
23
|
self.started_at = Time.zone.now
|
24
24
|
Manifestation.find_each do |manifestation|
|
25
25
|
daily_count = manifestation.reserves.created(start_date.beginning_of_day, end_date.tomorrow.beginning_of_day).size
|
26
|
-
#manifestation.update_attributes({daily_reserves_count: daily_count, total_count: manifestation.total_count + daily_count})
|
26
|
+
# manifestation.update_attributes({daily_reserves_count: daily_count, total_count: manifestation.total_count + daily_count})
|
27
27
|
if daily_count > 0
|
28
|
-
|
28
|
+
manifestations << manifestation
|
29
29
|
sql = ['UPDATE reserve_stat_has_manifestations SET reserves_count = ? WHERE manifestation_reserve_stat_id = ? AND manifestation_id = ?', daily_count, id, manifestation.id]
|
30
30
|
ManifestationReserveStat.connection.execute(
|
31
31
|
self.class.send(:sanitize_sql_array, sql)
|
@@ -38,6 +38,7 @@ class ManifestationReserveStat < ActiveRecord::Base
|
|
38
38
|
end
|
39
39
|
|
40
40
|
private
|
41
|
+
|
41
42
|
def self.transition_class
|
42
43
|
ManifestationReserveStatTransition
|
43
44
|
end
|
@@ -3,7 +3,7 @@ class ManifestationReserveStatTransition < ActiveRecord::Base
|
|
3
3
|
|
4
4
|
|
5
5
|
belongs_to :manifestation_reserve_stat, inverse_of: :manifestation_reserve_stat_transitions
|
6
|
-
#attr_accessible :to_state, :sort_key, :metadata
|
6
|
+
# attr_accessible :to_state, :sort_key, :metadata
|
7
7
|
end
|
8
8
|
|
9
9
|
# == Schema Information
|
data/app/models/reserve.rb
CHANGED
@@ -18,32 +18,32 @@ class Reserve < ActiveRecord::Base
|
|
18
18
|
scope :not_sent_cancel_notice_to_library, -> {in_state(:canceled).where(expiration_notice_to_library: false)}
|
19
19
|
belongs_to :user
|
20
20
|
belongs_to :manifestation, touch: true
|
21
|
-
belongs_to :librarian, class_name: 'User'
|
22
|
-
belongs_to :item, touch: true
|
21
|
+
belongs_to :librarian, class_name: 'User', optional: true
|
22
|
+
belongs_to :item, touch: true, optional: true
|
23
23
|
belongs_to :request_status_type
|
24
|
-
belongs_to :pickup_location, :
|
24
|
+
belongs_to :pickup_location, class_name: 'Library', optional: true
|
25
25
|
|
26
26
|
validates_associated :user, :librarian, :request_status_type
|
27
|
-
validates :manifestation, associated: true
|
28
|
-
|
27
|
+
validates :manifestation, associated: true # , on: :create
|
28
|
+
validates :user, :request_status_type, presence: true
|
29
29
|
validates :manifestation, presence: true, unless: Proc.new{|reserve|
|
30
30
|
reserve.completed?
|
31
31
|
}
|
32
|
-
#validates_uniqueness_of :manifestation_id, scope: :user_id
|
32
|
+
# validates_uniqueness_of :manifestation_id, scope: :user_id
|
33
33
|
validates_date :expired_at, allow_blank: true
|
34
34
|
validate :manifestation_must_include_item
|
35
35
|
validate :available_for_reservation?, on: :create
|
36
36
|
validates :item_id, presence: true, if: Proc.new{|reserve|
|
37
37
|
if item_id_changed?
|
38
|
-
if reserve.completed?
|
39
|
-
|
40
|
-
|
41
|
-
else
|
42
|
-
unless item_id_change[1]
|
43
|
-
false
|
44
|
-
else
|
38
|
+
if reserve.completed? || reserve.retained?
|
39
|
+
if item_id_change[0]
|
40
|
+
if item_id_change[1]
|
45
41
|
true
|
42
|
+
else
|
43
|
+
false
|
46
44
|
end
|
45
|
+
else
|
46
|
+
false
|
47
47
|
end
|
48
48
|
end
|
49
49
|
else
|
@@ -77,7 +77,7 @@ class Reserve < ActiveRecord::Base
|
|
77
77
|
has_many :reserve_transitions, autosave: false
|
78
78
|
|
79
79
|
delegate :can_transition_to?, :transition_to!, :transition_to, :current_state,
|
80
|
-
|
80
|
+
to: :state_machine
|
81
81
|
|
82
82
|
searchable do
|
83
83
|
text :username do
|
@@ -97,7 +97,7 @@ class Reserve < ActiveRecord::Base
|
|
97
97
|
manifestation.try(:titles)
|
98
98
|
end
|
99
99
|
boolean :hold do |reserve|
|
100
|
-
|
100
|
+
hold.include?(reserve)
|
101
101
|
end
|
102
102
|
string :state do
|
103
103
|
current_state
|
@@ -136,7 +136,7 @@ class Reserve < ActiveRecord::Base
|
|
136
136
|
|
137
137
|
def retained_by_other_user?
|
138
138
|
return nil if force_retaining == '1'
|
139
|
-
if item
|
139
|
+
if item && !retained?
|
140
140
|
if Reserve.retained.where(item_id: item.item_identifier).count > 0
|
141
141
|
errors[:base] << I18n.t('reserve.attempt_to_update_retained_reservation')
|
142
142
|
end
|
@@ -148,7 +148,7 @@ class Reserve < ActiveRecord::Base
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def check_expired_at
|
151
|
-
if canceled_at.blank?
|
151
|
+
if canceled_at.blank? && expired_at?
|
152
152
|
if !completed?
|
153
153
|
if expired_at.beginning_of_day < Time.zone.now
|
154
154
|
errors[:base] << I18n.t('reserve.invalid_date')
|
@@ -164,64 +164,64 @@ class Reserve < ActiveRecord::Base
|
|
164
164
|
end
|
165
165
|
|
166
166
|
def send_message(sender = nil)
|
167
|
-
sender
|
167
|
+
sender ||= User.find(1) # TODO: システムからのメッセージの発信者
|
168
168
|
Reserve.transaction do
|
169
169
|
case current_state
|
170
170
|
when 'requested'
|
171
171
|
message_template_to_patron = MessageTemplate.localized_template('reservation_accepted_for_patron', user.profile.locale)
|
172
172
|
request = MessageRequest.new
|
173
|
-
request.assign_attributes(
|
173
|
+
request.assign_attributes(sender: sender, receiver: user, message_template: message_template_to_patron)
|
174
174
|
request.save_message_body(manifestations: Array[manifestation], user: user)
|
175
175
|
request.transition_to!(:sent) # 受付時は即時送信
|
176
176
|
message_template_to_library = MessageTemplate.localized_template('reservation_accepted_for_library', user.profile.locale)
|
177
177
|
request = MessageRequest.new
|
178
|
-
request.assign_attributes(
|
178
|
+
request.assign_attributes(sender: sender, receiver: sender, message_template: message_template_to_library)
|
179
179
|
request.save_message_body(manifestations: Array[manifestation], user: user)
|
180
180
|
request.transition_to!(:sent) # 受付時は即時送信
|
181
181
|
when 'canceled'
|
182
182
|
message_template_to_patron = MessageTemplate.localized_template('reservation_canceled_for_patron', user.profile.locale)
|
183
183
|
request = MessageRequest.new
|
184
|
-
request.assign_attributes(
|
184
|
+
request.assign_attributes(sender: sender, receiver: user, message_template: message_template_to_patron)
|
185
185
|
request.save_message_body(manifestations: Array[manifestation], user: user)
|
186
186
|
request.transition_to!(:sent) # キャンセル時は即時送信
|
187
187
|
message_template_to_library = MessageTemplate.localized_template('reservation_canceled_for_library', user.profile.locale)
|
188
188
|
request = MessageRequest.new
|
189
|
-
request.assign_attributes(
|
189
|
+
request.assign_attributes(sender: sender, receiver: sender, message_template: message_template_to_library)
|
190
190
|
request.save_message_body(manifestations: Array[manifestation], user: user)
|
191
191
|
request.transition_to!(:sent) # キャンセル時は即時送信
|
192
192
|
when 'expired'
|
193
193
|
message_template_to_patron = MessageTemplate.localized_template('reservation_expired_for_patron', user.profile.locale)
|
194
194
|
request = MessageRequest.new
|
195
|
-
request.assign_attributes(
|
195
|
+
request.assign_attributes(sender: sender, receiver: user, message_template: message_template_to_patron)
|
196
196
|
request.save_message_body(manifestations: Array[manifestation], user: user)
|
197
197
|
request.transition_to!(:sent)
|
198
198
|
reload
|
199
|
-
|
199
|
+
update_attribute(:expiration_notice_to_patron, true)
|
200
200
|
message_template_to_library = MessageTemplate.localized_template('reservation_expired_for_library', sender.profile.locale)
|
201
201
|
request = MessageRequest.new
|
202
|
-
request.assign_attributes(
|
202
|
+
request.assign_attributes(sender: sender, receiver: sender, message_template: message_template_to_library)
|
203
203
|
request.save_message_body(manifestations: Array[manifestation], user: sender)
|
204
204
|
request.transition_to!(:sent)
|
205
205
|
when 'retained'
|
206
206
|
message_template_for_patron = MessageTemplate.localized_template('item_received_for_patron', user.profile.locale)
|
207
207
|
request = MessageRequest.new
|
208
|
-
request.assign_attributes(
|
208
|
+
request.assign_attributes(sender: sender, receiver: user, message_template: message_template_for_patron)
|
209
209
|
request.save_message_body(manifestations: Array[item.manifestation], user: user)
|
210
210
|
request.transition_to!(:sent)
|
211
211
|
message_template_for_library = MessageTemplate.localized_template('item_received_for_library', user.profile.locale)
|
212
212
|
request = MessageRequest.new
|
213
|
-
request.assign_attributes(
|
213
|
+
request.assign_attributes(sender: sender, receiver: sender, message_template: message_template_for_library)
|
214
214
|
request.save_message_body(manifestations: Array[item.manifestation], user: user)
|
215
215
|
request.transition_to!(:sent)
|
216
216
|
when 'postponed'
|
217
217
|
message_template_for_patron = MessageTemplate.localized_template('reservation_postponed_for_patron', user.profile.locale)
|
218
218
|
request = MessageRequest.new
|
219
|
-
request.assign_attributes(
|
219
|
+
request.assign_attributes(sender: sender, receiver: user, message_template: message_template_for_patron)
|
220
220
|
request.save_message_body(manifestations: Array[manifestation], user: user)
|
221
221
|
request.transition_to!(:sent)
|
222
222
|
message_template_for_library = MessageTemplate.localized_template('reservation_postponed_for_library', user.profile.locale)
|
223
223
|
request = MessageRequest.new
|
224
|
-
request.assign_attributes(
|
224
|
+
request.assign_attributes(sender: sender, receiver: sender, message_template: message_template_for_library)
|
225
225
|
request.save_message_body(manifestations: Array[manifestation], user: user)
|
226
226
|
request.transition_to!(:sent)
|
227
227
|
else
|
@@ -236,13 +236,13 @@ class Reserve < ActiveRecord::Base
|
|
236
236
|
when 'expired'
|
237
237
|
message_template_to_library = MessageTemplate.localized_template('reservation_expired_for_library', sender.profile.locale)
|
238
238
|
request = MessageRequest.new
|
239
|
-
request.assign_attributes(
|
239
|
+
request.assign_attributes(sender: sender, receiver: sender, message_template: message_template_to_library)
|
240
240
|
request.save_message_body(manifestations: options[:manifestations])
|
241
|
-
|
241
|
+
not_sent_expiration_notice_to_library.readonly(false).each do |reserve|
|
242
242
|
reserve.expiration_notice_to_library = true
|
243
243
|
reserve.save(validate: false)
|
244
244
|
end
|
245
|
-
#when 'canceled'
|
245
|
+
# when 'canceled'
|
246
246
|
# message_template_to_library = MessageTemplate.localized_template('reservation_canceled_for_library', sender.locale)
|
247
247
|
# request = MessageRequest.new
|
248
248
|
# request.assign_attributes({sender: sender, receiver: sender, message_template: message_template_to_library})
|
@@ -257,8 +257,8 @@ class Reserve < ActiveRecord::Base
|
|
257
257
|
|
258
258
|
def self.expire
|
259
259
|
Reserve.transaction do
|
260
|
-
|
261
|
-
|
260
|
+
will_expire_retained(Time.zone.now.beginning_of_day).readonly(false).map{|r| r.transition_to!(:expired)}
|
261
|
+
will_expire_pending(Time.zone.now.beginning_of_day).readonly(false).map{|r| r.transition_to!(:expired)}
|
262
262
|
|
263
263
|
# キューに登録した時点では本文は作られないので
|
264
264
|
# 予約の連絡をすませたかどうかを識別できるようにしなければならない
|
@@ -272,12 +272,12 @@ class Reserve < ActiveRecord::Base
|
|
272
272
|
Reserve.send_message_to_library('expired', manifestations: Reserve.not_sent_expiration_notice_to_library.collect(&:manifestation))
|
273
273
|
end
|
274
274
|
end
|
275
|
-
#rescue
|
275
|
+
# rescue
|
276
276
|
# logger.info "#{Time.zone.now} expiring reservations failed!"
|
277
277
|
end
|
278
278
|
|
279
279
|
def checked_out_now?
|
280
|
-
if user
|
280
|
+
if user && manifestation
|
281
281
|
true if !(user.checkouts.not_returned.pluck(:item_id) & manifestation.items.pluck('items.id')).empty?
|
282
282
|
end
|
283
283
|
end
|
@@ -312,14 +312,15 @@ class Reserve < ActiveRecord::Base
|
|
312
312
|
end
|
313
313
|
|
314
314
|
private
|
315
|
+
|
315
316
|
def do_request
|
316
|
-
|
317
|
+
assign_attributes(request_status_type: RequestStatusType.where(name: 'In Process').first, item_id: nil, retained_at: nil)
|
317
318
|
save!
|
318
319
|
end
|
319
320
|
|
320
321
|
def retain
|
321
322
|
# TODO: 「取り置き中」の状態を正しく表す
|
322
|
-
|
323
|
+
assign_attributes(request_status_type: RequestStatusType.where(name: 'In Process').first, retained_at: Time.zone.now)
|
323
324
|
Reserve.transaction do
|
324
325
|
item.next_reservation.try(:transition_to!, :postponed)
|
325
326
|
save!
|
@@ -328,7 +329,7 @@ class Reserve < ActiveRecord::Base
|
|
328
329
|
|
329
330
|
def expire
|
330
331
|
Reserve.transaction do
|
331
|
-
|
332
|
+
assign_attributes(request_status_type: RequestStatusType.where(name: 'Expired').first, canceled_at: Time.zone.now)
|
332
333
|
reserve = next_reservation
|
333
334
|
if reserve
|
334
335
|
reserve.item = item
|
@@ -337,12 +338,12 @@ class Reserve < ActiveRecord::Base
|
|
337
338
|
reserve.transition_to!(:retained)
|
338
339
|
end
|
339
340
|
end
|
340
|
-
logger.info "#{Time.zone.now} reserve_id #{
|
341
|
+
logger.info "#{Time.zone.now} reserve_id #{id} expired!"
|
341
342
|
end
|
342
343
|
|
343
344
|
def cancel
|
344
345
|
Reserve.transaction do
|
345
|
-
|
346
|
+
assign_attributes(request_status_type: RequestStatusType.where(name: 'Cannot Fulfill Request').first, canceled_at: Time.zone.now)
|
346
347
|
save!
|
347
348
|
reserve = next_reservation
|
348
349
|
if reserve
|
@@ -355,22 +356,22 @@ class Reserve < ActiveRecord::Base
|
|
355
356
|
end
|
356
357
|
|
357
358
|
def checkout
|
358
|
-
|
359
|
+
assign_attributes(request_status_type: RequestStatusType.where(name: 'Available For Pickup').first, checked_out_at: Time.zone.now)
|
359
360
|
save!
|
360
361
|
end
|
361
362
|
|
362
363
|
def postpone
|
363
|
-
|
364
|
+
assign_attributes(
|
364
365
|
request_status_type: RequestStatusType.where(name: 'In Process').first,
|
365
366
|
item_id: nil,
|
366
367
|
retained_at: nil,
|
367
368
|
postponed_at: Time.zone.now
|
368
|
-
|
369
|
+
)
|
369
370
|
save!
|
370
371
|
end
|
371
372
|
|
372
373
|
def manifestation_must_include_item
|
373
|
-
if item_id.present?
|
374
|
+
if item_id.present? && !completed?
|
374
375
|
errors[:base] << I18n.t('reserve.invalid_item') unless manifestation.items.include?(item)
|
375
376
|
end
|
376
377
|
end
|