spree_cm_commissioner 2.8.3.pre.pre8 → 2.8.3

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 (274) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test_and_build_gem.yml +1 -2
  3. data/.gitignore +0 -6
  4. data/Gemfile.lock +1 -1
  5. data/app/controllers/concerns/spree_cm_commissioner/content_cachable.rb +0 -2
  6. data/app/controllers/spree/admin/guests_controller.rb +1 -1
  7. data/app/controllers/spree/admin/homepage_section_controller.rb +1 -4
  8. data/app/controllers/spree/admin/stock_managements_controller.rb +1 -1
  9. data/app/controllers/spree/admin/taxons_controller_decorator.rb +0 -19
  10. data/app/controllers/spree/api/v2/storefront/homepage_sections_controller.rb +0 -1
  11. data/app/controllers/spree/api/v2/tenant/base_controller.rb +0 -4
  12. data/app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb +0 -1
  13. data/app/controllers/spree/api/v2/tenant/products_controller.rb +1 -1
  14. data/app/controllers/spree/api/v2/tenant/taxons_controller.rb +1 -1
  15. data/app/controllers/spree/api/v2/tenant/trips_controller.rb +0 -11
  16. data/app/controllers/spree_cm_commissioner/admin/orders_controller_decorator.rb +3 -7
  17. data/app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb +0 -19
  18. data/app/finders/spree_cm_commissioner/events/find_matches.rb +0 -1
  19. data/app/helpers/spree_cm_commissioner/admin/guest_helper.rb +0 -10
  20. data/app/helpers/spree_cm_commissioner/admin/homepage_segment_helper.rb +0 -2
  21. data/app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb +1 -2
  22. data/app/models/concerns/spree_cm_commissioner/line_items_filter_scope.rb +0 -5
  23. data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +1 -2
  24. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -10
  25. data/app/models/concerns/spree_cm_commissioner/product_type.rb +1 -1
  26. data/app/models/concerns/spree_cm_commissioner/taxon_kind.rb +1 -3
  27. data/app/models/spree_cm_commissioner/guest.rb +0 -20
  28. data/app/models/spree_cm_commissioner/import.rb +1 -1
  29. data/app/models/spree_cm_commissioner/line_item_decorator.rb +0 -7
  30. data/app/models/spree_cm_commissioner/notification.rb +1 -10
  31. data/app/models/spree_cm_commissioner/order_decorator.rb +3 -13
  32. data/app/models/spree_cm_commissioner/payment_decorator.rb +0 -19
  33. data/app/models/spree_cm_commissioner/payment_method_decorator.rb +0 -8
  34. data/app/models/spree_cm_commissioner/product_decorator.rb +0 -50
  35. data/app/models/spree_cm_commissioner/reserved_block.rb +0 -2
  36. data/app/models/spree_cm_commissioner/role_decorator.rb +1 -4
  37. data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +0 -4
  38. data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -3
  39. data/app/models/spree_cm_commissioner/taxon_decorator.rb +0 -22
  40. data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +1 -19
  41. data/app/models/spree_cm_commissioner/tenant.rb +0 -9
  42. data/app/models/spree_cm_commissioner/trip.rb +0 -31
  43. data/app/models/spree_cm_commissioner/user_decorator.rb +0 -6
  44. data/app/models/spree_cm_commissioner/variant_decorator.rb +0 -4
  45. data/app/models/spree_cm_commissioner/variant_options.rb +0 -4
  46. data/app/models/spree_cm_commissioner/vendor_decorator.rb +0 -4
  47. data/app/queries/spree_cm_commissioner/multi_leg_trips_query.rb +8 -31
  48. data/app/queries/spree_cm_commissioner/single_leg_trips_query.rb +2 -33
  49. data/app/serializers/spree/v2/storefront/homepage_section_serializer.rb +1 -1
  50. data/app/serializers/spree/v2/storefront/line_item_serializer_decorator.rb +2 -4
  51. data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +2 -3
  52. data/app/serializers/spree/v2/storefront/role_serializer.rb +1 -1
  53. data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +1 -2
  54. data/app/serializers/spree/v2/tenant/dynamic_field_serializer.rb +1 -1
  55. data/app/serializers/spree/v2/tenant/homepage_section_serializer.rb +1 -1
  56. data/app/serializers/spree/v2/tenant/role_serializer.rb +1 -1
  57. data/app/serializers/spree_cm_commissioner/v2/storefront/dynamic_field_serializer.rb +1 -1
  58. data/app/serializers/spree_cm_commissioner/v2/storefront/guest_serializer.rb +1 -3
  59. data/app/serializers/spree_cm_commissioner/v2/storefront/reserved_block_serializer.rb +1 -1
  60. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_query_result_serializer.rb +1 -2
  61. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_stop_serializer.rb +0 -1
  62. data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +0 -12
  63. data/app/services/spree_cm_commissioner/check_ins/create_bulk.rb +5 -11
  64. data/app/services/spree_cm_commissioner/inventory_items/reset.rb +1 -1
  65. data/app/services/spree_cm_commissioner/reserved_blocks/reserve.rb +1 -2
  66. data/app/views/spree/admin/guests/_table.html.erb +87 -82
  67. data/app/views/spree/admin/homepage_section/_form.html.erb +0 -5
  68. data/config/initializers/spree_permitted_attributes.rb +0 -8
  69. data/config/locales/en.yml +1 -105
  70. data/config/locales/km.yml +0 -133
  71. data/config/routes.rb +0 -48
  72. data/lib/spree_cm_commissioner/trip_query_result.rb +0 -9
  73. data/lib/spree_cm_commissioner/trip_result.rb +2 -5
  74. data/lib/spree_cm_commissioner/version.rb +1 -1
  75. data/lib/spree_cm_commissioner.rb +1 -7
  76. data/spree_cm_commissioner.gemspec +1 -1
  77. metadata +4 -202
  78. data/app/controllers/spree/admin/order_ticket_transfers_controller.rb +0 -25
  79. data/app/controllers/spree/admin/ticket_transfer_rules_controller.rb +0 -47
  80. data/app/controllers/spree/admin/ticket_transfers_controller.rb +0 -61
  81. data/app/controllers/spree/api/v2/storefront/account/recipients_controller.rb +0 -32
  82. data/app/controllers/spree/api/v2/storefront/preview_products_controller.rb +0 -48
  83. data/app/controllers/spree/api/v2/storefront/preview_sections_controller.rb +0 -27
  84. data/app/controllers/spree/api/v2/storefront/preview_taxons_controller.rb +0 -18
  85. data/app/controllers/spree/api/v2/storefront/products_controller_decorator.rb +0 -15
  86. data/app/controllers/spree/api/v2/storefront/taxons_controller_decorator.rb +0 -15
  87. data/app/controllers/spree/api/v2/storefront/ticket_transfer_acceptances_controller.rb +0 -32
  88. data/app/controllers/spree/api/v2/storefront/ticket_transfers_controller.rb +0 -117
  89. data/app/controllers/spree/api/v2/tenant/advertisements_controller.rb +0 -24
  90. data/app/controllers/spree/api/v2/tenant/episodes_controller.rb +0 -38
  91. data/app/controllers/spree/api/v2/tenant/free_vote_claims_controller.rb +0 -37
  92. data/app/controllers/spree/api/v2/tenant/preview_products_controller.rb +0 -47
  93. data/app/controllers/spree/api/v2/tenant/preview_sections_controller.rb +0 -26
  94. data/app/controllers/spree/api/v2/tenant/preview_shows_controller.rb +0 -19
  95. data/app/controllers/spree/api/v2/tenant/preview_taxons_controller.rb +0 -19
  96. data/app/controllers/spree/api/v2/tenant/show_contestants_controller.rb +0 -52
  97. data/app/controllers/spree/api/v2/tenant/show_elimination_sessions_controller.rb +0 -57
  98. data/app/controllers/spree/api/v2/tenant/show_people_controller.rb +0 -49
  99. data/app/controllers/spree/api/v2/tenant/show_person_assignments_controller.rb +0 -36
  100. data/app/controllers/spree/api/v2/tenant/shows_controller.rb +0 -36
  101. data/app/controllers/spree/api/v2/tenant/votes_controller.rb +0 -94
  102. data/app/controllers/spree/api/v2/tenant/voting_contestants_controller.rb +0 -43
  103. data/app/controllers/spree/api/v2/tenant/voting_credit_transactions_controller.rb +0 -41
  104. data/app/controllers/spree/api/v2/tenant/voting_credits_controller.rb +0 -31
  105. data/app/helpers/spree_cm_commissioner/admin/ticket_transfers_helper.rb +0 -32
  106. data/app/jobs/spree_cm_commissioner/expire_ticket_transfer_job.rb +0 -10
  107. data/app/jobs/spree_cm_commissioner/show_contestants/import_job.rb +0 -9
  108. data/app/jobs/spree_cm_commissioner/vendor_route_metrics/decrease_trip_count_job.rb +0 -17
  109. data/app/jobs/spree_cm_commissioner/vendor_route_metrics/increase_trip_count_job.rb +0 -14
  110. data/app/jobs/spree_cm_commissioner/vote_fraud_event_job.rb +0 -9
  111. data/app/jobs/spree_cm_commissioner/voting_credit_allocation_job.rb +0 -10
  112. data/app/jobs/spree_cm_commissioner/voting_credit_de_allocation_job.rb +0 -10
  113. data/app/models/concerns/spree_cm_commissioner/ticket_transferable.rb +0 -15
  114. data/app/models/concerns/spree_cm_commissioner/voting_session_live_stream_concern.rb +0 -41
  115. data/app/models/spree_cm_commissioner/imports/import_contestant.rb +0 -7
  116. data/app/models/spree_cm_commissioner/maintenance_tasks/voting_session.rb +0 -36
  117. data/app/models/spree_cm_commissioner/preview_role.rb +0 -8
  118. data/app/models/spree_cm_commissioner/role_user_decorator.rb +0 -8
  119. data/app/models/spree_cm_commissioner/show.rb +0 -163
  120. data/app/models/spree_cm_commissioner/show_contestant.rb +0 -39
  121. data/app/models/spree_cm_commissioner/show_contestant_image.rb +0 -11
  122. data/app/models/spree_cm_commissioner/show_contestant_video.rb +0 -15
  123. data/app/models/spree_cm_commissioner/show_episode.rb +0 -108
  124. data/app/models/spree_cm_commissioner/show_person.rb +0 -15
  125. data/app/models/spree_cm_commissioner/show_person_assignment.rb +0 -21
  126. data/app/models/spree_cm_commissioner/show_person_image.rb +0 -11
  127. data/app/models/spree_cm_commissioner/ticket_transfer.rb +0 -191
  128. data/app/models/spree_cm_commissioner/ticket_transfer_rule.rb +0 -88
  129. data/app/models/spree_cm_commissioner/vendor_route_metric.rb +0 -25
  130. data/app/models/spree_cm_commissioner/vote.rb +0 -16
  131. data/app/models/spree_cm_commissioner/vote_fraud_event.rb +0 -20
  132. data/app/models/spree_cm_commissioner/voting_contestant.rb +0 -100
  133. data/app/models/spree_cm_commissioner/voting_credit.rb +0 -72
  134. data/app/models/spree_cm_commissioner/voting_credit_transaction.rb +0 -55
  135. data/app/models/spree_cm_commissioner/voting_session.rb +0 -216
  136. data/app/models/spree_cm_commissioner/voting_session_stat.rb +0 -8
  137. data/app/notifications/spree_cm_commissioner/ticket_transfer_accepted_notification.rb +0 -48
  138. data/app/notifications/spree_cm_commissioner/ticket_transfer_completed_notification.rb +0 -48
  139. data/app/notifications/spree_cm_commissioner/ticket_transfer_expired_notification.rb +0 -46
  140. data/app/notifications/spree_cm_commissioner/ticket_transfer_received_notification.rb +0 -48
  141. data/app/notifications/spree_cm_commissioner/ticket_transfer_rejected_notification.rb +0 -48
  142. data/app/overrides/spree/admin/products/_form/allow_gift_transfer.html.erb.deface +0 -9
  143. data/app/overrides/spree/admin/products/_form/allow_transfer.html.erb.deface +0 -9
  144. data/app/overrides/spree/admin/products/_form/preview_checkbox.html.erb.deface +0 -9
  145. data/app/overrides/spree/admin/shared/_order_tabs/ticket_transfers.html.erb.deface +0 -10
  146. data/app/overrides/spree/admin/shared/sub_menu/_product/ticket_transfers_tab.html.erb.deface +0 -3
  147. data/app/overrides/spree/admin/taxons/_form/preview_checkbox.html.erb.deface +0 -7
  148. data/app/queries/spree_cm_commissioner/recipient_searcher_query.rb +0 -14
  149. data/app/serializers/spree/v2/tenant/advertisement_serializer.rb +0 -11
  150. data/app/serializers/spree/v2/tenant/campaign_serializer.rb +0 -13
  151. data/app/serializers/spree/v2/tenant/show_contestant_serializer.rb +0 -21
  152. data/app/serializers/spree/v2/tenant/show_episode_serializer.rb +0 -20
  153. data/app/serializers/spree/v2/tenant/show_person_assignment_serializer.rb +0 -16
  154. data/app/serializers/spree/v2/tenant/show_person_serializer.rb +0 -13
  155. data/app/serializers/spree/v2/tenant/show_serializer.rb +0 -21
  156. data/app/serializers/spree/v2/tenant/video_serializer.rb +0 -9
  157. data/app/serializers/spree/v2/tenant/vote_package_serializer.rb +0 -9
  158. data/app/serializers/spree/v2/tenant/vote_serializer.rb +0 -14
  159. data/app/serializers/spree/v2/tenant/voting_contestant_serializer.rb +0 -23
  160. data/app/serializers/spree/v2/tenant/voting_credit_serializer.rb +0 -10
  161. data/app/serializers/spree/v2/tenant/voting_credit_transaction_serializer.rb +0 -14
  162. data/app/serializers/spree/v2/tenant/voting_session_serializer.rb +0 -21
  163. data/app/serializers/spree_cm_commissioner/v2/storefront/guest_minimal_serializer.rb +0 -30
  164. data/app/serializers/spree_cm_commissioner/v2/storefront/line_item_minimal_serializer.rb +0 -57
  165. data/app/serializers/spree_cm_commissioner/v2/storefront/recipient_serializer.rb +0 -13
  166. data/app/serializers/spree_cm_commissioner/v2/storefront/ticket_transfer_minimal_serializer.rb +0 -17
  167. data/app/serializers/spree_cm_commissioner/v2/storefront/ticket_transfer_serializer.rb +0 -20
  168. data/app/services/spree_cm_commissioner/advertisements/sorted_advertisements.rb +0 -61
  169. data/app/services/spree_cm_commissioner/advertisements/update_campaign_sorted_ads_ids.rb +0 -33
  170. data/app/services/spree_cm_commissioner/checkout/complete_decorator.rb +0 -22
  171. data/app/services/spree_cm_commissioner/fraud_check.rb +0 -299
  172. data/app/services/spree_cm_commissioner/imports/contestants/create.rb +0 -153
  173. data/app/services/spree_cm_commissioner/show_contestants/normalize_video_highlights.rb +0 -57
  174. data/app/services/spree_cm_commissioner/show_persons/contestant_assigner.rb +0 -51
  175. data/app/services/spree_cm_commissioner/ticket_transfers/accept.rb +0 -132
  176. data/app/services/spree_cm_commissioner/ticket_transfers/cancel.rb +0 -54
  177. data/app/services/spree_cm_commissioner/ticket_transfers/complete.rb +0 -68
  178. data/app/services/spree_cm_commissioner/ticket_transfers/eligibility_checker.rb +0 -99
  179. data/app/services/spree_cm_commissioner/ticket_transfers/expire.rb +0 -47
  180. data/app/services/spree_cm_commissioner/ticket_transfers/fee_calculator.rb +0 -57
  181. data/app/services/spree_cm_commissioner/ticket_transfers/initiate.rb +0 -98
  182. data/app/services/spree_cm_commissioner/ticket_transfers/preview_rule.rb +0 -38
  183. data/app/services/spree_cm_commissioner/ticket_transfers/reject.rb +0 -55
  184. data/app/services/spree_cm_commissioner/ticket_transfers/transfer_guest.rb +0 -29
  185. data/app/services/spree_cm_commissioner/url_embed/youtube_embed.rb +0 -44
  186. data/app/services/spree_cm_commissioner/vendor_route_metrics/decrease_trip_count.rb +0 -19
  187. data/app/services/spree_cm_commissioner/vendor_route_metrics/increase_trip_count.rb +0 -24
  188. data/app/services/spree_cm_commissioner/vote_counters/audit_counters.rb +0 -43
  189. data/app/services/spree_cm_commissioner/vote_counters/base.rb +0 -31
  190. data/app/services/spree_cm_commissioner/vote_counters/increment.rb +0 -44
  191. data/app/services/spree_cm_commissioner/vote_counters/per_contestant_counter.rb +0 -68
  192. data/app/services/spree_cm_commissioner/vote_counters/rebuild_from_db.rb +0 -70
  193. data/app/services/spree_cm_commissioner/vote_counters/snapshot_to_db.rb +0 -113
  194. data/app/services/spree_cm_commissioner/vote_credit_deductor.rb +0 -68
  195. data/app/services/spree_cm_commissioner/vote_package/create.rb +0 -145
  196. data/app/services/spree_cm_commissioner/vote_package/update.rb +0 -91
  197. data/app/services/spree_cm_commissioner/vote_processor.rb +0 -144
  198. data/app/services/spree_cm_commissioner/voting_contestants/advancer.rb +0 -335
  199. data/app/services/spree_cm_commissioner/voting_contestants/assigner.rb +0 -40
  200. data/app/services/spree_cm_commissioner/voting_contestants/bulk_updater.rb +0 -106
  201. data/app/services/spree_cm_commissioner/voting_credits/allocate.rb +0 -77
  202. data/app/services/spree_cm_commissioner/voting_credits/claim_free_votes.rb +0 -119
  203. data/app/services/spree_cm_commissioner/voting_credits/credit_calculator.rb +0 -35
  204. data/app/services/spree_cm_commissioner/voting_credits/de_allocate.rb +0 -87
  205. data/app/services/spree_cm_commissioner/voting_leaderboards/calculate_score.rb +0 -67
  206. data/app/services/spree_cm_commissioner/voting_leaderboards/combined_result.rb +0 -190
  207. data/app/services/spree_cm_commissioner/voting_sessions/finalize.rb +0 -106
  208. data/app/views/spree/admin/order_ticket_transfers/show.html.erb +0 -7
  209. data/app/views/spree/admin/shared/_ticket_transfer_details.html.erb +0 -226
  210. data/app/views/spree/admin/shared/_ticket_transfer_tabs.html.erb +0 -14
  211. data/app/views/spree/admin/ticket_transfer_rules/_form.html.erb +0 -193
  212. data/app/views/spree/admin/ticket_transfer_rules/edit.html.erb +0 -11
  213. data/app/views/spree/admin/ticket_transfer_rules/index.html.erb +0 -79
  214. data/app/views/spree/admin/ticket_transfer_rules/new.html.erb +0 -11
  215. data/app/views/spree/admin/ticket_transfers/_search_form.html.erb +0 -70
  216. data/app/views/spree/admin/ticket_transfers/_tabs.html.erb +0 -14
  217. data/app/views/spree/admin/ticket_transfers/index.html.erb +0 -74
  218. data/app/views/spree/admin/ticket_transfers/show.html.erb +0 -13
  219. data/app/views/spree/admin/ticket_transfers/state_changes.html.erb +0 -47
  220. data/db/migrate/20260303101440_add_allow_transfer_to_spree_products.rb +0 -5
  221. data/db/migrate/20260303101907_create_cm_ticket_transfers.rb +0 -32
  222. data/db/migrate/20260303102316_add_state_to_cm_guests.rb +0 -7
  223. data/db/migrate/20260309230148_create_cm_show_people.rb +0 -14
  224. data/db/migrate/20260309230149_create_cm_show_people_assignments.rb +0 -16
  225. data/db/migrate/20260310082711_create_cm_show_contestants.rb +0 -28
  226. data/db/migrate/20260310082720_create_cm_voting_sessions.rb +0 -21
  227. data/db/migrate/20260310082721_create_cm_voting_contestants.rb +0 -23
  228. data/db/migrate/20260310082734_add_voting_fields_to_spree_taxons.rb +0 -9
  229. data/db/migrate/20260310082735_add_type_to_spree_products.rb +0 -6
  230. data/db/migrate/20260310082749_create_cm_voting_credits.rb +0 -27
  231. data/db/migrate/20260326080200_create_cm_voting_credit_transactions.rb +0 -27
  232. data/db/migrate/20260330160000_create_cm_votes.rb +0 -25
  233. data/db/migrate/20260401072500_add_advanced_from_to_cm_voting_contestants.rb +0 -7
  234. data/db/migrate/20260402000001_add_voting_credit_scope_to_spree_taxons.rb +0 -6
  235. data/db/migrate/20260402000002_rename_scopeable_to_votable_in_cm_voting_credits.rb +0 -12
  236. data/db/migrate/20260403070000_add_name_to_cm_voting_sessions.rb +0 -5
  237. data/db/migrate/20260406000001_add_vendor_id_to_voting_tables.rb +0 -6
  238. data/db/migrate/20260406000001_rename_votes_remaining_to_amount_in_cm_voting_credits.rb +0 -11
  239. data/db/migrate/20260408085255_add_show_id_and_vendor_id_to_cm_voting_sessions.rb +0 -9
  240. data/db/migrate/20260408100000_create_cm_ticket_transfer_rules.rb +0 -28
  241. data/db/migrate/20260410120000_add_transfer_type_to_cm_ticket_transfers.rb +0 -5
  242. data/db/migrate/20260420000001_rename_type_to_credit_type_in_cm_voting_credits.rb +0 -25
  243. data/db/migrate/20260422000001_create_cm_vote_fraud_events.rb +0 -23
  244. data/db/migrate/20260422120000_add_settlement_status_to_cm_ticket_transfers.rb +0 -6
  245. data/db/migrate/20260423000001_add_preview_to_taxons_products_and_sections.rb +0 -11
  246. data/db/migrate/20260423000002_create_preview_roles.rb +0 -24
  247. data/db/migrate/20260507000000_add_index_to_cm_ticket_transfers_completed_at.rb +0 -5
  248. data/db/migrate/20260515120000_add_public_metadata_to_cm_voting_sessions.rb +0 -5
  249. data/db/migrate/20260518090920_add_unique_voter_count_to_voting_contestants.rb +0 -5
  250. data/db/migrate/20260518094322_create_cm_voting_session_stats.rb +0 -17
  251. data/db/migrate/20260520000000_add_number_to_cm_ticket_transfers.rb +0 -6
  252. data/db/migrate/20260520000001_add_scoring_model_to_cm_voting_sessions.rb +0 -5
  253. data/db/migrate/20260520000001_optimize_cm_votes_indexes.rb +0 -22
  254. data/db/migrate/20260525042257_add_vote_number_to_cm_voting_contestants.rb +0 -18
  255. data/db/migrate/20260527035430_add_confirmed_rank_to_cm_voting_contestants.rb +0 -5
  256. data/db/migrate/20260527062005_add_eliminated_at_to_cm_show_contestants.rb +0 -5
  257. data/db/migrate/20260603063652_add_parent_to_voting_sessions.rb +0 -9
  258. data/db/migrate/20260603090000_add_session_type_to_cm_voting_sessions.rb +0 -6
  259. data/db/migrate/20260605120908_add_description_to_cm_dynamic_fields.rb +0 -5
  260. data/db/migrate/20260608000000_add_allow_gift_transfer_to_spree_products.rb +0 -5
  261. data/db/migrate/20260608000000_add_display_to_cm_voting_sessions.rb +0 -5
  262. data/db/migrate/20260608000000_create_cm_vendor_route_metrics.rb +0 -25
  263. data/db/migrate/20260608152251_add_gender_to_cm_reserved_blocks.rb +0 -5
  264. data/docs/sql/jsonb_query_guide.md +0 -57
  265. data/lib/spree_cm_commissioner/test_helper/factories/show_episode_factory.rb +0 -12
  266. data/lib/spree_cm_commissioner/test_helper/factories/show_factory.rb +0 -120
  267. data/lib/spree_cm_commissioner/test_helper/factories/ticket_transfer_factory.rb +0 -18
  268. data/lib/spree_cm_commissioner/test_helper/factories/vendor_route_metric_factory.rb +0 -10
  269. data/lib/spree_cm_commissioner/test_helper/factories/vote_credit_factory.rb +0 -37
  270. data/lib/spree_cm_commissioner/test_helper/factories/vote_factory.rb +0 -28
  271. data/lib/spree_cm_commissioner/test_helper/factories/voting_credit_transaction_factory.rb +0 -11
  272. data/lib/spree_cm_commissioner/test_helper/factories/voting_session_factory.rb +0 -11
  273. data/lib/tasks/backfill_route_metrics.rake +0 -21
  274. data/lib/tasks/backfill_vendor_route_metrics.rake +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d301125d9cf803ac60cae2e7d479c356fd1e5ae5a08c23d90efb9b810ffd7851
4
- data.tar.gz: d4ba06e44669773b337bc3a899edbc7172e81e5a3d1be3f3979bd7c62c0bbf5c
3
+ metadata.gz: 0774f6d0c4fad7ae396f14326fd6d0965164b74d89f355c3966bc8d1fd9563f9
4
+ data.tar.gz: 002d84c9f1273b54f01d5a25bdecc5f3b475a12e07b32d8e1846c19107fe776f
5
5
  SHA512:
6
- metadata.gz: f9a79752c7c06baaefe87e3b4d0200f9dabb6c71ee5b47448b08e3449c84754571dfab78a312000e9cb07674ee03f05405cbe054a12f25ccc371bb24f7ed2312
7
- data.tar.gz: 4adc20d83e93b6b1be8c23dd590a023b07e90edc955b3c64c6cf2522b5bba2a0f432039bc55afeca4f16979c23d3dd7f4f7d40f23bd40ff1c9551f2ebf158cdd
6
+ metadata.gz: 260d54db1f9dd63dbfef02edf2944d02e2c582972b8903815462e438be9cbfb6f5561a7b4a4b64c2cda4af18908c8c7a91958213c06764d1f7ee4d8e2c16dec3
7
+ data.tar.gz: 003d6ecd547b0215851266f06e823f2f7c5e7a8da35f5b4a8051784855a4d095d088b79f700dcadca8820d561d7a9989a3ee0d9eb7940943c3c5777cc7a4742c
@@ -164,8 +164,7 @@ jobs:
164
164
  env:
165
165
  DATABASE_URL: postgres://myuser:mypassword@localhost:5432/test_db
166
166
  run: |
167
- # Using --no-threads to bypass a known Ruby 3.2.0 GC segmentation fault in CI.
168
- bundle exec brakeman --no-threads --no-exit-on-warn
167
+ bundle exec brakeman --no-exit-on-warn
169
168
 
170
169
  test:
171
170
  needs: [setup]
data/.gitignore CHANGED
@@ -34,9 +34,3 @@ vendor/bundle/
34
34
  # Cursor
35
35
  .cursor
36
36
  dump.rdb
37
- # Added by code-review-graph
38
- .code-review-graph/
39
- .cursorrules
40
- .claude
41
- CLAUDE.md
42
- AGENTS.md
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.8.3.pre.pre8)
37
+ spree_cm_commissioner (2.8.3)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -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)
@@ -55,7 +55,7 @@ module Spree
55
55
  if result.success?
56
56
  flash[:success] = "Guest #{@guest.full_name} has been checked in."
57
57
  else
58
- flash[:error] = result.error.value.to_s.titleize
58
+ flash[:error] = result.message.to_s.titleize
59
59
  end
60
60
 
61
61
  redirect_to collection_url
@@ -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
@@ -92,7 +92,7 @@ module Spree
92
92
  .call
93
93
  .index_by(&:inventory_item_id)
94
94
  @reserved_stocks = Spree::LineItem
95
- .affecting_inventory
95
+ .complete
96
96
  .where(variant_id: @variants.pluck(:id))
97
97
  .group('spree_line_items.variant_id')
98
98
  .sum(:quantity)
@@ -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
@@ -51,24 +50,6 @@ module Spree
51
50
  @taxon.build_home_banner(attachment: permitted_resource_params.delete(:home_banner)) if permitted_resource_params[:home_banner]
52
51
  @taxon.build_video_banner(attachment: permitted_resource_params.delete(:video_banner)) if permitted_resource_params[:video_banner]
53
52
  end
54
-
55
- # Some admin forms submit STI records under their class key
56
- # (e.g. :spree_cm_commissioner_show) while Spree update reads :taxon.
57
- # Merge both into :taxon so all edited fields are persisted.
58
- def normalize_sti_taxon_params
59
- return unless @taxon
60
-
61
- sti_key = @taxon.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[:taxon]
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[:taxon] = merged_params
71
- end
72
53
  end
73
54
  end
74
55
  end
@@ -19,7 +19,6 @@ module Spree
19
19
  @collection ||= model_class.filter_by_segment(params[:homepage_id] || :general)
20
20
  .active
21
21
  .where(tenant_id: nil)
22
- .where(preview: false)
23
22
  .order(position: :asc)
24
23
  end
25
24
  end
@@ -16,10 +16,6 @@ module Spree
16
16
  set_current_tenant(@tenant)
17
17
  end
18
18
 
19
- def current_vendor
20
- @current_vendor ||= @tenant.active_vendor
21
- end
22
-
23
19
  def render_serialized_payload(status = 200)
24
20
  render json: yield, status: status, content_type: content_type
25
21
  end
@@ -5,7 +5,6 @@ module Spree
5
5
  class HomepageSectionsController < BaseController
6
6
  def collection
7
7
  @collection ||= scope.filter_by_segment(params[:homepage_id] || :general)
8
- .where(preview: false)
9
8
  .active
10
9
  .order(position: :asc)
11
10
  end
@@ -21,7 +21,7 @@ module Spree
21
21
 
22
22
  def scope
23
23
  MultiTenant.with(@tenant) do
24
- model_class.where(tenant_id: MultiTenant.current_tenant_id, preview: false)
24
+ model_class.where(tenant_id: MultiTenant.current_tenant_id)
25
25
  end
26
26
  end
27
27
 
@@ -31,7 +31,7 @@ module Spree
31
31
 
32
32
  def scope
33
33
  MultiTenant.with(@tenant) do
34
- model_class.where(preview: false)
34
+ model_class
35
35
  end
36
36
  end
37
37
 
@@ -25,17 +25,6 @@ module Spree
25
25
  def resource_serializer
26
26
  Spree::V2::Tenant::TripSerializer
27
27
  end
28
-
29
- # override
30
- def serializer_params
31
- super.merge(
32
- include_details: include_details?
33
- )
34
- end
35
-
36
- def include_details?
37
- params.fetch(:include_details, 'true') == 'true'
38
- end
39
28
  end
40
29
  end
41
30
  end
@@ -40,13 +40,9 @@ module SpreeCmCommissioner
40
40
 
41
41
  # override
42
42
  def cancel
43
- if @order.guests_in_transfer?
44
- flash[:error] = Spree.t('admin.orders.cannot_cancel_guest_transfer')
45
- else
46
- internal_note = params.dig(:order, :internal_note)
47
- @order.canceled_by(try_spree_current_user, cancellation_reason: internal_note)
48
- flash[:success] = Spree.t(:order_canceled)
49
- end
43
+ internal_note = params.dig(:order, :internal_note)
44
+ @order.canceled_by(try_spree_current_user, cancellation_reason: internal_note)
45
+ flash[:success] = Spree.t(:order_canceled)
50
46
  redirect_back fallback_location: spree.edit_admin_order_url(@order)
51
47
  end
52
48
 
@@ -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
 
@@ -7,7 +7,6 @@ module SpreeCmCommissioner
7
7
  def execute
8
8
  scope.joins(:integration_mappings).where(
9
9
  kind: :event,
10
- preview: false,
11
10
  integration_mappings: { status: :active }
12
11
  ).distinct
13
12
  end
@@ -61,16 +61,6 @@ module SpreeCmCommissioner
61
61
  'badge-info'
62
62
  end
63
63
  end
64
-
65
- def guest_state_badge(guest)
66
- badge_class = case guest.state
67
- when 'active' then 'badge-success'
68
- when 'locked' then 'badge-warning'
69
- when 'transferred' then 'badge-secondary'
70
- else 'badge-info'
71
- end
72
- content_tag(:span, guest.state.humanize, class: "badge #{badge_class}")
73
- end
74
64
  end
75
65
  end
76
66
  end
@@ -15,8 +15,6 @@ module SpreeCmCommissioner
15
15
  'badge badge-success text-uppercase'
16
16
  when :football
17
17
  'badge badge-dark text-uppercase'
18
- when :show
19
- 'badge badge-danger text-uppercase'
20
18
  else
21
19
  'badge'
22
20
  end
@@ -8,8 +8,7 @@ module SpreeCmCommissioner
8
8
  tour: 0b00100,
9
9
  accommodation: 0b01000,
10
10
  things_to_do: 0b10000,
11
- football: 0b100000,
12
- show: 0b1000000
11
+ football: 0b100000
13
12
  }.freeze
14
13
 
15
14
  BIT_SEGMENT.each do |segment, bit_value|
@@ -10,11 +10,6 @@ module SpreeCmCommissioner
10
10
  scope :accepted, -> { joins(:order).merge(Spree::Order.accepted) }
11
11
  scope :paid, -> { joins(:order).merge(Spree::Order.paid) }
12
12
  scope :with_bib_prefix, -> { joins(:option_types).where(option_types: { name: 'bib-prefix' }) }
13
- scope :exclude_ticket_transfer_orders, -> { joins(:order).merge(Spree::Order.not_ticket_transfer) }
14
-
15
- # Centralizes the rule so that adjustments (e.g. excluding new order kinds in the
16
- # future) only need to be made here. Use this anywhere inventory is computed.
17
- scope :affecting_inventory, -> { complete.exclude_ticket_transfer_orders }
18
13
 
19
14
  scope :filter_by_event, lambda { |event|
20
15
  case event
@@ -45,8 +45,7 @@ module SpreeCmCommissioner
45
45
  'color' => 'color',
46
46
  'ticket-type' => 'string',
47
47
  'seat-type' => 'string',
48
- 'intercity-taxi' => 'string',
49
- 'vote-package' => 'integer'
48
+ 'intercity-taxi' => 'string'
50
49
  }.freeze
51
50
 
52
51
  included do
@@ -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
 
34
32
  scope :accepted, -> { where(request_state: 'accepted') }
35
33
 
@@ -330,13 +328,5 @@ module SpreeCmCommissioner
330
328
  factory = OrderTelegramMessageFactory.new(title: title, order: self)
331
329
  TelegramNotificationSenderJob.perform_later(chat_id: chat_id, message: factory.message, parse_mode: factory.parse_mode)
332
330
  end
333
-
334
- def allocate_resources
335
- SpreeCmCommissioner::VotingCreditAllocationJob.perform_later(order_id: id)
336
- end
337
-
338
- def de_allocate_resources
339
- SpreeCmCommissioner::VotingCreditDeAllocationJob.perform_later(order_id: id)
340
- end
341
331
  end
342
332
  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 show_episode vote_package advertisement].freeze
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
@@ -12,7 +12,6 @@ module SpreeCmCommissioner
12
12
  enum gender: { :other => 0, :male => 1, :female => 2 }
13
13
  enum age_group: { :adult => 0, :child => 1 }
14
14
  enum nationality_group: { :local => 0, :foreigner => 1 }
15
- enum state: { active: 0, locked: 1, transferred: 2 }
16
15
  enum social_contact_platform: {
17
16
  :other => 0,
18
17
  :telegram => 1,
@@ -47,7 +46,6 @@ module SpreeCmCommissioner
47
46
  has_many :state_changes, as: :stateful, class_name: 'Spree::StateChange'
48
47
  has_many :guest_dynamic_fields, dependent: :destroy, class_name: 'SpreeCmCommissioner::GuestDynamicField'
49
48
  has_many :check_ins, class_name: 'SpreeCmCommissioner::CheckIn'
50
- has_many :ticket_transfers, foreign_key: 'from_guest_id', class_name: 'SpreeCmCommissioner::TicketTransfer'
51
49
 
52
50
  accepts_nested_attributes_for :guest_dynamic_fields, allow_destroy: true, reject_if: :reject_guest_dynamic_field?
53
51
 
@@ -192,10 +190,6 @@ module SpreeCmCommissioner
192
190
  [first_name, last_name].compact_blank.join(' ')
193
191
  end
194
192
 
195
- def display_name_with_bib
196
- [full_name, formatted_bib_number, seat_number].compact.join(' | ')
197
- end
198
-
199
193
  def generate_svg_qr
200
194
  qrcode = RQRCode::QRCode.new(qr_data)
201
195
  qrcode.as_svg(
@@ -515,20 +509,6 @@ module SpreeCmCommissioner
515
509
  saved_change_to_data_fill_stage_phase? ||
516
510
  (guest_dynamic_fields.any? && (guest_dynamic_fields.any?(&:saved_changes?) || guest_dynamic_fields.any?(&:destroyed?)))
517
511
  end
518
-
519
- # Ticket Transfer validations
520
- def allows_transfer?
521
- line_item&.product&.allow_transfer?
522
- end
523
-
524
- def allows_gift_transfer?
525
- line_item&.product&.allow_gift_transfer?
526
- end
527
-
528
- def event_started?
529
- event_from_date = event&.from_date
530
- event_from_date.present? && event_from_date <= Time.current
531
- end
532
512
  end
533
513
  end
534
514
  # rubocop:enable Metrics/ClassLength
@@ -3,7 +3,7 @@ module SpreeCmCommissioner
3
3
  extend FriendlyId
4
4
 
5
5
  enum :status, { :queue => 0, :progress => 1, :done => 2, :failed => 3 }
6
- enum :import_type, { :new_order => 0, :existing_order => 1, :aba_payment_reference => 2, :contestant_import => 3 }
6
+ enum :import_type, { :new_order => 0, :existing_order => 1, :aba_payment_reference => 2 }
7
7
  has_one_attached :imported_file
8
8
  friendly_id :name, use: :slugged
9
9
 
@@ -119,9 +119,6 @@ module SpreeCmCommissioner
119
119
 
120
120
  # override to calculate price per date for permanent stock
121
121
  def update_price
122
- # Skip price updates for ticket transfer orders to preserve custom transfer pricing
123
- return if order&.ticket_transfer?
124
-
125
122
  base_price = variant.price_in(order.currency)
126
123
  self.price = if permanent_stock?
127
124
  date_range.map do |date|
@@ -259,11 +256,7 @@ module SpreeCmCommissioner
259
256
  end
260
257
 
261
258
  # override
262
- # Ticket transfer line items reuse the seller's already-committed inventory,
263
- # so stock checks must not block the receiver's checkout when the event is sold out.
264
259
  def sufficient_stock?
265
- return true if order&.ticket_transfer?
266
-
267
260
  SpreeCmCommissioner::Stock::LineItemAvailabilityChecker.new(self).can_supply?(quantity)
268
261
  end
269
262
 
@@ -10,16 +10,7 @@ module SpreeCmCommissioner
10
10
 
11
11
  scope :user_notifications, lambda {
12
12
  where(
13
- type: %w[
14
- order_complete_notification
15
- customer_notification
16
- guest_dynamic_field_notification
17
- ticket_transfer_received_notification
18
- ticket_transfer_accepted_notification
19
- ticket_transfer_completed_notification
20
- ticket_transfer_rejected_notification
21
- ticket_transfer_expired_notification
22
- ]
13
+ type: %w[order_complete_notification customer_notification guest_dynamic_field_notification]
23
14
  )
24
15
  }
25
16
 
@@ -1,11 +1,5 @@
1
1
  module SpreeCmCommissioner
2
2
  module OrderDecorator
3
- SPREE_CHANNEL = 'spree'.freeze
4
- GOOGLE_FORM_CHANNEL = 'google_form'.freeze
5
- TELEGRAM_CHANNEL = 'telegram'.freeze
6
- TICKET_TRANSFER_CHANNEL = 'ticket_transfer'.freeze
7
- ALLOWED_CHANNEL_PREFIXES = [SPREE_CHANNEL, GOOGLE_FORM_CHANNEL, TELEGRAM_CHANNEL, TICKET_TRANSFER_CHANNEL].freeze
8
-
9
3
  def self.prepended(base) # rubocop:disable Metrics/MethodLength
10
4
  base.include SpreeCmCommissioner::StoreMetadata
11
5
  base.include SpreeCmCommissioner::PhoneNumberSanitizer
@@ -14,7 +8,6 @@ module SpreeCmCommissioner
14
8
  base.include SpreeCmCommissioner::OrderStateMachine
15
9
  base.include SpreeCmCommissioner::RouteOrderCountable
16
10
  base.include SpreeCmCommissioner::OrderScopes
17
- base.include SpreeCmCommissioner::TicketTransferable
18
11
 
19
12
  base.before_create :link_by_phone_number
20
13
  base.before_create :associate_customer
@@ -241,10 +234,6 @@ module SpreeCmCommissioner
241
234
  complete? && need_confirmation? == false
242
235
  end
243
236
 
244
- def guests_in_transfer?
245
- guests.exists?(state: %i[locked transferred])
246
- end
247
-
248
237
  def generate_svg_qr
249
238
  qrcode = RQRCode::QRCode.new(qr_data)
250
239
  qrcode.as_svg(
@@ -355,9 +344,10 @@ module SpreeCmCommissioner
355
344
  end
356
345
 
357
346
  def validate_channel_prefix
358
- return if ALLOWED_CHANNEL_PREFIXES.any? { |prefix| channel&.start_with?(prefix) }
347
+ allowed_prefixes = %w[spree google_form telegram]
348
+ return if allowed_prefixes.any? { |prefix| channel&.start_with?(prefix) }
359
349
 
360
- errors.add(:channel, "must start with one of the following: #{ALLOWED_CHANNEL_PREFIXES.join(', ')}")
350
+ errors.add(:channel, "must start with one of the following: #{allowed_prefixes.join(', ')}")
361
351
  end
362
352
 
363
353
  def set_tenant_id
@@ -32,14 +32,6 @@ module SpreeCmCommissioner
32
32
  payment_method.is_a?(Spree::PaymentMethod::Check)
33
33
  end
34
34
 
35
- # @override Spree::Payment#after_completed
36
- # Called inside the state machine transition to :completed (within the transaction),
37
- # ensuring Complete is atomic with the payment completion.
38
- def after_completed
39
- super
40
- complete_ticket_transfer if ticket_transfer_completable?
41
- end
42
-
43
35
  def can_void?
44
36
  state.in? %i[pending processing completed checkout]
45
37
  end
@@ -55,17 +47,6 @@ module SpreeCmCommissioner
55
47
  def lock_holds_for_payment
56
48
  order.lock_order_holds_for_payment
57
49
  end
58
-
59
- def ticket_transfer_completable?
60
- completed? && order.ticket_transfer? && order.complete? && order.payment_fulfilled?
61
- end
62
-
63
- def complete_ticket_transfer
64
- ticket_transfer = order.ticket_transfer
65
- return if ticket_transfer.blank? || !ticket_transfer.accepted?
66
-
67
- SpreeCmCommissioner::TicketTransfers::Complete.call(ticket_transfer: ticket_transfer)
68
- end
69
50
  end
70
51
  end
71
52
 
@@ -5,14 +5,6 @@ module SpreeCmCommissioner
5
5
  def self.prepended(base)
6
6
  base.const_set(:DISPLAY, DISPLAY)
7
7
 
8
- # Expose a dedicated class helper so services can call Spree::PaymentMethod.ticket_transfer
9
- # instead of duplicating lookup/creation logic.
10
- base.define_singleton_method(:ticket_transfer) do
11
- Spree::PaymentMethod::Check.available_on_back_end.find_or_create_by!(name: 'Ticket Transfer') do |method|
12
- method.stores = [Spree::Store.default]
13
- end
14
- end
15
-
16
8
  base.scope :available_on_frontend_for_early_adopter, -> { active.where(display_on: %i[both front_end frontend_for_early_adopter]) }
17
9
 
18
10
  # override
@@ -14,8 +14,6 @@ module SpreeCmCommissioner
14
14
 
15
15
  base.delegate :is_open_dated, :is_open_dated?, to: :trip, allow_nil: true
16
16
 
17
- base.has_many :voting_sessions, class_name: 'SpreeCmCommissioner::VotingSession', foreign_key: :episode_id, dependent: :destroy
18
-
19
17
  base.has_many :variant_kind_option_types, -> { where(kind: :variant).order(:position) },
20
18
  through: :product_option_types, source: :option_type
21
19
 
@@ -57,45 +55,8 @@ module SpreeCmCommissioner
57
55
 
58
56
  base.belongs_to :event, class_name: 'Spree::Taxon', optional: true
59
57
 
60
- base.has_many :preview_roles, class_name: 'SpreeCmCommissioner::PreviewRole', as: :previewable
61
58
  base.has_many :industry_classifications, -> { joins(:taxon).where(spree_taxons: { kind: :industry }) }, class_name: 'Spree::Classification'
62
59
  base.has_many :industry_taxons, through: :industry_classifications, source: :taxon
63
- base.scope :visible_to, lambda { |user|
64
- publicly_available = where(status: :active, preview: false)
65
-
66
- if user
67
- # Resolved through associations — avoids hardcoding class names.
68
- taxon_type = reflect_on_association(:taxons).klass.polymorphic_name
69
-
70
- # IDs of products that have been explicitly assigned their own PreviewRole.
71
- products_with_own_roles = SpreeCmCommissioner::PreviewRole
72
- .where(previewable_type: polymorphic_name)
73
- .select(:previewable_id)
74
-
75
- # Path A: product has its own PreviewRole → user must hold that role directly.
76
- # Taxon membership is irrelevant for these products.
77
- via_product_role = where(status: :active, preview: true)
78
- .where(id: products_with_own_roles)
79
- .where(id: user.preview_roles.where(previewable_type: polymorphic_name).select(:previewable_id))
80
-
81
- # Path B: product has no own PreviewRole → inherit access from its event or taxons.
82
- # Accessible if the user holds a preview role for the product's event_id or any
83
- # taxon the product belongs to via the classifications join table.
84
- allowed_taxon_ids = user.preview_roles.where(previewable_type: taxon_type).select(:previewable_id)
85
- preview_no_own = where(status: :active, preview: true).where.not(id: products_with_own_roles)
86
-
87
- via_event_id = preview_no_own.where(event_id: allowed_taxon_ids)
88
- via_taxon_join = preview_no_own.joins(:taxons).where(spree_taxons: { id: allowed_taxon_ids })
89
-
90
- publicly_available
91
- .or(via_product_role)
92
- .or(where(id: via_event_id.select(:id)))
93
- .or(where(id: via_taxon_join.select(:id)))
94
- else
95
- publicly_available
96
- end
97
- }
98
-
99
60
  base.scope :min_price, lambda { |vendor|
100
61
  joins(:prices_including_master)
101
62
  .where(vendor_id: vendor.id, product_type: vendor.primary_product_type)
@@ -108,12 +69,6 @@ module SpreeCmCommissioner
108
69
  .maximum('spree_prices.price').to_f
109
70
  }
110
71
  base.scope :subscribable, -> { where(subscribable: 1) }
111
- base.scope :advertisements, lambda {
112
- advertisement
113
- .available
114
- .where('spree_products.available_on IS NULL OR spree_products.available_on <= CURRENT_TIMESTAMP')
115
- .where('spree_products.discontinue_on IS NULL OR spree_products.discontinue_on > CURRENT_TIMESTAMP')
116
- }
117
72
 
118
73
  base.before_validation :set_event_id
119
74
 
@@ -127,11 +82,6 @@ module SpreeCmCommissioner
127
82
  base.store_public_metadata :open_dated_validity_days, :integer, default: 90
128
83
  base.store_public_metadata :enable_inventory_hold, :boolean, default: false
129
84
 
130
- base.store_private_metadata :advertise_weight, :integer, default: 1
131
- base.store_private_metadata :video_url, :string
132
- base.store_private_metadata :skip_after_seconds, :integer, default: 5
133
- base.store_private_metadata :duration_seconds, :integer, default: 30
134
-
135
85
  base.after_update :update_variants_vendor_id, if: :saved_change_to_vendor_id?
136
86
  base.after_update :sync_event_id_to_children, if: :saved_change_to_event_id?
137
87
 
@@ -13,8 +13,6 @@ module SpreeCmCommissioner
13
13
  canceled: 2
14
14
  }
15
15
 
16
- enum gender: { :other => 0, :male => 1, :female => 2 }
17
-
18
16
  validates :status, presence: true
19
17
  validates :expired_at, presence: true, if: -> { on_hold? }
20
18