This commit is contained in:
Frede Hundewadt 2022-12-29 16:18:26 +01:00
parent b88a5a37a5
commit 76ea8d8fba
17 changed files with 164 additions and 142 deletions

View file

@ -59,13 +59,3 @@
</div> </div>
</div> </div>
</button> </button>
@code {
[Parameter] public SalesReportListView Report { get; set; } = new();
[Parameter] public EventCallback<string> OnShowReport { get; set; }
private void ShowThisReport()
{
OnShowReport.InvokeAsync(Report.ReportDate);
}
}

View file

@ -0,0 +1,15 @@
using Microsoft.AspNetCore.Components;
using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class ReportListItemComponent
{
[Parameter] public SalesReportListView Report { get; set; } = new();
[Parameter] public EventCallback<string> OnShowReport { get; set; }
private void ShowThisReport()
{
OnShowReport.InvokeAsync(Report.ReportDate);
}
}

View file

@ -40,50 +40,6 @@
@foreach (var report in ReportList) @foreach (var report in ReportList)
{ {
<ReportListItemComponent Report="report" OnShowReport="ShowThisReport" /> <ReportListItemComponent Report="report" OnShowReport="ShowThisReport" />
@*
<a class="list-group-item list-group-item-action" href="/sales-reports/view/@report.ReportDate">
<div class="row">
<div class="col">
@report.ReportDate
</div>
<div class="col">
@{
switch (report.DayTypeEnum)
{
case "Sales":
<span>Salgsdag</span>
break;
case "SickLeave":
<span>Sygdom</span>
break;
case "Office":
<span>Kontordag</span>
break;
case "Meeting":
<span>Salgsmøde</span>
break;
case "Leave":
<span>Ferie</span>
break;
case "Supervisor":
<span>Medkørende Supervisor</span>
break;
}
}
</div>
<div class="col">
@(report.DayTypeEnum == "Sales" ? report.FromDateTime.Split(" ")[1] : report.FromDateTime.Split(" ")[0])
</div>
<div class="col">
@(report.DayTypeEnum == "Sales" ? report.ToDateTime.Split(" ")[1] : report.ToDateTime.Split(" ")[0])
</div>
<div class="col text-end">
@report.Turnover
</div>
</div>
</a>
*@
} }
} }
else else

View file

@ -23,7 +23,9 @@ public partial class ReportTableComponent
{ {
[Parameter] public List<SalesReportListView> ReportList { get; set; } = new(); [Parameter] public List<SalesReportListView> ReportList { get; set; } = new();
[Parameter] public EventCallback<string> OnShowReport { get; set; } [Parameter] public EventCallback<string> OnShowReport { get; set; }
private List<SalesReportListView> Reports { get; set; } = new(); private List<SalesReportListView> Reports { get; set; } = new();
protected override void OnParametersSet() protected override void OnParametersSet()
{ {
Reports = ReportList; Reports = ReportList;
@ -33,5 +35,4 @@ public partial class ReportTableComponent
{ {
OnShowReport.InvokeAsync(reportDate); OnShowReport.InvokeAsync(reportDate);
} }
} }

View file

@ -4,6 +4,6 @@ public enum PTarget
{ {
None, None,
All, All,
Report, FrontPage,
Order OrderPage
} }

View file

@ -18,14 +18,13 @@
@using Wonky.Client.Components @using Wonky.Client.Components
@page "/sales-reports" @page "/sales-reports"
<div class="alert text-black border border-1"> <div class="row bg-dark text-white rounded-2">
<div class="col"> <div class="col">
<h3>Rapport Arkiv</h3> <h3>Rapport Arkiv --- crmreportlistpage</h3>
</div> </div>
</div> </div>
<ReportTableComponent ReportList="ReportList" /> <ReportTableComponent ReportList="ReportList" OnShowReport="ShowThisReport" />
@if (Working) @if (Working)
{ {

View file

@ -26,6 +26,8 @@ public partial class CrmReportListPage : IDisposable
{ {
[Inject] public ICrmReportHttpRepository ReportRepo { get; set; } [Inject] public ICrmReportHttpRepository ReportRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILogger<CrmReportListPage> Logger { get; set; }
private List<SalesReportListView> ReportList { get; set; } = new(); private List<SalesReportListView> ReportList { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
@ -34,11 +36,20 @@ public partial class CrmReportListPage : IDisposable
{ {
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
await Task.Delay(1000);
ReportList = await ReportRepo.GetReports(); ReportList = await ReportRepo.GetReports();
if (ReportList.Any())
ReportList = ReportList.OrderByDescending(x => x.ReportDate).ToList();
Working = false; Working = false;
} }
private void ShowThisReport(string reportDate)
{
Logger.LogDebug("crmreportlistpage => showthisreport <= {}", reportDate);
Navigator.NavigateTo($"/sales-reports/view/{reportDate}");
}
public void Dispose() public void Dispose()
{ {
Interceptor.DisposeEvent(); Interceptor.DisposeEvent();

View file

@ -26,10 +26,10 @@
<WorkDateComponent OnChangedCallback="FetchReport"/> <WorkDateComponent OnChangedCallback="FetchReport"/>
</div> </div>
<div class="col-sm-2 d-grid"> <div class="col-sm-2 d-grid">
<button class="btn btn-warning" @onclick="() => Print(PTarget.Report)"><i class="bi-printer"></i> Forside</button> <button class="btn btn-warning" @onclick="() => Print(PTarget.FrontPage)"><i class="bi-printer"></i> Forside</button>
</div> </div>
<div class="col-sm-2 d-grid"> <div class="col-sm-2 d-grid">
<button class="btn btn-success" @onclick="() => Print(PTarget.Order)"><i class="bi-printer"></i> Ordrer</button> <button class="btn btn-success" @onclick="() => Print(PTarget.OrderPage)"><i class="bi-printer"></i> Ordrer</button>
</div> </div>
<div class="col-sm-2 d-grid"> <div class="col-sm-2 d-grid">
<button class="btn btn-primary" type="button" onclick="window.print();"><i class="bi-printer"></i> Rapport</button> <button class="btn btn-primary" type="button" onclick="window.print();"><i class="bi-printer"></i> Rapport</button>

View file

@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpInterfaces; using Wonky.Client.HttpInterfaces;
using Wonky.Client.Models; using Wonky.Client.Models;
using Wonky.Client.Services;
using Wonky.Entity.Views; using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
@ -30,30 +31,40 @@ public partial class CrmReportViewPage : IDisposable
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ILogger<CrmReportViewPage> Logger { get; set; } [Inject] public ILogger<CrmReportViewPage> Logger { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
private UserPref Prefs { get; set; } = new();
private ReportView Report { get; set; } = new(); private ReportView Report { get; set; } = new();
private List<ReportItemView> Activities { get; set; } = new (); private List<ReportItemView> Activities { get; set; } = new ();
private bool Working { get; set; } private bool Working { get; set; }
private UserInfoView UserInfo { get; set; } = new(); private UserInfoView UserInfo { get; set; } = new();
private string ReturnUrl = "";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu"); UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
ProfileService.OnChange += ProfileServiceOnOnChange;
await ProfileService.SetWorkDate(DateTime.Parse(ReportDate));
if(!string.IsNullOrWhiteSpace(ReportDate)) if(!string.IsNullOrWhiteSpace(ReportDate))
await FetchReport(ReportDate); await FetchReport(ReportDate);
} }
private void Print(PTarget target) private void Print(PTarget target)
{ {
var returnUrl = new Uri(Navigator.Uri).AbsolutePath; ReturnUrl = new Uri(Navigator.Uri).AbsolutePath;
switch (target) switch (target)
{ {
case PTarget.Order: case PTarget.OrderPage:
Navigator.NavigateTo($"/print/orders/{UserInfo.CountryCode.ToLower()}/{UserInfo.Id}/{ReportDate}?returnUrl={returnUrl}"); Navigator.NavigateTo($"/print/orders/{UserInfo.CountryCode.ToLower()}/{UserInfo.Id}/{ReportDate}?returnUrl={ReturnUrl}");
break; break;
case PTarget.Report: case PTarget.FrontPage:
Navigator.NavigateTo($"/print/report/{UserInfo.CountryCode.ToLower()}/{UserInfo.Id}/{ReportDate}?returnUrl={returnUrl}"); Navigator.NavigateTo($"/print/report/{UserInfo.CountryCode.ToLower()}/{UserInfo.Id}/{ReportDate}?returnUrl={ReturnUrl}");
break; break;
case PTarget.None: case PTarget.None:
break; break;
@ -69,8 +80,13 @@ public partial class CrmReportViewPage : IDisposable
// remove busy signal if report is empty // remove busy signal if report is empty
if (string.IsNullOrWhiteSpace(Report.ReportData.ReportDate)) if (string.IsNullOrWhiteSpace(Report.ReportData.ReportDate))
{
Working = false; Working = false;
ReportDate = workDate; }
// ensure the browser address bar contains the correct link
Navigator.NavigateTo($"/sales-reports/view/{workDate}", false, true);
// return if we are already at it // return if we are already at it
if (Working) if (Working)
{ {
@ -80,24 +96,36 @@ public partial class CrmReportViewPage : IDisposable
// reset variables // reset variables
Report = new ReportView(); Report = new ReportView();
Activities = new List<ReportItemView>(); Activities = new List<ReportItemView>();
// set busy signal // set busy signal
Working = true; Working = true;
// fetch report // fetch report
Report = await ReportRepo.GetReport(workDate); Report = await ReportRepo.GetReport(workDate);
// extract activities // extract activities
Activities = Report.ReportItems.Where(x => x.Lines.Any()).ToList(); Activities = Report.ReportItems.Where(x => x.Lines.Any()).ToList();
// store the report locally // store the report locally
if (!string.IsNullOrWhiteSpace(Report.ReportData.ReportDate)) if (!string.IsNullOrWhiteSpace(Report.ReportData.ReportDate))
{ {
await Storage.SetItemAsync($"{UserInfo.Id}-{Report.ReportData.ReportDate}", Report); await Storage.SetItemAsync($"{UserInfo.Id}-{Report.ReportData.ReportDate}", Report);
} }
// remove busy signal // remove busy signal
Working = false; Working = false;
} }
private void ProfileServiceOnOnChange(UserPref userPref)
{
Prefs = userPref;
ReportDate = Prefs.WorkDate;
StateHasChanged();
}
public void Dispose() public void Dispose()
{ {
ProfileService.OnChange -= ProfileServiceOnOnChange;
Interceptor.DisposeEvent(); Interceptor.DisposeEvent();
} }
} }

View file

@ -41,9 +41,11 @@ public partial class OfficeReportListPage : IDisposable
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
UserInfo = await UserRepo.GetAdvisorInfo(UserId); UserInfo = await UserRepo.GetAdvisorInfo(UserId);
var reports = await ReportRepo.GetReports(UserId); var reports = await ReportRepo.GetReports(UserId);
if (reports.Any()) if (reports.Any())
ActivityReports = reports.OrderByDescending(x => x.ReportDate).ToList(); ActivityReports = reports.OrderByDescending(x => x.ReportDate).ToList();
Working = false; Working = false;
} }

View file

@ -26,10 +26,10 @@
<WorkDateComponent OnChangedCallback="FetchUserReport"/> <WorkDateComponent OnChangedCallback="FetchUserReport"/>
</div> </div>
<div class="col-sm-2 d-grid"> <div class="col-sm-2 d-grid">
<button class="btn btn-warning" @onclick="() => Print(PTarget.Report)"><i class="bi-printer"></i> Forside</button> <button class="btn btn-warning" @onclick="() => Print(PTarget.FrontPage)"><i class="bi-printer"></i> Forside</button>
</div> </div>
<div class="col-sm-2 d-grid"> <div class="col-sm-2 d-grid">
<button class="btn btn-success" @onclick="() => Print(PTarget.Order)"><i class="bi-printer"></i> Ordrer</button> <button class="btn btn-success" @onclick="() => Print(PTarget.OrderPage)"><i class="bi-printer"></i> Ordrer</button>
</div> </div>
<div class="col-sm-2 d-grid"> <div class="col-sm-2 d-grid">
<button class="btn btn-primary" type="button" onclick="window.print();"><i class="bi-printer"></i> Rapport</button> <button class="btn btn-primary" type="button" onclick="window.print();"><i class="bi-printer"></i> Rapport</button>

View file

@ -83,33 +83,28 @@ public partial class OfficeReportViewPage : IDisposable
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
private UserPref Prefs = new(); private UserPref Prefs = new();
private string ReturnUrl = ""; private string ReturnUrl = "";
private string PrintUrl = "";
protected override async Task OnParametersSetAsync() protected override async Task OnParametersSetAsync()
{ {
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
await ProfileService.SetWorkDate(DateTime.Parse(ReportDate));
ProfileService.OnChange += ProfileServiceOnOnChange; ProfileService.OnChange += ProfileServiceOnOnChange;
await ProfileService.SetWorkDate(DateTime.Parse(ReportDate));
//ReturnUrl = new Uri(Navigator.Uri).AbsolutePath.Replace($"/{ReportDate}", "");
ReturnUrl = new Uri(Navigator.Uri).AbsolutePath;
Logger.LogDebug("Print() => returnUrl <= {}", ReturnUrl);
await FetchUserReport(ReportDate); await FetchUserReport(ReportDate);
} }
private void Print(PTarget target) private void Print(PTarget target)
{ {
ReturnUrl = new Uri(Navigator.Uri).AbsolutePath;
Logger.LogDebug("Print() => returnUrl <= {}", ReturnUrl);
switch (target) switch (target)
{ {
case PTarget.Order: case PTarget.OrderPage:
Navigator.NavigateTo($"/print/orders/{CountryCode}/{UserId}/{ReportDate}?returnUrl={ReturnUrl}"); Navigator.NavigateTo($"/print/orders/{CountryCode}/{UserId}/{ReportDate}?returnUrl={ReturnUrl}");
break; break;
case PTarget.Report: case PTarget.FrontPage:
Navigator.NavigateTo($"/print/report/{CountryCode}/{UserId}/{ReportDate}?returnUrl={ReturnUrl}"); Navigator.NavigateTo($"/print/report/{CountryCode}/{UserId}/{ReportDate}?returnUrl={ReturnUrl}");
break; break;
case PTarget.None: case PTarget.None:
@ -132,34 +127,48 @@ public partial class OfficeReportViewPage : IDisposable
{ {
Working = false; Working = false;
} }
ReportDate = workDate;
// ensure the browser address bar contains the correct link
Navigator.NavigateTo($"/office/users/advisors/{CountryCode}/{UserId}/reports/{workDate}", false, true); Navigator.NavigateTo($"/office/users/advisors/{CountryCode}/{UserId}/reports/{workDate}", false, true);
// return if we are already at it // return if we are already at it
if (Working) if (Working)
{ {
return; return;
} }
// reset variables // reset variables
Report = new ReportView(); Report = new ReportView();
Activities = new List<ReportItemView>(); Activities = new List<ReportItemView>();
// set busy signal // set busy signal
Working = true; Working = true;
// fetch
// fetch report
Report = await ReportRepo.GetReport(UserId, workDate); Report = await ReportRepo.GetReport(UserId, workDate);
// extract activities // extract activities
Activities = Report.ReportItems.Where(x => x.Lines.Any()).ToList(); Activities = Report.ReportItems.Where(x => x.Lines.Any()).ToList();
// store locally // store locally
if (!string.IsNullOrWhiteSpace(Report.ReportData.ReportDate)) if (!string.IsNullOrWhiteSpace(Report.ReportData.ReportDate))
{ {
await Storage.SetItemAsync($"{UserId}-{workDate}", Report); await Storage.SetItemAsync($"{UserId}-{workDate}", Report);
} }
// remove busy signal // remove busy signal
Working = false; Working = false;
} }
private void ProfileServiceOnOnChange(UserPref userPref) private void ProfileServiceOnOnChange(UserPref userPref)
{ {
Logger.LogDebug("OfficeReportViewPage => ProfileServiceOnOnChange");
Prefs = userPref; Prefs = userPref;
Logger.LogDebug("OfficeReportViewPage => ProfileServiceOnOnChange => Prefs.WorkDate <= {}", Prefs.WorkDate);
ReportDate = Prefs.WorkDate; ReportDate = Prefs.WorkDate;
StateHasChanged(); StateHasChanged();
} }

View file

@ -17,7 +17,7 @@
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@page "/print/orders/{CountryCode}/{UserId}/{ReportDate}" @page "/print/report/{CountryCode}/{UserId}/{ReportDate}"
@attribute [Authorize(Roles = "Admin,Advisor")] @attribute [Authorize(Roles = "Admin,Advisor")]
<div class="row mb-3 d-print-none"> <div class="row mb-3 d-print-none">
@ -29,7 +29,21 @@
</div> </div>
</div> </div>
@foreach (var item in Items.Where(item => item.StatusTypeEnum.ToLower() == "order" && item.ProcessStatusEnum.ToLower() == "none")) <div class="report-main d-print-grid">
{ <PageTitle>@Report.ReportData.Name</PageTitle>
<ReportItemComponent ReportItem="@item"></ReportItemComponent> <div class="row">
} <div class="col text-center align-content-center">
<h3>@Report.ReportData.Name</h3>
</div>
</div>
<div class="row">
<div class="w-75">
<ReportSummaryComponent ReportData="Report.ReportData"/>
</div>
<div class="w-25">
<ReportDistanceLedgerComponent ReportData="Report.ReportData"/>
</div>
</div>
<OfficeActivityTableComponent ActivityList="Report.ReportItems"/>
<ReportActivityLedgerComponent ReportData="Report.ReportData"/>
</div>

View file

@ -13,6 +13,7 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
// //
using System.Runtime.CompilerServices;
using Blazored.LocalStorage; using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop; using Microsoft.JSInterop;
@ -31,9 +32,18 @@ public partial class PrintFrontPage
[Inject] private IJSRuntime JSRuntime { get; set; } [Inject] private IJSRuntime JSRuntime { get; set; }
[Inject] public ILogger<PrintFrontPage> Logger { get; set; } [Inject] public ILogger<PrintFrontPage> Logger { get; set; }
private ReportView Report { get; set; } = new(); private ReportView Report { get; set; } = new();
private List<ReportItemView> Items { get; set; } = new();
private IJSObjectReference JsModule { get; set; } private IJSObjectReference JsModule { get; set; }
private string ReturnUrl { get; set; } = ""; private string ReturnUrl { get; set; } = "";
protected override async Task OnInitializedAsync()
{
var uri = new Uri(Navigator.Uri);
var query = Utils.ParseQuery(uri.Query[1..]);
ReturnUrl = string.IsNullOrWhiteSpace(query["returnUrl"]) ? "/" : $"{query["returnUrl"]}" ;
Report = await Storage.GetItemAsync<ReportView>($"{UserId}-{ReportDate}");
}
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (firstRender)
@ -43,16 +53,6 @@ public partial class PrintFrontPage
} }
} }
protected override async Task OnInitializedAsync()
{
var uri = new Uri(Navigator.Uri);
var query = Utils.ParseQuery(uri.Query[1..]);
ReturnUrl = string.IsNullOrWhiteSpace(query["returnUrl"]) ? "/" : $"{query["returnUrl"]}/{ReportDate}";
Report = await Storage.GetItemAsync<ReportView>($"{UserId}-{ReportDate}");
Items = Report.ReportItems;
}
private async Task Print() private async Task Print()
{ {
await JsModule.InvokeVoidAsync("printInvoke"); await JsModule.InvokeVoidAsync("printInvoke");

View file

@ -17,7 +17,7 @@
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@page "/print/report/{CountryCode}/{UserId}/{ReportDate}" @page "/print/orders/{CountryCode}/{UserId}/{ReportDate}"
@attribute [Authorize(Roles = "Admin,Advisor")] @attribute [Authorize(Roles = "Admin,Advisor")]
<div class="row mb-3 d-print-none"> <div class="row mb-3 d-print-none">
@ -29,21 +29,18 @@
</div> </div>
</div> </div>
<div class="report-main d-print-grid"> @if (Items.Any(item => item.StatusTypeEnum.ToLower() == "order" && item.ProcessStatusEnum.ToLower() == "none"))
<PageTitle>@Report.ReportData.Name</PageTitle> {
foreach (var item in Items.Where(item => item.StatusTypeEnum.ToLower() == "order" && item.ProcessStatusEnum.ToLower() == "none"))
{
<ReportItemComponent ReportItem="@item"></ReportItemComponent>
}
}
else
{
<div class="row"> <div class="row">
<div class="col text-center align-content-center"> <div class="col">
<h3>@Report.ReportData.Name</h3> <h3 class="text-center fw-bold">Der er ingen ordrer til udskrivning</h3>
</div> </div>
</div> </div>
<div class="row"> }
<div class="w-75">
<ReportSummaryComponent ReportData="Report.ReportData"/>
</div>
<div class="w-25">
<ReportDistanceLedgerComponent ReportData="Report.ReportData"/>
</div>
</div>
<OfficeActivityTableComponent ActivityList="Report.ReportItems"/>
<ReportActivityLedgerComponent ReportData="Report.ReportData"/>
</div>

View file

@ -13,7 +13,6 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
// //
using System.Runtime.CompilerServices;
using Blazored.LocalStorage; using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop; using Microsoft.JSInterop;
@ -22,7 +21,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class PrintReportPage public partial class PrintOrderPage
{ {
[Parameter] public string CountryCode { get; set; } = ""; [Parameter] public string CountryCode { get; set; } = "";
[Parameter] public string UserId { get; set; } = ""; [Parameter] public string UserId { get; set; } = "";
@ -30,20 +29,11 @@ public partial class PrintReportPage
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] private IJSRuntime JSRuntime { get; set; } [Inject] private IJSRuntime JSRuntime { get; set; }
[Inject] public ILogger<PrintReportPage> Logger { get; set; } [Inject] public ILogger<PrintOrderPage> Logger { get; set; }
private ReportView Report { get; set; } = new(); private ReportView Report { get; set; } = new();
private List<ReportItemView> Items { get; set; } = new();
private IJSObjectReference JsModule { get; set; } private IJSObjectReference JsModule { get; set; }
private string ReturnUrl { get; set; } = ""; private string ReturnUrl { get; set; } = "";
protected override async Task OnInitializedAsync()
{
var uri = new Uri(Navigator.Uri);
var query = Utils.ParseQuery(uri.Query[1..]);
ReturnUrl = string.IsNullOrWhiteSpace(query["returnUrl"]) ? "/" : $"{query["returnUrl"]}/{ReportDate}" ;
Report = await Storage.GetItemAsync<ReportView>($"{UserId}-{ReportDate}");
}
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (firstRender)
@ -53,6 +43,16 @@ public partial class PrintReportPage
} }
} }
protected override async Task OnInitializedAsync()
{
var uri = new Uri(Navigator.Uri);
var query = Utils.ParseQuery(uri.Query[1..]);
ReturnUrl = string.IsNullOrWhiteSpace(query["returnUrl"]) ? "/" : $"{query["returnUrl"]}";
Report = await Storage.GetItemAsync<ReportView>($"{UserId}-{ReportDate}");
Items = Report.ReportItems;
}
private async Task Print() private async Task Print()
{ {
await JsModule.InvokeVoidAsync("printInvoke"); await JsModule.InvokeVoidAsync("printInvoke");

View file

@ -1,7 +1,7 @@
{ {
"appInfo": { "appInfo": {
"name": "Wonky Client", "name": "Wonky Client",
"version": "0.87.7", "version": "0.90",
"rc": true, "rc": true,
"sandBox": false, "sandBox": false,
"image": "grumpy-coder.png" "image": "grumpy-coder.png"