Files
openfoodnetwork/app/controllers/spree/admin/tax_rates_controller.rb
Matt-Yorkley ff549fb62e Also soft-delete tax rates when changing included_in_price
We need to do this when the included_in_price boolean changes as well, for the same reasons.
2021-02-09 17:26:16 +00:00

63 lines
1.7 KiB
Ruby

module Spree
module Admin
class TaxRatesController < ::Admin::ResourceController
before_action :load_data
delegate :transition_rate!, :updated_rate, to: :updater
def update
return super unless requires_transition?
transition_tax_rate
end
private
def requires_transition?
(included_changed? || amount_changed?) && associated_adjustments?
end
def included_changed?
ActiveRecord::Type::Boolean.new.type_cast_from_user(
permitted_resource_params[:included_in_price]
) != @tax_rate.included_in_price
end
def amount_changed?
BigDecimal(permitted_resource_params[:amount]) != @tax_rate.amount
end
def associated_adjustments?
Spree::Adjustment.where(originator: @tax_rate).exists?
end
def transition_tax_rate
if transition_rate!
redirect_to location_after_save,
flash: { success: flash_message_for(updated_rate, :successfully_updated) }
else
redirect_to spree.edit_admin_tax_rate_path(@tax_rate),
flash: { error: updated_rate.errors.full_messages.to_sentence }
end
end
def updater
@updater ||= TaxRateUpdater.new(@tax_rate, permitted_resource_params)
end
def load_data
@available_zones = Zone.order(:name)
@available_categories = TaxCategory.order(:name)
@calculators = TaxRate.calculators.sort_by(&:name)
end
def permitted_resource_params
params.require(:tax_rate).permit(
:name, :amount, :included_in_price, :zone_id,
:tax_category_id, :show_rate_in_label, :calculator_type
)
end
end
end
end