Skip to content
Snippets Groups Projects
Commit ff70cfd9 authored by mattwire's avatar mattwire
Browse files

Handle 'Failed' status for invoice

parent f02f65cd
Branches
Tags
1 merge request!241Stripe Import extension
......@@ -123,7 +123,7 @@ class CRM_Stripe_Api {
return '';
case 'status':
return self::mapInvoiceStatusToContributionStatus($stripeObject->status);
return self::mapInvoiceStatusToContributionStatus($stripeObject);
}
break;
......@@ -398,11 +398,11 @@ class CRM_Stripe_Api {
* Map the Stripe Invoice Status to the CiviCRM Contribution status.
* https://stripe.com/docs/invoicing/overview#invoice-statuses
*
* @param string $invoiceStatus
* @param \Stripe\Invoice $invoice
*
* @return string
*/
public static function mapInvoiceStatusToContributionStatus(string $invoiceStatus): string {
public static function mapInvoiceStatusToContributionStatus(\Stripe\Invoice $invoice): string {
$statusMap = [
'draft' => 'Pending',
'open' => 'Pending',
......@@ -410,7 +410,12 @@ class CRM_Stripe_Api {
'void' => 'Cancelled',
'uncollectible' => 'Failed',
];
return $statusMap[$invoiceStatus] ?? '';
if ($invoice->status === 'open' && $invoice->attempted && empty($invoice->next_payment_attempt)) {
// An invoice will automatically be retried. If that fails the status will remain "open" but it has effectively failed.
// We use attempted + next_payment_attempt to check if it will NOT be retried and then record it as Failed in CiviCRM.
return 'Failed';
}
return $statusMap[$invoice->status] ?? '';
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment