spree_cm_commissioner 1.10.0.pre.pre1 → 1.10.0.pre.hotfix.pre.sms

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test_and_build_gem.yml +48 -26
  3. data/.gitignore +1 -2
  4. data/.vscode/settings.json +1 -1
  5. data/Gemfile.lock +1 -22
  6. data/app/controllers/spree/admin/cms_pages_controller_decorator.rb +32 -0
  7. data/app/controllers/spree/admin/stock_managements_controller.rb +1 -17
  8. data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +31 -14
  9. data/app/controllers/spree/api/v2/tenant/account_checker_controller.rb +1 -1
  10. data/app/controllers/spree/api/v2/tenant/account_recovers_controller.rb +2 -2
  11. data/app/controllers/spree/api/v2/tenant/cms_pages_controller.rb +41 -0
  12. data/app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb +1 -1
  13. data/app/controllers/spree_cm_commissioner/api/v2/storefront/cms_pages_controller_decorator.rb +18 -0
  14. data/app/interactors/spree_cm_commissioner/account_recover.rb +2 -2
  15. data/app/interactors/spree_cm_commissioner/create_event.rb +23 -0
  16. data/app/interactors/spree_cm_commissioner/existing_account_checker.rb +1 -1
  17. data/app/interactors/spree_cm_commissioner/pin_code_sender.rb +3 -3
  18. data/app/interactors/spree_cm_commissioner/sms.rb +14 -0
  19. data/app/interactors/spree_cm_commissioner/telegram_debug_pin_code_sender.rb +2 -1
  20. data/app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb +2 -1
  21. data/app/interactors/spree_cm_commissioner/user_password_authenticator.rb +4 -2
  22. data/app/interactors/spree_cm_commissioner/vattanac_bank_initiator.rb +2 -2
  23. data/app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb +3 -1
  24. data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +3 -2
  25. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -26
  26. data/app/models/concerns/spree_cm_commissioner/product_type.rb +0 -10
  27. data/app/models/concerns/spree_cm_commissioner/user_identity.rb +7 -4
  28. data/app/models/spree_cm_commissioner/cms_page_decorator.rb +9 -0
  29. data/app/models/spree_cm_commissioner/line_item_decorator.rb +0 -1
  30. data/app/models/spree_cm_commissioner/order_decorator.rb +0 -15
  31. data/app/models/spree_cm_commissioner/place.rb +11 -2
  32. data/app/models/spree_cm_commissioner/product_decorator.rb +0 -1
  33. data/app/models/spree_cm_commissioner/stock/availability_checker.rb +25 -27
  34. data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +1 -2
  35. data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
  36. data/app/models/spree_cm_commissioner/taxon_decorator.rb +11 -0
  37. data/app/models/spree_cm_commissioner/taxon_option_type.rb +8 -0
  38. data/app/models/spree_cm_commissioner/taxon_option_value.rb +8 -0
  39. data/app/models/spree_cm_commissioner/trip.rb +0 -11
  40. data/app/models/spree_cm_commissioner/trip_connection.rb +1 -0
  41. data/app/models/spree_cm_commissioner/trip_stop.rb +12 -5
  42. data/app/models/spree_cm_commissioner/variant_decorator.rb +28 -25
  43. data/app/models/spree_cm_commissioner/variant_options.rb +0 -14
  44. data/app/models/spree_cm_commissioner/vehicle.rb +0 -7
  45. data/app/models/spree_cm_commissioner/vendor_decorator.rb +2 -1
  46. data/app/models/spree_cm_commissioner/vendor_stop.rb +2 -1
  47. data/app/overrides/spree/admin/cms_pages/_form/tenant_fields.html.erb.deface +7 -0
  48. data/app/overrides/spree/admin/cms_pages/index/cms_pages_tabs.html.erb.deface +21 -0
  49. data/app/overrides/spree/admin/users/index/body.html.erb.deface +3 -0
  50. data/app/overrides/spree/admin/users/index/headers.html.erb.deface +3 -0
  51. data/app/queries/spree_cm_commissioner/trip_query.rb +11 -11
  52. data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +45 -0
  53. data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +55 -0
  54. data/app/queries/spree_cm_commissioner/vendor_stop_place_query.rb +54 -0
  55. data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +0 -3
  56. data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
  57. data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +0 -2
  58. data/app/serializers/spree/v2/tenant/guest_serializer.rb +1 -0
  59. data/app/services/spree_cm_commissioner/organizer/export_guest_csv_service.rb +2 -0
  60. data/app/services/spree_cm_commissioner/user_authenticator.rb +3 -1
  61. data/app/views/spree/admin/shared/_cms_pages_tabs.html.erb +20 -0
  62. data/app/views/spree/admin/stock_managements/index.html.erb +5 -31
  63. data/config/routes.rb +4 -11
  64. data/db/migrate/20250418072528_add_nested_set_columns_to_places.rb +10 -0
  65. data/db/migrate/20250430091742_create_cm_taxon_option_types.rb +9 -0
  66. data/db/migrate/20250430092928_create_cm_taxon_option_values.rb +9 -0
  67. data/db/migrate/20250506092929_add_trip_count_to_cm_vendor_stops.rb +5 -0
  68. data/db/migrate/20250512075319_add_tenant_id_to_spree_cms_pages.rb +6 -0
  69. data/docker-compose.yml +1 -1
  70. data/lib/generators/spree_cm_commissioner/install/install_generator.rb +2 -2
  71. data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_dashboard/spree_cm_commissioner → spree_cm_commissioner}/utilities.js +0 -4
  72. data/lib/spree_cm_commissioner/calendar_event.rb +1 -11
  73. data/lib/spree_cm_commissioner/test_helper/factories/place_factory.rb +11 -1
  74. data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +6 -28
  75. data/lib/spree_cm_commissioner/version.rb +1 -1
  76. data/lib/spree_cm_commissioner.rb +0 -34
  77. data/lib/tasks/migrate_and_rebuild_place_hierarchy.rake +9 -0
  78. data/lib/tasks/update_orphan_root_places.rake +7 -0
  79. data/spree_cm_commissioner.gemspec +0 -5
  80. metadata +22 -69
  81. data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +0 -42
  82. data/app/finders/spree_cm_commissioner/accommodations/find.rb +0 -40
  83. data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +0 -35
  84. data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +0 -25
  85. data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +0 -71
  86. data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +0 -7
  87. data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +0 -9
  88. data/app/models/spree_cm_commissioner/inventory.rb +0 -11
  89. data/app/models/spree_cm_commissioner/inventory_item.rb +0 -37
  90. data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +0 -40
  91. data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +0 -114
  92. data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +0 -42
  93. data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +0 -27
  94. data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -44
  95. data/app/models/spree_cm_commissioner/stock_movement_decorator.rb +0 -34
  96. data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +0 -19
  97. data/app/views/spree/admin/stock_managements/_events_popover.html.erb +0 -17
  98. data/app/views/spree/admin/stock_managements/calendar.html.erb +0 -32
  99. data/db/migrate/20250304293518_create_cm_inventory_items.rb +0 -21
  100. data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +0 -5
  101. data/lib/spree_cm_commissioner/cached_inventory_item.rb +0 -23
  102. data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +0 -9
  103. data/lib/tasks/create_default_non_permanent_inventory_items.rake +0 -16
  104. data/lib/tasks/generate_inventory_items.rake +0 -7
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0.pre.pre1
4
+ version: 1.10.0.pre.hotfix.pre.sms
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-30 00:00:00.000000000 Z
11
+ date: 2025-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -464,48 +464,6 @@ dependencies:
464
464
  - - "~>"
465
465
  - !ruby/object:Gem::Version
466
466
  version: '3.2'
467
- - !ruby/object:Gem::Dependency
468
- name: redis
469
- requirement: !ruby/object:Gem::Requirement
470
- requirements:
471
- - - ">="
472
- - !ruby/object:Gem::Version
473
- version: '0'
474
- type: :runtime
475
- prerelease: false
476
- version_requirements: !ruby/object:Gem::Requirement
477
- requirements:
478
- - - ">="
479
- - !ruby/object:Gem::Version
480
- version: '0'
481
- - !ruby/object:Gem::Dependency
482
- name: redis-rails
483
- requirement: !ruby/object:Gem::Requirement
484
- requirements:
485
- - - ">="
486
- - !ruby/object:Gem::Version
487
- version: '0'
488
- type: :runtime
489
- prerelease: false
490
- version_requirements: !ruby/object:Gem::Requirement
491
- requirements:
492
- - - ">="
493
- - !ruby/object:Gem::Version
494
- version: '0'
495
- - !ruby/object:Gem::Dependency
496
- name: connection_pool
497
- requirement: !ruby/object:Gem::Requirement
498
- requirements:
499
- - - ">="
500
- - !ruby/object:Gem::Version
501
- version: '0'
502
- type: :runtime
503
- prerelease: false
504
- version_requirements: !ruby/object:Gem::Requirement
505
- requirements:
506
- - - ">="
507
- - !ruby/object:Gem::Version
508
- version: '0'
509
467
  - !ruby/object:Gem::Dependency
510
468
  name: pg
511
469
  requirement: !ruby/object:Gem::Requirement
@@ -744,6 +702,7 @@ files:
744
702
  - app/controllers/spree/admin/calendars/base_controller.rb
745
703
  - app/controllers/spree/admin/calendars/orders_controller.rb
746
704
  - app/controllers/spree/admin/classifications_controller.rb
705
+ - app/controllers/spree/admin/cms_pages_controller_decorator.rb
747
706
  - app/controllers/spree/admin/customer_notifications_controller.rb
748
707
  - app/controllers/spree/admin/device_tokens_controller.rb
749
708
  - app/controllers/spree/admin/event_blazer_queries_controller.rb
@@ -830,7 +789,6 @@ files:
830
789
  - app/controllers/spree/api/v2/platform/seat_number_layouts_controller.rb
831
790
  - app/controllers/spree/api/v2/platform/taxons_controller_decorator.rb
832
791
  - app/controllers/spree/api/v2/resource_controller_decorator.rb
833
- - app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb
834
792
  - app/controllers/spree/api/v2/storefront/accommodations_controller.rb
835
793
  - app/controllers/spree/api/v2/storefront/account/orders_controller_decorator.rb
836
794
  - app/controllers/spree/api/v2/storefront/account/preferred_payment_method_controller.rb
@@ -902,6 +860,7 @@ files:
902
860
  - app/controllers/spree/api/v2/tenant/cart_payment_method_groups_controller.rb
903
861
  - app/controllers/spree/api/v2/tenant/change_passwords_controller.rb
904
862
  - app/controllers/spree/api/v2/tenant/checkout_controller.rb
863
+ - app/controllers/spree/api/v2/tenant/cms_pages_controller.rb
905
864
  - app/controllers/spree/api/v2/tenant/customer_notifications_controller.rb
906
865
  - app/controllers/spree/api/v2/tenant/guests_controller.rb
907
866
  - app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb
@@ -985,6 +944,7 @@ files:
985
944
  - app/controllers/spree_cm_commissioner/admin/variants_controller_decorator.rb
986
945
  - app/controllers/spree_cm_commissioner/api/v2/storefront/cart_controller_decorator.rb
987
946
  - app/controllers/spree_cm_commissioner/api/v2/storefront/checkout_controller_decorator.rb
947
+ - app/controllers/spree_cm_commissioner/api/v2/storefront/cms_pages_controller_decorator.rb
988
948
  - app/controllers/spree_cm_commissioner/application_controller_decorator.rb
989
949
  - app/controllers/spree_cm_commissioner/guest_cards_controller.rb
990
950
  - app/controllers/spree_cm_commissioner/line_item_qr_images_controller.rb
@@ -1001,8 +961,6 @@ files:
1001
961
  - app/exception_notifier/spree_cm_commissioner/telegram_notifier.rb
1002
962
  - app/factory/spree_cm_commissioner/order_telegram_message_factory.rb
1003
963
  - app/factory/spree_cm_commissioner/telegram_message_factory.rb
1004
- - app/finders/spree_cm_commissioner/accommodations/find.rb
1005
- - app/finders/spree_cm_commissioner/accommodations/find_variant.rb
1006
964
  - app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb
1007
965
  - app/finders/spree_cm_commissioner/orders/find.rb
1008
966
  - app/finders/spree_cm_commissioner/orders/find_by_state.rb
@@ -1060,7 +1018,6 @@ files:
1060
1018
  - app/interactors/spree_cm_commissioner/imported_csv_downloader.rb
1061
1019
  - app/interactors/spree_cm_commissioner/international_mobile_formatter.rb
1062
1020
  - app/interactors/spree_cm_commissioner/invalidate_cache_request.rb
1063
- - app/interactors/spree_cm_commissioner/inventory_item_syncer.rb
1064
1021
  - app/interactors/spree_cm_commissioner/invoice_creator.rb
1065
1022
  - app/interactors/spree_cm_commissioner/media/signed_cookie_generator.rb
1066
1023
  - app/interactors/spree_cm_commissioner/media/signed_path_generator.rb
@@ -1090,7 +1047,6 @@ files:
1090
1047
  - app/interactors/spree_cm_commissioner/sms.rb
1091
1048
  - app/interactors/spree_cm_commissioner/sqs/media_convert_job_status.rb
1092
1049
  - app/interactors/spree_cm_commissioner/state_updater.rb
1093
- - app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb
1094
1050
  - app/interactors/spree_cm_commissioner/subscriptions_order_creator.rb
1095
1051
  - app/interactors/spree_cm_commissioner/subscriptions_order_cron_executor.rb
1096
1052
  - app/interactors/spree_cm_commissioner/subscriptions_prepaid_order_creator.rb
@@ -1143,7 +1099,6 @@ files:
1143
1099
  - app/jobs/spree_cm_commissioner/firebase_email_fetcher_job.rb
1144
1100
  - app/jobs/spree_cm_commissioner/import_order_job.rb
1145
1101
  - app/jobs/spree_cm_commissioner/invalidate_cache_request_job.rb
1146
- - app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb
1147
1102
  - app/jobs/spree_cm_commissioner/option_type_variants_public_metadata_updater_job.rb
1148
1103
  - app/jobs/spree_cm_commissioner/option_value_variants_public_metadata_updater_job.rb
1149
1104
  - app/jobs/spree_cm_commissioner/order_complete_telegram_sender_job.rb
@@ -1151,7 +1106,6 @@ files:
1151
1106
  - app/jobs/spree_cm_commissioner/sms_job.rb
1152
1107
  - app/jobs/spree_cm_commissioner/sms_pin_code_job.rb
1153
1108
  - app/jobs/spree_cm_commissioner/state_job.rb
1154
- - app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb
1155
1109
  - app/jobs/spree_cm_commissioner/subscription_order_executor_job.rb
1156
1110
  - app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb
1157
1111
  - app/jobs/spree_cm_commissioner/telegram_notification_sender_job.rb
@@ -1205,6 +1159,7 @@ files:
1205
1159
  - app/models/spree_cm_commissioner/check_in_ability.rb
1206
1160
  - app/models/spree_cm_commissioner/check_in_record.rb
1207
1161
  - app/models/spree_cm_commissioner/classification_decorator.rb
1162
+ - app/models/spree_cm_commissioner/cms_page_decorator.rb
1208
1163
  - app/models/spree_cm_commissioner/configuration.rb
1209
1164
  - app/models/spree_cm_commissioner/crew_invite.rb
1210
1165
  - app/models/spree_cm_commissioner/customer.rb
@@ -1244,8 +1199,6 @@ files:
1244
1199
  - app/models/spree_cm_commissioner/image_methods_decorator.rb
1245
1200
  - app/models/spree_cm_commissioner/import.rb
1246
1201
  - app/models/spree_cm_commissioner/imports/import_order.rb
1247
- - app/models/spree_cm_commissioner/inventory.rb
1248
- - app/models/spree_cm_commissioner/inventory_item.rb
1249
1202
  - app/models/spree_cm_commissioner/invite.rb
1250
1203
  - app/models/spree_cm_commissioner/invite_user_event.rb
1251
1204
  - app/models/spree_cm_commissioner/invite_user_taxon.rb
@@ -1295,10 +1248,6 @@ files:
1295
1248
  - app/models/spree_cm_commissioner/promotion_decorator.rb
1296
1249
  - app/models/spree_cm_commissioner/property_decorator.rb
1297
1250
  - app/models/spree_cm_commissioner/prototype_decorator.rb
1298
- - app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb
1299
- - app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb
1300
- - app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb
1301
- - app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb
1302
1251
  - app/models/spree_cm_commissioner/role_decorator.rb
1303
1252
  - app/models/spree_cm_commissioner/role_permission.rb
1304
1253
  - app/models/spree_cm_commissioner/s3_presigned_url.rb
@@ -1311,10 +1260,8 @@ files:
1311
1260
  - app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb
1312
1261
  - app/models/spree_cm_commissioner/stock/inventory_unit_builder_decorator.rb
1313
1262
  - app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb
1314
- - app/models/spree_cm_commissioner/stock/order_availability_checker.rb
1315
1263
  - app/models/spree_cm_commissioner/stock_item_decorator.rb
1316
1264
  - app/models/spree_cm_commissioner/stock_location_decorator.rb
1317
- - app/models/spree_cm_commissioner/stock_movement_decorator.rb
1318
1265
  - app/models/spree_cm_commissioner/stop.rb
1319
1266
  - app/models/spree_cm_commissioner/store_decorator.rb
1320
1267
  - app/models/spree_cm_commissioner/subscription.rb
@@ -1324,6 +1271,8 @@ files:
1324
1271
  - app/models/spree_cm_commissioner/taxon_category_icon.rb
1325
1272
  - app/models/spree_cm_commissioner/taxon_decorator.rb
1326
1273
  - app/models/spree_cm_commissioner/taxon_home_banner.rb
1274
+ - app/models/spree_cm_commissioner/taxon_option_type.rb
1275
+ - app/models/spree_cm_commissioner/taxon_option_value.rb
1327
1276
  - app/models/spree_cm_commissioner/taxon_vendor.rb
1328
1277
  - app/models/spree_cm_commissioner/taxon_video_banner.rb
1329
1278
  - app/models/spree_cm_commissioner/taxon_web_banner.rb
@@ -1377,6 +1326,8 @@ files:
1377
1326
  - app/notifications/spree_cm_commissioner/order_requested_notification.rb
1378
1327
  - app/overrides/spree/admin/adjustments/_adjustment/payable_table_body.html.erb.deface
1379
1328
  - app/overrides/spree/admin/adjustments/_adjustments_table/payable_table_header.html.erb.deface
1329
+ - app/overrides/spree/admin/cms_pages/_form/tenant_fields.html.erb.deface
1330
+ - app/overrides/spree/admin/cms_pages/index/cms_pages_tabs.html.erb.deface
1380
1331
  - app/overrides/spree/admin/menu_items/_form/badge_field.html.erb.deface
1381
1332
  - app/overrides/spree/admin/oauth_applications/_form/tenant_fields.html.erb.deface
1382
1333
  - app/overrides/spree/admin/option_types/_form/attr_type.html.erb.deface
@@ -1517,12 +1468,14 @@ files:
1517
1468
  - app/queries/spree_cm_commissioner/trip_search_query.rb
1518
1469
  - app/queries/spree_cm_commissioner/trip_seat_layout_query.rb
1519
1470
  - app/queries/spree_cm_commissioner/users_by_event_fetcher_query.rb
1471
+ - app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb
1472
+ - app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb
1473
+ - app/queries/spree_cm_commissioner/vendor_stop_place_query.rb
1520
1474
  - app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb
1521
1475
  - app/request_schemas/spree_cm_commissioner/application_request_schema.rb
1522
1476
  - app/request_schemas/spree_cm_commissioner/profile_image_request_schema.rb
1523
1477
  - app/request_schemas/spree_cm_commissioner/user_account_linkage_request_schema.rb
1524
1478
  - app/request_schemas/spree_cm_commissioner/user_profile_request_schema.rb
1525
- - app/request_schemas/spree_cm_commissioner/variant_request_schema.rb
1526
1479
  - app/serializables/spree_cm_commissioner/event_ticket_aggregator.rb
1527
1480
  - app/serializables/spree_cm_commissioner/pie_chart_event_aggregator.rb
1528
1481
  - app/serializables/spree_cm_commissioner/queue_item.rb
@@ -1832,6 +1785,7 @@ files:
1832
1785
  - app/views/spree/admin/promotions/rules/_guest_occupations.html.erb
1833
1786
  - app/views/spree/admin/promotions/rules/_vendors.html.erb
1834
1787
  - app/views/spree/admin/promotions/rules/_weekend.html.erb
1788
+ - app/views/spree/admin/shared/_cms_pages_tabs.html.erb
1835
1789
  - app/views/spree/admin/shared/_customer_notification_tabs.html.erb
1836
1790
  - app/views/spree/admin/shared/_direct_upload.html.erb
1837
1791
  - app/views/spree/admin/shared/_import_order_tabs.html.erb
@@ -1847,9 +1801,7 @@ files:
1847
1801
  - app/views/spree/admin/shared/_video_on_demand_helper_script.html.erb
1848
1802
  - app/views/spree/admin/shared/sub_menu/_calendar.html.erb
1849
1803
  - app/views/spree/admin/shared/sub_menu/_homepage.html.erb
1850
- - app/views/spree/admin/stock_managements/_events_popover.html.erb
1851
1804
  - app/views/spree/admin/stock_managements/_variant_stock_items.html.erb
1852
- - app/views/spree/admin/stock_managements/calendar.html.erb
1853
1805
  - app/views/spree/admin/stock_managements/index.html.erb
1854
1806
  - app/views/spree/admin/system/show.html.erb
1855
1807
  - app/views/spree/admin/taxon_childrens/index.html.erb
@@ -2415,7 +2367,6 @@ files:
2415
2367
  - db/migrate/20250304101907_create_spree_cm_commissioner_invite.rb
2416
2368
  - db/migrate/20250304101946_create_spree_cm_commissioner_invite_user_taxon.rb
2417
2369
  - db/migrate/20250304155234_add_meta_data_to_spree_vendors.rb
2418
- - db/migrate/20250304293518_create_cm_inventory_items.rb
2419
2370
  - db/migrate/20250307013422_add_parent_id_to_cm_place.rb
2420
2371
  - db/migrate/20250307073003_add_tenant_id_to_cm_customer_notifications.rb
2421
2372
  - db/migrate/20250307083809_remove_tenant_id_from_cm_notifications.rb
@@ -2431,10 +2382,14 @@ files:
2431
2382
  - db/migrate/20250403083001_create_spree_cm_commissioner_taxon_blazer_query.rb
2432
2383
  - db/migrate/20250404050117_add_archived_at_to_spree_orders.rb
2433
2384
  - db/migrate/20250407092556_add_variant_id_to_cm_trips.rb
2385
+ - db/migrate/20250418072528_add_nested_set_columns_to_places.rb
2434
2386
  - db/migrate/20250425084929_add_description_to_spree_prototypes.rb
2435
2387
  - db/migrate/20250425085938_add_preferences_to_spree_prototypes.rb
2436
2388
  - db/migrate/20250428025645_add_slug_to_spree_prototypes.rb
2437
- - db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb
2389
+ - db/migrate/20250430091742_create_cm_taxon_option_types.rb
2390
+ - db/migrate/20250430092928_create_cm_taxon_option_values.rb
2391
+ - db/migrate/20250506092929_add_trip_count_to_cm_vendor_stops.rb
2392
+ - db/migrate/20250512075319_add_tenant_id_to_spree_cms_pages.rb
2438
2393
  - docker-compose.yml
2439
2394
  - docs/option_types/attr_types.md
2440
2395
  - docs/private_key.pem
@@ -2449,12 +2404,11 @@ files:
2449
2404
  - docs/webhook/sqs/params_job_submitted.json
2450
2405
  - lib/cm_app_logger.rb
2451
2406
  - lib/generators/spree_cm_commissioner/install/install_generator.rb
2452
- - lib/generators/spree_cm_commissioner/install/templates/app/javascript/spree_dashboard/spree_cm_commissioner/utilities.js
2407
+ - lib/generators/spree_cm_commissioner/install/templates/app/javascript/spree_cm_commissioner/utilities.js
2453
2408
  - lib/generators/spree_cm_commissioner/install/templates/config/data/nationalities.yml
2454
2409
  - lib/generators/spree_cm_commissioner/install/templates/vendor/assets/javascript/spree_cm_commissioner/telegram/all.js
2455
2410
  - lib/generators/spree_cm_commissioner/install/templates/vendor/assets/stylesheets/spree_cm_commissioner/telegram/all.css
2456
2411
  - lib/spree_cm_commissioner.rb
2457
- - lib/spree_cm_commissioner/cached_inventory_item.rb
2458
2412
  - lib/spree_cm_commissioner/calendar_event.rb
2459
2413
  - lib/spree_cm_commissioner/engine.rb
2460
2414
  - lib/spree_cm_commissioner/factories.rb
@@ -2489,7 +2443,6 @@ files:
2489
2443
  - lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb
2490
2444
  - lib/spree_cm_commissioner/test_helper/factories/id_card_factory.rb
2491
2445
  - lib/spree_cm_commissioner/test_helper/factories/image_factory.rb
2492
- - lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb
2493
2446
  - lib/spree_cm_commissioner/test_helper/factories/invite_factory.rb
2494
2447
  - lib/spree_cm_commissioner/test_helper/factories/invite_user_event_factory.rb
2495
2448
  - lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb
@@ -2544,17 +2497,17 @@ files:
2544
2497
  - lib/spree_cm_commissioner/trip_seat_layout_result.rb
2545
2498
  - lib/spree_cm_commissioner/user_session_jwt_token.rb
2546
2499
  - lib/spree_cm_commissioner/version.rb
2547
- - lib/tasks/create_default_non_permanent_inventory_items.rake
2548
2500
  - lib/tasks/customer_notification_cron_scheduler.rake
2549
2501
  - lib/tasks/ensure_event_for_guests.rake
2550
2502
  - lib/tasks/ensure_number_for_line_items.rake
2551
2503
  - lib/tasks/fetch_email.rake
2552
- - lib/tasks/generate_inventory_items.rake
2553
2504
  - lib/tasks/kh_location_option_values.rake
2554
2505
  - lib/tasks/kh_provinces.rake
2506
+ - lib/tasks/migrate_and_rebuild_place_hierarchy.rake
2555
2507
  - lib/tasks/remove_duplicate_device_tokens.rake
2556
2508
  - lib/tasks/subscriptions_order_creator.rake
2557
2509
  - lib/tasks/update_gateway_status.rake
2510
+ - lib/tasks/update_orphan_root_places.rake
2558
2511
  - lib/tasks/update_taxons.rake
2559
2512
  - lib/tasks/variants_public_metadata_updater.rake
2560
2513
  - lib/tasks/vendor_updater.rake
@@ -1,42 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Storefront
5
- class Accommodations::VariantsController < ::Spree::Api::V2::ResourceController
6
- private
7
-
8
- # override
9
- def collection
10
- @collection ||= SpreeCmCommissioner::Accommodations::FindVariant.new(
11
- from_date: params[:from_date]&.to_date,
12
- to_date: params[:to_date]&.to_date,
13
- vendor_id: params[:accommodation_id],
14
- number_of_adults: params[:number_of_adults].to_i,
15
- number_of_kids: params[:number_of_kids].to_i
16
- ).execute
17
- end
18
-
19
- # override
20
- def resource
21
- @resource ||= collection.find(params[:id])
22
- end
23
-
24
- # override
25
- def resource_serializer
26
- Spree::V2::Storefront::VariantSerializer
27
- end
28
-
29
- # override
30
- def collection_serializer
31
- Spree::V2::Storefront::VariantSerializer
32
- end
33
-
34
- # override
35
- def required_schema
36
- SpreeCmCommissioner::VariantRequestSchema
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,40 +0,0 @@
1
- module SpreeCmCommissioner
2
- module Accommodations
3
- class Find
4
- attr_reader :from_date, :to_date, :state_id, :number_of_guests
5
-
6
- def initialize(from_date:, to_date:, state_id:, number_of_adults:, number_of_kids:)
7
- @from_date = from_date
8
- @to_date = to_date
9
- @state_id = state_id
10
- @number_of_guests = number_of_adults.to_i + number_of_kids.to_i
11
- end
12
-
13
- def execute
14
- scope
15
- .where(default_state_id: state_id)
16
- .where(inventory_items: { inventory_date: date_range_excluding_checkout })
17
- .where('CAST(spree_variants.public_metadata->\'cm_options\'->>\'number-of-adults\' AS INTEGER) +
18
- CAST(spree_variants.public_metadata->\'cm_options\'->>\'number-of-kids\' AS INTEGER) >= ?', number_of_guests
19
- )
20
- .where('inventory_items.quantity_available > 0')
21
- .distinct
22
- end
23
-
24
- private
25
-
26
- def scope
27
- Spree::Vendor
28
- .joins(variants: :inventory_items)
29
- .where(primary_product_type: :accommodation, state: :active)
30
- end
31
-
32
- # Why? check_out date is not considered to be charged
33
- # For example, if you check in on 2023-10-01 and check out on 2023-10-02,
34
- # you will be charged for one night (2023-10-01).
35
- def date_range_excluding_checkout
36
- from_date..to_date.prev_day
37
- end
38
- end
39
- end
40
- end
@@ -1,35 +0,0 @@
1
- module SpreeCmCommissioner
2
- module Accommodations
3
- class FindVariant
4
- attr_reader :vendor_id, :from_date, :to_date, :number_of_guests
5
-
6
- def initialize(vendor_id:, from_date:, to_date:, number_of_adults:, number_of_kids:)
7
- @vendor_id = vendor_id
8
- @from_date = from_date
9
- @to_date = to_date
10
- @number_of_guests = number_of_adults.to_i + number_of_kids.to_i
11
- end
12
-
13
- def execute
14
- Spree::Variant
15
- .joins(:inventory_items)
16
- .where(vendor_id: vendor_id)
17
- .where(inventory_items: { inventory_date: date_range_excluding_checkout })
18
- .where('CAST(public_metadata->\'cm_options\'->>\'number-of-adults\' AS INTEGER) +
19
- CAST(public_metadata->\'cm_options\'->>\'number-of-kids\' AS INTEGER) >= ?', number_of_guests
20
- )
21
- .where('inventory_items.quantity_available > 0')
22
- .distinct
23
- end
24
-
25
- private
26
-
27
- # Why? check_out date is not considered to be charged
28
- # For example, if you check in on 2023-10-01 and check out on 2023-10-02,
29
- # you will be charged for one night (2023-10-01).
30
- def date_range_excluding_checkout
31
- from_date..to_date.prev_day
32
- end
33
- end
34
- end
35
- end
@@ -1,25 +0,0 @@
1
- module SpreeCmCommissioner
2
- class InventoryItemSyncer < BaseInteractor
3
- # inventory_id_and_quantities = [{ inventory_id: inventory_item1.id, quantity: 5 } ]
4
- delegate :inventory_id_and_quantities, to: :context
5
-
6
- def call
7
- ActiveRecord::Base.transaction do
8
- inventory_items.each do |inventory_item|
9
- quantity = inventory_id_and_quantities.find { |item| item[:inventory_id] == inventory_item.id }&.dig(:quantity) || 0
10
- adjust_quantity_available(inventory_item, quantity)
11
- end
12
- end
13
- end
14
-
15
- private
16
-
17
- def adjust_quantity_available(inventory_item, quantity)
18
- inventory_item.update!(quantity_available: inventory_item.quantity_available + quantity)
19
- end
20
-
21
- def inventory_items
22
- @inventory_items ||= InventoryItem.where(id: inventory_id_and_quantities.pluck(:inventory_id))
23
- end
24
- end
25
- end
@@ -1,71 +0,0 @@
1
- module SpreeCmCommissioner
2
- module Stock
3
- class PermanentInventoryItemsGenerator < BaseInteractor
4
- delegate :variant_ids, to: :context
5
-
6
- def variants_per_batch = 1000
7
-
8
- def call
9
- variants.in_batches(of: variants_per_batch) do |batch|
10
- generate_inventory_items_for_batch(batch)
11
- end
12
- end
13
-
14
- private
15
-
16
- def generate_inventory_items_for_batch(batch)
17
- total_on_hand_by_variant = total_on_hand_for(batch)
18
- batch.each do |variant|
19
- count_on_hand = total_on_hand_by_variant[variant.id] || 0
20
- generate_inventory_items_for_variant(variant, count_on_hand)
21
- end
22
- end
23
-
24
- def generate_inventory_items_for_variant(variant, count_on_hand)
25
- inventory_dates_for(variant).each do |inventory_date|
26
- next if inventory_exist?(variant, inventory_date)
27
-
28
- create_inventory_item(variant, inventory_date, count_on_hand)
29
- end
30
- end
31
-
32
- def inventory_dates_for(variant)
33
- start_date = Time.zone.tomorrow
34
- end_date = Time.zone.today + variant.pre_inventory_days
35
-
36
- (start_date..end_date)
37
- end
38
-
39
- def inventory_exist?(variant, inventory_date)
40
- variant.inventory_items.exists?(inventory_date: inventory_date)
41
- end
42
-
43
- def create_inventory_item(variant, inventory_date, count_on_hand)
44
- variant.inventory_items.create!(
45
- inventory_date: inventory_date,
46
- quantity_available: count_on_hand,
47
- max_capacity: count_on_hand,
48
- product_type: variant.product_type
49
- )
50
- end
51
-
52
- # Returns a hash: { variant_id => total_on_hand, ... }
53
- def total_on_hand_for(variants)
54
- variant_ids = variants.pluck(:id)
55
-
56
- Spree::StockItem
57
- .joins(:stock_location)
58
- .where(deleted_at: nil, variant_id: variant_ids)
59
- .where(spree_stock_locations: { active: true })
60
- .group(:variant_id)
61
- .sum(:count_on_hand)
62
- end
63
-
64
- def variants
65
- scope = Spree::Variant.active.with_permanent_stock.where(is_master: false).includes(:product)
66
- scope = scope.where(id: variant_ids) if variant_ids.present?
67
- scope
68
- end
69
- end
70
- end
71
- end
@@ -1,7 +0,0 @@
1
- module SpreeCmCommissioner
2
- class InventoryItemSyncerJob < ApplicationUniqueJob
3
- def perform(inventory_id_and_quantities:)
4
- InventoryItemSyncer.call(inventory_id_and_quantities:)
5
- end
6
- end
7
- end
@@ -1,9 +0,0 @@
1
- module SpreeCmCommissioner
2
- module Stock
3
- class PermanentInventoryItemsGeneratorJob < ApplicationUniqueJob
4
- def perform
5
- SpreeCmCommissioner::Stock::PermanentInventoryItemsGenerator.call
6
- end
7
- end
8
- end
9
- end
@@ -1,11 +0,0 @@
1
- module SpreeCmCommissioner
2
- class Inventory
3
- include ActiveModel::Model
4
-
5
- attr_accessor :variant_id, :inventory_date, :quantity_available, :max_capacity, :product_type
6
-
7
- validates :variant_id, presence: true
8
- validates :quantity_available, numericality: { only_integer: true, greater_than_or_equal_to: 0 }, allow_nil: true
9
- validates :max_capacity, numericality: { only_integer: true, greater_than_or_equal_to: 0 }, allow_nil: true
10
- end
11
- end
@@ -1,37 +0,0 @@
1
- module SpreeCmCommissioner
2
- class InventoryItem < ApplicationRecord
3
- include SpreeCmCommissioner::ProductType
4
-
5
- # Association
6
- belongs_to :variant, class_name: 'Spree::Variant'
7
-
8
- # Validation
9
- validates :quantity_available, numericality: { greater_than_or_equal_to: 0 }
10
- validates :max_capacity, numericality: { greater_than_or_equal_to: 0 } # Originally inventory of each variant.
11
- validates :inventory_date, presence: true, if: -> { permanent_stock? }
12
- validates :variant_id, uniqueness: { scope: :inventory_date, message: -> (object, _data) { "The variant is taken on #{object.inventory_date}" } }
13
-
14
- # Scope
15
- scope :for_product, -> (type) { where(product_type: type) }
16
- scope :active, -> { where(inventory_date: nil).or(where('inventory_date >= ?', Time.zone.today)) }
17
-
18
- def adjust_quantity!(quantity)
19
- with_lock do
20
- self.max_capacity = max_capacity + quantity
21
- self.quantity_available = quantity_available + quantity
22
-
23
- save!
24
- end
25
- end
26
-
27
- def active?
28
- inventory_date.nil? || inventory_date >= Time.zone.today
29
- end
30
-
31
- def redis_expired_in
32
- expired_in = 31_536_000 # 1 year for normal stock
33
- expired_in = Time.parse(inventory_date.to_s).end_of_day.to_i - Time.zone.now.to_i if inventory_date.present?
34
- [expired_in, 0].max
35
- end
36
- end
37
- end
@@ -1,40 +0,0 @@
1
- module SpreeCmCommissioner
2
- module RedisStock
3
- class CachedInventoryItemsBuilder
4
- attr_reader :inventory_items
5
-
6
- def initialize(inventory_items)
7
- @inventory_items = inventory_items
8
- end
9
-
10
- # output: [ CachedInventoryItem(...), CachedInventoryItem(...) ]
11
- def call
12
- keys = inventory_items.map { |item| "inventory:#{item.id}" }
13
- return [] unless keys.any?
14
-
15
- counts = SpreeCmCommissioner.redis_pool.with { |redis| redis.mget(*keys) }
16
- inventory_items.map.with_index do |inventory_item, i|
17
- ::SpreeCmCommissioner::CachedInventoryItem.new(
18
- inventory_key: keys[i],
19
- active: inventory_item.active?,
20
- quantity_available: cache_inventory(keys[i], inventory_item, counts[i]),
21
- inventory_item_id: inventory_item.id,
22
- variant_id: inventory_item.variant_id
23
- )
24
- end
25
- end
26
-
27
- private
28
-
29
- def cache_inventory(key, inventory_item, count_in_redis)
30
- return count_in_redis.to_i if count_in_redis.present?
31
-
32
- SpreeCmCommissioner.redis_pool.with do |redis|
33
- redis.set(key, inventory_item.quantity_available, ex: inventory_item.redis_expired_in)
34
- end
35
-
36
- inventory_item.quantity_available
37
- end
38
- end
39
- end
40
- end