mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
35 lines
884 B
Ruby
35 lines
884 B
Ruby
require 'open_food_network/proxy_order_syncer'
|
|
|
|
class SubscriptionForm
|
|
attr_accessor :subscription, :params, :order_update_issues, :validator, :order_syncer, :estimator
|
|
|
|
delegate :json_errors, :valid?, to: :validator
|
|
delegate :order_update_issues, to: :order_syncer
|
|
|
|
def initialize(subscription, params = {})
|
|
@subscription = subscription
|
|
@params = params
|
|
@estimator = SubscriptionEstimator.new(subscription)
|
|
@validator = SubscriptionValidator.new(subscription)
|
|
@order_syncer = OrderSyncer.new(subscription)
|
|
end
|
|
|
|
def save
|
|
subscription.assign_attributes(params)
|
|
return false unless valid?
|
|
|
|
subscription.transaction do
|
|
estimator.estimate!
|
|
proxy_order_syncer.sync!
|
|
order_syncer.sync!
|
|
subscription.save!
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def proxy_order_syncer
|
|
OpenFoodNetwork::ProxyOrderSyncer.new(subscription)
|
|
end
|
|
end
|