WIP: user management

This commit is contained in:
Frede Hundewadt 2023-02-21 11:42:39 +01:00
parent 5e5f95f6e0
commit 6ac4b111e3
15 changed files with 70 additions and 44 deletions

View file

@ -48,7 +48,8 @@ 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; }
[CascadingParameter] private DraftStateProvider DraftProvider { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
@ -69,7 +70,7 @@ public partial class AdvisorActivityCreatePage : IDisposable
private bool InvalidActivity { get; set; } = true;
private bool ReportClosed { get; set; }
private bool Working { get; set; } = true;
private X_UserInfoView SalesRep { get; set; } = new();
private UserManagerEditView SalesRep { get; set; } = new();
private DateTime SelectedDate { get; set; }
private string OldPhone { get; set; } = "";
private string PromptDateConfirm { get; set; } = "";
@ -107,7 +108,7 @@ public partial class AdvisorActivityCreatePage : IDisposable
// User Preferences
UserProfile = await ProfileService.GetPreferences();
// User Info
SalesRep = await Storage.GetItemAsync<X_UserInfoView>("_xu");
SalesRep = await UserInfoService.GetUserInfo();
// Fetch Customer from http
Company = await CompanyRepo.GetCompanyById(CompanyId);
if (Company.HasFolded == 1)
@ -128,8 +129,8 @@ public partial class AdvisorActivityCreatePage : IDisposable
Activity.ActivityStatusEnum = "noSale";
Activity.VisitTypeEnum = Company.Account is "" or "NY" ? "new" : "recall";
Activity.CompanyId = Company.CompanyId;
Activity.SalesRepId = SalesRep.Id;
Activity.SalesRep = SalesRep.Advisor;
Activity.SalesRepId = SalesRep.UserId;
Activity.SalesRep = SalesRep.SalesRep;
Activity.CountryCode = SalesRep.CountryCode;
Activity.Account = Company.Account;
Activity.VatNumber = Company.VatNumber;
@ -437,8 +438,8 @@ public partial class AdvisorActivityCreatePage : IDisposable
Activity.ActivityDate = $"{SelectedDate:yyyy-MM-dd}";
Activity.OurRef = Activity.ActivityTypeEnum switch
{
"phone" => $"T:{SalesRep.FullName.Split(" ")[0]}",
"onSite" => $"B:{SalesRep.FullName.Split(" ")[0]}",
"phone" => $"T:{SalesRep.FirstName}",
"onSite" => $"B:{SalesRep.FirstName}",
_ => ""
};
if (Activity.Express)

View file

@ -27,7 +27,6 @@ using Wonky.Client.Services;
using Wonky.Client.Shared;
using Wonky.Entity.DTO;
using Wonky.Entity.Models;
using Wonky.Entity.Requests;
using Wonky.Entity.Views;
#pragma warning disable CS8618
@ -42,6 +41,7 @@ namespace Wonky.Client.Pages
[Inject] private IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private VatInfoLookupService VatService { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
private EditContext CompanyContext { get; set; }
private CompanyDto Company { get; set; } = new();
@ -62,10 +62,10 @@ namespace Wonky.Client.Pages
CompanyContext.OnFieldChanged += HandleFieldChanged;
CompanyContext.OnValidationStateChanged += ValidationChanged;
var xu = await Storage.GetItemAsync<X_UserInfoView>("_xu");
var xu = await UserInfoService.GetUserInfo();
Dk = xu.CountryCode.ToLower() == "dk";
Company.SalesRepId = xu.Id;
Company.SalesRepId = xu.UserId;
Company.CountryCode = xu.CountryCode.ToLower();
LastVisit = DateTime.Now;

View file

@ -33,9 +33,11 @@ namespace Wonky.Client.Pages
[Inject] private IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
private List<CompanyDto> CompanyList { get; set; } = new();
private UserProfile Profiles { get; set; } = new();
private X_UserInfoView XUserInfo { get; set; } = new();
private UserManagerEditView XUserInfo { get; set; } = new();
private string SavedSearch { get; set; } = "";
private bool IncludeFolded { get; set; }
private bool Working { get; set; } = true;
@ -54,7 +56,7 @@ namespace Wonky.Client.Pages
{
// set preferences
Profiles = await ProfileService.GetPreferences();
XUserInfo = await Storage.GetItemAsync<X_UserInfoView>("_xu");
XUserInfo = await UserInfoService.GetUserInfo();
Paging.OrderBy = Profiles.CompanySort;
Paging.SearchColumn = Profiles.CompanySearch;
Paging.PageSize = Convert.ToInt32(Profiles.PageSize);

View file

@ -45,6 +45,7 @@ public partial class AdvisorCustomerViewPage : IDisposable
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private VatInfoLookupService VatService { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
private readonly JsonSerializerOptions _options = new () { PropertyNameCaseInsensitive = true };
private CompanyDto Company { get; set; } = new();
@ -67,7 +68,7 @@ public partial class AdvisorCustomerViewPage : IDisposable
private ContactDto SelectedContact { get; set; } = new();
private ContactDto DefaultContact { get; set; } = new();
private ContactModal ContactPopup { get; set; } = new();
private X_UserInfoView XUserInfo { get; set; } = new();
private UserManagerEditView XUserInfo { get; set; } = new();
protected override async Task OnInitializedAsync()
{
@ -85,7 +86,7 @@ public partial class AdvisorCustomerViewPage : IDisposable
ErpContext.OnValidationStateChanged += ValidationChanged;
// fetch user info from local storage
XUserInfo = await Storage.GetItemAsync<X_UserInfoView>("_xu");
XUserInfo = await UserInfoService.GetUserInfo();
CountryCode = XUserInfo.CountryCode.ToLower();
CountryIsDk = CountryCode == "dk";

View file

@ -20,6 +20,7 @@ using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpInterfaces;
using Wonky.Client.Models;
using Wonky.Client.Services;
using Wonky.Entity.DTO;
using Wonky.Entity.Views;
#pragma warning disable CS8618
@ -34,12 +35,13 @@ public partial class AdvisorReportViewPage : IDisposable
[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; }
private UserProfile Profiles { get; set; } = new();
private ReportView Report { get; set; } = new();
private List<ReportItemView> Activities { get; set; } = new ();
private bool Working { get; set; }
private X_UserInfoView XUserInfo { get; set; } = new();
private UserManagerEditView XUserInfo { get; set; } = new();
private string ReturnUrl { get; set; } = "";
protected override async Task OnInitializedAsync()
@ -47,7 +49,7 @@ public partial class AdvisorReportViewPage : IDisposable
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
XUserInfo = await Storage.GetItemAsync<X_UserInfoView>("_xu");
XUserInfo = await UserInfoService.GetUserInfo();
ProfileService.OnChange += ProfileServiceOnOnChange;
await ProfileService.SetWorkDate(DateTime.Parse(ReportDate));
@ -63,10 +65,10 @@ public partial class AdvisorReportViewPage : IDisposable
switch (target)
{
case PTarget.OrderPage:
Navigator.NavigateTo($"/report/print/orders/{XUserInfo.CountryCode.ToLower()}/{XUserInfo.Id}/{ReportDate}?returnUrl={ReturnUrl}");
Navigator.NavigateTo($"/report/print/orders/{XUserInfo.CountryCode.ToLower()}/{XUserInfo.UserId}/{ReportDate}?returnUrl={ReturnUrl}");
break;
case PTarget.FrontPage:
Navigator.NavigateTo($"/report/print/summary/{XUserInfo.CountryCode.ToLower()}/{XUserInfo.Id}/{ReportDate}?returnUrl={ReturnUrl}");
Navigator.NavigateTo($"/report/print/summary/{XUserInfo.CountryCode.ToLower()}/{XUserInfo.UserId}/{ReportDate}?returnUrl={ReturnUrl}");
break;
case PTarget.None:
break;
@ -111,7 +113,7 @@ public partial class AdvisorReportViewPage : IDisposable
// store the report locally
if (!string.IsNullOrWhiteSpace(Report.ReportData.ReportDate))
{
await Storage.SetItemAsync($"{XUserInfo.Id}-{Report.ReportData.ReportDate}", Report);
await Storage.SetItemAsync($"{XUserInfo.UserId}-{Report.ReportData.ReportDate}", Report);
}
// remove busy signal

View file

@ -22,6 +22,9 @@ using Wonky.Client.HttpInterfaces;
using Wonky.Client.Services;
using Wonky.Entity.Requests;
using Wonky.Entity.Views;
using Wonky.Client.Services;
using Wonky.Entity.DTO;
#pragma warning disable CS8618
namespace Wonky.Client.Pages;
@ -34,6 +37,7 @@ public partial class CatalogCountryPage : IDisposable
[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; }
[Parameter] public string CountryCode { get; set; } = "";
@ -41,14 +45,14 @@ public partial class CatalogCountryPage : IDisposable
private MetaData MetaInfo { get; set; } = new();
private CatalogPager Pager { get; set; } = new();
private UserProfile Profiles { get; set; } = new();
private X_UserInfoView XUserInfo { get; set; } = new();
private UserManagerEditView XUserInfo { get; set; } = new();
private bool Working { get; set; }
private string CountryName { get; set; } = "";
protected override async Task OnInitializedAsync()
{
Profiles = await ProfileService.GetPreferences();
XUserInfo = await Storage.GetItemAsync<X_UserInfoView>("_xu");
XUserInfo = await UserInfoService.GetUserInfo();
Pager.OrderBy = Profiles.ItemSort;

View file

@ -34,9 +34,11 @@ namespace Wonky.Client.Pages
[Inject] private ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private UserInfoService UserInfoService { get; set; }
private List<CompanyDto> Companies { get; set; } = new();
private UserProfile Profiles { get; set; } = new();
private X_UserInfoView XUserInfo { get; set; } = new();
private UserManagerEditView XUserInfo { get; set; } = new();
private string SavedSearch { get; set; } = "";
private bool ShowFolded { get; set; }
private bool Working { get; set; } = true;
@ -53,7 +55,7 @@ namespace Wonky.Client.Pages
// set preferences
Profiles = await ProfileService.GetPreferences();
XUserInfo = await Storage.GetItemAsync<X_UserInfoView>("_xu");
XUserInfo = await UserInfoService.GetUserInfo();
Paging.OrderBy = Profiles.CompanySort;
Paging.SearchColumn = Profiles.CompanySearch;
Paging.PageSize = Convert.ToInt32(Profiles.PageSize);

View file

@ -36,7 +36,7 @@ public partial class OfficeOrderCreatePage : IDisposable
[Inject] private ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] private ICountryCustomerHistoryRepository InventoryRepo { get; set; }
[Inject] private ICountryReportRepository ReportRepo { get; set; }
[Inject] private ISystemUserRepositoryGen1 UserRepo { get; set; }
[Inject] private ISystemUserRepository UserRepo { get; set; }
[Inject] private ICountryCatalogRepository Catalog { get; set; }
// parameters
[Parameter] public string CompanyId { get; set; } = "";
@ -50,7 +50,7 @@ public partial class OfficeOrderCreatePage : IDisposable
private List<ProductInventoryView> CustomerInventory { get; set; } = new();
private SalesItemView SelectedItem { get; set; } = new();
private ActivityDto Activity { get; set; } = new();
private WebUserInfoView SalesRep { get; set; } = new();
private UserManagerEditView SalesRep { get; set; } = new();
// edit context
private EditContext ActivityContext { get; set; }
// variables
@ -104,11 +104,11 @@ public partial class OfficeOrderCreatePage : IDisposable
Logger.LogDebug("OfficeOrderCreate => Inventory => {}", JsonSerializer.Serialize(CustomerInventory));
// get sales rep info
SalesRep = await UserRepo.GetAdvisorInfo(Customer.SalesRepId);
SalesRep = await UserRepo.GetUserInfo(Customer.SalesRepId);
Logger.LogDebug("OfficeOrderCreate => SalesRep => {}", JsonSerializer.Serialize(SalesRep));
// set activity salesRep and countryCode
Activity.SalesRep = SalesRep.Advisor;
Activity.SalesRep = SalesRep.SalesRep;
Activity.CountryCode = SalesRep.CountryCode;
// add customer info into activity properties

View file

@ -21,6 +21,7 @@ using Blazored.Toast.Services;
using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpInterfaces;
using Wonky.Client.Services;
using Wonky.Entity.DTO;
using Wonky.Entity.Views;
#pragma warning disable CS8618
@ -35,9 +36,11 @@ public partial class OfficeOrderViewPage : IDisposable
[Inject] private IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] private ISystemSendMailService MailService { get; set; }
[Inject] private ILocalStorageService Storage { get; set; }
[Inject] private ISystemUserRepositoryGen1 SystemUserRepo { 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; }
private ReportItemView ReportItem { get; set; } = new();
private bool IsNotified { get; set; }
private bool Working { get; set; } = true;
@ -71,9 +74,9 @@ public partial class OfficeOrderViewPage : IDisposable
var responseView = await AdvisorActivityRepo.GetExpressState(ReportItem.ActivityId);
Logger.LogDebug("SetExpressState => responseView <= {} ", JsonSerializer.Serialize(responseView));
// get user info from storage
var user = await Storage.GetItemAsync<X_UserInfoView>("_xu");
var user = await UserInfoService.GetUserInfo();
// fetch sales rep from response
var salesRep = await SystemUserRepo.GetAdvisorInfo(responseView.Id);
var salesRep = await SystemUserRepo.GetUserInfo(responseView.Id);
Logger.LogDebug("SetExpressState => salesRep => {}", JsonSerializer.Serialize(salesRep));
// create email notification body
var body = new StringBuilder();
@ -84,7 +87,7 @@ public partial class OfficeOrderViewPage : IDisposable
$"Post By : {salesRep.CountryCode.ToUpper()}-{ReportItem.Company.ZipCode} {ReportItem.Company.City}");
body.AppendLine();
body.AppendLine("Med venlig hilsen");
body.AppendLine($"{user.FullName}");
body.AppendLine($"{user.FirstName} {user.LastName}");
body.AppendLine($"{user.PhoneNumber}");
// create a list of mail addresses
var sendTo = new List<EmailContact>

View file

@ -27,12 +27,14 @@ namespace Wonky.Client.Pages;
public partial class OfficeUserAdvisorCustomerListPage : IDisposable
{
[Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "dk";
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ICountryCustomerRepository CustomerRepo { get; set; }
[Inject] private UserProfileService UserProfileService { get; set; }
[Inject] private ISystemUserRepositoryGen1 UserRepo { get; set; }
[Inject] private ISystemUserRepository UserRepo { get; set; }
[Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "dk";
private List<CompanyDto> CompanyList { get; set; } = new();
private MetaData ResponseMeta { get; set; } = new();
private CustomerPaging Paging { get; set; } = new();
@ -40,14 +42,14 @@ public partial class OfficeUserAdvisorCustomerListPage : IDisposable
private string SavedSearch { get; set; } = "";
private bool IncludeFolded { get; set; }
private bool Working { get; set; } = true;
private WebUserInfoView SalesRep { get; set; } = new();
private UserManagerEditView SalesRep { get; set; } = new();
protected override async Task OnParametersSetAsync()
{
Interceptor.DisposeEvent();
Interceptor.RegisterBeforeSendEvent();
SalesRep = await UserRepo.GetAdvisorInfo(UserId);
SalesRep = await UserRepo.GetUserInfo(UserId);
// set preferences
UserProfile = await UserProfileService.GetPreferences();

View file

@ -26,7 +26,7 @@ namespace Wonky.Client.Pages;
public partial class OfficeUserAdvisorListPage :IDisposable
{
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ISystemUserRepositoryGen1 SystemUserRepo { get; set; }
[Inject] private 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

@ -17,6 +17,7 @@
using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpInterfaces;
using Wonky.Entity.DTO;
using Wonky.Entity.Views;
#pragma warning disable CS8618
@ -28,11 +29,11 @@ public partial class OfficeUserAdvisorReportListPage : IDisposable
[Parameter] public string CountryCode { get; set; } = "";
[Inject] private ICountryReportRepository ReportRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private ISystemUserRepositoryGen1 SystemUserRepo { get; set; }
[Inject] private ISystemUserRepository SystemUserRepo { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
private List<SalesReportListView> ActivityReports { get; set; } = new();
private bool Working { get; set; } = true;
private WebUserInfoView UserInfo { get; set; } = new();
private UserManagerEditView UserInfo { get; set; } = new();
/// <summary>
/// override OnParametersSeAsync
@ -42,7 +43,7 @@ public partial class OfficeUserAdvisorReportListPage : IDisposable
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
UserInfo = await SystemUserRepo.GetAdvisorInfo(UserId);
UserInfo = await SystemUserRepo.GetUserInfo(UserId);
while (string.IsNullOrWhiteSpace(UserInfo.UserId))
{
await Task.Delay(500);

View file

@ -68,7 +68,6 @@ builder.Services.AddScoped<ICountryActivityRepository, CountryActivityRepository
builder.Services.AddScoped<ICountryCatalogRepository, CountryCatalogRepository>();
builder.Services.AddScoped<ICountryCustomerRepository, CountryCustomerRepository>();
builder.Services.AddScoped<ICountryReportRepository, CountryReportRepository>();
builder.Services.AddScoped<ISystemUserRepositoryGen1, SystemUserRepositoryGen1>();
builder.Services.AddScoped<ISystemUserRepository, SystemUserRepository>();
// warehouse repository
builder.Services.AddScoped<IOrderProcessRepository, OrderProcessRepository>();
@ -76,6 +75,7 @@ builder.Services.AddScoped<IOrderProcessRepository, OrderProcessRepository>();
builder.Services.AddScoped<ISystemSendMailService, SystemSendMailService>();
// interceptor
builder.Services.AddScoped<HttpInterceptorService>();
builder.Services.AddScoped<UserInfoService>();
// storage
builder.Services.AddBlazoredLocalStorage();
// authorization

View file

@ -141,7 +141,7 @@ namespace Wonky.Client.Services
var userInfo = JsonSerializer.Deserialize<UserManagerEditView>(content, _options);
if(write)
await _localStorage.SetItemAsync("_xu", userInfo);
await _localStorage.SetItemAsync("_xui", userInfo);
return userInfo ?? new UserManagerEditView();
}
}

View file

@ -1,6 +1,14 @@
using Blazored.LocalStorage;
using Wonky.Entity.DTO;
namespace Wonky.Client.Services;
public class UserInfoService
{
private readonly ILocalStorageService _localStorageService;
public async Task<UserManagerEditView> GetUserInfo()
{
return await _localStorageService.GetItemAsync<UserManagerEditView>("_xui");
}
}