spree_cm_commissioner 2.0.3.pre.pre → 2.0.3.pre.pre1

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 (236) 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 +1 -28
  5. data/Rakefile +4 -33
  6. data/app/assets/images/mailer/mail.png +0 -0
  7. data/app/assets/images/mailer/tenant_phone.png +0 -0
  8. data/app/assets/images/mailer/tenant_user.png +0 -0
  9. data/app/assets/stylesheets/spree_cm_commissioner/backend/calendar.scss +11 -8
  10. data/app/controllers/blazer/queries_controller_decorator.rb +11 -0
  11. data/app/controllers/concerns/spree_cm_commissioner/transit/taxon_bitwise.rb +44 -0
  12. data/app/controllers/spree/admin/stock_managements_controller.rb +1 -63
  13. data/app/controllers/spree/api/v2/operator/event_charts_controller.rb +59 -0
  14. data/app/controllers/spree/api/v2/organizer/invite_guests_controller.rb +1 -1
  15. data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +31 -14
  16. data/app/controllers/spree/api/v2/storefront/guests_controller.rb +13 -13
  17. data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +2 -2
  18. data/app/factory/spree_cm_commissioner/invite_guest_claimed_telegram_message_factory.rb +24 -81
  19. data/app/finders/spree_cm_commissioner/line_items/find_by_variant_decorator.rb +20 -0
  20. data/app/interactors/spree_cm_commissioner/create_event.rb +5 -0
  21. data/app/interactors/spree_cm_commissioner/create_ticket.rb +6 -5
  22. data/app/interactors/spree_cm_commissioner/create_vendor.rb +44 -0
  23. data/app/interactors/spree_cm_commissioner/pin_code_sender.rb +0 -1
  24. data/app/interactors/spree_cm_commissioner/reports_assigner.rb +17 -0
  25. data/app/interactors/spree_cm_commissioner/sms.rb +1 -1
  26. data/app/interactors/spree_cm_commissioner/user_id_token_authenticator.rb +7 -3
  27. data/app/interactors/spree_cm_commissioner/user_id_token_checker.rb +11 -3
  28. data/app/interactors/spree_cm_commissioner/user_identity_checker.rb +12 -6
  29. data/app/interactors/spree_cm_commissioner/user_registration_with_id_token.rb +7 -1
  30. data/app/jobs/spree_cm_commissioner/application_job.rb +0 -20
  31. data/app/jobs/spree_cm_commissioner/application_unique_job.rb +0 -20
  32. data/app/jobs/spree_cm_commissioner/reports_assigner_job.rb +7 -0
  33. data/app/jobs/spree_cm_commissioner/sms_pin_code_job.rb +1 -1
  34. data/app/mailers/spree/order_mailer_decorator.rb +18 -3
  35. data/app/models/concerns/spree_cm_commissioner/line_item_durationable.rb +33 -9
  36. data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +12 -1
  37. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -39
  38. data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +3 -1
  39. data/app/models/concerns/spree_cm_commissioner/product_type.rb +0 -10
  40. data/app/models/concerns/spree_cm_commissioner/route_type.rb +1 -1
  41. data/app/models/concerns/spree_cm_commissioner/taxon_kind.rb +1 -1
  42. data/app/models/concerns/spree_cm_commissioner/tenant_preference.rb +1 -0
  43. data/app/models/concerns/spree_cm_commissioner/variant_options_concern.rb +4 -2
  44. data/app/models/spree_cm_commissioner/branch.rb +12 -0
  45. data/app/models/spree_cm_commissioner/dynamic_field.rb +20 -0
  46. data/app/models/spree_cm_commissioner/guest.rb +56 -18
  47. data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +41 -1
  48. data/app/models/spree_cm_commissioner/line_item_decorator.rb +78 -46
  49. data/app/models/spree_cm_commissioner/line_item_seat.rb +10 -0
  50. data/app/models/spree_cm_commissioner/notification_taxon.rb +1 -1
  51. data/app/models/spree_cm_commissioner/option_type_decorator.rb +11 -1
  52. data/app/models/spree_cm_commissioner/option_value_vehicle_type.rb +8 -0
  53. data/app/models/spree_cm_commissioner/order_decorator.rb +1 -30
  54. data/app/models/spree_cm_commissioner/place.rb +4 -1
  55. data/app/models/spree_cm_commissioner/product_decorator.rb +28 -10
  56. data/app/models/spree_cm_commissioner/service_calendar.rb +2 -0
  57. data/app/models/spree_cm_commissioner/state_decorator.rb +1 -0
  58. data/app/models/spree_cm_commissioner/stock/availability_checker.rb +25 -26
  59. data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +1 -2
  60. data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
  61. data/app/models/spree_cm_commissioner/stock_item_decorator.rb +0 -17
  62. data/app/models/spree_cm_commissioner/stop.rb +23 -0
  63. data/app/models/spree_cm_commissioner/taxon_decorator.rb +1 -0
  64. data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +6 -0
  65. data/app/models/spree_cm_commissioner/trip.rb +10 -10
  66. data/app/models/spree_cm_commissioner/trip_connection.rb +5 -5
  67. data/app/models/spree_cm_commissioner/trip_stop.rb +25 -6
  68. data/app/models/spree_cm_commissioner/user_decorator.rb +6 -0
  69. data/app/models/spree_cm_commissioner/user_identity_provider.rb +26 -4
  70. data/app/models/spree_cm_commissioner/variant_decorator.rb +47 -37
  71. data/app/models/spree_cm_commissioner/variant_options.rb +23 -0
  72. data/app/models/spree_cm_commissioner/vehicle.rb +15 -10
  73. data/app/models/spree_cm_commissioner/vehicle_seat.rb +11 -0
  74. data/app/models/spree_cm_commissioner/vehicle_type.rb +76 -0
  75. data/app/models/spree_cm_commissioner/vendor_decorator.rb +17 -11
  76. data/app/models/spree_cm_commissioner/vendor_place.rb +3 -9
  77. data/app/models/spree_cm_commissioner/vendor_stop.rb +10 -0
  78. data/app/queries/spree_cm_commissioner/event_chart_queries.rb +179 -0
  79. data/app/queries/spree_cm_commissioner/trip_query.rb +44 -70
  80. data/app/queries/spree_cm_commissioner/trip_search_query.rb +76 -0
  81. data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +45 -0
  82. data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +55 -0
  83. data/app/queries/spree_cm_commissioner/vendor_stop_place_query.rb +54 -0
  84. data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +0 -3
  85. data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
  86. data/app/serializables/spree_cm_commissioner/event_chart.rb +11 -0
  87. data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +0 -2
  88. data/app/serializers/spree/v2/storefront/line_item_serializer_decorator.rb +0 -1
  89. data/app/serializers/spree/v2/tenant/user_serializer.rb +1 -0
  90. data/app/serializers/spree_cm_commissioner/v2/storefront/dynamic_field_serializer.rb +1 -1
  91. data/app/services/spree_cm_commissioner/user_authenticator.rb +1 -1
  92. data/app/services/spree_cm_commissioner/vehicle_option_value_creator.rb +11 -0
  93. data/app/views/blazer/queries/_content.html.erb +2 -0
  94. data/app/views/blazer/queries/_preset.html.erb +11 -0
  95. data/app/views/spree/admin/stock_managements/_variant_stock_items.html.erb +2 -7
  96. data/app/views/spree/admin/stock_managements/index.html.erb +6 -55
  97. data/app/views/spree/admin/tenant_vendors/index.html.erb +9 -2
  98. data/app/views/spree/admin/tenants/_form.html.erb +9 -0
  99. data/app/views/spree/admin/tenants/edit.html.erb +2 -1
  100. data/app/views/spree/admin/tenants/index.html.erb +7 -1
  101. data/app/views/spree/admin/vendors/_form.html.erb +14 -0
  102. data/app/views/spree/order_mailer/confirm_email.html.erb +27 -16
  103. data/app/views/spree_cm_commissioner/layouts/order_mailer.html.erb +5 -1
  104. data/app/views/spree_cm_commissioner/order_mailer/_mailer_stylesheets.html.erb +41 -4
  105. data/app/views/spree_cm_commissioner/order_mailer/tenant/_customer_info.html.erb +42 -0
  106. data/app/views/spree_cm_commissioner/order_mailer/tenant/_footer.html.erb +25 -0
  107. data/app/views/spree_cm_commissioner/order_mailer/tenant/_greeting.html.erb +19 -0
  108. data/app/views/spree_cm_commissioner/order_mailer/tenant/_support_contact.html.erb +33 -0
  109. data/config/initializers/spree_permitted_attributes.rb +0 -5
  110. data/config/locales/en.yml +5 -1
  111. data/config/routes.rb +3 -21
  112. data/db/migrate/20240202080634_update_counter_cache_of_vehicle_type.rb +1 -3
  113. data/db/migrate/20250709073455_add_email_fields_to_spree_vendors.rb +6 -0
  114. data/db/migrate/20250710082132_add_preset_to_blazer_queries.rb +5 -0
  115. data/db/migrate/20250715103333_remove_indexes_from_cm_user_identity_providers.rb +13 -0
  116. data/db/migrate/20250718071620_add_data_fill_stage_to_dynamic_fields.rb +5 -0
  117. data/docker-compose.yml +1 -1
  118. data/lib/cm_app_logger.rb +4 -11
  119. data/lib/generators/spree_cm_commissioner/install/install_generator.rb +11 -14
  120. data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_dashboard/spree_cm_commissioner → spree_cm_commissioner}/utilities.js +0 -4
  121. data/lib/spree_cm_commissioner/calendar_event.rb +1 -11
  122. data/lib/spree_cm_commissioner/test_helper/factories/blazer_query_factory.rb +17 -0
  123. data/lib/spree_cm_commissioner/test_helper/factories/branch_factory.rb +12 -0
  124. data/lib/spree_cm_commissioner/test_helper/factories/departure_time_option_type_factory.rb +8 -0
  125. data/lib/spree_cm_commissioner/test_helper/factories/duration_option_type_factory.rb +8 -0
  126. data/lib/spree_cm_commissioner/test_helper/factories/guest_factory.rb +0 -10
  127. data/lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb +1 -1
  128. data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +1 -1
  129. data/lib/spree_cm_commissioner/test_helper/factories/line_item_seat_factory.rb +7 -0
  130. data/lib/spree_cm_commissioner/test_helper/factories/option_type_factory.rb +30 -6
  131. data/lib/spree_cm_commissioner/test_helper/factories/order_factory.rb +36 -0
  132. data/lib/spree_cm_commissioner/test_helper/factories/product_factory.rb +34 -18
  133. data/lib/spree_cm_commissioner/test_helper/factories/stock_location_factory.rb +2 -2
  134. data/lib/spree_cm_commissioner/test_helper/factories/stop_factory.rb +14 -0
  135. data/lib/spree_cm_commissioner/test_helper/factories/transit_place_factory.rb +8 -0
  136. data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +3 -11
  137. data/lib/spree_cm_commissioner/test_helper/factories/user_identity_provider_factory.rb +1 -1
  138. data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +19 -41
  139. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_factory.rb +1 -1
  140. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_option_type_factory.rb +8 -0
  141. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_type_factory.rb +96 -0
  142. data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +1 -6
  143. data/lib/spree_cm_commissioner/test_helper/factories/vendor_place_factory.rb +1 -13
  144. data/lib/spree_cm_commissioner/trip_query_result.rb +0 -8
  145. data/lib/spree_cm_commissioner/trip_result.rb +3 -5
  146. data/lib/spree_cm_commissioner/trip_seat_layout_result.rb +11 -0
  147. data/lib/spree_cm_commissioner/version.rb +1 -1
  148. data/lib/spree_cm_commissioner.rb +1 -35
  149. data/spree_cm_commissioner.gemspec +0 -7
  150. metadata +46 -145
  151. data/app/controllers/spree/admin/inventory_items_controller.rb +0 -83
  152. data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +0 -42
  153. data/app/finders/spree_cm_commissioner/accommodations/find.rb +0 -37
  154. data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +0 -32
  155. data/app/interactors/spree_cm_commissioner/ensure_correct_product_type.rb +0 -40
  156. data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +0 -25
  157. data/app/interactors/spree_cm_commissioner/stock/inventory_item_resetter.rb +0 -44
  158. data/app/interactors/spree_cm_commissioner/stock/inventory_items_adjuster.rb +0 -13
  159. data/app/interactors/spree_cm_commissioner/stock/inventory_items_generator.rb +0 -15
  160. data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +0 -75
  161. data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +0 -32
  162. data/app/interactors/spree_cm_commissioner/variant_block_updater.rb +0 -62
  163. data/app/interactors/spree_cm_commissioner/vehicle_updater.rb +0 -41
  164. data/app/jobs/spree_cm_commissioner/ensure_correct_product_type_job.rb +0 -7
  165. data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +0 -7
  166. data/app/jobs/spree_cm_commissioner/stock/inventory_items_adjuster_job.rb +0 -11
  167. data/app/jobs/spree_cm_commissioner/stock/inventory_items_generator_job.rb +0 -11
  168. data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +0 -9
  169. data/app/models/concerns/spree_cm_commissioner/order_seatable.rb +0 -44
  170. data/app/models/concerns/spree_cm_commissioner/vehicle_type.rb +0 -11
  171. data/app/models/spree_cm_commissioner/block.rb +0 -43
  172. data/app/models/spree_cm_commissioner/inventory.rb +0 -11
  173. data/app/models/spree_cm_commissioner/inventory_item.rb +0 -69
  174. data/app/models/spree_cm_commissioner/price_decorator.rb +0 -9
  175. data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +0 -41
  176. data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +0 -126
  177. data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +0 -36
  178. data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +0 -25
  179. data/app/models/spree_cm_commissioner/reserved_block.rb +0 -30
  180. data/app/models/spree_cm_commissioner/seat_layout.rb +0 -20
  181. data/app/models/spree_cm_commissioner/seat_section.rb +0 -16
  182. data/app/models/spree_cm_commissioner/seats/blocks_canceler.rb +0 -30
  183. data/app/models/spree_cm_commissioner/seats/blocks_holder.rb +0 -53
  184. data/app/models/spree_cm_commissioner/seats/blocks_reserver.rb +0 -49
  185. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_on_hold_by_other_guest.rb +0 -4
  186. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_reserved_by_other_guest.rb +0 -4
  187. data/app/models/spree_cm_commissioner/seats/errors/blocks_are_reserved_by_same_guest.rb +0 -4
  188. data/app/models/spree_cm_commissioner/seats/errors/unable_to_save_reserved_block_record.rb +0 -4
  189. data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -44
  190. data/app/models/spree_cm_commissioner/variant_block.rb +0 -9
  191. data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +0 -19
  192. data/app/views/spree/admin/inventory_items/show.html.erb +0 -72
  193. data/app/views/spree/admin/stock_managements/calendar.html.erb +0 -56
  194. data/config/initializers/paper_trail.rb +0 -1
  195. data/db/migrate/20250122000000_move_route_type_from_vehicles_to_trips.rb +0 -7
  196. data/db/migrate/20250304293518_create_cm_inventory_items.rb +0 -21
  197. data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +0 -5
  198. data/db/migrate/20250502025848_add_index_to_spree_products.rb +0 -5
  199. data/db/migrate/20250502030001_add_product_type_to_spree_variants.rb +0 -5
  200. data/db/migrate/20250502030002_add_product_type_to_spree_line_items.rb +0 -5
  201. data/db/migrate/20250603035256_add_inventory_item_to_spree_prices.rb +0 -7
  202. data/db/migrate/20250619073724_drop_table_cm_line_item_seats.rb +0 -5
  203. data/db/migrate/20250619073812_drop_table_cm_vehicle_seats.rb +0 -5
  204. data/db/migrate/20250619073844_drop_table_cm_vehicle_types.rb +0 -9
  205. data/db/migrate/20250619073957_drop_table_cm_option_value_vehicle_types.rb +0 -5
  206. data/db/migrate/20250619082354_remove_unnecessary_fields_from_cm_places.rb +0 -9
  207. data/db/migrate/20250619082736_remove_route_type_from_spree_products.rb +0 -5
  208. data/db/migrate/20250619083055_remove_unnecessary_fields_from_spree_taxons.rb +0 -5
  209. data/db/migrate/20250620083055_remove_variant_id_from_cm_trips.rb +0 -5
  210. data/db/migrate/20250620090000_update_cm_trip_connections_to_use_cm_trips.rb +0 -6
  211. data/db/migrate/20250620090001_create_cm_seat_layouts.rb +0 -17
  212. data/db/migrate/20250620090002_create_cm_seat_sections.rb +0 -18
  213. data/db/migrate/20250620090003_create_cm_blocks.rb +0 -18
  214. data/db/migrate/20250624091005_create_cm_reserved_blocks.rb +0 -29
  215. data/db/migrate/20250626083642_create_cm_variant_blocks.rb +0 -24
  216. data/db/migrate/20250627023314_add_block_id_to_cm_guests.rb +0 -13
  217. data/db/migrate/20250716022821_add_location_reference_to_cm_vendor_places.rb +0 -5
  218. data/db/migrate/20250716031743_drop_table_cm_vendor_stops.rb +0 -5
  219. data/db/migrate/20250717023824_add_vendor_reference_to_cm_trips.rb +0 -5
  220. data/db/migrate/20250717041414_add_location_place_reference_to_cm_trip_stops.rb +0 -5
  221. data/db/migrate/20250717042539_rename_cm_trip_stops_stop_id_column_to_stop_place_id.rb +0 -7
  222. data/db/migrate/20250717042707_rename_cm_trips_origin_and_destination_to_origin_place_and_destination_place.rb +0 -11
  223. data/db/migrate/20250721080738_add_vehicle_type_to_cm_vehicles.rb +0 -7
  224. data/db/migrate/20250725092713_add_block_type_to_cm_blocks.rb +0 -5
  225. data/lib/spree_cm_commissioner/cached_inventory_item.rb +0 -23
  226. data/lib/spree_cm_commissioner/test_helper/factories/block_factory.rb +0 -16
  227. data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +0 -9
  228. data/lib/spree_cm_commissioner/test_helper/factories/reserved_block_factory.rb +0 -27
  229. data/lib/spree_cm_commissioner/test_helper/factories/seat_layout_factory.rb +0 -11
  230. data/lib/spree_cm_commissioner/test_helper/factories/seat_section_factory.rb +0 -16
  231. data/lib/spree_cm_commissioner/test_helper/factories/trip_connection_factory.rb +0 -6
  232. data/lib/spree_cm_commissioner/test_helper/factories/trip_stop_factory.rb +0 -10
  233. data/lib/spree_cm_commissioner/test_helper/factories/variant_block_factory.rb +0 -7
  234. data/lib/tasks/create_default_non_permanent_inventory_items.rake +0 -16
  235. data/lib/tasks/ensure_correct_product_type.rake +0 -7
  236. data/lib/tasks/generate_inventory_items.rake +0 -7
@@ -0,0 +1,42 @@
1
+ <div class="content-cell">
2
+ <div class="container">
3
+ <h2><%= I18n.t('mail.order_mailer.customer_info') %></h2>
4
+ <div class="flex two-columns">
5
+ <div class="two-columns-item">
6
+ <div class="flex two-columns-item_detail">
7
+ <div class="two-columns_icon"><%= image_tag "mailer/tenant_user.png", class: "mail-icon" %></div>
8
+ <div class="two-columns_text-container">
9
+ <p class="two-columns_title">Name</p>
10
+ <p class="two-columns_description"><%= user_full_name(order) %></p>
11
+ </div>
12
+ </div>
13
+ <div class="flex two-columns-item_detail">
14
+ <div class="two-columns_icon"><%= image_tag "mailer/mail.png", class: "mail-icon" %></div>
15
+ <div class="two-columns_text-container">
16
+ <p class="two-columns_title">Email</p>
17
+ <% if order.email.present? %>
18
+ <p class="two-columns_description"><%= link_to order.email, "mailto:#{order.email}" %></p>
19
+ <% end %>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ <div class="vertical-separater"></div>
24
+ <div class="two-columns-item">
25
+ <div class="flex two-columns-item_detail">
26
+ <div class="two-columns_icon"><%= image_tag "mailer/tenant_phone.png", class: "mail-icon" %></div>
27
+ <div class="two-columns_text-container">
28
+ <p class="two-columns_title">Contact</p>
29
+ <% if order.phone_number.present? || order.intel_phone_number.present? %>
30
+ <p class="two-columns_description">
31
+ <%= link_to(
32
+ order.phone_number || order.intel_phone_number,
33
+ "tel:#{order.phone_number || order.intel_phone_number}") %>
34
+ </p>
35
+ <% end %>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ <hr>
41
+ </div>
42
+ </div>
@@ -0,0 +1,25 @@
1
+ <div class="email-footer_inner">
2
+ <div class="mb-24"><%= store.description%></div>
3
+ <div class="mb-24 f-14"><%= store.address%></div>
4
+ <h2 class="mb-24">Connect with us</h2>
5
+ <table class="mb-24 social_icons">
6
+ <tbody>
7
+ <tr>
8
+ <% if store.facebook? %>
9
+ <td class="social_icon">
10
+ <%= link_to store.facebook, target: :_blank do %>
11
+ <%= image_tag "mailer/facebook.png", class: "mail-icon"%>
12
+ <% end %>
13
+ </td>
14
+ <% end %>
15
+ <% if store.instagram?%>
16
+ <td class="social_icon">
17
+ <%= link_to store.instagram, target: :_blank do %>
18
+ <%= image_tag "mailer/instagram.png", class: "mail-icon"%>
19
+ <% end %>
20
+ </td>
21
+ <% end %>
22
+ </tr>
23
+ </tbody>
24
+ </table>
25
+ </div>
@@ -0,0 +1,19 @@
1
+ <div id="greeting-card-1">
2
+ <div>
3
+ <div class="header">
4
+ <h1><%=@order.store.name %></h1>
5
+ <% if @vendor_logo_url.present? %>
6
+ <img src="<%= @vendor_logo_url %>" alt="Vendor Logo" class="icon-hang-meas">
7
+ <% end %>
8
+ </div>
9
+ <div class="booking-confirm">
10
+ <%= I18n.t('mail.order_mailer.booking_confirm') %>
11
+ </div>
12
+ <div class="hello">
13
+ <%= I18n.t('mail.order_mailer.hello', full_name: user_full_name(order)) %>
14
+ </div>
15
+ <div class="description">
16
+ <%= I18n.t('mail.order_mailer.booking_event', order_number: @order.number || 'NA') %>
17
+ </div>
18
+ </div>
19
+ </div>
@@ -0,0 +1,33 @@
1
+ <div class="content-cell">
2
+ <div class="container">
3
+ <h2><%= I18n.t('mail.order_mailer.bookmeplus_support')%></h2>
4
+ <div class="flex two-columns">
5
+ <div class="two-columns-item">
6
+ <div class="flex two-columns-item_detail">
7
+ <div class="two-columns_icon"><%= image_tag "mailer/tenant_phone.png", class: "mail-icon"%></div>
8
+ <div class="two-columns_text-container">
9
+ <p class="two-columns_title">Contact</p>
10
+ <% if current_store.contact_phone.present? %>
11
+ <p class="two-columns_description">
12
+ <%= link_to current_store.contact_phone, "tel:#{current_store.contact_phone}" %>
13
+ </p>
14
+ <% end %>
15
+ </div>
16
+ </div>
17
+ </div>
18
+ <div class="vertical-separater"></div>
19
+ <div class="two-columns-item">
20
+ <div class="flex two-columns-item_detail">
21
+ <div class="two-columns_icon"><%= image_tag "mailer/mail.png", class: "mail-icon"%></div>
22
+ <div class="two-columns_text-container">
23
+ <p class="two-columns_title">Email</p>
24
+ <p class="two-columns_description">
25
+ <%= @vendor&.support_email.present? ? link_to(@vendor.support_email, "mailto:#{@vendor.support_email}") : "N/A" %>
26
+ </p>
27
+
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
@@ -60,10 +60,5 @@ module Spree
60
60
  age
61
61
  gender
62
62
  ]
63
-
64
- @@stock_movement_attributes += %i[
65
- originator_type
66
- originator_id
67
- ]
68
63
  end
69
64
  end
@@ -54,7 +54,11 @@ en:
54
54
  guest_card_classes:
55
55
  empty_info: "No guest card classes information available."
56
56
  background_image: "Background Image"
57
-
57
+ guest_dynamic_field:
58
+ errors:
59
+ pre_registration_required: "is required before ticket issuance"
60
+ post_registration_required: "must be completed after purchase"
61
+ during_check_in_required: "is required during check-in"
58
62
  google_wallet:
59
63
  note: "Click <b>Create</b> or <b> Update</b> to connect to Google Wallet after filled all information "
60
64
  google_wallet_class_created: "Google Wallet class created successfully."
data/config/routes.rb CHANGED
@@ -138,21 +138,7 @@ Spree::Core::Engine.add_routes do
138
138
  end
139
139
  end
140
140
 
141
- resources :stock_managements do
142
- collection do
143
- get :calendar
144
- end
145
- end
146
-
147
- resources :variants do
148
- resources :inventory_items, only: %i[show create] do
149
- member do
150
- patch :reset
151
- patch :update_prices
152
- delete :delete_prices
153
- end
154
- end
155
- end
141
+ resources :stock_managements
156
142
 
157
143
  resources :product_completion_steps do
158
144
  collection do
@@ -545,8 +531,6 @@ Spree::Core::Engine.add_routes do
545
531
  end
546
532
 
547
533
  namespace :storefront do
548
- resources :inventory_item
549
-
550
534
  resources :waiting_room_sessions, only: :create
551
535
  resources :vattanac_banks, only: %i[create]
552
536
  resource :cart, controller: :cart, only: %i[show create destroy] do
@@ -572,10 +556,7 @@ Spree::Core::Engine.add_routes do
572
556
  resource :cart_guests, only: %i[create destroy]
573
557
  resources :cart_payment_method_groups, only: %i[index]
574
558
 
575
- resources :accommodations, only: %i[index show] do
576
- resources :variants, only: %i[index show], module: :accommodations
577
- end
578
-
559
+ resources :accommodations, only: %i[index show]
579
560
  resources :line_items, only: %i[index show]
580
561
  resources :account_checker
581
562
  resource :account_recovers, only: [:update]
@@ -663,6 +644,7 @@ Spree::Core::Engine.add_routes do
663
644
  resources :taxons, only: %i[show] do
664
645
  resource :event_ticket_aggregators, only: %i[show]
665
646
  resource :pie_chart_event_aggregators, only: %i[show]
647
+ resources :event_charts, only: %i[index show]
666
648
  end
667
649
  end
668
650
  end
@@ -1,7 +1,5 @@
1
1
  class UpdateCounterCacheOfVehicleType < ActiveRecord::Migration[7.0]
2
- def up
3
- if defined?(SpreeCmCommissioner::VehicleSeat) && SpreeCmCommissioner::VehicleSeat.respond_to?(:counter_culture_fix_counts)
2
+ def up
4
3
  SpreeCmCommissioner::VehicleSeat.counter_culture_fix_counts
5
4
  end
6
- end
7
5
  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,5 @@
1
+ class AddPresetToBlazerQueries < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :blazer_queries, :preset, :boolean, default: false, if_not_exists: true
4
+ end
5
+ 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,17 @@
1
+ FactoryBot.define do
2
+ factory :blazer_query, class: Blazer::Query do
3
+ sequence(:id) { |n| n }
4
+ creator_id { 1 }
5
+ name { 'Report' }
6
+ description { FFaker::Lorem.sentence }
7
+ statement { "SELECT 1" }
8
+ data_source { "main" }
9
+ status { "success" }
10
+ created_at { Time.current }
11
+ updated_at { Time.current }
12
+
13
+ trait :preset do
14
+ preset { true }
15
+ end
16
+ end
17
+ 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