Sha256: d76be9ab4e6d92a321138599c5315963da2138ebcd33c23e89541b42c952cc77

Contents?: true

Size: 1.44 KB

Versions: 28

Compression:

Stored size: 1.44 KB

Contents

# This is a form object for the admin_qb_syncs#update action

module Effective
  class QbOrderItemsForm
    include ActiveModel::Model

    attr_accessor :id, :orders

    def initialize(id:, orders:)
      @id = id
      @orders = Array(orders)
    end

    def qb_order_items
      @qb_order_items ||= orders.flat_map { |order| order.order_items.map { |oi| oi.qb_item_name; oi.qb_order_item } }
    end

    # This is required by SimpleForm and Rails for non-ActiveRecord nested attributes
    def qb_order_items_attributes=(qb_order_item_atts)
      qb_order_item_atts.each do |attributes|
        qb_order_item = qb_order_items.find { |qb_order_item| qb_order_item.order_item_id.to_s == attributes[:order_item_id] }
        raise "unable to find qb_order_item with order_item_id #{attributes[:order_item_id]}" unless qb_order_item.present?

        qb_order_item.attributes = attributes.except(:id, :order_item_id)
      end
    end

    def save
      qb_order_items.each { |qb_order_item| qb_order_item.valid? }
      return false unless qb_order_items.all? { |qb_order_item| qb_order_item.valid? }

      success = false

      Effective::QbOrderItem.transaction do
        begin
          qb_order_items.each { |qb_order_item| qb_order_item.save! }
          success = true
        rescue => e
          raise ActiveRecord::Rollback
        end
      end

      success
    end

    def to_param
      id
    end

    def persisted?
      true
    end

  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
effective_qb_sync-1.5.0 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.4.0 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.8 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.7 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.6 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.5 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.4 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.3 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.2 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.1 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.3.0 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.2.5 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.2.4 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.2.3 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.2.2 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.2.1 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.2.0 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.1.5 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.1.4 app/models/effective/qb_order_items_form.rb
effective_qb_sync-1.1.3 app/models/effective/qb_order_items_form.rb