spree_cm_commissioner 2.15.2 → 2.15.4

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +3 -0
  3. data/Gemfile.lock +2 -2
  4. data/app/controllers/spree/admin/inventory_holds_controller.rb +32 -6
  5. data/app/errors/spree_cm_commissioner/integrations/rate_limited_error.rb +28 -0
  6. data/app/jobs/spree_cm_commissioner/integrations/book_me_bus_v1/sync_route_job.rb +70 -0
  7. data/app/models/spree_cm_commissioner/block.rb +16 -0
  8. data/app/models/spree_cm_commissioner/integration_mapping.rb +8 -0
  9. data/app/models/spree_cm_commissioner/integrations/book_me_bus_v1.rb +5 -0
  10. data/app/models/spree_cm_commissioner/reserved_block.rb +19 -3
  11. data/app/queries/spree_cm_commissioner/inventory_hold_insights_query.rb +151 -0
  12. data/app/queries/spree_cm_commissioner/inventory_hold_overview_query.rb +79 -0
  13. data/app/services/spree_cm_commissioner/integrations/base/sync_result.rb +7 -0
  14. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/external_client/client.rb +24 -7
  15. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/external_client/connection.rb +19 -13
  16. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_item_availability.rb +12 -6
  17. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_locations.rb +10 -3
  18. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_routes.rb +11 -2
  19. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_seat_layout.rb +8 -59
  20. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_trips.rb +55 -35
  21. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/resources/trip.rb +0 -4
  22. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/route_freshness.rb +48 -0
  23. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/seat_layout_freshness.rb +46 -0
  24. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/sync_manager.rb +5 -6
  25. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/sync_strategies/full_sync_strategy.rb +32 -15
  26. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/sync_strategies/incremental_sync_strategy.rb +43 -40
  27. data/app/services/spree_cm_commissioner/integrations/call_limiter.rb +89 -0
  28. data/app/services/spree_cm_commissioner/integrations/polling_scheduler.rb +13 -7
  29. data/app/services/spree_cm_commissioner/integrations/sync_backoff.rb +61 -0
  30. data/app/services/spree_cm_commissioner/seats/apply_locks.rb +13 -7
  31. data/app/services/spree_cm_commissioner/seats/block_history.rb +168 -0
  32. data/app/services/spree_cm_commissioner/seats/lock_state.rb +3 -1
  33. data/app/services/spree_cm_commissioner/seats/swap_seats.rb +265 -0
  34. data/app/services/spree_cm_commissioner/seats/unlock_blocks.rb +11 -12
  35. data/app/services/spree_cm_commissioner/voting_credits/de_allocate.rb +11 -0
  36. data/app/views/spree/admin/inventory_holds/_insights.html.erb +99 -0
  37. data/app/views/spree/admin/inventory_holds/_insights_drawer.html.erb +83 -0
  38. data/app/views/spree/admin/inventory_holds/_order_status.html.erb +9 -0
  39. data/app/views/spree/admin/inventory_holds/_overview.html.erb +109 -0
  40. data/app/views/spree/admin/inventory_holds/_section.html.erb +5 -0
  41. data/app/views/spree/admin/inventory_holds/_stat.html.erb +4 -0
  42. data/app/views/spree/admin/inventory_holds/index.html.erb +12 -1
  43. data/config/routes.rb +4 -0
  44. data/lib/spree_cm_commissioner/version.rb +1 -1
  45. metadata +18 -2
@@ -12,6 +12,11 @@
12
12
  Inventory Holds
13
13
  <% end %>
14
14
 
15
+ <% content_for :page_actions do %>
16
+ <button type="button" class="btn btn-outline-primary js-hold-insights" data-title="Overall insights"
17
+ data-url="<%= overview_admin_inventory_holds_path(q: params.fetch(:q, {}).to_unsafe_h) %>">Overall insights</button>
18
+ <% end %>
19
+
15
20
  <%= render 'search' if @holds.any? || params[:q].present? %>
16
21
 
17
22
  <% current_status = params.dig(:q, :status_eq).presence %>
@@ -36,9 +41,10 @@
36
41
  <tr>
37
42
  <th><%= sort_link @search, :id, 'ID' %></th>
38
43
  <th>Order</th>
44
+ <th>Order Status</th>
39
45
  <th>Customer</th>
40
46
  <th>Vendor(s)</th>
41
- <th>Status</th>
47
+ <th>Hold Status</th>
42
48
  <th>Qty On Hold</th>
43
49
  <th>Release Reason</th>
44
50
  <th><%= sort_link @search, :expires_at, 'Expires At' %></th>
@@ -63,6 +69,7 @@
63
69
  <span class="text-muted">—</span>
64
70
  <% end %>
65
71
  </td>
72
+ <td class="no-wrap"><%= render 'order_status', state: hold.order&.state, payment_state: hold.order&.payment_state %></td>
66
73
  <td class="no-wrap">
67
74
  <% if hold.order&.user %>
68
75
  <%= link_to hold.order.user.email, admin_user_path(hold.order.user) %>
@@ -93,6 +100,8 @@
93
100
  <td class="no-wrap"><%= order_time(hold.created_at) %></td>
94
101
  <td class="actions">
95
102
  <span class="d-flex justify-content-end">
103
+ <button type="button" class="btn btn-sm btn-outline-primary mr-1 js-hold-insights"
104
+ data-title="Hold #<%= hold.id %>" data-url="<%= insights_admin_inventory_hold_path(hold) %>">Insights</button>
96
105
  <% unless hold.finalized? %>
97
106
  <%= link_to 'Release',
98
107
  release_admin_inventory_hold_path(hold, back_params: params.permit(:page, :per_page, q: {}).to_h),
@@ -125,3 +134,5 @@
125
134
  <% end %>
126
135
 
127
136
  <%= render 'spree/admin/shared/index_table_options', collection: @holds, simple: true if @holds.any? %>
137
+
138
+ <%= render 'insights_drawer' %>
data/config/routes.rb CHANGED
@@ -206,8 +206,12 @@ Spree::Core::Engine.add_routes do
206
206
  end
207
207
 
208
208
  resources :inventory_holds, only: [:index] do
209
+ collection do
210
+ get :overview
211
+ end
209
212
  member do
210
213
  post :release
214
+ get :insights
211
215
  end
212
216
  end
213
217
 
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.15.2'.freeze
2
+ VERSION = '2.15.4'.freeze
3
3
 
4
4
  module_function
5
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.15.2
4
+ version: 2.15.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-11-11 00:00:00.000000000 Z
11
+ date: 2026-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -1171,6 +1171,7 @@ files:
1171
1171
  - app/errors/spree_cm_commissioner/connection_error.rb
1172
1172
  - app/errors/spree_cm_commissioner/exceeding_range_error.rb
1173
1173
  - app/errors/spree_cm_commissioner/integrations/external_client_error.rb
1174
+ - app/errors/spree_cm_commissioner/integrations/rate_limited_error.rb
1174
1175
  - app/errors/spree_cm_commissioner/integrations/sync_error.rb
1175
1176
  - app/errors/spree_cm_commissioner/payment_creation_error.rb
1176
1177
  - app/errors/spree_cm_commissioner/payment_source_missing_error.rb
@@ -1389,6 +1390,7 @@ files:
1389
1390
  - app/jobs/spree_cm_commissioner/idempotency_keys/prune_job.rb
1390
1391
  - app/jobs/spree_cm_commissioner/import_order_job.rb
1391
1392
  - app/jobs/spree_cm_commissioner/integrations/base_job.rb
1393
+ - app/jobs/spree_cm_commissioner/integrations/book_me_bus_v1/sync_route_job.rb
1392
1394
  - app/jobs/spree_cm_commissioner/integrations/cleanup_sync_sessions_job.rb
1393
1395
  - app/jobs/spree_cm_commissioner/integrations/polling_job.rb
1394
1396
  - app/jobs/spree_cm_commissioner/integrations/polling_scheduler_job.rb
@@ -2077,6 +2079,8 @@ files:
2077
2079
  - app/queries/spree_cm_commissioner/event_chart_queries.rb
2078
2080
  - app/queries/spree_cm_commissioner/event_ticket_aggregator_query.rb
2079
2081
  - app/queries/spree_cm_commissioner/guest_searcher_query.rb
2082
+ - app/queries/spree_cm_commissioner/inventory_hold_insights_query.rb
2083
+ - app/queries/spree_cm_commissioner/inventory_hold_overview_query.rb
2080
2084
  - app/queries/spree_cm_commissioner/line_item_searcher_query.rb
2081
2085
  - app/queries/spree_cm_commissioner/multi_leg_trips_query.rb
2082
2086
  - app/queries/spree_cm_commissioner/organizer_profile_event_query.rb
@@ -2439,9 +2443,12 @@ files:
2439
2443
  - app/services/spree_cm_commissioner/integrations/book_me_bus_v1/resources/trip.rb
2440
2444
  - app/services/spree_cm_commissioner/integrations/book_me_bus_v1/resources/trip_location.rb
2441
2445
  - app/services/spree_cm_commissioner/integrations/book_me_bus_v1/resources/wallet_payment.rb
2446
+ - app/services/spree_cm_commissioner/integrations/book_me_bus_v1/route_freshness.rb
2447
+ - app/services/spree_cm_commissioner/integrations/book_me_bus_v1/seat_layout_freshness.rb
2442
2448
  - app/services/spree_cm_commissioner/integrations/book_me_bus_v1/sync_manager.rb
2443
2449
  - app/services/spree_cm_commissioner/integrations/book_me_bus_v1/sync_strategies/full_sync_strategy.rb
2444
2450
  - app/services/spree_cm_commissioner/integrations/book_me_bus_v1/sync_strategies/incremental_sync_strategy.rb
2451
+ - app/services/spree_cm_commissioner/integrations/call_limiter.rb
2445
2452
  - app/services/spree_cm_commissioner/integrations/cleanup_sync_sessions.rb
2446
2453
  - app/services/spree_cm_commissioner/integrations/larryta/external_client/client.rb
2447
2454
  - app/services/spree_cm_commissioner/integrations/larryta/external_client/connection.rb
@@ -2507,6 +2514,7 @@ files:
2507
2514
  - app/services/spree_cm_commissioner/integrations/switch_cm/xml/push_response.rb
2508
2515
  - app/services/spree_cm_commissioner/integrations/switch_cm/xml/reservation_serializer.rb
2509
2516
  - app/services/spree_cm_commissioner/integrations/switch_cm/xml/response_builder.rb
2517
+ - app/services/spree_cm_commissioner/integrations/sync_backoff.rb
2510
2518
  - app/services/spree_cm_commissioner/integrations/vireak_buntham/external_client/client.rb
2511
2519
  - app/services/spree_cm_commissioner/integrations/vireak_buntham/external_client/connection.rb
2512
2520
  - app/services/spree_cm_commissioner/integrations/vireak_buntham/inventory/external_inventory_item_status.rb
@@ -2679,11 +2687,13 @@ files:
2679
2687
  - app/services/spree_cm_commissioner/seats/apply_locks.rb
2680
2688
  - app/services/spree_cm_commissioner/seats/auto_assign.rb
2681
2689
  - app/services/spree_cm_commissioner/seats/block_date_iteration.rb
2690
+ - app/services/spree_cm_commissioner/seats/block_history.rb
2682
2691
  - app/services/spree_cm_commissioner/seats/bulk_release_on_hold_blocks.rb
2683
2692
  - app/services/spree_cm_commissioner/seats/lock_blocks.rb
2684
2693
  - app/services/spree_cm_commissioner/seats/lock_state.rb
2685
2694
  - app/services/spree_cm_commissioner/seats/pick_seats.rb
2686
2695
  - app/services/spree_cm_commissioner/seats/release_expired_blocks.rb
2696
+ - app/services/spree_cm_commissioner/seats/swap_seats.rb
2687
2697
  - app/services/spree_cm_commissioner/seats/unlock_blocks.rb
2688
2698
  - app/services/spree_cm_commissioner/seeds/roles_decorator.rb
2689
2699
  - app/services/spree_cm_commissioner/seeds/user_usernames.rb
@@ -2901,7 +2911,13 @@ files:
2901
2911
  - app/views/spree/admin/integrations/edit.html.erb
2902
2912
  - app/views/spree/admin/integrations/index.html.erb
2903
2913
  - app/views/spree/admin/integrations/new.html.erb
2914
+ - app/views/spree/admin/inventory_holds/_insights.html.erb
2915
+ - app/views/spree/admin/inventory_holds/_insights_drawer.html.erb
2916
+ - app/views/spree/admin/inventory_holds/_order_status.html.erb
2917
+ - app/views/spree/admin/inventory_holds/_overview.html.erb
2904
2918
  - app/views/spree/admin/inventory_holds/_search.html.erb
2919
+ - app/views/spree/admin/inventory_holds/_section.html.erb
2920
+ - app/views/spree/admin/inventory_holds/_stat.html.erb
2905
2921
  - app/views/spree/admin/inventory_holds/index.html.erb
2906
2922
  - app/views/spree/admin/inventory_items/_details.html.erb
2907
2923
  - app/views/spree/admin/inventory_lock_movements/index.html.erb