1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-12 22:22:32 +01:00

GoCardless offline instant bank payments

This commit is contained in:
David Bomba 2022-11-07 15:06:16 +11:00
parent b5d4f83654
commit 63657fbc0d

View File

@ -16,6 +16,7 @@ use App\Http\Requests\Payments\PaymentWebhookRequest;
use App\Jobs\Util\SystemLogger;
use App\Models\ClientGatewayToken;
use App\Models\GatewayType;
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\PaymentHash;
use App\Models\PaymentType;
@ -286,7 +287,7 @@ class GoCardlessPaymentDriver extends BaseDriver
$hash = PaymentHash::whereJsonContains('data->billing_request', $event['links']['billing_request'])->first();
if(!$hash){
nlog("GoCardless couldn't find a hash, need to abort => Billing Request => " . $event['links']['billing_request']);
nlog("GoCardless: couldn't find a hash, need to abort => Billing Request => " . $event['links']['billing_request']);
return;
}
@ -300,10 +301,39 @@ class GoCardlessPaymentDriver extends BaseDriver
$billing_request->payment_request->links->payment
);
if ($billing_request->status === 'fulfilled') {
$this->processSuccessfulPayment($payment);
if ($billing_request->status === 'fulfilled') {
$invoices = Invoice::whereIn('id', $this->transformKeys(array_column($hash->invoices(), 'invoice_id')))->withTrashed()->get();
$this->go_cardless->client = $invoices->first()->client;
$invoices->each(function ($invoice){
//if payments exist already, they just need to be confirmed.
if($invoice->payments()->exists){
$invoice->payments()->where('status_id', 1)->cursor()->each(function ($payment){
$payment->status_id = 4;
$payment->save();
});
}
});
// remove all paid invoices
$invoices->filter(function ($invoice){
return $invoice->isPayable();
});
//return early if nothing to do
if($invoices->count() == 0){
nlog("GoCardless: Could not harvest any invoices - probably all paid!!");
return;
}
$this->processSuccessfulPayment($payment);
}
}
}