spree_cm_commissioner 1.10.0 → 1.11.0.pre.pre2
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.
- checksums.yaml +4 -4
- data/.github/workflows/test_and_build_gem.yml +17 -124
- data/.gitignore +2 -1
- data/.vscode/settings.json +1 -1
- data/Gemfile.lock +22 -1
- data/Rakefile +33 -4
- data/app/controllers/spree/admin/stock_managements_controller.rb +62 -1
- data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +42 -0
- data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +14 -31
- data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +2 -2
- data/app/finders/spree_cm_commissioner/accommodations/find.rb +40 -0
- data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +35 -0
- data/app/interactors/spree_cm_commissioner/create_event.rb +23 -0
- data/app/interactors/spree_cm_commissioner/ensure_correct_product_type.rb +40 -0
- data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +25 -0
- data/app/interactors/spree_cm_commissioner/stock/inventory_items_adjuster.rb +13 -0
- data/app/interactors/spree_cm_commissioner/stock/inventory_items_generator.rb +15 -0
- data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +75 -0
- data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +24 -0
- data/app/interactors/spree_cm_commissioner/vattanac_bank_initiator.rb +27 -8
- data/app/jobs/spree_cm_commissioner/ensure_correct_product_type_job.rb +7 -0
- data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +7 -0
- data/app/jobs/spree_cm_commissioner/stock/inventory_items_adjuster_job.rb +11 -0
- data/app/jobs/spree_cm_commissioner/stock/inventory_items_generator_job.rb +11 -0
- data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +9 -0
- data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +26 -0
- data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +1 -3
- data/app/models/concerns/spree_cm_commissioner/product_type.rb +10 -0
- data/app/models/spree_cm_commissioner/inventory.rb +11 -0
- data/app/models/spree_cm_commissioner/inventory_item.rb +56 -0
- data/app/models/spree_cm_commissioner/line_item_decorator.rb +16 -5
- data/app/models/spree_cm_commissioner/order_decorator.rb +15 -0
- data/app/models/spree_cm_commissioner/place.rb +11 -2
- data/app/models/spree_cm_commissioner/product_decorator.rb +9 -2
- data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +40 -0
- data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +126 -0
- data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +36 -0
- data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +27 -0
- data/app/models/spree_cm_commissioner/stock/availability_checker.rb +27 -25
- data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +2 -1
- data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
- data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +44 -0
- data/app/models/spree_cm_commissioner/stock_item_decorator.rb +14 -0
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +11 -0
- data/app/models/spree_cm_commissioner/taxon_option_type.rb +8 -0
- data/app/models/spree_cm_commissioner/taxon_option_value.rb +8 -0
- data/app/models/spree_cm_commissioner/trip.rb +0 -11
- data/app/models/spree_cm_commissioner/trip_stop.rb +11 -4
- data/app/models/spree_cm_commissioner/variant_decorator.rb +39 -27
- data/app/models/spree_cm_commissioner/vendor_stop.rb +2 -1
- data/app/queries/spree_cm_commissioner/vendor_stop_place_query.rb +54 -0
- data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +3 -0
- data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
- data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +19 -0
- data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +2 -0
- data/app/serializers/spree/v2/tenant/guest_serializer.rb +1 -0
- data/app/services/spree_cm_commissioner/aes_encryption_service.rb +6 -4
- data/app/services/spree_cm_commissioner/organizer/export_guest_csv_service.rb +2 -0
- data/app/views/spree/admin/stock_managements/_events_popover.html.erb +23 -0
- data/app/views/spree/admin/stock_managements/_variant_stock_items.html.erb +3 -1
- data/app/views/spree/admin/stock_managements/calendar.html.erb +35 -0
- data/app/views/spree/admin/stock_managements/index.html.erb +40 -5
- data/config/initializers/spree_permitted_attributes.rb +5 -0
- data/config/routes.rb +11 -2
- data/db/migrate/20250304293518_create_cm_inventory_items.rb +21 -0
- data/db/migrate/20250418072528_add_nested_set_columns_to_places.rb +10 -0
- data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +5 -0
- data/db/migrate/20250430091742_create_cm_taxon_option_types.rb +9 -0
- data/db/migrate/20250430092928_create_cm_taxon_option_values.rb +9 -0
- data/db/migrate/20250502025848_add_index_to_spree_products.rb +5 -0
- data/db/migrate/20250502030001_add_product_type_to_spree_variants.rb +5 -0
- data/db/migrate/20250502030002_add_product_type_to_spree_line_items.rb +5 -0
- data/db/migrate/20250506092929_add_trip_count_to_cm_vendor_stops.rb +5 -0
- data/docker-compose.yml +1 -1
- data/lib/generators/spree_cm_commissioner/install/install_generator.rb +11 -3
- data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_cm_commissioner → spree_dashboard/spree_cm_commissioner}/utilities.js +4 -0
- data/lib/spree_cm_commissioner/cached_inventory_item.rb +23 -0
- data/lib/spree_cm_commissioner/calendar_event.rb +11 -1
- data/lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb +1 -1
- data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +9 -0
- data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +1 -1
- data/lib/spree_cm_commissioner/test_helper/factories/place_factory.rb +11 -1
- data/lib/spree_cm_commissioner/test_helper/factories/product_factory.rb +18 -5
- data/lib/spree_cm_commissioner/test_helper/factories/stock_location_factory.rb +2 -2
- data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +41 -6
- data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +1 -1
- data/lib/spree_cm_commissioner/version.rb +1 -1
- data/lib/spree_cm_commissioner.rb +34 -0
- data/lib/tasks/create_default_non_permanent_inventory_items.rake +16 -0
- data/lib/tasks/ensure_correct_product_type.rake +7 -0
- data/lib/tasks/generate_inventory_items.rake +7 -0
- data/lib/tasks/migrate_and_rebuild_place_hierarchy.rake +9 -0
- data/lib/tasks/update_orphan_root_places.rake +7 -0
- data/spree_cm_commissioner.gemspec +5 -0
- metadata +90 -7
- data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +0 -45
- data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +0 -55
@@ -30,7 +30,7 @@ FactoryBot.define do
|
|
30
30
|
if vendor.primary_product_type == :accommodation
|
31
31
|
product = create(:cm_accommodation_product, vendor: vendor, total_inventory: evaluator.total_inventory)
|
32
32
|
else
|
33
|
-
product = create(:
|
33
|
+
product = create(:cm_product, vendor: vendor, product_type: vendor.primary_product_type)
|
34
34
|
product.master.stock_items.first.adjust_count_on_hand(evaluator.total_inventory)
|
35
35
|
end
|
36
36
|
|
@@ -19,6 +19,7 @@ require 'spree_cm_commissioner/user_session_jwt_token'
|
|
19
19
|
require 'spree_cm_commissioner/trip_result'
|
20
20
|
require 'spree_cm_commissioner/trip_query_result'
|
21
21
|
require 'spree_cm_commissioner/trip_seat_layout_result'
|
22
|
+
require 'spree_cm_commissioner/cached_inventory_item'
|
22
23
|
|
23
24
|
require 'activerecord_multi_tenant'
|
24
25
|
require 'google/cloud/recaptcha_enterprise'
|
@@ -44,3 +45,36 @@ require 'cm_app_logger'
|
|
44
45
|
require 'counter_culture'
|
45
46
|
|
46
47
|
require 'byebug' if Rails.env.development? || Rails.env.test?
|
48
|
+
|
49
|
+
module SpreeCmCommissioner
|
50
|
+
class << self
|
51
|
+
# Allows overriding the default Redis connection pool with a custom one
|
52
|
+
attr_writer :redis_pool
|
53
|
+
|
54
|
+
def redis_pool
|
55
|
+
@redis_pool ||= default_redis_pool
|
56
|
+
end
|
57
|
+
|
58
|
+
# Resets the Redis pool, useful for testing or reinitialization
|
59
|
+
def reset_redis_pool
|
60
|
+
@redis_pool = nil
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def default_redis_pool
|
66
|
+
pool_size = ENV.fetch('REDIS_POOL_SIZE', '5').to_i
|
67
|
+
timeout = ENV.fetch('REDIS_TIMEOUT', '5').to_i
|
68
|
+
redis_url = ENV.fetch('REDIS_URL', 'redis://localhost:6379/12')
|
69
|
+
|
70
|
+
ConnectionPool.new(size: pool_size, timeout: timeout) do
|
71
|
+
Redis.new(url: redis_url, timeout: timeout)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Provides a configuration block for customizing SpreeCmCommissioner settings
|
77
|
+
def self.configure
|
78
|
+
yield self
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# recommend to be used in schedule.yml & manually access in /sidekiq/cron
|
2
|
+
namespace :spree_cm_commissioner do
|
3
|
+
desc 'Create default inventory items for non-permanent stock products'
|
4
|
+
task create_default_non_permanent_inventory_items: :environment do
|
5
|
+
Spree::Variant.active.with_non_permanent_stock.find_each do |variant|
|
6
|
+
total_purchases = variant.complete_line_items.sum(:quantity).to_i || 0
|
7
|
+
max_capacity = variant.total_on_hand || 0
|
8
|
+
quantity_available = [max_capacity - total_purchases, 0].max
|
9
|
+
|
10
|
+
variant.create_default_non_permanent_inventory_item!(
|
11
|
+
max_capacity: max_capacity,
|
12
|
+
quantity_available: quantity_available
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# recommend to be used in schedule.yml & manually access in /sidekiq/cron
|
2
|
+
namespace :spree_cm_commissioner do
|
3
|
+
desc 'Ensure product_type in variants, line_items, inventory_items are correct with product'
|
4
|
+
task ensure_correct_product_type: :environment do
|
5
|
+
SpreeCmCommissioner::EnsureCorrectProductTypeJob.perform_now
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# recommend to be used in schedule.yml & schedule run it everyday
|
2
|
+
namespace :spree_cm_commissioner do
|
3
|
+
desc 'Generate inventory items for permanent_stock variants.'
|
4
|
+
task generate_inventory_items: :environment do
|
5
|
+
SpreeCmCommissioner::Stock::PermanentInventoryItemsGeneratorJob.perform_now
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
namespace :spree_cm_commissioner do
|
2
|
+
desc 'Migrate and Rebuild place hierarchy..'
|
3
|
+
task migrate_and_rebuild_place_hierarchy: :environment do
|
4
|
+
puts 'Resetting column information :lft and :rgt columns...'
|
5
|
+
SpreeCmCommissioner::Place.reset_column_information
|
6
|
+
SpreeCmCommissioner::Place.rebuild!
|
7
|
+
puts 'Place hierarchy rebuild completed successfully!'
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
namespace :spree_cm_commissioner do
|
2
|
+
desc 'Update orphan root places...'
|
3
|
+
task update_orphan_root_places: :environment do
|
4
|
+
count = SpreeCmCommissioner::Place.where(parent_id: 0).update_all(parent_id: nil) # rubocop:disable Rails/SkipsModelValidations
|
5
|
+
puts "#{count} orphan root places updated."
|
6
|
+
end
|
7
|
+
end
|
@@ -54,6 +54,11 @@ Gem::Specification.new do |s|
|
|
54
54
|
s.add_dependency "rqrcode", "~> 2.0"
|
55
55
|
s.add_dependency "premailer-rails"
|
56
56
|
s.add_dependency 'counter_culture', '~> 3.2'
|
57
|
+
# Redis
|
58
|
+
s.add_dependency 'redis'
|
59
|
+
s.add_dependency 'redis-rails'
|
60
|
+
s.add_dependency 'connection_pool'
|
61
|
+
|
57
62
|
s.add_development_dependency 'pg'
|
58
63
|
s.add_development_dependency 'spree_dev_tools'
|
59
64
|
s.add_dependency 'blazer', '~> 3.0.4'
|
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.
|
4
|
+
version: 1.11.0.pre.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- You
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-05-
|
11
|
+
date: 2025-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree
|
@@ -464,6 +464,48 @@ 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'
|
467
509
|
- !ruby/object:Gem::Dependency
|
468
510
|
name: pg
|
469
511
|
requirement: !ruby/object:Gem::Requirement
|
@@ -788,6 +830,7 @@ files:
|
|
788
830
|
- app/controllers/spree/api/v2/platform/seat_number_layouts_controller.rb
|
789
831
|
- app/controllers/spree/api/v2/platform/taxons_controller_decorator.rb
|
790
832
|
- app/controllers/spree/api/v2/resource_controller_decorator.rb
|
833
|
+
- app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb
|
791
834
|
- app/controllers/spree/api/v2/storefront/accommodations_controller.rb
|
792
835
|
- app/controllers/spree/api/v2/storefront/account/orders_controller_decorator.rb
|
793
836
|
- app/controllers/spree/api/v2/storefront/account/preferred_payment_method_controller.rb
|
@@ -958,6 +1001,8 @@ files:
|
|
958
1001
|
- app/exception_notifier/spree_cm_commissioner/telegram_notifier.rb
|
959
1002
|
- app/factory/spree_cm_commissioner/order_telegram_message_factory.rb
|
960
1003
|
- 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
|
961
1006
|
- app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb
|
962
1007
|
- app/finders/spree_cm_commissioner/orders/find.rb
|
963
1008
|
- app/finders/spree_cm_commissioner/orders/find_by_state.rb
|
@@ -1002,6 +1047,7 @@ files:
|
|
1002
1047
|
- app/interactors/spree_cm_commissioner/customer_promotion_creator.rb
|
1003
1048
|
- app/interactors/spree_cm_commissioner/enqueue_cart/add_item.rb
|
1004
1049
|
- app/interactors/spree_cm_commissioner/enqueue_cart/add_item_status_marker.rb
|
1050
|
+
- app/interactors/spree_cm_commissioner/ensure_correct_product_type.rb
|
1005
1051
|
- app/interactors/spree_cm_commissioner/event_qr_generator.rb
|
1006
1052
|
- app/interactors/spree_cm_commissioner/existing_account_checker.rb
|
1007
1053
|
- app/interactors/spree_cm_commissioner/firebase_email_fetcher.rb
|
@@ -1015,6 +1061,7 @@ files:
|
|
1015
1061
|
- app/interactors/spree_cm_commissioner/imported_csv_downloader.rb
|
1016
1062
|
- app/interactors/spree_cm_commissioner/international_mobile_formatter.rb
|
1017
1063
|
- app/interactors/spree_cm_commissioner/invalidate_cache_request.rb
|
1064
|
+
- app/interactors/spree_cm_commissioner/inventory_item_syncer.rb
|
1018
1065
|
- app/interactors/spree_cm_commissioner/invoice_creator.rb
|
1019
1066
|
- app/interactors/spree_cm_commissioner/media/signed_cookie_generator.rb
|
1020
1067
|
- app/interactors/spree_cm_commissioner/media/signed_path_generator.rb
|
@@ -1044,6 +1091,10 @@ files:
|
|
1044
1091
|
- app/interactors/spree_cm_commissioner/sms.rb
|
1045
1092
|
- app/interactors/spree_cm_commissioner/sqs/media_convert_job_status.rb
|
1046
1093
|
- app/interactors/spree_cm_commissioner/state_updater.rb
|
1094
|
+
- app/interactors/spree_cm_commissioner/stock/inventory_items_adjuster.rb
|
1095
|
+
- app/interactors/spree_cm_commissioner/stock/inventory_items_generator.rb
|
1096
|
+
- app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb
|
1097
|
+
- app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb
|
1047
1098
|
- app/interactors/spree_cm_commissioner/subscriptions_order_creator.rb
|
1048
1099
|
- app/interactors/spree_cm_commissioner/subscriptions_order_cron_executor.rb
|
1049
1100
|
- app/interactors/spree_cm_commissioner/subscriptions_prepaid_order_creator.rb
|
@@ -1091,11 +1142,13 @@ files:
|
|
1091
1142
|
- app/jobs/spree_cm_commissioner/customer_notification_cron_job.rb
|
1092
1143
|
- app/jobs/spree_cm_commissioner/customer_notification_sender_job.rb
|
1093
1144
|
- app/jobs/spree_cm_commissioner/enqueue_cart/add_item_job.rb
|
1145
|
+
- app/jobs/spree_cm_commissioner/ensure_correct_product_type_job.rb
|
1094
1146
|
- app/jobs/spree_cm_commissioner/ensure_event_id_for_guests_job.rb
|
1095
1147
|
- app/jobs/spree_cm_commissioner/export_csv_job.rb
|
1096
1148
|
- app/jobs/spree_cm_commissioner/firebase_email_fetcher_job.rb
|
1097
1149
|
- app/jobs/spree_cm_commissioner/import_order_job.rb
|
1098
1150
|
- app/jobs/spree_cm_commissioner/invalidate_cache_request_job.rb
|
1151
|
+
- app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb
|
1099
1152
|
- app/jobs/spree_cm_commissioner/option_type_variants_public_metadata_updater_job.rb
|
1100
1153
|
- app/jobs/spree_cm_commissioner/option_value_variants_public_metadata_updater_job.rb
|
1101
1154
|
- app/jobs/spree_cm_commissioner/order_complete_telegram_sender_job.rb
|
@@ -1103,6 +1156,9 @@ files:
|
|
1103
1156
|
- app/jobs/spree_cm_commissioner/sms_job.rb
|
1104
1157
|
- app/jobs/spree_cm_commissioner/sms_pin_code_job.rb
|
1105
1158
|
- app/jobs/spree_cm_commissioner/state_job.rb
|
1159
|
+
- app/jobs/spree_cm_commissioner/stock/inventory_items_adjuster_job.rb
|
1160
|
+
- app/jobs/spree_cm_commissioner/stock/inventory_items_generator_job.rb
|
1161
|
+
- app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb
|
1106
1162
|
- app/jobs/spree_cm_commissioner/subscription_order_executor_job.rb
|
1107
1163
|
- app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb
|
1108
1164
|
- app/jobs/spree_cm_commissioner/telegram_notification_sender_job.rb
|
@@ -1195,6 +1251,8 @@ files:
|
|
1195
1251
|
- app/models/spree_cm_commissioner/image_methods_decorator.rb
|
1196
1252
|
- app/models/spree_cm_commissioner/import.rb
|
1197
1253
|
- app/models/spree_cm_commissioner/imports/import_order.rb
|
1254
|
+
- app/models/spree_cm_commissioner/inventory.rb
|
1255
|
+
- app/models/spree_cm_commissioner/inventory_item.rb
|
1198
1256
|
- app/models/spree_cm_commissioner/invite.rb
|
1199
1257
|
- app/models/spree_cm_commissioner/invite_user_event.rb
|
1200
1258
|
- app/models/spree_cm_commissioner/invite_user_taxon.rb
|
@@ -1244,6 +1302,10 @@ files:
|
|
1244
1302
|
- app/models/spree_cm_commissioner/promotion_decorator.rb
|
1245
1303
|
- app/models/spree_cm_commissioner/property_decorator.rb
|
1246
1304
|
- app/models/spree_cm_commissioner/prototype_decorator.rb
|
1305
|
+
- app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb
|
1306
|
+
- app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb
|
1307
|
+
- app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb
|
1308
|
+
- app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb
|
1247
1309
|
- app/models/spree_cm_commissioner/role_decorator.rb
|
1248
1310
|
- app/models/spree_cm_commissioner/role_permission.rb
|
1249
1311
|
- app/models/spree_cm_commissioner/s3_presigned_url.rb
|
@@ -1256,6 +1318,7 @@ files:
|
|
1256
1318
|
- app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb
|
1257
1319
|
- app/models/spree_cm_commissioner/stock/inventory_unit_builder_decorator.rb
|
1258
1320
|
- app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb
|
1321
|
+
- app/models/spree_cm_commissioner/stock/order_availability_checker.rb
|
1259
1322
|
- app/models/spree_cm_commissioner/stock_item_decorator.rb
|
1260
1323
|
- app/models/spree_cm_commissioner/stock_location_decorator.rb
|
1261
1324
|
- app/models/spree_cm_commissioner/stop.rb
|
@@ -1267,6 +1330,8 @@ files:
|
|
1267
1330
|
- app/models/spree_cm_commissioner/taxon_category_icon.rb
|
1268
1331
|
- app/models/spree_cm_commissioner/taxon_decorator.rb
|
1269
1332
|
- app/models/spree_cm_commissioner/taxon_home_banner.rb
|
1333
|
+
- app/models/spree_cm_commissioner/taxon_option_type.rb
|
1334
|
+
- app/models/spree_cm_commissioner/taxon_option_value.rb
|
1270
1335
|
- app/models/spree_cm_commissioner/taxon_vendor.rb
|
1271
1336
|
- app/models/spree_cm_commissioner/taxon_video_banner.rb
|
1272
1337
|
- app/models/spree_cm_commissioner/taxon_web_banner.rb
|
@@ -1460,13 +1525,13 @@ files:
|
|
1460
1525
|
- app/queries/spree_cm_commissioner/trip_search_query.rb
|
1461
1526
|
- app/queries/spree_cm_commissioner/trip_seat_layout_query.rb
|
1462
1527
|
- app/queries/spree_cm_commissioner/users_by_event_fetcher_query.rb
|
1463
|
-
- app/queries/spree_cm_commissioner/
|
1464
|
-
- app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb
|
1528
|
+
- app/queries/spree_cm_commissioner/vendor_stop_place_query.rb
|
1465
1529
|
- app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb
|
1466
1530
|
- app/request_schemas/spree_cm_commissioner/application_request_schema.rb
|
1467
1531
|
- app/request_schemas/spree_cm_commissioner/profile_image_request_schema.rb
|
1468
1532
|
- app/request_schemas/spree_cm_commissioner/user_account_linkage_request_schema.rb
|
1469
1533
|
- app/request_schemas/spree_cm_commissioner/user_profile_request_schema.rb
|
1534
|
+
- app/request_schemas/spree_cm_commissioner/variant_request_schema.rb
|
1470
1535
|
- app/serializables/spree_cm_commissioner/event_ticket_aggregator.rb
|
1471
1536
|
- app/serializables/spree_cm_commissioner/pie_chart_event_aggregator.rb
|
1472
1537
|
- app/serializables/spree_cm_commissioner/queue_item.rb
|
@@ -1791,7 +1856,9 @@ files:
|
|
1791
1856
|
- app/views/spree/admin/shared/_video_on_demand_helper_script.html.erb
|
1792
1857
|
- app/views/spree/admin/shared/sub_menu/_calendar.html.erb
|
1793
1858
|
- app/views/spree/admin/shared/sub_menu/_homepage.html.erb
|
1859
|
+
- app/views/spree/admin/stock_managements/_events_popover.html.erb
|
1794
1860
|
- app/views/spree/admin/stock_managements/_variant_stock_items.html.erb
|
1861
|
+
- app/views/spree/admin/stock_managements/calendar.html.erb
|
1795
1862
|
- app/views/spree/admin/stock_managements/index.html.erb
|
1796
1863
|
- app/views/spree/admin/system/show.html.erb
|
1797
1864
|
- app/views/spree/admin/taxon_childrens/index.html.erb
|
@@ -2357,6 +2424,7 @@ files:
|
|
2357
2424
|
- db/migrate/20250304101907_create_spree_cm_commissioner_invite.rb
|
2358
2425
|
- db/migrate/20250304101946_create_spree_cm_commissioner_invite_user_taxon.rb
|
2359
2426
|
- db/migrate/20250304155234_add_meta_data_to_spree_vendors.rb
|
2427
|
+
- db/migrate/20250304293518_create_cm_inventory_items.rb
|
2360
2428
|
- db/migrate/20250307013422_add_parent_id_to_cm_place.rb
|
2361
2429
|
- db/migrate/20250307073003_add_tenant_id_to_cm_customer_notifications.rb
|
2362
2430
|
- db/migrate/20250307083809_remove_tenant_id_from_cm_notifications.rb
|
@@ -2372,9 +2440,17 @@ files:
|
|
2372
2440
|
- db/migrate/20250403083001_create_spree_cm_commissioner_taxon_blazer_query.rb
|
2373
2441
|
- db/migrate/20250404050117_add_archived_at_to_spree_orders.rb
|
2374
2442
|
- db/migrate/20250407092556_add_variant_id_to_cm_trips.rb
|
2443
|
+
- db/migrate/20250418072528_add_nested_set_columns_to_places.rb
|
2375
2444
|
- db/migrate/20250425084929_add_description_to_spree_prototypes.rb
|
2376
2445
|
- db/migrate/20250425085938_add_preferences_to_spree_prototypes.rb
|
2377
2446
|
- db/migrate/20250428025645_add_slug_to_spree_prototypes.rb
|
2447
|
+
- db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb
|
2448
|
+
- db/migrate/20250430091742_create_cm_taxon_option_types.rb
|
2449
|
+
- db/migrate/20250430092928_create_cm_taxon_option_values.rb
|
2450
|
+
- db/migrate/20250502025848_add_index_to_spree_products.rb
|
2451
|
+
- db/migrate/20250502030001_add_product_type_to_spree_variants.rb
|
2452
|
+
- db/migrate/20250502030002_add_product_type_to_spree_line_items.rb
|
2453
|
+
- db/migrate/20250506092929_add_trip_count_to_cm_vendor_stops.rb
|
2378
2454
|
- docker-compose.yml
|
2379
2455
|
- docs/option_types/attr_types.md
|
2380
2456
|
- docs/private_key.pem
|
@@ -2389,11 +2465,12 @@ files:
|
|
2389
2465
|
- docs/webhook/sqs/params_job_submitted.json
|
2390
2466
|
- lib/cm_app_logger.rb
|
2391
2467
|
- lib/generators/spree_cm_commissioner/install/install_generator.rb
|
2392
|
-
- lib/generators/spree_cm_commissioner/install/templates/app/javascript/spree_cm_commissioner/utilities.js
|
2468
|
+
- lib/generators/spree_cm_commissioner/install/templates/app/javascript/spree_dashboard/spree_cm_commissioner/utilities.js
|
2393
2469
|
- lib/generators/spree_cm_commissioner/install/templates/config/data/nationalities.yml
|
2394
2470
|
- lib/generators/spree_cm_commissioner/install/templates/vendor/assets/javascript/spree_cm_commissioner/telegram/all.js
|
2395
2471
|
- lib/generators/spree_cm_commissioner/install/templates/vendor/assets/stylesheets/spree_cm_commissioner/telegram/all.css
|
2396
2472
|
- lib/spree_cm_commissioner.rb
|
2473
|
+
- lib/spree_cm_commissioner/cached_inventory_item.rb
|
2397
2474
|
- lib/spree_cm_commissioner/calendar_event.rb
|
2398
2475
|
- lib/spree_cm_commissioner/engine.rb
|
2399
2476
|
- lib/spree_cm_commissioner/factories.rb
|
@@ -2428,6 +2505,7 @@ files:
|
|
2428
2505
|
- lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb
|
2429
2506
|
- lib/spree_cm_commissioner/test_helper/factories/id_card_factory.rb
|
2430
2507
|
- lib/spree_cm_commissioner/test_helper/factories/image_factory.rb
|
2508
|
+
- lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb
|
2431
2509
|
- lib/spree_cm_commissioner/test_helper/factories/invite_factory.rb
|
2432
2510
|
- lib/spree_cm_commissioner/test_helper/factories/invite_user_event_factory.rb
|
2433
2511
|
- lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb
|
@@ -2482,15 +2560,20 @@ files:
|
|
2482
2560
|
- lib/spree_cm_commissioner/trip_seat_layout_result.rb
|
2483
2561
|
- lib/spree_cm_commissioner/user_session_jwt_token.rb
|
2484
2562
|
- lib/spree_cm_commissioner/version.rb
|
2563
|
+
- lib/tasks/create_default_non_permanent_inventory_items.rake
|
2485
2564
|
- lib/tasks/customer_notification_cron_scheduler.rake
|
2565
|
+
- lib/tasks/ensure_correct_product_type.rake
|
2486
2566
|
- lib/tasks/ensure_event_for_guests.rake
|
2487
2567
|
- lib/tasks/ensure_number_for_line_items.rake
|
2488
2568
|
- lib/tasks/fetch_email.rake
|
2569
|
+
- lib/tasks/generate_inventory_items.rake
|
2489
2570
|
- lib/tasks/kh_location_option_values.rake
|
2490
2571
|
- lib/tasks/kh_provinces.rake
|
2572
|
+
- lib/tasks/migrate_and_rebuild_place_hierarchy.rake
|
2491
2573
|
- lib/tasks/remove_duplicate_device_tokens.rake
|
2492
2574
|
- lib/tasks/subscriptions_order_creator.rake
|
2493
2575
|
- lib/tasks/update_gateway_status.rake
|
2576
|
+
- lib/tasks/update_orphan_root_places.rake
|
2494
2577
|
- lib/tasks/update_taxons.rake
|
2495
2578
|
- lib/tasks/variants_public_metadata_updater.rake
|
2496
2579
|
- lib/tasks/vendor_updater.rake
|
@@ -2518,9 +2601,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
2518
2601
|
version: '2.7'
|
2519
2602
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
2520
2603
|
requirements:
|
2521
|
-
- - "
|
2604
|
+
- - ">"
|
2522
2605
|
- !ruby/object:Gem::Version
|
2523
|
-
version:
|
2606
|
+
version: 1.3.1
|
2524
2607
|
requirements:
|
2525
2608
|
- none
|
2526
2609
|
rubygems_version: 3.4.1
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module SpreeCmCommissioner
|
2
|
-
module VariantAvailability
|
3
|
-
class NonPermanentStockQuery
|
4
|
-
attr_reader :variant, :except_line_item_id, :error_message
|
5
|
-
|
6
|
-
def initialize(variant:, except_line_item_id: nil)
|
7
|
-
@variant = variant
|
8
|
-
@except_line_item_id = except_line_item_id
|
9
|
-
@error_message = nil
|
10
|
-
end
|
11
|
-
|
12
|
-
def available?(quantity)
|
13
|
-
reserve_variants =
|
14
|
-
Spree::LineItem
|
15
|
-
.complete
|
16
|
-
.select('(SUM(DISTINCT spree_stock_items.count_on_hand) - SUM(spree_line_items.quantity)) AS available_quantity')
|
17
|
-
.joins(variant: :stock_items)
|
18
|
-
.where(variant_id: variant.id)
|
19
|
-
.where.not(id: except_line_item_id)
|
20
|
-
.group(:variant_id)
|
21
|
-
|
22
|
-
# there is a case when variant does not have any purchaces yet, it will return empty & always available true.
|
23
|
-
# in this case, we check with stock items directly.
|
24
|
-
|
25
|
-
available_quantity = if reserve_variants.any?
|
26
|
-
reserve_variants.sum(&:available_quantity)
|
27
|
-
else
|
28
|
-
variant.stock_items.sum(:count_on_hand)
|
29
|
-
end
|
30
|
-
if available_quantity >= quantity
|
31
|
-
true
|
32
|
-
elsif available_quantity == 1
|
33
|
-
@error_message = I18n.t('variant_availability.item_available_instock')
|
34
|
-
false
|
35
|
-
elsif available_quantity <= 0
|
36
|
-
@error_message = I18n.t('variant_availability.items_out_of_stock')
|
37
|
-
false
|
38
|
-
else
|
39
|
-
@error_message = I18n.t('variant_availability.items_available_instock', available_quantity: available_quantity)
|
40
|
-
false
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
module SpreeCmCommissioner
|
2
|
-
module VariantAvailability
|
3
|
-
class PermanentStockQuery
|
4
|
-
attr_reader :variant, :from_date, :to_date, :except_line_item_id
|
5
|
-
|
6
|
-
def initialize(variant:, from_date:, to_date:, except_line_item_id: nil)
|
7
|
-
@variant = variant
|
8
|
-
@from_date = from_date
|
9
|
-
@to_date = to_date
|
10
|
-
@except_line_item_id = except_line_item_id
|
11
|
-
end
|
12
|
-
|
13
|
-
def available?(quantity)
|
14
|
-
(from_date..from_date).all? do |booking_date|
|
15
|
-
booked_date_quantity[booking_date].nil? ||
|
16
|
-
(booked_date_quantity[booking_date] - quantity) >= 0
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def booked_date_quantity
|
21
|
-
dates_sql = ApplicationRecord.sanitize_sql_array(
|
22
|
-
[
|
23
|
-
'SELECT date FROM generate_series(?::date, ?::date, ?) AS date',
|
24
|
-
from_date,
|
25
|
-
to_date,
|
26
|
-
date_interval
|
27
|
-
]
|
28
|
-
)
|
29
|
-
|
30
|
-
@booked_variants ||=
|
31
|
-
Spree::LineItem
|
32
|
-
.complete
|
33
|
-
.select(
|
34
|
-
'(SUM(DISTINCT spree_stock_items.count_on_hand) - SUM(spree_line_items.quantity)) AS available_quantity',
|
35
|
-
'dates.date AS reservation_date'
|
36
|
-
)
|
37
|
-
.joins(variant: :stock_items)
|
38
|
-
.where(variant_id: variant.id)
|
39
|
-
.where.not(id: except_line_item_id)
|
40
|
-
.joins("INNER JOIN (#{dates_sql}) dates ON dates.date >= spree_line_items.from_date AND dates.date < spree_line_items.to_date")
|
41
|
-
.group(:variant_id, :reservation_date)
|
42
|
-
.order(:reservation_date)
|
43
|
-
.each_with_object({}) do |record, hash|
|
44
|
-
hash[record.reservation_date.to_date] = record.available_quantity
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
# override this for product that have
|
49
|
-
# different date time interval than 1 day.
|
50
|
-
def date_interval
|
51
|
-
'1 day'
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|