spree_cm_commissioner 2.14.2 → 2.14.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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +4 -6
  3. data/Gemfile.lock +1 -1
  4. data/app/controllers/concerns/spree_cm_commissioner/content_cachable.rb +76 -70
  5. data/app/controllers/spree/admin/api_caches_controller.rb +26 -0
  6. data/app/controllers/spree/admin/base_controller_decorator.rb +0 -14
  7. data/app/controllers/spree/admin/guests_controller.rb +43 -4
  8. data/app/factory/spree_cm_commissioner/order_telegram_message_factory.rb +26 -5
  9. data/app/jobs/spree_cm_commissioner/audit_events/cleanup_expired_job.rb +18 -0
  10. data/app/models/concerns/spree_cm_commissioner/vendor_preference.rb +1 -1
  11. data/app/models/spree_cm_commissioner/audit_event.rb +5 -0
  12. data/app/overrides/spree/admin/menus/index/clear_cache_button.html.erb.deface +4 -0
  13. data/app/overrides/spree/admin/payment_methods/index/clear_cache_button.html.erb.deface +6 -0
  14. data/app/overrides/spree/admin/products/edit/clear_cache_button.html.erb.deface +1 -1
  15. data/app/overrides/spree/admin/taxons/edit/clear_cache_button.html.erb.deface +1 -4
  16. data/app/overrides/spree/admin/vendors/edit/clear_cache_button.html.erb.deface +5 -0
  17. data/app/serializers/spree/api/v2/base_serializer_decorator.rb +24 -0
  18. data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +39 -87
  19. data/app/services/spree_cm_commissioner/api_caches/invalidate_all.rb +61 -0
  20. data/app/services/spree_cm_commissioner/audit_events/cleanup_expired.rb +58 -0
  21. data/app/services/spree_cm_commissioner/audit_logger.rb +1 -1
  22. data/app/services/spree_cm_commissioner/guests/build_dynamic_field_attributes.rb +34 -0
  23. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_seat_layout.rb +45 -128
  24. data/app/services/spree_cm_commissioner/integrations/book_me_bus_v1/resources/seat_layout.rb +36 -148
  25. data/app/services/spree_cm_commissioner/inventory_items/reset.rb +103 -35
  26. data/app/services/spree_cm_commissioner/order/guests/update.rb +2 -24
  27. data/app/services/spree_cm_commissioner/rates_availabilities/bulk_update.rb +14 -8
  28. data/app/services/spree_cm_commissioner/seat_layouts/grid.rb +56 -0
  29. data/app/views/spree/admin/guests/_dynamic_fields.html.erb +67 -0
  30. data/app/views/spree/admin/guests/_form.html.erb +2 -0
  31. data/app/views/spree/admin/homepage_background/index.html.erb +1 -1
  32. data/app/views/spree/admin/homepage_section/edit.html.erb +0 -1
  33. data/app/views/spree/admin/homepage_section/index.html.erb +1 -1
  34. data/app/views/spree/admin/inventory_items/_details.html.erb +16 -0
  35. data/app/views/spree/admin/rates_availabilities/_script.html.erb +49 -7
  36. data/app/views/spree/admin/rates_availabilities/index.html.erb +4 -0
  37. data/app/views/spree/admin/shared/_api_cache_button.html.erb +5 -0
  38. data/config/locales/en.yml +25 -1
  39. data/config/locales/km.yml +25 -1
  40. data/config/routes.rb +5 -1
  41. data/lib/spree_cm_commissioner/version.rb +1 -1
  42. metadata +13 -1
@@ -6,6 +6,8 @@
6
6
  selected: t('rates_availabilities.bulk.selected'),
7
7
  saving: t('rates_availabilities.bulk.saving'),
8
8
  done: t('rates_availabilities.bulk.done'),
9
+ busy: t('rates_availabilities.bulk.busy'),
10
+ useBaseStockConfirm: t('rates_availabilities.bulk.use_base_stock_confirm'),
9
11
  failed: t('rates_availabilities.modal.failed')
10
12
  }.to_json) %>;
11
13
 
@@ -228,7 +230,8 @@
228
230
  // close each rate on its own, and they'd stay closed after the date is reopened from its stock cell alone. A
229
231
  // price cell closed only by its date or the base rate (ra-closed-day alone) is in neither: it has no closing
230
232
  // of its own to reopen, and closing it would add one that shows only once those reopen.
231
- // `datePrices` have their own price for the date, which Use Base price clears.
233
+ // `datePrices` have their own price for the date, which Use Base price clears. `dateStock` is what Use Base
234
+ // stock recounts: Base stock has nothing to fall back to.
232
235
  groups() {
233
236
  const cells = this.cells();
234
237
  const ofType = (type) => cells.filter((cell) => cell.dataset.cell === type);
@@ -247,7 +250,8 @@
247
250
  prices: prices,
248
251
  open: dated.filter((cell) => !isClosed(cell) && closesOnItsOwn(cell)),
249
252
  closed: dated.filter(isClosed),
250
- datePrices: prices.filter((cell) => cell.classList.contains('ra-date-price'))
253
+ datePrices: prices.filter((cell) => cell.classList.contains('ra-date-price')),
254
+ dateStock: stock.filter((cell) => cell.dataset.date)
251
255
  };
252
256
  }
253
257
 
@@ -341,8 +345,9 @@
341
345
  this.load();
342
346
  }
343
347
 
344
- // A newer request wins, as answers can arrive out of order while the search is typed.
345
- load() {
348
+ // A newer request wins, as answers can arrive out of order while the search is typed. `notice` ({ text, level })
349
+ // goes above the reloaded list: the bulk bar, where a save reports, is under the modal.
350
+ load(notice = null) {
346
351
  const content = this.sharedModal.content;
347
352
  const seq = ++this.seq;
348
353
  const current = () => seq === this.seq && this.isShown;
@@ -359,6 +364,14 @@
359
364
  content.innerHTML = html;
360
365
  // Sync icons are popovers on stock managements, which nothing initializes in fetched HTML.
361
366
  content.querySelectorAll('[data-toggle="popover"]').forEach((el) => { el.title = el.dataset.content; });
367
+ const body = content.querySelector('.modal-body');
368
+ if (notice && body) {
369
+ const alert = document.createElement('div');
370
+ alert.className = 'alert alert-' + notice.level + ' py-2 small';
371
+ alert.setAttribute('role', 'status');
372
+ alert.textContent = notice.text;
373
+ body.prepend(alert);
374
+ }
362
375
  const search = content.querySelector('[data-ra-list-search]');
363
376
  if (searching && search) {
364
377
  search.focus();
@@ -424,6 +437,8 @@
424
437
  content.querySelector('[data-ra-bulk-count]').textContent = '· ' + groups[config.group].length;
425
438
  const useBase = content.querySelector('[data-ra-use-base]');
426
439
  if (useBase) useBase.hidden = !groups.datePrices.length;
440
+ const useBaseStock = content.querySelector('[data-ra-use-base-stock]');
441
+ if (useBaseStock) useBaseStock.hidden = !groups.dateStock.length;
427
442
  setTimeout(() => { const input = content.querySelector('input'); if (input) input.focus(); }, 300);
428
443
  }
429
444
 
@@ -438,11 +453,35 @@
438
453
  this.update('use_base_price', {}, this.cellSelection.groups().datePrices.map(cellData));
439
454
  }
440
455
 
456
+ // Recounting a date undoes the stock set on it, so this is Set stock's way back to Base, as Use Base price is
457
+ // for prices.
458
+ useBaseStock() {
459
+ const cells = this.cellSelection.groups().dateStock;
460
+ if (!window.confirm(T.useBaseStockConfirm.replace('%{count}', cells.length))) return;
461
+ this.sharedModal.hide();
462
+ this.update('reset_stock', {}, cells.map(cellData));
463
+ }
464
+
441
465
  recount(button) {
442
466
  if (!window.confirm(button.dataset.raConfirm)) return;
443
467
  this.update('reset_stock', {}, [{ type: 'stock', variant_id: button.dataset.variantId, rate_plan_id: null, date: button.dataset.date }]);
444
468
  }
445
469
 
470
+ // Every row of the open stock details: one stock cell per variant and date it was opened for, as its price
471
+ // cells list the same rows but reset_stock only takes stock cells.
472
+ recountAll(button) {
473
+ if (!window.confirm(button.dataset.raConfirm)) return;
474
+ const rows = new Map(this.cellListModal.request.cells.map((cell) => [cell.variant_id + '|' + cell.date, cell]));
475
+ const cells = [...rows.values()].map((cell) => ({ type: 'stock', variant_id: cell.variant_id, rate_plan_id: null, date: cell.date }));
476
+ this.update('reset_stock', {}, cells);
477
+ }
478
+
479
+ // In the bar, and above an open list modal, which covers the bar.
480
+ report(text, level) {
481
+ this.message(text, level === 'danger');
482
+ if (this.cellListModal.isShown) this.cellListModal.load({ text: text, level: level });
483
+ }
484
+
446
485
  // `cells` defaults to the selection. Reloads the grid, and an open list modal, as their counts change.
447
486
  update(action, values, cells = this.cellSelection.groups().all.map(cellData)) {
448
487
  this.bar.classList.add('ra-busy');
@@ -454,11 +493,12 @@
454
493
  }).then((response) => response.json().then((body) => {
455
494
  if (!response.ok) throw new Error(body.error);
456
495
  return this.monthTables.reload().then(() => {
457
- if (this.cellListModal.isShown) this.cellListModal.load();
458
- this.message(T.done.replace('%{updated}', body.updated).replace('%{skipped}', body.skipped));
496
+ const done = T.done.replace('%{updated}', body.updated).replace('%{skipped}', body.skipped);
497
+ if (body.busy) this.report(done + '. ' + T.busy.replace('%{count}', body.busy), 'warning');
498
+ else this.report(done, 'success');
459
499
  });
460
500
  })).catch((error) => {
461
- this.message(error.message, true);
501
+ this.report(error.message, 'danger');
462
502
  }).finally(() => {
463
503
  this.bar.classList.remove('ra-busy');
464
504
  });
@@ -593,10 +633,12 @@
593
633
  ['[data-ra-select-date]', (el, event) => this.cellSelection.selectDate(el, event.shiftKey)],
594
634
  ['[data-ra-bulk]', (el) => this.bulkEditBar.start(el.dataset.raBulk)],
595
635
  ['[data-ra-use-base]', () => this.bulkEditBar.useBasePrice()],
636
+ ['[data-ra-use-base-stock]', () => this.bulkEditBar.useBaseStock()],
596
637
  ['[data-ra-list]', (el) => this.cellListModal.open(this.monthTables.root.dataset[el.dataset.raList + 'Url'])],
597
638
  ['[data-ra-list-filter]', (el) => this.cellListModal.setFilter(el.dataset.raListFilter)],
598
639
  ['[data-ra-list-page]', (el) => this.cellListModal.setPage(el)],
599
640
  ['[data-ra-recount]', (el) => this.bulkEditBar.recount(el)],
641
+ ['[data-ra-recount-all]', (el) => this.bulkEditBar.recountAll(el)],
600
642
  ['[data-ra-modal-url]', (el) => this.ratePlanForms.open(el.dataset.raModalUrl)],
601
643
  ['[data-ra-move]', (el) => this.ratePlanForms.moveItem(el)],
602
644
  ['[data-ra-delete-url]', (el) => this.ratePlanForms.destroy(el)]
@@ -102,6 +102,10 @@
102
102
  <small class="text-muted"><%= t('rates_availabilities.bulk.stock_hint') %></small>
103
103
  </div>
104
104
  <div class="modal-footer">
105
+ <%# Only while dated stock is selected (BulkEditBar#openForm); recounts those dates, undoing the stock set on them. %>
106
+ <button type="button" class="mr-auto btn btn-outline-secondary" data-ra-use-base-stock hidden title="<%= t('rates_availabilities.bulk.use_base_stock_hint') %>">
107
+ <%= t('rates_availabilities.bulk.use_base_stock') %>
108
+ </button>
105
109
  <button type="button" class="btn btn-outline-secondary" data-ra-dismiss><%= t('rates_availabilities.rate_plan_form.cancel') %></button>
106
110
  <button type="submit" class="btn btn-primary"><%= t('rates_availabilities.rate_plan_form.save') %></button>
107
111
  </div>
@@ -0,0 +1,5 @@
1
+ <%# locals: model (an ApiCaches::Invalidate::SUPPORTED_MODELS key), id (one record), tenant_id (with
2
+ no id, clears every record of model on that tenant's API; neither clears the BookMe+ storefront). %>
3
+ <% id ||= nil %>
4
+ <% tenant_id ||= nil %>
5
+ <%= button_link_to Spree.t(:clear_cache), clear_admin_api_caches_path(model: model, id: id, tenant_id: tenant_id), method: :post, class: 'btn btn-outline-primary' %>
@@ -2,6 +2,16 @@
2
2
  # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
3
  en:
4
4
  views:
5
+ admin:
6
+ guests:
7
+ dynamic_fields:
8
+ title: "Custom fields"
9
+ stages:
10
+ pre_registration: "Before registration"
11
+ post_registration: "After registration"
12
+ during_check_in: "During check-in"
13
+ "yes": "Yes"
14
+ "no": "No"
5
15
  manage_team:
6
16
  add:
7
17
  user_not_found: "User not found"
@@ -265,6 +275,7 @@ en:
265
275
  riel: "៛"
266
276
 
267
277
  spree:
278
+ clear_cache_requested: "Clearing cache. Changes appear in the app within about a minute."
268
279
  default_inventory: "Default Inventory"
269
280
  title: "Title"
270
281
  confirm_clone_customer_notification: "Are you sure you want to clone \"%{title}\"?"
@@ -1220,6 +1231,10 @@ en:
1220
1231
  convert:
1221
1232
  hold_expired: "Your reservation expired before payment completed. Please try booking again."
1222
1233
 
1234
+ inventory_item:
1235
+ reset:
1236
+ busy: "Stock changed while it was being recounted, as someone is booking it. Try again in a moment."
1237
+
1223
1238
  # Displayed as-is on stock-status badges pushed to Firestore (see
1224
1239
  # SpreeCmCommissioner::Products::PublishStockStatusToFirestore) — not read via I18n at request
1225
1240
  # time, so every locale we publish for must have an entry here.
@@ -1636,7 +1651,12 @@ en:
1636
1651
  close: "Close sale"
1637
1652
  reopen: "Reopen sale"
1638
1653
  reset_stock: "Recount stock"
1639
- reset_stock_confirm: "Recount stock? Available and on-hold are recalculated from base stock and orders."
1654
+ reset_stock_confirm: "Recount stock? Available and on-hold are recalculated from Base stock and orders, which undoes stock set on the date."
1655
+ recount_limit: "Recount up to %{max} dates at a time"
1656
+ busy: "%{count} were being booked and were left as they were; try them again in a moment."
1657
+ use_base_stock: "Use Base stock"
1658
+ use_base_stock_hint: "Recount the selected dates from Base stock and orders, undoing the stock set on them"
1659
+ use_base_stock_confirm: "Recount %{count} selected dates from Base stock and orders? Stock set on them is undone."
1640
1660
  deselect: "Deselect all"
1641
1661
  selected: "%{count} selected"
1642
1662
  saving: "Saving…"
@@ -1720,6 +1740,10 @@ en:
1720
1740
  title: "Stock details"
1721
1741
  date: "Date"
1722
1742
  none: "No inventory for the selected dates."
1743
+ recount_all: "Recount all"
1744
+ recount_all_hint: "Recalculates from Base stock and orders: fixes drifted counts and undoes stock set on these dates."
1745
+ recount_all_confirm: "Recount all %{count} rows? Available and on-hold are recalculated from Base stock and orders, which undoes stock set on those dates."
1746
+ recount_all_limit: "Select up to %{max} rows to recount them all at once"
1723
1747
  bookings:
1724
1748
  title: "Bookings"
1725
1749
  open: "Bookings"
@@ -3,6 +3,16 @@
3
3
 
4
4
  km:
5
5
  views:
6
+ admin:
7
+ guests:
8
+ dynamic_fields:
9
+ title: "ព័ត៌មានបន្ថែម"
10
+ stages:
11
+ pre_registration: "មុនចុះឈ្មោះ"
12
+ post_registration: "ក្រោយចុះឈ្មោះ"
13
+ during_check_in: "ពេលចូលរួម"
14
+ "yes": "បាទ/ចាស"
15
+ "no": "ទេ"
6
16
  manage_team:
7
17
  add:
8
18
  user_not_found: "រកមិនឃើញអ្នកប្រើប្រាស់"
@@ -222,6 +232,7 @@ km:
222
232
  riel: "៛"
223
233
 
224
234
  spree:
235
+ clear_cache_requested: "កំពុងសម្អាតឃ្លាំងទិន្នន័យ។ ការផ្លាស់ប្តូរនឹងបង្ហាញក្នុងកម្មវិធីក្នុងរយៈពេលប្រហែលមួយនាទី។"
225
236
  default_inventory: "ស្តុកលំនាំដើម"
226
237
  title: "ចំណងជើង"
227
238
  confirm_clone_customer_notification: "តើអ្នកប្រាកដថាចង់ចម្លង \"%{title}\" មែនទេ?"
@@ -740,6 +751,10 @@ km:
740
751
  convert:
741
752
  hold_expired: "ការកក់របស់អ្នកបានផុតកំណត់មុនពេលទូទាត់ប្រាក់បានបញ្ចប់។ សូមព្យាយាមកក់ម្តងទៀត។"
742
753
 
754
+ inventory_item:
755
+ reset:
756
+ busy: "ស្តុកបានផ្លាស់ប្តូរពេលកំពុងរាប់ឡើងវិញ ព្រោះមានអ្នកកំពុងកក់។ សូមព្យាយាមម្តងទៀតបន្តិចទៀត។"
757
+
743
758
  stock_status:
744
759
  pending_hold: "តម្រូវការខ្ពស់"
745
760
  sold_out: "លក់អស់"
@@ -1176,7 +1191,12 @@ km:
1176
1191
  close: "បិទការលក់"
1177
1192
  reopen: "បើកការលក់ឡើងវិញ"
1178
1193
  reset_stock: "រាប់ស្តុកឡើងវិញ"
1179
- reset_stock_confirm: "រាប់ស្តុកឡើងវិញ? ចំនួននៅសល់ និងកំពុងរក្សាទុកនឹងត្រូវគណនាឡើងវិញពីស្តុកមូលដ្ឋាន និងការកម្ម៉ង់។"
1194
+ reset_stock_confirm: "រាប់ស្តុកឡើងវិញ? ចំនួននៅសល់ និងកំពុងរក្សាទុកនឹងត្រូវគណនាឡើងវិញពីស្តុកមូលដ្ឋាន និងការកម្ម៉ង់ ដែលលុបស្តុកដែលបានកំណត់លើថ្ងៃនោះ។"
1195
+ recount_limit: "អាចរាប់ស្តុកឡើងវិញបានយ៉ាងច្រើន %{max} ថ្ងៃក្នុងមួយលើក"
1196
+ busy: "%{count} កំពុងត្រូវបានកក់ ហើយមិនត្រូវបានប្តូរទេ។ សូមព្យាយាមម្តងទៀតបន្តិចទៀត។"
1197
+ use_base_stock: "ប្រើស្តុកមូលដ្ឋាន"
1198
+ use_base_stock_hint: "រាប់ស្តុកថ្ងៃដែលបានជ្រើសឡើងវិញពីស្តុកមូលដ្ឋាន និងការកម្ម៉ង់ ដោយលុបស្តុកដែលបានកំណត់លើថ្ងៃទាំងនោះ"
1199
+ use_base_stock_confirm: "រាប់ស្តុក %{count} ថ្ងៃដែលបានជ្រើសឡើងវិញពីស្តុកមូលដ្ឋាន និងការកម្ម៉ង់? ស្តុកដែលបានកំណត់លើថ្ងៃទាំងនោះនឹងត្រូវលុប។"
1180
1200
  deselect: "ដកការជ្រើសទាំងអស់"
1181
1201
  selected: "បានជ្រើស %{count}"
1182
1202
  saving: "កំពុងរក្សាទុក…"
@@ -1260,6 +1280,10 @@ km:
1260
1280
  title: "ព័ត៌មានលម្អិតស្តុក"
1261
1281
  date: "ថ្ងៃ"
1262
1282
  none: "គ្មានស្តុកសម្រាប់ថ្ងៃដែលបានជ្រើសទេ។"
1283
+ recount_all: "រាប់ទាំងអស់ឡើងវិញ"
1284
+ recount_all_hint: "គណនាឡើងវិញពីស្តុកមូលដ្ឋាន និងការកម្ម៉ង់៖ កែចំនួនដែលខុស និងលុបស្តុកដែលបានកំណត់លើថ្ងៃទាំងនេះ។"
1285
+ recount_all_confirm: "រាប់ស្តុកទាំង %{count} ជួរឡើងវិញ? ចំនួននៅសល់ និងកំពុងរក្សាទុកនឹងត្រូវគណនាឡើងវិញពីស្តុកមូលដ្ឋាន និងការកម្ម៉ង់ ដែលលុបស្តុកដែលបានកំណត់លើថ្ងៃទាំងនោះ។"
1286
+ recount_all_limit: "ជ្រើសមិនលើស %{max} ជួរ ដើម្បីរាប់ទាំងអស់ឡើងវិញក្នុងមួយលើក"
1263
1287
  bookings:
1264
1288
  title: "ការកក់"
1265
1289
  open: "ការកក់"
data/config/routes.rb CHANGED
@@ -20,7 +20,11 @@ Spree::Core::Engine.add_routes do
20
20
  end
21
21
 
22
22
  namespace :admin do
23
- post '/invalidate_api_caches', to: 'base#invalidate_api_caches'
23
+ resources :api_caches, only: [] do
24
+ collection do
25
+ post :clear
26
+ end
27
+ end
24
28
 
25
29
  get '/system', to: redirect('/admin/system/waiting_room')
26
30
 
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.14.2'.freeze
2
+ VERSION = '2.14.4'.freeze
3
3
 
4
4
  module_function
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.14.2
4
+ version: 2.14.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
@@ -824,6 +824,7 @@ files:
824
824
  - app/controllers/concerns/spree_cm_commissioner/turnstile_protectable.rb
825
825
  - app/controllers/concerns/spree_cm_commissioner/waiting_room_authorization.rb
826
826
  - app/controllers/spree/admin/account_deletions_controller.rb
827
+ - app/controllers/spree/admin/api_caches_controller.rb
827
828
  - app/controllers/spree/admin/base_controller_decorator.rb
828
829
  - app/controllers/spree/admin/base_import_orders_controller.rb
829
830
  - app/controllers/spree/admin/blazer_queries_controller.rb
@@ -1370,6 +1371,7 @@ files:
1370
1371
  - app/jobs/spree_cm_commissioner/application_unique_job.rb
1371
1372
  - app/jobs/spree_cm_commissioner/async_operation_job.rb
1372
1373
  - app/jobs/spree_cm_commissioner/audit_event_job.rb
1374
+ - app/jobs/spree_cm_commissioner/audit_events/cleanup_expired_job.rb
1373
1375
  - app/jobs/spree_cm_commissioner/cancel_import_order_job.rb
1374
1376
  - app/jobs/spree_cm_commissioner/chatrace_order_creator_job.rb
1375
1377
  - app/jobs/spree_cm_commissioner/completion_steps/regenerate_for_line_items_job.rb
@@ -1872,6 +1874,7 @@ files:
1872
1874
  - app/overrides/spree/admin/cms_pages/index/cms_pages_tabs.html.erb.deface
1873
1875
  - app/overrides/spree/admin/menu_items/_form/badge_field.html.erb.deface
1874
1876
  - app/overrides/spree/admin/menus/edit/add_import_sprite_button.html.erb.deface
1877
+ - app/overrides/spree/admin/menus/index/clear_cache_button.html.erb.deface
1875
1878
  - app/overrides/spree/admin/oauth_applications/_form/tenant_fields.html.erb.deface
1876
1879
  - app/overrides/spree/admin/option_types/_form/attr_type.html.erb.deface
1877
1880
  - app/overrides/spree/admin/option_types/_form/checkbox.html.erb.deface
@@ -1896,6 +1899,7 @@ files:
1896
1899
  - app/overrides/spree/admin/orders/index/line_items_row.html.erb.deface
1897
1900
  - app/overrides/spree/admin/orders/index/row_actions.html.erb.deface
1898
1901
  - app/overrides/spree/admin/payment_methods/_form/display_on_field.html.erb.deface
1902
+ - app/overrides/spree/admin/payment_methods/index/clear_cache_button.html.erb.deface
1899
1903
  - app/overrides/spree/admin/payment_methods/index/pagination.html.erb.deface
1900
1904
  - app/overrides/spree/admin/payment_methods/index/preserve_tab_in_search.html.erb.deface
1901
1905
  - app/overrides/spree/admin/payments/_form/amount_text_field.html.erb.deface
@@ -2038,6 +2042,7 @@ files:
2038
2042
  - app/overrides/spree/admin/vendors/_form/star_rating.html.erb.deface
2039
2043
  - app/overrides/spree/admin/vendors/_form/term_of_use.html.erb.deface
2040
2044
  - app/overrides/spree/admin/vendors/_form/vendor_min_max_price.html.erb.deface
2045
+ - app/overrides/spree/admin/vendors/edit/clear_cache_button.html.erb.deface
2041
2046
  - app/overrides/spree/admin/vendors/edit/vendor_tabs.html.erb.deface
2042
2047
  - app/overrides/spree/admin/vendors/index/index.html.erb.deface
2043
2048
  - app/overrides/spree/admin/webhooks_subscribers/_form/api_key.html.erb.deface
@@ -2088,6 +2093,7 @@ files:
2088
2093
  - app/serializables/spree_cm_commissioner/pie_chart_event_aggregator.rb
2089
2094
  - app/serializers/.gitkeep
2090
2095
  - app/serializers/concerns/spree_cm_commissioner/api/v2/resource_serializer_concern_decorator.rb
2096
+ - app/serializers/spree/api/v2/base_serializer_decorator.rb
2091
2097
  - app/serializers/spree/api/v2/platform/create_date_specific_item_adjustment_serializer.rb
2092
2098
  - app/serializers/spree/api/v2/platform/create_guest_adjustment_serializer.rb
2093
2099
  - app/serializers/spree/api/v2/platform/create_line_item_adjustment_serializer.rb
@@ -2314,7 +2320,9 @@ files:
2314
2320
  - app/services/spree_cm_commissioner/agency_users/create.rb
2315
2321
  - app/services/spree_cm_commissioner/agency_users/destroy.rb
2316
2322
  - app/services/spree_cm_commissioner/api_caches/invalidate.rb
2323
+ - app/services/spree_cm_commissioner/api_caches/invalidate_all.rb
2317
2324
  - app/services/spree_cm_commissioner/assign_product_to_section/update.rb
2325
+ - app/services/spree_cm_commissioner/audit_events/cleanup_expired.rb
2318
2326
  - app/services/spree_cm_commissioner/audit_logger.rb
2319
2327
  - app/services/spree_cm_commissioner/calculate_distance.rb
2320
2328
  - app/services/spree_cm_commissioner/cart/add_guest.rb
@@ -2361,6 +2369,7 @@ files:
2361
2369
  - app/services/spree_cm_commissioner/google_wallets/hotel_class_creator.rb
2362
2370
  - app/services/spree_cm_commissioner/google_wallets/hotel_class_updater.rb
2363
2371
  - app/services/spree_cm_commissioner/google_wallets/hotel_object_builder.rb
2372
+ - app/services/spree_cm_commissioner/guests/build_dynamic_field_attributes.rb
2364
2373
  - app/services/spree_cm_commissioner/guests/claim_invite_guest_service.rb
2365
2374
  - app/services/spree_cm_commissioner/guests/create.rb
2366
2375
  - app/services/spree_cm_commissioner/guests/finalize.rb
@@ -2638,6 +2647,7 @@ files:
2638
2647
  - app/services/spree_cm_commissioner/routes/create.rb
2639
2648
  - app/services/spree_cm_commissioner/routes/update.rb
2640
2649
  - app/services/spree_cm_commissioner/rsa_service.rb
2650
+ - app/services/spree_cm_commissioner/seat_layouts/grid.rb
2641
2651
  - app/services/spree_cm_commissioner/seat_layouts/sanitize_svg.rb
2642
2652
  - app/services/spree_cm_commissioner/seat_layouts/update.rb
2643
2653
  - app/services/spree_cm_commissioner/seats/apply_locks.rb
@@ -2807,6 +2817,7 @@ files:
2807
2817
  - app/views/spree/admin/guest_qr_codes/_guest_qr_codes_print_template.html.erb
2808
2818
  - app/views/spree/admin/guest_qr_codes/index.html.erb
2809
2819
  - app/views/spree/admin/guests/_check_in_status.html.erb
2820
+ - app/views/spree/admin/guests/_dynamic_fields.html.erb
2810
2821
  - app/views/spree/admin/guests/_form.html.erb
2811
2822
  - app/views/spree/admin/guests/_table.html.erb
2812
2823
  - app/views/spree/admin/guests/edit.html.erb
@@ -2967,6 +2978,7 @@ files:
2967
2978
  - app/views/spree/admin/service_fee_rules/edit.html.erb
2968
2979
  - app/views/spree/admin/service_fee_rules/index.html.erb
2969
2980
  - app/views/spree/admin/service_fee_rules/new.html.erb
2981
+ - app/views/spree/admin/shared/_api_cache_button.html.erb
2970
2982
  - app/views/spree/admin/shared/_availability_percentage.html.erb
2971
2983
  - app/views/spree/admin/shared/_cms_pages_tabs.html.erb
2972
2984
  - app/views/spree/admin/shared/_customer_notification_tabs.html.erb