mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-13 04:00:21 +00:00
Move both subscription summarizer and subscription summary to order management engine
This commit is contained in:
@@ -1,53 +0,0 @@
|
||||
require 'open_food_network/subscription_summary'
|
||||
|
||||
# Used by for SubscriptionPlacementJob and SubscriptionConfirmJob to summarize the
|
||||
# result of automatic processing of subscriptions for the relevant shop owners.
|
||||
module OpenFoodNetwork
|
||||
class SubscriptionSummarizer
|
||||
def initialize
|
||||
@summaries = {}
|
||||
end
|
||||
|
||||
def record_order(order)
|
||||
summary_for(order).record_order(order)
|
||||
end
|
||||
|
||||
def record_success(order)
|
||||
summary_for(order).record_success(order)
|
||||
end
|
||||
|
||||
def record_issue(type, order, message = nil)
|
||||
Rails.logger.info "Issue in Subscription Order #{order.id}: #{type}"
|
||||
summary_for(order).record_issue(type, order, message)
|
||||
end
|
||||
|
||||
def record_and_log_error(type, order)
|
||||
return record_issue(type, order) unless order.errors.any?
|
||||
|
||||
error = "Subscription#{type.to_s.camelize}Error"
|
||||
line1 = "#{error}: Cannot process order #{order.number} due to errors"
|
||||
line2 = "Errors: #{order.errors.full_messages.join(', ')}"
|
||||
Rails.logger.info("#{line1}\n#{line2}")
|
||||
record_issue(type, order, line2)
|
||||
end
|
||||
|
||||
def send_placement_summary_emails
|
||||
@summaries.values.each do |summary|
|
||||
SubscriptionMailer.placement_summary_email(summary).deliver
|
||||
end
|
||||
end
|
||||
|
||||
def send_confirmation_summary_emails
|
||||
@summaries.values.each do |summary|
|
||||
SubscriptionMailer.confirmation_summary_email(summary).deliver
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def summary_for(order)
|
||||
shop_id = order.distributor_id
|
||||
@summaries[shop_id] ||= SubscriptionSummary.new(shop_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,49 +0,0 @@
|
||||
module OpenFoodNetwork
|
||||
class SubscriptionSummary
|
||||
attr_reader :shop_id, :order_count, :success_count, :issues
|
||||
|
||||
def initialize(shop_id)
|
||||
@shop_id = shop_id
|
||||
@order_ids = []
|
||||
@success_ids = []
|
||||
@issues = {}
|
||||
end
|
||||
|
||||
def record_order(order)
|
||||
@order_ids << order.id
|
||||
end
|
||||
|
||||
def record_success(order)
|
||||
@success_ids << order.id
|
||||
end
|
||||
|
||||
def record_issue(type, order, message)
|
||||
issues[type] ||= {}
|
||||
issues[type][order.id] = message
|
||||
end
|
||||
|
||||
def order_count
|
||||
@order_ids.count
|
||||
end
|
||||
|
||||
def success_count
|
||||
@success_ids.count
|
||||
end
|
||||
|
||||
def issue_count
|
||||
(@order_ids - @success_ids).count
|
||||
end
|
||||
|
||||
def orders_affected_by(type)
|
||||
case type
|
||||
when :other then Spree::Order.where(id: unrecorded_ids)
|
||||
else Spree::Order.where(id: issues[type].keys)
|
||||
end
|
||||
end
|
||||
|
||||
def unrecorded_ids
|
||||
recorded_ids = issues.values.map(&:keys).flatten
|
||||
@order_ids - @success_ids - recorded_ids
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user