- Edit nel form della home

This commit is contained in:
2025-12-15 17:57:43 +01:00
parent 8e9402c2f8
commit 6db8c7b938
6 changed files with 988 additions and 126 deletions

View File

@ -59,128 +59,166 @@
{
<EditForm Model="iscrizione" OnValidSubmit="onIscrizioneSave" FormName="iscrizioneForm">
<DataAnnotationsValidator />
<div class="row">
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Nome</RadzenText>
<RadzenTextBox Style="width: 100%" aria-label="Nome" @bind-Value="@iscrizione.Nome" />
<ValidationMessage For="@(() => iscrizione.Nome)" />
</div>
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Cognome</RadzenText>
<RadzenTextBox Style="width: 100%" aria-label="Cognome" @bind-Value="@iscrizione.Cognome" />
<ValidationMessage For="@(() => iscrizione.Cognome)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">E-mail</RadzenText>
<RadzenTextBox Style="width: 100%" aria-label="Email" @bind-Value="@iscrizione.Email" />
<ValidationMessage For="@(() => iscrizione.Email)" />
</div>
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Telefono</RadzenText>
<RadzenTextBox Style="width: 100%" aria-label="NumeroTelefono" @bind-Value="@iscrizione.NumeroTelefono" />
<ValidationMessage For="@(() => iscrizione.NumeroTelefono)" />
</div>
</div>
<div class="row">
<div class="col-4 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Comune</RadzenText>
<RadzenDropDown @bind-Value="@iscrizione.Comune" Style="width: 100%" TextProperty="" Placeholder="Seleziona il comune"
Data="@comuneList" Size="ButtonSize.Small" />
<ValidationMessage For="@(() => iscrizione.Comune)" />
</div>
<div class="col-4 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Cap</RadzenText>
<RadzenTextBox Style="width: 100%" aria-label="Cap" @bind-Value="@iscrizione.Cap" />
<ValidationMessage For="@(() => iscrizione.Cap)" />
</div>
<div class="col-4 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Provincia</RadzenText>
<RadzenDropDown @bind-Value="@iscrizione.Provincia" Style="width: 100%" TextProperty="" Placeholder="Seleziona la provincia"
Data="@provinciaList" Size="ButtonSize.Small" />
<ValidationMessage For="@(() => iscrizione.Provincia)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Ragione Sociale</RadzenText>
<RadzenTextBox Style="width: 100%" aria-label="Nome" @bind-Value="@iscrizione.RagioneSociale" />
<ValidationMessage For="@(() => iscrizione.RagioneSociale)" />
</div>
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Tipologia</RadzenText>
<RadzenDropDown @bind-Value="@iscrizione.TipologiaClienteId" TValue="Guid?" Style="width: 100%" TextProperty="Description" ValueProperty="Key" Placeholder="Seleziona la tipologia"
Data="@tipologiaList" Size="ButtonSize.Small" />
<ValidationMessage For="@(() => iscrizione.TipologiaClienteId)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Hai già avuto un'esperienza con DAC?</RadzenText>
<RadzenDropDown @bind-Value="@iscrizione.EsperienzaConDAC" Style="width: 100%" TextProperty="" Placeholder="Scegli dal menù"
Data="@esperienzaList" Size="ButtonSize.Small" />
<ValidationMessage For="@(() => iscrizione.EsperienzaConDAC)" />
</div>
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Ruolo</RadzenText>
<RadzenDropDown @bind-Value="@iscrizione.RuoloInt" TValue="int?" Style="width: 100%" TextProperty="Description" ValueProperty="Key" Placeholder="Seleziona il ruolo"
Data="@ruoloList" Size="ButtonSize.Small" />
<ValidationMessage For="@(() => iscrizione.RuoloInt)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Destinazione</RadzenText>
<RadzenDropDown @bind-Value="@iscrizione.DestinazioneId" TValue="Guid ?" Style="width: 100%" ValueProperty="Id" TextProperty="RagioneSociale" Placeholder="Seleziona la destinazione"
Data="@destinazioniList" Size="ButtonSize.Small" />
<ValidationMessage For="@(() => iscrizione.DestinazioneId)" />
</div>
<div class="col-6 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Numero di partecipanti</RadzenText>
<RadzenNumeric ShowUpDown="false" TValue="int" TextAlign="TextAlign.Right" Style="width: 100%" aria-label="Partecipanti" @bind-Value="@iscrizione.Partecipanti" />
<ValidationMessage For="@(() => iscrizione.Partecipanti)" />
</div>
</div>
<div class="row">
<div class="col-12 mb-3">
<RadzenText TextStyle="TextStyle.Subtitle2" TagName="TagName.H3">Note</RadzenText>
<RadzenTextArea @bind-Value="@iscrizione.Note" Style="width: 100%;" Rows="3" />
<ValidationMessage For="@(() => iscrizione.Note)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<div class="d-flex align-items-center mb-2">
<RadzenCheckBox class="form-check-input" @bind-Value=@iscrizione.PresaVisionePrivacy Name="PresaVisionePrivacy" TValue="bool" />
<label class="rz-ms-2" for="PresaVisionePrivacy" style="cursor: pointer;">
Presa visione dell'informativa Privacy* (<a href="/" target="_blank">leggi</a>)
</label>
<div class="col-12">
<div class="row">
<div class="col-6 mb-3">
<RadzenFormField Text="Nome" Variant="Variant.Flat" Style="width: 100%;">
<RadzenTextBox Style="width: 100%" aria-label="Nome" @bind-Value="@iscrizione.Nome" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.Nome)" />
</div>
<div class="d-flex align-items-center">
<RadzenCheckBox class="form-check-input" @bind-Value=@iscrizione.PresaVisioneDatiPersonali Name="PresaVisioneDatiPersonali" TValue="bool" />
<label class="rz-ms-2" for="PresaVisioneDatiPersonali" style="cursor: pointer;">
Autorizzazione al trattamento dati* (<a href="/" target="_blank">leggi</a>)
</label>
<div class="col-6 mb-3">
<RadzenFormField Text="Cognome" Variant="Variant.Flat" Style="width: 100%;">
<RadzenTextBox Style="width: 100%" aria-label="Cognome" @bind-Value="@iscrizione.Cognome" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.Cognome)" />
</div>
</div>
<div class="col-3 mb-3">
<button type="button" class="btn btn-default w-100" @onclick="backToHome">
Indietro
</button>
<div class="row">
<div class="col-6 mb-3">
<RadzenFormField Text="E-mail" Variant="Variant.Flat" Style="width: 100%;">
<RadzenTextBox Style="width: 100%" aria-label="Email" @bind-Value="@iscrizione.Email" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.Email)" />
</div>
<div class="col-6 mb-3">
<RadzenFormField Text="Telefono" Variant="Variant.Flat" Style="width: 100%;">
<RadzenTextBox Style="width: 100%" aria-label="NumeroTelefono" @bind-Value="@iscrizione.NumeroTelefono" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.NumeroTelefono)" />
</div>
</div>
<div class="col-3 mb-3">
<button type="submit" class="btn btn-primary w-100" disabled="@(!iscrizione.PresaVisionePrivacy || !iscrizione.PresaVisioneDatiPersonali)">
Invia
</button>
<div class="row">
<div class="col-4 mb-3">
<RadzenFormField Text="Provincia" Variant="Variant.Flat" Style="width: 100%;">
<RadzenDropDown @bind-Value="@iscrizione.Provincia" Style="width: 100%" TextProperty="" Placeholder="Seleziona la provincia"
Data="@provinciaList" Size="ButtonSize.Small" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.Provincia)" />
</div>
<div class="col-4 mb-3">
<RadzenFormField Text="CAP" Variant="Variant.Flat" Style="width: 100%;">
<RadzenTextBox Style="width: 100%" aria-label="Cap" @bind-Value="@iscrizione.Cap" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.Cap)" />
</div>
<div class="col-4 mb-3">
<RadzenFormField Text="Comune" Variant="Variant.Flat" Style="width: 100%;">
<RadzenDropDown @bind-Value="@iscrizione.Comune" Style="width: 100%" TextProperty="" Placeholder="Seleziona il comune"
Data="@comuneList" Size="ButtonSize.Small" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.Comune)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<RadzenFormField Text="Ragione Sociale" Variant="Variant.Flat" Style="width: 100%;">
<RadzenTextBox Style="width: 100%" aria-label="Nome" @bind-Value="@iscrizione.RagioneSociale" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.RagioneSociale)" />
</div>
<div class="col-6 mb-3">
<RadzenFormField Text="Tipologia" Variant="Variant.Flat" Style="width: 100%;">
<RadzenDropDown @bind-Value="@iscrizione.TipologiaClienteId" TValue="Guid?" Style="width: 100%" TextProperty="Description" ValueProperty="Key" Placeholder="Seleziona la tipologia"
Data="@tipologiaList" Size="ButtonSize.Small" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.TipologiaClienteId)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<RadzenFormField Text="Hai già avuto un'esperienza con DAC?" Variant="Variant.Flat" Style="width: 100%;">
<RadzenDropDown @bind-Value="@iscrizione.EsperienzaConDAC" Style="width: 100%" TextProperty="" Placeholder="Scegli dal menù"
Data="@esperienzaList" Size="ButtonSize.Small" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.EsperienzaConDAC)" />
</div>
<div class="col-6 mb-3">
<RadzenFormField Text="Ruolo" Variant="Variant.Flat" Style="width: 100%;">
<RadzenDropDown @bind-Value="@iscrizione.RuoloInt" TValue="int?" Style="width: 100%" TextProperty="Description" ValueProperty="Key" Placeholder="Seleziona il ruolo"
Data="@ruoloList" Size="ButtonSize.Small" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.RuoloInt)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<RadzenFormField Text="Destinazione" Variant="Variant.Flat" Style="width: 100%;">
<RadzenDropDown @bind-Value="@iscrizione.DestinazioneId" TValue="Guid?" Style="width: 100%" ValueProperty="Id" TextProperty="RagioneSociale" Placeholder="Seleziona la destinazione"
Data="@destinazioniList" Size="ButtonSize.Small" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.DestinazioneId)" />
</div>
<div class="col-6 mb-3">
<RadzenFormField Text="Numero di partecipanti" Variant="Variant.Flat" Style="width: 100%;">
<RadzenNumeric ShowUpDown="false" TValue="int" TextAlign="TextAlign.Right" Style="width: 100%" aria-label="Partecipanti" @bind-Value="@iscrizione.Partecipanti" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.Partecipanti)" />
</div>
</div>
<div class="row">
<div class="col-12 mb-3">
<RadzenFormField Text="Note" Variant="Variant.Flat" Style="width: 100%; border: none !important; box-shadow: none !important; background-color: transparent !important;">
<RadzenTextArea @bind-Value="@iscrizione.Note" Style="width: 100%;" Rows="3" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.Note)" />
</div>
</div>
<div class="row">
<div class="col-4 mb-3">
<RadzenFormField Text="Data Iscrizione Dal" Variant="Variant.Flat" Style="width: 100%;">
<RadzenDatePicker @bind-Value=@iscrizione.GiornoPresenzaDal Name="GiornoPresenzaDal" ShowCalendarWeek ShowTime="false" DateFormat="dd/MM/yyyy" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.GiornoPresenzaDal)" />
</div>
<div class="col-4 mb-3">
<RadzenFormField Text="Data Iscrizione Al" Variant="Variant.Flat" Style="width: 100%;">
<RadzenDatePicker @bind-Value=@iscrizione.GiornoPresenzaAl Name="GiornoPresenzaAl" ShowCalendarWeek ShowTime="false" DateFormat="dd/MM/yyyy" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.GiornoPresenzaAl)" />
</div>
<div class="col-4 mb-3">
<RadzenFormField Text="Partita IVA" Variant="Variant.Flat" Style="width: 100%;">
<RadzenTextBox Style="width: 100%" aria-label="Cap" @bind-Value="@iscrizione.PartitaIva" />
</RadzenFormField>
<ValidationMessage For="@(() => iscrizione.PartitaIva)" />
</div>
</div>
<div class="row">
<div class="col-6 mb-3">
<div class="d-flex align-items-center mb-2">
<RadzenCheckBox class="form-check-input" @bind-Value="PresaVisionePrivacy" Name="PresaVisionePrivacy" TValue="bool" />
<label class="rz-ms-2" for="PresaVisionePrivacy" style="cursor: pointer;">
Presa visione dell'informativa Privacy* (<a href="/" target="_blank">leggi</a>)
</label>
</div>
<div class="d-flex align-items-center">
<RadzenCheckBox class="form-check-input" @bind-Value="PresaVisioneDatiPersonali" Name="PresaVisioneDatiPersonali" TValue="bool" />
<label class="rz-ms-2" for="PresaVisioneDatiPersonali" style="cursor: pointer;">
Autorizzazione al trattamento dati* (<a href="/" target="_blank">leggi</a>)
</label>
</div>
</div>
<div class="col-3 mb-3">
<button type="button" class="btn btn-default w-100" @onclick="backToHome">
Torna all'inserimento codice
</button>
</div>
<div class="col-3 mb-3">
<button type="submit" class="btn btn-danger w-100" disabled="@(!PresaVisionePrivacy || !PresaVisioneDatiPersonali)">
Invia
</button>
</div>
</div>
</div>
</EditForm>
@ -258,6 +296,8 @@
public string invitationCode { get; set; } = string.Empty;
private string invalidCode = string.Empty;
private bool PresaVisionePrivacy { get; set; }
private bool PresaVisioneDatiPersonali { get; set; }
protected override async Task OnInitializedAsync()
{
@ -271,7 +311,6 @@
invalidCode = "Il codice inserito non risulta corretto";
else
{
iscrizione.RagioneSociale = invito?.Cliente?.RagioneSociale ?? "";
var destinazioniIds = invito.IscrizioniEvento?.Select(x => x.DestinazioneId).ToList() ?? new List<Guid?>();
destinazioniList = (await _managerService.DestinazioneService.RicercaQueryable(filtro: x => x.ClienteId == invito.ClienteId && !destinazioniIds.Any(y => y == x.Id))).Select(x => (DestinazioneViewModel)x).ToList();
comuneList = new List<string>() { "Brescia" };
@ -279,9 +318,14 @@
esperienzaList = new List<string>() { "Si", "No" };
var eUtils = new EnumUtils();
tipologiaList = (await _managerService.TipologiaClienteService.RicercaQueryable(x => x.Eliminato == false))
tipologiaList = (await _managerService.TipologiaClienteService.RicercaQueryable(x => x.Eliminato == false, ordinamento: x => x.OrderBy(y => y.Nome)))
.Select(x => new LookupViewModel<Guid>(x.Id, x.Nome)).ToList();
ruoloList = eUtils.GetEnumList<RuoloTipo>();
// Compilazione automatica campi iscrizione
iscrizione.RagioneSociale = invito?.Cliente?.RagioneSociale ?? "";
if (destinazioniList.Count() == 1)
iscrizione.DestinazioneId = destinazioniList.First()?.Id;
}
}

View File

@ -15,8 +15,7 @@ public class IscrizioneEventoViewModel
[Range(1, int.MaxValue, ErrorMessage = "Inserire un numero di partecipanti validi")]
public int Partecipanti { get; set; }
[Required(ErrorMessage = "Le note sono obbligatorie")]
public string Note { get; set; }
public string? Note { get; set; }
public bool ScanCompleto { get; set; }
public DateTime? DataScan { get; set; }
[Required(ErrorMessage = "Il nome è obbigatorio")]
@ -42,9 +41,11 @@ public class IscrizioneEventoViewModel
public RuoloTipo Ruolo { get; set; }
[Required(ErrorMessage = "Il ruolo è obbigatorio")]
public int? RuoloInt { get; set; }
public bool PresaVisionePrivacy { get; set; }
public bool PresaVisioneDatiPersonali { get; set; }
public string? PartitaIva { get; set; }
[Required(ErrorMessage = "Bisogna inserire una data iscrizione")]
public DateTime? GiornoPresenzaDal { get; set; }
[Required(ErrorMessage = "Bisogna inserire una data iscrizione")]
public DateTime? GiornoPresenzaAl { get; set; }
public IscrizioneEvento Map(IscrizioneEvento model)
{
@ -61,6 +62,9 @@ public class IscrizioneEventoViewModel
model.Cap = Cap;
model.RagioneSociale = RagioneSociale;
model.EsperienzaConDAC = EsperienzaConDAC;
model.PartitaIva = PartitaIva;
model.GiornoPresenzaDal = GiornoPresenzaDal.Value;
model.GiornoPresenzaAl = GiornoPresenzaAl.Value;
return model;
}