Files
SteUP_Dotnet/SteUp.Shared/Components/Pages/IspezionePage.razor
2026-02-23 16:22:55 +01:00

125 lines
4.2 KiB
Plaintext

@page "/ispezione"
@using SteUp.Shared.Components.Layout
@using SteUp.Shared.Components.SingleElements.Card
@using SteUp.Shared.Core.Dto
@using SteUp.Shared.Core.Entities
@using SteUp.Shared.Core.Interface.LocalDb
@using SteUp.Shared.Core.Messages.Scheda
@inject NewSchedaService NewScheda
@inject IIspezioniService IspezioniService
@inject IDialogService Dialog
@implements IDisposable
<HeaderLayout Title="Ispezione" BackTo="Indietro" Back="true"/>
<div class="container content pb-safe-area ispezione">
<InspectionCard Ispezione="SteupDataService.InspectionPageState.Ispezione"/>
@if (!SchedeGrouped.IsNullOrEmpty())
{
<MudExpansionPanels MultiExpansion="true">
@foreach (var group in SchedeGrouped)
{
<MudExpansionPanel Class="expansion-panel" Expanded="true" Text="@group.Key.Descrizione">
<TitleContent>
<div class="header-scheda-group">
<div class="title">
<MudText Typo="Typo.h6"><b>@group.Key.Descrizione</b></MudText>
<MudChip T="string" Size="Size.Small" Color="Color.Default">
@($"{group.Value.Count} sched{(group.Value.Count == 1 ? "a" : "e")}")
</MudChip>
</div>
<div class="action-scheda-group">
<MudIconButton Variant="Variant.Filled" Icon="@Icons.Material.Rounded.Add"
Color="Color.Warning" Size="Size.Medium"
OnClick="@(() => CreateNewScheda(group.Key))"/>
</div>
</div>
</TitleContent>
<ChildContent>
@foreach (var scheda in group.Value)
{
<SchedaCard Scheda="scheda" OnSchedaDeleted="OnSchedaDeleted"
OnSchedaModified="OnSchedaModified"
CodMdep="@SteupDataService.InspectionPageState.Ispezione.CodMdep"
Data="@SteupDataService.InspectionPageState.Ispezione.Data"/>
}
</ChildContent>
</MudExpansionPanel>
}
</MudExpansionPanels>
}
</div>
@code {
private List<Scheda> SchedeList { get; set; } = [];
private Dictionary<JtbFasiDto, List<Scheda>> SchedeGrouped { get; set; } = [];
protected override void OnInitialized()
{
NewScheda.OnNewScheda += LoadSchede;
LoadSchede();
}
private void LoadSchede()
{
var ispezione = SteupDataService.InspectionPageState.Ispezione;
InvokeAsync(async () =>
{
SchedeList = await IspezioniService.GetAllSchedeOfIspezioneAsync(
ispezione.CodMdep, ispezione.Data, ispezione.Rilevatore
);
GroupSchede();
StateHasChanged();
});
}
private void GroupSchede()
{
SchedeGrouped = SchedeList
.Where(s => s.Reparto != null)
.GroupBy(s => s.CodJfas)
.ToDictionary(
g => g.First().Reparto!,
g => g.ToList()
);
}
private void OnSchedaModified(Scheda obj)
{
var index = SchedeList.FindIndex(x => x.Id.Equals(obj.Id));
if (index > 0) SchedeList[index] = obj;
GroupSchede();
StateHasChanged();
}
private void OnSchedaDeleted(Scheda obj)
{
SchedeList.Remove(obj);
GroupSchede();
StateHasChanged();
}
private async Task CreateNewScheda(JtbFasiDto jtbFasi)
{
var modal = await ModalHelper.OpenFormScheda(
Dialog,
SteupDataService.InspectionPageState.Ispezione.CodMdep,
SteupDataService.InspectionPageState.Ispezione.Data,
true,
new Scheda { Reparto = jtbFasi }
);
if (modal is {Canceled: false}) LoadSchede();
}
void IDisposable.Dispose()
{
NewScheda.OnNewScheda -= LoadSchede;
}
}