Fix: Payment Request status does not update on invoice marked events or when pr amount is changed (#2700)

fixes #2689
This commit is contained in:
Andrew Camilleri
2021-07-28 15:38:26 +02:00
committed by GitHub
parent 0054fe0886
commit 499a231432
2 changed files with 19 additions and 14 deletions

View File

@@ -150,17 +150,20 @@ namespace BTCPayServer.PaymentRequest
{
foreach (var paymentId in PaymentRequestRepository.GetPaymentIdsFromInternalTags(invoiceEvent.Invoice))
{
if (invoiceEvent.Name == InvoiceEvent.ReceivedPayment)
if (invoiceEvent.Name == InvoiceEvent.ReceivedPayment || invoiceEvent.Name == InvoiceEvent.MarkedCompleted || invoiceEvent.Name == InvoiceEvent.MarkedInvalid)
{
await _PaymentRequestService.UpdatePaymentRequestStateIfNeeded(paymentId);
var data = invoiceEvent.Payment.GetCryptoPaymentData();
await _HubContext.Clients.Group(paymentId).SendCoreAsync(PaymentRequestHub.PaymentReceived,
new object[]
{
data.GetValue(),
invoiceEvent.Payment.GetCryptoCode(),
invoiceEvent.Payment.GetPaymentMethodId()?.PaymentType?.ToString()
});
var data = invoiceEvent.Payment?.GetCryptoPaymentData();
if (data != null)
{
await _HubContext.Clients.Group(paymentId).SendCoreAsync(PaymentRequestHub.PaymentReceived,
new object[]
{
data.GetValue(),
invoiceEvent.Payment.GetCryptoCode(),
invoiceEvent.Payment.GetPaymentMethodId()?.PaymentType?.ToString()
}, cancellationToken);
}
}
await InfoUpdated(paymentId);
@@ -168,6 +171,7 @@ namespace BTCPayServer.PaymentRequest
}
else if (evt is PaymentRequestUpdated updated)
{
await _PaymentRequestService.UpdatePaymentRequestStateIfNeeded(updated.PaymentRequestId);
await InfoUpdated(updated.PaymentRequestId);
var expiry = updated.Data.GetBlob().ExpiryDate;

View File

@@ -50,15 +50,16 @@ namespace BTCPayServer.PaymentRequest
currentStatus = Client.Models.PaymentRequestData.PaymentRequestStatus.Expired;
}
if (currentStatus == Client.Models.PaymentRequestData.PaymentRequestStatus.Pending)
if (currentStatus != Client.Models.PaymentRequestData.PaymentRequestStatus.Expired)
{
var rateRules = pr.StoreData.GetStoreBlob().GetRateRules(_BtcPayNetworkProvider);
var invoices = await _PaymentRequestRepository.GetInvoicesForPaymentRequest(pr.Id);
var contributions = _AppService.GetContributionsByPaymentMethodId(blob.Currency, invoices, true);
if (contributions.TotalCurrency >= blob.Amount)
{
currentStatus = Client.Models.PaymentRequestData.PaymentRequestStatus.Completed;
}
currentStatus = contributions.TotalCurrency >= blob.Amount
? Client.Models.PaymentRequestData.PaymentRequestStatus.Completed
: Client.Models.PaymentRequestData.PaymentRequestStatus.Pending;
}
if (currentStatus != pr.Status)