mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
86 lines
2.6 KiB
Ruby
86 lines
2.6 KiB
Ruby
require 'open_food_network/permissions'
|
|
|
|
module Admin
|
|
class StandingOrdersController < ResourceController
|
|
before_filter :load_shop, only: [:new]
|
|
before_filter :load_shops, only: [:index]
|
|
before_filter :wrap_sli_attrs, only: [:create]
|
|
respond_to :json
|
|
|
|
respond_override create: { json: {
|
|
success: lambda {
|
|
shop, next_oc = @standing_order.shop, @standing_order.schedule.current_or_next_order_cycle
|
|
fee_calculator = OpenFoodNetwork::EnterpriseFeeCalculator.new(shop, next_oc) if shop && next_oc
|
|
render_as_json @standing_order, fee_calculator: fee_calculator
|
|
},
|
|
failure: lambda { render json: { errors: json_errors }, status: :unprocessable_entity }
|
|
} }
|
|
|
|
def index
|
|
respond_to do |format|
|
|
format.html
|
|
format.json { render_as_json @collection, ams_prefix: params[:ams_prefix] }
|
|
end
|
|
end
|
|
|
|
def new
|
|
@standing_order.shop = @shop
|
|
@customers = Customer.of(@shop)
|
|
@schedules = Schedule.with_coordinator(@shop)
|
|
@payment_methods = Spree::PaymentMethod.for_distributor(@shop)
|
|
@shipping_methods = Spree::ShippingMethod.for_distributor(@shop)
|
|
end
|
|
|
|
private
|
|
|
|
def permissions
|
|
return @permissions unless @permissions.nil?
|
|
@permissions = OpenFoodNetwork::Permissions.new(spree_current_user)
|
|
end
|
|
|
|
def collection
|
|
if request.format.json?
|
|
permissions.editable_standing_orders.ransack(params[:q]).result
|
|
.preload([:shop,:customer,:payment_method,:shipping_method])
|
|
else
|
|
StandingOrder.where("1=0")
|
|
end
|
|
end
|
|
|
|
def load_shop
|
|
@shop = Enterprise.find(params[:shop_id])
|
|
end
|
|
|
|
def load_shops
|
|
@shops = Enterprise.managed_by(spree_current_user).is_distributor
|
|
end
|
|
|
|
def json_errors
|
|
@object.errors.messages.inject({}) do |errors, (k,v)|
|
|
errors[k] = v.map{ |msg| @object.errors.full_message(k,msg) }
|
|
errors
|
|
end
|
|
end
|
|
|
|
# Wrap :standing_line_items_attributes in :standing_order root
|
|
def wrap_sli_attrs
|
|
if params[:standing_line_items].is_a? Array
|
|
attributes = params[:standing_line_items].map do |sli|
|
|
sli.slice(*StandingLineItem.attribute_names)
|
|
end
|
|
params[:standing_order][:standing_line_items_attributes] = attributes
|
|
end
|
|
end
|
|
|
|
# Overriding Spree method to load data from params here so that
|
|
# we can authorise #create using an object with required attributes
|
|
def build_resource
|
|
StandingOrder.new(shop_id: params[:standing_order].andand[:shop_id])
|
|
end
|
|
|
|
def ams_prefix_whitelist
|
|
[:index]
|
|
end
|
|
end
|
|
end
|