Move both subscription summarizer and subscription summary to order management engine

This commit is contained in:
Luis Ramos
2020-02-11 17:47:38 +00:00
parent e36b0249b9
commit fb1c825fbc
12 changed files with 377 additions and 364 deletions

View File

@@ -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

View File

@@ -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