release v0.8.44

This commit is contained in:
Frede Hundewadt 2022-06-28 16:00:26 +02:00
parent ec41adfc70
commit f4e03be1fa
16 changed files with 99 additions and 33 deletions

View file

@ -49,10 +49,10 @@
<tr class="align-middle"> <tr class="align-middle">
<td class="align-content-center">@user.CountryCode</td> <td class="align-content-center">@user.CountryCode</td>
<td>@user.SalesRep</td> <td>@user.SalesRep</td>
<td><a href="/admin/users/@user.UserId">@user.FullName</a></td> <td><a href="/admin/users/advisers/@user.CountryCode.ToLower()/@user.UserId/view">@user.FullName</a></td>
<td>@user.PhoneNumber</td> <td>@user.PhoneNumber</td>
<td>@user.Email</td> <td>@user.Email</td>
<td><a class="btn btn-info" href="/admin/users/advisers/@user.UserId/reports">Salg</a></td> <td><a class="btn btn-info" href="/admin/users/advisers/@user.CountryCode.ToLower()/@user.UserId/reports">Salg</a></td>
</tr> </tr>
} }
</tbody> </tbody>

View file

@ -22,7 +22,7 @@
</div> </div>
@foreach (var report in ReportList) @foreach (var report in ReportList)
{ {
<a class="list-group-item list-group-item-action" href="/admin/users/@report./reports/@report.ReportDate"> <a class="list-group-item list-group-item-action" href="/admin/users/advisers/@CountryCode/@UserId/reports/@report.ReportDate">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
@report.ReportDate @report.ReportDate

View file

@ -7,4 +7,5 @@ public partial class AdminReportTableComponent
{ {
[Parameter] public List<NgSalesReportListView> ReportList { get; set; } = new(); [Parameter] public List<NgSalesReportListView> ReportList { get; set; } = new();
[Parameter] public string UserId { get; set; } = ""; [Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "";
} }

View file

@ -297,9 +297,10 @@ public partial class ActivityVisitNew : IDisposable
_poFormInvalid = false; _poFormInvalid = false;
_editContext.OnFieldChanged -= HandleFieldChanged; _editContext.OnFieldChanged -= HandleFieldChanged;
_editContext.OnValidationStateChanged -= ValidationChanged;
_editContext = new EditContext(_draft); _editContext = new EditContext(_draft);
_editContext.OnFieldChanged += HandleFieldChanged; _editContext.OnFieldChanged += HandleFieldChanged;
_editContext.OnValidationStateChanged -= ValidationChanged; _editContext.OnValidationStateChanged += ValidationChanged;
} }
public void Dispose() public void Dispose()

View file

@ -1,7 +1,7 @@
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Admin")] @attribute [Authorize(Roles = "Admin")]
@page "/admin/users" @page "/admin/users/advisers/{CountryCode}"
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">

View file

@ -7,16 +7,20 @@ namespace Wonky.Client.Pages;
public partial class AdminAdviserUserList : IDisposable public partial class AdminAdviserUserList : IDisposable
{ {
[Parameter] public string CountryCode { get; set; } = "";
[Inject] private HttpInterceptorService _interceptor { get; set; } [Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private IUserHttpRepository _userRepo { get; set; } [Inject] private IUserHttpRepository _userRepo { get; set; }
private List<AdminAdviserListView>? _salesReps { get; set; } = new(); private List<AdminAdviserListView> _salesReps { get; set; } = new();
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
_interceptor.RegisterEvent(); _interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent(); _interceptor.RegisterBeforeSendEvent();
var adviserList = await _userRepo.GetAdvisers();
_salesReps = await _userRepo.GetAdvisers(); _salesReps = adviserList
.Where(x => x.CountryCode.ToLower() == CountryCode && Convert.ToInt32(x.SalesRep) < 100)
.ToList();
} }
public void Dispose() public void Dispose()

View file

@ -1,6 +1,7 @@
@page "/admin/users/{UserId}" @page "/admin/users/advisers/{CountryCode}/{UserId}/view"
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Admin")] @attribute [Authorize(Roles = "Admin")]
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h3>Sælger info</h3> <h3>Sælger info</h3>
@ -78,28 +79,36 @@
<button type="submit" class="btn btn-primary">Gem</button> <button type="submit" class="btn btn-primary">Gem</button>
</div> </div>
<div class="col"> <div class="col">
<a class="btn btn-primary" href="/admin/users">Tilbage</a> <a class="btn btn-primary" href="/admin/users/advisers/@CountryCode">Tilbage</a>
</div> </div>
<div class="col"> <div class="col">
<a class="btn btn-primary" href="/admin/users/advisers/@UserId/reports">Salg</a> <a class="btn btn-primary" href="/admin/users/advisers/@CountryCode/@UserId/reports">Salg</a>
</div> </div>
</div> </div>
</EditForm> </EditForm>
<form class="mt-5"> <EditForm EditContext="_passwdContext" class="mt-5" >
<DataAnnotationsValidator />
<h3>NULSTIL ADGANGSKODE</h3> <h3>NULSTIL ADGANGSKODE</h3>
<div class="row mb-3"> <div class="row mb-3">
<label for="newPasswd" class="col-md-2 col-form-label">Ny</label> <label for="newPasswd" class="col-md-2 col-form-label">Ny</label>
<div class="col-md-4"> <div class="col-md-10">
<input id="newPasswd" type="password" class="form-control"/> <InputText id="newPasswd" type="password" class="form-control" @bind-Value="@_passwords.NewPassword"/>
<ValidationMessage For="@(() => _passwords.NewPassword)"></ValidationMessage>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<label for="verifyPasswd" class="col-md-2 col-form-label">Bekræft</label> <label for="verifyPasswd" class="col-md-2 col-form-label">Bekræft</label>
<div class="col-md-4"> <div class="col-md-10">
<input id="verifyPasswd" type="password" class="form-control"/> <InputText id="verifyPasswd" type="password" class="form-control" @bind-Value="@_passwords.ConfirmPassword"/>
<ValidationMessage For="@(() => _passwords.ConfirmPassword)"></ValidationMessage>
</div> </div>
</div> </div>
</form> <div class="row">
<div class="col align-content-end">
<button class="btn btn-warning" @onclick="SetPassword" disabled="@_pwInvalid">NULSTIL</button>
</div>
</div>
</EditForm>
} }
else else
{ {

View file

@ -1,3 +1,4 @@
using System.Security.Policy;
using System.Text.Json; using System.Text.Json;
using Blazored.Toast.Services; using Blazored.Toast.Services;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
@ -11,6 +12,7 @@ namespace Wonky.Client.Pages;
public partial class AdminAdviserView : IDisposable public partial class AdminAdviserView : IDisposable
{ {
[Parameter] public string UserId { get; set; } = ""; [Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "";
[Inject] private HttpInterceptorService _interceptor { get; set; } [Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private IUserHttpRepository _userRepo { get; set; } [Inject] private IUserHttpRepository _userRepo { get; set; }
[Inject] private ILogger<AdminAdviserView> _logger { get; set; } [Inject] private ILogger<AdminAdviserView> _logger { get; set; }
@ -19,6 +21,9 @@ public partial class AdminAdviserView : IDisposable
private AdviserInfoView _adviserInfo { get; set; } = new(); private AdviserInfoView _adviserInfo { get; set; } = new();
private EditContext _editContext { get; set; } private EditContext _editContext { get; set; }
private AdviserUpdateDto _updateInfo { get; set; } = new(); private AdviserUpdateDto _updateInfo { get; set; } = new();
private AdminResetPasswordDto _passwords { get; set; } = new();
private EditContext _passwdContext { get; set; }
private bool _pwInvalid = true;
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
{ {
@ -27,6 +32,9 @@ public partial class AdminAdviserView : IDisposable
protected override async Task OnParametersSetAsync() protected override async Task OnParametersSetAsync()
{ {
_editContext = new EditContext(_updateInfo);
_passwdContext = new EditContext(_passwords);
_interceptor.RegisterEvent(); _interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent(); _interceptor.RegisterBeforeSendEvent();
@ -39,27 +47,47 @@ public partial class AdminAdviserView : IDisposable
_updateInfo.PhoneNumber = _adviserInfo.PhoneNumber; _updateInfo.PhoneNumber = _adviserInfo.PhoneNumber;
_updateInfo.LockoutEnabled = _adviserInfo.LockoutEnabled; _updateInfo.LockoutEnabled = _adviserInfo.LockoutEnabled;
} _passwdContext.OnFieldChanged += PwHandleFieldChanged;
_passwdContext.OnValidationStateChanged += PwValidationChanged;
protected override void OnInitialized()
{
_editContext = new EditContext(_updateInfo);
} }
private async Task UpdateAdviser() private async Task UpdateAdviser()
{ {
_toast.ShowInfo("Sender data til server ..."); _toast.ShowInfo("Sender data til server ...");
await _userRepo.UpdateAdviser(UserId, _updateInfo); await _userRepo.UpdateAdviser(UserId, _updateInfo);
_navigator.NavigateTo("/admin/users"); }
private void PwHandleFieldChanged(object sender, FieldChangedEventArgs e)
{
_pwInvalid = !_passwdContext.Validate();
StateHasChanged();
}
private void PwValidationChanged(object sender, ValidationStateChangedEventArgs e)
{
_pwInvalid = true;
_passwdContext.OnFieldChanged -= PwHandleFieldChanged;
_passwdContext.OnValidationStateChanged -= PwValidationChanged;
_passwdContext = new EditContext(_passwords);
_passwdContext.OnFieldChanged += PwHandleFieldChanged;
_passwdContext.OnValidationStateChanged += PwValidationChanged;
} }
private async Task SetPassword() private async Task SetPassword()
{ {
await _userRepo.ResetUserPassword(UserId, _passwords.NewPassword, _passwords.ConfirmPassword);
_toast.ShowInfo("Password er nulstillet.");
_passwords.NewPassword = "";
_passwords.ConfirmPassword = "";
} }
public void Dispose() public void Dispose()
{ {
_interceptor.DisposeEvent(); _interceptor.DisposeEvent();
_passwdContext.OnFieldChanged -= PwHandleFieldChanged;
_passwdContext.OnValidationStateChanged -= PwValidationChanged;
} }
} }

View file

@ -17,7 +17,7 @@
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Admin")] @attribute [Authorize(Roles = "Admin")]
@page "/admin/users/advisers/{UserId}/reports" @page "/admin/users/advisers/{CountryCode}/{UserId}/reports"
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<div class="row"> <div class="row">
@ -27,6 +27,6 @@
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
<AdminReportTableComponent ReportList="_reports"></AdminReportTableComponent> <AdminReportTableComponent CountryCode="@CountryCode" UserId="@UserId" ReportList="_reports"></AdminReportTableComponent>
</div> </div>
</div> </div>

View file

@ -9,6 +9,7 @@ namespace Wonky.Client.Pages;
public partial class AdminSalesReportList : IDisposable public partial class AdminSalesReportList : IDisposable
{ {
[Parameter] public string UserId { get; set; } = ""; [Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "";
[Inject] private IAdminReportHttpRepository _reportRepo { get; set; } [Inject] private IAdminReportHttpRepository _reportRepo { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; } [Inject] private HttpInterceptorService _interceptor { get; set; }

View file

@ -17,7 +17,7 @@
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@page "/admin/users/advisers/{UserId}/reports/{ReportDate}" @page "/admin/users/advisers/{CountryCode}/{UserId}/reports/{ReportDate}"
@attribute [Authorize(Roles = "Admin")] @attribute [Authorize(Roles = "Admin")]
<div class="card"> <div class="card">

View file

@ -7,8 +7,9 @@ namespace Wonky.Client.Pages;
public partial class AdminSalesReportView public partial class AdminSalesReportView
{ {
[Parameter] public string ReportDate { get; set; } [Parameter] public string ReportDate { get; set; } = "";
[Parameter] public string UserId { get; set; } [Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = "";
[Inject] private IAdminReportHttpRepository _reportRepo { get; set; } [Inject] private IAdminReportHttpRepository _reportRepo { get; set; }
private NgSalesReportView _report { get; set; } = new(); private NgSalesReportView _report { get; set; } = new();

View file

@ -23,7 +23,16 @@
@attribute [Authorize(Roles = "Adviser,Admin,Supervisor")] @attribute [Authorize(Roles = "Adviser,Admin,Supervisor")]
<Home></Home> <AuthorizeView Roles="Adviser">
<Home></Home>
</AuthorizeView>
<AuthorizeView Roles="Admin">
<div class="list-group">
<a class="list-group-item list-group-item-action" href="/admin/users/advisers/dk">Danmark</a>
<a class="list-group-item list-group-item-action" href="/admin/users/advisers/no">Norge</a>
<a class="list-group-item list-group-item-action" href="/admin/users/advisers/se">Sverige</a>
</div>
</AuthorizeView>
@code{ @code{

View file

@ -42,7 +42,7 @@
</AuthorizeView> </AuthorizeView>
<AuthorizeView Roles="Admin"> <AuthorizeView Roles="Admin">
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link ps-2" href="/admin/users"> <NavLink class="nav-link ps-2" href="/">
<span class="oi oi-people" aria-hidden="true"></span> Sælgere <span class="oi oi-people" aria-hidden="true"></span> Sælgere
</NavLink> </NavLink>
</div> </div>

View file

@ -1,7 +1,7 @@
{ {
"appInfo": { "appInfo": {
"name": "Wonky Client", "name": "Wonky Client",
"version": "0.8.42", "version": "0.8.44",
"isBeta": true, "isBeta": true,
"image": "grumpy-coder.png" "image": "grumpy-coder.png"
}, },

View file

@ -0,0 +1,12 @@
using System.ComponentModel.DataAnnotations;
namespace Wonky.Entity.DTO;
public class AdminResetPasswordDto
{
[Required(ErrorMessage = "Kode skal udfyldes")]
public string NewPassword { get; set; } = "";
[Compare(nameof(NewPassword), ErrorMessage = "Koderne er ikke ens.")]
public string ConfirmPassword { get; set; } = "";
}