spree_cm_commissioner 2.0.3.pre.pre6 → 2.0.3.pre.pre.pre7
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 +2 -16
- data/.gitignore +1 -2
- data/Gemfile.lock +4 -39
- data/Rakefile +4 -33
- data/app/assets/stylesheets/spree_cm_commissioner/backend/calendar.scss +11 -8
- data/app/controllers/concerns/spree_cm_commissioner/transit/taxon_bitwise.rb +44 -0
- data/app/controllers/spree/admin/stock_managements_controller.rb +1 -63
- data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +31 -14
- data/app/controllers/spree/api/v2/storefront/dynamic_fields_controller.rb +42 -0
- data/app/controllers/spree/api/v2/storefront/guests_controller.rb +2 -0
- data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +2 -2
- data/app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb +20 -0
- data/app/interactors/spree_cm_commissioner/create_vendor.rb +11 -1
- data/app/jobs/spree_cm_commissioner/application_job.rb +0 -20
- data/app/jobs/spree_cm_commissioner/application_unique_job.rb +0 -20
- data/app/models/concerns/spree_cm_commissioner/line_item_durationable.rb +15 -18
- data/app/models/concerns/spree_cm_commissioner/line_item_guests_concern.rb +15 -29
- data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +12 -2
- data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -39
- data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +3 -1
- data/app/models/concerns/spree_cm_commissioner/product_type.rb +0 -10
- data/app/models/concerns/spree_cm_commissioner/route_type.rb +1 -1
- data/app/models/spree_cm_commissioner/address_decorator.rb +2 -36
- data/app/models/spree_cm_commissioner/branch.rb +12 -0
- data/app/models/spree_cm_commissioner/guest.rb +85 -71
- data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +37 -27
- data/app/models/spree_cm_commissioner/line_item_decorator.rb +78 -47
- data/app/models/spree_cm_commissioner/line_item_seat.rb +10 -0
- data/app/models/spree_cm_commissioner/notification_taxon.rb +1 -1
- data/app/models/spree_cm_commissioner/option_type_decorator.rb +11 -1
- data/app/models/spree_cm_commissioner/option_value_vehicle_type.rb +8 -0
- data/app/models/spree_cm_commissioner/order/address_book_decorator.rb +12 -30
- data/app/models/spree_cm_commissioner/order_decorator.rb +1 -38
- data/app/models/spree_cm_commissioner/place.rb +4 -3
- data/app/models/spree_cm_commissioner/product_decorator.rb +6 -10
- data/app/models/spree_cm_commissioner/service_calendar.rb +2 -0
- data/app/models/spree_cm_commissioner/state_decorator.rb +1 -0
- data/app/models/spree_cm_commissioner/stock/availability_checker.rb +25 -26
- data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +1 -2
- data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
- data/app/models/spree_cm_commissioner/stock_item_decorator.rb +0 -17
- data/app/models/spree_cm_commissioner/stop.rb +23 -0
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +1 -0
- data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +6 -0
- data/app/models/spree_cm_commissioner/trip.rb +10 -19
- data/app/models/spree_cm_commissioner/trip_connection.rb +5 -5
- data/app/models/spree_cm_commissioner/trip_stop.rb +21 -10
- data/app/models/spree_cm_commissioner/user_decorator.rb +1 -1
- data/app/models/spree_cm_commissioner/variant_decorator.rb +47 -37
- data/app/models/spree_cm_commissioner/variant_options.rb +23 -0
- data/app/models/spree_cm_commissioner/vehicle.rb +16 -11
- data/app/models/spree_cm_commissioner/vehicle_seat.rb +11 -0
- data/app/models/spree_cm_commissioner/vehicle_type.rb +76 -0
- data/app/models/spree_cm_commissioner/vendor_decorator.rb +14 -14
- data/app/models/spree_cm_commissioner/vendor_place.rb +3 -13
- data/app/models/spree_cm_commissioner/vendor_stop.rb +10 -0
- data/app/queries/spree_cm_commissioner/trip_query.rb +131 -110
- data/app/queries/spree_cm_commissioner/trip_search_query.rb +76 -0
- data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +45 -0
- data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +55 -0
- data/app/queries/spree_cm_commissioner/vendor_stop_place_query.rb +54 -0
- data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +0 -3
- data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
- data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +0 -2
- data/app/serializers/spree/v2/storefront/line_item_serializer_decorator.rb +0 -1
- data/app/serializers/spree_cm_commissioner/v2/storefront/guest_serializer.rb +1 -3
- data/app/services/spree_cm_commissioner/vehicle_option_value_creator.rb +11 -0
- data/app/views/spree/admin/stock_managements/_variant_stock_items.html.erb +2 -7
- data/app/views/spree/admin/stock_managements/index.html.erb +6 -55
- data/config/initializers/spree_permitted_attributes.rb +0 -5
- data/config/routes.rb +3 -24
- data/db/migrate/20240202080634_update_counter_cache_of_vehicle_type.rb +1 -3
- data/db/migrate/20250812121745_add_data_fill_stage_phase_to_cm_guests.rb +5 -0
- data/docker-compose.yml +1 -1
- data/lib/cm_app_logger.rb +4 -11
- data/lib/generators/spree_cm_commissioner/install/install_generator.rb +11 -14
- data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_dashboard/spree_cm_commissioner → spree_cm_commissioner}/utilities.js +0 -4
- data/lib/spree_cm_commissioner/calendar_event.rb +1 -11
- data/lib/spree_cm_commissioner/test_helper/factories/branch_factory.rb +12 -0
- data/lib/spree_cm_commissioner/test_helper/factories/departure_time_option_type_factory.rb +8 -0
- data/lib/spree_cm_commissioner/test_helper/factories/duration_option_type_factory.rb +8 -0
- data/lib/spree_cm_commissioner/test_helper/factories/guest_factory.rb +0 -10
- data/lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb +1 -1
- data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +1 -1
- data/lib/spree_cm_commissioner/test_helper/factories/line_item_seat_factory.rb +7 -0
- data/lib/spree_cm_commissioner/test_helper/factories/option_type_factory.rb +30 -6
- data/lib/spree_cm_commissioner/test_helper/factories/order_factory.rb +36 -0
- data/lib/spree_cm_commissioner/test_helper/factories/product_factory.rb +34 -18
- data/lib/spree_cm_commissioner/test_helper/factories/stock_location_factory.rb +2 -2
- data/lib/spree_cm_commissioner/test_helper/factories/stop_factory.rb +14 -0
- data/lib/spree_cm_commissioner/test_helper/factories/transit_place_factory.rb +8 -0
- data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +3 -11
- data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +19 -41
- data/lib/spree_cm_commissioner/test_helper/factories/vehicle_factory.rb +1 -1
- data/lib/spree_cm_commissioner/test_helper/factories/vehicle_option_type_factory.rb +8 -0
- data/lib/spree_cm_commissioner/test_helper/factories/vehicle_type_factory.rb +96 -0
- data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +1 -6
- data/lib/spree_cm_commissioner/test_helper/factories/vendor_place_factory.rb +1 -13
- data/lib/spree_cm_commissioner/trip_query_result.rb +0 -50
- data/lib/spree_cm_commissioner/trip_result.rb +10 -19
- data/lib/spree_cm_commissioner/trip_seat_layout_result.rb +11 -0
- data/lib/spree_cm_commissioner/version.rb +1 -1
- data/lib/spree_cm_commissioner.rb +1 -37
- data/spree_cm_commissioner.gemspec +0 -7
- metadata +28 -163
- data/app/controllers/spree/admin/inventory_items_controller.rb +0 -83
- data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +0 -42
- data/app/controllers/spree/api/v2/storefront/trip_places_controller.rb +0 -29
- data/app/controllers/spree/api/v2/storefront/trip_search_controller.rb +0 -62
- data/app/finders/spree_cm_commissioner/accommodations/find.rb +0 -37
- data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +0 -32
- data/app/interactors/spree_cm_commissioner/ensure_correct_product_type.rb +0 -40
- data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +0 -25
- data/app/interactors/spree_cm_commissioner/stock/inventory_item_resetter.rb +0 -44
- data/app/interactors/spree_cm_commissioner/stock/inventory_items_adjuster.rb +0 -13
- data/app/interactors/spree_cm_commissioner/stock/inventory_items_generator.rb +0 -15
- data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +0 -75
- data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +0 -32
- data/app/interactors/spree_cm_commissioner/taxi_trip_creator.rb +0 -66
- data/app/interactors/spree_cm_commissioner/transit/draft_order_creator.rb +0 -132
- data/app/interactors/spree_cm_commissioner/variant_block_updater.rb +0 -62
- data/app/interactors/spree_cm_commissioner/vehicle_updater.rb +0 -41
- data/app/jobs/spree_cm_commissioner/ensure_correct_product_type_job.rb +0 -7
- data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +0 -7
- data/app/jobs/spree_cm_commissioner/stock/inventory_items_adjuster_job.rb +0 -11
- data/app/jobs/spree_cm_commissioner/stock/inventory_items_generator_job.rb +0 -11
- data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +0 -9
- data/app/models/concerns/spree_cm_commissioner/line_item_transitable.rb +0 -89
- data/app/models/concerns/spree_cm_commissioner/order_seatable.rb +0 -44
- data/app/models/concerns/spree_cm_commissioner/vehicle_type.rb +0 -11
- data/app/models/spree_cm_commissioner/block.rb +0 -43
- data/app/models/spree_cm_commissioner/inventory.rb +0 -11
- data/app/models/spree_cm_commissioner/inventory_item.rb +0 -69
- data/app/models/spree_cm_commissioner/price_decorator.rb +0 -9
- data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +0 -41
- data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +0 -126
- data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +0 -36
- data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +0 -25
- data/app/models/spree_cm_commissioner/reserved_block.rb +0 -30
- data/app/models/spree_cm_commissioner/saved_guest.rb +0 -15
- data/app/models/spree_cm_commissioner/seat_layout.rb +0 -20
- data/app/models/spree_cm_commissioner/seat_section.rb +0 -16
- data/app/models/spree_cm_commissioner/seats/blocks_canceler.rb +0 -30
- data/app/models/spree_cm_commissioner/seats/blocks_holder.rb +0 -53
- data/app/models/spree_cm_commissioner/seats/blocks_reserver.rb +0 -49
- data/app/models/spree_cm_commissioner/seats/errors/blocks_are_on_hold_by_other_guest.rb +0 -4
- data/app/models/spree_cm_commissioner/seats/errors/blocks_are_reserved_by_other_guest.rb +0 -4
- data/app/models/spree_cm_commissioner/seats/errors/blocks_are_reserved_by_same_guest.rb +0 -4
- data/app/models/spree_cm_commissioner/seats/errors/unable_to_save_reserved_block_record.rb +0 -4
- data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -44
- data/app/models/spree_cm_commissioner/variant_block.rb +0 -17
- data/app/request_schemas/spree_cm_commissioner/trip_search_request_schema.rb +0 -20
- data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +0 -19
- data/app/serializers/spree/v2/storefront/amenity_serializer.rb +0 -15
- data/app/serializers/spree/v2/storefront/trip_place_serializer.rb +0 -10
- data/app/serializers/spree/v2/storefront/trip_query_result_serializer.rb +0 -14
- data/app/serializers/spree/v2/storefront/trip_result_serializer.rb +0 -17
- data/app/serializers/spree/v2/storefront/trip_vehicle_serializer.rb +0 -11
- data/app/serializers/spree/v2/storefront/trip_vendor_serializer.rb +0 -13
- data/app/views/spree/admin/inventory_items/show.html.erb +0 -72
- data/app/views/spree/admin/stock_managements/calendar.html.erb +0 -56
- data/config/initializers/paper_trail.rb +0 -1
- data/db/migrate/20250122000000_move_route_type_from_vehicles_to_trips.rb +0 -7
- data/db/migrate/20250304293518_create_cm_inventory_items.rb +0 -21
- data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +0 -5
- data/db/migrate/20250502025848_add_index_to_spree_products.rb +0 -5
- data/db/migrate/20250502030001_add_product_type_to_spree_variants.rb +0 -5
- data/db/migrate/20250502030002_add_product_type_to_spree_line_items.rb +0 -5
- data/db/migrate/20250603035256_add_inventory_item_to_spree_prices.rb +0 -7
- data/db/migrate/20250619073724_drop_table_cm_line_item_seats.rb +0 -5
- data/db/migrate/20250619073812_drop_table_cm_vehicle_seats.rb +0 -5
- data/db/migrate/20250619073844_drop_table_cm_vehicle_types.rb +0 -9
- data/db/migrate/20250619073957_drop_table_cm_option_value_vehicle_types.rb +0 -5
- data/db/migrate/20250619082354_remove_unnecessary_fields_from_cm_places.rb +0 -9
- data/db/migrate/20250619082736_remove_route_type_from_spree_products.rb +0 -5
- data/db/migrate/20250619083055_remove_unnecessary_fields_from_spree_taxons.rb +0 -5
- data/db/migrate/20250620083055_remove_variant_id_from_cm_trips.rb +0 -5
- data/db/migrate/20250620090000_update_cm_trip_connections_to_use_cm_trips.rb +0 -6
- data/db/migrate/20250620090001_create_cm_seat_layouts.rb +0 -17
- data/db/migrate/20250620090002_create_cm_seat_sections.rb +0 -18
- data/db/migrate/20250620090003_create_cm_blocks.rb +0 -18
- data/db/migrate/20250624091005_create_cm_reserved_blocks.rb +0 -29
- data/db/migrate/20250626083642_create_cm_variant_blocks.rb +0 -24
- data/db/migrate/20250627023314_add_block_id_to_cm_guests.rb +0 -13
- data/db/migrate/20250716022821_add_location_reference_to_cm_vendor_places.rb +0 -5
- data/db/migrate/20250716031743_drop_table_cm_vendor_stops.rb +0 -5
- data/db/migrate/20250717023824_add_vendor_reference_to_cm_trips.rb +0 -5
- data/db/migrate/20250717041414_add_location_place_reference_to_cm_trip_stops.rb +0 -5
- data/db/migrate/20250717042539_rename_cm_trip_stops_stop_id_column_to_stop_place_id.rb +0 -7
- data/db/migrate/20250717042707_rename_cm_trips_origin_and_destination_to_origin_place_and_destination_place.rb +0 -11
- data/db/migrate/20250721080738_add_vehicle_type_to_cm_vehicles.rb +0 -7
- data/db/migrate/20250725092713_add_block_type_to_cm_blocks.rb +0 -5
- data/db/migrate/20250731062816_add_departure_time_and_arrival_time_to_trip_stop.rb +0 -6
- data/db/migrate/20250807033035_create_spree_cm_commissioner_saved_guests.rb +0 -23
- data/db/migrate/20250808054835_add_saved_guest_reference_to_cm_blocks.rb +0 -5
- data/lib/spree_cm_commissioner/cached_inventory_item.rb +0 -23
- data/lib/spree_cm_commissioner/test_helper/factories/block_factory.rb +0 -16
- data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +0 -9
- data/lib/spree_cm_commissioner/test_helper/factories/reserved_block_factory.rb +0 -27
- data/lib/spree_cm_commissioner/test_helper/factories/seat_layout_factory.rb +0 -11
- data/lib/spree_cm_commissioner/test_helper/factories/seat_section_factory.rb +0 -16
- data/lib/spree_cm_commissioner/test_helper/factories/trip_connection_factory.rb +0 -6
- data/lib/spree_cm_commissioner/test_helper/factories/trip_stop_factory.rb +0 -13
- data/lib/spree_cm_commissioner/test_helper/factories/variant_block_factory.rb +0 -7
- data/lib/spree_cm_commissioner/transit/leg.rb +0 -37
- data/lib/spree_cm_commissioner/transit/seat_selection.rb +0 -27
- data/lib/tasks/create_default_non_permanent_inventory_items.rake +0 -16
- data/lib/tasks/ensure_correct_product_type.rake +0 -7
- data/lib/tasks/generate_inventory_items.rake +0 -7
@@ -1,6 +1,6 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
module LineItemDecorator
|
3
|
-
def self.prepended(base) # rubocop:disable Metrics/MethodLength
|
3
|
+
def self.prepended(base) # rubocop:disable Metrics/MethodLength
|
4
4
|
include_modules(base)
|
5
5
|
|
6
6
|
base.belongs_to :accepter, class_name: 'Spree::User', optional: true
|
@@ -10,32 +10,31 @@ module SpreeCmCommissioner
|
|
10
10
|
base.has_one :google_wallet, class_name: 'SpreeCmCommissioner::GoogleWallet', through: :product
|
11
11
|
|
12
12
|
base.has_many :option_types, through: :product
|
13
|
-
|
14
|
-
base.has_many :inventory_items, lambda { |line_item|
|
15
|
-
where(inventory_date: nil).or(where(inventory_date: line_item.date_range))
|
16
|
-
}, through: :variant
|
17
|
-
|
18
13
|
base.has_many :taxons, class_name: 'Spree::Taxon', through: :product
|
19
14
|
base.has_many :guests, class_name: 'SpreeCmCommissioner::Guest', dependent: :destroy
|
20
|
-
base.has_many :guests_with_blocks, -> { where.not(block_id: nil) }, class_name: 'SpreeCmCommissioner::Guest'
|
21
|
-
base.has_many :reserved_blocks, through: :guests, class_name: 'SpreeCmCommissioner::ReservedBlock'
|
22
15
|
base.has_many :pending_guests, pending_guests_query, class_name: 'SpreeCmCommissioner::Guest', dependent: :destroy
|
23
16
|
base.has_many :product_completion_steps, class_name: 'SpreeCmCommissioner::ProductCompletionStep', through: :product
|
17
|
+
base.has_many :line_item_seats, class_name: 'SpreeCmCommissioner::LineItemSeat', dependent: :destroy
|
24
18
|
|
25
19
|
base.before_save :update_vendor_id
|
20
|
+
base.before_save :update_quantity, if: :transit?
|
21
|
+
|
22
|
+
base.validate :validate_seats_reservation, if: :transit?
|
26
23
|
|
27
24
|
base.before_create :add_due_date, if: :subscription?
|
28
|
-
base.before_save -> { self.product_type = variant.product_type }, if: -> { product_type.nil? }
|
29
25
|
|
30
26
|
base.validate :ensure_not_exceed_max_quantity_per_order, if: -> { variant&.max_quantity_per_order.present? }
|
31
27
|
|
32
28
|
base.whitelisted_ransackable_associations |= %w[guests order]
|
33
29
|
base.whitelisted_ransackable_attributes |= %w[number to_date from_date vendor_id]
|
34
30
|
|
35
|
-
base.delegate :delivery_required?, :high_demand,
|
31
|
+
base.delegate :delivery_required?, :permanent_stock?, :high_demand, :transit?,
|
36
32
|
to: :variant
|
33
|
+
base.delegate :discontinue_on, :product_type, :accommodation?, :service?, :ecommerce?, :need_confirmation,
|
34
|
+
to: :product
|
37
35
|
|
38
36
|
base.accepts_nested_attributes_for :guests, allow_destroy: true
|
37
|
+
base.accepts_nested_attributes_for :line_item_seats, allow_destroy: true
|
39
38
|
|
40
39
|
def base.json_api_columns
|
41
40
|
json_api_columns = column_names.reject { |c| c.match(/_id$|id|preferences|(.*)password|(.*)token|(.*)api_key/) }
|
@@ -43,10 +42,6 @@ module SpreeCmCommissioner
|
|
43
42
|
json_api_columns << :vendor_id
|
44
43
|
end
|
45
44
|
|
46
|
-
def discontinue_on
|
47
|
-
variant.discontinue_on || product.discontinue_on
|
48
|
-
end
|
49
|
-
|
50
45
|
def base.search_by_qr_data!(data)
|
51
46
|
matches = data.match(/(R\d+)-([A-Za-z0-9_\-]+)-(L\d+)/)&.captures
|
52
47
|
|
@@ -65,8 +60,6 @@ module SpreeCmCommissioner
|
|
65
60
|
base.include SpreeCmCommissioner::LineItemDurationable
|
66
61
|
base.include SpreeCmCommissioner::LineItemsFilterScope
|
67
62
|
base.include SpreeCmCommissioner::LineItemGuestsConcern
|
68
|
-
base.include SpreeCmCommissioner::LineItemTransitable
|
69
|
-
base.include SpreeCmCommissioner::ProductType
|
70
63
|
base.include SpreeCmCommissioner::ProductDelegation
|
71
64
|
base.include SpreeCmCommissioner::KycBitwise
|
72
65
|
end
|
@@ -82,39 +75,24 @@ module SpreeCmCommissioner
|
|
82
75
|
}
|
83
76
|
end
|
84
77
|
|
85
|
-
|
86
|
-
|
87
|
-
self.currency = currency
|
88
|
-
|
89
|
-
# these fields can be null during this process below.
|
90
|
-
# it is needed for permanent_stock?, date_range to work.
|
91
|
-
self.product_type = variant.product_type
|
92
|
-
self.from_date = opts.delete(:from_date)&.to_datetime
|
93
|
-
self.to_date = opts.delete(:to_date)&.to_datetime
|
94
|
-
|
95
|
-
base_price = variant.price_in(currency)
|
96
|
-
|
97
|
-
self.price = if permanent_stock?
|
98
|
-
date_range.map do |date|
|
99
|
-
selected_price = variant.price_for_date(date: date, currency: currency) || base_price
|
100
|
-
(selected_price.amount || 0) + variant.price_modifier_amount_in(currency, opts.merge(date: date))
|
101
|
-
end.sum
|
102
|
-
else
|
103
|
-
(base_price.amount || 0) + variant.price_modifier_amount_in(currency, opts)
|
104
|
-
end
|
78
|
+
def reservation?
|
79
|
+
date_present? && !subscription?
|
105
80
|
end
|
106
81
|
|
107
|
-
#
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
82
|
+
# date_unit could be number of nights, or days or hours depending on usecases
|
83
|
+
# For example:
|
84
|
+
# - accomodation uses number of nights.
|
85
|
+
# - appointment uses number of hours, etc.
|
86
|
+
#
|
87
|
+
# override
|
88
|
+
def amount
|
89
|
+
base_price = price * quantity
|
90
|
+
|
91
|
+
if permanent_stock? && date_unit.present?
|
92
|
+
base_price * date_unit
|
93
|
+
else
|
94
|
+
base_price
|
95
|
+
end
|
118
96
|
end
|
119
97
|
|
120
98
|
def allowed_self_check_in?
|
@@ -201,6 +179,8 @@ module SpreeCmCommissioner
|
|
201
179
|
|
202
180
|
# override
|
203
181
|
def sufficient_stock?
|
182
|
+
return transit_sufficient_stock? if variant.product.product_type == 'transit'
|
183
|
+
|
204
184
|
SpreeCmCommissioner::Stock::LineItemAvailabilityChecker.new(self).can_supply?(quantity)
|
205
185
|
end
|
206
186
|
|
@@ -219,6 +199,18 @@ module SpreeCmCommissioner
|
|
219
199
|
errors.add(:quantity, 'exceeded_max_quantity_per_order') if quantity > variant.max_quantity_per_order
|
220
200
|
end
|
221
201
|
|
202
|
+
def transit_sufficient_stock?
|
203
|
+
return selected_seats_available? if reservation_trip.allow_seat_selection
|
204
|
+
|
205
|
+
seat_quantity_available?(reservation_trip)
|
206
|
+
end
|
207
|
+
|
208
|
+
def update_quantity
|
209
|
+
return if line_item_seats.blank?
|
210
|
+
|
211
|
+
self.quantity = line_item_seats.size
|
212
|
+
end
|
213
|
+
|
222
214
|
def update_vendor_id
|
223
215
|
self.vendor_id = variant.vendor_id
|
224
216
|
end
|
@@ -241,6 +233,45 @@ module SpreeCmCommissioner
|
|
241
233
|
|
242
234
|
from_date + variant.month.month + day.days
|
243
235
|
end
|
236
|
+
|
237
|
+
def validate_seats_reservation
|
238
|
+
if reservation_trip.allow_seat_selection && !selected_seats_available?
|
239
|
+
errors.add(:base, :some_seats_are_booked, message: 'Some seats are already booked')
|
240
|
+
elsif !reservation_trip.allow_seat_selection && !seat_quantity_available?(reservation_trip)
|
241
|
+
errors.add(:quantity, :exceeded_available_quantity, message: 'exceeded available quantity')
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def selected_seats_available?
|
246
|
+
selected_seat_ids = line_item_seats.map(&:seat_id)
|
247
|
+
!selected_seat_ids_occupied?(selected_seat_ids)
|
248
|
+
end
|
249
|
+
|
250
|
+
def seat_quantity_available?(trip)
|
251
|
+
booked_quantity = Spree::LineItem.joins(:order)
|
252
|
+
.where(variant_id: variant_id, date: date, spree_orders: { state: 'complete' })
|
253
|
+
.where.not(spree_line_items: { id: id })
|
254
|
+
.sum(:quantity)
|
255
|
+
remaining_quantity = trip.vehicle.number_of_seats - booked_quantity
|
256
|
+
remaining_quantity >= quantity
|
257
|
+
end
|
258
|
+
|
259
|
+
def reservation_trip
|
260
|
+
return @trip if defined? @trip
|
261
|
+
|
262
|
+
route = Spree::Variant.find_by(id: variant_id).product
|
263
|
+
@trip = route.trip
|
264
|
+
end
|
265
|
+
|
266
|
+
def selected_seat_ids_occupied?(selected_seat_ids)
|
267
|
+
# check to see if there are any selected_ids exist in the line_item_seats and belongs to completed order
|
268
|
+
SpreeCmCommissioner::LineItemSeat.joins(line_item: :order)
|
269
|
+
.where(seat_id: selected_seat_ids, date: date, variant_id: variant_id, spree_orders: { state: 'complete',
|
270
|
+
canceled_at: nil
|
271
|
+
}
|
272
|
+
)
|
273
|
+
.present?
|
274
|
+
end
|
244
275
|
end
|
245
276
|
end
|
246
277
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require_dependency 'spree_cm_commissioner'
|
2
|
+
module SpreeCmCommissioner
|
3
|
+
class LineItemSeat < SpreeCmCommissioner::Base
|
4
|
+
belongs_to :line_item, class_name: 'Spree::LineItem'
|
5
|
+
belongs_to :seat, class_name: 'SpreeCmCommissioner::VehicleSeat'
|
6
|
+
belongs_to :variant, class_name: 'Spree::Variant'
|
7
|
+
|
8
|
+
validates :date, presence: true
|
9
|
+
end
|
10
|
+
end
|
@@ -6,7 +6,7 @@ module SpreeCmCommissioner
|
|
6
6
|
base.include SpreeCmCommissioner::ParameterizeName
|
7
7
|
base.include SpreeCmCommissioner::OptionTypeAttrType
|
8
8
|
|
9
|
-
base.enum kind: %i[variant product vendor
|
9
|
+
base.enum kind: %i[variant product vendor vehicle_type transit]
|
10
10
|
|
11
11
|
base.validates :name, presence: true
|
12
12
|
|
@@ -19,6 +19,16 @@ module SpreeCmCommissioner
|
|
19
19
|
base.scope :promoted, -> { where(promoted: true) }
|
20
20
|
base.whitelisted_ransackable_attributes = %w[kind]
|
21
21
|
|
22
|
+
def base.amenities
|
23
|
+
Spree::OptionType.where(kind: 'vehicle_type', name: 'amenities', presentation: 'Amenities', attr_type: 'amenity').first_or_create
|
24
|
+
end
|
25
|
+
|
26
|
+
def base.vehicle
|
27
|
+
Spree::OptionType.where(presentation: 'vehicle', attr_type: 'vehicle_id', kind: 'variant',
|
28
|
+
name: 'vehicle'
|
29
|
+
).first_or_create
|
30
|
+
end
|
31
|
+
|
22
32
|
def base.rules_option_type
|
23
33
|
Spree::OptionType.find_by(name: RULES_OPTION_TYPE_NAME)
|
24
34
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require_dependency 'spree_cm_commissioner'
|
2
|
+
|
3
|
+
module SpreeCmCommissioner
|
4
|
+
class OptionValueVehicleType < ApplicationRecord
|
5
|
+
belongs_to :vehicle_type, class_name: 'SpreeCmCommissioner::VehicleType', dependent: :destroy
|
6
|
+
belongs_to :option_value, class_name: 'Spree::OptionValue', dependent: :destroy
|
7
|
+
end
|
8
|
+
end
|
@@ -5,48 +5,30 @@
|
|
5
5
|
module SpreeCmCommissioner
|
6
6
|
module Order
|
7
7
|
module AddressBookDecorator
|
8
|
+
def guest_order? = user.blank?
|
9
|
+
|
8
10
|
# override
|
9
11
|
def bill_address_attributes=(attributes)
|
10
|
-
attributes[:id] =
|
11
|
-
|
12
|
+
attributes[:id] = bill_address&.id if attributes[:id].blank?
|
13
|
+
return if guest_order? && !basic_info_included?(attributes)
|
12
14
|
|
13
|
-
|
14
|
-
user.bill_address = bill_address if user && user.bill_address.nil?
|
15
|
+
super
|
15
16
|
end
|
16
17
|
|
17
18
|
# override
|
18
19
|
def ship_address_attributes=(attributes)
|
19
|
-
attributes[:id] =
|
20
|
-
|
20
|
+
attributes[:id] = bill_address&.id if attributes[:id].blank?
|
21
|
+
return if guest_order? && !basic_info_included?(attributes)
|
21
22
|
|
22
|
-
|
23
|
-
user.ship_address = ship_address if user && user.ship_address.nil?
|
23
|
+
super
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
return if attributes.blank?
|
28
|
-
|
29
|
-
attributes.transform_values! { |v| v == '' ? nil : v }
|
30
|
-
attributes = attributes.to_h.symbolize_keys
|
26
|
+
private
|
31
27
|
|
32
|
-
|
33
|
-
|
34
|
-
if existing_address&.editable?
|
35
|
-
existing_address.assign_attributes(attributes)
|
36
|
-
existing_address
|
37
|
-
else
|
38
|
-
::Spree::Address.new(attributes.except(:id, :updated_at, :created_at))
|
39
|
-
end
|
40
|
-
end
|
28
|
+
def basic_info_included?(attributes)
|
29
|
+
return true if attributes[:id].present?
|
41
30
|
|
42
|
-
|
43
|
-
if user.present?
|
44
|
-
::Spree::Address.where('(user_id = ? OR user_id IS NULL) AND deleted_at IS NULL', user.id)
|
45
|
-
.find_by(id: id)
|
46
|
-
else
|
47
|
-
::Spree::Address.where(user_id: nil, deleted_at: nil)
|
48
|
-
.find_by(id: id)
|
49
|
-
end
|
31
|
+
%i[firstname lastname phone].all? { |key| attributes[key].present? }
|
50
32
|
end
|
51
33
|
end
|
52
34
|
end
|
@@ -2,7 +2,6 @@ module SpreeCmCommissioner
|
|
2
2
|
module OrderDecorator
|
3
3
|
def self.prepended(base) # rubocop:disable Metrics/MethodLength,Metrics/AbcSize
|
4
4
|
base.include SpreeCmCommissioner::PhoneNumberSanitizer
|
5
|
-
base.include SpreeCmCommissioner::OrderSeatable
|
6
5
|
base.include SpreeCmCommissioner::OrderStateMachine
|
7
6
|
|
8
7
|
base.scope :subscription, -> { where.not(subscription_id: nil) }
|
@@ -43,14 +42,6 @@ module SpreeCmCommissioner
|
|
43
42
|
base.has_many :vendors, through: :products, class_name: 'Spree::Vendor'
|
44
43
|
base.has_many :taxons, through: :products, class_name: 'Spree::Taxon'
|
45
44
|
base.has_many :guests, through: :line_items, class_name: 'SpreeCmCommissioner::Guest'
|
46
|
-
|
47
|
-
base.has_many :saved_guests, -> { distinct.reorder('cm_saved_guests.created_at DESC') },
|
48
|
-
through: :guests,
|
49
|
-
source: :saved_guest,
|
50
|
-
class_name: 'SpreeCmCommissioner::SavedGuest'
|
51
|
-
|
52
|
-
base.has_many :blocks, through: :guests, class_name: 'SpreeCmCommissioner::Block', source: :block
|
53
|
-
base.has_many :reserved_blocks, through: :guests, class_name: 'SpreeCmCommissioner::ReservedBlock'
|
54
45
|
base.has_many :guest_card_classes, class_name: 'SpreeCmCommissioner::GuestCardClass', through: :variants
|
55
46
|
|
56
47
|
base.delegate :customer, to: :user, allow_nil: true
|
@@ -58,8 +49,6 @@ module SpreeCmCommissioner
|
|
58
49
|
base.whitelisted_ransackable_associations |= %w[customer taxon payments guests invoice]
|
59
50
|
base.whitelisted_ransackable_attributes |= %w[intel_phone_number phone_number email number state]
|
60
51
|
|
61
|
-
base.accepts_nested_attributes_for :saved_guests, allow_destroy: true
|
62
|
-
|
63
52
|
def base.search_by_qr_data!(data)
|
64
53
|
token = data.match(/^R\d{9,}-([A-Za-z0-9_\-]+)$/)&.captures
|
65
54
|
|
@@ -69,13 +58,6 @@ module SpreeCmCommissioner
|
|
69
58
|
end
|
70
59
|
end
|
71
60
|
|
72
|
-
# override
|
73
|
-
# spree use this method to check stock availability & consider whether :order can continue to next state.
|
74
|
-
def insufficient_stock_lines
|
75
|
-
checker = SpreeCmCommissioner::Stock::OrderAvailabilityChecker.new(self)
|
76
|
-
checker.insufficient_stock_lines
|
77
|
-
end
|
78
|
-
|
79
61
|
def ticket_seller_user?
|
80
62
|
return false if user.nil?
|
81
63
|
|
@@ -124,14 +106,7 @@ module SpreeCmCommissioner
|
|
124
106
|
end
|
125
107
|
|
126
108
|
def mark_as_archive
|
127
|
-
|
128
|
-
cancel_blocks!
|
129
|
-
true
|
130
|
-
rescue StandardError
|
131
|
-
false
|
132
|
-
end
|
133
|
-
|
134
|
-
update(archived_at: Time.current) if blocks_canceled
|
109
|
+
update(archived_at: Time.current)
|
135
110
|
end
|
136
111
|
|
137
112
|
# overrided
|
@@ -224,18 +199,6 @@ module SpreeCmCommissioner
|
|
224
199
|
|
225
200
|
private
|
226
201
|
|
227
|
-
def unstock_inventory_in_redis!
|
228
|
-
CmAppLogger.log(label: "#{self.class.name}#unstock_inventory_in_redis!", data: { order_id: id }) do
|
229
|
-
SpreeCmCommissioner::RedisStock::InventoryUpdater.new(line_item_ids).unstock!
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
def restock_inventory_in_redis!
|
234
|
-
CmAppLogger.log(label: "#{self.class.name}#restock_inventory_in_redis!", data: { order_id: id }) do
|
235
|
-
SpreeCmCommissioner::RedisStock::InventoryUpdater.new(line_item_ids).restock!
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
202
|
# override :spree_api
|
240
203
|
def webhook_payload_body
|
241
204
|
resource_serializer.new(
|
@@ -1,5 +1,7 @@
|
|
1
|
+
require_dependency 'spree_cm_commissioner'
|
2
|
+
|
1
3
|
module SpreeCmCommissioner
|
2
|
-
class Place <
|
4
|
+
class Place < ApplicationRecord
|
3
5
|
acts_as_nested_set
|
4
6
|
|
5
7
|
validates :reference, presence: true, if: :validate_reference?
|
@@ -14,9 +16,8 @@ module SpreeCmCommissioner
|
|
14
16
|
has_many :product_places, class_name: 'SpreeCmCommissioner::ProductPlace', dependent: :destroy
|
15
17
|
has_many :products, through: :product_places
|
16
18
|
|
17
|
-
has_many :location_vendor_places, -> { where(place_type: :location) }, class_name: 'SpreeCmCommissioner::VendorPlace'
|
18
|
-
|
19
19
|
has_many :children, -> { order(:lft) }, class_name: 'SpreeCmCommissioner::Place', foreign_key: :parent_id, dependent: :destroy
|
20
|
+
has_many :vendor_stops, class_name: 'SpreeCmCommissioner::VendorStop', dependent: :destroy, foreign_key: :stop_id
|
20
21
|
|
21
22
|
has_many :taxon_places, class_name: 'SpreeCmCommissioner::TaxonPlace', dependent: :destroy
|
22
23
|
has_many :taxons, through: :taxon_places
|
@@ -6,6 +6,7 @@ module SpreeCmCommissioner
|
|
6
6
|
base.include SpreeCmCommissioner::KycBitwise
|
7
7
|
base.include SpreeCmCommissioner::Metafield
|
8
8
|
base.include SpreeCmCommissioner::TenantUpdatable
|
9
|
+
base.include SpreeCmCommissioner::RouteType
|
9
10
|
|
10
11
|
base.has_many :variant_kind_option_types, -> { where(kind: :variant).order(:position) },
|
11
12
|
through: :product_option_types, source: :option_type
|
@@ -32,7 +33,6 @@ module SpreeCmCommissioner
|
|
32
33
|
base.has_one :google_wallet, class_name: 'SpreeCmCommissioner::GoogleWallet', dependent: :destroy
|
33
34
|
|
34
35
|
base.has_many :complete_line_items, through: :classifications, source: :line_items
|
35
|
-
base.has_many :inventory_items, through: :variants
|
36
36
|
base.has_many :guests, through: :line_items
|
37
37
|
|
38
38
|
base.has_many :product_places, class_name: 'SpreeCmCommissioner::ProductPlace', dependent: :destroy
|
@@ -67,11 +67,12 @@ module SpreeCmCommissioner
|
|
67
67
|
base.before_validation :set_event_id
|
68
68
|
|
69
69
|
base.validate :validate_event_taxons, if: -> { taxons.event.present? }
|
70
|
+
|
70
71
|
base.validate :validate_product_date, if: -> { available_on.present? && discontinue_on.present? }
|
71
|
-
|
72
|
+
|
72
73
|
base.validates :commission_rate, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 100 }, allow_nil: true
|
73
74
|
|
74
|
-
base.whitelisted_ransackable_attributes = %w[description name slug discontinue_on status vendor_id short_name]
|
75
|
+
base.whitelisted_ransackable_attributes = %w[description name slug discontinue_on status vendor_id short_name route_type]
|
75
76
|
|
76
77
|
base.after_update :update_variants_vendor_id, if: :saved_change_to_vendor_id?
|
77
78
|
base.after_update :sync_event_id_to_children, if: :saved_change_to_event_id?
|
@@ -88,6 +89,8 @@ module SpreeCmCommissioner
|
|
88
89
|
request_to_book: 8
|
89
90
|
}
|
90
91
|
|
92
|
+
base.accepts_nested_attributes_for :trip, allow_destroy: true
|
93
|
+
|
91
94
|
base.multi_tenant :tenant, class_name: 'SpreeCmCommissioner::Tenant'
|
92
95
|
base.before_save :set_tenant
|
93
96
|
end
|
@@ -162,13 +165,6 @@ module SpreeCmCommissioner
|
|
162
165
|
|
163
166
|
errors.add(:discontinue_on, 'must be after the available on date')
|
164
167
|
end
|
165
|
-
|
166
|
-
def product_type_unchanged
|
167
|
-
return if product_type_was.nil?
|
168
|
-
return unless product_type_changed?
|
169
|
-
|
170
|
-
errors.add(:product_type, 'cannot be changed once set')
|
171
|
-
end
|
172
168
|
end
|
173
169
|
end
|
174
170
|
|
@@ -3,6 +3,7 @@ module SpreeCmCommissioner
|
|
3
3
|
def self.prepended(base)
|
4
4
|
base.whitelisted_ransackable_attributes |= %w[name abbr country_id]
|
5
5
|
base.has_many :vendors, foreign_key: 'default_state_id', class_name: 'Spree::Vendor', inverse_of: :default_state, dependent: :nullify
|
6
|
+
base.has_many :stops, class_name: 'SpreeCmCommissioner::Place'
|
6
7
|
|
7
8
|
def update_total_inventory
|
8
9
|
update(total_inventory: vendors.pluck(:total_inventory).compact.sum)
|
@@ -1,48 +1,47 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
module Stock
|
3
3
|
class AvailabilityChecker
|
4
|
-
attr_reader :variant, :
|
4
|
+
attr_reader :variant, :error_message
|
5
5
|
|
6
|
-
def initialize(variant
|
6
|
+
def initialize(variant)
|
7
7
|
@variant = variant
|
8
|
-
@options = options
|
9
8
|
@error_message = nil
|
10
9
|
end
|
11
10
|
|
12
|
-
def can_supply?(quantity = 1)
|
11
|
+
def can_supply?(quantity = 1, options = {})
|
13
12
|
return false unless variant.available?
|
14
13
|
return true unless variant.should_track_inventory?
|
15
14
|
return true if variant.backorderable?
|
16
15
|
return true if variant.need_confirmation?
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
def variant_available?(quantity = 1)
|
22
|
-
return false if cached_inventory_items.empty?
|
23
|
-
|
24
|
-
cached_inventory_items.all? do |cached_inventory_item|
|
25
|
-
cached_inventory_item.active? && cached_inventory_item.quantity_available >= quantity
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def cached_inventory_items
|
30
|
-
return @cached_inventory_items if defined?(@cached_inventory_items)
|
17
|
+
# when delivery required, shipment will dynamically add / remove unit from stock item.
|
18
|
+
# so we can directly check can_supply with stock items directly.
|
19
|
+
return variant.stock_items.sum(:count_on_hand) >= quantity if variant.delivery_required?
|
31
20
|
|
32
21
|
if variant.permanent_stock?
|
33
|
-
|
34
|
-
|
35
|
-
dates = options[:from_date].to_date..options[:to_date].to_date
|
36
|
-
@cached_inventory_items = builder_klass.new(variant_id: variant.id, dates: dates).call
|
37
|
-
@cached_inventory_items = [] if @cached_inventory_items.size != dates.count
|
38
|
-
@cached_inventory_items
|
22
|
+
permanent_stock_variant_available?(quantity, options)
|
39
23
|
else
|
40
|
-
|
24
|
+
variant_available?(quantity, options)
|
41
25
|
end
|
42
26
|
end
|
43
27
|
|
44
|
-
def
|
45
|
-
|
28
|
+
def variant_available?(quantity = 1, options = {})
|
29
|
+
query = SpreeCmCommissioner::VariantAvailability::NonPermanentStockQuery.new(
|
30
|
+
variant: variant,
|
31
|
+
except_line_item_id: options[:except_line_item_id]
|
32
|
+
)
|
33
|
+
result = query.available?(quantity)
|
34
|
+
@error_message = query.error_message unless result
|
35
|
+
result
|
36
|
+
end
|
37
|
+
|
38
|
+
def permanent_stock_variant_available?(quantity = 1, options = {})
|
39
|
+
SpreeCmCommissioner::VariantAvailability::PermanentStockQuery.new(
|
40
|
+
variant: variant,
|
41
|
+
from_date: options[:from_date].to_date,
|
42
|
+
to_date: options[:to_date].to_date,
|
43
|
+
except_line_item_id: options[:except_line_item_id]
|
44
|
+
).available?(quantity)
|
46
45
|
end
|
47
46
|
end
|
48
47
|
end
|
@@ -3,8 +3,7 @@ module SpreeCmCommissioner
|
|
3
3
|
module AvailabilityValidatorDecorator
|
4
4
|
# override
|
5
5
|
def item_available?(line_item, quantity)
|
6
|
-
SpreeCmCommissioner::Stock::LineItemAvailabilityChecker.new(line_item)
|
7
|
-
.can_supply?(quantity)
|
6
|
+
SpreeCmCommissioner::Stock::LineItemAvailabilityChecker.new(line_item).can_supply?(quantity)
|
8
7
|
end
|
9
8
|
end
|
10
9
|
end
|
@@ -8,14 +8,14 @@ module SpreeCmCommissioner
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def can_supply?(quantity)
|
11
|
-
|
12
|
-
.can_supply?(quantity)
|
11
|
+
AvailabilityChecker.new(line_item.variant).can_supply?(quantity, options)
|
13
12
|
end
|
14
13
|
|
15
14
|
def options
|
16
15
|
{
|
17
16
|
from_date: line_item.from_date,
|
18
|
-
to_date: line_item.to_date
|
17
|
+
to_date: line_item.to_date,
|
18
|
+
except_line_item_id: line_item.id
|
19
19
|
}
|
20
20
|
end
|
21
21
|
end
|
@@ -3,28 +3,11 @@ module SpreeCmCommissioner
|
|
3
3
|
def self.prepended(base)
|
4
4
|
base.has_one :vendor, through: :variant
|
5
5
|
base.after_save :update_vendor_total_inventory, if: :saved_change_to_count_on_hand?
|
6
|
-
|
7
|
-
base.after_commit :create_inventory_items, on: :create
|
8
|
-
base.after_commit :adjust_inventory_items_async, on: :destroy
|
9
6
|
end
|
10
7
|
|
11
8
|
def update_vendor_total_inventory
|
12
9
|
SpreeCmCommissioner::VendorJob.perform_later(vendor.id) if vendor.present?
|
13
10
|
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def create_inventory_items
|
18
|
-
SpreeCmCommissioner::Stock::InventoryItemsGeneratorJob.perform_later(variant_id: variant.id)
|
19
|
-
end
|
20
|
-
|
21
|
-
# When admin delete stock item, it will deduct stock from inventory item
|
22
|
-
def adjust_inventory_items_async
|
23
|
-
params = { variant_id: variant.id, quantity: -count_on_hand }
|
24
|
-
CmAppLogger.log(label: "#{self.class.name}#adjust_inventory_items_async", data: params) do
|
25
|
-
SpreeCmCommissioner::Stock::InventoryItemsAdjusterJob.perform_later(**params)
|
26
|
-
end
|
27
|
-
end
|
28
11
|
end
|
29
12
|
end
|
30
13
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_dependency 'spree_cm_commissioner'
|
2
|
+
|
3
|
+
module SpreeCmCommissioner
|
4
|
+
class Stop < SpreeCmCommissioner::Place
|
5
|
+
belongs_to :branch, class_name: 'SpreeCmCommissioner::Branch'
|
6
|
+
belongs_to :state, class_name: 'Spree::State', optional: true
|
7
|
+
belongs_to :vendor, class_name: 'Spree::Vendor'
|
8
|
+
|
9
|
+
after_save :add_to_option_value
|
10
|
+
|
11
|
+
def validate_reference?
|
12
|
+
false
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_to_option_value
|
16
|
+
origin = Spree::OptionType.find_by(attr_type: 'origin')&.id
|
17
|
+
destination = Spree::OptionType.find_by(attr_type: 'destination')&.id
|
18
|
+
|
19
|
+
Spree::OptionValue.create(option_type_id: origin, name: name, presentation: id)
|
20
|
+
Spree::OptionValue.create(option_type_id: destination, name: name, presentation: id)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -2,6 +2,7 @@ module SpreeCmCommissioner
|
|
2
2
|
module TaxonDecorator
|
3
3
|
def self.prepended(base) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
4
4
|
base.include SpreeCmCommissioner::TaxonKind
|
5
|
+
base.include SpreeCmCommissioner::Transit::TaxonBitwise
|
5
6
|
base.include SpreeCmCommissioner::ParticipationTypeBitwise
|
6
7
|
base.include SpreeCmCommissioner::EventCheckInFlowable
|
7
8
|
|
@@ -8,6 +8,12 @@ module SpreeCmCommissioner
|
|
8
8
|
Spree::Taxonomy.find_or_create_by(name: 'Businesses', kind: 'category', store: Spree::Store.default)
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
def base.place
|
13
|
+
ActiveRecord::Base.connected_to(role: :writing) do
|
14
|
+
Spree::Taxonomy.find_or_create_by(name: 'Place', kind: 'transit', store: Spree::Store.default)
|
15
|
+
end
|
16
|
+
end
|
11
17
|
end
|
12
18
|
end
|
13
19
|
end
|