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.
- checksums.yaml +4 -4
- data/.github/workflows/test_and_build_gem.yml +143 -12
- data/.gitignore +1 -2
- data/Gemfile.lock +1 -22
- data/Rakefile +4 -33
- data/app/controllers/spree/admin/cms_pages_controller_decorator.rb +32 -0
- data/app/controllers/spree/admin/stock_managements_controller.rb +1 -62
- data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +31 -14
- data/app/controllers/spree/api/v2/storefront/queue_cart/line_items_controller.rb +2 -2
- data/app/controllers/spree/api/v2/storefront/waiting_room_sessions_controller.rb +1 -0
- data/app/controllers/spree/api/v2/tenant/account_checker_controller.rb +1 -1
- data/app/controllers/spree/api/v2/tenant/account_recovers_controller.rb +2 -2
- data/app/controllers/spree/api/v2/tenant/cms_pages_controller.rb +41 -0
- data/app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb +1 -1
- data/app/controllers/spree/api/v2/tenant/waiting_room_sessions_controller.rb +30 -0
- data/app/controllers/spree_cm_commissioner/admin/variants_controller_decorator.rb +17 -0
- data/app/controllers/spree_cm_commissioner/api/v2/storefront/cms_pages_controller_decorator.rb +18 -0
- data/app/interactors/spree_cm_commissioner/account_recover.rb +2 -2
- data/app/interactors/spree_cm_commissioner/create_event.rb +7 -26
- data/app/interactors/spree_cm_commissioner/create_ticket.rb +95 -0
- data/app/interactors/spree_cm_commissioner/event_line_items_date_syncer.rb +19 -0
- data/app/interactors/spree_cm_commissioner/existing_account_checker.rb +1 -1
- data/app/interactors/spree_cm_commissioner/organizers_transactional_email_notifier.rb +27 -0
- data/app/interactors/spree_cm_commissioner/pin_code_sender.rb +3 -3
- data/app/interactors/spree_cm_commissioner/product_event_id_to_children_syncer.rb +15 -0
- data/app/interactors/spree_cm_commissioner/sms.rb +14 -0
- data/app/interactors/spree_cm_commissioner/telegram_debug_pin_code_sender.rb +2 -1
- data/app/interactors/spree_cm_commissioner/transactional_email_sender.rb +50 -0
- data/app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb +2 -1
- data/app/interactors/spree_cm_commissioner/user_password_authenticator.rb +4 -2
- data/app/interactors/spree_cm_commissioner/waiting_room_session_creator.rb +7 -14
- data/app/interactors/spree_cm_commissioner/waiting_room_session_firebase_logger.rb +30 -0
- data/app/jobs/spree_cm_commissioner/ensure_event_for_product_line_item_guests_job.rb +13 -0
- data/app/jobs/spree_cm_commissioner/event_line_items_date_syncer_job.rb +8 -0
- data/app/jobs/spree_cm_commissioner/product_event_id_to_children_syncer_job.rb +8 -0
- data/app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb +3 -1
- data/app/jobs/spree_cm_commissioner/waiting_room_session_firebase_logger_job.rb +13 -0
- data/app/mailers/spree_cm_commissioner/event_transactional_mailer.rb +23 -0
- data/app/mailers/spree_cm_commissioner/pin_code_mailer.rb +1 -0
- data/app/models/concerns/spree_cm_commissioner/kyc_bitwise.rb +2 -0
- data/app/models/concerns/spree_cm_commissioner/line_item_durationable.rb +10 -6
- data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +14 -26
- data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +4 -3
- data/app/models/concerns/spree_cm_commissioner/product_type.rb +0 -10
- data/app/models/concerns/spree_cm_commissioner/user_identity.rb +7 -4
- data/app/models/concerns/spree_cm_commissioner/variant_options_concern.rb +8 -10
- data/app/models/spree_cm_commissioner/cms_page_decorator.rb +9 -0
- data/app/models/spree_cm_commissioner/event_ticket_google_wallet.rb +2 -2
- data/app/models/spree_cm_commissioner/guest.rb +1 -1
- data/app/models/spree_cm_commissioner/line_item_decorator.rb +10 -16
- data/app/models/spree_cm_commissioner/option_type_decorator.rb +6 -0
- data/app/models/spree_cm_commissioner/order_decorator.rb +0 -15
- data/app/models/spree_cm_commissioner/product_decorator.rb +17 -14
- data/app/models/spree_cm_commissioner/role_decorator.rb +3 -0
- data/app/models/spree_cm_commissioner/stock/availability_checker.rb +25 -27
- data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +1 -2
- data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
- data/app/models/spree_cm_commissioner/stock_item_decorator.rb +0 -14
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +24 -3
- data/app/models/spree_cm_commissioner/transactional_email.rb +6 -0
- data/app/models/spree_cm_commissioner/user_decorator.rb +6 -0
- data/app/models/spree_cm_commissioner/variant_decorator.rb +27 -34
- data/app/models/spree_cm_commissioner/vehicle.rb +0 -7
- data/app/models/spree_cm_commissioner/vendor_decorator.rb +9 -1
- data/app/overrides/spree/admin/cms_pages/_form/tenant_fields.html.erb.deface +9 -0
- data/app/overrides/spree/admin/cms_pages/index/cms_pages_tabs.html.erb.deface +21 -0
- data/app/overrides/spree/admin/taxons/_form/assets_form.html.erb.deface +2 -2
- data/app/overrides/spree/admin/taxons/_form/available_on.html.erb.deface +3 -1
- data/app/overrides/spree/admin/taxons/_form/background_color_and_foreground_color.html.erb.deface +3 -1
- data/app/overrides/spree/admin/taxons/_form/custom_redirect_url.html.erb.deface +3 -1
- data/app/overrides/spree/admin/taxons/_form/hide_video_banner.html.erb.deface +3 -1
- data/app/overrides/spree/admin/taxons/_form/purchasable_on_status.html.erb.deface +3 -1
- data/app/overrides/spree/admin/taxons/_form/show_badge_status.html.erb.deface +3 -1
- data/app/overrides/spree/admin/taxons/_form/to_date_form_date.html.erb.deface +3 -4
- data/app/overrides/spree/admin/users/_form/roles_fields.html.erb.deface +1 -1
- data/app/overrides/spree/admin/users/index/body.html.erb.deface +3 -0
- data/app/overrides/spree/admin/users/index/headers.html.erb.deface +3 -0
- data/app/overrides/spree/admin/variants/_form/kyc_field.html.erb.deface +40 -0
- data/app/overrides/spree/admin/variants/edit/variant_status.html.erb.deface +6 -3
- data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +45 -0
- data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +55 -0
- data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +0 -3
- data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
- data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +0 -2
- data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +2 -0
- data/app/serializers/spree/v2/tenant/waiting_room_session_serializer.rb +9 -0
- data/app/services/spree_cm_commissioner/user_authenticator.rb +3 -1
- data/app/services/spree_cm_commissioner/user_roles_assigner.rb +62 -0
- data/app/views/spree/admin/shared/_cms_pages_tabs.html.erb +20 -0
- data/app/views/spree/admin/shared/_taxon_tabs.html.erb +19 -19
- data/app/views/spree/admin/stock_managements/_variant_stock_items.html.erb +1 -3
- data/app/views/spree/admin/stock_managements/index.html.erb +5 -40
- data/app/views/spree/shared/_base_mailer_header.html.erb +10 -2
- data/app/views/spree_cm_commissioner/event_transactional_mailer/_event_banner.html.erb +3 -0
- data/app/views/spree_cm_commissioner/event_transactional_mailer/_mailer_stylesheets.html.erb +315 -0
- data/app/views/spree_cm_commissioner/event_transactional_mailer/_note.html.erb +8 -0
- data/app/views/spree_cm_commissioner/event_transactional_mailer/_share_button.html.erb +3 -0
- data/app/views/spree_cm_commissioner/event_transactional_mailer/send_to_organizer.html.erb +59 -0
- data/app/views/spree_cm_commissioner/event_transactional_mailer/send_to_participant.html.erb +52 -0
- data/app/views/spree_cm_commissioner/layouts/event_transactional_mailer.html.erb +14 -0
- data/config/initializers/spree_permitted_attributes.rb +0 -5
- data/config/locales/en.yml +36 -0
- data/config/locales/km.yml +2 -0
- data/config/routes.rb +5 -11
- data/db/migrate/20250509033437_create_spree_cm_commissioner_transactional_emails.rb +12 -0
- data/db/migrate/20250509075429_add_max_order_quantity_to_spree_product.rb +5 -0
- data/db/migrate/20250512075319_add_tenant_id_to_spree_cms_pages.rb +6 -0
- data/db/migrate/20250520042602_add_event_to_spree_products.rb +7 -0
- data/db/migrate/20250520044533_add_event_to_spree_line_items.rb +7 -0
- data/db/migrate/20250521024345_add_tenant_id_to_cm_waiting_room_sessions.rb +6 -0
- data/db/migrate/20250521095539_add_kyc_to_spree_variants.rb +5 -0
- data/docker-compose.yml +1 -1
- data/lib/generators/spree_cm_commissioner/install/install_generator.rb +3 -11
- data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_dashboard/spree_cm_commissioner → spree_cm_commissioner}/utilities.js +0 -4
- data/lib/spree_cm_commissioner/calendar_event.rb +1 -11
- data/lib/spree_cm_commissioner/test_helper/factories/homepage_section_relatable_factory.rb +1 -1
- data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +1 -1
- data/lib/spree_cm_commissioner/test_helper/factories/product_factory.rb +5 -18
- data/lib/spree_cm_commissioner/test_helper/factories/role.rb +7 -0
- data/lib/spree_cm_commissioner/test_helper/factories/stock_location_factory.rb +2 -2
- data/lib/spree_cm_commissioner/test_helper/factories/taxon_home_banner_factory.rb +5 -0
- data/lib/spree_cm_commissioner/test_helper/factories/transactional_email_factory.rb +6 -0
- data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +6 -41
- data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +1 -1
- data/lib/spree_cm_commissioner/version.rb +1 -1
- data/lib/spree_cm_commissioner.rb +0 -34
- data/lib/tasks/ensure_event_for_product_line_item_guests.rake +7 -0
- data/lib/tasks/update_invalid_self_root_places.rake +9 -0
- data/lib/tasks/update_orphan_root_places.rake +1 -0
- data/spree_cm_commissioner.gemspec +0 -5
- metadata +49 -82
- data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +0 -42
- data/app/finders/spree_cm_commissioner/accommodations/find.rb +0 -40
- data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +0 -35
- data/app/interactors/spree_cm_commissioner/ensure_correct_product_type.rb +0 -40
- data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +0 -25
- data/app/interactors/spree_cm_commissioner/stock/inventory_items_adjuster.rb +0 -13
- data/app/interactors/spree_cm_commissioner/stock/inventory_items_generator.rb +0 -15
- data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +0 -75
- data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +0 -24
- data/app/interactors/spree_cm_commissioner/user_roles_assigner.rb +0 -22
- data/app/jobs/spree_cm_commissioner/ensure_correct_product_type_job.rb +0 -7
- data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +0 -7
- data/app/jobs/spree_cm_commissioner/stock/inventory_items_adjuster_job.rb +0 -11
- data/app/jobs/spree_cm_commissioner/stock/inventory_items_generator_job.rb +0 -11
- data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +0 -9
- data/app/models/spree_cm_commissioner/inventory.rb +0 -11
- data/app/models/spree_cm_commissioner/inventory_item.rb +0 -56
- data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +0 -40
- data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +0 -126
- data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +0 -36
- data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +0 -27
- data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -44
- data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +0 -19
- data/app/views/spree/admin/stock_managements/_events_popover.html.erb +0 -23
- data/app/views/spree/admin/stock_managements/calendar.html.erb +0 -35
- data/db/migrate/20250304293518_create_cm_inventory_items.rb +0 -21
- data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +0 -5
- data/db/migrate/20250502025848_add_index_to_spree_products.rb +0 -5
- data/db/migrate/20250502030001_add_product_type_to_spree_variants.rb +0 -5
- data/db/migrate/20250502030002_add_product_type_to_spree_line_items.rb +0 -5
- data/lib/spree_cm_commissioner/cached_inventory_item.rb +0 -23
- data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +0 -9
- data/lib/tasks/create_default_non_permanent_inventory_items.rake +0 -16
- data/lib/tasks/ensure_correct_product_type.rake +0 -7
- data/lib/tasks/generate_inventory_items.rake +0 -7
data/config/locales/en.yml
CHANGED
@@ -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'
|
data/config/locales/km.yml
CHANGED
@@ -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
|
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]
|
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
|
data/docker-compose.yml
CHANGED
@@ -40,17 +40,9 @@ module SpreeCmCommissioner
|
|
40
40
|
after: %r{//= require spree/backend}, verbose: true
|
41
41
|
|
42
42
|
# For NPM support
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
@@ -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
|
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
|
@@ -1,19 +1,6 @@
|
|
1
1
|
FactoryBot.define do
|
2
|
-
factory :
|
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(:
|
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(:
|
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(:
|
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(:
|
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!
|
@@ -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(:
|
28
|
-
product_2 = create(:
|
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)
|
@@ -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: :
|
30
|
-
product
|
31
|
-
|
32
|
-
|
33
|
-
|
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(:
|
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
|
|
@@ -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'
|