WIP: user maintenance

This commit is contained in:
Frede Hundewadt 2023-03-14 16:40:23 +01:00
parent d526d6f35a
commit 02fb20ca8a
30 changed files with 320 additions and 139 deletions

View file

@ -21,7 +21,7 @@ using Wonky.Entity.Requests;
namespace Wonky.Client.Components;
public partial class PaginationComponent
public partial class PagerPagesComponent
{
[Parameter] public MetaData MetaData { get; set; } = new();
[Parameter] public int Spread { get; set; }
@ -48,7 +48,7 @@ public partial class PaginationComponent
}
}
Links.Add(new PagingLink(MetaData.CurrentPage + 1, MetaData.HasNext, "Næste"));
Links.Add(new PagingLink(MetaData.CurrentPage + 1, MetaData.HasNext, "Næste"));
}
private async Task OnSelectedPage(PagingLink link)

View file

@ -0,0 +1,28 @@
@* 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]
*@
<div arial-label="Pager">
<ul class="pagination justify-content-center">
@foreach (var link in Links)
{
<li @onclick="() => OnSelectedPage(link)" style="cursor: pointer"
class="page-item @(link.Enabled ? null : "disabled")
@(link.Active ? "active" : null)">
<span class="page-link" href="#">@link.Text</span>
</li>
}
</ul>
</div>

View file

@ -0,0 +1,53 @@
// 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.Client.Features;
using Wonky.Entity.Requests;
namespace Wonky.Client.Components;
public partial class PagerSimpleComponent
{
[Parameter] public MetaData MetaData { get; set; } = new();
[Parameter] public int Spread { get; set; }
[Parameter] public EventCallback<int> SelectedPage { get; set; }
private List<PagingLink> Links { get; set; } = new();
protected override void OnParametersSet()
{
CreatePaginationLinks();
}
private void CreatePaginationLinks()
{
Links = new List<PagingLink>
{
new(MetaData.CurrentPage - 1, MetaData.HasPrevious, "Forrige"),
new (MetaData.CurrentPage + 1, MetaData.HasNext, "Næste")
};
}
private async Task OnSelectedPage(PagingLink link)
{
if (link.Page == MetaData.CurrentPage || !link.Enabled)
return;
MetaData.CurrentPage = link.Page;
await SelectedPage.InvokeAsync(link.Page);
}
}

View file

@ -39,8 +39,8 @@
</div>
</div>
<div class="row mb-2">
<div class="col-sm-12">
<PaginationComponent MetaData="MetaInfo" Spread="2" SelectedPage="SelectedPage" />
<div class="col-sm-12 text-center">
<PagerPagesComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage" />
</div>
</div>
<div class="row text-white">
@ -92,6 +92,14 @@
</li>
}
</ul>
@if (_pager.PageSize > 10)
{
<div class="row mt-5 pb-5">
<div class="col-sm-12">
<PagerSimpleComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage" />
</div>
</div>
}
}
else
{

View file

@ -27,13 +27,13 @@ using Wonky.Entity.Views;
namespace Wonky.Client.OverlayOrderCreate;
public partial class PriceCatalogOverlay : IDisposable
public partial class CatalogPagedOverlay : IDisposable
{
// injections
[Inject] public ICountryCatalogRepository CatalogRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public ILogger<PriceCatalogOverlay> Logger { get; set; }
[Inject] public ILogger<CatalogPagedOverlay> Logger { get; set; }
// parameters
[Parameter] public string CountryCode { get; set; } = "";
@ -43,7 +43,7 @@ public partial class PriceCatalogOverlay : IDisposable
private string _modalDisplay = "";
private bool _showBackdrop;
private List<SalesItemView> Items { get; set; } = new();
private MetaData? MetaInfo { get; set; } = new();
private MetaData? PageData { get; set; } = new();
private CatalogPager _pager = new();
private UserProfile _userProfile = new();
@ -68,7 +68,7 @@ public partial class PriceCatalogOverlay : IDisposable
if (pagingResponse == null)
Task.Delay(250);
Items = pagingResponse.Items!;
MetaInfo = pagingResponse.MetaData;
PageData = pagingResponse.MetaData;
Logger.LogDebug("PriceCatalogOverlay => Items <= {}", JsonSerializer.Serialize(Items));
}
@ -78,7 +78,7 @@ public partial class PriceCatalogOverlay : IDisposable
Hide();
}
private async Task SelectedPage(int page)
private async Task SetSelectedPage(int page)
{
Items = new List<SalesItemView>();
_pager.PageNumber = page;

View file

@ -372,7 +372,7 @@ else
<ProductHistoryOverlay CompanyId="@CompanyId" ItemSku="@SelectedItem.Sku" @ref="ProductOverlay"/>
<PriceCatalogOverlay CountryCode="@Company.CountryCode.ToLower()" OnSelected="PriceListCallback" @ref="CatalogOverlay"/>
<CatalogPagedOverlay CountryCode="@Company.CountryCode.ToLower()" OnSelected="PriceListCallback" @ref="CatalogOverlay"/>
<ProductPriceHistoryOverlay CompanyId="@CompanyId" Sku="@SelectedItem.Sku" OnSelected="PriceHistoryCallback" @ref="PriceOverlay"/>

View file

@ -88,7 +88,7 @@ public partial class AdvisorActivityCreatePage : IDisposable
// *************************************************************
// Overlays
private PriceCatalogOverlay CatalogOverlay { get; set; } = new();
private CatalogPagedOverlay CatalogOverlay { get; set; } = new();
private ProductHistoryOverlay ProductOverlay { get; set; } = new();
private ProductPriceHistoryOverlay PriceOverlay { get; set; } = new();
private ConfirmWorkDateModal ConfirmWorkDate { get; set; } = new();

View file

@ -39,14 +39,14 @@
@ToggleFoldedText
</button>
</div>
<div class="col-sm-2 mx-auto">
<div class="col-sm-1 mx-auto">
<button type button class="btn btn-warning @(@ShowHidden ? "active" : "")"
data-bs-toggle="button" aria-pressed="@ShowHidden" @onclick="ToggleHidden">
@ToggleHiddenText
</button>
</div>
<div class="col-sm-5">
<PaginationComponent MetaData="PageData" Spread="2" SelectedPage="SelectedPage"/>
<PagerPagesComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage"/>
</div>
<div class="col-sm-1">@* placeholder *@</div>
<div class="col-sm-2 mx-auto">
@ -57,6 +57,14 @@
<AdvisorCustomerListComponent CompanyList="CompanyList" OnDelete="DeleteCompany"/>
@if (Paging.PageSize > 10)
{
<div class="row mt-5 pb-5">
<div class="col-sm-12 text-center">
<PagerSimpleComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage"/>
</div>
</div>
}
@if (Working)
{
<WorkingThreeDots/>

View file

@ -26,7 +26,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class AdvisorCustomerListPage : IDisposable
public partial class AdvisorCustomerPagedListPage : IDisposable
{
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
@ -42,9 +42,9 @@ public partial class AdvisorCustomerListPage : IDisposable
private bool Working { get; set; } = true;
private MetaData PageData { get; set; } = new();
private CustomerPaging Paging { get; set; } = new();
private string ToggleFoldedText { get; set; } = "Vis Lukkede";
private string ToggleFoldedText { get; set; } = "Lukkede";
private bool ShowFolded { get; set; }
private string ToggleHiddenText { get; set; } = "Inkl. Skjulte";
private string ToggleHiddenText { get; set; } = "Inaktive";
private bool ShowHidden { get; set; }
protected override void OnParametersSet()
@ -95,7 +95,7 @@ public partial class AdvisorCustomerListPage : IDisposable
await FetchCustomers();
}
private async Task SelectedPage(int page)
private async Task SetSelectedPage(int page)
{
CompanyList = new List<CompanyDto>();
Paging.PageNumber = page;

View file

@ -145,7 +145,7 @@
</td>
<td>
<InputNumber class="form-control" @bind-Value="@Report.Figures.KmMorning"
disabled="@(NoFigures)"/>
disabled="@(NoFigures)" readonly/>
</td>
<td>
<InputNumber class="form-control" @bind-Value="@Report.Figures.Distance"

View file

@ -41,7 +41,7 @@
<PageSizeComponent OnChanged="SetPageSize"/>
</div>
<div class="col-sm-10">
<PaginationComponent MetaData="MetaInfo" Spread="2" SelectedPage="SetSelectedPage"/>
<PagerPagesComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage"/>
</div>
<div class="col-sm-2 text-end">
<a class="btn btn-secondary" href="/catalog/@CountryCode/print"><i class="bi-printer"></i> Udskriv</a>
@ -51,6 +51,14 @@
<ProductPriceListComponent ItemList="Items"/>
@if (Paging.PageSize > 10)
{
<div class="row mt-5 pb-5">
<div class="col-sm-12 text-center">
<PagerSimpleComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage"/>
</div>
</div>
}
@if (Working)
{
<WorkingThreeDots />

View file

@ -28,21 +28,21 @@ using Wonky.Entity.DTO;
namespace Wonky.Client.Pages;
public partial class CatalogCountryPage : IDisposable
public partial class CatalogCountryPagedListPage : IDisposable
{
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public ICountryCatalogRepository Catalog { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public ILogger<CatalogCountryPage> Logger { get; set; }
[Inject] public ILogger<CatalogCountryPagedListPage> Logger { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
[Parameter] public string CountryCode { get; set; } = "";
private List<SalesItemView> Items { get; set; } = new();
private MetaData MetaInfo { get; set; } = new();
private CatalogPager Pager { get; set; } = new();
private MetaData PageData { get; set; } = new();
private CatalogPager Paging { get; set; } = new();
private UserProfile Profiles { get; set; } = new();
private UserManagerEditView XUserInfo { get; set; } = new();
private bool Working { get; set; }
@ -53,10 +53,10 @@ public partial class CatalogCountryPage : IDisposable
Profiles = await ProfileService.GetProfile();
XUserInfo = await UserInfoService.GetUserInfo();
Pager.OrderBy = Profiles.ItemSort;
Paging.OrderBy = Profiles.ItemSort;
Pager.SearchColumn = Profiles.ItemSearch;
Pager.PageSize = Convert.ToInt32(Profiles.PageSize);
Paging.SearchColumn = Profiles.ItemSearch;
Paging.PageSize = Convert.ToInt32(Profiles.PageSize);
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
@ -77,46 +77,46 @@ public partial class CatalogCountryPage : IDisposable
private async Task SetSearchPhrase(string searchTerm)
{
Items = new List<SalesItemView>();
Pager.PageNumber = 1;
Pager.SearchTerm = searchTerm;
Paging.PageNumber = 1;
Paging.SearchTerm = searchTerm;
await GetCatalogPaged();
}
private async Task SetPageSize(string pageSize)
{
Items = new List<SalesItemView>();
Pager.PageSize = Convert.ToInt32(pageSize);
Pager.PageNumber = 1;
Paging.PageSize = Convert.ToInt32(pageSize);
Paging.PageNumber = 1;
await GetCatalogPaged();
}
private async Task SetSearchCol(string columnName)
{
Items = new List<SalesItemView>();
Pager.PageNumber = 1;
Pager.SearchColumn = columnName;
Paging.PageNumber = 1;
Paging.SearchColumn = columnName;
await GetCatalogPaged();
}
private async Task SetSortCol(string orderBy)
{
Items = new List<SalesItemView>();
Pager.OrderBy = orderBy;
Paging.OrderBy = orderBy;
await GetCatalogPaged();
}
private async Task SetSelectedPage(int page)
{
Items = new List<SalesItemView>();
Pager.PageNumber = page;
Paging.PageNumber = page;
await GetCatalogPaged();
}
private async Task SetGroupCol(string groupFilter)
{
Items = new List<SalesItemView>();
Pager.PageNumber = 1;
Pager.SelectGroup = groupFilter;
Paging.PageNumber = 1;
Paging.SelectGroup = groupFilter;
await GetCatalogPaged();
}
@ -127,9 +127,9 @@ public partial class CatalogCountryPage : IDisposable
if (Working)
return;
Working = true;
var page = await Catalog.GetSalesItemsPaged(CountryCode, Pager);
var page = await Catalog.GetSalesItemsPaged(CountryCode, Paging);
Items = page.Items!;
MetaInfo = page.MetaData!;
PageData = page.MetaData!;
Working = false;
}

View file

@ -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]
*@
@using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Admin,Office")]
@page "/office/users/advisors/{CountryCode}/{UserId}/customers"
<PageTitle>Kundeliste for @SalesRep.FirstName @SalesRep.LastName</PageTitle>
<div class="sticky-top bg-dark text-light rounded-2 px-3">
<div class="row g-2">
<div class="col-sm-3">
<CustomerSearchColumnComponent OnChanged="SetSearchCol"/>
</div>
<div class="col-sm-3">
<CustomerSearchPhraseComponent OnChanged="SetSearchPhrase"/>
</div>
<div class="col-sm-3">
<CustomerSortComponent OnChanged="SetSortCol"/>
</div>
<div class="col-sm-3">
<PageSizeComponent OnChanged="SetPageSize"/>
</div>
<div class="col-sm-2 mx-auto">
<button type button class="btn btn-warning @(ShowFolded ? "active" : "")"
data-bs-toggle="button" aria-pressed="@ShowFolded" @onclick="ToggleFolded">
@ToggleFoldedText
</button>
</div>
<div class="col-sm-2">@*placeholder*@</div>
<div class="col-sm-5">
<PagerPagesComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage"/>
</div>
<div class="col-sm-1">@*placeholder*@</div>
<div class="col-sm-2">
<div class="busy-signal" style="display:@(Working ? "block" : "none")">
<div class="spinner-grow text-info" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
<div class="col-sm-12">
<div class="h3 card-title text-center">
Kundeliste for @SalesRep.FirstName @SalesRep.LastName
</div>
</div>
</div>
</div>
<div class="card mb-5">
<div class="card-body">
<OfficeCountryCustomerListComponent CompanyList="@CompanyList" CountryCode="@CountryCode"/>
</div>
</div>
@if (Paging.PageSize > 10)
{
<div class="row mt-5 pb-5">
<div class="col-sm-12 text-center">
<PagerSimpleComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage"/>
</div>
</div>
}
@if (Working)
{
<WorkingThreeDots/>
}

View file

@ -25,7 +25,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class OfficeUserAdvisorCustomerListPage : IDisposable
public partial class OfficeCustomerAdvisorPagedListPage : IDisposable
{
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICountryCustomerRepository CustomerRepo { get; set; }
@ -36,11 +36,13 @@ public partial class OfficeUserAdvisorCustomerListPage : IDisposable
[Parameter] public string CountryCode { get; set; } = "dk";
private List<CompanyDto> CompanyList { get; set; } = new();
private MetaData ResponseMeta { get; set; } = new();
private MetaData PageData { get; set; } = new();
private CustomerPaging Paging { get; set; } = new();
private UserProfile UserProfile { get; set; } = new();
private string SavedSearch { get; set; } = "";
private bool IncludeFolded { get; set; }
private bool ShowFolded { get; set; }
private string ToggleFoldedText { get; set; } = "Vis Lukkede";
private bool Working { get; set; } = true;
private UserManagerEditView SalesRep { get; set; } = new();
@ -66,16 +68,18 @@ public partial class OfficeUserAdvisorCustomerListPage : IDisposable
Working = false;
}
private async Task OnFoldedClick()
private async Task ToggleFolded()
{
IncludeFolded = !IncludeFolded;
Working = true;
ShowFolded = !ShowFolded;
ToggleFoldedText = ShowFolded ? "Normal Visning" : "Vis Lukkede";
CompanyList = new List<CompanyDto>();
Paging.PageNumber = 1;
Paging.HasFolded = IncludeFolded ? 1 : 0;
Paging.HasFolded = ShowFolded ? 1 : 0;
await FetchCompanies();
}
private async Task SelectedPage(int page)
private async Task SetSelectedPage(int page)
{
CompanyList = new List<CompanyDto>();
Paging.PageNumber = page;
@ -125,7 +129,7 @@ public partial class OfficeUserAdvisorCustomerListPage : IDisposable
Working = true;
var pagingResponse = await CustomerRepo.GetCompaniesPaged(CountryCode, UserId, Paging);
CompanyList = pagingResponse.Items;
ResponseMeta = pagingResponse.MetaData;
PageData = pagingResponse.MetaData;
Working = false;
}

View file

@ -34,15 +34,17 @@
<div class="col-sm-2">
<PageSizeComponent OnChanged="SetPageSize" />
</div>
<div class="col-sm-2">
<button type button class="btn btn-warning @(ShowFolded ? "active" : "")"
data-bs-toggle="button" aria-pressed="@ShowFolded" @onclick="OnFoldedClick">
@ButtonFoldedText
<div class="col-sm-2 mx-auto">
<button type button class="btn btn-warning @(ShowFolded ? "active" : "")"
data-bs-toggle="button" aria-pressed="@ShowFolded" @onclick="ToggleFolded">
@ToggleFoldedText
</button>
</div>
<div class="col-sm-8">
<PaginationComponent MetaData="PageData" Spread="2" SelectedPage="SelectedPage"/>
<div class="col-sm-2">@*placeholder*@</div>
<div class="col-sm-5">
<PagerPagesComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage"/>
</div>
<div class="col-sm-1">@*placeholder*@</div>
<div class="col-sm-2">
<div class="busy-signal" style="display:@(Working ? "block" : "none")">
<div class="spinner-grow text-info" role="status">
@ -55,6 +57,15 @@
<OfficeCountryCustomerListComponent CompanyList="Companies" CountryCode="@CountryCode" />
@if (Paging.PageSize > 10)
{
<div class="row mt-5 pb-5">
<div class="col-sm-12 text-center">
<PagerSimpleComponent MetaData="PageData" Spread="2" SelectedPage="SetSelectedPage"/>
</div>
</div>
}
@if (Working)
{
<WorkingThreeDots />

View file

@ -26,7 +26,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class OfficeCountryCustomerListPage : IDisposable
public partial class OfficeCustomerCountryPagedListPage : IDisposable
{
[Parameter] public string CountryCode { get; set; } = "";
[Inject] public ILocalStorageService Storage { get; set; }
@ -44,7 +44,7 @@ public partial class OfficeCountryCustomerListPage : IDisposable
private bool Working { get; set; } = true;
private MetaData PageData { get; set; } = new();
private CustomerPaging Paging { get; set; } = new();
private string ButtonFoldedText { get; set; } = "Vis Ophørte";
private string ToggleFoldedText { get; set; } = "Vis Lukkede";
protected override async Task OnParametersSetAsync()
{
@ -68,19 +68,19 @@ public partial class OfficeCountryCustomerListPage : IDisposable
// get companies
await FetchCustomers();
}
private async Task OnFoldedClick()
private async Task ToggleFolded()
{
Working = true;
ShowFolded = !ShowFolded;
ButtonFoldedText = ShowFolded ? "Vis Aktive" : "Vis Ophørte";
ToggleFoldedText = ShowFolded ? "Normal Visning" : "Vis Lukkede";
Companies = new List<CompanyDto>();
Paging.PageNumber = 1;
Paging.HasFolded = ShowFolded ? 1 : 0;
await FetchCustomers();
}
private async Task SelectedPage(int page)
private async Task SetSelectedPage(int page)
{
Working = true;
Companies = new List<CompanyDto>();

View file

@ -241,7 +241,7 @@
</div>
</div>
<PriceCatalogOverlay @ref="CatalogOverlay" CountryCode="@CountryCode" OnSelected="PriceListCallback"/>
<CatalogPagedOverlay @ref="CatalogOverlay" CountryCode="@CountryCode" OnSelected="PriceListCallback"/>
<OfficeCustomerInvoiceListOverlay @ref="InvoiceListOverlay" Company="Company" InvoiceList="CompanyInvoices"/>
<OfficeCustomerActivityListOverlay @ref="ActivityListOverlay" Company="Company" ActivityList="CompanyActivities"/>
<OfficeOrderInventoryListOverlay @ref="InventoryListOverlay" Company="Company" Inventory="CompanyInventory" OnSelected="InventoryCallback"/>

View file

@ -77,7 +77,7 @@ public partial class OfficeOrderCreatePage : IDisposable
// --------------------------------------------------------------------
// overlays
private PriceCatalogOverlay CatalogOverlay { get; set; } = new();
private CatalogPagedOverlay CatalogOverlay { get; set; } = new();
private OfficeCustomerInvoiceListOverlay InvoiceListOverlay { get; set; } = new();
private OfficeCustomerActivityListOverlay ActivityListOverlay { get; set; } = new();
private OfficeOrderInventoryListOverlay InventoryListOverlay { get; set; } = new();

View file

@ -1,62 +0,0 @@
@* 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,Office")]
@page "/office/users/advisors/{CountryCode}/{UserId}/customers"
<PageTitle>Kundeliste for @SalesRep.FirstName @SalesRep.LastName</PageTitle>
<div class="sticky-top bg-dark text-light rounded-2 px-3">
<div class="container-fluid pt-3">
<div class="row mb-2">
<div class="col-md-3">
<CustomerSearchColumnComponent OnChanged="SetSearchCol" />
</div>
<div class="col-md-3">
<CustomerSearchPhraseComponent OnChanged="SetSearchPhrase" />
</div>
<div class="col-md-3">
<CustomerSortComponent OnChanged="SetSortCol" />
</div>
<div class="col-md-3">
<PageSizeComponent OnChanged="SetPageSize" />
</div>
</div>
<div class="row mb-2">
<div class="col-3">
<div class="form-check">
<input type="checkbox" id="folded" class="form-check-input" checked="@IncludeFolded" @onclick="OnFoldedClick" >
<label for="folded" class="form-check-label">Ophørte</label>
</div>
</div>
<div class="col-6">
<PaginationComponent MetaData="ResponseMeta" Spread="2" SelectedPage="SelectedPage"/>
</div>
<div class="col-3 justify-content-end">
@* <a class="btn btn-success text-nowrap" href="/advisor/customers/new">Opret kunde</a> *@
</div>
</div>
</div>
</div>
<OfficeCountryCustomerListComponent CompanyList="@CompanyList" CountryCode="@CountryCode" />
@if (Working)
{
<WorkingThreeDots/>
}

View file

@ -16,14 +16,16 @@
@using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Admin,Office")]
@attribute [Authorize(Roles = "Admin,Office,Management")]
@page "/office/users/advisors/{CountryCode}"
<PageTitle>Sælger Oversigt @CountryName</PageTitle>
<div class="card">
<div class="card-header bg-dark text-white">
<h3>Sælgere</h3>
<div class="mt-3 h3 card-title">
Sælger Oversigt @CountryName
</div>
</div>
<div class="card-body">
<OfficeCountryAdvisorListComponent UserList="SalesReps" />

View file

@ -22,7 +22,9 @@
<PageTitle>Rapport Arkiv @UserInfo.FirstName @UserInfo.LastName</PageTitle>
<div class="card">
<div class="card-header">
<h3>Rapport Arkiv - @UserInfo.FirstName @UserInfo.LastName</h3>
<div class="mt-3 h3 card-title">
Rapport Arkiv - @UserInfo.FirstName @UserInfo.LastName
</div>
</div>
<OfficeReportListComponent OnShowReport="ShowThisReport" CountryCode="@CountryCode" UserId="@UserId" ReportList="@ActivityReports" />
</div>

View file

@ -21,7 +21,9 @@
<div class="card">
<div class="card-header bg-dark text-white">
<h3>Bruger info</h3>
<div class="mt-3 h3 card-title">
Sælger Vedligeholdelse
</div>
</div>
<div class="card-body">
@if (!string.IsNullOrWhiteSpace(UserInfo.UserId))

View file

@ -15,8 +15,17 @@
@page "/system/krv/products"
<h3>SystemKrvProductsAdminPage</h3>
<div class="card">
<div class="card-header bg-dark text-white">
<div class="mt-3 h3 card-title">
KRV Produkt Vedligeholdelse
</div>
</div>
<div class="card-body">
</div>
</div>
@code {
}

View file

@ -15,7 +15,15 @@
@page "/system/krv/protections"
<h3>SystemKrvProtectionsAdminPage</h3>
<div class="card">
<div class="card-header bg-dark text-white">
<div class="mt-3 h3 card-title">
KRV Værnemiddel Vedligeholdelse
</div>
</div>
<div class="card-body">
</div>
</div>
@code {

View file

@ -15,7 +15,15 @@
@page "/system/krv/texts"
<h3>SystemKrvTextsAdminPage</h3>
<div class="card">
<div class="card-header bg-dark text-white">
<div class="mt-3 h3 card-title">
KRV Risiko Tekst Vedligeholdelse
</div>
</div>
<div class="card-body">
</div>
</div>
@code {

View file

@ -18,9 +18,17 @@
@attribute [Authorize(Roles = "Admin")]
@page "/system/supervisors"
<PageTitle>SupervisorUserListPage</PageTitle>
<PageTitle>Supervisor Oversigt</PageTitle>
<h3>Supervisor User List Page</h3>
<div class="card">
<div class="card-header bg-dark text-white">
<div class="mt-3 h3 card-title">
Supervisor Oversigt
</div>
</div>
<div class="card-body">
</div>
</div>
@code {

View file

@ -21,8 +21,8 @@
<div class="card">
<div class="card-header bg-dark text-white">
<div class="card-title">
<h3>Bruger oprettelse</h3>
<div class="mt-3 h3 card-title">
System Bruger Oprettelse
</div>
</div>
<div class="card-body">
@ -64,7 +64,7 @@
<InputText id="countryCode" class="form-control" @bind-Value="NewUserInfo.CountryCode"/>
<ValidationMessage For="@(() => NewUserInfo.CountryCode)"></ValidationMessage>
</div>
@*
<div class="ms-2 col-sm-4 form-check form-switch">
<label for="lockoutEnabled" class="form-check-label">Spærret</label>
@ -72,7 +72,7 @@
<ValidationMessage For="@(() => NewUserInfo.LockoutEnabled)"></ValidationMessage>
</div>
*@
<div class="ms-2 col-sm-2 form-check form-switch">
<InputCheckbox id="admin" class="form-check-input" @bind-Value="AssignedRoles.Admin"/>
<label for="admin" class="form-check-label">Administrator</label>

View file

@ -18,10 +18,10 @@
@attribute [Authorize(Roles = "Admin")]
@page "/system/users"
<PageTitle>Administrativ - Bruger liste</PageTitle>
<PageTitle>System Bruger Oversigt</PageTitle>
<div class="row">
<div class="col">
<h3>Administrativ - Bruger liste</h3>
<h3>System Bruger Oversigt</h3>
</div>
<div class="col">
<div class="text-end">

View file

@ -19,9 +19,12 @@
@attribute [Authorize(Roles = "Admin")]
@page "/system/users/{UserId}"
<div class="card">
<div class="card-header bg-dark text-white">
<h3>Bruger info</h3>
<div class="mt-3 h3 card-title">
System Bruger Vedligeholdelse
</div>
</div>
<div class="card-body">
@if (!string.IsNullOrWhiteSpace(UserInfo.UserId))