spree_cm_commissioner 2.0.0.pre.pre → 2.0.0

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 (259) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +3 -0
  3. data/.github/workflows/test_and_build_gem.yml +2 -16
  4. data/.gitignore +1 -2
  5. data/Gemfile.lock +1 -32
  6. data/Rakefile +4 -33
  7. data/app/assets/images/cm-hangmeas-checkout_image.svg +63 -0
  8. data/app/assets/images/cm-hangmeas-failed.svg +56 -0
  9. data/app/assets/images/cm-hangmeas-loader.svg +50 -0
  10. data/app/assets/images/cm-hangmeas-success.svg +51 -0
  11. data/app/assets/images/mailer/mail.png +0 -0
  12. data/app/assets/images/mailer/tenant_phone.png +0 -0
  13. data/app/assets/images/mailer/tenant_user.png +0 -0
  14. data/app/assets/javascripts/spree_cm_commissioner/backend.js +1 -0
  15. data/app/assets/javascripts/spree_cm_commissioner/tenant_payment_icon_fields.js +65 -0
  16. data/app/assets/stylesheets/spree_cm_commissioner/backend/calendar.scss +11 -8
  17. data/app/assets/stylesheets/spree_cm_commissioner/backend/commissioner_admin.css.scss +1 -0
  18. data/app/assets/stylesheets/spree_cm_commissioner/backend/tenant_payment_icon_fields.scss +60 -0
  19. data/app/controllers/concerns/spree_cm_commissioner/content_cachable.rb +2 -1
  20. data/app/controllers/concerns/spree_cm_commissioner/transit/taxon_bitwise.rb +44 -0
  21. data/app/controllers/spree/admin/event_blazer_queries_controller.rb +11 -4
  22. data/app/controllers/spree/admin/stock_managements_controller.rb +1 -63
  23. data/app/controllers/spree/admin/tenants_controller.rb +8 -0
  24. data/app/controllers/spree/admin/trip_blazer_queries_controller.rb +35 -0
  25. data/app/controllers/spree/api/v2/organizer/invite_crews_controller.rb +33 -0
  26. data/app/controllers/spree/api/v2/organizer/invite_guests_controller.rb +1 -1
  27. data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +31 -14
  28. data/app/controllers/spree/api/v2/storefront/dynamic_field_options_controller.rb +5 -1
  29. data/app/controllers/spree/api/v2/storefront/guests_controller.rb +30 -4
  30. data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +2 -2
  31. data/app/controllers/spree/api/v2/tenant/checkout_controller.rb +2 -0
  32. data/app/controllers/spree_cm_commissioner/admin/variants_controller_decorator.rb +1 -1
  33. data/app/controllers/spree_cm_commissioner/api/v2/storefront/checkout_controller_decorator.rb +11 -0
  34. data/app/controllers/spree_cm_commissioner/well_known_controller.rb +31 -17
  35. data/app/factory/spree_cm_commissioner/invite_guest_claimed_telegram_message_factory.rb +23 -81
  36. data/app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb +20 -0
  37. data/app/interactors/spree_cm_commissioner/apple_app_site_association_fetcher.rb +27 -0
  38. data/app/interactors/spree_cm_commissioner/asset_links_fetcher.rb +27 -0
  39. data/app/interactors/spree_cm_commissioner/create_ticket.rb +6 -5
  40. data/app/interactors/spree_cm_commissioner/crew_invite_link_handler.rb +48 -0
  41. data/app/interactors/spree_cm_commissioner/pin_code_sender.rb +0 -1
  42. data/app/interactors/spree_cm_commissioner/sms.rb +1 -1
  43. data/app/interactors/spree_cm_commissioner/telegram_chats_auto_finder.rb +144 -0
  44. data/app/interactors/spree_cm_commissioner/user_id_token_authenticator.rb +7 -3
  45. data/app/interactors/spree_cm_commissioner/user_id_token_checker.rb +11 -3
  46. data/app/interactors/spree_cm_commissioner/user_identity_checker.rb +12 -6
  47. data/app/interactors/spree_cm_commissioner/user_registration_with_id_token.rb +7 -1
  48. data/app/interactors/spree_cm_commissioner/vattanac_bank_initiator.rb +5 -1
  49. data/app/jobs/spree_cm_commissioner/application_job.rb +0 -20
  50. data/app/jobs/spree_cm_commissioner/application_unique_job.rb +0 -20
  51. data/app/jobs/spree_cm_commissioner/sms_pin_code_job.rb +1 -1
  52. data/app/mailers/spree/order_mailer_decorator.rb +18 -3
  53. data/app/models/concerns/spree_cm_commissioner/event_check_in_flowable.rb +30 -0
  54. data/app/models/concerns/spree_cm_commissioner/line_item_durationable.rb +15 -9
  55. data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +13 -1
  56. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -39
  57. data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +3 -1
  58. data/app/models/concerns/spree_cm_commissioner/product_type.rb +0 -10
  59. data/app/models/concerns/spree_cm_commissioner/taxon_kind.rb +1 -1
  60. data/app/models/concerns/spree_cm_commissioner/tenant_preference.rb +5 -0
  61. data/app/models/spree_cm_commissioner/blazer_queryable.rb +8 -0
  62. data/app/models/spree_cm_commissioner/branch.rb +12 -0
  63. data/app/models/spree_cm_commissioner/crew_invite_link.rb +4 -0
  64. data/app/models/spree_cm_commissioner/dynamic_field.rb +37 -3
  65. data/app/models/spree_cm_commissioner/dynamic_field_option.rb +7 -1
  66. data/app/models/spree_cm_commissioner/guest.rb +57 -19
  67. data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +61 -3
  68. data/app/models/spree_cm_commissioner/invite.rb +4 -6
  69. data/app/models/spree_cm_commissioner/invite_team.rb +3 -1
  70. data/app/models/spree_cm_commissioner/line_item_decorator.rb +78 -46
  71. data/app/models/spree_cm_commissioner/line_item_seat.rb +10 -0
  72. data/app/models/spree_cm_commissioner/notification_taxon.rb +1 -1
  73. data/app/models/spree_cm_commissioner/option_type_decorator.rb +11 -1
  74. data/app/models/spree_cm_commissioner/option_value_vehicle_type.rb +8 -0
  75. data/app/models/spree_cm_commissioner/order_decorator.rb +1 -30
  76. data/app/models/spree_cm_commissioner/pin_code.rb +3 -2
  77. data/app/models/spree_cm_commissioner/pin_code_telegram.rb +28 -0
  78. data/app/models/spree_cm_commissioner/place.rb +3 -1
  79. data/app/models/spree_cm_commissioner/product_decorator.rb +26 -10
  80. data/app/models/spree_cm_commissioner/promotion_category_decorator.rb +11 -0
  81. data/app/models/spree_cm_commissioner/service_calendar.rb +2 -0
  82. data/app/models/spree_cm_commissioner/state_decorator.rb +1 -0
  83. data/app/models/spree_cm_commissioner/stock/availability_checker.rb +25 -26
  84. data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +1 -2
  85. data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
  86. data/app/models/spree_cm_commissioner/stock_item_decorator.rb +0 -17
  87. data/app/models/spree_cm_commissioner/stop.rb +23 -0
  88. data/app/models/spree_cm_commissioner/taxon_decorator.rb +6 -2
  89. data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +6 -0
  90. data/app/models/spree_cm_commissioner/telegram_chat.rb +6 -0
  91. data/app/models/spree_cm_commissioner/trip.rb +10 -12
  92. data/app/models/spree_cm_commissioner/trip_connection.rb +5 -5
  93. data/app/models/spree_cm_commissioner/trip_stop.rb +3 -2
  94. data/app/models/spree_cm_commissioner/user_identity_provider.rb +26 -4
  95. data/app/models/spree_cm_commissioner/user_taxon.rb +1 -0
  96. data/app/models/spree_cm_commissioner/variant_decorator.rb +47 -36
  97. data/app/models/spree_cm_commissioner/variant_options.rb +23 -0
  98. data/app/models/spree_cm_commissioner/vehicle.rb +14 -9
  99. data/app/models/spree_cm_commissioner/vehicle_seat.rb +11 -0
  100. data/app/models/spree_cm_commissioner/vehicle_type.rb +76 -0
  101. data/app/models/spree_cm_commissioner/vendor_decorator.rb +13 -7
  102. data/app/models/spree_cm_commissioner/vendor_place.rb +5 -6
  103. data/app/models/spree_cm_commissioner/vendor_stop.rb +2 -1
  104. data/app/overrides/spree/admin/taxons/_form/check_in_flows.html.erb.deface +18 -0
  105. data/app/overrides/spree/admin/variants/_form/kyc_field.html.erb.deface +2 -2
  106. data/app/queries/spree_cm_commissioner/guest_searcher_query.rb +45 -3
  107. data/app/queries/spree_cm_commissioner/trip_query.rb +26 -23
  108. data/app/queries/spree_cm_commissioner/trip_search_query.rb +76 -0
  109. data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +45 -0
  110. data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +55 -0
  111. data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +0 -3
  112. data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
  113. data/app/serializers/spree/v2/organizer/invite_crews_serializer.rb +11 -0
  114. data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +0 -2
  115. data/app/serializers/spree/v2/storefront/line_item_serializer_decorator.rb +0 -1
  116. data/app/serializers/spree/v2/tenant/user_serializer.rb +1 -0
  117. data/app/serializers/spree_cm_commissioner/v2/operator/dashboard_crew_event_serializer.rb +4 -1
  118. data/app/serializers/spree_cm_commissioner/v2/storefront/dynamic_field_option_serializer.rb +1 -3
  119. data/app/serializers/spree_cm_commissioner/v2/storefront/dynamic_field_serializer.rb +1 -3
  120. data/app/serializers/spree_cm_commissioner/v2/storefront/guest_dynamic_field_serializer.rb +2 -1
  121. data/app/services/spree_cm_commissioner/organizer/export_guest_csv_service.rb +23 -15
  122. data/app/services/spree_cm_commissioner/user_authenticator.rb +1 -1
  123. data/app/services/spree_cm_commissioner/vehicle_option_value_creator.rb +11 -0
  124. data/app/views/blazer/queries/_content.html.erb +8 -0
  125. data/app/views/spree/admin/stock_managements/_variant_stock_items.html.erb +2 -7
  126. data/app/views/spree/admin/stock_managements/index.html.erb +6 -55
  127. data/app/views/spree/admin/tenant_vendors/index.html.erb +9 -2
  128. data/app/views/spree/admin/tenants/_form.html.erb +118 -42
  129. data/app/views/spree/admin/tenants/edit.html.erb +2 -1
  130. data/app/views/spree/admin/tenants/index.html.erb +7 -1
  131. data/app/views/spree/admin/vendors/_form.html.erb +14 -0
  132. data/app/views/spree/order_mailer/confirm_email.html.erb +27 -16
  133. data/app/views/spree_cm_commissioner/layouts/order_mailer.html.erb +5 -1
  134. data/app/views/spree_cm_commissioner/order_mailer/_mailer_stylesheets.html.erb +41 -4
  135. data/app/views/spree_cm_commissioner/order_mailer/tenant/_customer_info.html.erb +42 -0
  136. data/app/views/spree_cm_commissioner/order_mailer/tenant/_footer.html.erb +25 -0
  137. data/app/views/spree_cm_commissioner/order_mailer/tenant/_greeting.html.erb +19 -0
  138. data/app/views/spree_cm_commissioner/order_mailer/tenant/_support_contact.html.erb +33 -0
  139. data/config/initializers/spree_permitted_attributes.rb +2 -5
  140. data/config/locales/en.yml +10 -1
  141. data/config/routes.rb +6 -22
  142. data/db/migrate/20240202080634_update_counter_cache_of_vehicle_type.rb +1 -3
  143. data/db/migrate/20250616084219_add_description_to_cm_vendor_place.rb +5 -0
  144. data/db/migrate/20250630103536_create_cm_telegram_chats.rb +13 -0
  145. data/db/migrate/20250701093203_add_configurations_to_cm_dynamic_field.rb +6 -0
  146. data/db/migrate/20250702091305_add_dynamic_field_option_to_guest_dynamic_field.rb +5 -0
  147. data/db/migrate/20250702091935_add_status_to_dynamic_field_option.rb +5 -0
  148. data/db/migrate/20250707032008_add_vendor_id_to_spree_category.rb +7 -0
  149. data/db/migrate/20250709073455_add_email_fields_to_spree_vendors.rb +6 -0
  150. data/db/migrate/20250711092937_add_position_to_cm_dynamic_fields.rb +11 -0
  151. data/db/migrate/20250711093045_add_position_to_cm_dynamic_field_options.rb +11 -0
  152. data/db/migrate/20250714121508_rename_cm_taxon_blazer_query_to_blazer_queryables.rb +7 -0
  153. data/db/migrate/20250714124323_make_cm_blazer_queryables_polymorphic.rb +19 -0
  154. data/db/migrate/20250715103333_remove_indexes_from_cm_user_identity_providers.rb +13 -0
  155. data/db/migrate/20250718071620_add_data_fill_stage_to_dynamic_fields.rb +5 -0
  156. data/docker-compose.yml +1 -1
  157. data/lib/cm_app_logger.rb +4 -11
  158. data/lib/generators/spree_cm_commissioner/install/install_generator.rb +11 -14
  159. data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_dashboard/spree_cm_commissioner → spree_cm_commissioner}/utilities.js +0 -4
  160. data/lib/spree_cm_commissioner/calendar_event.rb +1 -11
  161. data/lib/spree_cm_commissioner/test_helper/factories/branch_factory.rb +12 -0
  162. data/lib/spree_cm_commissioner/test_helper/factories/departure_time_option_type_factory.rb +8 -0
  163. data/lib/spree_cm_commissioner/test_helper/factories/duration_option_type_factory.rb +8 -0
  164. data/lib/spree_cm_commissioner/test_helper/factories/guest_factory.rb +0 -10
  165. data/lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb +1 -1
  166. data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +1 -1
  167. data/lib/spree_cm_commissioner/test_helper/factories/line_item_seat_factory.rb +7 -0
  168. data/lib/spree_cm_commissioner/test_helper/factories/option_type_factory.rb +30 -6
  169. data/lib/spree_cm_commissioner/test_helper/factories/order_factory.rb +36 -0
  170. data/lib/spree_cm_commissioner/test_helper/factories/product_factory.rb +34 -18
  171. data/lib/spree_cm_commissioner/test_helper/factories/stock_location_factory.rb +2 -2
  172. data/lib/spree_cm_commissioner/test_helper/factories/stop_factory.rb +14 -0
  173. data/lib/spree_cm_commissioner/test_helper/factories/transit_place_factory.rb +8 -0
  174. data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +3 -10
  175. data/lib/spree_cm_commissioner/test_helper/factories/user_identity_provider_factory.rb +1 -1
  176. data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +19 -41
  177. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_factory.rb +1 -1
  178. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_option_type_factory.rb +8 -0
  179. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_type_factory.rb +96 -0
  180. data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +1 -1
  181. data/lib/spree_cm_commissioner/trip_seat_layout_result.rb +11 -0
  182. data/lib/spree_cm_commissioner/version.rb +1 -1
  183. data/lib/spree_cm_commissioner.rb +1 -35
  184. data/spree_cm_commissioner.gemspec +0 -7
  185. metadata +66 -135
  186. data/app/controllers/spree/admin/inventory_items_controller.rb +0 -83
  187. data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +0 -42
  188. data/app/finders/spree_cm_commissioner/accommodations/find.rb +0 -37
  189. data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +0 -32
  190. data/app/interactors/spree_cm_commissioner/ensure_correct_product_type.rb +0 -40
  191. data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +0 -25
  192. data/app/interactors/spree_cm_commissioner/stock/inventory_item_resetter.rb +0 -44
  193. data/app/interactors/spree_cm_commissioner/stock/inventory_items_adjuster.rb +0 -13
  194. data/app/interactors/spree_cm_commissioner/stock/inventory_items_generator.rb +0 -15
  195. data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +0 -75
  196. data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +0 -32
  197. data/app/jobs/spree_cm_commissioner/ensure_correct_product_type_job.rb +0 -7
  198. data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +0 -7
  199. data/app/jobs/spree_cm_commissioner/stock/inventory_items_adjuster_job.rb +0 -11
  200. data/app/jobs/spree_cm_commissioner/stock/inventory_items_generator_job.rb +0 -11
  201. data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +0 -9
  202. data/app/models/concerns/spree_cm_commissioner/order_seatable.rb +0 -44
  203. data/app/models/spree_cm_commissioner/block.rb +0 -23
  204. data/app/models/spree_cm_commissioner/inventory.rb +0 -11
  205. data/app/models/spree_cm_commissioner/inventory_item.rb +0 -69
  206. data/app/models/spree_cm_commissioner/price_decorator.rb +0 -9
  207. data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +0 -41
  208. data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +0 -126
  209. data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +0 -36
  210. data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +0 -25
  211. data/app/models/spree_cm_commissioner/reserved_block.rb +0 -30
  212. data/app/models/spree_cm_commissioner/seat_layout.rb +0 -20
  213. data/app/models/spree_cm_commissioner/seat_section.rb +0 -16
  214. data/app/models/spree_cm_commissioner/seats/blocks_canceler.rb +0 -30
  215. data/app/models/spree_cm_commissioner/seats/blocks_holder.rb +0 -53
  216. data/app/models/spree_cm_commissioner/seats/blocks_reserver.rb +0 -49
  217. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_on_hold_by_other_guest.rb +0 -4
  218. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_reserved_by_other_guest.rb +0 -4
  219. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_reserved_by_same_guest.rb +0 -4
  220. data/app/models/spree_cm_commissioner/seats/errors/unable_to_save_reserved_block_record.rb +0 -4
  221. data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -44
  222. data/app/models/spree_cm_commissioner/taxon_blazer_query.rb +0 -8
  223. data/app/models/spree_cm_commissioner/variant_block.rb +0 -9
  224. data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +0 -19
  225. data/app/views/spree/admin/inventory_items/show.html.erb +0 -72
  226. data/app/views/spree/admin/stock_managements/calendar.html.erb +0 -56
  227. data/config/initializers/paper_trail.rb +0 -1
  228. data/db/migrate/20250304293518_create_cm_inventory_items.rb +0 -21
  229. data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +0 -5
  230. data/db/migrate/20250502025848_add_index_to_spree_products.rb +0 -5
  231. data/db/migrate/20250502030001_add_product_type_to_spree_variants.rb +0 -5
  232. data/db/migrate/20250502030002_add_product_type_to_spree_line_items.rb +0 -5
  233. data/db/migrate/20250603035256_add_inventory_item_to_spree_prices.rb +0 -7
  234. data/db/migrate/20250619073724_drop_table_cm_line_item_seats.rb +0 -5
  235. data/db/migrate/20250619073812_drop_table_cm_vehicle_seats.rb +0 -5
  236. data/db/migrate/20250619073844_drop_table_cm_vehicle_types.rb +0 -9
  237. data/db/migrate/20250619073957_drop_table_cm_option_value_vehicle_types.rb +0 -5
  238. data/db/migrate/20250619082354_remove_unnecessary_fields_from_cm_places.rb +0 -9
  239. data/db/migrate/20250619082736_remove_route_type_from_spree_products.rb +0 -5
  240. data/db/migrate/20250619083055_remove_unnecessary_fields_from_spree_taxons.rb +0 -5
  241. data/db/migrate/20250620083055_remove_variant_id_from_cm_trips.rb +0 -5
  242. data/db/migrate/20250620090000_update_cm_trip_connections_to_use_cm_trips.rb +0 -6
  243. data/db/migrate/20250620090001_create_cm_seat_layouts.rb +0 -17
  244. data/db/migrate/20250620090002_create_cm_seat_sections.rb +0 -18
  245. data/db/migrate/20250620090003_create_cm_blocks.rb +0 -18
  246. data/db/migrate/20250624091005_create_cm_reserved_blocks.rb +0 -29
  247. data/db/migrate/20250626083642_create_cm_variant_blocks.rb +0 -24
  248. data/db/migrate/20250627023314_add_block_id_to_cm_guests.rb +0 -13
  249. data/lib/spree_cm_commissioner/cached_inventory_item.rb +0 -23
  250. data/lib/spree_cm_commissioner/test_helper/factories/block_factory.rb +0 -9
  251. data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +0 -9
  252. data/lib/spree_cm_commissioner/test_helper/factories/reserved_block_factory.rb +0 -27
  253. data/lib/spree_cm_commissioner/test_helper/factories/seat_layout_factory.rb +0 -8
  254. data/lib/spree_cm_commissioner/test_helper/factories/seat_section_factory.rb +0 -8
  255. data/lib/spree_cm_commissioner/test_helper/factories/trip_connection_factory.rb +0 -6
  256. data/lib/spree_cm_commissioner/test_helper/factories/variant_block_factory.rb +0 -7
  257. data/lib/tasks/create_default_non_permanent_inventory_items.rake +0 -16
  258. data/lib/tasks/ensure_correct_product_type.rake +0 -7
  259. data/lib/tasks/generate_inventory_items.rake +0 -7
@@ -0,0 +1,13 @@
1
+ class CreateCmTelegramChats < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :cm_telegram_chats, if_not_exists: true do |t|
4
+ t.bigint :chat_id, null: false
5
+ t.string :chat_title
6
+ t.string :chat_type
7
+ t.boolean :active, default: false
8
+ t.references :vendor, foreign_key: { to_table: :spree_vendors }
9
+ t.timestamps
10
+ end
11
+ add_index :cm_telegram_chats, :chat_id, unique: true, if_not_exists: true
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ class AddConfigurationsToCmDynamicField < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :cm_dynamic_fields, :configurations, :jsonb, default: {}, null: false, if_not_exists: true
4
+ add_index :cm_dynamic_fields, :configurations, if_not_exists: true
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddDynamicFieldOptionToGuestDynamicField < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_reference :cm_guest_dynamic_fields, :dynamic_field_option, index: true, foreign_key: { to_table: :cm_dynamic_field_options }, if_not_exists: true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddStatusToDynamicFieldOption < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :cm_dynamic_field_options, :status, :integer, default: 0, if_not_exists: true
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class AddVendorIdToSpreeCategory < ActiveRecord::Migration[7.0]
2
+ def change
3
+ unless column_exists?(:spree_promotion_categories, :vendor_id)
4
+ add_reference :spree_promotion_categories, :vendor, index: true, foreign_key: { to_table: :spree_vendors }
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ class AddEmailFieldsToSpreeVendors < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :spree_vendors, :from_email, :string, if_not_exists: true
4
+ add_column :spree_vendors, :support_email, :string, if_not_exists: true
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ class AddPositionToCmDynamicFields < ActiveRecord::Migration[7.0]
2
+ def change
3
+ unless column_exists?(:cm_dynamic_fields, :position)
4
+ add_column :cm_dynamic_fields, :position, :integer, default: 0, null: false
5
+ end
6
+
7
+ unless index_exists?(:cm_dynamic_fields, :position, name: 'index_dynamic_fields_on_position')
8
+ add_index :cm_dynamic_fields, :position, name: 'index_dynamic_fields_on_position'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class AddPositionToCmDynamicFieldOptions < ActiveRecord::Migration[7.0]
2
+ def change
3
+ unless column_exists?(:cm_dynamic_field_options, :position)
4
+ add_column :cm_dynamic_field_options, :position, :integer, default: 0, null: false
5
+ end
6
+
7
+ unless index_exists?(:cm_dynamic_field_options, :position, name: 'index_dynamic_field_options_on_position')
8
+ add_index :cm_dynamic_field_options, :position, name: 'index_dynamic_field_options_on_position'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ class RenameCmTaxonBlazerQueryToBlazerQueryables < ActiveRecord::Migration[7.0]
2
+ def change
3
+ if table_exists?(:cm_taxon_blazer_queries)
4
+ rename_table :cm_taxon_blazer_queries, :cm_blazer_queryables
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ class MakeCmBlazerQueryablesPolymorphic < ActiveRecord::Migration[7.0]
2
+ def change
3
+ if column_exists?(:cm_blazer_queryables, :taxon_id) && !column_exists?(:cm_blazer_queryables, :queryable_id)
4
+ rename_column :cm_blazer_queryables, :taxon_id, :queryable_id
5
+ end
6
+
7
+ unless column_exists?(:cm_blazer_queryables, :queryable_type)
8
+ add_column :cm_blazer_queryables, :queryable_type, :string, default: 'Spree::Taxon'
9
+ end
10
+
11
+ if foreign_key_exists?(:cm_blazer_queryables, column: :queryable_id)
12
+ remove_foreign_key :cm_blazer_queryables, column: :queryable_id
13
+ end
14
+
15
+ unless index_exists?(:cm_blazer_queryables, [:queryable_type, :queryable_id], name: 'index_cm_blazer_queryables_on_queryable_type_and_id')
16
+ add_index :cm_blazer_queryables, [:queryable_type, :queryable_id], name: 'index_cm_blazer_queryables_on_queryable_type_and_id'
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ class RemoveIndexesFromCmUserIdentityProviders < ActiveRecord::Migration[7.0]
2
+ def change
3
+ execute <<-SQL
4
+ ALTER TABLE cm_user_identity_providers
5
+ DROP CONSTRAINT IF EXISTS index_cm_user_identity_providers_on_identity_type_and_sub;
6
+ SQL
7
+
8
+ execute <<-SQL
9
+ ALTER TABLE cm_user_identity_providers
10
+ DROP CONSTRAINT IF EXISTS index_cm_user_identity_providers_on_user_id_and_identity_type;
11
+ SQL
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ class AddDataFillStageToDynamicFields < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :cm_dynamic_fields, :data_fill_stage, :integer, default: 0, null: false, if_not_exists: true
4
+ end
5
+ end
data/docker-compose.yml CHANGED
@@ -20,7 +20,7 @@ services:
20
20
 
21
21
  volumes:
22
22
  - .:/gem
23
- - ./vendor/bundle:/gem/vendor/bundle
23
+ - /gem/vendor/bundle
24
24
 
25
25
  # depends_on:
26
26
  # - db
data/lib/cm_app_logger.rb CHANGED
@@ -1,18 +1,11 @@
1
1
  # lib/cm_app_logger.rb
2
2
  module CmAppLogger
3
3
  def self.log(label:, data: nil)
4
- message = { label: label, data: data }
5
- start_time = Time.current
6
- Rails.logger.info(message.to_json)
7
-
8
- return unless block_given?
9
-
10
- # Capture the block’s return value and return it to preserve existing behavior for callers expecting that value.
11
- block_result = yield
4
+ message = {
5
+ label: label,
6
+ data: data
7
+ }
12
8
 
13
- message[:start_time] = start_time
14
- message[:duration_ms] = (Time.current - start_time) * 1000
15
9
  Rails.logger.info(message.to_json)
16
- block_result
17
10
  end
18
11
  end
@@ -11,9 +11,14 @@ module SpreeCmCommissioner
11
11
  end
12
12
 
13
13
  def add_migrations
14
- run 'bundle exec rake railties:install:migrations FROM=spree_multi_vendor'
15
- run 'bundle exec rake railties:install:migrations FROM=spree_cm_commissioner'
16
- run 'bundle exec rails generate paper_trail:install'
14
+ gems = %i[
15
+ spree_multi_vendor
16
+ spree_cm_commissioner
17
+ ]
18
+
19
+ gems.each do |gem|
20
+ run "bundle exec rake railties:install:migrations FROM=#{gem}"
21
+ end
17
22
  end
18
23
 
19
24
  def run_migrations
@@ -35,17 +40,9 @@ module SpreeCmCommissioner
35
40
  after: %r{//= require spree/backend}, verbose: true
36
41
 
37
42
  # For NPM support
38
- if File.exist?(File.join(destination_root, 'app/javascript/spree_dashboard'))
39
- template 'app/javascript/spree_dashboard/spree_cm_commissioner/utilities.js'
40
- inject_into_file 'app/javascript/spree_dashboard/spree-dashboard.js', "\nimport \"./spree_cm_commissioner/utilities.js\"",
41
- after: %r{import "@spree/dashboard"}, verbose: true
42
- else
43
- Logger.new($stdout).debug <<~MSG
44
- SpreeCmCommissioner: JavaScript files for the dashboard are missing.
45
- Please move your JavaScript files to the appropriate location in
46
- app/javascript/spree_dashboard.
47
- MSG
48
- end
43
+ template 'app/javascript/spree_cm_commissioner/utilities.js'
44
+ inject_into_file 'app/javascript/spree-dashboard.js', "\nimport \"./spree_cm_commissioner/utilities.js\"",
45
+ after: %r{import "@spree/dashboard"}, verbose: true
49
46
  end
50
47
 
51
48
  def install_telegram_web_bot
@@ -6,7 +6,3 @@ const $ = jquery;
6
6
  document.addEventListener("spree:load", function () {
7
7
  $('[data-toggle="popover"]').popover();
8
8
  });
9
-
10
- document.documentElement.addEventListener("turbo:frame-load", (event) => {
11
- $('[data-toggle="popover"]').popover();
12
- });
@@ -2,7 +2,7 @@ module SpreeCmCommissioner
2
2
  class CalendarEvent
3
3
  attr_reader :from_date, :to_date, :title, :options
4
4
 
5
- def initialize(from_date:, to_date:, title: nil, options: nil)
5
+ def initialize(from_date:, to_date:, title:, options:)
6
6
  @from_date = from_date
7
7
  @to_date = to_date
8
8
  @title = title
@@ -23,15 +23,5 @@ module SpreeCmCommissioner
23
23
  )
24
24
  end
25
25
  end
26
-
27
- def self.from_inventory_items(inventory_items)
28
- inventory_items.map do |item|
29
- CalendarEvent.new(
30
- from_date: item.inventory_date,
31
- to_date: item.inventory_date,
32
- options: { inventory_item: item }
33
- )
34
- end
35
- end
36
26
  end
37
27
  end
@@ -0,0 +1,12 @@
1
+ FactoryBot.define do
2
+
3
+ factory :cm_branch , class: SpreeCmCommissioner::Branch do
4
+ name { 'testBranch'}
5
+ lat { 11.11 }
6
+ lon { 11.11}
7
+ formatted_phone_number { generate(:phone_number) }
8
+ formatted_address { "test_address" }
9
+ state
10
+ vendor
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :departure_time, class: Spree::OptionType do
3
+ name { 'departure_time' }
4
+ attr_type { 'departure_time' }
5
+ kind {'variant'}
6
+ presentation { '' }
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :duration, class: Spree::OptionType do
3
+ name { 'duration' }
4
+ attr_type { 'duration' }
5
+ kind {'variant'}
6
+ presentation { '' }
7
+ end
8
+ end
@@ -1,5 +1,4 @@
1
1
  FactoryBot.define do
2
- # use cm_guest instead for consistency
3
2
  factory :guest, class: SpreeCmCommissioner::Guest do
4
3
  line_item { |a| a.association(:line_item) }
5
4
  first_name { FFaker::Name.name }
@@ -8,13 +7,4 @@ FactoryBot.define do
8
7
  dob { '1986-03-28' }
9
8
  token { SecureRandom.hex(32) }
10
9
  end
11
-
12
- factory :cm_guest, class: SpreeCmCommissioner::Guest do
13
- line_item { |a| a.association(:line_item) }
14
- first_name { FFaker::Name.name }
15
- last_name { FFaker::Name.name }
16
- gender { 1 }
17
- dob { '1986-03-28' }
18
- token { SecureRandom.hex(32) }
19
- end
20
10
  end
@@ -17,7 +17,7 @@ FactoryBot.define do
17
17
  end
18
18
 
19
19
  factory :cm_product_homepage_section_relatable do
20
- relatable { create(:cm_product) }
20
+ relatable { create(:product) }
21
21
  end
22
22
 
23
23
  factory :cm_taxon_homepage_section_relatable do
@@ -16,7 +16,7 @@ FactoryBot.define do
16
16
  variant { product.master }
17
17
 
18
18
  factory :cm_need_confirmation_line_item do
19
- product { create(:cm_product, need_confirmation: true) }
19
+ product { create(:product, need_confirmation: true) }
20
20
  end
21
21
 
22
22
  factory :cm_kyc_line_item do
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :line_item_seat, class: SpreeCmCommissioner::LineItemSeat do
3
+ line_item_id {}
4
+ seat_id {}
5
+ date { Date.today }
6
+ end
7
+ end
@@ -9,12 +9,6 @@ FactoryBot.define do
9
9
  presentation { 'location' }
10
10
  end
11
11
 
12
- trait :vehicle do
13
- attr_type { :string }
14
- name { 'vehicle' }
15
- presentation { 'vehicle' }
16
- end
17
-
18
12
  trait :start_date do
19
13
  attr_type { :date }
20
14
  name { 'start-date' }
@@ -153,6 +147,36 @@ FactoryBot.define do
153
147
  presentation { 'seat-number-positions' }
154
148
  end
155
149
 
150
+ trait :origin do
151
+ attr_type { :origin }
152
+ name { 'origin' }
153
+ presentation { 'origin' }
154
+ end
155
+
156
+ trait :destination do
157
+ attr_type { :destination }
158
+ name { 'destination' }
159
+ presentation { 'destination' }
160
+ end
161
+
162
+ trait :departure_time do
163
+ attr_type { :time }
164
+ name { 'departure-time' }
165
+ presentation { 'departure-time' }
166
+ end
167
+
168
+ trait :vehicle do
169
+ attr_type { :vehicle_id }
170
+ name { 'vehicle' }
171
+ presentation { 'vehicle' }
172
+ end
173
+
174
+ trait :allow_seat_selection do
175
+ attr_type { :boolean }
176
+ name { 'allow-seat-selection' }
177
+ presentation { 'allow-seat-selection' }
178
+ end
179
+
156
180
  initialize_with { Spree::OptionType.where(name: name).first_or_initialize }
157
181
  end
158
182
  end
@@ -1,2 +1,38 @@
1
1
  FactoryBot.define do
2
+ factory :transit_order, class: Spree::Order do
3
+ bill_address
4
+ ship_address
5
+ state {'complete'}
6
+ payment_state {'paid'}
7
+
8
+ transient do
9
+ line_items_count { 1 }
10
+ shipment_cost { 100 }
11
+ shipping_method_filter { Spree::ShippingMethod::DISPLAY_ON_FRONT_END }
12
+ seats {}
13
+ variant {}
14
+ quantity {}
15
+ date { Date.today }
16
+ selected_seats {[]}
17
+ line_item_seats_attributes{[]}
18
+ end
19
+
20
+ after(:create) do |order, evaluator|
21
+ if evaluator.quantity.nil? && evaluator.seats.present?
22
+ @line_item_seats_attributes = evaluator.seats.map do |seat|
23
+ {seat_id: seat.id, date: evaluator.date, variant_id: evaluator.variant.id}
24
+ end
25
+ create(:line_item, order: order, variant: evaluator.variant, date: evaluator.date, line_item_seats_attributes: @line_item_seats_attributes)
26
+ order.line_items.reload
27
+ else
28
+ create(:line_item, order: order, variant: evaluator.variant, date: evaluator.date, quantity: evaluator.quantity)
29
+ end
30
+
31
+ stock_location = order.line_items&.first&.variant&.stock_items&.first&.stock_location || create(:stock_location)
32
+ create(:shipment, order: order, cost: evaluator.shipment_cost, stock_location: stock_location)
33
+ order.shipments.reload
34
+
35
+ order.update_with_updater!
36
+ end
37
+ end
2
38
  end
@@ -1,19 +1,6 @@
1
1
  FactoryBot.define do
2
- factory :cm_product_in_stock, parent: :product_in_stock do
3
- product_type { :ecommerce }
4
- end
5
-
6
- factory :cm_product_with_option_types, parent: :product_with_option_types do
7
- product_type { :ecommerce }
8
- end
9
-
10
- factory :cm_base_product, parent: :base_product do
11
- product_type { :ecommerce }
12
- end
13
-
14
- factory :cm_product, parent: :product do
2
+ factory :cm_product, parent: :base_product do
15
3
  vendor { Spree::Vendor.first || create(:cm_vendor) }
16
- product_type { :ecommerce }
17
4
 
18
5
  before(:create) do |product|
19
6
  create(:stock_location) unless Spree::StockLocation.any?
@@ -46,6 +33,35 @@ FactoryBot.define do
46
33
  end
47
34
  end
48
35
 
36
+ factory :route do
37
+ route_type {:automobile}
38
+ product_type { :transit }
39
+ before(:create) do |route, evaluator|
40
+ create(:stock_location) unless Spree::StockLocation.any?
41
+ if route.stores.empty?
42
+ default_store = Spree::Store.default.persisted? ? Spree::Store.default : nil
43
+ store = default_store || create(:store)
44
+
45
+ route.stores << [store]
46
+ end
47
+ end
48
+ after(:create) do |route, evaluator|
49
+ trip = route.master
50
+ trip.permanent_stock = 10
51
+ trip.stock_items = [create(:stock_item, variant: trip, stock_location: route.vendor.stock_locations.first)]
52
+ trip.stock_items.first.adjust_count_on_hand(10)
53
+
54
+ # option types
55
+ route.option_types << create(:cm_option_type, :origin)
56
+ route.option_types << create(:cm_option_type, :destination)
57
+ route.option_types << create(:cm_option_type, :departure_time)
58
+ route.option_types << create(:cm_option_type, :duration_in_hours)
59
+ route.option_types << create(:cm_option_type, :duration_in_minutes)
60
+ route.option_types << create(:cm_option_type, :allow_seat_selection)
61
+ route.option_types << create(:cm_option_type, :vehicle)
62
+ end
63
+ end
64
+
49
65
  factory :cm_subscribable_product do
50
66
  option_types { [
51
67
  create(:cm_option_type, :month),
@@ -69,7 +85,7 @@ FactoryBot.define do
69
85
  option_value2 = create(:cm_option_value, presentation: "#{evaluator.due_date} Days", name: evaluator.due_date.to_s, option_type: product.option_types[1])
70
86
  option_value3 = create(:cm_option_value, presentation: "#{evaluator.payment_option}", name: evaluator.payment_option.to_s, option_type: product.option_types[2])
71
87
 
72
- variant = create(:cm_variant, price: product.price, product: product)
88
+ variant = create(:variant, price: product.price, product: product)
73
89
  variant.option_values = [option_value1, option_value2, option_value3]
74
90
  variant.save!
75
91
 
@@ -87,7 +103,7 @@ FactoryBot.define do
87
103
  end
88
104
 
89
105
  after(:create) do |product, evaluator|
90
- variant = create(:cm_variant, price: product.price, product: product)
106
+ variant = create(:variant, price: product.price, product: product)
91
107
  variant.save!
92
108
 
93
109
  variant.stock_items.first.adjust_count_on_hand(evaluator.total_inventory)
@@ -120,12 +136,12 @@ FactoryBot.define do
120
136
  create(:cm_option_value, presentation: 'Yes', name: '1', option_type: product.option_types.find_by(name: 'bib-pre-generation-on-create'))
121
137
  end
122
138
 
123
- variant1 = create(:cm_variant, price: product.price, product: product)
139
+ variant1 = create(:variant, price: product.price, product: product)
124
140
  variant1.option_values = [option_value1]
125
141
  variant1.option_values << bib_pre_generation_option_value if evaluator.bib_pre_generation_on_create
126
142
  variant1.save!
127
143
 
128
- variant2 = create(:cm_variant, price: product.price, product: product)
144
+ variant2 = create(:variant, price: product.price, product: product)
129
145
  variant2.option_values = [option_value2]
130
146
  variant2.option_values << bib_pre_generation_option_value if evaluator.bib_pre_generation_on_create
131
147
  variant2.save!
@@ -24,8 +24,8 @@ FactoryBot.define do
24
24
  # variant will add itself to all stock_locations in an after_create
25
25
  # creating a product will automatically create a master variant
26
26
  store = Spree::Store.first || create(:store)
27
- product_1 = create(:cm_product, stores: [store])
28
- product_2 = create(:cm_product, stores: [store])
27
+ product_1 = create(:product, stores: [store])
28
+ product_2 = create(:product, stores: [store])
29
29
 
30
30
  stock_location.stock_items.where(variant_id: product_1.master.id).first.adjust_count_on_hand(10)
31
31
  stock_location.stock_items.where(variant_id: product_2.master.id).first.adjust_count_on_hand(20)
@@ -0,0 +1,14 @@
1
+ FactoryBot.define do
2
+
3
+ factory :cm_stop , class: SpreeCmCommissioner::Stop do
4
+ code { 'TS'}
5
+ name { 'testStop'}
6
+ formatted_phone_number { generate(:phone_number) }
7
+ formatted_address { "test_address" }
8
+ lat { 11.11 }
9
+ lon { 11.11}
10
+ branch { create(:cm_branch) }
11
+ state
12
+ vendor
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :transit_place, class: Spree::Taxon do
3
+ transient do
4
+ taxonomy { Spree::Taxonomy.place}
5
+ end
6
+ parent{ taxonomy.root }
7
+ end
8
+ end
@@ -1,13 +1,6 @@
1
1
  FactoryBot.define do
2
- factory :cm_trip, class: SpreeCmCommissioner::Trip do
3
- departure_time { Time.zone.now.change(hour: 8, min: 0) } # example 8:00 AM
4
- duration { 3600 } # 1 hour in seconds
5
- allow_seat_selection { true }
6
-
7
- product { create(:cm_product, product_type: :transit) }
8
-
9
- association :vehicle, factory: :cm_vehicle
10
- association :origin, factory: :cm_place
11
- association :destination, factory: :cm_place
2
+ factory :trip_connection, class: 'SpreeCmCommissioner::TripConnection' do
3
+ association :from_trip, factory: :variant
4
+ association :to_trip, factory: :variant
12
5
  end
13
6
  end
@@ -1,5 +1,5 @@
1
1
  FactoryBot.define do
2
- factory :user_identity_provider, class: SpreeCmCommissioner::UserIdentityProvider do
2
+ factory :cm_user_identity_provider, class: SpreeCmCommissioner::UserIdentityProvider do
3
3
  sequence(:sub) { |n| "sub-#{n}" }
4
4
  identity_type { SpreeCmCommissioner::UserIdentityProvider.identity_types[:google] }
5
5
  email { 'fake@example.com' }
@@ -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