From aca13a25c3ba89bef884ec95d97782dea48c1228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Thu, 2 Jan 2025 08:42:33 -0500 Subject: [PATCH] WIP Process payments for expired invoices --- .../contributions/donations_controller.rb | 15 +++++++---- app/jobs/btcpay_check_donation_job.rb | 25 +++++++++++++------ 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/app/controllers/contributions/donations_controller.rb b/app/controllers/contributions/donations_controller.rb index b9f46c4..c540ef9 100644 --- a/app/controllers/contributions/donations_controller.rb +++ b/app/controllers/contributions/donations_controller.rb @@ -84,21 +84,26 @@ class Contributions::DonationsController < ApplicationController @donation.paid_at = DateTime.now @donation.payment_status = "settled" @donation.save! - flash_message = { success: "Thank you!" } + msg = { success: "Thank you!" } when "Processing" unless @donation.processing? @donation.payment_status = "processing" @donation.save! - flash_message = { success: "Thank you! We will send you an email when the payment is confirmed." } + msg = { success: "Thank you! We will send you an email when the payment is confirmed." } BtcpayCheckDonationJob.set(wait: 20.seconds).perform_later(@donation) end when "Expired" - flash_message = { warning: "The payment request for this donation has expired" } + if invoice["additionalStatus"] && + invoice["additionalStatus"] == "PaidLate" + # TODO introduce state machine + mark_as_paid(donation) + end + msg = { warning: "The payment request for this donation has expired" } else - flash_message = { warning: "Could not determine status of payment" } + msg = { warning: "Could not determine status of payment" } end - redirect_to contributions_donations_url, flash: flash_message + redirect_to contributions_donations_url, flash: msg end private diff --git a/app/jobs/btcpay_check_donation_job.rb b/app/jobs/btcpay_check_donation_job.rb index 3cfdbcb..ccdc9d3 100644 --- a/app/jobs/btcpay_check_donation_job.rb +++ b/app/jobs/btcpay_check_donation_job.rb @@ -9,20 +9,29 @@ class BtcpayCheckDonationJob < ApplicationJob ) case invoice["status"] - when "Settled" - donation.paid_at = DateTime.now - donation.payment_status = "settled" - donation.save! - - NotificationMailer.with(user: donation.user) - .bitcoin_donation_confirmed - .deliver_later when "Processing" re_enqueue_job(donation) + when "Settled" + mark_as_paid(donation) + when "Expired" + if invoice["additionalStatus"] && + invoice["additionalStatus"] == "PaidLate" + mark_as_paid(donation) + end end end def re_enqueue_job(donation) self.class.set(wait: 20.seconds).perform_later(donation) end + + def mark_as_paid(donation) + donation.paid_at = DateTime.now + donation.payment_status = "settled" + donation.save! + + NotificationMailer.with(user: donation.user) + .bitcoin_donation_confirmed + .deliver_later + end end -- 2.25.1