mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-23 06:35:13 +01:00
* wip * Cleanups * UI updates * Update UIFormsController.cs * Make predefined forms usable statically * Add support for pos app + forms * pay request form rough support * invoice form through receipt page * Display form name in inherit from store setting * Do not request additional forms on invoice from pay request * fix up code * move checkoutform id in checkout appearance outside of checkotu v2 toggle * general fixes for form system * fix pav bug * UI updates * Fix warnings in Form builder (#4331) * Fix build warnings about string? Enable nullable on UIFormsController.cs Fixes CS8632 The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. * Clean up lack of space in injected services in Submit() of UIFormsController.cs * Remove unused variables (CS0219) and assignment of nullable value to nullable type (CS8600) * Cleanup double semicolons while we're at tit * Fix: If reverse proxy wasn't well configured, and error message should have been displayed (#4322) * fix monero issue * Server Settings: Update Policies page (#4326) Handles the multiple submit buttons on that page and closes #4319. Contains some UI unifications with other pages and also shows the block explorers without needing to toggle the section via JS. * Change confirmed to settled. (#4328) * POS: Fix null pointer Introduced in #4307, the referenced object needs to be `itemChoice` instead of `choice`. * Add documentation link to plugins (#4329) * Add documentation link to plugins * Minor UI updates Co-authored-by: Dennis Reimann <mail@dennisreimann.de> * Fix flaky test (#4330) * Fix flaky test * Update BTCPayServer/PayoutProcessors/BaseAutomatedPayoutProcessor.cs Co-authored-by: d11n <mail@dennisreimann.de> Co-authored-by: d11n <mail@dennisreimann.de> * Remove invoice and store level form * add form test * fix migration for forms * fix * make pay request form submission redirect to invoice * Refactor FormQuery to only be able to query single store and single form * Put the Authorize at controller level on UIForms * Fix warnings * Fix ef request * Fix query to forms, ensure no permission bypass * Fix modify * Remove storeId from step form * Remove useless storeId parameter * Hide custom form feature in UI * Minor cleanups * Remove custom form options from select for now * More minor syntax cleanups * Update test * Add index - needs migration * Refactoring: Use PostRedirect instead of TempData for data transfer * Remove untested and unfinished code * formResponse should be a JObject, not a string * Fix case for Form type Co-authored-by: Dennis Reimann <mail@dennisreimann.de> Co-authored-by: JesterHodl <103882255+jesterhodl@users.noreply.github.com> Co-authored-by: Nicolas Dorier <nicolas.dorier@gmail.com> Co-authored-by: Andreas Tasch <andy.tasch@gmail.com>
120 lines
4.6 KiB
C#
120 lines
4.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using BTCPayServer.Client.JsonConverters;
|
|
using BTCPayServer.JsonConverters;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Converters;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace BTCPayServer.Client.Models
|
|
{
|
|
public enum InvoiceType
|
|
{
|
|
Standard,
|
|
TopUp
|
|
}
|
|
public class InvoiceDataBase
|
|
{
|
|
[JsonConverter(typeof(StringEnumConverter))]
|
|
public InvoiceType Type { get; set; }
|
|
public string Currency { get; set; }
|
|
public JObject Metadata { get; set; }
|
|
public CheckoutOptions Checkout { get; set; } = new CheckoutOptions();
|
|
public ReceiptOptions Receipt { get; set; } = new ReceiptOptions();
|
|
|
|
public class ReceiptOptions
|
|
{
|
|
public bool? Enabled { get; set; }
|
|
public bool? ShowQR { get; set; }
|
|
public bool? ShowPayments { get; set; }
|
|
[JsonExtensionData]
|
|
public IDictionary<string, JToken> AdditionalData { get; set; }
|
|
|
|
#nullable enable
|
|
/// <summary>
|
|
/// Make sure that the return has all values set by order of priority: invoice/store/default
|
|
/// </summary>
|
|
/// <param name="storeLevelOption"></param>
|
|
/// <param name="invoiceLevelOption"></param>
|
|
/// <returns></returns>
|
|
public static ReceiptOptions Merge(ReceiptOptions? storeLevelOption, ReceiptOptions? invoiceLevelOption)
|
|
{
|
|
storeLevelOption ??= new ReceiptOptions();
|
|
invoiceLevelOption ??= new ReceiptOptions();
|
|
var store = JObject.FromObject(storeLevelOption);
|
|
var inv = JObject.FromObject(invoiceLevelOption);
|
|
var result = JObject.FromObject(CreateDefault());
|
|
var mergeSettings = new JsonMergeSettings() { MergeNullValueHandling = MergeNullValueHandling.Ignore };
|
|
result.Merge(store, mergeSettings);
|
|
result.Merge(inv, mergeSettings);
|
|
var options = result.ToObject<ReceiptOptions>()!;
|
|
return options;
|
|
}
|
|
|
|
public static ReceiptOptions CreateDefault()
|
|
{
|
|
return new ReceiptOptions()
|
|
{
|
|
ShowQR = true,
|
|
Enabled = true,
|
|
ShowPayments = true
|
|
};
|
|
}
|
|
#nullable restore
|
|
}
|
|
public class CheckoutOptions
|
|
{
|
|
|
|
[JsonConverter(typeof(StringEnumConverter))]
|
|
public SpeedPolicy? SpeedPolicy { get; set; }
|
|
|
|
public string[] PaymentMethods { get; set; }
|
|
public string DefaultPaymentMethod { get; set; }
|
|
|
|
[JsonConverter(typeof(TimeSpanJsonConverter.Minutes))]
|
|
[JsonProperty("expirationMinutes")]
|
|
public TimeSpan? Expiration { get; set; }
|
|
[JsonConverter(typeof(TimeSpanJsonConverter.Minutes))]
|
|
[JsonProperty("monitoringMinutes")]
|
|
public TimeSpan? Monitoring { get; set; }
|
|
|
|
public double? PaymentTolerance { get; set; }
|
|
[JsonProperty("redirectURL")]
|
|
public string RedirectURL { get; set; }
|
|
|
|
public bool? RedirectAutomatically { get; set; }
|
|
public bool? RequiresRefundEmail { get; set; } = null;
|
|
public string DefaultLanguage { get; set; }
|
|
public CheckoutType? CheckoutType { get; set; }
|
|
}
|
|
}
|
|
public class InvoiceData : InvoiceDataBase
|
|
{
|
|
public string Id { get; set; }
|
|
public string StoreId { get; set; }
|
|
[JsonConverter(typeof(NumericStringJsonConverter))]
|
|
public decimal Amount { get; set; }
|
|
public string CheckoutLink { get; set; }
|
|
[JsonConverter(typeof(StringEnumConverter))]
|
|
public InvoiceStatus Status { get; set; }
|
|
[JsonConverter(typeof(StringEnumConverter))]
|
|
public InvoiceExceptionStatus AdditionalStatus { get; set; }
|
|
[JsonConverter(typeof(NBitcoin.JsonConverters.DateTimeToUnixTimeConverter))]
|
|
public DateTimeOffset MonitoringExpiration { get; set; }
|
|
[JsonConverter(typeof(NBitcoin.JsonConverters.DateTimeToUnixTimeConverter))]
|
|
public DateTimeOffset ExpirationTime { get; set; }
|
|
[JsonConverter(typeof(NBitcoin.JsonConverters.DateTimeToUnixTimeConverter))]
|
|
public DateTimeOffset CreatedTime { get; set; }
|
|
[JsonProperty(ItemConverterType = typeof(StringEnumConverter))]
|
|
public InvoiceStatus[] AvailableStatusesForManualMarking { get; set; }
|
|
public bool Archived { get; set; }
|
|
}
|
|
public enum InvoiceStatus
|
|
{
|
|
New,
|
|
Processing,
|
|
Expired,
|
|
Invalid,
|
|
Settled
|
|
}
|
|
}
|