mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-22 20:16:50 +00:00
67 lines
1.8 KiB
Ruby
67 lines
1.8 KiB
Ruby
# Find gaps in the sequence of payment ids.
|
|
# If there are gaps then see if there is a log entry with a payment result for
|
|
# the now lost payment. If there are some then you probably want to follow up
|
|
# with the affected enterprise and see if customers need to be refunded.
|
|
#
|
|
# ## Usage
|
|
|
|
# Report of the last 35 days:
|
|
# rake ofn:missing_payments[35]
|
|
namespace :ofn do
|
|
desc 'Find payments that got lost'
|
|
task :missing_payments, [:days] => :environment do |_task_, args|
|
|
days = args[:days].andand.to_i || 7
|
|
payments_sequence = Spree::Payment.where("created_at > ?", days.days.ago).order(:id).pluck(:id)
|
|
missing_payment_ids = payments_range(payments_sequence) - payments_sequence
|
|
puts "Gaps in the payments sequence: #{missing_payment_ids.count}"
|
|
log_entries = Spree::LogEntry.where(
|
|
source_type: "Spree::Payment",
|
|
source_id: missing_payment_ids
|
|
)
|
|
print_csv(log_entries) if log_entries.present?
|
|
end
|
|
|
|
def payments_range(payments_sequence)
|
|
if payments_sequence.empty?
|
|
[]
|
|
else
|
|
(payments_sequence.first..payments_sequence.last).to_a
|
|
end
|
|
end
|
|
|
|
def print_csv(log_entries)
|
|
CSV do |out|
|
|
out << headers
|
|
log_entries.each do |entry|
|
|
add_row(entry, out)
|
|
end
|
|
end
|
|
end
|
|
|
|
def add_row(entry, out)
|
|
details = Psych.load(entry.details)
|
|
out << row(details, details.params)
|
|
rescue StandardError
|
|
Logger.new(STDERR).warn(entry)
|
|
end
|
|
|
|
def headers
|
|
[
|
|
"Created", "Order", "Success", "Message", "Payment ID", "Action",
|
|
"Amount", "Currencty", "Receipt"
|
|
]
|
|
end
|
|
|
|
def row(details, params)
|
|
[
|
|
Time.zone.at(params["created"] || 0).to_datetime,
|
|
params["description"],
|
|
details.success?,
|
|
details.message,
|
|
params["id"],
|
|
params["object"],
|
|
params["amount"], params["currency"], params["receipt_url"]
|
|
]
|
|
end
|
|
end
|