btcpayserver/BTCPayServer/Models/ViewPullPaymentModel.cs
Andrew Camilleri cf206e64a7
Add Lightning payout support (#2517)
* Add Lightning payout support

* Adjust Greenfield API to allow other payment types for Payouts

* Pull payment view: Improve payment method select

* Pull payments view: Update JS

* Pull payments view: Table improvements

* Pull payment form: Remove duplicate name field

* Cleanup Lightning branch after rebasing

* Update swagger documnetation for Lightning support

* Remove required requirement for amount in pull payments

* Adapt Refund endpoint to support multiple playment methods

* Support LNURL Pay for Pull Payments

* Revert "Remove required requirement for amount in pull payments"

This reverts commit 96cb78939d43b7be61ee2d257800ccd1cce45c4c.

* Support Lightning address payout claims

* Fix lightning claim handling and provide better error messages

* Fix tests

Co-authored-by: Dennis Reimann <mail@dennisreimann.de>
2021-10-18 12:37:59 +09:00

111 lines
3.9 KiB
C#

using System;
using System.Collections.Generic;
using BTCPayServer.Abstractions.Extensions;
using System.Linq;
using BTCPayServer.Client.Models;
using BTCPayServer.Data;
using BTCPayServer.Payments;
using BTCPayServer.Services.Rates;
using PullPaymentData = BTCPayServer.Data.PullPaymentData;
namespace BTCPayServer.Models
{
public class ViewPullPaymentModel
{
public ViewPullPaymentModel()
{
}
public ViewPullPaymentModel(PullPaymentData data, DateTimeOffset now)
{
Id = data.Id;
var blob = data.GetBlob();
PaymentMethods = blob.SupportedPaymentMethods;
SelectedPaymentMethod = PaymentMethods.First().ToString();
Archived = data.Archived;
Title = blob.View.Title;
Amount = blob.Limit;
Currency = blob.Currency;
Description = blob.View.Description;
ExpiryDate = data.EndDate is DateTimeOffset dt ? (DateTime?)dt.UtcDateTime : null;
Email = blob.View.Email;
MinimumClaim = blob.MinimumClaim;
EmbeddedCSS = blob.View.EmbeddedCSS;
CustomCSSLink = blob.View.CustomCSSLink;
if (!string.IsNullOrEmpty(EmbeddedCSS))
EmbeddedCSS = $"<style>{EmbeddedCSS}</style>";
IsPending = !data.IsExpired();
var period = data.GetPeriod(now);
if (data.Archived)
{
Status = "Archived";
}
else if (data.IsExpired())
{
Status = "Expired";
}
else if (period is null)
{
Status = "Not yet started";
}
else
{
Status = string.Empty;
}
ResetIn = string.Empty;
if (period?.End is DateTimeOffset pe)
{
var resetIn = (pe - DateTimeOffset.UtcNow);
if (resetIn < TimeSpan.Zero)
resetIn = TimeSpan.Zero;
ResetIn = resetIn.TimeString();
}
}
public string SelectedPaymentMethod { get; set; }
public PaymentMethodId[] PaymentMethods { get; set; }
public string HubPath { get; set; }
public string ResetIn { get; set; }
public string Email { get; set; }
public string Status { get; set; }
public bool IsPending { get; set; }
public decimal AmountCollected { get; set; }
public decimal AmountDue { get; set; }
public decimal ClaimedAmount { get; set; }
public decimal MinimumClaim { get; set; }
public string Destination { get; set; }
public string AmountDueFormatted { get; set; }
public decimal Amount { get; set; }
public string Id { get; set; }
public string Currency { get; set; }
public DateTime? ExpiryDate { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string EmbeddedCSS { get; set; }
public string CustomCSSLink { get; set; }
public List<PayoutLine> Payouts { get; set; } = new List<PayoutLine>();
public DateTimeOffset StartDate { get; set; }
public DateTime LastRefreshed { get; set; }
public CurrencyData CurrencyData { get; set; }
public string AmountCollectedFormatted { get; set; }
public string AmountFormatted { get; set; }
public bool Archived { get; set; }
public class PayoutLine
{
public string Id { get; set; }
public decimal Amount { get; set; }
public string AmountFormatted { get; set; }
public PayoutState Status { get; set; }
public string Destination { get; set; }
public string Currency { get; set; }
public string Link { get; set; }
public string TransactionId { get; set; }
public PaymentMethodId PaymentMethod { get; set; }
}
}
}