WIP: evaluation and management
This commit is contained in:
parent
8397b82e60
commit
568baf098d
6 changed files with 130 additions and 35 deletions
|
@ -76,7 +76,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
Report.Figures.KmMorning = Profiles.KmMorning;
|
||||
Report.Figures.KmMorning = Preference.KmMorning;
|
||||
<td>
|
||||
<input type="time" id="checkIn" class="form-control"
|
||||
@bind-Value="CheckIn" @bind-Value:event="oninput" @onchange="OnTimeChanged"/>
|
||||
|
|
|
@ -34,7 +34,6 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
// ##########################################################################
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public UserPreferenceService PreferenceService { 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; }
|
||||
|
@ -47,7 +46,7 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
private ReportDto Report { get; set; } = new();
|
||||
private List<ReportItemView> Activities { get; set; } = new();
|
||||
private ReportFiguresDto InitialValues { get; set; } = new();
|
||||
private UserPreference Profiles { get; set; } = new();
|
||||
private UserPreference Preference { get; set; } = new();
|
||||
private bool FormInvalid { get; set; } = true;
|
||||
private bool NoFigures { get; set; } = true;
|
||||
private bool Working { get; set; }
|
||||
|
@ -75,14 +74,16 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
IsSupervisor = await UserInfo.IsSupervisor();
|
||||
|
||||
ReportContext = new EditContext(Report);
|
||||
|
||||
ReportContext.OnFieldChanged += HandleFieldChanged;
|
||||
ReportContext.OnValidationStateChanged += ValidationChanged;
|
||||
|
||||
PreferenceService.OnChange += ProfileServiceOnOnChange;
|
||||
Profiles = await PreferenceService.GetProfile();
|
||||
Logger.LogDebug("{}", JsonSerializer.Serialize(Profiles));
|
||||
|
||||
WorkDate = Profiles.WorkDate;
|
||||
Preference = await PreferenceService.GetProfile();
|
||||
Logger.LogDebug("{}", JsonSerializer.Serialize(Preference));
|
||||
|
||||
WorkDate = Preference.WorkDate;
|
||||
if (string.IsNullOrWhiteSpace(WorkDate))
|
||||
{
|
||||
ThisWorkDate = DateTime.Now;
|
||||
|
@ -93,9 +94,11 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
{
|
||||
ThisWorkDate = DateTime.Parse(WorkDate);
|
||||
}
|
||||
|
||||
if(await AdvisorReportRepo.ReportExist(WorkDate))
|
||||
Navigator.NavigateTo($"/advisor/reports/view/{ThisWorkDate:yyyy-MM-dd}");
|
||||
|
||||
if (await AdvisorReportRepo.ReportExist(WorkDate))
|
||||
{
|
||||
Navigator.NavigateTo($"/advisor/reports/view/{ThisWorkDate:yyyy-MM-dd}");
|
||||
}
|
||||
|
||||
BeginLeave = ThisWorkDate;
|
||||
EndLeave = ThisWorkDate;
|
||||
|
@ -115,8 +118,8 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
|
||||
private void ProfileServiceOnOnChange(UserPreference userPreference)
|
||||
{
|
||||
Profiles = userPreference;
|
||||
WorkDate = Profiles.WorkDate;
|
||||
Preference = userPreference;
|
||||
WorkDate = Preference.WorkDate;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
|
@ -148,7 +151,7 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
}
|
||||
else
|
||||
{
|
||||
Report.Figures.KmMorning = Profiles.KmMorning;
|
||||
Report.Figures.KmMorning = Preference.KmMorning;
|
||||
}
|
||||
|
||||
NoFigures = false;
|
||||
|
@ -262,8 +265,9 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
|
||||
// pop confirmation
|
||||
// create a prompt for popup confirmation
|
||||
var warning = Report.Figures.KmEvening - Report.Figures.KmMorning > 1000 ?
|
||||
$"Kørte km for rapporten er '{Report.Figures.KmEvening - Report.Figures.KmMorning}'. Er du sikker på at det er rigtigt?<br/>" : "";
|
||||
var warning = Report.Figures.KmEvening - Report.Figures.KmMorning > 1000
|
||||
? $"Kørte km for rapporten er '{Report.Figures.KmEvening - Report.Figures.KmMorning}'. Er du sikker på at det er rigtigt?<br/>"
|
||||
: "";
|
||||
|
||||
Prompt = $"{warning}<br/>Gem rapport for {ThisWorkDate.ToLongDateString()}?";
|
||||
|
||||
|
|
|
@ -21,18 +21,43 @@
|
|||
|
||||
<PageTitle>Ny evaluering</PageTitle>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<EditForm EditContext="FormContext" OnValidSubmit="SubmitDocument">
|
||||
<DataAnnotationsValidator/>
|
||||
<div class="card">
|
||||
<div class="card-title">
|
||||
<h3>Ny Evaluering</h3>
|
||||
<h3>Evaluering</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row d-flex g-3">
|
||||
<label for="supervisor" class="col-sm-2 col-form-label-sm">Supervisor</label>
|
||||
<div class="col-sm-4">
|
||||
<InputText id="supervisor" class="form-control" @bind-Value="Document.ManagerName" readonly></InputText>
|
||||
</div>
|
||||
<label for="salesRep" class="col-sm-2 col-form-label-sm">Sælger</label>
|
||||
<div class="col-sm-4">
|
||||
<InputText id="salesRep" class="form-control" @bind-Value="Document.MemberName" readonly></InputText>
|
||||
</div>
|
||||
<label for="documentDate" class="col-sm-2 col-form-label-sm">Dato</label>
|
||||
<div class="col-sm-4">
|
||||
<InputDate id="documentDate" class="form-control" @bind-Value="DocumentDate"></InputDate>
|
||||
</div>
|
||||
<div class="col-sm-6"></div>
|
||||
<label for="description" class="col-sm-2 col-form-label-sm">Overskrift</label>
|
||||
<div class="col-sm-10">
|
||||
<InputText id="description" class="form-control" @bind-Value="Document.Description"></InputText>
|
||||
<ValidationMessage For="@(() => Document.Description)"/>
|
||||
</div>
|
||||
<label for="content" class="col-sm-2 col-form-label-sm">Indhold</label>
|
||||
<div class="col-sm-10">
|
||||
<InputTextArea id="content" class="form-control" rows="10" @bind-Value="Document.Content"></InputTextArea>
|
||||
<ValidationMessage For="@(() => Document.Content)"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<div class="text-end">
|
||||
<button type="submit" class="btn btn-primary" disabled="@FormInvalid" ><i class="bi-cloud-upload"></i> Gem</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<EditForm EditContext="EvaluationContext">
|
||||
<DataAnnotationsValidator/>
|
||||
</EditForm>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</EditForm>
|
|
@ -14,11 +14,13 @@
|
|||
//
|
||||
|
||||
using System.Text.Json;
|
||||
using Blazored.Toast.Services;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Forms;
|
||||
using Wonky.Client.HttpInterceptors;
|
||||
using Wonky.Client.HttpRepository;
|
||||
using Wonky.Client.Local.Services;
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
@ -32,6 +34,8 @@ public partial class ManagerEvaluationNewPage : IDisposable
|
|||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IUserInfoService UserService { get; set; }
|
||||
[Inject] public ILogger<ManagerEvaluationNewPage> Logger { get; set; }
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
|
||||
|
||||
// ############################################################
|
||||
|
@ -39,16 +43,23 @@ public partial class ManagerEvaluationNewPage : IDisposable
|
|||
|
||||
|
||||
// ############################################################
|
||||
private EditContext EvaluationContext { get; set; }
|
||||
private EditContext FormContext { get; set; }
|
||||
private MemberView Member { get; set; } = new();
|
||||
private ManagerView Manager { get; set; } = new();
|
||||
|
||||
private EvaluationEditView Document { get; set; } = new();
|
||||
private DateTime DocumentDate { get; set; } = DateTime.Now;
|
||||
private bool FormInvalid { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
FormContext = new EditContext(Document);
|
||||
|
||||
FormContext.OnFieldChanged += HandleFieldChanged!;
|
||||
FormContext.OnValidationStateChanged += ValidationChanged!;
|
||||
|
||||
Member = await MemberSupportRepo.GetMemberByUserId(UserId);
|
||||
|
||||
Logger.LogDebug("Member => {}", JsonSerializer.Serialize(Member));
|
||||
|
@ -60,11 +71,61 @@ public partial class ManagerEvaluationNewPage : IDisposable
|
|||
Manager = await MemberSupportRepo.GetManagerByUserId(managerId);
|
||||
|
||||
Logger.LogDebug("Manager => {}", JsonSerializer.Serialize(Manager));
|
||||
|
||||
Document.EvaluationDate = $"{DocumentDate:yyyy-MM-dd}";
|
||||
Document.ManagerId = Manager.ManagerId;
|
||||
Document.ManagerName = Manager.FullName;
|
||||
Document.MemberId = Member.MemberId;
|
||||
Document.MemberName = Member.FullName;
|
||||
}
|
||||
|
||||
|
||||
private async Task SubmitDocument()
|
||||
{
|
||||
Toaster.ShowInfo("Gemmer Evaluering");
|
||||
var x = await MemberSupportRepo.CreateEvaluation(Document);
|
||||
if (string.IsNullOrWhiteSpace(x.EvaluationId))
|
||||
{
|
||||
Toaster.ShowError("Fejl");
|
||||
}
|
||||
else
|
||||
{
|
||||
Toaster.ShowSuccess("Ok");
|
||||
Navigator.NavigateTo($"/supervisor/members/{UserId}/evaluations/{x.EvaluationId}");
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
||||
{
|
||||
Document.EvaluationDate = $"{DocumentDate:yyyy-MM-dd}";
|
||||
|
||||
FormInvalid = !FormContext.Validate();
|
||||
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validation change event
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
||||
{
|
||||
FormInvalid = false;
|
||||
FormContext.OnFieldChanged -= HandleFieldChanged!;
|
||||
FormContext.OnValidationStateChanged -= ValidationChanged!;
|
||||
FormContext = new EditContext(Document);
|
||||
FormContext.OnFieldChanged += HandleFieldChanged!;
|
||||
FormContext.OnValidationStateChanged += ValidationChanged!;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Interceptor.DisposeEvent();
|
||||
FormContext.OnFieldChanged -= HandleFieldChanged!;
|
||||
FormContext.OnValidationStateChanged -= ValidationChanged!;
|
||||
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"appInfo": {
|
||||
"name": "Wonky Online",
|
||||
"version": "0.137.0",
|
||||
"version": "0.138.0",
|
||||
"rc": true,
|
||||
"sandBox": false,
|
||||
"image": "grumpy-coder.png"
|
||||
|
@ -9,7 +9,7 @@
|
|||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"System": "Information",
|
||||
"System": "Debug",
|
||||
"Microsoft": "Information"
|
||||
},
|
||||
"Debug": {
|
||||
|
|
|
@ -1,20 +1,25 @@
|
|||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Wonky.Entity.DTO;
|
||||
|
||||
public class EvaluationEditView
|
||||
{
|
||||
[Required(ErrorMessage = "Indhold mangler")]
|
||||
public string Content { get; set; } = "";
|
||||
|
||||
|
||||
[Required(ErrorMessage = "Beskrivelse mangler")]
|
||||
[MaxLength(128, ErrorMessage = "Der er kun afsat 128 tegn.")]
|
||||
public string Description { get; set; } = "";
|
||||
|
||||
|
||||
public string EvaluationDate { get; set; } = "";
|
||||
|
||||
public string EvaluationId { get; set; } = "";
|
||||
|
||||
|
||||
public string ManagerId { get; set; } = "";
|
||||
|
||||
public string ManagerName { get; set; } = "";
|
||||
|
||||
|
||||
public string MemberId { get; set; } = "";
|
||||
|
||||
public string MemberName { get; set; } = "";
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue