Class: SpreeCmCommissioner::SeatLayouts::Update
- Inherits:
-
Object
- Object
- SpreeCmCommissioner::SeatLayouts::Update
- Includes:
- Spree::ServiceModule::Base
- Defined in:
- app/services/spree_cm_commissioner/seat_layouts/update.rb
Overview
Shared by both dashboards that edit a seat layout (organizer's event-scoped controller, shared_console's trip-scoped one) — the nested-attribute remapping, section/block regrouping and total_seats bookkeeping is identical either way; only the URL-building and (for events) the background-attachment handling differ, and those stay in each controller.
Instance Method Summary collapse
Instance Method Details
#call(seat_layout:, attributes:) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'app/services/spree_cm_commissioner/seat_layouts/update.rb', line 10 def call(seat_layout:, attributes:) attributes = attributes.deep_dup ActiveRecord::Base.transaction do create_sections_for_existing_blocks!(seat_layout, attributes) ungroup_blocks_from_sections!(seat_layout, attributes) attributes[:top_level_blocks_attributes] = attributes.delete(:top_level_blocks) if attributes.key?(:top_level_blocks) if attributes.key?(:seat_sections) attributes[:seat_sections_attributes] = attributes.delete(:seat_sections) attributes[:seat_sections_attributes].each do |section| section[:blocks_attributes] = section.delete(:blocks) if section.key?(:blocks) end end seat_layout.assign_attributes(attributes) seat_layout.seat_sections.each { |section| section.total_seats = section.blocks.select(&:seatable?).count } seat_layout.total_seats = seat_layout.seat_sections.sum(&:total_seats) + seat_layout.top_level_blocks.select(&:seatable?).count seat_layout.save! end success(seat_layout) rescue StandardError => e failure(seat_layout, e.) end |