spree_cm_commissioner 1.11.0.pre.pre3 → 1.12.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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test_and_build_gem.yml +143 -12
  3. data/.gitignore +1 -2
  4. data/Gemfile.lock +1 -22
  5. data/Rakefile +4 -33
  6. data/app/controllers/spree/admin/cms_pages_controller_decorator.rb +32 -0
  7. data/app/controllers/spree/admin/stock_managements_controller.rb +1 -62
  8. data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +31 -14
  9. data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +2 -2
  10. data/app/controllers/spree/api/v2/storefront/waiting_room_sessions_controller.rb +1 -0
  11. data/app/controllers/spree/api/v2/tenant/account_checker_controller.rb +1 -1
  12. data/app/controllers/spree/api/v2/tenant/account_recovers_controller.rb +2 -2
  13. data/app/controllers/spree/api/v2/tenant/cms_pages_controller.rb +41 -0
  14. data/app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb +1 -1
  15. data/app/controllers/spree/api/v2/tenant/waiting_room_sessions_controller.rb +30 -0
  16. data/app/controllers/spree_cm_commissioner/admin/variants_controller_decorator.rb +17 -0
  17. data/app/controllers/spree_cm_commissioner/api/v2/storefront/cms_pages_controller_decorator.rb +18 -0
  18. data/app/interactors/spree_cm_commissioner/account_recover.rb +2 -2
  19. data/app/interactors/spree_cm_commissioner/create_event.rb +7 -26
  20. data/app/interactors/spree_cm_commissioner/create_ticket.rb +95 -0
  21. data/app/interactors/spree_cm_commissioner/event_line_items_date_syncer.rb +19 -0
  22. data/app/interactors/spree_cm_commissioner/existing_account_checker.rb +1 -1
  23. data/app/interactors/spree_cm_commissioner/organizers_transactional_email_notifier.rb +27 -0
  24. data/app/interactors/spree_cm_commissioner/pin_code_sender.rb +3 -3
  25. data/app/interactors/spree_cm_commissioner/product_event_id_to_children_syncer.rb +15 -0
  26. data/app/interactors/spree_cm_commissioner/sms.rb +14 -0
  27. data/app/interactors/spree_cm_commissioner/telegram_debug_pin_code_sender.rb +2 -1
  28. data/app/interactors/spree_cm_commissioner/transactional_email_sender.rb +50 -0
  29. data/app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb +2 -1
  30. data/app/interactors/spree_cm_commissioner/user_password_authenticator.rb +4 -2
  31. data/app/interactors/spree_cm_commissioner/waiting_room_session_creator.rb +7 -14
  32. data/app/interactors/spree_cm_commissioner/waiting_room_session_firebase_logger.rb +30 -0
  33. data/app/jobs/spree_cm_commissioner/ensure_event_for_product_line_item_guests_job.rb +13 -0
  34. data/app/jobs/spree_cm_commissioner/event_line_items_date_syncer_job.rb +8 -0
  35. data/app/jobs/spree_cm_commissioner/product_event_id_to_children_syncer_job.rb +8 -0
  36. data/app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb +3 -1
  37. data/app/jobs/spree_cm_commissioner/waiting_room_session_firebase_logger_job.rb +13 -0
  38. data/app/mailers/spree_cm_commissioner/event_transactional_mailer.rb +23 -0
  39. data/app/mailers/spree_cm_commissioner/pin_code_mailer.rb +1 -0
  40. data/app/models/concerns/spree_cm_commissioner/kyc_bitwise.rb +2 -0
  41. data/app/models/concerns/spree_cm_commissioner/line_item_durationable.rb +10 -6
  42. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +14 -26
  43. data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +4 -3
  44. data/app/models/concerns/spree_cm_commissioner/product_type.rb +0 -10
  45. data/app/models/concerns/spree_cm_commissioner/user_identity.rb +7 -4
  46. data/app/models/concerns/spree_cm_commissioner/variant_options_concern.rb +8 -10
  47. data/app/models/spree_cm_commissioner/cms_page_decorator.rb +9 -0
  48. data/app/models/spree_cm_commissioner/event_ticket_google_wallet.rb +2 -2
  49. data/app/models/spree_cm_commissioner/guest.rb +1 -1
  50. data/app/models/spree_cm_commissioner/line_item_decorator.rb +10 -16
  51. data/app/models/spree_cm_commissioner/option_type_decorator.rb +6 -0
  52. data/app/models/spree_cm_commissioner/order_decorator.rb +0 -15
  53. data/app/models/spree_cm_commissioner/product_decorator.rb +17 -14
  54. data/app/models/spree_cm_commissioner/role_decorator.rb +3 -0
  55. data/app/models/spree_cm_commissioner/stock/availability_checker.rb +25 -27
  56. data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +1 -2
  57. data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
  58. data/app/models/spree_cm_commissioner/stock_item_decorator.rb +0 -14
  59. data/app/models/spree_cm_commissioner/taxon_decorator.rb +24 -3
  60. data/app/models/spree_cm_commissioner/transactional_email.rb +6 -0
  61. data/app/models/spree_cm_commissioner/user_decorator.rb +6 -0
  62. data/app/models/spree_cm_commissioner/variant_decorator.rb +27 -34
  63. data/app/models/spree_cm_commissioner/vehicle.rb +0 -7
  64. data/app/models/spree_cm_commissioner/vendor_decorator.rb +9 -1
  65. data/app/overrides/spree/admin/cms_pages/_form/tenant_fields.html.erb.deface +9 -0
  66. data/app/overrides/spree/admin/cms_pages/index/cms_pages_tabs.html.erb.deface +21 -0
  67. data/app/overrides/spree/admin/taxons/_form/assets_form.html.erb.deface +2 -2
  68. data/app/overrides/spree/admin/taxons/_form/available_on.html.erb.deface +3 -1
  69. data/app/overrides/spree/admin/taxons/_form/background_color_and_foreground_color.html.erb.deface +3 -1
  70. data/app/overrides/spree/admin/taxons/_form/custom_redirect_url.html.erb.deface +3 -1
  71. data/app/overrides/spree/admin/taxons/_form/hide_video_banner.html.erb.deface +3 -1
  72. data/app/overrides/spree/admin/taxons/_form/purchasable_on_status.html.erb.deface +3 -1
  73. data/app/overrides/spree/admin/taxons/_form/show_badge_status.html.erb.deface +3 -1
  74. data/app/overrides/spree/admin/taxons/_form/to_date_form_date.html.erb.deface +3 -4
  75. data/app/overrides/spree/admin/users/_form/roles_fields.html.erb.deface +1 -1
  76. data/app/overrides/spree/admin/users/index/body.html.erb.deface +3 -0
  77. data/app/overrides/spree/admin/users/index/headers.html.erb.deface +3 -0
  78. data/app/overrides/spree/admin/variants/_form/kyc_field.html.erb.deface +40 -0
  79. data/app/overrides/spree/admin/variants/edit/variant_status.html.erb.deface +6 -3
  80. data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +45 -0
  81. data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +55 -0
  82. data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +0 -3
  83. data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
  84. data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +0 -2
  85. data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +2 -0
  86. data/app/serializers/spree/v2/tenant/waiting_room_session_serializer.rb +9 -0
  87. data/app/services/spree_cm_commissioner/user_authenticator.rb +3 -1
  88. data/app/services/spree_cm_commissioner/user_roles_assigner.rb +62 -0
  89. data/app/views/spree/admin/shared/_cms_pages_tabs.html.erb +20 -0
  90. data/app/views/spree/admin/shared/_taxon_tabs.html.erb +19 -19
  91. data/app/views/spree/admin/stock_managements/_variant_stock_items.html.erb +1 -3
  92. data/app/views/spree/admin/stock_managements/index.html.erb +5 -40
  93. data/app/views/spree/shared/_base_mailer_header.html.erb +10 -2
  94. data/app/views/spree_cm_commissioner/event_transactional_mailer/_event_banner.html.erb +3 -0
  95. data/app/views/spree_cm_commissioner/event_transactional_mailer/_mailer_stylesheets.html.erb +315 -0
  96. data/app/views/spree_cm_commissioner/event_transactional_mailer/_note.html.erb +8 -0
  97. data/app/views/spree_cm_commissioner/event_transactional_mailer/_share_button.html.erb +3 -0
  98. data/app/views/spree_cm_commissioner/event_transactional_mailer/send_to_organizer.html.erb +59 -0
  99. data/app/views/spree_cm_commissioner/event_transactional_mailer/send_to_participant.html.erb +52 -0
  100. data/app/views/spree_cm_commissioner/layouts/event_transactional_mailer.html.erb +14 -0
  101. data/config/initializers/spree_permitted_attributes.rb +0 -5
  102. data/config/locales/en.yml +36 -0
  103. data/config/locales/km.yml +2 -0
  104. data/config/routes.rb +5 -11
  105. data/db/migrate/20250509033437_create_spree_cm_commissioner_transactional_emails.rb +12 -0
  106. data/db/migrate/20250509075429_add_max_order_quantity_to_spree_product.rb +5 -0
  107. data/db/migrate/20250512075319_add_tenant_id_to_spree_cms_pages.rb +6 -0
  108. data/db/migrate/20250520042602_add_event_to_spree_products.rb +7 -0
  109. data/db/migrate/20250520044533_add_event_to_spree_line_items.rb +7 -0
  110. data/db/migrate/20250521024345_add_tenant_id_to_cm_waiting_room_sessions.rb +6 -0
  111. data/db/migrate/20250521095539_add_kyc_to_spree_variants.rb +5 -0
  112. data/docker-compose.yml +1 -1
  113. data/lib/generators/spree_cm_commissioner/install/install_generator.rb +3 -11
  114. data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_dashboard/spree_cm_commissioner → spree_cm_commissioner}/utilities.js +0 -4
  115. data/lib/spree_cm_commissioner/calendar_event.rb +1 -11
  116. data/lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb +1 -1
  117. data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +1 -1
  118. data/lib/spree_cm_commissioner/test_helper/factories/product_factory.rb +5 -18
  119. data/lib/spree_cm_commissioner/test_helper/factories/role.rb +7 -0
  120. data/lib/spree_cm_commissioner/test_helper/factories/stock_location_factory.rb +2 -2
  121. data/lib/spree_cm_commissioner/test_helper/factories/taxon_home_banner_factory.rb +5 -0
  122. data/lib/spree_cm_commissioner/test_helper/factories/transactional_email_factory.rb +6 -0
  123. data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +6 -41
  124. data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +1 -1
  125. data/lib/spree_cm_commissioner/version.rb +1 -1
  126. data/lib/spree_cm_commissioner.rb +0 -34
  127. data/lib/tasks/ensure_event_for_product_line_item_guests.rake +7 -0
  128. data/lib/tasks/update_invalid_self_root_places.rake +9 -0
  129. data/lib/tasks/update_orphan_root_places.rake +1 -0
  130. data/spree_cm_commissioner.gemspec +0 -5
  131. metadata +49 -82
  132. data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +0 -42
  133. data/app/finders/spree_cm_commissioner/accommodations/find.rb +0 -40
  134. data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +0 -35
  135. data/app/interactors/spree_cm_commissioner/ensure_correct_product_type.rb +0 -40
  136. data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +0 -25
  137. data/app/interactors/spree_cm_commissioner/stock/inventory_items_adjuster.rb +0 -13
  138. data/app/interactors/spree_cm_commissioner/stock/inventory_items_generator.rb +0 -15
  139. data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +0 -75
  140. data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +0 -24
  141. data/app/interactors/spree_cm_commissioner/user_roles_assigner.rb +0 -22
  142. data/app/jobs/spree_cm_commissioner/ensure_correct_product_type_job.rb +0 -7
  143. data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +0 -7
  144. data/app/jobs/spree_cm_commissioner/stock/inventory_items_adjuster_job.rb +0 -11
  145. data/app/jobs/spree_cm_commissioner/stock/inventory_items_generator_job.rb +0 -11
  146. data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +0 -9
  147. data/app/models/spree_cm_commissioner/inventory.rb +0 -11
  148. data/app/models/spree_cm_commissioner/inventory_item.rb +0 -56
  149. data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +0 -40
  150. data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +0 -126
  151. data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +0 -36
  152. data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +0 -27
  153. data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -44
  154. data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +0 -19
  155. data/app/views/spree/admin/stock_managements/_events_popover.html.erb +0 -23
  156. data/app/views/spree/admin/stock_managements/calendar.html.erb +0 -35
  157. data/db/migrate/20250304293518_create_cm_inventory_items.rb +0 -21
  158. data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +0 -5
  159. data/db/migrate/20250502025848_add_index_to_spree_products.rb +0 -5
  160. data/db/migrate/20250502030001_add_product_type_to_spree_variants.rb +0 -5
  161. data/db/migrate/20250502030002_add_product_type_to_spree_line_items.rb +0 -5
  162. data/lib/spree_cm_commissioner/cached_inventory_item.rb +0 -23
  163. data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +0 -9
  164. data/lib/tasks/create_default_non_permanent_inventory_items.rake +0 -16
  165. data/lib/tasks/ensure_correct_product_type.rake +0 -7
  166. data/lib/tasks/generate_inventory_items.rake +0 -7
@@ -482,6 +482,39 @@ en:
482
482
  booking_details: "Booking Details"
483
483
  crew_invite_mailer:
484
484
  subject: "You're Invited to Join the Check-In Crew for %{event_name}!"
485
+ event_engagement_mailer:
486
+ organizer:
487
+ subject: "Let's Lead the Way for %{event_name}!"
488
+ header_title: "Let's Lead the Way! 🚀✨"
489
+ header_subtitle: "Engaging Our Community for %{event_name}"
490
+ hello: "Hello <strong>%{event_name}</strong> Team"
491
+ intro: "Our event is here, and we have an incredible opportunity to create buzz, inspire engagement, and build meaningful connections! By being actively present and sharing updates, highlights, and memorable moments, we can keep the momentum going and engage both current participants and future ones."
492
+ impact_title: "Here's How We Can Make an Impact:"
493
+ impact_post_highlights: "<strong>Post Daily Highlights</strong> – Share standout moments, quotes, and insights to keep participants excited and to show others what they’re missing."
494
+ impact_engage_posts: "<strong>Engage with Participants’ Posts</strong> – Like, share, and comment on posts by our participants! Responding to their experiences will make them feel valued and connected!"
495
+ impact_sneak_peek: "<strong>Create Sneak-Peek and Behind-the-Scenes Content</strong> – Showcase what goes into making this event happen, from setup to speaker interviews, to add a human touch and build excitement."
496
+ impact_go_live: "<strong>Go Live!</strong> – Host a quick live session or story on our social media to share the energy in real time. It could be an event walkthrough, an inspiring session, or even interviews with attendees or speakers."
497
+ impact_hashtag: "<strong>Use #%{hashtag}</strong> – Keep everything connected with our event’s hashtag, and tag any relevant profiles or partners to expand reach."
498
+ share_now: "Share Now"
499
+ closing_visibility: "Our visibility and engagement will not only enhance participants’ experiences but also lay the groundwork for more attendees and support in the future!"
500
+ closing_call_to_action: "Let’s make %{event_name} unforgettable, both in person and online! ✨"
501
+ signature_best: "Best,"
502
+ signature_team: "%{event_name} Team"
503
+ participant:
504
+ subject: "Let’s Spread the Word! 📣 Join Us in Amplifying Our Event’s Impact! 🌍✨"
505
+ header_title: "Let’s Spread the Word! 📣"
506
+ header_subtitle: "Join Us in Amplifying %{event_name}’s Impact! 🌍✨"
507
+ hello: "Hello <strong>%{event_name}</strong> Participant!"
508
+ intro: "We’re thrilled to have you with us for %{event_name}! Together, let’s make this event resonate far and wide! 📢 As—we come together for a healthier, more connected world, we invite you to join us in spreading the word. Sharing your experience can help amplify the impact, inspire others, and create new opportunities for networking and connection."
509
+ impact_title: "Here’s how you can help:"
510
+ impact_share_experience: "<strong>Share your Experience</strong>: Post photos, videos, and your thoughts with the hashtag #%{hashtag}."
511
+ impact_create_awareness: "<strong>Create Awareness for Our Cause</strong>: Tell others why this cause matters to you and why it should matter to them. <em>“In a gentle way, you can shake the world.”</em> — Mahatma Gandhi."
512
+ impact_tag_us: "<strong>Tag Us</strong>: In your posts to connect with our event community!"
513
+ impact_invite_others: "<strong>Invite Others</strong>: Tag friends or colleagues who should join in and be part of the conversation!"
514
+ share_now: "Share Now"
515
+ closing: "Let’s make a difference together. Every post counts, and with each share, we’re bringing more visibility to our shared cause. 🌟"
516
+ closing_thank_you: "Thank you for your passion and support!"
517
+ signature_regards: "Warm regards,"
485
518
 
486
519
  invoice:
487
520
  empty_info: "<b>Invoice</b> not create yet"
@@ -532,6 +565,7 @@ en:
532
565
  cannot_delete_account: "You cannot delete this account because you own a special role"
533
566
  kyc:
534
567
  note: "<b>Note:</b> Select Required KYC Field For this Product"
568
+ variant_note: "<b>Note:</b> Select Required Guest Information Field For this Variant"
535
569
  allowed_upload_later: "<b>Allow upload later:</b> Check this box if you allow to upload later"
536
570
  video_on_demand:
537
571
  quality:
@@ -570,6 +604,8 @@ en:
570
604
  user_roles_assigner:
571
605
  user_not_found: 'User not found'
572
606
  roles_empty: 'Roles are empty'
607
+ roles_required: 'Roles are required'
608
+ user_already_assigned: 'User already assigned to this vendor'
573
609
  invite:
574
610
  url_not_found: 'Invite link not found or have been expired'
575
611
  accept_fail: 'Failed to accept invite'
@@ -411,6 +411,8 @@ km:
411
411
  user_roles_assigner:
412
412
  user_not_found: 'រកមិនឃើញអ្នកប្រើប្រាស់'
413
413
  roles_empty: 'តួនាទីគឺទទេ'
414
+ roles_required: 'តួនាទីត្រូវបានទាមទារ'
415
+ user_already_assigned: 'អ្នកប្រើប្រាស់បានបង្កើតតួនាទីរួចហើយ'
414
416
 
415
417
  invite:
416
418
  url_not_found: 'រកមិនឃើញតំណអញ្ជើញ ឬផុតកំណត់ហើយ'
data/config/routes.rb CHANGED
@@ -138,11 +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
141
+ resources :stock_managements
146
142
 
147
143
  resources :product_completion_steps do
148
144
  collection do
@@ -520,11 +516,12 @@ Spree::Core::Engine.add_routes do
520
516
  resource :reset_passwords, only: [:update]
521
517
  resource :change_passwords, only: [:update]
522
518
  resource :user_contacts, only: [:update]
519
+
520
+ resources :cms_pages, only: %i[index show]
521
+ resources :waiting_room_sessions, only: :create
523
522
  end
524
523
 
525
524
  namespace :storefront do
526
- resources :inventory_item
527
-
528
525
  resources :waiting_room_sessions, only: :create
529
526
  resources :vattanac_banks, only: %i[create]
530
527
  resource :cart, controller: :cart, only: %i[show create destroy] do
@@ -550,10 +547,7 @@ Spree::Core::Engine.add_routes do
550
547
  resource :cart_guests, only: %i[create destroy]
551
548
  resources :cart_payment_method_groups, only: %i[index]
552
549
 
553
- resources :accommodations, only: %i[index show] do
554
- resources :variants, only: %i[index show], module: :accommodations
555
- end
556
-
550
+ resources :accommodations, only: %i[index show]
557
551
  resources :line_items, only: %i[index show]
558
552
  resources :account_checker
559
553
  resource :account_recovers, only: [:update]
@@ -0,0 +1,12 @@
1
+ class CreateSpreeCmCommissionerTransactionalEmails < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :cm_transactional_emails, if_not_exists: true do |t|
4
+ t.references :taxon, null: true, foreign_key: { to_table: :spree_taxons }
5
+ t.references :recipient, polymorphic: true, null: false
6
+ t.datetime :sent_at
7
+
8
+ t.timestamps
9
+ end
10
+ add_index :cm_transactional_emails, [:taxon_id, :recipient_type, :recipient_id], unique: true, if_not_exists: true, name: 'idx_transactional_email_taxon_recipient'
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ class AddMaxOrderQuantityToSpreeProduct < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :spree_products, :max_order_quantity, :integer, if_not_exists: true
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddTenantIdToSpreeCmsPages < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :spree_cms_pages, :tenant_id, :integer, if_not_exists: true
4
+ add_index :spree_cms_pages, :tenant_id, if_not_exists: true
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ class AddEventToSpreeProducts < ActiveRecord::Migration[7.0]
2
+ def change
3
+ unless column_exists?(:spree_products, :event_id)
4
+ add_reference :spree_products, :event, index: true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class AddEventToSpreeLineItems < ActiveRecord::Migration[7.0]
2
+ def change
3
+ unless column_exists?(:spree_line_items, :event_id)
4
+ add_reference :spree_line_items, :event, index: true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ class AddTenantIdToCmWaitingRoomSessions < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :cm_waiting_room_sessions, :tenant_id, :integer, if_not_exists: true
4
+ add_index :cm_waiting_room_sessions, :tenant_id, if_not_exists: true
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddKycToSpreeVariants < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :spree_variants, :kyc, :integer, 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
@@ -40,17 +40,9 @@ module SpreeCmCommissioner
40
40
  after: %r{//= require spree/backend}, verbose: true
41
41
 
42
42
  # For NPM support
43
- if File.exist?(File.join(destination_root, 'app/javascript/spree_dashboard'))
44
- template 'app/javascript/spree_dashboard/spree_cm_commissioner/utilities.js'
45
- inject_into_file 'app/javascript/spree_dashboard/spree-dashboard.js', "\nimport \"./spree_cm_commissioner/utilities.js\"",
46
- after: %r{import "@spree/dashboard"}, verbose: true
47
- else
48
- Logger.new($stdout).debug <<~MSG
49
- SpreeCmCommissioner: JavaScript files for the dashboard are missing.
50
- Please move your JavaScript files to the appropriate location in
51
- app/javascript/spree_dashboard.
52
- MSG
53
- 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
54
46
  end
55
47
 
56
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
@@ -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
@@ -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?
@@ -98,7 +85,7 @@ FactoryBot.define do
98
85
  option_value2 = create(:cm_option_value, presentation: "#{evaluator.due_date} Days", name: evaluator.due_date.to_s, option_type: product.option_types[1])
99
86
  option_value3 = create(:cm_option_value, presentation: "#{evaluator.payment_option}", name: evaluator.payment_option.to_s, option_type: product.option_types[2])
100
87
 
101
- variant = create(:cm_variant, price: product.price, product: product)
88
+ variant = create(:variant, price: product.price, product: product)
102
89
  variant.option_values = [option_value1, option_value2, option_value3]
103
90
  variant.save!
104
91
 
@@ -116,7 +103,7 @@ FactoryBot.define do
116
103
  end
117
104
 
118
105
  after(:create) do |product, evaluator|
119
- variant = create(:cm_variant, price: product.price, product: product)
106
+ variant = create(:variant, price: product.price, product: product)
120
107
  variant.save!
121
108
 
122
109
  variant.stock_items.first.adjust_count_on_hand(evaluator.total_inventory)
@@ -149,12 +136,12 @@ FactoryBot.define do
149
136
  create(:cm_option_value, presentation: 'Yes', name: '1', option_type: product.option_types.find_by(name: 'bib-pre-generation-on-create'))
150
137
  end
151
138
 
152
- variant1 = create(:cm_variant, price: product.price, product: product)
139
+ variant1 = create(:variant, price: product.price, product: product)
153
140
  variant1.option_values = [option_value1]
154
141
  variant1.option_values << bib_pre_generation_option_value if evaluator.bib_pre_generation_on_create
155
142
  variant1.save!
156
143
 
157
- variant2 = create(:cm_variant, price: product.price, product: product)
144
+ variant2 = create(:variant, price: product.price, product: product)
158
145
  variant2.option_values = [option_value2]
159
146
  variant2.option_values << bib_pre_generation_option_value if evaluator.bib_pre_generation_on_create
160
147
  variant2.save!
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :cm_role, class: 'Spree::Role' do
3
+ sequence(:name) { |n| "Role_#{n}" }
4
+ presentation { 'test' }
5
+ vendor_id { nil }
6
+ end
7
+ end
@@ -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,5 @@
1
+ FactoryBot.define do
2
+ factory :cm_taxon_home_banner, class: SpreeCmCommissioner::TaxonHomeBanner do
3
+ attachment { Rack::Test::UploadedFile.new(Spree::Core::Engine.root.join('spec', 'fixtures', 'files', 'icon_256x256.png'), 'image/jpeg') }
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :cm_transactional_email, class: SpreeCmCommissioner::TransactionalEmail do
3
+ recipient_id { 1 }
4
+ recipient_type { 'Spree::User'}
5
+ end
6
+ end
@@ -1,53 +1,19 @@
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) }
31
-
32
- transient do
33
- number_of_adults { nil }
34
- number_of_kids { nil }
35
- end
36
-
37
- after(:create) do |variant, evaluator|
38
- if evaluator.number_of_adults.present?
39
- number_of_adults = create(:cm_option_type, :number_of_adults)
40
- variant.product.option_types << number_of_adults
41
- variant.option_values << create(:cm_option_value, presentation: evaluator.number_of_adults, name: evaluator.number_of_adults, option_type: number_of_adults)
42
- end
43
-
44
- if evaluator.number_of_kids.present?
45
- number_of_kids = create(:cm_option_type, :number_of_kids)
46
- variant.product.option_types << number_of_kids
47
- variant.option_values << create(:cm_option_value, presentation: evaluator.number_of_kids, name: evaluator.number_of_kids, option_type: number_of_kids)
48
- end
49
-
50
- variant.save!
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
51
17
  end
52
18
  end
53
19
 
@@ -58,13 +24,12 @@ FactoryBot.define do
58
24
  duration { "1" }
59
25
  route { }
60
26
  end
61
-
62
27
  before(:create) do |trip, evaluator|
63
28
  trip.product = evaluator.route
64
29
 
65
30
  trip.option_values = [evaluator.departure_time, evaluator.duration]
66
- end
67
31
 
32
+ end
68
33
  after(:create) do |trip, evaluator|
69
34
  trip.stock_items = [create(:stock_item, variant: trip, stock_location: evaluator.product.vendor.stock_locations.first)]
70
35
  trip.stock_items.first.adjust_count_on_hand(10)
@@ -30,7 +30,7 @@ FactoryBot.define do
30
30
  if vendor.primary_product_type == :accommodation
31
31
  product = create(:cm_accommodation_product, vendor: vendor, total_inventory: evaluator.total_inventory)
32
32
  else
33
- product = create(:cm_product, vendor: vendor, product_type: vendor.primary_product_type)
33
+ product = create(:product, vendor: vendor, product_type: vendor.primary_product_type)
34
34
  product.master.stock_items.first.adjust_count_on_hand(evaluator.total_inventory)
35
35
  end
36
36
 
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.11.0-pre3'.freeze
2
+ VERSION = '1.12.0'.freeze
3
3
 
4
4
  module_function
5
5
 
@@ -19,7 +19,6 @@ require 'spree_cm_commissioner/user_session_jwt_token'
19
19
  require 'spree_cm_commissioner/trip_result'
20
20
  require 'spree_cm_commissioner/trip_query_result'
21
21
  require 'spree_cm_commissioner/trip_seat_layout_result'
22
- require 'spree_cm_commissioner/cached_inventory_item'
23
22
 
24
23
  require 'activerecord_multi_tenant'
25
24
  require 'google/cloud/recaptcha_enterprise'
@@ -45,36 +44,3 @@ require 'cm_app_logger'
45
44
  require 'counter_culture'
46
45
 
47
46
  require 'byebug' if Rails.env.development? || Rails.env.test?
48
-
49
- module SpreeCmCommissioner
50
- class << self
51
- # Allows overriding the default Redis connection pool with a custom one
52
- attr_writer :redis_pool
53
-
54
- def redis_pool
55
- @redis_pool ||= default_redis_pool
56
- end
57
-
58
- # Resets the Redis pool, useful for testing or reinitialization
59
- def reset_redis_pool
60
- @redis_pool = nil
61
- end
62
-
63
- private
64
-
65
- def default_redis_pool
66
- pool_size = ENV.fetch('REDIS_POOL_SIZE', '5').to_i
67
- timeout = ENV.fetch('REDIS_TIMEOUT', '5').to_i
68
- redis_url = ENV.fetch('REDIS_URL', 'redis://localhost:6379/12')
69
-
70
- ConnectionPool.new(size: pool_size, timeout: timeout) do
71
- Redis.new(url: redis_url, timeout: timeout)
72
- end
73
- end
74
- end
75
-
76
- # Provides a configuration block for customizing SpreeCmCommissioner settings
77
- def self.configure
78
- yield self
79
- end
80
- end
@@ -0,0 +1,7 @@
1
+ # recommend to be used in schedule.yml & manually access in /sidekiq/cron
2
+ namespace :spree_cm_commissioner do
3
+ desc 'Ensure event for product variant line items.'
4
+ task ensure_event_for_product_line_item_guests: :environment do
5
+ SpreeCmCommissioner::EnsureEventForProductLineItemGuestsJob.perform_now
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ namespace :spree_cm_commissioner do
2
+ desc 'Update invalid self-root places...'
3
+ task update_invalid_self_root_places: :environment do
4
+ SpreeCmCommissioner::Place.where('id = parent_id').find_each do |place|
5
+ place.update_columns(parent_id: nil) # rubocop:disable Rails/SkipsModelValidations
6
+ end
7
+ puts '✓ Fixed self-root places'
8
+ end
9
+ end
@@ -2,6 +2,7 @@ namespace :spree_cm_commissioner do
2
2
  desc 'Update orphan root places...'
3
3
  task update_orphan_root_places: :environment do
4
4
  count = SpreeCmCommissioner::Place.where(parent_id: 0).update_all(parent_id: nil) # rubocop:disable Rails/SkipsModelValidations
5
+ SpreeCmCommissioner::Place.where(parent_id: nil).update_all(depth: 0) # rubocop:disable Rails/SkipsModelValidations
5
6
  puts "#{count} orphan root places updated."
6
7
  end
7
8
  end
@@ -54,11 +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
- # Redis
58
- s.add_dependency 'redis'
59
- s.add_dependency 'redis-rails'
60
- s.add_dependency 'connection_pool'
61
-
62
57
  s.add_development_dependency 'pg'
63
58
  s.add_development_dependency 'spree_dev_tools'
64
59
  s.add_dependency 'blazer', '~> 3.0.4'