POS: Set ViewType via optional URL parameter

Falls back to the DefaultView defined in the POS settings.

POS: Fix POST-Route
This commit is contained in:
Dennis Reimann
2020-05-26 17:38:30 +02:00
parent fad53a9fa2
commit b7ec22ee89
6 changed files with 23 additions and 16 deletions

View File

@@ -381,8 +381,17 @@ namespace BTCPayServer.Tests
s.Driver.FindElement(By.Id("DefaultView")).SendKeys("Cart" + Keys.Enter); s.Driver.FindElement(By.Id("DefaultView")).SendKeys("Cart" + Keys.Enter);
s.Driver.FindElement(By.Id("SaveSettings")).ForceClick(); s.Driver.FindElement(By.Id("SaveSettings")).ForceClick();
s.Driver.FindElement(By.Id("ViewApp")).ForceClick(); s.Driver.FindElement(By.Id("ViewApp")).ForceClick();
s.Driver.SwitchTo().Window(s.Driver.WindowHandles.Last());
var posBaseUrl = s.Driver.Url;
Assert.True(s.Driver.PageSource.Contains("Tea shop"), "Unable to create PoS"); Assert.True(s.Driver.PageSource.Contains("Tea shop"), "Unable to create PoS");
Assert.True(s.Driver.PageSource.Contains("Cart"), "PoS not showing correct default view");
s.Driver.Url = posBaseUrl + "/static";
Assert.False(s.Driver.PageSource.Contains("Cart"), "Static PoS not showing correct view");
s.Driver.Url = posBaseUrl + "/cart";
Assert.True(s.Driver.PageSource.Contains("Cart"), "Cart PoS not showing correct view");
s.Driver.Quit(); s.Driver.Quit();
} }
} }

View File

@@ -41,14 +41,16 @@ namespace BTCPayServer.Controllers
private readonly UserManager<ApplicationUser> _UserManager; private readonly UserManager<ApplicationUser> _UserManager;
[HttpGet] [HttpGet]
[Route("/apps/{appId}/pos")] [Route("/apps/{appId}/pos/{viewType?}")]
[XFrameOptionsAttribute(XFrameOptionsAttribute.XFrameOptions.AllowAll)] [XFrameOptionsAttribute(XFrameOptionsAttribute.XFrameOptions.AllowAll)]
public async Task<IActionResult> ViewPointOfSale(string appId) public async Task<IActionResult> ViewPointOfSale(string appId, PosViewType viewType = PosViewType.Unspecified)
{ {
var app = await _AppService.GetApp(appId, AppType.PointOfSale); var app = await _AppService.GetApp(appId, AppType.PointOfSale);
if (app == null) if (app == null)
return NotFound(); return NotFound();
var settings = app.GetSettings<PointOfSaleSettings>(); var settings = app.GetSettings<PointOfSaleSettings>();
if (viewType == PosViewType.Unspecified)
viewType = settings.DefaultView;
var numberFormatInfo = _AppService.Currencies.GetNumberFormatInfo(settings.Currency) ?? _AppService.Currencies.GetNumberFormatInfo("USD"); var numberFormatInfo = _AppService.Currencies.GetNumberFormatInfo(settings.Currency) ?? _AppService.Currencies.GetNumberFormatInfo("USD");
double step = Math.Pow(10, -(numberFormatInfo.CurrencyDecimalDigits)); double step = Math.Pow(10, -(numberFormatInfo.CurrencyDecimalDigits));
@@ -57,7 +59,7 @@ namespace BTCPayServer.Controllers
{ {
Title = settings.Title, Title = settings.Title,
Step = step.ToString(CultureInfo.InvariantCulture), Step = step.ToString(CultureInfo.InvariantCulture),
DefaultView = settings.DefaultView, ViewType = viewType,
ShowCustomAmount = settings.ShowCustomAmount, ShowCustomAmount = settings.ShowCustomAmount,
ShowDiscount = settings.ShowDiscount, ShowDiscount = settings.ShowDiscount,
EnableTips = settings.EnableTips, EnableTips = settings.EnableTips,
@@ -85,7 +87,7 @@ namespace BTCPayServer.Controllers
} }
[HttpPost] [HttpPost]
[Route("/apps/{appId}/pos")] [Route("/apps/{appId}/pos/{viewType?}")]
[XFrameOptionsAttribute(XFrameOptionsAttribute.XFrameOptions.AllowAll)] [XFrameOptionsAttribute(XFrameOptionsAttribute.XFrameOptions.AllowAll)]
[IgnoreAntiforgeryToken] [IgnoreAntiforgeryToken]
[EnableCors(CorsPolicies.All)] [EnableCors(CorsPolicies.All)]

View File

@@ -69,7 +69,7 @@ namespace BTCPayServer.Controllers
var controller = (AppsPublicController)serviceProvider.GetService(typeof(AppsPublicController)); var controller = (AppsPublicController)serviceProvider.GetService(typeof(AppsPublicController));
controller.Url = Url; controller.Url = Url;
controller.ControllerContext = ControllerContext; controller.ControllerContext = ControllerContext;
var res = await controller.ViewPointOfSale(appId) as ViewResult; var res = await controller.ViewPointOfSale(appId, PosViewType.Unspecified) as ViewResult;
if (res != null) if (res != null)
{ {
res.ViewName = "/Views/AppsPublic/ViewPointOfSale.cshtml"; res.ViewName = "/Views/AppsPublic/ViewPointOfSale.cshtml";

View File

@@ -33,9 +33,9 @@ namespace BTCPayServer.Models.AppViewModels
public CurrencyInfoData CurrencyInfo { get; set; } public CurrencyInfoData CurrencyInfo { get; set; }
public PosViewType DefaultView { get; set; } public PosViewType ViewType { get; set; }
public bool IsCartView { get { return DefaultView == PosViewType.Cart; } } public bool IsCartView { get { return ViewType == PosViewType.Cart; } }
public bool ShowCustomAmount { get; set; } public bool ShowCustomAmount { get; set; }
public bool ShowDiscount { get; set; } public bool ShowDiscount { get; set; }
public bool EnableTips { get; set; } public bool EnableTips { get; set; }

View File

@@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BTCPayServer.Services.Apps namespace BTCPayServer.Services.Apps
{ {
public enum AppType public enum AppType
@@ -13,7 +8,8 @@ namespace BTCPayServer.Services.Apps
public enum PosViewType public enum PosViewType
{ {
Static, Unspecified = -1,
Cart Static = 0,
Cart = 1
} }
} }

View File

@@ -38,7 +38,7 @@
<div class="form-group"> <div class="form-group">
<div class="form-group"> <div class="form-group">
<label asp-for="DefaultView" class="control-label"></label>* <label asp-for="DefaultView" class="control-label"></label>*
<select asp-for="DefaultView" asp-items="@Html.GetEnumSelectList<PosViewType>()" class="form-control"></select> <select asp-for="DefaultView" asp-items="@Html.GetEnumSelectList<PosViewType>().Where(type => Convert.ToInt32(type.Value) >= 0)" class="form-control"></select>
<span asp-validation-for="DefaultView" class="text-danger"></span> <span asp-validation-for="DefaultView" class="text-danger"></span>
</div> </div>
<div class="form-check"> <div class="form-check">