spree_cm_commissioner 2.8.7.pre.pre2 → 2.8.7
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/.gitignore +0 -6
- data/Gemfile.lock +1 -1
- data/app/controllers/concerns/spree_cm_commissioner/content_cachable.rb +0 -2
- data/app/controllers/spree/admin/homepage_section_controller.rb +1 -4
- data/app/controllers/spree/admin/inventory_holds_controller.rb +1 -20
- data/app/controllers/spree/admin/taxons_controller_decorator.rb +0 -19
- data/app/controllers/spree/api/v2/storefront/homepage_sections_controller.rb +0 -1
- data/app/controllers/spree/api/v2/storefront/order_histories_controller.rb +2 -7
- data/app/controllers/spree/api/v2/tenant/base_controller.rb +0 -4
- data/app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb +0 -1
- data/app/controllers/spree/api/v2/tenant/order_histories_controller.rb +2 -7
- data/app/controllers/spree/api/v2/tenant/products_controller.rb +1 -1
- data/app/controllers/spree/api/v2/tenant/taxons_controller.rb +1 -1
- data/app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb +0 -19
- data/app/finders/spree_cm_commissioner/events/find_matches.rb +0 -1
- data/app/helpers/spree_cm_commissioner/admin/homepage_segment_helper.rb +0 -2
- data/app/mailers/spree/order_mailer_decorator.rb +0 -2
- data/app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb +1 -2
- data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +1 -2
- data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +1 -33
- data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +0 -2
- data/app/models/concerns/spree_cm_commissioner/product_type.rb +1 -1
- data/app/models/concerns/spree_cm_commissioner/taxon_kind.rb +1 -3
- data/app/models/spree_cm_commissioner/import.rb +1 -2
- data/app/models/spree_cm_commissioner/product_decorator.rb +0 -53
- data/app/models/spree_cm_commissioner/role_decorator.rb +1 -4
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +0 -23
- data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +1 -19
- data/app/models/spree_cm_commissioner/tenant.rb +0 -9
- data/app/models/spree_cm_commissioner/user_decorator.rb +0 -5
- data/app/models/spree_cm_commissioner/variant_decorator.rb +0 -4
- data/app/models/spree_cm_commissioner/variant_options.rb +0 -4
- data/app/models/spree_cm_commissioner/vendor_decorator.rb +0 -4
- data/app/serializers/spree/v2/storefront/homepage_section_serializer.rb +1 -1
- data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +1 -2
- data/app/serializers/spree/v2/storefront/role_serializer.rb +1 -1
- data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +1 -2
- data/app/serializers/spree/v2/tenant/homepage_section_serializer.rb +1 -1
- data/app/serializers/spree/v2/tenant/role_serializer.rb +1 -1
- data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +0 -12
- data/app/services/spree_cm_commissioner/cart/add_guest.rb +2 -16
- data/app/views/spree/admin/homepage_section/_form.html.erb +0 -5
- data/app/views/spree_cm_commissioner/order_mailer/purchased_items/_items.html.erb +9 -12
- data/config/initializers/spree_permitted_attributes.rb +0 -11
- data/config/locales/en.yml +4 -50
- data/config/locales/km.yml +2 -34
- data/config/routes.rb +0 -28
- data/lib/spree_cm_commissioner/version.rb +1 -1
- data/lib/spree_cm_commissioner.rb +1 -7
- data/spree_cm_commissioner.gemspec +1 -1
- metadata +3 -132
- data/app/controllers/spree/api/v2/storefront/preview_products_controller.rb +0 -48
- data/app/controllers/spree/api/v2/storefront/preview_sections_controller.rb +0 -27
- data/app/controllers/spree/api/v2/storefront/preview_taxons_controller.rb +0 -18
- data/app/controllers/spree/api/v2/storefront/products_controller_decorator.rb +0 -15
- data/app/controllers/spree/api/v2/storefront/taxons_controller_decorator.rb +0 -15
- data/app/controllers/spree/api/v2/tenant/ad_campaigns_controller.rb +0 -25
- data/app/controllers/spree/api/v2/tenant/episodes_controller.rb +0 -38
- data/app/controllers/spree/api/v2/tenant/free_vote_claims_controller.rb +0 -37
- data/app/controllers/spree/api/v2/tenant/preview_products_controller.rb +0 -47
- data/app/controllers/spree/api/v2/tenant/preview_sections_controller.rb +0 -26
- data/app/controllers/spree/api/v2/tenant/preview_shows_controller.rb +0 -19
- data/app/controllers/spree/api/v2/tenant/preview_taxons_controller.rb +0 -19
- data/app/controllers/spree/api/v2/tenant/show_contestants_controller.rb +0 -52
- data/app/controllers/spree/api/v2/tenant/show_elimination_sessions_controller.rb +0 -57
- data/app/controllers/spree/api/v2/tenant/show_people_controller.rb +0 -49
- data/app/controllers/spree/api/v2/tenant/show_person_assignments_controller.rb +0 -36
- data/app/controllers/spree/api/v2/tenant/shows_controller.rb +0 -36
- data/app/controllers/spree/api/v2/tenant/votes_controller.rb +0 -94
- data/app/controllers/spree/api/v2/tenant/voting_contestants_controller.rb +0 -43
- data/app/controllers/spree/api/v2/tenant/voting_credit_transactions_controller.rb +0 -41
- data/app/controllers/spree/api/v2/tenant/voting_credits_controller.rb +0 -31
- data/app/jobs/spree_cm_commissioner/show_contestants/import_job.rb +0 -9
- data/app/jobs/spree_cm_commissioner/vote_fraud_event_job.rb +0 -9
- data/app/jobs/spree_cm_commissioner/voting_credit_allocation_job.rb +0 -10
- data/app/jobs/spree_cm_commissioner/voting_credit_de_allocation_job.rb +0 -10
- data/app/models/concerns/spree_cm_commissioner/voting_session_live_stream_concern.rb +0 -41
- data/app/models/spree_cm_commissioner/imports/import_contestant.rb +0 -7
- data/app/models/spree_cm_commissioner/maintenance_tasks/voting_session.rb +0 -36
- data/app/models/spree_cm_commissioner/preview_role.rb +0 -8
- data/app/models/spree_cm_commissioner/role_user_decorator.rb +0 -8
- data/app/models/spree_cm_commissioner/show.rb +0 -163
- data/app/models/spree_cm_commissioner/show_contestant.rb +0 -39
- data/app/models/spree_cm_commissioner/show_contestant_image.rb +0 -11
- data/app/models/spree_cm_commissioner/show_contestant_video.rb +0 -15
- data/app/models/spree_cm_commissioner/show_episode.rb +0 -108
- data/app/models/spree_cm_commissioner/show_person.rb +0 -15
- data/app/models/spree_cm_commissioner/show_person_assignment.rb +0 -21
- data/app/models/spree_cm_commissioner/show_person_image.rb +0 -11
- data/app/models/spree_cm_commissioner/vote.rb +0 -16
- data/app/models/spree_cm_commissioner/vote_fraud_event.rb +0 -20
- data/app/models/spree_cm_commissioner/voting_contestant.rb +0 -100
- data/app/models/spree_cm_commissioner/voting_credit.rb +0 -72
- data/app/models/spree_cm_commissioner/voting_credit_transaction.rb +0 -55
- data/app/models/spree_cm_commissioner/voting_session.rb +0 -216
- data/app/models/spree_cm_commissioner/voting_session_stat.rb +0 -8
- data/app/overrides/spree/admin/orders/_search/payment_number_search_field.html.erb.deface +0 -8
- data/app/overrides/spree/admin/products/_form/enable_telegram_alert.html.erb.deface +0 -14
- data/app/overrides/spree/admin/products/_form/preview_checkbox.html.erb.deface +0 -9
- data/app/overrides/spree/admin/taxons/_form/preview_checkbox.html.erb.deface +0 -7
- data/app/serializers/spree/v2/tenant/ad_campaign_serializer.rb +0 -13
- data/app/serializers/spree/v2/tenant/advertisement_serializer.rb +0 -11
- data/app/serializers/spree/v2/tenant/show_contestant_serializer.rb +0 -21
- data/app/serializers/spree/v2/tenant/show_episode_serializer.rb +0 -20
- data/app/serializers/spree/v2/tenant/show_parent_serializer.rb +0 -13
- data/app/serializers/spree/v2/tenant/show_person_assignment_serializer.rb +0 -16
- data/app/serializers/spree/v2/tenant/show_person_serializer.rb +0 -13
- data/app/serializers/spree/v2/tenant/show_serializer.rb +0 -23
- data/app/serializers/spree/v2/tenant/video_serializer.rb +0 -9
- data/app/serializers/spree/v2/tenant/vote_package_serializer.rb +0 -9
- data/app/serializers/spree/v2/tenant/vote_serializer.rb +0 -14
- data/app/serializers/spree/v2/tenant/voting_contestant_serializer.rb +0 -23
- data/app/serializers/spree/v2/tenant/voting_credit_serializer.rb +0 -10
- data/app/serializers/spree/v2/tenant/voting_credit_transaction_serializer.rb +0 -14
- data/app/serializers/spree/v2/tenant/voting_session_serializer.rb +0 -21
- data/app/services/spree_cm_commissioner/fraud_check.rb +0 -299
- data/app/services/spree_cm_commissioner/imports/contestants/create.rb +0 -153
- data/app/services/spree_cm_commissioner/show_contestants/normalize_video_highlights.rb +0 -57
- data/app/services/spree_cm_commissioner/show_persons/contestant_assigner.rb +0 -51
- data/app/services/spree_cm_commissioner/url_embed/youtube_embed.rb +0 -44
- data/app/services/spree_cm_commissioner/vote_counters/audit_counters.rb +0 -43
- data/app/services/spree_cm_commissioner/vote_counters/base.rb +0 -31
- data/app/services/spree_cm_commissioner/vote_counters/increment.rb +0 -44
- data/app/services/spree_cm_commissioner/vote_counters/per_contestant_counter.rb +0 -68
- data/app/services/spree_cm_commissioner/vote_counters/rebuild_from_db.rb +0 -70
- data/app/services/spree_cm_commissioner/vote_counters/snapshot_to_db.rb +0 -113
- data/app/services/spree_cm_commissioner/vote_credit_deductor.rb +0 -68
- data/app/services/spree_cm_commissioner/vote_package/create.rb +0 -145
- data/app/services/spree_cm_commissioner/vote_package/update.rb +0 -91
- data/app/services/spree_cm_commissioner/vote_processor.rb +0 -144
- data/app/services/spree_cm_commissioner/voting_contestants/advancer.rb +0 -335
- data/app/services/spree_cm_commissioner/voting_contestants/assigner.rb +0 -40
- data/app/services/spree_cm_commissioner/voting_contestants/bulk_updater.rb +0 -106
- data/app/services/spree_cm_commissioner/voting_credits/allocate.rb +0 -77
- data/app/services/spree_cm_commissioner/voting_credits/claim_free_votes.rb +0 -119
- data/app/services/spree_cm_commissioner/voting_credits/credit_calculator.rb +0 -35
- data/app/services/spree_cm_commissioner/voting_credits/de_allocate.rb +0 -87
- data/app/services/spree_cm_commissioner/voting_leaderboards/calculate_score.rb +0 -67
- data/app/services/spree_cm_commissioner/voting_leaderboards/combined_result.rb +0 -190
- data/app/services/spree_cm_commissioner/voting_sessions/finalize.rb +0 -105
- data/db/migrate/20260309230148_create_cm_show_people.rb +0 -14
- data/db/migrate/20260309230149_create_cm_show_people_assignments.rb +0 -16
- data/db/migrate/20260310082711_create_cm_show_contestants.rb +0 -28
- data/db/migrate/20260310082720_create_cm_voting_sessions.rb +0 -21
- data/db/migrate/20260310082721_create_cm_voting_contestants.rb +0 -23
- data/db/migrate/20260310082734_add_voting_fields_to_spree_taxons.rb +0 -9
- data/db/migrate/20260310082735_add_type_to_spree_products.rb +0 -6
- data/db/migrate/20260310082749_create_cm_voting_credits.rb +0 -27
- data/db/migrate/20260326080200_create_cm_voting_credit_transactions.rb +0 -27
- data/db/migrate/20260330160000_create_cm_votes.rb +0 -25
- data/db/migrate/20260401072500_add_advanced_from_to_cm_voting_contestants.rb +0 -7
- data/db/migrate/20260402000001_add_voting_credit_scope_to_spree_taxons.rb +0 -6
- data/db/migrate/20260402000002_rename_scopeable_to_votable_in_cm_voting_credits.rb +0 -12
- data/db/migrate/20260403070000_add_name_to_cm_voting_sessions.rb +0 -5
- data/db/migrate/20260406000001_add_vendor_id_to_voting_tables.rb +0 -6
- data/db/migrate/20260406000001_rename_votes_remaining_to_amount_in_cm_voting_credits.rb +0 -11
- data/db/migrate/20260408085255_add_show_id_and_vendor_id_to_cm_voting_sessions.rb +0 -9
- data/db/migrate/20260420000001_rename_type_to_credit_type_in_cm_voting_credits.rb +0 -25
- data/db/migrate/20260422000001_create_cm_vote_fraud_events.rb +0 -23
- data/db/migrate/20260423000001_add_preview_to_taxons_products_and_sections.rb +0 -11
- data/db/migrate/20260423000002_create_preview_roles.rb +0 -24
- data/db/migrate/20260515120000_add_public_metadata_to_cm_voting_sessions.rb +0 -5
- data/db/migrate/20260518090920_add_unique_voter_count_to_voting_contestants.rb +0 -5
- data/db/migrate/20260518094322_create_cm_voting_session_stats.rb +0 -17
- data/db/migrate/20260520000001_add_scoring_model_to_cm_voting_sessions.rb +0 -5
- data/db/migrate/20260520000001_optimize_cm_votes_indexes.rb +0 -22
- data/db/migrate/20260525042257_add_vote_number_to_cm_voting_contestants.rb +0 -18
- data/db/migrate/20260527035430_add_confirmed_rank_to_cm_voting_contestants.rb +0 -5
- data/db/migrate/20260527062005_add_eliminated_at_to_cm_show_contestants.rb +0 -5
- data/db/migrate/20260603063652_add_parent_to_voting_sessions.rb +0 -9
- data/db/migrate/20260603090000_add_session_type_to_cm_voting_sessions.rb +0 -6
- data/db/migrate/20260608000000_add_display_to_cm_voting_sessions.rb +0 -5
- data/docs/sql/jsonb_query_guide.md +0 -57
- data/lib/spree_cm_commissioner/test_helper/factories/show_episode_factory.rb +0 -12
- data/lib/spree_cm_commissioner/test_helper/factories/show_factory.rb +0 -120
- data/lib/spree_cm_commissioner/test_helper/factories/vote_credit_factory.rb +0 -37
- data/lib/spree_cm_commissioner/test_helper/factories/vote_factory.rb +0 -28
- data/lib/spree_cm_commissioner/test_helper/factories/voting_credit_transaction_factory.rb +0 -11
- data/lib/spree_cm_commissioner/test_helper/factories/voting_session_factory.rb +0 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4f8d11251736536036263c451dde5cb82e34a6d54b12fe116866a338346d8097
|
|
4
|
+
data.tar.gz: f1cec56cfe9db369b4bf70a40c8545e09fd2b89a9d0fd1e2d0547cf4818a04eb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b0d1ef1dca4921e6493b8455b31c31b9289444aa64b3d5378dc6d87c0676c081ee2c0148dfd3a46fb8572d30fb8fb86d6c53a24249768b3b9001fbb3f2f6a4fa
|
|
7
|
+
data.tar.gz: a3dfc479c74f38e3889e84ab72246fc01e31134a630563f4f3bf2b3713e3e13d2df1389a0bdf1aae4337e56d891cb6a6dc29e21570d28b84d9d75a5b1d1cd152
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -16,7 +16,6 @@ module SpreeCmCommissioner
|
|
|
16
16
|
GuestCardClassesController
|
|
17
17
|
SeatLayoutController
|
|
18
18
|
CmsPagesController
|
|
19
|
-
AdvertisementsController
|
|
20
19
|
].freeze
|
|
21
20
|
|
|
22
21
|
# Priority 2: Semi-Static (1 hour)
|
|
@@ -26,7 +25,6 @@ module SpreeCmCommissioner
|
|
|
26
25
|
HomepageDataController
|
|
27
26
|
PopularRoutesController
|
|
28
27
|
RoutePlacesController
|
|
29
|
-
ShowsController
|
|
30
28
|
].freeze
|
|
31
29
|
|
|
32
30
|
# Priority 3: Moderate Freshness (30 minutes)
|
|
@@ -51,10 +51,7 @@ module Spree
|
|
|
51
51
|
def permitted_resource_params
|
|
52
52
|
segment_value = helpers.calculate_segment_value(params[:spree_cm_commissioner_homepage_section])
|
|
53
53
|
|
|
54
|
-
params
|
|
55
|
-
.require(:spree_cm_commissioner_homepage_section)
|
|
56
|
-
.permit(:title, :description, :active, :tenant_id, :preview)
|
|
57
|
-
.merge(segment: segment_value)
|
|
54
|
+
params.require(:spree_cm_commissioner_homepage_section).permit(:title, :description, :active, :tenant_id).merge(segment: segment_value)
|
|
58
55
|
end
|
|
59
56
|
|
|
60
57
|
def load_tenants
|
|
@@ -9,7 +9,6 @@ module Spree
|
|
|
9
9
|
q['s'] ||= 'created_at desc'
|
|
10
10
|
q['created_at_gt'] = parse_time_or_nil(q['created_at_gt'], :beginning_of_day) if q['created_at_gt'].present?
|
|
11
11
|
q['created_at_lt'] = parse_time_or_nil(q['created_at_lt'], :end_of_day) if q['created_at_lt'].present?
|
|
12
|
-
normalize_enum_filters!(q)
|
|
13
12
|
|
|
14
13
|
@search = scope.ransack(q)
|
|
15
14
|
result_scope = @search.result(distinct: true)
|
|
@@ -19,11 +18,7 @@ module Spree
|
|
|
19
18
|
.page(params[:page])
|
|
20
19
|
.per(params[:per_page] || Spree::Backend::Config[:admin_orders_per_page])
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
# each tab shows how many holds it would return (otherwise selecting one status
|
|
24
|
-
# zeroes out all the other tabs).
|
|
25
|
-
@status_counts = scope.ransack(q.except('status_eq')).result(distinct: true)
|
|
26
|
-
.reorder(nil).group(:status).count
|
|
21
|
+
@status_counts = result_scope.reorder(nil).group(:status).count
|
|
27
22
|
end
|
|
28
23
|
|
|
29
24
|
def release
|
|
@@ -49,20 +44,6 @@ module Spree
|
|
|
49
44
|
|
|
50
45
|
private
|
|
51
46
|
|
|
52
|
-
# `status` and `release_reason` are integer-backed enums. Ransack casts a string
|
|
53
|
-
# value for an integer column with String#to_i, so "payment_locked" becomes 0
|
|
54
|
-
# (== :pending) and every label silently filters to the wrong status. Translate
|
|
55
|
-
# enum labels to their stored integer before searching.
|
|
56
|
-
def normalize_enum_filters!(query)
|
|
57
|
-
{
|
|
58
|
-
'status_eq' => SpreeCmCommissioner::InventoryHold.statuses,
|
|
59
|
-
'release_reason_eq' => SpreeCmCommissioner::InventoryHold.release_reasons
|
|
60
|
-
}.each do |key, mapping|
|
|
61
|
-
value = query[key]
|
|
62
|
-
query[key] = mapping[value.to_s] if value.present? && mapping.key?(value.to_s)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
47
|
def back_params
|
|
67
48
|
raw_params = params[:back_params].presence || params
|
|
68
49
|
ActionController::Parameters.new(raw_params).permit(:page, :per_page, q: {})
|
|
@@ -3,7 +3,6 @@ module Spree
|
|
|
3
3
|
module TaxonsControllerDecorator
|
|
4
4
|
def self.prepended(base)
|
|
5
5
|
base.before_action :build_assets, only: %i[create update]
|
|
6
|
-
base.before_action :normalize_sti_taxon_params, only: %i[create update]
|
|
7
6
|
end
|
|
8
7
|
|
|
9
8
|
# override
|
|
@@ -56,24 +55,6 @@ module Spree
|
|
|
56
55
|
@taxon.build_ad_banner(attachment: permitted_resource_params.delete(:ad_banner)) if permitted_resource_params[:ad_banner]
|
|
57
56
|
@taxon.build_video_banner(attachment: permitted_resource_params.delete(:video_banner)) if permitted_resource_params[:video_banner]
|
|
58
57
|
end
|
|
59
|
-
|
|
60
|
-
# Some admin forms submit STI records under their class key
|
|
61
|
-
# (e.g. :spree_cm_commissioner_show) while Spree update reads :taxon.
|
|
62
|
-
# Merge both into :taxon so all edited fields are persisted.
|
|
63
|
-
def normalize_sti_taxon_params
|
|
64
|
-
return unless @taxon
|
|
65
|
-
|
|
66
|
-
sti_key = @taxon.class.model_name.param_key.to_sym
|
|
67
|
-
sti_params = params[sti_key]
|
|
68
|
-
return unless sti_params.is_a?(::ActionController::Parameters)
|
|
69
|
-
|
|
70
|
-
base_params = params[:taxon]
|
|
71
|
-
base_hash = base_params.is_a?(::ActionController::Parameters) ? base_params.to_unsafe_h : {}
|
|
72
|
-
sti_hash = sti_params.to_unsafe_h
|
|
73
|
-
merged_params = ::ActionController::Parameters.new(base_hash.merge(sti_hash))
|
|
74
|
-
|
|
75
|
-
params[:taxon] = merged_params
|
|
76
|
-
end
|
|
77
58
|
end
|
|
78
59
|
end
|
|
79
60
|
end
|
|
@@ -30,18 +30,13 @@ module Spree
|
|
|
30
30
|
private
|
|
31
31
|
|
|
32
32
|
def collection
|
|
33
|
-
# WARNING: Do NOT remove .order(id: :desc).
|
|
34
|
-
# Mobile relies on this ordering for paginated order_histories.
|
|
35
|
-
# Removing it will cause mobile to paginate by oldest records first (last 10 oldest),
|
|
36
|
-
# breaking the "most recent orders" display on the order history screen.
|
|
37
|
-
# It related to user cancel or complete order flow, which relies on the most recent orders being returned first.
|
|
38
33
|
if spree_current_user.present?
|
|
39
|
-
spree_current_user.orders.not_archived
|
|
34
|
+
spree_current_user.orders.not_archived
|
|
40
35
|
else
|
|
41
36
|
order_tokens = Array(params[:order_tokens])
|
|
42
37
|
return Spree::Order.none if order_tokens.empty?
|
|
43
38
|
|
|
44
|
-
Spree::Order.not_archived.without_user.where(token: order_tokens)
|
|
39
|
+
Spree::Order.not_archived.without_user.where(token: order_tokens)
|
|
45
40
|
end
|
|
46
41
|
end
|
|
47
42
|
|
|
@@ -37,18 +37,13 @@ module Spree
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def collection
|
|
40
|
-
# WARNING: Do NOT remove .order(id: :desc).
|
|
41
|
-
# Mobile relies on this ordering for paginated order_histories.
|
|
42
|
-
# Removing it will cause mobile to paginate by oldest records first (last 10 oldest),
|
|
43
|
-
# breaking the "most recent orders" display on the order history screen.
|
|
44
|
-
# It related to user cancel or complete order flow, which relies on the most recent orders being returned first.
|
|
45
40
|
if spree_current_user.present?
|
|
46
|
-
spree_current_user.orders.not_archived
|
|
41
|
+
spree_current_user.orders.not_archived
|
|
47
42
|
else
|
|
48
43
|
order_tokens = Array(params[:order_tokens])
|
|
49
44
|
return Spree::Order.none if order_tokens.empty?
|
|
50
45
|
|
|
51
|
-
Spree::Order.not_archived.without_user.where(token: order_tokens)
|
|
46
|
+
Spree::Order.not_archived.without_user.where(token: order_tokens)
|
|
52
47
|
end
|
|
53
48
|
end
|
|
54
49
|
|
|
@@ -6,7 +6,6 @@ module SpreeCmCommissioner
|
|
|
6
6
|
base.around_action :set_writing_role, only: %i[index]
|
|
7
7
|
base.after_action :set_tenant_after_update, only: %i[update]
|
|
8
8
|
base.before_action :merge_industry_taxons_into_taxons, only: [:update]
|
|
9
|
-
base.before_action :normalize_sti_product_params, only: %i[create update]
|
|
10
9
|
end
|
|
11
10
|
|
|
12
11
|
# Override
|
|
@@ -52,24 +51,6 @@ module SpreeCmCommissioner
|
|
|
52
51
|
|
|
53
52
|
protected
|
|
54
53
|
|
|
55
|
-
# Some admin forms submit STI records under their class key while
|
|
56
|
-
# Spree update reads :product. Merge both into :product so all edited
|
|
57
|
-
# fields are persisted for STI product subclasses.
|
|
58
|
-
def normalize_sti_product_params
|
|
59
|
-
return unless @product
|
|
60
|
-
|
|
61
|
-
sti_key = @product.class.model_name.param_key.to_sym
|
|
62
|
-
sti_params = params[sti_key]
|
|
63
|
-
return unless sti_params.is_a?(::ActionController::Parameters)
|
|
64
|
-
|
|
65
|
-
base_params = params[:product]
|
|
66
|
-
base_hash = base_params.is_a?(::ActionController::Parameters) ? base_params.to_unsafe_h : {}
|
|
67
|
-
sti_hash = sti_params.to_unsafe_h
|
|
68
|
-
merged_params = ::ActionController::Parameters.new(base_hash.merge(sti_hash))
|
|
69
|
-
|
|
70
|
-
params[:product] = merged_params
|
|
71
|
-
end
|
|
72
|
-
|
|
73
54
|
def merge_industry_taxons_into_taxons
|
|
74
55
|
return if params[:product].blank?
|
|
75
56
|
|
|
@@ -33,7 +33,6 @@ module Spree
|
|
|
33
33
|
@brand_color = @order.tenant.preferred_brand_primary_color
|
|
34
34
|
end
|
|
35
35
|
@product_type = @order.products.first&.product_type || 'accommodation'
|
|
36
|
-
@is_email = true
|
|
37
36
|
|
|
38
37
|
subject = build_subject(resend)
|
|
39
38
|
|
|
@@ -87,7 +86,6 @@ module Spree
|
|
|
87
86
|
|
|
88
87
|
@current_store = @order.store
|
|
89
88
|
@product_type = @line_item.product_type
|
|
90
|
-
@is_email = true
|
|
91
89
|
|
|
92
90
|
subject = "#{@current_store&.name} Booking Confirmation ##{@order.number}"
|
|
93
91
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Make sure to put this concern below other concern or methods that generating additional order info like guests, seat number, etc.
|
|
2
2
|
# This will ensure that when each notification is sent with neccessary data.
|
|
3
3
|
module SpreeCmCommissioner
|
|
4
|
-
module OrderStateMachine
|
|
4
|
+
module OrderStateMachine
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
6
|
|
|
7
7
|
included do # rubocop:disable Metrics/BlockLength
|
|
@@ -26,10 +26,8 @@ module SpreeCmCommissioner
|
|
|
26
26
|
|
|
27
27
|
state_machine.after_transition to: :canceled, do: :precalculate_conversion
|
|
28
28
|
state_machine.after_transition to: :canceled, do: :restock_inventory!
|
|
29
|
-
state_machine.after_transition to: :canceled, do: :de_allocate_resources
|
|
30
29
|
|
|
31
30
|
state_machine.after_transition to: :complete, do: :increment_route_fulfilled_order_count
|
|
32
|
-
state_machine.after_transition to: :complete, do: :allocate_resources
|
|
33
31
|
state_machine.after_transition to: :complete, do: :run_order_complete_alerts
|
|
34
32
|
|
|
35
33
|
scope :accepted, -> { where(request_state: 'accepted') }
|
|
@@ -273,18 +271,7 @@ module SpreeCmCommissioner
|
|
|
273
271
|
|
|
274
272
|
def send_order_request_telegram_confirmation_alert_to_vendor; end
|
|
275
273
|
|
|
276
|
-
# Telegram order alerts are sent unless EVERY purchased product opts out.
|
|
277
|
-
# Default is true (see product_decorator), so existing orders are unaffected.
|
|
278
|
-
# Checked at enqueue time so disabled products create no telegram jobs at all.
|
|
279
|
-
def telegram_alert_enabled?
|
|
280
|
-
return @telegram_alert_enabled if defined?(@telegram_alert_enabled)
|
|
281
|
-
|
|
282
|
-
@telegram_alert_enabled = line_items.any?(&:enable_telegram_alert?)
|
|
283
|
-
end
|
|
284
|
-
|
|
285
274
|
def send_order_complete_telegram_alert_to_vendors
|
|
286
|
-
return unless telegram_alert_enabled?
|
|
287
|
-
|
|
288
275
|
vendor_list.each do |vendor|
|
|
289
276
|
title = '🎫 --- [NEW ORDER FROM BOOKME+] ---'
|
|
290
277
|
chat_id = vendor.preferred_telegram_chat_id
|
|
@@ -300,8 +287,6 @@ module SpreeCmCommissioner
|
|
|
300
287
|
end
|
|
301
288
|
|
|
302
289
|
def notify_order_complete_telegram_notification_to_user
|
|
303
|
-
return unless telegram_alert_enabled?
|
|
304
|
-
|
|
305
290
|
SpreeCmCommissioner::OrderCompleteTelegramSenderJob.perform_later(order_id: id) if user_id.present?
|
|
306
291
|
end
|
|
307
292
|
|
|
@@ -318,8 +303,6 @@ module SpreeCmCommissioner
|
|
|
318
303
|
end
|
|
319
304
|
|
|
320
305
|
def send_order_requested_telegram_alert_to_store
|
|
321
|
-
return unless telegram_alert_enabled?
|
|
322
|
-
|
|
323
306
|
title = '🔔 --- [NEW REQUESTED BY USER] ---'
|
|
324
307
|
chat_id = store.preferred_telegram_order_request_alert_chat_id
|
|
325
308
|
factory = OrderTelegramMessageFactory.new(title: title, order: self)
|
|
@@ -327,8 +310,6 @@ module SpreeCmCommissioner
|
|
|
327
310
|
end
|
|
328
311
|
|
|
329
312
|
def send_order_accepted_telegram_alert_to_store
|
|
330
|
-
return unless telegram_alert_enabled?
|
|
331
|
-
|
|
332
313
|
title = '✅ --- [ORDER ACCEPTED BY VENDOR] ---'
|
|
333
314
|
chat_id = store.preferred_telegram_order_request_alert_chat_id
|
|
334
315
|
factory = OrderTelegramMessageFactory.new(title: title, order: self)
|
|
@@ -336,8 +317,6 @@ module SpreeCmCommissioner
|
|
|
336
317
|
end
|
|
337
318
|
|
|
338
319
|
def send_order_rejected_telegram_alert_to_store
|
|
339
|
-
return unless telegram_alert_enabled?
|
|
340
|
-
|
|
341
320
|
title = '❌ --- [ORDER REJECTED BY VENDOR] ---'
|
|
342
321
|
chat_id = store.preferred_telegram_order_request_alert_chat_id
|
|
343
322
|
factory = OrderTelegramMessageFactory.new(title: title, order: self)
|
|
@@ -346,7 +325,6 @@ module SpreeCmCommissioner
|
|
|
346
325
|
|
|
347
326
|
def run_order_complete_alerts
|
|
348
327
|
return unless ENV['ORDER_INTEGRITY_TELEGRAM_ALERT_ENABLED'] == 'yes'
|
|
349
|
-
return unless telegram_alert_enabled?
|
|
350
328
|
|
|
351
329
|
# Allow async payment processors time to settle before checking for alerts
|
|
352
330
|
SpreeCmCommissioner::TelegramAlerts::OrderIntegrityCheckJob
|
|
@@ -355,20 +333,10 @@ module SpreeCmCommissioner
|
|
|
355
333
|
end
|
|
356
334
|
|
|
357
335
|
def send_order_complete_telegram_alert_to_store
|
|
358
|
-
return unless telegram_alert_enabled?
|
|
359
|
-
|
|
360
336
|
title = '🎫 --- [NEW ORDER] ---'
|
|
361
337
|
chat_id = store.preferred_telegram_order_alert_chat_id
|
|
362
338
|
factory = OrderTelegramMessageFactory.new(title: title, order: self)
|
|
363
339
|
TelegramNotificationSenderJob.perform_later(chat_id: chat_id, message: factory.message, parse_mode: factory.parse_mode)
|
|
364
340
|
end
|
|
365
|
-
|
|
366
|
-
def allocate_resources
|
|
367
|
-
SpreeCmCommissioner::VotingCreditAllocationJob.perform_later(order_id: id)
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
def de_allocate_resources
|
|
371
|
-
SpreeCmCommissioner::VotingCreditDeAllocationJob.perform_later(order_id: id)
|
|
372
|
-
end
|
|
373
341
|
end
|
|
374
342
|
end
|
|
@@ -5,7 +5,7 @@ module SpreeCmCommissioner
|
|
|
5
5
|
module ProductType
|
|
6
6
|
extend ActiveSupport::Concern
|
|
7
7
|
|
|
8
|
-
PRODUCT_TYPES = %i[accommodation service ecommerce transit
|
|
8
|
+
PRODUCT_TYPES = %i[accommodation service ecommerce transit].freeze
|
|
9
9
|
PERMANENT_STOCK_PRODUCT_TYPES = %w[accommodation service transit].freeze
|
|
10
10
|
PRE_INVENTORY_DAYS = { 'transit' => 90, 'accommodation' => 365, 'service' => 30 }.freeze
|
|
11
11
|
|
|
@@ -3,9 +3,7 @@ module SpreeCmCommissioner
|
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
4
|
|
|
5
5
|
included do
|
|
6
|
-
enum kind: { category: 0, cms: 1, event: 2, occupation: 3, nationality: 4, organization: 5, transit: 6, industry: 7, agency_category: 8
|
|
7
|
-
ads: 9
|
|
8
|
-
}
|
|
6
|
+
enum kind: { category: 0, cms: 1, event: 2, occupation: 3, nationality: 4, organization: 5, transit: 6, industry: 7, agency_category: 8 }
|
|
9
7
|
end
|
|
10
8
|
end
|
|
11
9
|
end
|
|
@@ -3,8 +3,7 @@ module SpreeCmCommissioner
|
|
|
3
3
|
extend FriendlyId
|
|
4
4
|
|
|
5
5
|
enum :status, { :queue => 0, :progress => 1, :done => 2, :failed => 3, :canceling => 4, :canceled => 5 }
|
|
6
|
-
enum :import_type, { :new_order => 0, :existing_order => 1, :aba_payment_reference => 2
|
|
7
|
-
|
|
6
|
+
enum :import_type, { :new_order => 0, :existing_order => 1, :aba_payment_reference => 2 }
|
|
8
7
|
has_one_attached :imported_file
|
|
9
8
|
friendly_id :name, use: :slugged
|
|
10
9
|
|
|
@@ -12,10 +12,6 @@ module SpreeCmCommissioner
|
|
|
12
12
|
base.include SpreeCmCommissioner::StoreMetadata
|
|
13
13
|
base.include SpreeCmCommissioner::HomepageSectionRelatableConcern
|
|
14
14
|
|
|
15
|
-
base.delegate :is_open_dated, :is_open_dated?, to: :trip, allow_nil: true
|
|
16
|
-
|
|
17
|
-
base.has_many :voting_sessions, class_name: 'SpreeCmCommissioner::VotingSession', foreign_key: :episode_id, dependent: :destroy
|
|
18
|
-
|
|
19
15
|
base.has_many :variant_kind_option_types, -> { where(kind: :variant).order(:position) },
|
|
20
16
|
through: :product_option_types, source: :option_type
|
|
21
17
|
|
|
@@ -63,45 +59,8 @@ module SpreeCmCommissioner
|
|
|
63
59
|
|
|
64
60
|
base.belongs_to :event, class_name: 'Spree::Taxon', optional: true
|
|
65
61
|
|
|
66
|
-
base.has_many :preview_roles, class_name: 'SpreeCmCommissioner::PreviewRole', as: :previewable
|
|
67
62
|
base.has_many :industry_classifications, -> { joins(:taxon).where(spree_taxons: { kind: :industry }) }, class_name: 'Spree::Classification'
|
|
68
63
|
base.has_many :industry_taxons, through: :industry_classifications, source: :taxon
|
|
69
|
-
base.scope :visible_to, lambda { |user|
|
|
70
|
-
publicly_available = where(status: :active, preview: false)
|
|
71
|
-
|
|
72
|
-
if user
|
|
73
|
-
# Resolved through associations — avoids hardcoding class names.
|
|
74
|
-
taxon_type = reflect_on_association(:taxons).klass.polymorphic_name
|
|
75
|
-
|
|
76
|
-
# IDs of products that have been explicitly assigned their own PreviewRole.
|
|
77
|
-
products_with_own_roles = SpreeCmCommissioner::PreviewRole
|
|
78
|
-
.where(previewable_type: polymorphic_name)
|
|
79
|
-
.select(:previewable_id)
|
|
80
|
-
|
|
81
|
-
# Path A: product has its own PreviewRole → user must hold that role directly.
|
|
82
|
-
# Taxon membership is irrelevant for these products.
|
|
83
|
-
via_product_role = where(status: :active, preview: true)
|
|
84
|
-
.where(id: products_with_own_roles)
|
|
85
|
-
.where(id: user.preview_roles.where(previewable_type: polymorphic_name).select(:previewable_id))
|
|
86
|
-
|
|
87
|
-
# Path B: product has no own PreviewRole → inherit access from its event or taxons.
|
|
88
|
-
# Accessible if the user holds a preview role for the product's event_id or any
|
|
89
|
-
# taxon the product belongs to via the classifications join table.
|
|
90
|
-
allowed_taxon_ids = user.preview_roles.where(previewable_type: taxon_type).select(:previewable_id)
|
|
91
|
-
preview_no_own = where(status: :active, preview: true).where.not(id: products_with_own_roles)
|
|
92
|
-
|
|
93
|
-
via_event_id = preview_no_own.where(event_id: allowed_taxon_ids)
|
|
94
|
-
via_taxon_join = preview_no_own.joins(:taxons).where(spree_taxons: { id: allowed_taxon_ids })
|
|
95
|
-
|
|
96
|
-
publicly_available
|
|
97
|
-
.or(via_product_role)
|
|
98
|
-
.or(where(id: via_event_id.select(:id)))
|
|
99
|
-
.or(where(id: via_taxon_join.select(:id)))
|
|
100
|
-
else
|
|
101
|
-
publicly_available
|
|
102
|
-
end
|
|
103
|
-
}
|
|
104
|
-
|
|
105
64
|
base.scope :min_price, lambda { |vendor|
|
|
106
65
|
joins(:prices_including_master)
|
|
107
66
|
.where(vendor_id: vendor.id, product_type: vendor.primary_product_type)
|
|
@@ -114,12 +73,6 @@ module SpreeCmCommissioner
|
|
|
114
73
|
.maximum('spree_prices.price').to_f
|
|
115
74
|
}
|
|
116
75
|
base.scope :subscribable, -> { where(subscribable: 1) }
|
|
117
|
-
base.scope :advertisements, lambda {
|
|
118
|
-
advertisement
|
|
119
|
-
.available
|
|
120
|
-
.where('spree_products.available_on IS NULL OR spree_products.available_on <= CURRENT_TIMESTAMP')
|
|
121
|
-
.where('spree_products.discontinue_on IS NULL OR spree_products.discontinue_on > CURRENT_TIMESTAMP')
|
|
122
|
-
}
|
|
123
76
|
|
|
124
77
|
base.before_validation :set_event_id
|
|
125
78
|
|
|
@@ -132,12 +85,6 @@ module SpreeCmCommissioner
|
|
|
132
85
|
|
|
133
86
|
base.store_public_metadata :open_dated_validity_days, :integer, default: 90
|
|
134
87
|
base.store_public_metadata :enable_inventory_hold, :boolean, default: false
|
|
135
|
-
base.store_public_metadata :enable_telegram_alert, :boolean, default: true
|
|
136
|
-
|
|
137
|
-
base.store_private_metadata :advertise_weight, :integer, default: 1
|
|
138
|
-
base.store_private_metadata :video_url, :string
|
|
139
|
-
base.store_private_metadata :skip_after_seconds, :integer, default: 5
|
|
140
|
-
base.store_private_metadata :duration_seconds, :integer, default: 30
|
|
141
88
|
|
|
142
89
|
base.after_update :update_variants_vendor_id, if: :saved_change_to_vendor_id?
|
|
143
90
|
base.after_update :sync_event_id_to_children, if: :saved_change_to_event_id?
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
module SpreeCmCommissioner
|
|
2
2
|
module RoleDecorator
|
|
3
3
|
def self.prepended(base)
|
|
4
|
-
base.enum role_type: { internal: 0, external: 1
|
|
4
|
+
base.enum role_type: { internal: 0, external: 1 }
|
|
5
5
|
|
|
6
6
|
base.has_many :role_permissions, class_name: 'SpreeCmCommissioner::RolePermission'
|
|
7
7
|
base.has_many :permissions, through: :role_permissions, class_name: 'SpreeCmCommissioner::Permission'
|
|
8
|
-
base.has_many :preview_roles, class_name: 'SpreeCmCommissioner::PreviewRole'
|
|
9
8
|
|
|
10
9
|
base.belongs_to :vendor, optional: true
|
|
11
10
|
|
|
@@ -14,8 +13,6 @@ module SpreeCmCommissioner
|
|
|
14
13
|
where(vendor_id: vendor)
|
|
15
14
|
}
|
|
16
15
|
base.scope :filter_external, -> { where(role_type: :external) }
|
|
17
|
-
base.scope :filter_internal, -> { where(role_type: :internal) }
|
|
18
|
-
base.scope :filter_preview, -> { where(role_type: :preview) }
|
|
19
16
|
|
|
20
17
|
base.accepts_nested_attributes_for :role_permissions, allow_destroy: true
|
|
21
18
|
|
|
@@ -84,29 +84,7 @@ module SpreeCmCommissioner
|
|
|
84
84
|
|
|
85
85
|
base.has_many :import_orders, as: :importable, class_name: 'SpreeCmCommissioner::Imports::ImportOrder', dependent: :destroy
|
|
86
86
|
|
|
87
|
-
base.scope :shows, -> { where(taxonomy_id: Spree::Taxonomy.shows.id, depth: 1) }
|
|
88
|
-
base.scope :events, -> { where(taxonomy_id: Spree::Taxonomy.events.id, depth: 1) }
|
|
89
|
-
base.scope :ad_campaigns, -> { where(taxonomy_id: Spree::Taxonomy.ads.id, depth: 1) }
|
|
90
|
-
|
|
91
|
-
base.has_many :advertisements,
|
|
92
|
-
-> { where(product_type: :advertisement, deleted_at: nil) },
|
|
93
|
-
through: :classifications,
|
|
94
|
-
class_name: 'Spree::Product',
|
|
95
|
-
source: :product
|
|
96
|
-
|
|
97
87
|
base.has_many :agencies, class_name: 'SpreeCmCommissioner::Agency', foreign_key: :agency_category_id
|
|
98
|
-
base.has_many :preview_roles, class_name: 'SpreeCmCommissioner::PreviewRole', as: :previewable
|
|
99
|
-
|
|
100
|
-
base.scope :visible_to, lambda { |user|
|
|
101
|
-
publicly_available = where(preview: false)
|
|
102
|
-
|
|
103
|
-
if user
|
|
104
|
-
allowed_ids = user.preview_roles.where(previewable_type: polymorphic_name).select(:previewable_id)
|
|
105
|
-
publicly_available.or(where(preview: true, id: allowed_ids))
|
|
106
|
-
else
|
|
107
|
-
publicly_available
|
|
108
|
-
end
|
|
109
|
-
}
|
|
110
88
|
|
|
111
89
|
# Create maintaining task to purge taxon related caches
|
|
112
90
|
base.after_save { SpreeCmCommissioner::MaintenanceTasks::CacheInvalidation.pending.create_or_find_by(maintainable: self) }
|
|
@@ -119,7 +97,6 @@ module SpreeCmCommissioner
|
|
|
119
97
|
.joins('INNER JOIN cm_homepage_sections ON cm_homepage_section_relatables.homepage_section_id = cm_homepage_sections.id')
|
|
120
98
|
.where(cm_homepage_sections: { tenant_id: nil, active: true })
|
|
121
99
|
.where(kind: :event)
|
|
122
|
-
.where(preview: false)
|
|
123
100
|
end
|
|
124
101
|
|
|
125
102
|
def base.find_event(id)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module SpreeCmCommissioner
|
|
2
2
|
module TaxonomyDecorator
|
|
3
|
-
def self.prepended(base)
|
|
3
|
+
def self.prepended(base)
|
|
4
4
|
base.include SpreeCmCommissioner::TaxonKind
|
|
5
5
|
|
|
6
6
|
base.belongs_to :vendor, class_name: 'Spree::Vendor', optional: true
|
|
@@ -15,15 +15,6 @@ module SpreeCmCommissioner
|
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
def base.shows
|
|
19
|
-
ActiveRecord::Base.connected_to(role: :writing) do
|
|
20
|
-
shows = Spree::Taxonomy.find_or_create_by(name: 'Shows', store: Spree::Store.default)
|
|
21
|
-
shows.kind = :event
|
|
22
|
-
shows.save if shows.changed?
|
|
23
|
-
shows
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
18
|
def base.businesses
|
|
28
19
|
ActiveRecord::Base.connected_to(role: :writing) do
|
|
29
20
|
businesses = Spree::Taxonomy.find_or_create_by(name: 'Businesses', store: Spree::Store.default)
|
|
@@ -41,15 +32,6 @@ module SpreeCmCommissioner
|
|
|
41
32
|
agency_categories
|
|
42
33
|
end
|
|
43
34
|
end
|
|
44
|
-
|
|
45
|
-
def base.ads
|
|
46
|
-
ActiveRecord::Base.connected_to(role: :writing) do
|
|
47
|
-
ads = Spree::Taxonomy.find_or_create_by(name: 'Ads', store: Spree::Store.default)
|
|
48
|
-
ads.kind = :ads
|
|
49
|
-
ads.save if ads.changed?
|
|
50
|
-
ads
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
35
|
end
|
|
54
36
|
end
|
|
55
37
|
end
|