commit macchinario

This commit is contained in:
2026-02-03 10:55:22 +01:00
parent 35b434f100
commit 3697b4fb5a
5 changed files with 136 additions and 10 deletions

View File

@ -4,7 +4,8 @@ namespace TecniStamp.Service;
public class ManagerService : IManagerService public class ManagerService : IManagerService
{ {
public ManagerService(IUserService userService, ISezioneService sezioneService, IPermissionService permissionService, IRuoloService ruoloService, IFeatureService featureService, IMacchinarioService macchinarioService) public ManagerService(IUserService userService, ISezioneService sezioneService, IPermissionService permissionService, IRuoloService ruoloService,
IFeatureService featureService, IMacchinarioService macchinarioService, ICommessaService commessaService)
{ {
UtenteService = userService; UtenteService = userService;
SezioneService = sezioneService; SezioneService = sezioneService;

View File

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 17
VisualStudioVersion = 17.14.36915.13 d17.14 VisualStudioVersion = 17.14.36915.13
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TecniStamp", "TecniStamp\TecniStamp.csproj", "{CFA3D1CC-936B-4DF5-B2AE-A46A8616501A}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TecniStamp", "TecniStamp\TecniStamp.csproj", "{CFA3D1CC-936B-4DF5-B2AE-A46A8616501A}"
EndProject EndProject

View File

@ -28,15 +28,13 @@
AllowPaging="true" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" AllowPaging="true" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true"
Data="@macchinari" ColumnWidth="300px" LogicalFilterOperator="LogicalFilterOperator.Or" SelectionMode="DataGridSelectionMode.Single"> Data="@macchinari" ColumnWidth="300px" LogicalFilterOperator="LogicalFilterOperator.Or" SelectionMode="DataGridSelectionMode.Single">
<Columns> <Columns>
<RadzenDataGridColumn Property="@nameof(UserViewModel.Nome)" Title="Nome" Width="160px" /> <RadzenDataGridColumn Property="@nameof(MacchinarioViewModel.Nome)" Title="Nome" Width="160px" />
<RadzenDataGridColumn Property="@nameof(UserViewModel.Cognome)" Title="Cognome" Width="160px" /> <RadzenDataGridColumn Property="@nameof(MacchinarioViewModel.Descrizione)" Title="Descrizione" Width="160px" />
<RadzenDataGridColumn Property="@nameof(UserViewModel.Email)" Title="Mail" Width="200px" />
<RadzenDataGridColumn Property="@nameof(UserViewModel.Ruolo)" Title="Ruolo" Width="200px" />
<RadzenDataGridColumn Context="order" Filterable="false" Sortable="false" TextAlign="TextAlign.Center" Width="200px"> <RadzenDataGridColumn Context="order" Filterable="false" Sortable="false" TextAlign="TextAlign.Center" Width="200px">
<Template Context="user"> <Template Context="macchinario">
<RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="rz-my-1 rz-ms-1" Click="@(args => EditRow(user))" @onclick:stopPropagation="true" /> <RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="rz-my-1 rz-ms-1" Click="@(args => EditRow(macchinario))" @onclick:stopPropagation="true" />
<RadzenButton Icon="delete" ButtonStyle="ButtonStyle.Danger" Variant="Variant.Flat" Size="ButtonSize.Medium" Shade="Shade.Lighter" class="rz-my-1 rz-ms-1" Click="@(args => DeleteRow(user))" @onclick:stopPropagation="true" /> <RadzenButton Icon="delete" ButtonStyle="ButtonStyle.Danger" Variant="Variant.Flat" Size="ButtonSize.Medium" Shade="Shade.Lighter" class="rz-my-1 rz-ms-1" Click="@(args => DeleteRow(macchinario))" @onclick:stopPropagation="true" />
</Template> </Template>
</RadzenDataGridColumn> </RadzenDataGridColumn>
</Columns> </Columns>

View File

@ -0,0 +1,122 @@
@page "/Anagrafiche/Macchinari/Modifica"
@page "/Anagrafiche/Macchinari/Modifica/{MacchinarioId:guid}"
@using TecniStamp.Domain
@using TecniStamp.Model
@using TecniStamp.Model.Common
@using TecniStamp.Utils
<PageTitle>@pageTitle</PageTitle>
<Breadcrumb Items="BreadcrumbList" />
@rendermode InteractiveServer
<div class="container-fluid h-100 mt-5">
<div class="row justify-content-start">
<div class="row row-cards">
<div class="col">
<h2 class="page-title">@pageTitle</h2>
</div>
</div>
<div class="row row-cards">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<div class="row g-5">
<EditForm Model="Model" OnValidSubmit="onMacchinarioSave" FormName="editMacchinarioForm">
<DataAnnotationsValidator />
<div class="col-12">
<div class="row">
<div class="col-3 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Nome</RadzenText>
<RadzenTextBox Style="width: 100%" aria-label="Nome" @bind-Value="@Model.Nome" />
<ValidationMessage For="@(() => Model.Nome)" />
</div>
<div class="col-3 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Descrizione</RadzenText>
<RadzenTextBox Style="width: 100%" aria-label="Cognome" @bind-Value="@Model.Descrizione" />
<ValidationMessage For="@(() => Model.Descrizione)" />
</div>
</div>
<div class="row">
<div class="col-4 mb-3">
<button type="button" class="btn btn-default w-100" @onclick="backToHome">
Annulla
</button>
</div>
<div class="col-4 mb-3">
<button type="submit" class="btn btn-primary w-100">
Salva
</button>
</div>
</div>
</div>
</EditForm>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@code {
[Parameter] public Guid? MacchinarioId { get; set; }
public MacchinarioViewModel Model { get; set; } = new();
private string pageTitle => Model?.Id == Guid.Empty ? "Nuovo Macchinario" : $"Modifica Macchinario {Model.Nome}";
public List<BreadcrumbViewModel> BreadcrumbList { get; set; } = new();
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
Model = MacchinarioId.GetValueOrDefault() == Guid.Empty
? new MacchinarioViewModel()
: await _managerService.MacchinarioService.RicercaPer(x => x.Id == MacchinarioId);
BreadcrumbList = await BreadcrumbUtils.BuildBreadcrumbByFeature(_managerService, "Macchinari_Insert", "Modifica", "/Anagrafiche/Macchinari");
}
/// <summary>
/// Salva il macchinario: recupera o crea il modello, applica le modifiche dalla UI
/// usando lID dellutente autenticato.
/// </summary>
private async Task onMacchinarioSave()
{
try
{
var state = await _auth.GetAuthenticationStateAsync();
var idClaim = state.User.FindFirst("UserId")?.Value;
if (string.IsNullOrEmpty(idClaim))
{
// gestisci errore (utente non autenticato o claim mancante)
return;
}
var model = await _managerService.MacchinarioService.RicercaPer(x => x.Id == Model.Id, solaLettura: false)
?? new Macchinario();
model = Model.Map(model);
var macchinarioSalvato = await _managerService.MacchinarioService.Salva(model, Guid.Parse(idClaim));
_navManager.NavigateTo($"/Anagrafiche/Macchinari");
}
catch (Exception ex)
{
await _dialogService.Alert("Si è verificato un'errore", "Errore", new AlertOptions() { OkButtonText = "Continua" });
}
}
/// <summary>
/// Torna allelenco macchinari senza applicare altre azioni.
/// </summary>
private void backToHome()
{
_navManager.NavigateTo("/Anagrafiche/Macchinari");
}
}

View File

@ -5,6 +5,9 @@ namespace TecniStamp.Model;
public class MacchinarioViewModel : BaseViewModel public class MacchinarioViewModel : BaseViewModel
{ {
[Required(ErrorMessage = "Il nome è obbligatorio")]
public string Nome { get; set; }
[Required(ErrorMessage = "La descrizione è obbligatoria")] [Required(ErrorMessage = "La descrizione è obbligatoria")]
public string Descrizione { get; set; } public string Descrizione { get; set; }
@ -19,13 +22,15 @@ public class MacchinarioViewModel : BaseViewModel
: new MacchinarioViewModel() : new MacchinarioViewModel()
{ {
Id = model.Id, Id = model.Id,
Descrizione = model.Descrizione Descrizione = model.Descrizione,
Nome = model.Nome,
}; };
} }
public Macchinario Map(Macchinario model) public Macchinario Map(Macchinario model)
{ {
model.Descrizione = Descrizione; model.Descrizione = Descrizione;
model.Nome = Nome;
return model; return model;
} }