WIP: user management

This commit is contained in:
Frede Hundewadt 2023-02-21 13:11:53 +01:00
parent 6ac4b111e3
commit a419b3fe66
74 changed files with 365 additions and 332 deletions

View file

@ -25,13 +25,13 @@
@code {
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
private int KmMorning { get; set; }
private UserProfile Profiles { get; set; } = new();
protected override async Task OnInitializedAsync()
{
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
KmMorning = Profiles.KmMorning;
}

View file

@ -21,6 +21,6 @@ namespace Wonky.Client.Components;
public partial class AdvisorActivityListComponent
{
[Parameter] public List<ReportItemView> ActivityList { get; set; } = new();
// [Inject] private NavigationManager Navigator { get; set; }
// [Inject] public NavigationManager Navigator { get; set; }
}

View file

@ -33,8 +33,8 @@ namespace Wonky.Client.Components
[Parameter] public List<CompanyDto> CompanyList { get; set; } = new();
[Parameter] public EventCallback<string> OnDelete { get; set; }
[Parameter] public EventCallback<string> OnSelect { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private IJSRuntime JsRuntime { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IJSRuntime JsRuntime { get; set; }
private Lazy<IJSObjectReference> BsTooltip { get; set; } = new();

View file

@ -32,7 +32,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class AdvisorLandingComponent
{
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
private readonly JsonSerializerOptions JsonOptions = new JsonSerializerOptions
{
@ -45,7 +45,7 @@ public partial class AdvisorLandingComponent
protected override async Task OnInitializedAsync()
{
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
SelectedDate = string.IsNullOrWhiteSpace(Profiles.WorkDate) ? DateTime.Now : DateTime.Parse(Profiles.WorkDate);
}

View file

@ -22,8 +22,8 @@ namespace Wonky.Client.Components;
public partial class CatalogGroupComponent
{
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new();
private UserProfile _profiles = new();

View file

@ -24,7 +24,7 @@ public partial class CatalogSearchComponent : IDisposable
/// <summary>
/// User preference service
/// </summary>
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
/// <summary>
/// OnChanged event callback
@ -47,7 +47,7 @@ public partial class CatalogSearchComponent : IDisposable
protected override async Task OnInitializedAsync()
{
ProfileService.OnChange += ProfileServiceOnOnChange;
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
SearchCol = Profiles.ItemSearch;
await OnChanged.InvokeAsync(SearchCol);
}

View file

@ -24,7 +24,7 @@ public partial class CatalogSortComponent : IDisposable
/// <summary>
/// User preference service
/// </summary>
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
/// <summary>
/// OnChanged callback function
@ -47,7 +47,7 @@ public partial class CatalogSortComponent : IDisposable
protected override async Task OnInitializedAsync()
{
ProfileService.OnChange += ProfileServiceOnOnChange;
_profiles = await ProfileService.GetPreferences();
_profiles = await ProfileService.GetProfile();
SortCol = _profiles.ItemSort;
}

View file

@ -23,7 +23,7 @@ namespace Wonky.Client.Components;
public partial class CustomerInventoryListComponent
{
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
// Parameters
[Parameter] public List<ProductInventoryView> Inventory { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";

View file

@ -24,7 +24,7 @@ public partial class CustomerProductCheckListComponent
{
[Parameter] public List<ProductInventoryView> ProductList { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
// private variables
private bool Descending { get; set; }

View file

@ -24,8 +24,8 @@ namespace Wonky.Client.Components;
public partial class CustomerSearchColumnComponent : IDisposable
{
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new();
private UserProfile Profiles { get; set; } = new();
@ -33,7 +33,7 @@ public partial class CustomerSearchColumnComponent : IDisposable
protected override async Task OnInitializedAsync()
{
ProfileService.OnChange += ProfileServiceOnOnChange;
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
SearchCol = Profiles.CompanySearch;
}
private async Task OnSelectionChanged(ChangeEventArgs e)

View file

@ -26,12 +26,12 @@ namespace Wonky.Client.Components
private Timer InputTimer { get; set; } = new();
private string SearchTerm { get; set; } = "";
private UserProfile Profiles { get; set; } = new ();
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
protected override async Task OnInitializedAsync()
{
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
SearchTerm = string.IsNullOrWhiteSpace(Profiles.CompanyFilterPhrase) ? "" : Profiles.CompanyFilterPhrase.Trim();
if(!string.IsNullOrWhiteSpace(SearchTerm))

View file

@ -24,8 +24,8 @@ namespace Wonky.Client.Components
{
public partial class CustomerSortComponent : IDisposable
{
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new();
private UserProfile _profiles = new();
@ -33,7 +33,7 @@ namespace Wonky.Client.Components
protected override async Task OnInitializedAsync()
{
ProfileService.OnChange += ProfileServiceOnOnChange;
_profiles = await ProfileService.GetPreferences();
_profiles = await ProfileService.GetProfile();
SortCol = _profiles.CompanySort;
}
private async Task OnSelectionChanged(ChangeEventArgs e)

View file

@ -34,8 +34,8 @@
<td>Ubehandlet</td>
</tr>
<tr>
<td><i class="bi-hand-thumbs-up" style="font-size:1.3rem"></i></td>
<td>Accepteret</td>
<td><i class="bi-printer" style="font-size:1.3rem"></i></td>
<td>Udskrevet</td>
</tr>
<tr>
<td><i class="bi-file-earmark-check" style="font-size:1.3rem"></i></td>

View file

@ -40,8 +40,8 @@ namespace Wonky.Client.Components
// ******************************************************
// injects
[Inject] public ICountryCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public ICountryActivityRepository ActivityRepo { get; set; }
[Inject] public ICountryCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public ICountryActivityRepository ActivityRepo { get; set; }
// ******************************************************
// overlays

View file

@ -33,7 +33,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class OfficeLandingComponent
{
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{
@ -48,7 +48,7 @@ public partial class OfficeLandingComponent
protected override async Task OnInitializedAsync()
{
ProfileService.OnChange += ProfileChanged;
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
if (string.IsNullOrWhiteSpace(Profiles.WorkDate))
{
await ProfileService.SetWorkDate(DateTime.Now);

View file

@ -22,7 +22,7 @@ namespace Wonky.Client.Components;
public partial class OfficeReportActivityListComponent
{
[Parameter] public List<ReportItemView> ActivityList { get; set; } = new();
[Inject] private NavigationManager Navigator { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
private void ShowOrder(string companyId, string orderId)
{

View file

@ -24,8 +24,8 @@ namespace Wonky.Client.Components
{
public partial class PageSizeComponent : IDisposable
{
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new();
private UserProfile _profiles = new();
@ -34,7 +34,7 @@ namespace Wonky.Client.Components
protected override async Task OnInitializedAsync()
{
ProfileService.OnChange += ProfileServiceOnOnChange;
_profiles = await ProfileService.GetPreferences();
_profiles = await ProfileService.GetProfile();
PageSize = _profiles.PageSize;
}

View file

@ -23,5 +23,5 @@ namespace Wonky.Client.Components;
public partial class ProductPriceListComponent
{
[Parameter] public List<SalesItemView> ItemList { get; set; } = new();
[Inject] private IToastService ToastService { get; set; }
[Inject] public IToastService ToastService { get; set; }
}

View file

@ -28,7 +28,7 @@ public partial class WorkDateComponent : IDisposable
/// <summary>
/// User preference service
/// </summary>
[Inject] public UserProfileService Profiles { get; set; }
[Inject] public UserProfileService UserProfile { get; set; }
/// <summary>
/// OnChanged callback function
@ -56,8 +56,8 @@ public partial class WorkDateComponent : IDisposable
protected override async Task OnInitializedAsync()
{
WorkDateContext = new EditContext(SelectedDate);
Profiles.OnChange += ProfileServiceOnOnChange;
Profile = await Profiles.GetPreferences();
UserProfile.OnChange += ProfileServiceOnOnChange;
Profile = await UserProfile.GetProfile();
SelectedDate = string.IsNullOrWhiteSpace(Profile.WorkDate)
? DateTime.Now
: DateTime.Parse(Profile.WorkDate);
@ -72,7 +72,7 @@ public partial class WorkDateComponent : IDisposable
var x = DateTime.TryParse(e.Value.ToString(), out var setDate);
if (x)
{
await Profiles.SetWorkDate(setDate);
await UserProfile.SetWorkDate(setDate);
await OnChangedCallback.InvokeAsync($"{setDate:yyyy-MM-dd}");
}
}
@ -92,6 +92,6 @@ public partial class WorkDateComponent : IDisposable
/// </summary>
public void Dispose()
{
Profiles.OnChange -= ProfileServiceOnOnChange;
UserProfile.OnChange -= ProfileServiceOnOnChange;
}
}

View file

@ -26,9 +26,9 @@ namespace Wonky.Client.OverlayCustomer;
public partial class CustomerInventoryListOverlay : IDisposable
{
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ICountryCatalogRepository CatalogRepo { get; set; }
[Inject] private ILogger<CustomerInventoryListOverlay> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICountryCatalogRepository CatalogRepo { get; set; }
[Inject] public ILogger<CustomerInventoryListOverlay> Logger { get; set; }
[Parameter] public string CompanyName { get; set; } = "";
[Parameter] public string CompanyId { get; set; } = "";

View file

@ -27,7 +27,7 @@ public partial class CustomerInventoryReorderOverlay
{
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public SalesItemView SalesItem { get; set; } = new();
[Inject] private IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Parameter] public EventCallback<DraftItem> OnSelected { get; set; }
private List<ProductHistoryView>? History { get; set; } = new();
private DraftItem SelectedItem { get; set; } = new();

View file

@ -25,7 +25,7 @@ public partial class CustomerInvoiceListOverlay
{
[Parameter] public InvoiceListView CustomerInvoices { get; set; } = new();
[Inject] private ILogger<CustomerInvoiceListOverlay> Logger { get; set; }
[Inject] public ILogger<CustomerInvoiceListOverlay> Logger { get; set; }
private CustomerInvoiceViewOverlay CustomerInvoiceView { get; set; } = new();
private string InvoiceId { get; set; } = "";
private string _modalDisplay = "";

View file

@ -26,8 +26,8 @@ public partial class CustomerInvoiceViewOverlay : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string InvoiceId { get; set; } = "";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
private string _modalDisplay = "";
private bool _showBackdrop;
private InvoiceView Invoice { get; set; } = new();

View file

@ -28,7 +28,7 @@ public partial class OfficeCustomerInventoryReorderOverlay
{
[Parameter] public CompanyDto Company { get; set; }
[Parameter] public SalesItemView SalesItem { get; set; } = new();
[Inject] public ICountryCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public ICountryCustomerHistoryRepository HistoryRepo { get; set; }
[Parameter] public EventCallback<DraftItem> OrderItemCallback { get; set; }
private List<ProductHistoryView> History { get; set; } = new();
private DraftItem SelectedItem { get; set; } = new();

View file

@ -27,7 +27,7 @@ public partial class OfficeCustomerInvoiceListOverlay
[Parameter] public InvoiceListView InvoiceList { get; set; } = new();
[Parameter] public CompanyDto Company { get; set; } = new();
// dependency injection
[Inject] private ILogger<OfficeCustomerInvoiceListOverlay> Logger { get; set; }
[Inject] public ILogger<OfficeCustomerInvoiceListOverlay> Logger { get; set; }
private string InvoiceId { get; set; } = "";
private string _modalDisplay = "";
private bool _showBackdrop;

View file

@ -27,8 +27,8 @@ public partial class OfficeCustomerInvoiceViewOverlay : IDisposable
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string InvoiceId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ICountryCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICountryCustomerHistoryRepository HistoryRepo { get; set; }
private string _modalDisplay = "";
private bool _showBackdrop;

View file

@ -26,9 +26,9 @@ namespace Wonky.Client.OverlayOffice;
public partial class OfficeCustomerProductListOverlay : IDisposable
{
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ICountryCatalogRepository CatalogRepo { get; set; }
[Inject] private ILogger<OfficeCustomerProductListOverlay> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICountryCatalogRepository CatalogRepo { get; set; }
[Inject] public ILogger<OfficeCustomerProductListOverlay> Logger { get; set; }
private string _modalDisplay = "";
private bool _showBackdrop;

View file

@ -29,10 +29,10 @@ namespace Wonky.Client.OverlayOrderCreate;
public partial class PriceCatalogOverlay : IDisposable
{
// injections
[Inject] private ICountryCatalogRepository CatalogRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] private ILogger<PriceCatalogOverlay> Logger { get; set; }
[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; }
// parameters
[Parameter] public string CountryCode { get; set; } = "";
[Parameter] public EventCallback<SelectedSku> OnSelected { get; set; }
@ -53,7 +53,7 @@ public partial class PriceCatalogOverlay : IDisposable
protected override async Task OnInitializedAsync()
{
_userProfile = await ProfileService.GetPreferences();
_userProfile = await ProfileService.GetProfile();
_pager.OrderBy = _userProfile.ItemSort;
_pager.SearchColumn = _userProfile.ItemSearch;
_pager.PageSize = Convert.ToInt32(_userProfile.PageSize);

View file

@ -27,7 +27,7 @@ public partial class ProductHistoryOverlay
// [Parameter] public EventCallback<decimal> OnSelected { get; set; }
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string ItemSku { get; set; } = "";
[Inject] private IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
private List<ProductHistoryView>? History { get; set; }
private string ProductName { get; set; } = "";
private string _modalDisplay = "";

View file

@ -27,7 +27,7 @@ public partial class ProductPriceHistoryOverlay
[Parameter] public EventCallback<decimal> OnSelected { get; set; }
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string Sku { get; set; } = "";
[Inject] private IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
private List<ProductHistoryView>? History { get; set; }
private string ProductName { get; set; } = "";
private string _modalDisplay = "";

View file

@ -48,7 +48,7 @@ public partial class AdvisorActivityCreatePage : IDisposable
[Inject] public IAdvisorActivityRepository ActivityRepo { get; set; }
[Inject] public IAdvisorReportRepository ReportRepo { get; set; }
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
[CascadingParameter] private DraftStateProvider DraftProvider { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
@ -106,7 +106,7 @@ public partial class AdvisorActivityCreatePage : IDisposable
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
// User Preferences
UserProfile = await ProfileService.GetPreferences();
UserProfile = await ProfileService.GetProfile();
// User Info
SalesRep = await UserInfoService.GetUserInfo();
// Fetch Customer from http

View file

@ -27,13 +27,13 @@ namespace Wonky.Client.Pages;
public partial class AdvisorActivityTodayListPage : IDisposable
{
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] private ILogger<AdvisorActivityTodayListPage> Logger { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private IAdvisorActivityRepository ActivityRepo { get; set; }
[Inject] private IAdvisorReportRepository ReportRepo { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public ILogger<AdvisorActivityTodayListPage> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IAdvisorActivityRepository ActivityRepo { get; set; }
[Inject] public IAdvisorReportRepository ReportRepo { get; set; }
[Inject] public IToastService Toaster { get; set; }
private ReportStatusView ReportStatusView { get; set; } = new();
private UserProfile UserProfile { get; set; } = new();
private DateTime SelectedDate { get; set; }
@ -44,7 +44,7 @@ public partial class AdvisorActivityTodayListPage : IDisposable
{
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
UserProfile = await ProfileService.GetPreferences();
UserProfile = await ProfileService.GetProfile();
SelectedDate = string.IsNullOrWhiteSpace(UserProfile.WorkDate) ? DateTime.Now : DateTime.Parse(UserProfile.WorkDate);
ReportExist = await ReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}");
await GetActivities($"{SelectedDate:yyyy-MM-dd}");

View file

@ -30,11 +30,11 @@ public partial class AdvisorActivityViewPage : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string OrderId { get; set; } = "";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] private ILogger<AdvisorActivityViewPage> Logger { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public ILogger<AdvisorActivityViewPage> Logger { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
private ReportItemView ReportItem { get; set; } = new();
private ActivityOfficeNote Note { get; set; } = new();
private EditContext NoteContext { get; set; }

View file

@ -27,9 +27,9 @@ namespace Wonky.Client.Pages;
public partial class AdvisorCustomerActivityListPage : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] private IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
private List<ReportItemView> ActivityList { get; set; } = new();
private CompanyDto Company { get; set; } = new();
private bool Working { get; set; } = true;

View file

@ -34,14 +34,14 @@ namespace Wonky.Client.Pages
{
public partial class AdvisorCustomerCreatePage : IDisposable
{
[Inject] private IToastService Toaster { get; set; }
[Inject] private ILogger<AdvisorCustomerCreatePage> Logger { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private VatInfoLookupService VatService { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ILogger<AdvisorCustomerCreatePage> Logger { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public VatInfoLookupService VatService { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
private EditContext CompanyContext { get; set; }
private CompanyDto Company { get; set; } = new();

View file

@ -31,13 +31,13 @@ namespace Wonky.Client.Pages;
public partial class AdvisorCustomerInventoryListPage : IDisposable
{
[Inject] private IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] private IAdvisorCustomerRepository CustomerREpo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] private ILogger<AdvisorCustomerInventoryListPage> Logger { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private ICountryCatalogRepository CatalogRepo { get; set; }
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IAdvisorCustomerRepository CustomerREpo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ILogger<AdvisorCustomerInventoryListPage> Logger { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public ICountryCatalogRepository CatalogRepo { get; set; }
[CascadingParameter] public DraftStateProvider DraftStateProvider { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";

View file

@ -30,12 +30,12 @@ namespace Wonky.Client.Pages;
public partial class AdvisorCustomerInvoiceListPage : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private ILogger<AdvisorCustomerInvoiceListPage> Logger { get; set; }
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public ILogger<AdvisorCustomerInvoiceListPage> Logger { get; set; }
private InvoiceListView CompanyInvoices { get; set; } = new();
private CompanyDto Company { get; set; } = new();
private CustomerInvoiceViewOverlay CustomerInvoiceView { get; set; } = new();

View file

@ -28,12 +28,12 @@ namespace Wonky.Client.Pages
{
public partial class AdvisorCustomerListPage : IDisposable
{
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] private IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
private List<CompanyDto> CompanyList { get; set; } = new();
private UserProfile Profiles { get; set; } = new();
@ -55,7 +55,7 @@ namespace Wonky.Client.Pages
protected override async Task OnInitializedAsync()
{
// set preferences
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
XUserInfo = await UserInfoService.GetUserInfo();
Paging.OrderBy = Profiles.CompanySort;
Paging.SearchColumn = Profiles.CompanySearch;

View file

@ -36,16 +36,16 @@ namespace Wonky.Client.Pages;
public partial class AdvisorCustomerViewPage : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private IToastService Toaster { get; set; }
[Inject] private ILogger<AdvisorCustomerViewPage> Logger { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] private IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] private IAdvisorContactRepository AdvisorContactRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private VatInfoLookupService VatService { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ILogger<AdvisorCustomerViewPage> Logger { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IAdvisorContactRepository AdvisorContactRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public VatInfoLookupService VatService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
private readonly JsonSerializerOptions _options = new () { PropertyNameCaseInsensitive = true };
private CompanyDto Company { get; set; } = new();

View file

@ -28,11 +28,11 @@ namespace Wonky.Client.Pages;
public partial class AdvisorQuoteListPage : IDisposable
{
[Inject] private IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ILogger<AdvisorQuoteListPage> Logger { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ILogger<AdvisorQuoteListPage> Logger { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
private List<ReportItemView> QuoteList { get; set; } = new();
private List<ReportItemView> FilteredQuotes { get; set; } = new();
private bool Working { get; set; }

View file

@ -31,13 +31,13 @@ namespace Wonky.Client.Pages;
public partial class AdvisorReportCreatePage : IDisposable
{
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] private IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] private IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private ILogger<AdvisorReportCreatePage> Logger { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILogger<AdvisorReportCreatePage> Logger { get; set; }
[Inject] public IToastService Toaster { get; set; }
private EditContext ReportContext { get; set; }
private ReportDto Report { get; set; } = new();
private List<ReportItemView> Activities { get; set; } = new();
@ -70,7 +70,7 @@ public partial class AdvisorReportCreatePage : IDisposable
ReportContext.OnValidationStateChanged += ValidationChanged;
ProfileService.OnChange += ProfileServiceOnOnChange;
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
Logger.LogDebug("{}", JsonSerializer.Serialize(Profiles));
WorkDate = Profiles.WorkDate;

View file

@ -24,10 +24,10 @@ namespace Wonky.Client.Pages;
public partial class AdvisorReportListPage : IDisposable
{
[Inject] private IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private ILogger<AdvisorReportListPage> Logger { get; set; }
[Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILogger<AdvisorReportListPage> Logger { get; set; }
private List<SalesReportListView> ReportList { get; set; } = new();
private bool Working { get; set; }

View file

@ -29,13 +29,13 @@ namespace Wonky.Client.Pages;
public partial class AdvisorReportViewPage : IDisposable
{
[Parameter] public string ReportDate { get; set; }
[Inject] private IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ILogger<AdvisorReportViewPage> Logger { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
[Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ILogger<AdvisorReportViewPage> Logger { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
private UserProfile Profiles { get; set; } = new();
private ReportView Report { get; set; } = new();

View file

@ -26,12 +26,12 @@ namespace Wonky.Client.Pages;
public partial class AdvisorTaskItemListCrmPage : IDisposable
{
[Inject] private UserProfileService UserProfileService { get; set; }
[Inject] private ILogger<AdvisorTaskItemListCrmPage> Logger { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private IAdvisorTaskItemRepository TaskRepo { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] public UserProfileService UserProfileService { get; set; }
[Inject] public ILogger<AdvisorTaskItemListCrmPage> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IAdvisorTaskItemRepository TaskRepo { get; set; }
[Inject] public IToastService Toaster { get; set; }
private UserProfile Profile { get; set; } = new();
private string WorkDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
@ -40,7 +40,7 @@ public partial class AdvisorTaskItemListCrmPage : IDisposable
protected override async Task OnInitializedAsync()
{
Profile = await UserProfileService.GetPreferences();
Profile = await UserProfileService.GetProfile();
if(!string.IsNullOrWhiteSpace(Profile.WorkDate))
WorkDate = Profile.WorkDate;

View file

@ -27,8 +27,8 @@ namespace Wonky.Client.Pages;
public partial class AdvisorTaskItemViewCrmPage : IDisposable
{
[Parameter] public string TaskItemId { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IAdvisorTaskItemRepository TaskRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IAdvisorTaskItemRepository TaskRepo { get; set; }
private TaskItemDto TaskItem { get; set; } = new ();
private EditContext TaskContext { get; set; }
private bool Working { get; set; } = true;

View file

@ -26,8 +26,8 @@ public partial class AdvisorWorkplaceDocumentListPage
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string WorkplaceId { get; set; } = "";
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private IAdvisorWorkplaceRepository Workplaces { get; set; }
[Inject] public HttpInterceptorService _interceptor { get; set; }
[Inject] public IAdvisorWorkplaceRepository Workplaces { get; set; }
private bool Working { get; set; } = true;
}

View file

@ -26,9 +26,9 @@ namespace Wonky.Client.Pages;
public partial class AdvisorWorkplaceListPage : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private IAdvisorWorkplaceRepository WorkplaceRepo { get; set; }
[Inject] private IAdvisorCustomerRepository CustomerRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] public IAdvisorWorkplaceRepository WorkplaceRepo { get; set; }
[Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
private List<WorkplaceListView> WorkplaceList { get; set; } = new();
private CompanyDto Company { get; set; } = new();
private bool Working { get; set; } = true;

View file

@ -27,10 +27,10 @@ public partial class AdvisorWorkplaceViewPage : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string WorkplaceId { get; set; } = "";
[Inject] private IAdvisorWorkplaceRepository Workplaces { get; set; }
[Inject] private IAdvisorCustomerRepository CustomerRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] public IAdvisorWorkplaceRepository Workplaces { get; set; }
[Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
private WorkplaceDto Workplace { get; set; } = new();
private EditContext WorkplaceContext { get; set; }
private bool Working { get; set; } = true;

View file

@ -31,13 +31,13 @@ namespace Wonky.Client.Pages;
public partial class CatalogCountryPage : IDisposable
{
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private ICountryCatalogRepository Catalog { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] private ILogger<CatalogCountryPage> Logger { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
[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 NavigationManager Navigator { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
[Parameter] public string CountryCode { get; set; } = "";
@ -51,7 +51,7 @@ public partial class CatalogCountryPage : IDisposable
protected override async Task OnInitializedAsync()
{
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
XUserInfo = await UserInfoService.GetUserInfo();
Pager.OrderBy = Profiles.ItemSort;

View file

@ -26,9 +26,9 @@ namespace Wonky.Client.Pages;
public partial class CatalogCountryPrintPage : IDisposable
{
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private ICountryCatalogRepository Catalog { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public ICountryCatalogRepository Catalog { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Parameter] public string CountryCode { get; set; } = "";
private List<SalesItemView> Items { get; set; } = new();
private bool Working { get; set; } = true;

View file

@ -21,7 +21,7 @@ namespace Wonky.Client.Pages;
public partial class ErrorPage404
{
[Inject] private NavigationManager NavigationManager { get; set; }
[Inject] public NavigationManager NavigationManager { get; set; }
private void NavigateToHome()
{

View file

@ -23,9 +23,9 @@ namespace Wonky.Client.Pages;
public partial class Login
{
[Inject] private NavigationManager NavigationManager { get; set; }
[Inject] private IAuthenticationService AuthenticationService { get; set; }
[Inject] private ILogger<Login> Logger { get; set; }
[Inject] public NavigationManager NavigationManager { get; set; }
[Inject] public IAuthenticationService AuthenticationService { get; set; }
[Inject] public ILogger<Login> Logger { get; set; }
[Parameter] public string ReturnUrl { get; set; } = "";
private CredentialDto CredentialDto { get; set; } = new ();
private bool ShowAuthError { get; set; }

View file

@ -23,8 +23,8 @@ namespace Wonky.Client.Pages;
public partial class Logout
{
[Inject] private IAuthenticationService AuthenticationService { get; set; }
[Inject] private NavigationManager NavigationManager { get; set; }
[Inject] public IAuthenticationService AuthenticationService { get; set; }
[Inject] public NavigationManager NavigationManager { get; set; }
[Inject] private ILocalStorageService LocalStorage { get; set; }
protected override async Task OnInitializedAsync()

View file

@ -34,15 +34,15 @@ public partial class OfficeAdvisorReportViewPage : IDisposable
[Parameter] public string CountryCode { get; set; } = "";
[Parameter] public string UserId { get; set; } = "";
[Parameter] public string ReportDate { get; set; } = "";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ICountryReportRepository ReportRepo { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private ILogger<OfficeAdvisorReportViewPage> Logger { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] private IJSRuntime JsRuntime { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] private IOrderProcessRepository ProcessRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICountryReportRepository ReportRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILogger<OfficeAdvisorReportViewPage> Logger { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public IJSRuntime JsRuntime { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public IOrderProcessRepository ProcessRepo { get; set; }
private IJSObjectReference JsModule { get; set; }
private ReportView Report { get; set; } = new();
private List<ReportItemView> Activities { get; set; } = new();

View file

@ -29,12 +29,12 @@ namespace Wonky.Client.Pages
public partial class OfficeCountryCustomerListPage : IDisposable
{
[Parameter] public string CountryCode { get; set; } = "";
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserProfileService ProfileService { get; set; }
[Inject] private ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
private List<CompanyDto> Companies { get; set; } = new();
private UserProfile Profiles { get; set; } = new();
@ -54,7 +54,7 @@ namespace Wonky.Client.Pages
Interceptor.RegisterBeforeSendEvent();
// set preferences
Profiles = await ProfileService.GetPreferences();
Profiles = await ProfileService.GetProfile();
XUserInfo = await UserInfoService.GetUserInfo();
Paging.OrderBy = Profiles.CompanySort;
Paging.SearchColumn = Profiles.CompanySearch;

View file

@ -31,13 +31,13 @@ namespace Wonky.Client.Pages;
public partial class OfficeOrderCreatePage : IDisposable
{
[Inject] private ILogger<OfficeOrderCreatePage> Logger { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] private ICountryCustomerHistoryRepository InventoryRepo { get; set; }
[Inject] private ICountryReportRepository ReportRepo { get; set; }
[Inject] private ISystemUserRepository UserRepo { get; set; }
[Inject] private ICountryCatalogRepository Catalog { get; set; }
[Inject] public ILogger<OfficeOrderCreatePage> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] public ICountryCustomerHistoryRepository InventoryRepo { get; set; }
[Inject] public ICountryReportRepository ReportRepo { get; set; }
[Inject] public ISystemUserRepository UserRepo { get; set; }
[Inject] public ICountryCatalogRepository Catalog { get; set; }
// parameters
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "";

View file

@ -32,14 +32,14 @@ public partial class OfficeOrderViewPage : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string OrderId { get; set; } = "";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] private ISystemSendMailService MailService { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private ISystemUserRepository SystemUserRepo { get; set; }
[Inject] private ILogger<OfficeOrderViewPage> Logger { get; set; }
[Inject] private IToastService Toast { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
[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 ISystemUserRepository SystemUserRepo { get; set; }
[Inject] public ILogger<OfficeOrderViewPage> Logger { get; set; }
[Inject] public IToastService Toast { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
private ReportItemView ReportItem { get; set; } = new();
private bool IsNotified { get; set; }

View file

@ -27,10 +27,10 @@ namespace Wonky.Client.Pages;
public partial class OfficeUserAdvisorCustomerListPage : IDisposable
{
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] private UserProfileService UserProfileService { get; set; }
[Inject] private ISystemUserRepository UserRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] public UserProfileService UserProfileService { get; set; }
[Inject] public ISystemUserRepository UserRepo { get; set; }
[Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "dk";
@ -52,7 +52,7 @@ public partial class OfficeUserAdvisorCustomerListPage : IDisposable
SalesRep = await UserRepo.GetUserInfo(UserId);
// set preferences
UserProfile = await UserProfileService.GetPreferences();
UserProfile = await UserProfileService.GetProfile();
Paging.OrderBy = UserProfile.CompanySort;
Paging.SearchColumn = UserProfile.CompanySearch;
Paging.PageSize = Convert.ToInt32(UserProfile.PageSize);

View file

@ -25,8 +25,8 @@ namespace Wonky.Client.Pages;
public partial class OfficeUserAdvisorListPage :IDisposable
{
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ISystemUserRepository SystemUserRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ISystemUserRepository SystemUserRepo { get; set; }
[Parameter] public string CountryCode { get; set; } = "";
private List<UserManagerListView> SalesReps { get; set; } = new();
private bool Working { get; set; } = true;

View file

@ -27,10 +27,10 @@ public partial class OfficeUserAdvisorReportListPage : IDisposable
{
[Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "";
[Inject] private ICountryReportRepository ReportRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ISystemUserRepository SystemUserRepo { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] public ICountryReportRepository ReportRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ISystemUserRepository SystemUserRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
private List<SalesReportListView> ActivityReports { get; set; } = new();
private bool Working { get; set; } = true;
private UserManagerEditView UserInfo { get; set; } = new();

View file

@ -32,12 +32,12 @@ public partial class ReportPrintOrderPage
[Parameter] public string CountryCode { get; set; } = "";
[Parameter] public string UserId { get; set; } = "";
[Parameter] public string ReportDate { get; set; } = "";
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private IOrderProcessRepository ProcessRepo { get; set; }
[Inject] private IJSRuntime JsRuntime { get; set; }
[Inject] private ILogger<ReportPrintOrderPage> Logger { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IOrderProcessRepository ProcessRepo { get; set; }
[Inject] public IJSRuntime JsRuntime { get; set; }
[Inject] public ILogger<ReportPrintOrderPage> Logger { get; set; }
[Inject] public IToastService Toaster { get; set; }
private ReportView Report { get; set; } = new();
private List<ReportItemView> Items { get; set; } = new();
private IJSObjectReference JsModule { get; set; }

View file

@ -28,10 +28,10 @@ public partial class ReportPrintSummaryPage
[Parameter] public string CountryCode { get; set; } = "";
[Parameter] public string UserId { get; set; } = "";
[Parameter] public string ReportDate { get; set; } = "";
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private IJSRuntime JsRuntime { get; set; }
[Inject] private ILogger<ReportPrintSummaryPage> Logger { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IJSRuntime JsRuntime { get; set; }
[Inject] public ILogger<ReportPrintSummaryPage> Logger { get; set; }
private ReportView Report { get; set; } = new();
private IJSObjectReference JsModule { get; set; }
private string ReturnUrl { get; set; } = "";

View file

@ -31,11 +31,11 @@ public partial class SystemUserViewEditPage : IDisposable
{
[Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "";
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ISystemUserRepository UserRepo { get; set; }
// [Inject] public ILogger<SystemUserViewEditPage> Logger { get; set; }
// [Inject] public NavigationManager Navigator { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ISystemUserRepository UserRepo { get; set; }
// [Inject] public ILogger<SystemUserViewEditPage> Logger { get; set; }
// [Inject] public NavigationManager Navigator { get; set; }
[Inject] public IToastService Toaster { get; set; }
private UserManagerEditView UserInfo { get; set; } = new();
private EditContext UserEditContext { get; set; }
private ResetPasswordDto Passwords { get; set; } = new();

View file

@ -29,9 +29,9 @@ public partial class WarehouseOrderListPage : IDisposable
{
[Parameter] public string Status { get; set; } = "none";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IOrderProcessRepository OrderProcessRepo { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IOrderProcessRepository OrderProcessRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
private List<WarehouseOrderView> OrderList { get; set; } = new();
private bool Working { get; set; } = true;

View file

@ -28,11 +28,11 @@ namespace Wonky.Client.Pages;
public partial class WarehouseOrderViewPage : IDisposable
{
[Parameter] public string OrderId { get; set; } = "";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private IOrderProcessRepository OrderProcessRepo { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private IToastService Toast { get; set; }
[Inject] private ILogger<WarehouseOrderViewPage> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IOrderProcessRepository OrderProcessRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
[Inject] public IToastService Toast { get; set; }
[Inject] public ILogger<WarehouseOrderViewPage> Logger { get; set; }
private WarehouseOrderView Order { get; set; } = new();
private bool Working { get; set; } = true;

View file

@ -54,6 +54,9 @@ builder.Services.AddHttpClientInterceptor();
builder.Services.Configure<ApiConfig>(builder.Configuration.GetSection("ApiConfig"));
// app info object
builder.Services.Configure<AppInfo>(builder.Configuration.GetSection("AppInfo"));
// user
builder.Services.AddScoped<IUserInfoService, UserInfoService>();
builder.Services.AddScoped<UserProfileService, UserProfileService>();
// crm repositories
builder.Services.AddScoped<IAdvisorActivityRepository, AdvisorActivityRepository>();
builder.Services.AddScoped<IAdvisorCustomerRepository, AdvisorCustomerRepository>();
@ -75,7 +78,6 @@ builder.Services.AddScoped<IOrderProcessRepository, OrderProcessRepository>();
builder.Services.AddScoped<ISystemSendMailService, SystemSendMailService>();
// interceptor
builder.Services.AddScoped<HttpInterceptorService>();
builder.Services.AddScoped<UserInfoService>();
// storage
builder.Services.AddBlazoredLocalStorage();
// authorization
@ -88,8 +90,6 @@ builder.Services.AddScoped<IAuthenticationService, AuthenticationService>();
builder.Services.AddScoped<RefreshTokenService>();
// vat registry service
builder.Services.AddScoped<VatInfoLookupService>();
// preference service
builder.Services.AddScoped<UserProfileService>();
// activity draft service
builder.Services.AddScoped<OrderDraftService>();

View file

@ -31,23 +31,29 @@ namespace Wonky.Client.Services
private readonly JsonSerializerOptions _options = new() { PropertyNameCaseInsensitive = true };
private readonly HttpClient _client;
private readonly AuthenticationStateProvider _authStateProvider;
private readonly ILocalStorageService _localStorage;
private readonly IOptions<ApiConfig> _apiConfig;
private readonly ILogger<AuthenticationService> _logger;
private readonly IUserInfoService _infoService;
private readonly UserProfileService _profile;
private readonly ILocalStorageService _localStorage;
public AuthenticationService(
HttpClient client,
AuthenticationStateProvider authStateProvider,
ILocalStorageService localStorage,
IOptions<ApiConfig> apiConfig,
ILogger<AuthenticationService> logger
ILogger<AuthenticationService> logger,
IUserInfoService infoService,
UserProfileService profile,
ILocalStorageService localStorage
)
{
_client = client;
_authStateProvider = authStateProvider;
_localStorage = localStorage;
_apiConfig = apiConfig;
_logger = logger;
_infoService = infoService;
_profile = profile;
_localStorage = localStorage;
}
public async Task<AuthResponseView> Login(CredentialDto credentials)
@ -70,19 +76,18 @@ namespace Wonky.Client.Services
IsSuccess = false, ErrorMessage = $"Kontroller indtastning"
};
_logger.LogDebug("response {}", resContent);
// process response content
var data = JsonSerializer.Deserialize<AuthResponseView>(resContent, _options);
await _localStorage.SetItemAsync("_xa", data.AccessToken);
await _localStorage.SetItemAsync("_xr", data.RefreshToken);
await _localStorage.SetItemAsync("_xe", (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60);
await _infoService.SetAccessToken(data.AccessToken);
await _infoService.SetRefreshToken(data.RefreshToken);
await _infoService.SetExpiration((int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60);
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", data.AccessToken);
var userInfo = await UserInfo();
await _localStorage.SetItemAsync("_xu", userInfo);
await _infoService.SetUserInfo(userInfo);
// notify system on state change
((AuthStateProvider)_authStateProvider).NotifyUserAuthenticationAsync(data.AccessToken);
@ -92,7 +97,7 @@ namespace Wonky.Client.Services
public async Task<string> RefreshToken()
{
var refreshToken = await _localStorage.GetItemAsync<string>("_xr");
var refreshToken = await _infoService.GetRefreshToken();
var credentials = new Dictionary<string, string>
{
["grant_type"] = "refresh_token",
@ -110,38 +115,30 @@ namespace Wonky.Client.Services
// set default request headers using access_token
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", data.AccessToken);
await _localStorage.SetItemAsync("_xa", data.AccessToken);
await _localStorage.SetItemAsync("_xr", data.RefreshToken);
await _localStorage.SetItemAsync("_xe", (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60);
await _infoService.SetAccessToken(data.AccessToken);
await _infoService.SetRefreshToken(data.RefreshToken);
await _infoService.SetExpiration((int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60);
return data.AccessToken;
}
public async Task Logout()
{
// create a backup copy of user profile
var profileBackup = await _localStorage.GetItemAsync<UserProfile>("preferences");
// clear storage
var profileBackup = await _profile.GetProfile();
Task.Delay(150);
await _localStorage.ClearAsync();
// write profile back
await _localStorage.SetItemAsync("preferences", profileBackup);
// remove authentication headers
Task.Delay(150);
await _profile.SetProfile(profileBackup);
_client.DefaultRequestHeaders.Authorization = null;
// notify logout
((AuthStateProvider)_authStateProvider).NotifyUserLogout();
}
public async Task<UserManagerEditView> UserInfo(bool write = false)
{
_logger.LogDebug("sending userinfo request");
var response = await _client.GetAsync(_apiConfig.Value.UserInfo).ConfigureAwait(true);
var content = await response.Content.ReadAsStringAsync();
_logger.LogDebug("UserInfo <= {}", content);
var userInfo = JsonSerializer.Deserialize<UserManagerEditView>(content, _options);
if(write)
await _localStorage.SetItemAsync("_xui", userInfo);
await _infoService.SetUserInfo(userInfo);
return userInfo ?? new UserManagerEditView();
}
}

View file

@ -0,0 +1,15 @@
using Wonky.Entity.DTO;
namespace Wonky.Client.Services;
public interface IUserInfoService
{
Task<UserManagerEditView> GetUserInfo();
Task SetUserInfo(UserManagerEditView userInfo);
Task<string> GetRefreshToken();
Task SetRefreshToken(string token);
Task<string> GetAccessToken();
Task SetAccessToken(string token);
Task<long> GetExpiration();
Task SetExpiration(long expiration);
}

View file

@ -1,14 +1,62 @@
using System.Security.Cryptography.Xml;
using System.Text.Json;
using Blazored.LocalStorage;
using Wonky.Entity.DTO;
namespace Wonky.Client.Services;
public class UserInfoService
public class UserInfoService : IUserInfoService
{
private const string _infoKey = "_xui";
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<UserManagerEditView> GetUserInfo()
{
return await _localStorageService.GetItemAsync<UserManagerEditView>("_xui");
return await _localStorageService.GetItemAsync<UserManagerEditView>(_infoKey);
}
public async Task SetUserInfo(UserManagerEditView userInfo)
{
await _localStorageService.SetItemAsync(_infoKey, userInfo);
}
public async Task<string> GetRefreshToken()
{
return await _localStorageService.GetItemAsStringAsync(_refreshKey);
}
public async Task SetRefreshToken(string token)
{
await _localStorageService.SetItemAsStringAsync(_refreshKey, token);
}
public async Task<string> GetAccessToken()
{
return await _localStorageService.GetItemAsStringAsync(_accessKey);
}
public async Task SetAccessToken(string token)
{
await _localStorageService.SetItemAsStringAsync(_accessKey, token);
}
public async Task<long> GetExpiration()
{
return await _localStorageService.GetItemAsync<long>(_expiryKey);
}
public async Task SetExpiration(long expiration)
{
await _localStorageService.SetItemAsync(_expiryKey, expiration);
}
}

View file

@ -35,6 +35,7 @@ public class UserProfileService
private readonly ILocalStorageService _localStorageService;
private const string KeyName = "preferences";
public event Action<UserProfile>? OnChange;
public UserProfileService(ILocalStorageService localStorageService)
{
_localStorageService = localStorageService;
@ -42,7 +43,7 @@ public class UserProfileService
public async Task SetDateConfirmed(bool confirmed)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with
{
@ -54,7 +55,7 @@ public class UserProfileService
public async Task SetKmMorning(int kmMorning)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with
{
@ -66,7 +67,7 @@ public class UserProfileService
public async Task SetCompanyFilterPhrase(string filterPhrase)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with
{
@ -78,7 +79,7 @@ public class UserProfileService
public async Task SetWorkDate(DateTime workDate)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with
{
@ -90,7 +91,7 @@ public class UserProfileService
public async Task SetCompanySearch(string companySearch)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with { CompanySearch = companySearch };
await _localStorageService.SetItemAsync(KeyName, newPreferences);
@ -99,7 +100,7 @@ public class UserProfileService
public async Task SetCompanySort(string companySort)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with { CompanySort = companySort };
await _localStorageService.SetItemAsync(KeyName, newPreferences);
@ -108,7 +109,7 @@ public class UserProfileService
public async Task SetItemSearch(string itemSearch)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with { ItemSearch = itemSearch };
await _localStorageService.SetItemAsync(KeyName, newPreferences);
@ -117,7 +118,7 @@ public class UserProfileService
public async Task SetItemSort(string itemSort)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with { ItemSort = itemSort };
await _localStorageService.SetItemAsync(KeyName, newPreferences);
@ -126,15 +127,20 @@ public class UserProfileService
public async Task SetPageSize(string pageSize)
{
var preferences = await GetPreferences();
var preferences = await GetProfile();
var newPreferences = preferences
with { PageSize = pageSize };
await _localStorageService.SetItemAsync(KeyName, newPreferences);
OnChange?.Invoke(newPreferences);
}
public async Task<UserProfile> GetPreferences()
public async Task<UserProfile> GetProfile()
{
return await _localStorageService.GetItemAsync<UserProfile>(KeyName) ?? new UserProfile();
}
public async Task SetProfile(UserProfile profile)
{
await _localStorageService.SetItemAsync(KeyName, profile);
}
}

View file

@ -18,6 +18,7 @@ using System.Net.Http.Headers;
using System.Security.Claims;
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components.Authorization;
using Wonky.Client.Services;
using Wonky.Entity.DTO;
using Wonky.Entity.Views;
@ -26,35 +27,36 @@ namespace Wonky.Client.Shared
public class AuthStateProvider : AuthenticationStateProvider
{
private readonly HttpClient _client;
private readonly ILocalStorageService _storage;
// private readonly ILocalStorageService _storage;
private readonly AuthenticationState _anonymous;
private readonly IUserInfoService _infoService;
public AuthStateProvider(HttpClient client, ILocalStorageService storage)
public AuthStateProvider(HttpClient client, IUserInfoService infoService)
{
_client = client;
_storage = storage;
_infoService = infoService;
_anonymous = new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
}
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
var token = await _storage.GetItemAsync<string>("_xa");
var token = await _infoService.GetAccessToken();
if (string.IsNullOrEmpty(token))
return _anonymous;
var userInfo = await _storage.GetItemAsync<UserManagerEditView>("_xu");
var userInfo = await _infoService.GetUserInfo();
if (userInfo == null)
return _anonymous;
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
var exp = await _storage.GetItemAsync<string>("_xe");
var exp = await _infoService.GetExpiration();
var claims = new List<Claim>
{
new(ClaimTypes.Name, $"{userInfo.FirstName} {userInfo.LastName}"),
new(ClaimTypes.Email, userInfo.Email),
new(ClaimTypes.Country, userInfo.CountryCode),
new(ClaimTypes.MobilePhone, userInfo.PhoneNumber),
new(ClaimTypes.Expiration, exp)
new(ClaimTypes.Expiration, exp.ToString())
};
claims.AddRange(
from role in userInfo.AssignedRoles
@ -73,8 +75,8 @@ namespace Wonky.Client.Shared
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
var userInfo = await _storage.GetItemAsync<UserManagerEditView>("_xu");
var exp = await _storage.GetItemAsync<string>("_xe");
var userInfo = await _infoService.GetUserInfo();
var exp = await _infoService.GetExpiration();
var claims = new List<Claim>
{
@ -82,7 +84,7 @@ namespace Wonky.Client.Shared
new(ClaimTypes.Email, userInfo.Email),
new(ClaimTypes.Country, userInfo.CountryCode),
new(ClaimTypes.MobilePhone, userInfo.PhoneNumber),
new(ClaimTypes.Expiration, exp)
new(ClaimTypes.Expiration, exp.ToString())
};
claims.AddRange(
from role in userInfo.AssignedRoles

View file

@ -25,7 +25,7 @@ public partial class DraftStateProvider
{
[Parameter] public RenderFragment ChildContent { get; set; }
[Parameter] public string DraftId { get; set; } = "";
[Inject] private ILocalStorageService LocalStorageService { get; set; }
[Inject] public ILocalStorageService LocalStorageService { get; set; }
public Draft Draft { get; set; } = new();
private bool _hasLoaded;

View file

@ -36,9 +36,9 @@ public partial class VatLookupDkModal
[Parameter] public string EntityName { get; set; } = "";
[Parameter] public string VatNumber { get; set; } = "";
[Parameter] public EventCallback<VirkRegInfo> OnSelectedCompany { get; set; }
[Inject] private VatInfoLookupService VatService { get; set; }
[Inject] private IToastService Toaster { get; set; }
[Inject] private ILogger<VatLookupDkModal> Logger { get; set; }
[Inject] public VatInfoLookupService VatService { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ILogger<VatLookupDkModal> Logger { get; set; }
private VirkRegInfo CompanyRegInfo { get; set; } = new();
private List<VirkRegInfo> VatInfos { get; set; } = new();
private VatAddress ThisVatAddress { get; set; } = new();

View file

@ -1,35 +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 System.Text.Json.Serialization;
namespace Wonky.Entity.Views;
public class X_WebUserInfoView
{
[JsonPropertyName("userId")] public string UserId { get; set; } = "";
[JsonPropertyName("salesRep")] public string Advisor { get; set; } = "";
[JsonPropertyName("countryCode")] public string CountryCode { get; set; } = "";
[JsonPropertyName("countryName")] public string CountryName { get; set; } = "";
[JsonPropertyName("email")] public string Email { get; set; } = "";
[JsonPropertyName("firstName")] public string FirstName { get; set; } = "";
[JsonPropertyName("lastName")]public string LastName { get; set; } = "";
[JsonPropertyName("phoneNumber")]public string PhoneNumber { get; set; } = "";
[JsonPropertyName("lockoutEnabled")] public bool LockoutEnabled { get; set; }
[JsonPropertyName("emailConfirmed")] public bool EmailConfirmed { get; set; }
[JsonPropertyName("isAdmin")] public bool IsAdmin { get; set; }
[JsonPropertyName("isAdvisor")] public bool IsAdvisor { get; set; }
}