CustomersDot Feature request: Allow Admin to retry a failed reconciliation
Problem
In CustomersDot admin panel, there exists the functionality to "Perform reconciliation" manually. However, this doesn't appear to support retrying a failed reconciliation, such as in the event of payment declined errors. Clicking this on a failed reconciliation returns simply
Reconciliation has already been executed
This would be from ReconciliationService#excute bailing out when Reconciliaton.fulfilled? is true, with fulfilled? simply being the presence of reconcile_done_at on the reconciliation, which, barring any internal errors, seems to always be set after a reconciliation is processed, regardless of success state (which is handled with Reconciliation#successful?)
Contrast this with the job that reprocesses reconciliations failed due to declines and other payment failures, RetryDeclinedReconciliationJob, after it locates eligible reconciliations to retry, it clears that and other attributes, allowing ReconciliationService to process it again.
The main problem here surfaces when a customer adds a new card due to a failure, and it fails again, they have to update the payment method yet again in order to trigger that job, which may not be practical for them if the card they want to use is already present. Kind of a minor inconvenience, but somewhat circular in nature if the customer just handles the cause of the failure on their end and lets support team know.
This can also result in a behavior where 500 errors are thrown with little information on what to do to fix: Perform reconciliation on admin page throws an ... (#4317 - closed).
Proposal
Add to the admin view on any given reconciliations a separate "Retry Failed" action or similar that lets support team trigger RetryDeclinedReconciliationJob on behalf of the customer without them needing to update their payment method again.
Workaround
It does seem to work if the customer updates their payment method and simply re-enters their CVV (which is cleared on page load). That appears, anyway, to hit PaymentMethodsController#update, which then enqueues RetryDeclinedReconciliationJob
Support Priority Score: (1, 0, 0, 3, 2, 0, 0, 3, 0, 3, 0) => 12