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.
Files changed (210) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test_and_build_gem.yml +2 -16
  3. data/.gitignore +1 -2
  4. data/Gemfile.lock +4 -39
  5. data/Rakefile +4 -33
  6. data/app/assets/stylesheets/spree_cm_commissioner/backend/calendar.scss +11 -8
  7. data/app/controllers/concerns/spree_cm_commissioner/transit/taxon_bitwise.rb +44 -0
  8. data/app/controllers/spree/admin/stock_managements_controller.rb +1 -63
  9. data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +31 -14
  10. data/app/controllers/spree/api/v2/storefront/dynamic_fields_controller.rb +42 -0
  11. data/app/controllers/spree/api/v2/storefront/guests_controller.rb +2 -0
  12. data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +2 -2
  13. data/app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb +20 -0
  14. data/app/interactors/spree_cm_commissioner/create_vendor.rb +11 -1
  15. data/app/jobs/spree_cm_commissioner/application_job.rb +0 -20
  16. data/app/jobs/spree_cm_commissioner/application_unique_job.rb +0 -20
  17. data/app/models/concerns/spree_cm_commissioner/line_item_durationable.rb +15 -18
  18. data/app/models/concerns/spree_cm_commissioner/line_item_guests_concern.rb +15 -29
  19. data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +12 -2
  20. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -39
  21. data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +3 -1
  22. data/app/models/concerns/spree_cm_commissioner/product_type.rb +0 -10
  23. data/app/models/concerns/spree_cm_commissioner/route_type.rb +1 -1
  24. data/app/models/spree_cm_commissioner/address_decorator.rb +2 -36
  25. data/app/models/spree_cm_commissioner/branch.rb +12 -0
  26. data/app/models/spree_cm_commissioner/guest.rb +85 -71
  27. data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +37 -27
  28. data/app/models/spree_cm_commissioner/line_item_decorator.rb +78 -47
  29. data/app/models/spree_cm_commissioner/line_item_seat.rb +10 -0
  30. data/app/models/spree_cm_commissioner/notification_taxon.rb +1 -1
  31. data/app/models/spree_cm_commissioner/option_type_decorator.rb +11 -1
  32. data/app/models/spree_cm_commissioner/option_value_vehicle_type.rb +8 -0
  33. data/app/models/spree_cm_commissioner/order/address_book_decorator.rb +12 -30
  34. data/app/models/spree_cm_commissioner/order_decorator.rb +1 -38
  35. data/app/models/spree_cm_commissioner/place.rb +4 -3
  36. data/app/models/spree_cm_commissioner/product_decorator.rb +6 -10
  37. data/app/models/spree_cm_commissioner/service_calendar.rb +2 -0
  38. data/app/models/spree_cm_commissioner/state_decorator.rb +1 -0
  39. data/app/models/spree_cm_commissioner/stock/availability_checker.rb +25 -26
  40. data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +1 -2
  41. data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
  42. data/app/models/spree_cm_commissioner/stock_item_decorator.rb +0 -17
  43. data/app/models/spree_cm_commissioner/stop.rb +23 -0
  44. data/app/models/spree_cm_commissioner/taxon_decorator.rb +1 -0
  45. data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +6 -0
  46. data/app/models/spree_cm_commissioner/trip.rb +10 -19
  47. data/app/models/spree_cm_commissioner/trip_connection.rb +5 -5
  48. data/app/models/spree_cm_commissioner/trip_stop.rb +21 -10
  49. data/app/models/spree_cm_commissioner/user_decorator.rb +1 -1
  50. data/app/models/spree_cm_commissioner/variant_decorator.rb +47 -37
  51. data/app/models/spree_cm_commissioner/variant_options.rb +23 -0
  52. data/app/models/spree_cm_commissioner/vehicle.rb +16 -11
  53. data/app/models/spree_cm_commissioner/vehicle_seat.rb +11 -0
  54. data/app/models/spree_cm_commissioner/vehicle_type.rb +76 -0
  55. data/app/models/spree_cm_commissioner/vendor_decorator.rb +14 -14
  56. data/app/models/spree_cm_commissioner/vendor_place.rb +3 -13
  57. data/app/models/spree_cm_commissioner/vendor_stop.rb +10 -0
  58. data/app/queries/spree_cm_commissioner/trip_query.rb +131 -110
  59. data/app/queries/spree_cm_commissioner/trip_search_query.rb +76 -0
  60. data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +45 -0
  61. data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +55 -0
  62. data/app/queries/spree_cm_commissioner/vendor_stop_place_query.rb +54 -0
  63. data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +0 -3
  64. data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
  65. data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +0 -2
  66. data/app/serializers/spree/v2/storefront/line_item_serializer_decorator.rb +0 -1
  67. data/app/serializers/spree_cm_commissioner/v2/storefront/guest_serializer.rb +1 -3
  68. data/app/services/spree_cm_commissioner/vehicle_option_value_creator.rb +11 -0
  69. data/app/views/spree/admin/stock_managements/_variant_stock_items.html.erb +2 -7
  70. data/app/views/spree/admin/stock_managements/index.html.erb +6 -55
  71. data/config/initializers/spree_permitted_attributes.rb +0 -5
  72. data/config/routes.rb +3 -24
  73. data/db/migrate/20240202080634_update_counter_cache_of_vehicle_type.rb +1 -3
  74. data/db/migrate/20250812121745_add_data_fill_stage_phase_to_cm_guests.rb +5 -0
  75. data/docker-compose.yml +1 -1
  76. data/lib/cm_app_logger.rb +4 -11
  77. data/lib/generators/spree_cm_commissioner/install/install_generator.rb +11 -14
  78. data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_dashboard/spree_cm_commissioner → spree_cm_commissioner}/utilities.js +0 -4
  79. data/lib/spree_cm_commissioner/calendar_event.rb +1 -11
  80. data/lib/spree_cm_commissioner/test_helper/factories/branch_factory.rb +12 -0
  81. data/lib/spree_cm_commissioner/test_helper/factories/departure_time_option_type_factory.rb +8 -0
  82. data/lib/spree_cm_commissioner/test_helper/factories/duration_option_type_factory.rb +8 -0
  83. data/lib/spree_cm_commissioner/test_helper/factories/guest_factory.rb +0 -10
  84. data/lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb +1 -1
  85. data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +1 -1
  86. data/lib/spree_cm_commissioner/test_helper/factories/line_item_seat_factory.rb +7 -0
  87. data/lib/spree_cm_commissioner/test_helper/factories/option_type_factory.rb +30 -6
  88. data/lib/spree_cm_commissioner/test_helper/factories/order_factory.rb +36 -0
  89. data/lib/spree_cm_commissioner/test_helper/factories/product_factory.rb +34 -18
  90. data/lib/spree_cm_commissioner/test_helper/factories/stock_location_factory.rb +2 -2
  91. data/lib/spree_cm_commissioner/test_helper/factories/stop_factory.rb +14 -0
  92. data/lib/spree_cm_commissioner/test_helper/factories/transit_place_factory.rb +8 -0
  93. data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +3 -11
  94. data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +19 -41
  95. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_factory.rb +1 -1
  96. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_option_type_factory.rb +8 -0
  97. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_type_factory.rb +96 -0
  98. data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +1 -6
  99. data/lib/spree_cm_commissioner/test_helper/factories/vendor_place_factory.rb +1 -13
  100. data/lib/spree_cm_commissioner/trip_query_result.rb +0 -50
  101. data/lib/spree_cm_commissioner/trip_result.rb +10 -19
  102. data/lib/spree_cm_commissioner/trip_seat_layout_result.rb +11 -0
  103. data/lib/spree_cm_commissioner/version.rb +1 -1
  104. data/lib/spree_cm_commissioner.rb +1 -37
  105. data/spree_cm_commissioner.gemspec +0 -7
  106. metadata +28 -163
  107. data/app/controllers/spree/admin/inventory_items_controller.rb +0 -83
  108. data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +0 -42
  109. data/app/controllers/spree/api/v2/storefront/trip_places_controller.rb +0 -29
  110. data/app/controllers/spree/api/v2/storefront/trip_search_controller.rb +0 -62
  111. data/app/finders/spree_cm_commissioner/accommodations/find.rb +0 -37
  112. data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +0 -32
  113. data/app/interactors/spree_cm_commissioner/ensure_correct_product_type.rb +0 -40
  114. data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +0 -25
  115. data/app/interactors/spree_cm_commissioner/stock/inventory_item_resetter.rb +0 -44
  116. data/app/interactors/spree_cm_commissioner/stock/inventory_items_adjuster.rb +0 -13
  117. data/app/interactors/spree_cm_commissioner/stock/inventory_items_generator.rb +0 -15
  118. data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +0 -75
  119. data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +0 -32
  120. data/app/interactors/spree_cm_commissioner/taxi_trip_creator.rb +0 -66
  121. data/app/interactors/spree_cm_commissioner/transit/draft_order_creator.rb +0 -132
  122. data/app/interactors/spree_cm_commissioner/variant_block_updater.rb +0 -62
  123. data/app/interactors/spree_cm_commissioner/vehicle_updater.rb +0 -41
  124. data/app/jobs/spree_cm_commissioner/ensure_correct_product_type_job.rb +0 -7
  125. data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +0 -7
  126. data/app/jobs/spree_cm_commissioner/stock/inventory_items_adjuster_job.rb +0 -11
  127. data/app/jobs/spree_cm_commissioner/stock/inventory_items_generator_job.rb +0 -11
  128. data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +0 -9
  129. data/app/models/concerns/spree_cm_commissioner/line_item_transitable.rb +0 -89
  130. data/app/models/concerns/spree_cm_commissioner/order_seatable.rb +0 -44
  131. data/app/models/concerns/spree_cm_commissioner/vehicle_type.rb +0 -11
  132. data/app/models/spree_cm_commissioner/block.rb +0 -43
  133. data/app/models/spree_cm_commissioner/inventory.rb +0 -11
  134. data/app/models/spree_cm_commissioner/inventory_item.rb +0 -69
  135. data/app/models/spree_cm_commissioner/price_decorator.rb +0 -9
  136. data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +0 -41
  137. data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +0 -126
  138. data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +0 -36
  139. data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +0 -25
  140. data/app/models/spree_cm_commissioner/reserved_block.rb +0 -30
  141. data/app/models/spree_cm_commissioner/saved_guest.rb +0 -15
  142. data/app/models/spree_cm_commissioner/seat_layout.rb +0 -20
  143. data/app/models/spree_cm_commissioner/seat_section.rb +0 -16
  144. data/app/models/spree_cm_commissioner/seats/blocks_canceler.rb +0 -30
  145. data/app/models/spree_cm_commissioner/seats/blocks_holder.rb +0 -53
  146. data/app/models/spree_cm_commissioner/seats/blocks_reserver.rb +0 -49
  147. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_on_hold_by_other_guest.rb +0 -4
  148. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_reserved_by_other_guest.rb +0 -4
  149. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_reserved_by_same_guest.rb +0 -4
  150. data/app/models/spree_cm_commissioner/seats/errors/unable_to_save_reserved_block_record.rb +0 -4
  151. data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -44
  152. data/app/models/spree_cm_commissioner/variant_block.rb +0 -17
  153. data/app/request_schemas/spree_cm_commissioner/trip_search_request_schema.rb +0 -20
  154. data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +0 -19
  155. data/app/serializers/spree/v2/storefront/amenity_serializer.rb +0 -15
  156. data/app/serializers/spree/v2/storefront/trip_place_serializer.rb +0 -10
  157. data/app/serializers/spree/v2/storefront/trip_query_result_serializer.rb +0 -14
  158. data/app/serializers/spree/v2/storefront/trip_result_serializer.rb +0 -17
  159. data/app/serializers/spree/v2/storefront/trip_vehicle_serializer.rb +0 -11
  160. data/app/serializers/spree/v2/storefront/trip_vendor_serializer.rb +0 -13
  161. data/app/views/spree/admin/inventory_items/show.html.erb +0 -72
  162. data/app/views/spree/admin/stock_managements/calendar.html.erb +0 -56
  163. data/config/initializers/paper_trail.rb +0 -1
  164. data/db/migrate/20250122000000_move_route_type_from_vehicles_to_trips.rb +0 -7
  165. data/db/migrate/20250304293518_create_cm_inventory_items.rb +0 -21
  166. data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +0 -5
  167. data/db/migrate/20250502025848_add_index_to_spree_products.rb +0 -5
  168. data/db/migrate/20250502030001_add_product_type_to_spree_variants.rb +0 -5
  169. data/db/migrate/20250502030002_add_product_type_to_spree_line_items.rb +0 -5
  170. data/db/migrate/20250603035256_add_inventory_item_to_spree_prices.rb +0 -7
  171. data/db/migrate/20250619073724_drop_table_cm_line_item_seats.rb +0 -5
  172. data/db/migrate/20250619073812_drop_table_cm_vehicle_seats.rb +0 -5
  173. data/db/migrate/20250619073844_drop_table_cm_vehicle_types.rb +0 -9
  174. data/db/migrate/20250619073957_drop_table_cm_option_value_vehicle_types.rb +0 -5
  175. data/db/migrate/20250619082354_remove_unnecessary_fields_from_cm_places.rb +0 -9
  176. data/db/migrate/20250619082736_remove_route_type_from_spree_products.rb +0 -5
  177. data/db/migrate/20250619083055_remove_unnecessary_fields_from_spree_taxons.rb +0 -5
  178. data/db/migrate/20250620083055_remove_variant_id_from_cm_trips.rb +0 -5
  179. data/db/migrate/20250620090000_update_cm_trip_connections_to_use_cm_trips.rb +0 -6
  180. data/db/migrate/20250620090001_create_cm_seat_layouts.rb +0 -17
  181. data/db/migrate/20250620090002_create_cm_seat_sections.rb +0 -18
  182. data/db/migrate/20250620090003_create_cm_blocks.rb +0 -18
  183. data/db/migrate/20250624091005_create_cm_reserved_blocks.rb +0 -29
  184. data/db/migrate/20250626083642_create_cm_variant_blocks.rb +0 -24
  185. data/db/migrate/20250627023314_add_block_id_to_cm_guests.rb +0 -13
  186. data/db/migrate/20250716022821_add_location_reference_to_cm_vendor_places.rb +0 -5
  187. data/db/migrate/20250716031743_drop_table_cm_vendor_stops.rb +0 -5
  188. data/db/migrate/20250717023824_add_vendor_reference_to_cm_trips.rb +0 -5
  189. data/db/migrate/20250717041414_add_location_place_reference_to_cm_trip_stops.rb +0 -5
  190. data/db/migrate/20250717042539_rename_cm_trip_stops_stop_id_column_to_stop_place_id.rb +0 -7
  191. data/db/migrate/20250717042707_rename_cm_trips_origin_and_destination_to_origin_place_and_destination_place.rb +0 -11
  192. data/db/migrate/20250721080738_add_vehicle_type_to_cm_vehicles.rb +0 -7
  193. data/db/migrate/20250725092713_add_block_type_to_cm_blocks.rb +0 -5
  194. data/db/migrate/20250731062816_add_departure_time_and_arrival_time_to_trip_stop.rb +0 -6
  195. data/db/migrate/20250807033035_create_spree_cm_commissioner_saved_guests.rb +0 -23
  196. data/db/migrate/20250808054835_add_saved_guest_reference_to_cm_blocks.rb +0 -5
  197. data/lib/spree_cm_commissioner/cached_inventory_item.rb +0 -23
  198. data/lib/spree_cm_commissioner/test_helper/factories/block_factory.rb +0 -16
  199. data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +0 -9
  200. data/lib/spree_cm_commissioner/test_helper/factories/reserved_block_factory.rb +0 -27
  201. data/lib/spree_cm_commissioner/test_helper/factories/seat_layout_factory.rb +0 -11
  202. data/lib/spree_cm_commissioner/test_helper/factories/seat_section_factory.rb +0 -16
  203. data/lib/spree_cm_commissioner/test_helper/factories/trip_connection_factory.rb +0 -6
  204. data/lib/spree_cm_commissioner/test_helper/factories/trip_stop_factory.rb +0 -13
  205. data/lib/spree_cm_commissioner/test_helper/factories/variant_block_factory.rb +0 -7
  206. data/lib/spree_cm_commissioner/transit/leg.rb +0 -37
  207. data/lib/spree_cm_commissioner/transit/seat_selection.rb +0 -27
  208. data/lib/tasks/create_default_non_permanent_inventory_items.rake +0 -16
  209. data/lib/tasks/ensure_correct_product_type.rake +0 -7
  210. data/lib/tasks/generate_inventory_items.rake +0 -7
@@ -1,60 +1,38 @@
1
1
  FactoryBot.define do
2
2
  factory :cm_base_variant, parent: :base_variant do
3
- is_master { false }
4
- product { create(:cm_product) }
5
-
6
3
  transient do
7
4
  total_inventory { 10 }
8
- backorderable { false }
9
- pregenerate_inventory_items { true }
10
- pre_inventory_days { nil } # optional for permanent only
11
5
  end
12
6
 
13
7
  after :create do |variant, evaluator|
14
8
  variant.stock_items.first.adjust_count_on_hand(evaluator.total_inventory)
15
- variant.stock_items.update_all(backorderable: evaluator.backorderable)
16
-
17
- # stock_items is created then enqueue create inventory items job
18
- # but we want to create inventory items directly in this factory without waiting for job
19
- if evaluator.pregenerate_inventory_items
20
- if variant.permanent_stock?
21
- SpreeCmCommissioner::Stock::PermanentInventoryItemsGenerator.call(variant_ids: [variant.id], pre_inventory_days: evaluator.pre_inventory_days || 3)
22
- else
23
- variant.create_default_non_permanent_inventory_item! unless variant.default_inventory_item_exist?
24
- end
25
- end
26
9
  end
27
10
  end
28
11
 
29
- factory :cm_variant, parent: :cm_base_variant do
30
- product { create(:cm_product) }
12
+ factory :cm_variant, parent: :variant do
13
+ product do
14
+ stock_locations = [create(:stock_location)]
15
+ product = create(:product, vendor: create(:active_vendor, stock_locations: stock_locations))
16
+ product
17
+ end
18
+ end
31
19
 
20
+ factory :trip, class: Spree::Variant do
21
+ permanent_stock { 5 }
32
22
  transient do
33
- number_of_adults { nil }
34
- number_of_kids { nil }
35
- delivery_required { nil }
23
+ departure_time { "10:00" }
24
+ duration { "1" }
25
+ route { }
36
26
  end
27
+ before(:create) do |trip, evaluator|
28
+ trip.product = evaluator.route
37
29
 
38
- after(:create) do |variant, evaluator|
39
- if evaluator.number_of_adults.present?
40
- number_of_adults = create(:cm_option_type, :number_of_adults)
41
- variant.product.option_types << number_of_adults
42
- variant.option_values << create(:cm_option_value, presentation: evaluator.number_of_adults, name: evaluator.number_of_adults, option_type: number_of_adults)
43
- end
30
+ trip.option_values = [evaluator.departure_time, evaluator.duration]
44
31
 
45
- if evaluator.number_of_kids.present?
46
- number_of_kids = create(:cm_option_type, :number_of_kids)
47
- variant.product.option_types << number_of_kids
48
- variant.option_values << create(:cm_option_value, presentation: evaluator.number_of_kids, name: evaluator.number_of_kids, option_type: number_of_kids)
49
- end
50
-
51
- if evaluator.delivery_required == true
52
- delivery_option = create(:cm_option_type, :delivery_option)
53
- variant.product.option_types << delivery_option
54
- variant.option_values << create(:cm_option_value, presentation: 'Delivery', name: 'delivery', option_type: delivery_option)
55
- end
56
-
57
- variant.save!
32
+ end
33
+ after(:create) do |trip, evaluator|
34
+ trip.stock_items = [create(:stock_item, variant: trip, stock_location: evaluator.product.vendor.stock_locations.first)]
35
+ trip.stock_items.first.adjust_count_on_hand(10)
58
36
  end
59
37
  end
60
38
  end
@@ -1,5 +1,5 @@
1
1
  FactoryBot.define do
2
- factory :cm_vehicle, class: SpreeCmCommissioner::Vehicle do
2
+ factory :vehicle, class: SpreeCmCommissioner::Vehicle do
3
3
  sequence(:code) { |n| "vehicle_#{n}" }
4
4
  sequence(:license_plate) { |n| "2KH-#{'%04d' % (n % 10000)}" }
5
5
  end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :vehicle_option_type, class: Spree::OptionType do
3
+ name { 'vehicle_option_type' }
4
+ attr_type { 'vehicle' }
5
+ kind {'variant'}
6
+ presentation { '' }
7
+ end
8
+ end
@@ -0,0 +1,96 @@
1
+ FactoryBot.define do
2
+ factory :vehicle_type, class: SpreeCmCommissioner::VehicleType do
3
+ name { FFaker::Name.name }
4
+ route_type {"automobile"}
5
+ status {"active"}
6
+ end
7
+
8
+ trait :with_layers do
9
+ transient do
10
+ layers {[
11
+ {row: 1, column: 1, empty: [[]], label: 'F', layer_name: "First Layer"},
12
+ {row: 1, column: 1, empty: [[]], label: 'S', layer_name: "Second Layer"}
13
+ ]}
14
+ end
15
+ after(:create) do |vehicle_type, evaluator|
16
+ layers = evaluator.layers || [{}]
17
+ layers.each_with_index do |layer, index|
18
+
19
+ row = layer[:row]
20
+ column = layer[:column]
21
+ empty_seats = layer[:empty] || []
22
+ label_counter = 1
23
+ layer_name = layer[:layer_name]
24
+ row.times do |r|
25
+ column.times do |c|
26
+ label = "#{layer[:label]}#{label_counter}"
27
+ seat_type = 0
28
+ if empty_seats.include?([r, c])
29
+ seat_type = 1
30
+ label = "NA"
31
+ label_counter -= 1
32
+ end
33
+ if (r == 0 && c == 0 && index == 0)
34
+ seat_type = 3
35
+ label = "NA"
36
+ label_counter -= 1
37
+ end
38
+ seat = {
39
+ "row": r + 1,
40
+ "column": c + 1,
41
+ "label": label,
42
+ "layer": layer_name,
43
+ "seat_type": seat_type,
44
+ "vehicle_type_id": vehicle_type.id
45
+ }
46
+
47
+ label_counter += 1
48
+ SpreeCmCommissioner::VehicleSeat.create(seat)
49
+ end
50
+ end
51
+ vehicle_type.reload
52
+ end
53
+ end
54
+ end
55
+
56
+ trait :with_seats do
57
+ transient do
58
+ row { 1 }
59
+ column { 1 }
60
+ empty { [[]] }
61
+ end
62
+
63
+ after(:create) do |vehicle_type, evaluator|
64
+ label_counter = 1
65
+ empty_seats = evaluator.empty || []
66
+ evaluator.row.times do |r|
67
+ evaluator.column.times do |c|
68
+ seat_type = 0
69
+ label = "F#{label_counter}"
70
+ if empty_seats.include?([r, c])
71
+ seat_type = 1
72
+ label = "NA"
73
+ label_counter -= 1
74
+ end
75
+ if (r == 0 && c == 0)
76
+ seat_type = 3
77
+ label = "NA"
78
+ label_counter -= 1
79
+ end
80
+ seat = {
81
+ "row": r + 1,
82
+ "column": c + 1,
83
+ "label": label,
84
+ "layer": "First Layer",
85
+ "seat_type": seat_type,
86
+ "vehicle_type_id": vehicle_type.id
87
+ }
88
+
89
+ label_counter += 1
90
+ SpreeCmCommissioner::VehicleSeat.create(seat)
91
+ end
92
+ end
93
+ vehicle_type.reload
94
+ end
95
+ end
96
+ end
@@ -1,9 +1,4 @@
1
1
  FactoryBot.define do
2
- factory :cm_transit_vendor, parent: :vendor do
3
- state { :active }
4
- primary_product_type { :transit }
5
- end
6
-
7
2
  factory :cm_vendor, parent: :vendor do
8
3
  state { :active }
9
4
  default_state_id { Spree::State.first&.id }
@@ -35,7 +30,7 @@ FactoryBot.define do
35
30
  if vendor.primary_product_type == :accommodation
36
31
  product = create(:cm_accommodation_product, vendor: vendor, total_inventory: evaluator.total_inventory)
37
32
  else
38
- product = create(:cm_product, vendor: vendor, product_type: vendor.primary_product_type)
33
+ product = create(:product, vendor: vendor, product_type: vendor.primary_product_type)
39
34
  product.master.stock_items.first.adjust_count_on_hand(evaluator.total_inventory)
40
35
  end
41
36
 
@@ -1,19 +1,7 @@
1
1
  FactoryBot.define do
2
- factory :cm_location_vendor_place, class: SpreeCmCommissioner::VendorPlace do
2
+ factory :vendor_place, class: SpreeCmCommissioner::VendorPlace do
3
3
  association :vendor, factory: :vendor
4
4
  association :place, factory: :cm_place
5
-
6
- distance { FFaker::Number.decimal }
7
- position { FFaker::Number.number }
8
-
9
- place_type { :location }
10
- end
11
-
12
- factory :cm_vendor_place, class: SpreeCmCommissioner::VendorPlace do
13
- association :vendor, factory: :vendor
14
- association :place, factory: :cm_place
15
- association :location, factory: :cm_location_vendor_place
16
-
17
5
  distance { FFaker::Number.decimal }
18
6
  position { FFaker::Number.number }
19
7
  place_type { :branch }
@@ -7,58 +7,8 @@ module SpreeCmCommissioner
7
7
  @connection_id = connection_id
8
8
  end
9
9
 
10
- def id
11
- @trips.map(&:id).join('-')
12
- end
13
-
14
- def trip_ids
15
- @trips.map(&:id)
16
- end
17
-
18
10
  def direct?
19
11
  @trips.size == 1
20
12
  end
21
-
22
- def quantity_available
23
- @trips.map(&:quantity_available).compact.min
24
- end
25
-
26
- def max_capacity
27
- @trips.map(&:max_capacity).compact.min
28
- end
29
-
30
- def total_price
31
- @trips.map(&:price).compact.sum
32
- end
33
-
34
- def total_duration
35
- @trips.map(&:duration).compact.sum
36
- end
37
-
38
- def total_duration_in_hms
39
- total_seconds = total_duration || 0
40
- return { hours: 0, minutes: 0, seconds: 0 } if total_seconds.nil? || total_seconds <= 0
41
-
42
- hours = total_seconds / 3600
43
- minutes = (total_seconds % 3600) / 60
44
- seconds = total_seconds % 60
45
- { hours: hours, minutes: minutes, seconds: seconds }
46
- end
47
-
48
- def departure_time
49
- @trips.first.departure_time
50
- end
51
-
52
- def arrival_time
53
- @trips.last.arrival_time
54
- end
55
-
56
- def vendors
57
- @trips.map(&:vendor).uniq
58
- end
59
-
60
- def vehicle_types
61
- @trips.map(&:vehicle).map(&:vehicle_type).uniq
62
- end
63
13
  end
64
14
  end
@@ -1,10 +1,9 @@
1
1
  module SpreeCmCommissioner
2
2
  class TripResult
3
- attr_accessor :id, :origin_place, :destination_place, :allow_seat_selection,
4
- :departure_time, :duration, :route_type,
5
- :vehicle_id, :vehicle, :vendor_id, :vendor,
6
- :quantity_available, :max_capacity, :boarding, :drop_off,
7
- :product_id, :amenities, :price, :compare_at_amount, :currency
3
+ attr_accessor :trip_id, :vendor_id, :vendor_name, :short_name, :route_name,
4
+ :origin_id, :origin, :destination_id, :destination,
5
+ :total_sold, :total_seats,
6
+ :duration, :vehicle_id, :departure_time
8
7
 
9
8
  def initialize(options = {})
10
9
  options.each do |key, value|
@@ -12,29 +11,21 @@ module SpreeCmCommissioner
12
11
  end
13
12
  end
14
13
 
15
- def total_sold
16
- return if max_capacity.nil? || quantity_available.nil?
17
-
18
- max_capacity - quantity_available
14
+ def remaining_seats
15
+ total_seats - total_sold
19
16
  end
20
17
 
21
- def amenity_ids
22
- amenities&.map(&:id) || []
18
+ def arrival_time
19
+ (departure_time.to_time + duration.to_i.seconds).strftime('%H:%M')
23
20
  end
24
21
 
25
22
  def duration_in_hms
26
- return { hours: 0, minutes: 0, seconds: 0 } if duration.nil?
23
+ return 0 if duration.nil?
27
24
 
28
25
  hours = duration / 3600
29
26
  minutes = (duration % 3600) / 60
30
27
  seconds = duration % 60
31
- { hours: hours, minutes: minutes, seconds: seconds }
32
- end
33
-
34
- def arrival_time
35
- return nil if departure_time.nil? || duration.nil?
36
-
37
- departure_time + duration.seconds
28
+ "#{hours}h #{minutes}m #{seconds}s"
38
29
  end
39
30
  end
40
31
  end
@@ -0,0 +1,11 @@
1
+ module SpreeCmCommissioner
2
+ class TripSeatLayoutResult
3
+ attr_accessor :trip_id, :total_sold, :total_seats, :remaining_seats, :layout, :allow_seat_selection
4
+
5
+ def initialize(options = {})
6
+ options.each do |key, value|
7
+ instance_variable_set("@#{key}", value)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.0.3-pre6'.freeze
2
+ VERSION = '2.0.3.pre-pre7'.freeze
3
3
 
4
4
  module_function
5
5
 
@@ -19,9 +19,7 @@ require 'spree_cm_commissioner/order_jwt_token'
19
19
  require 'spree_cm_commissioner/user_session_jwt_token'
20
20
  require 'spree_cm_commissioner/trip_result'
21
21
  require 'spree_cm_commissioner/trip_query_result'
22
- require 'spree_cm_commissioner/cached_inventory_item'
23
- require 'spree_cm_commissioner/transit/leg'
24
- require 'spree_cm_commissioner/transit/seat_selection'
22
+ require 'spree_cm_commissioner/trip_seat_layout_result'
25
23
 
26
24
  require 'activerecord_multi_tenant'
27
25
  require 'google/cloud/recaptcha_enterprise'
@@ -45,39 +43,5 @@ require 'rqrcode'
45
43
  require 'premailer/rails'
46
44
  require 'cm_app_logger'
47
45
  require 'counter_culture'
48
- require 'paper_trail'
49
46
 
50
47
  require 'byebug' if Rails.env.development? || Rails.env.test?
51
-
52
- module SpreeCmCommissioner
53
- class << self
54
- # Allows overriding the default Redis connection pool with a custom one
55
- attr_writer :redis_pool
56
-
57
- def redis_pool
58
- @redis_pool ||= default_redis_pool
59
- end
60
-
61
- # Resets the Redis pool, useful for testing or reinitialization
62
- def reset_redis_pool
63
- @redis_pool = nil
64
- end
65
-
66
- private
67
-
68
- def default_redis_pool
69
- pool_size = ENV.fetch('REDIS_POOL_SIZE', '5').to_i
70
- timeout = ENV.fetch('REDIS_TIMEOUT', '5').to_i
71
- redis_url = ENV.fetch('REDIS_URL', 'redis://localhost:6379/12')
72
-
73
- ConnectionPool.new(size: pool_size, timeout: timeout) do
74
- Redis.new(url: redis_url, timeout: timeout)
75
- end
76
- end
77
- end
78
-
79
- # Provides a configuration block for customizing SpreeCmCommissioner settings
80
- def self.configure
81
- yield self
82
- end
83
- end
@@ -54,13 +54,6 @@ 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
- s.add_dependency 'paper_trail', '~> 16.0'
58
-
59
- # Redis
60
- s.add_dependency 'redis'
61
- s.add_dependency 'redis-rails'
62
- s.add_dependency 'connection_pool'
63
-
64
57
  s.add_development_dependency 'pg'
65
58
  s.add_development_dependency 'spree_dev_tools'
66
59
  s.add_dependency 'blazer', '~> 3.0.4'