Class: Spree::Admin::ProductCommissionsController

Inherits:
ResourceController
  • Object
show all
Defined in:
app/controllers/spree/admin/product_commissions_controller.rb

Instance Method Summary collapse

Instance Method Details

#collectionObject

override



54
55
56
# File 'app/controllers/spree/admin/product_commissions_controller.rb', line 54

def collection
  @collection ||= parent.products.order(:id)
end

#collection_actionsObject

override



49
50
51
# File 'app/controllers/spree/admin/product_commissions_controller.rb', line 49

def collection_actions
  %i[index update_commissions update_default_commission]
end

#collection_url(options = {}) ⇒ Object



39
40
41
# File 'app/controllers/spree/admin/product_commissions_controller.rb', line 39

def collection_url(options = {})
  admin_vendor_product_commissions_url(options)
end

#commission_for(product) ⇒ Object



43
44
45
46
# File 'app/controllers/spree/admin/product_commissions_controller.rb', line 43

def commission_for(product)
  commission_rate = product.commission_rate || product.vendor&.commission_rate || 0
  product.price * commission_rate / 100
end

#model_classObject

override



59
60
61
# File 'app/controllers/spree/admin/product_commissions_controller.rb', line 59

def model_class
  Spree::Product
end

#update_commissionsObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/controllers/spree/admin/product_commissions_controller.rb', line 10

def update_commissions
  ActiveRecord::Base.transaction do
    params[:products]&.each do |id, attributes|
      product = collection.find(id)

      product.commission_rate = attributes[:commission_rate]
      product.save!
    end
  end

  flash[:success] = flash_message_for(@parent, :successfully_updated)
  redirect_to collection_url
rescue ActiveRecord::RecordInvalid => e
  flash[:error] = e.record.errors.full_messages.join(', ')
  redirect_back fallback_location: collection_url
end

#update_default_commissionObject



27
28
29
30
31
32
33
34
35
36
37
# File 'app/controllers/spree/admin/product_commissions_controller.rb', line 27

def update_default_commission
  attributes = params.require(:vendor).permit(:commission_rate)

  if @parent.update(attributes)
    flash[:success] = flash_message_for(@parent, :successfully_updated)
    redirect_to collection_url
  else
    flash[:error] = @parent.errors.full_messages.join(', ')
    redirect_back fallback_location: collection_url
  end
end