From ce7ec0646fdec1b76019b9f05695ee28977d8d39 Mon Sep 17 00:00:00 2001 From: Frede Hundewadt Date: Sat, 25 Mar 2023 15:59:34 +0100 Subject: [PATCH] WIP: supervisor --- .../OfficeReportListComponent.razor | 2 +- .../OfficeReportListComponent.razor.cs | 10 + .../Components/ProcessStateComponent.razor.cs | 2 +- .../ReportActivityListComponent.razor | 74 +++++++ .../ReportActivityListComponent.razor.cs | 33 +++ .../Components/ReportItemComponent.razor.cs | 5 +- .../Components/ReportListComponent.razor | 2 +- .../Components/ReportListComponent.razor.cs | 8 +- .../Components/ReportListItemComponent.razor | 6 +- .../ReportListItemComponent.razor.cs | 4 +- Wonky.Client/Helpers/Utils.cs | 2 +- .../Local.Services/IUserInfoService.cs | 1 + .../Local.Services/UserInfoService.cs | 21 +- .../Pages/AdvisorCustomerCreatePage.razor.cs | 2 +- .../Pages/AdvisorReportCreatePage.razor | 30 +-- .../Pages/AdvisorReportCreatePage.razor.cs | 9 + Wonky.Client/Pages/Index.razor | 4 +- ...Page.razor => OfficeAdvisorListPage.razor} | 0 ...azor.cs => OfficeAdvisorListPage.razor.cs} | 2 +- ...azor => OfficeAdvisorReportListPage.razor} | 0 ...s => OfficeAdvisorReportListPage.razor.cs} | 4 +- .../SupervisorAdvisorReportViewPage.razor | 47 +++++ .../SupervisorAdvisorReportViewPage.razor.cs | 188 ++++++++++++++++++ .../Pages/SupervisorAdvisorViewPage.razor | 34 ++++ .../Pages/SupervisorAdvisorViewPage.razor.cs | 64 ++++++ Wonky.Client/Pages/SupervisorHomePage.razor | 11 + .../Pages/SupervisorHomePage.razor.cs | 6 + ...age.razor => SupervisorUserListPage.razor} | 7 +- ...zor.cs => SupervisorUserListPage.razor.cs} | 11 +- .../Pages/SupervisorVisitViewPage.razor | 155 +++++++++++++++ .../Pages/SupervisorVisitViewPage.razor.cs | 76 +++++++ .../Pages/SupervisorVisitViewPage.razor.css | 21 ++ .../Pages/WarehouseOrderViewPage.razor | 2 +- Wonky.Client/Shared/NavMenu-backup.razor | 146 ++++++++++++++ Wonky.Client/Shared/NavMenu-backup.razor.css | 81 ++++++++ Wonky.Client/Shared/NavMenu.razor | 9 + Wonky.Client/Wonky.Client.csproj | 4 - Wonky.Client/wwwroot/appsettings.json | 2 +- 38 files changed, 1040 insertions(+), 45 deletions(-) create mode 100644 Wonky.Client/Components/ReportActivityListComponent.razor create mode 100644 Wonky.Client/Components/ReportActivityListComponent.razor.cs rename Wonky.Client/Pages/{OfficeUserAdvisorListPage.razor => OfficeAdvisorListPage.razor} (100%) rename Wonky.Client/Pages/{OfficeUserAdvisorListPage.razor.cs => OfficeAdvisorListPage.razor.cs} (97%) rename Wonky.Client/Pages/{OfficeUserAdvisorReportListPage.razor => OfficeAdvisorReportListPage.razor} (100%) rename Wonky.Client/Pages/{OfficeUserAdvisorReportListPage.razor.cs => OfficeAdvisorReportListPage.razor.cs} (97%) create mode 100644 Wonky.Client/Pages/SupervisorAdvisorReportViewPage.razor create mode 100644 Wonky.Client/Pages/SupervisorAdvisorReportViewPage.razor.cs create mode 100644 Wonky.Client/Pages/SupervisorAdvisorViewPage.razor create mode 100644 Wonky.Client/Pages/SupervisorAdvisorViewPage.razor.cs create mode 100644 Wonky.Client/Pages/SupervisorHomePage.razor create mode 100644 Wonky.Client/Pages/SupervisorHomePage.razor.cs rename Wonky.Client/Pages/{SupervisorAdvisorListPage.razor => SupervisorUserListPage.razor} (95%) rename Wonky.Client/Pages/{SupervisorAdvisorListPage.razor.cs => SupervisorUserListPage.razor.cs} (79%) create mode 100644 Wonky.Client/Pages/SupervisorVisitViewPage.razor create mode 100644 Wonky.Client/Pages/SupervisorVisitViewPage.razor.cs create mode 100644 Wonky.Client/Pages/SupervisorVisitViewPage.razor.css create mode 100644 Wonky.Client/Shared/NavMenu-backup.razor create mode 100644 Wonky.Client/Shared/NavMenu-backup.razor.css diff --git a/Wonky.Client/Components/OfficeReportListComponent.razor b/Wonky.Client/Components/OfficeReportListComponent.razor index d40b9027..6ada16cd 100644 --- a/Wonky.Client/Components/OfficeReportListComponent.razor +++ b/Wonky.Client/Components/OfficeReportListComponent.razor @@ -40,7 +40,7 @@ { @foreach (var report in ReportList) { - + } } else diff --git a/Wonky.Client/Components/OfficeReportListComponent.razor.cs b/Wonky.Client/Components/OfficeReportListComponent.razor.cs index 463369d9..6a600719 100644 --- a/Wonky.Client/Components/OfficeReportListComponent.razor.cs +++ b/Wonky.Client/Components/OfficeReportListComponent.razor.cs @@ -20,10 +20,20 @@ namespace Wonky.Client.Components; public partial class OfficeReportListComponent { + // ################################################################## [Parameter] public List ReportList { get; set; } = new(); [Parameter] public string UserId { get; set; } = ""; [Parameter] public string CountryCode { get; set; } = ""; [Parameter] public EventCallback OnShowReport { get; set; } + + + protected override void OnParametersSet() + { + if (ReportList.Any()) + ReportList = ReportList.OrderByDescending(x => x.ReportDate).ToList(); + } + + private void ShowThisReport(string reportDate) { OnShowReport.InvokeAsync(reportDate); diff --git a/Wonky.Client/Components/ProcessStateComponent.razor.cs b/Wonky.Client/Components/ProcessStateComponent.razor.cs index 72225438..984e8061 100644 --- a/Wonky.Client/Components/ProcessStateComponent.razor.cs +++ b/Wonky.Client/Components/ProcessStateComponent.razor.cs @@ -30,7 +30,7 @@ public partial class ProcessStateComponent "the-bad" => "file-earmark-check", "the-ugly" => "box2-fill", "the-dead" => "truck", - "accepted" => "printer", + "printed" => "printer", _ => "question-square" }; } diff --git a/Wonky.Client/Components/ReportActivityListComponent.razor b/Wonky.Client/Components/ReportActivityListComponent.razor new file mode 100644 index 00000000..ed407702 --- /dev/null +++ b/Wonky.Client/Components/ReportActivityListComponent.razor @@ -0,0 +1,74 @@ +@* Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +*@ + + +@using Wonky.Client.Helpers + +@if (ActivityList.Any()) +{ + + + + + + + + + + + + + + + + + + @foreach (var activity in ActivityList) + { + + + + + + + + + + + + + + } + +
KundeBynavnDemoSalgNotesasBeløb
@activity.Company.Name@activity.Company.City@activity.Demo@activity.Sales@activity.OfficeNote@($"{activity.SasAmount:N2}")@(activity.StatusTypeEnum == "Quote" ? $"{0:N2}" : $"{activity.OrderAmount:N2}") + @if (activity.OurRef.Contains("T:")) + {} + + @if (activity.Express) + {} + + @if (activity.StatusTypeEnum == "Quote") + {} + + @if (activity.Lines.Any() && activity.StatusTypeEnum == "Order") + { + + } +
+} +else +{ +
Ingen data
+} \ No newline at end of file diff --git a/Wonky.Client/Components/ReportActivityListComponent.razor.cs b/Wonky.Client/Components/ReportActivityListComponent.razor.cs new file mode 100644 index 00000000..a172a09a --- /dev/null +++ b/Wonky.Client/Components/ReportActivityListComponent.razor.cs @@ -0,0 +1,33 @@ +// Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +// + +using Microsoft.AspNetCore.Components; +using Wonky.Entity.Views; +#pragma warning disable CS8618 + +namespace Wonky.Client.Components; + +public partial class ReportActivityListComponent +{ + // ############################################################################## + [Parameter] public List ActivityList { get; set; } = new(); + [Parameter] public EventCallback OnShowDocument { get; set; } + + + private void ShowDocument(string documentId) + { + OnShowDocument.InvokeAsync(documentId); + } +} \ No newline at end of file diff --git a/Wonky.Client/Components/ReportItemComponent.razor.cs b/Wonky.Client/Components/ReportItemComponent.razor.cs index 6754a9f5..8c757c7b 100644 --- a/Wonky.Client/Components/ReportItemComponent.razor.cs +++ b/Wonky.Client/Components/ReportItemComponent.razor.cs @@ -20,9 +20,10 @@ namespace Wonky.Client.Components; public partial class ReportItemComponent { - [Parameter] - public ReportItemView ReportItem { get; set; } = new(); + // ############################################################################## + [Parameter] public ReportItemView ReportItem { get; set; } = new(); + protected override void OnParametersSet() { var lines = ReportItem.Lines.OrderBy(x => x.Location).ToList(); diff --git a/Wonky.Client/Components/ReportListComponent.razor b/Wonky.Client/Components/ReportListComponent.razor index f9ee8170..ff5c069c 100644 --- a/Wonky.Client/Components/ReportListComponent.razor +++ b/Wonky.Client/Components/ReportListComponent.razor @@ -38,7 +38,7 @@ { @foreach (var report in ReportList) { - + } } else diff --git a/Wonky.Client/Components/ReportListComponent.razor.cs b/Wonky.Client/Components/ReportListComponent.razor.cs index d8ad3799..49b7882c 100644 --- a/Wonky.Client/Components/ReportListComponent.razor.cs +++ b/Wonky.Client/Components/ReportListComponent.razor.cs @@ -21,16 +21,22 @@ namespace Wonky.Client.Components; public partial class ReportListComponent { + // ########################################################################### [Parameter] public List ReportList { get; set; } = new(); [Parameter] public EventCallback OnShowReport { get; set; } + + // ########################################################################### private List Reports { get; set; } = new(); + + protected override void OnParametersSet() { - Reports = ReportList; + Reports = ReportList.OrderByDescending(x => x.ReportDate).ToList(); } + private void ShowThisReport(string reportDate) { OnShowReport.InvokeAsync(reportDate); diff --git a/Wonky.Client/Components/ReportListItemComponent.razor b/Wonky.Client/Components/ReportListItemComponent.razor index 57dd92d6..910b3beb 100644 --- a/Wonky.Client/Components/ReportListItemComponent.razor +++ b/Wonky.Client/Components/ReportListItemComponent.razor @@ -15,8 +15,8 @@ @using Wonky.Entity.Views - + \ No newline at end of file diff --git a/Wonky.Client/Components/ReportListItemComponent.razor.cs b/Wonky.Client/Components/ReportListItemComponent.razor.cs index 63c27d3b..ec5fb005 100644 --- a/Wonky.Client/Components/ReportListItemComponent.razor.cs +++ b/Wonky.Client/Components/ReportListItemComponent.razor.cs @@ -20,9 +20,11 @@ namespace Wonky.Client.Components; public partial class ReportListItemComponent { + // ############################################################# [Parameter] public SalesReportListView Report { get; set; } = new(); [Parameter] public EventCallback OnShowReport { get; set; } - + + private void ShowThisReport() { OnShowReport.InvokeAsync(Report.ReportDate); diff --git a/Wonky.Client/Helpers/Utils.cs b/Wonky.Client/Helpers/Utils.cs index c9af8164..e457fb65 100644 --- a/Wonky.Client/Helpers/Utils.cs +++ b/Wonky.Client/Helpers/Utils.cs @@ -217,7 +217,7 @@ public static class Utils "picked" => "the-bad", "packed" => "the-ugly", "shipped" => "the-dead", - "accepted" => "accepted", + "printed" => "printed", _ => "question" }; } diff --git a/Wonky.Client/Local.Services/IUserInfoService.cs b/Wonky.Client/Local.Services/IUserInfoService.cs index 60dfeefd..567a3780 100644 --- a/Wonky.Client/Local.Services/IUserInfoService.cs +++ b/Wonky.Client/Local.Services/IUserInfoService.cs @@ -22,6 +22,7 @@ public interface IUserInfoService { Task GetUserInfo(); Task SetUserInfo(UserManagerEditView userInfo); + Task IsSupervisor(); Task GetRefreshToken(); Task SetRefreshToken(string token); Task GetAccessToken(); diff --git a/Wonky.Client/Local.Services/UserInfoService.cs b/Wonky.Client/Local.Services/UserInfoService.cs index a72934d7..a0f843af 100644 --- a/Wonky.Client/Local.Services/UserInfoService.cs +++ b/Wonky.Client/Local.Services/UserInfoService.cs @@ -16,6 +16,8 @@ using System.Text.Json; using Blazored.LocalStorage; +using Microsoft.AspNetCore.DataProtection.KeyManagement; +using Wonky.Client.Models; using Wonky.Entity.DTO; namespace Wonky.Client.Local.Services; @@ -26,50 +28,65 @@ public class UserInfoService : IUserInfoService private const string _refreshKey = "_xr"; private const string _accessKey = "_xa"; private const string _expiryKey = "_xe"; - private readonly ILocalStorageService _localStorageService; private readonly JsonSerializerOptions _options = new() { PropertyNameCaseInsensitive = true }; + public UserInfoService(ILocalStorageService localStorageService) { _localStorageService = localStorageService; } - + + + public async Task IsSupervisor() + { + var x = await GetUserInfo(); + return x.AssignedRoles.Any(x => x is { Name: "Supervisor", Assigned: true }); + } + + public async Task GetUserInfo() { return await _localStorageService.GetItemAsync(_infoKey); } + public async Task SetUserInfo(UserManagerEditView userInfo) { await _localStorageService.SetItemAsync(_infoKey, userInfo); } + public async Task GetRefreshToken() { return await _localStorageService.GetItemAsStringAsync(_refreshKey); } + public async Task SetRefreshToken(string token) { await _localStorageService.SetItemAsStringAsync(_refreshKey, token); } + public async Task GetAccessToken() { return await _localStorageService.GetItemAsStringAsync(_accessKey); } + public async Task SetAccessToken(string token) { await _localStorageService.SetItemAsStringAsync(_accessKey, token); } + public async Task GetExpiration() { return await _localStorageService.GetItemAsync(_expiryKey); } + public async Task SetExpiration(long expiration) { await _localStorageService.SetItemAsync(_expiryKey, expiration); diff --git a/Wonky.Client/Pages/AdvisorCustomerCreatePage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerCreatePage.razor.cs index e2d80a91..8bc6dff8 100644 --- a/Wonky.Client/Pages/AdvisorCustomerCreatePage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerCreatePage.razor.cs @@ -144,7 +144,7 @@ public partial class AdvisorCustomerCreatePage : IDisposable // validate vat number according to country if (!VatUtils.ValidateFormat(Company.CountryCode, Company.VatNumber)) { - Toaster.ShowError("Momsnummber er ikke korrekt."); + Toaster.ShowError("Momsnummer er ikke korrekt."); FormInvalid = true; Company.ValidVat = 0; RegState = "the-ugly"; diff --git a/Wonky.Client/Pages/AdvisorReportCreatePage.razor b/Wonky.Client/Pages/AdvisorReportCreatePage.razor index 78e7b596..b3fd1f17 100644 --- a/Wonky.Client/Pages/AdvisorReportCreatePage.razor +++ b/Wonky.Client/Pages/AdvisorReportCreatePage.razor @@ -16,7 +16,7 @@ @using Microsoft.AspNetCore.Authorization @using Wonky.Client.Components -@attribute [Authorize(Roles = "Advisor")] +@attribute [Authorize(Roles = "Advisor,Supervisor")] @page "/advisor/reports/new" Opret Dagsrapport for @ThisWorkDate @@ -27,7 +27,7 @@
- +
@@ -54,11 +54,15 @@ - + @if (IsSupervisor) + { + + } + @if (Report.DayTypeEnum.ToLower().Contains("leave")) { @@ -148,12 +152,12 @@ disabled="@(NoFigures)" readonly/> - + - + @@ -172,8 +176,8 @@ disabled="@(NoFigures)"/> - + @@ -182,19 +186,19 @@ @if (Activities.Any()) {
- +
} }
@* ledger summaries calculated *@ - +
@if (Working) { - + } - + \ No newline at end of file diff --git a/Wonky.Client/Pages/AdvisorReportCreatePage.razor.cs b/Wonky.Client/Pages/AdvisorReportCreatePage.razor.cs index a7515bf9..d7455de9 100644 --- a/Wonky.Client/Pages/AdvisorReportCreatePage.razor.cs +++ b/Wonky.Client/Pages/AdvisorReportCreatePage.razor.cs @@ -31,6 +31,7 @@ namespace Wonky.Client.Pages; public partial class AdvisorReportCreatePage : IDisposable { + // ########################################################################## [Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public UserPreferenceService PreferenceService { get; set; } [Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; } @@ -38,6 +39,10 @@ public partial class AdvisorReportCreatePage : IDisposable [Inject] public NavigationManager Navigator { get; set; } [Inject] public ILogger Logger { get; set; } [Inject] public IToastService Toaster { get; set; } + [Inject] public IUserInfoService UserInfo { get; set; } + + + // ########################################################################## private EditContext ReportContext { get; set; } private ReportDto Report { get; set; } = new(); private List Activities { get; set; } = new(); @@ -56,6 +61,8 @@ public partial class AdvisorReportCreatePage : IDisposable private string WorkDate { get; set; } = ""; private int CurrKmMonth { get; set; } private int CurrKmPrivate { get; set; } + private bool IsSupervisor { get; set; } + /// /// OnInitialized @@ -64,6 +71,8 @@ public partial class AdvisorReportCreatePage : IDisposable { Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); + + IsSupervisor = await UserInfo.IsSupervisor(); ReportContext = new EditContext(Report); ReportContext.OnFieldChanged += HandleFieldChanged; diff --git a/Wonky.Client/Pages/Index.razor b/Wonky.Client/Pages/Index.razor index d1402259..bb293e45 100644 --- a/Wonky.Client/Pages/Index.razor +++ b/Wonky.Client/Pages/Index.razor @@ -16,7 +16,7 @@ @using Wonky.Client.Components; @using Microsoft.AspNetCore.Authorization -@attribute [Authorize(Roles = "Admin,Advisor,Office,Supervisor,Warehouse")] +@attribute [Authorize(Roles = "Admin,Advisor,Management,Office,Supervisor,Warehouse")] @page "/" @page "/index" @page "/home" @@ -25,7 +25,7 @@ - + diff --git a/Wonky.Client/Pages/OfficeUserAdvisorListPage.razor b/Wonky.Client/Pages/OfficeAdvisorListPage.razor similarity index 100% rename from Wonky.Client/Pages/OfficeUserAdvisorListPage.razor rename to Wonky.Client/Pages/OfficeAdvisorListPage.razor diff --git a/Wonky.Client/Pages/OfficeUserAdvisorListPage.razor.cs b/Wonky.Client/Pages/OfficeAdvisorListPage.razor.cs similarity index 97% rename from Wonky.Client/Pages/OfficeUserAdvisorListPage.razor.cs rename to Wonky.Client/Pages/OfficeAdvisorListPage.razor.cs index 01874e90..1cecfd56 100644 --- a/Wonky.Client/Pages/OfficeUserAdvisorListPage.razor.cs +++ b/Wonky.Client/Pages/OfficeAdvisorListPage.razor.cs @@ -24,7 +24,7 @@ using Wonky.Entity.Views; namespace Wonky.Client.Pages; -public partial class OfficeUserAdvisorListPage :IDisposable +public partial class OfficeAdvisorListPage :IDisposable { // ############################################################# [Inject] public HttpInterceptorService Interceptor { get; set; } diff --git a/Wonky.Client/Pages/OfficeUserAdvisorReportListPage.razor b/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor similarity index 100% rename from Wonky.Client/Pages/OfficeUserAdvisorReportListPage.razor rename to Wonky.Client/Pages/OfficeAdvisorReportListPage.razor diff --git a/Wonky.Client/Pages/OfficeUserAdvisorReportListPage.razor.cs b/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor.cs similarity index 97% rename from Wonky.Client/Pages/OfficeUserAdvisorReportListPage.razor.cs rename to Wonky.Client/Pages/OfficeAdvisorReportListPage.razor.cs index a0c6d8f5..68d33841 100644 --- a/Wonky.Client/Pages/OfficeUserAdvisorReportListPage.razor.cs +++ b/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor.cs @@ -23,11 +23,11 @@ using Wonky.Entity.Views; namespace Wonky.Client.Pages; -public partial class OfficeUserAdvisorReportListPage : IDisposable +public partial class OfficeAdvisorReportListPage : IDisposable { // ############################################################# - [Inject] public ICountryReportRepository ReportRepo { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; } + [Inject] public ICountryReportRepository ReportRepo { get; set; } [Inject] public IOfficeUserInfoRepository UserRepo { get; set; } [Inject] public NavigationManager Navigator { get; set; } diff --git a/Wonky.Client/Pages/SupervisorAdvisorReportViewPage.razor b/Wonky.Client/Pages/SupervisorAdvisorReportViewPage.razor new file mode 100644 index 00000000..e9e97500 --- /dev/null +++ b/Wonky.Client/Pages/SupervisorAdvisorReportViewPage.razor @@ -0,0 +1,47 @@ +@* Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +*@ + +@using Wonky.Client.Components +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "Admin,Management,Supervisor")] +@page "/supervisor/advisors/{UserId}/reports/{ReportDate}" + +
+ @if (!string.IsNullOrWhiteSpace(Report.ReportData.DayTypeEnum)) + { + @Report.ReportData.Name +
+
+

@Report.ReportData.Name

+
+
+
+
+ +
+
+ +
+
+ + + } + else + { +
+
Ingen rapport data
+
+ } +
diff --git a/Wonky.Client/Pages/SupervisorAdvisorReportViewPage.razor.cs b/Wonky.Client/Pages/SupervisorAdvisorReportViewPage.razor.cs new file mode 100644 index 00000000..ac27c00f --- /dev/null +++ b/Wonky.Client/Pages/SupervisorAdvisorReportViewPage.razor.cs @@ -0,0 +1,188 @@ +// Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +// + + +using System.Text.Json; +using Blazored.LocalStorage; +using Blazored.Toast.Services; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; +using Wonky.Client.Helpers; +using Wonky.Client.HttpInterceptors; +using Wonky.Client.HttpRepository; +using Wonky.Client.Local.Services; +using Wonky.Client.Models; +using Wonky.Entity.DTO; +using Wonky.Entity.Views; +#pragma warning disable CS8618 + +namespace Wonky.Client.Pages; + +public partial class SupervisorAdvisorReportViewPage : IDisposable +{ + // ############################################################# + [Inject] public HttpInterceptorService Interceptor { get; set; } + [Inject] public ICountryReportRepository ReportRepo { get; set; } + [Inject] public NavigationManager Navigator { get; set; } + [Inject] public ILogger Logger { get; set; } + [Inject] public ILocalStorageService Storage { get; set; } + [Inject] public UserPreferenceService PreferenceService { get; set; } + [Inject] public IJSRuntime JsRuntime { get; set; } + [Inject] public IToastService Toaster { get; set; } + [Inject] public IOrderProcessRepository ProcessRepo { get; set; } + + + // ############################################################# + [Parameter] public string CountryCode { get; set; } = ""; + [Parameter] public string UserId { get; set; } = ""; + [Parameter] public string ReportDate { get; set; } = ""; + + + // ############################################################# + private IJSObjectReference JsModule { get; set; } + private ReportView Report { get; set; } = new(); + private List Activities { get; set; } = new(); + private bool Working { get; set; } = true; + private UserPreference Profile { get; set; } = new(); + private string _returnUrl = ""; + + + protected override async Task OnParametersSetAsync() + { + Interceptor.RegisterEvent(); + Interceptor.RegisterBeforeSendEvent(); + + PreferenceService.OnChange += ProfileServiceOnOnChange; + + await PreferenceService.SetWorkDate(DateTime.Parse(ReportDate)); + + await FetchUserReport(ReportDate); + } + + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + JsModule = await JsRuntime + .InvokeAsync("import", "/scripts/print-invoke.js"); + } + } + + + // private void Print(PrintTarget target) + // { + // _returnUrl = new Uri(Navigator.Uri).AbsolutePath; + // switch (target) + // { + // case PrintTarget.OrderPage: + // Navigator.NavigateTo($"/report/print/orders/{CountryCode}/{UserId}/{ReportDate}?returnUrl={_returnUrl}"); + // break; + // case PrintTarget.FrontPage: + // Navigator.NavigateTo($"/report/print/summary/{CountryCode}/{UserId}/{ReportDate}?returnUrl={_returnUrl}"); + // break; + // case PrintTarget.None: + // break; + // case PrintTarget.All: + // break; + // default: + // throw new ArgumentOutOfRangeException(nameof(target), target, null); + // } + // } + // + // + // private async Task Print() + // { + // var current = 0; + // var orders = Report.ReportItems + // .Where(x => x is { StatusTypeEnum: "Order", ProcessStatusEnum: "None" } ); + // var count = orders.Count(); + // foreach (var item in orders) + // { + // Toaster.ShowInfo($"Behandler {current++} af {count} ordrer. Vent venligst"); + // await ProcessRepo.UpdateWarehouseOrderStatus(new OrderProcessState + // { + // OrderId = item.ActivityId, + // ProcessStatusEnum = Utils.EnumToString(ProcessStatus.Printed) + // }); + // } + // Toaster.ClearAll(); + // await JsModule.InvokeVoidAsync("printInvoke"); + // } + + /// + /// Work date component event handler + /// + /// + private async Task FetchUserReport(string workDate) + { + // remove busy signal if report is empty + if (string.IsNullOrWhiteSpace(Report.ReportData.ReportDate)) + { + Working = false; + } + + ReportDate = workDate; + + // ensure the browser address bar contains the correct link + Navigator.NavigateTo($"/supervisor/advisors/{UserId}/reports/{workDate}", false, true); + + // return if we are already at it + if (Working) + { + return; + } + + // reset variables + Report = new ReportView(); + Activities = new List(); + + // set busy signal + Working = true; + + Logger.LogDebug("UserId => {}", UserId); + // fetch report + Report = await ReportRepo.GetCountryReport(UserId, workDate); + Logger.LogDebug("Report => {}", JsonSerializer.Serialize(Report, new JsonSerializerOptions(JsonSerializerDefaults.Web))); + + // extract activities + Activities = Report.ReportItems.Where(x => x.Lines.Any()).ToList(); + + // store locally + if (!string.IsNullOrWhiteSpace(Report.ReportData.ReportDate)) + { + await Storage.SetItemAsync($"{UserId}-{workDate}", Report); + } + + // remove busy signal + Working = false; + } + + private void ProfileServiceOnOnChange(UserPreference userPreference) + { + Logger.LogDebug("OfficeReportViewPage => ProfileServiceOnOnChange"); + Profile = userPreference; + Logger.LogDebug("OfficeReportViewPage => ProfileServiceOnOnChange => Prefs.WorkDate <= {}", Profile.WorkDate); + ReportDate = Profile.WorkDate; + + StateHasChanged(); + } + + public void Dispose() + { + Interceptor.DisposeEvent(); + PreferenceService.OnChange -= ProfileServiceOnOnChange; + } +} \ No newline at end of file diff --git a/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor b/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor new file mode 100644 index 00000000..cfba7bd7 --- /dev/null +++ b/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor @@ -0,0 +1,34 @@ +@* Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +*@ + +@using Microsoft.AspNetCore.Authorization +@using Wonky.Client.Components +@attribute [Authorize(Roles = "Admin,Management,Supervisor")] +@page "/supervisor/advisors/{UserId}" + +Rapport Arkiv @AdvisorInfo.FirstName @AdvisorInfo.LastName +
+
+
+ Rapport Arkiv - @AdvisorInfo.FirstName @AdvisorInfo.LastName +
+
+ +
+ +@if (Working) +{ + +} diff --git a/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor.cs b/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor.cs new file mode 100644 index 00000000..fc7db29a --- /dev/null +++ b/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor.cs @@ -0,0 +1,64 @@ +using Microsoft.AspNetCore.Components; +using Wonky.Client.HttpInterceptors; +using Wonky.Client.HttpRepository; +using Wonky.Entity.Views; + +#pragma warning disable CS8618 + +namespace Wonky.Client.Pages; + +public partial class SupervisorAdvisorViewPage : IDisposable +{ + // ############################################################# + [Inject] public HttpInterceptorService Interceptor { get; set; } + [Inject] public IOfficeUserInfoRepository UserRepo { get; set; } + [Inject] public ICountryReportRepository ReportRepo { get; set; } + [Inject] public NavigationManager Navigator { get; set; } + [Inject] public ILogger Logger { get; set; } + + // ############################################################# + [Parameter] public string UserId { get; set; } = ""; + + // ############################################################# + private UserAdvisorInfoView AdvisorInfo { get; set; } = new(); + private List ActivityReports { get; set; } = new(); + private bool Working { get; set; } = true; + + + protected override async Task OnParametersSetAsync() + { + Interceptor.RegisterEvent(); + Interceptor.RegisterBeforeSendEvent(); + + AdvisorInfo = await UserRepo.GetUserInfo(UserId); + + while (string.IsNullOrWhiteSpace(AdvisorInfo.UserId)) + { + await Task.Delay(500); + } + + var reports = await ReportRepo.GetCountryReports(UserId); + if (reports.Any()) + ActivityReports = reports.OrderByDescending(x => x.ReportDate).ToList(); + } + + protected override void OnInitialized() + { + Working = false; + } + + private void ShowThisReport(string reportDate) + { + var uri = new Uri(Navigator.Uri); + var url = uri.AbsoluteUri; + Logger.LogDebug("ShowThisReport\n => {}\n =>{}", reportDate, url); + Logger.LogDebug("ShowThisReport => NavigateTo => {}",$"{url}/report/{reportDate}"); + Navigator.NavigateTo($"{url}/reports/{reportDate}"); + } + + public void Dispose() + { + Interceptor.DisposeEvent(); + } + +} \ No newline at end of file diff --git a/Wonky.Client/Pages/SupervisorHomePage.razor b/Wonky.Client/Pages/SupervisorHomePage.razor new file mode 100644 index 00000000..c9b40f1e --- /dev/null +++ b/Wonky.Client/Pages/SupervisorHomePage.razor @@ -0,0 +1,11 @@ +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "Admin,Management,Supervisor")] +@page "/supervisor" + +Supervisor + +
Supervisor
+ + \ No newline at end of file diff --git a/Wonky.Client/Pages/SupervisorHomePage.razor.cs b/Wonky.Client/Pages/SupervisorHomePage.razor.cs new file mode 100644 index 00000000..04764d57 --- /dev/null +++ b/Wonky.Client/Pages/SupervisorHomePage.razor.cs @@ -0,0 +1,6 @@ +namespace Wonky.Client.Pages; + +public partial class SupervisorHomePage +{ + +} \ No newline at end of file diff --git a/Wonky.Client/Pages/SupervisorAdvisorListPage.razor b/Wonky.Client/Pages/SupervisorUserListPage.razor similarity index 95% rename from Wonky.Client/Pages/SupervisorAdvisorListPage.razor rename to Wonky.Client/Pages/SupervisorUserListPage.razor index 7115a6c2..4dab97e4 100644 --- a/Wonky.Client/Pages/SupervisorAdvisorListPage.razor +++ b/Wonky.Client/Pages/SupervisorUserListPage.razor @@ -14,8 +14,8 @@ *@ @using Microsoft.AspNetCore.Authorization -@attribute [Authorize(Roles = "Supervisor")] -@page "/supervisor/salesReps" +@attribute [Authorize(Roles = "Admin,Management,Supervisor")] +@page "/supervisor/advisors" Supervisor Sælger Oversigt
@@ -33,7 +33,6 @@
-
@@ -58,7 +57,7 @@ { foreach (var user in Users) { - +
@user.CountryCode @user.SalesRep diff --git a/Wonky.Client/Pages/SupervisorAdvisorListPage.razor.cs b/Wonky.Client/Pages/SupervisorUserListPage.razor.cs similarity index 79% rename from Wonky.Client/Pages/SupervisorAdvisorListPage.razor.cs rename to Wonky.Client/Pages/SupervisorUserListPage.razor.cs index a242f8d0..4379d9b5 100644 --- a/Wonky.Client/Pages/SupervisorAdvisorListPage.razor.cs +++ b/Wonky.Client/Pages/SupervisorUserListPage.razor.cs @@ -8,7 +8,7 @@ namespace Wonky.Client.Pages; #pragma warning disable CS8618 -public partial class SupervisorAdvisorListPage : IDisposable +public partial class SupervisorUserListPage : IDisposable { // ############################################################# [Inject] public HttpInterceptorService Interceptor { get; set; } @@ -24,9 +24,14 @@ public partial class SupervisorAdvisorListPage : IDisposable Interceptor.RegisterBeforeSendEvent(); Users = await UserRepo.GetSupervisorUsers(); - + if (Users.Any()) + { + Users = Users + .OrderBy(x => x.FullName) + .ThenBy(x => x.CountryCode) + .ToList(); + } Working = false; - } public void Dispose() diff --git a/Wonky.Client/Pages/SupervisorVisitViewPage.razor b/Wonky.Client/Pages/SupervisorVisitViewPage.razor new file mode 100644 index 00000000..1857a416 --- /dev/null +++ b/Wonky.Client/Pages/SupervisorVisitViewPage.razor @@ -0,0 +1,155 @@ +@* Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +*@ + + +@using Microsoft.AspNetCore.Authorization +@using Wonky.Client.Components +@attribute [Authorize(Roles = "Admin,Office,Warehouse")] +@page "/supervisor/advisors/{UserId}/reports/{ReportDate}/{ActivityId}" +@ReportItem.ESalesNumber - @ReportItem.Company.Name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

@ReportItem.Company.Name

+ @if (ReportItem.Express) + { +

HASTER

+ } + @if (ReportItem.VisitTypeEnum.ToLower() == "phone" || ReportItem.OurRef.Contains("T:")) + { +
TELEFONORDRE
+ } + @if (ReportItem.StatusTypeEnum is "Quote") + { +
TILBUD
+ } +
+
Dato@ReportItem.OrderDateKonto@ReportItem.Company.Account
Telefon@ReportItem.Company.PhoneKøber@ReportItem.YourRef
CVR/VAT@ReportItem.Company.VatNumberRekvisition@ReportItem.ReferenceNumber
Navn@ReportItem.Company.NameLev.Navn@ReportItem.DlvName
Adresse@ReportItem.Company.Address1Lev.Adresse@ReportItem.DlvAddress1
Adresse@ReportItem.Company.Address2Lev.Adresse@ReportItem.DlvAddress2
Postnr By@ReportItem.Company.ZipCode @ReportItem.Company.CityLev.Postnr By@ReportItem.DlvZipCity
Email@ReportItem.Company.Email
+ + + + + + + + + + + + + @foreach (var line in ReportItem.Lines) + { + + + + + + + + + } + + + + + + @if (ReportItem.Express) + { + + + } + +
AntalVarnrBeskrivelsePrisR%Beløb
@line.Quantity@line.Sku@line.Description@($"{line.Price:N2}")@($"{line.Discount:N2}")@($"{line.LineSum:N2}")
Ordresum@ReportItem.OrderAmount
+
HASTER
+
+
+
+
+
+ Noter +
+
+
+
+
+ Kontor +
+ @ReportItem.OfficeNote +
+
+
+ Kundekort +
+ @ReportItem.CrmNote +
+
+ +@if (Working) +{ + +} \ No newline at end of file diff --git a/Wonky.Client/Pages/SupervisorVisitViewPage.razor.cs b/Wonky.Client/Pages/SupervisorVisitViewPage.razor.cs new file mode 100644 index 00000000..6275c40e --- /dev/null +++ b/Wonky.Client/Pages/SupervisorVisitViewPage.razor.cs @@ -0,0 +1,76 @@ +// Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +// + + +using System.Text; +using System.Text.Json; +using Blazored.LocalStorage; +using Blazored.Toast.Services; +using Microsoft.AspNetCore.Components; +using Wonky.Client.HttpInterceptors; +using Wonky.Client.HttpRepository; +using Wonky.Client.Local.Services; +using Wonky.Entity.DTO; +using Wonky.Entity.Views; + +#pragma warning disable CS8618 + +namespace Wonky.Client.Pages; + +public partial class SupervisorVisitViewPage : IDisposable +{ + // ############################################################# + [Inject] public HttpInterceptorService Interceptor { get; set; } + [Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; } + [Inject] public ISystemSendMailService MailService { get; set; } + [Inject] public ILocalStorageService Storage { get; set; } + [Inject] public IOfficeUserInfoRepository UserRepo { get; set; } + [Inject] public ILogger Logger { get; set; } + [Inject] public IToastService Toast { get; set; } + [Inject] public IUserInfoService UserInfoService { get; set; } + + + // ############################################################# + [Parameter] public string CompanyId { get; set; } = ""; + [Parameter] public string OrderId { get; set; } = ""; + + + // ############################################################# + private ReportItemView ReportItem { get; set; } = new(); + private bool IsNotified { get; set; } + private bool Working { get; set; } = true; + + private readonly JsonSerializerOptions _options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }; + + + protected override async Task OnInitializedAsync() + { + Interceptor.RegisterEvent(); + Interceptor.RegisterBeforeSendEvent(); + // fetch order from backend + ReportItem = await AdvisorActivityRepo.GetReportItem(OrderId); + Logger.LogDebug("ReportItem => \n {}", JsonSerializer.Serialize(ReportItem, _options)); + Working = false; + } + + + public void Dispose() + { + Interceptor.DisposeEvent(); + } +} \ No newline at end of file diff --git a/Wonky.Client/Pages/SupervisorVisitViewPage.razor.css b/Wonky.Client/Pages/SupervisorVisitViewPage.razor.css new file mode 100644 index 00000000..182f9027 --- /dev/null +++ b/Wonky.Client/Pages/SupervisorVisitViewPage.razor.css @@ -0,0 +1,21 @@ +/* Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +*/ + +#watermark { + position: absolute; + z-index: -999; + top: 10px; + right: 0; +} \ No newline at end of file diff --git a/Wonky.Client/Pages/WarehouseOrderViewPage.razor b/Wonky.Client/Pages/WarehouseOrderViewPage.razor index 6f14089f..03ab7762 100644 --- a/Wonky.Client/Pages/WarehouseOrderViewPage.razor +++ b/Wonky.Client/Pages/WarehouseOrderViewPage.razor @@ -105,7 +105,7 @@
- @if (Order.ProcessStatusEnum.ToLower() is "none" or "accepted") + @if (Order.ProcessStatusEnum.ToLower() is "none" or "printed") { } diff --git a/Wonky.Client/Shared/NavMenu-backup.razor b/Wonky.Client/Shared/NavMenu-backup.razor new file mode 100644 index 00000000..4770cef0 --- /dev/null +++ b/Wonky.Client/Shared/NavMenu-backup.razor @@ -0,0 +1,146 @@ +@* Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +*@ + + +@inject IWebAssemblyHostEnvironment HostEnvironment +@using Wonky.Client.Components; +@using Wonky.Entity.Views +@using Blazored.LocalStorage + + + +
+ +
+ +@code { + + private bool collapseNavMenu = true; + + private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; + + private void ToggleNavMenu() + { + collapseNavMenu = !collapseNavMenu; + } + + +} \ No newline at end of file diff --git a/Wonky.Client/Shared/NavMenu-backup.razor.css b/Wonky.Client/Shared/NavMenu-backup.razor.css new file mode 100644 index 00000000..dfecd000 --- /dev/null +++ b/Wonky.Client/Shared/NavMenu-backup.razor.css @@ -0,0 +1,81 @@ +/* Copyright (C) 2022 FCS Frede's Computer Services. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] +*/ +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +.top-row { + height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.oi { + width: 2rem; + font-size: 1.1rem; + vertical-align: text-top; + top: -2px; +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep a { + color: #d7d7d7; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + } + +.nav-item ::deep a.active { + background-color: rgba(255,255,255,0.25); + color: white; +} + +.nav-item ::deep a:hover { + background-color: rgba(255,255,255,0.1); + color: white; +} + +.list-group.panel > .list-group-item { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +@media (min-width: 1025px) { + .navbar-toggler { + display: none; + } + + .collapse { + /* Never collapse the sidebar for wide screens */ + display: block; + } +} diff --git a/Wonky.Client/Shared/NavMenu.razor b/Wonky.Client/Shared/NavMenu.razor index 4770cef0..04da225b 100644 --- a/Wonky.Client/Shared/NavMenu.razor +++ b/Wonky.Client/Shared/NavMenu.razor @@ -72,6 +72,15 @@
+ + + + + diff --git a/Wonky.Client/Wonky.Client.csproj b/Wonky.Client/Wonky.Client.csproj index 1fb35ed4..1644ae21 100644 --- a/Wonky.Client/Wonky.Client.csproj +++ b/Wonky.Client/Wonky.Client.csproj @@ -3797,8 +3797,4 @@ - - - - diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json index f915e91f..bb5ced61 100644 --- a/Wonky.Client/wwwroot/appsettings.json +++ b/Wonky.Client/wwwroot/appsettings.json @@ -1,7 +1,7 @@ { "appInfo": { "name": "Wonky Online", - "version": "0.124.0", + "version": "0.126.0", "rc": true, "sandBox": false, "image": "grumpy-coder.png"