Ricerca del cliente su PIva
This commit is contained in:
81
StandManager/Components/ClienteToggle.razor
Normal file
81
StandManager/Components/ClienteToggle.razor
Normal file
@ -0,0 +1,81 @@
|
||||
<div class="mb-4">
|
||||
<!-- Etichetta Principale -->
|
||||
<label class="form-label text-center mb-3 text-lg font-semibold" style="color: #1F2937; display: block;">
|
||||
Sei già un nostro cliente?
|
||||
</label>
|
||||
|
||||
<!-- Contenitore Tabler SelectGroup -->
|
||||
<div class="form-selectgroup form-selectgroup-boxes d-flex w-100" style="display: flex; gap: 1rem;">
|
||||
|
||||
<!-- Opzione SI -->
|
||||
<label class="form-selectgroup-item flex-fill" style="flex: 1 1 auto;">
|
||||
<input type="radio"
|
||||
name="clientType"
|
||||
value="true"
|
||||
class="form-selectgroup-input"
|
||||
checked="@(Value == true)"
|
||||
@onchange="@(() => OnSelectionChange(true))" />
|
||||
|
||||
<!-- Label visuale: Applica bordo e sfondo rosso chiaro se selezionato -->
|
||||
<span class="form-selectgroup-label d-flex align-items-center justify-content-center p-3 h-100 rounded-3"
|
||||
style="@(Value == true ? "border-color: #D63939; color: #D63939; background-color: rgba(214, 57, 57, 0.05);" : "")">
|
||||
|
||||
<span class="me-3 d-flex align-items-center">
|
||||
<!-- Icona: Rossa se attiva, grigia se inattiva -->
|
||||
<span class="material-icons-round text-3xl"
|
||||
style="font-size: 1.875rem; @(Value == true ? "color: #D63939;" : "color: #9CA3AF;")">
|
||||
<RadzenIcon Icon="check_circle" />
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<div>
|
||||
<span class="d-block font-medium text-lg" style="@(Value == true ? "color: #111827;" : "color: #374151;")">
|
||||
Sì
|
||||
</span>
|
||||
</div>
|
||||
</span>
|
||||
</label>
|
||||
|
||||
<!-- Opzione NO -->
|
||||
<label class="form-selectgroup-item flex-fill" style="flex: 1 1 auto;">
|
||||
<input type="radio"
|
||||
name="clientType"
|
||||
value="false"
|
||||
class="form-selectgroup-input"
|
||||
checked="@(Value == false)"
|
||||
@onchange="@(() => OnSelectionChange(false))" />
|
||||
|
||||
<span class="form-selectgroup-label d-flex align-items-center justify-content-center p-3 h-100 rounded-3"
|
||||
style="@(Value == false ? "border-color: #D63939; color: #D63939; background-color: rgba(214, 57, 57, 0.05);" : "")">
|
||||
|
||||
<span class="me-3 d-flex align-items-center">
|
||||
<span class="material-icons-round text-3xl"
|
||||
style="font-size: 1.875rem; @(Value == false ? "color: #D63939;" : "color: #9CA3AF;")">
|
||||
<RadzenIcon Icon="cancel" />
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<div>
|
||||
<span class="d-block font-medium text-lg" style="@(Value == false ? "color: #111827;" : "color: #374151;")">
|
||||
No
|
||||
</span>
|
||||
</div>
|
||||
</span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public bool? Value { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<bool> ValueChanged { get; set; }
|
||||
|
||||
private async Task OnSelectionChange(bool selection)
|
||||
{
|
||||
Value = selection;
|
||||
await ValueChanged.InvokeAsync(Value ?? false);
|
||||
}
|
||||
}
|
||||
211
StandManager/Components/Pages/Component_Registrazione.razor
Normal file
211
StandManager/Components/Pages/Component_Registrazione.razor
Normal file
@ -0,0 +1,211 @@
|
||||
@using StandManager.Model
|
||||
@rendermode InteractiveServer
|
||||
|
||||
<EditForm Model="iscrizione" OnValidSubmit="onIscrizioneSave" FormName="iscrizioneForm">
|
||||
<DataAnnotationsValidator />
|
||||
|
||||
<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="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="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="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>
|
||||
</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.GiornoPresenza Name="GiornoPresenza" ShowCalendarWeek ShowTime="false" DateFormat="dd/MM/yyyy" />
|
||||
</RadzenFormField>
|
||||
<ValidationMessage For="@(() => iscrizione.GiornoPresenza)" />
|
||||
</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="submit" class="btn btn-danger w-100" disabled="@(!presaVisionePrivacy || !presaVisioneDatiPersonali)">
|
||||
Invia
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</EditForm>
|
||||
|
||||
@code {
|
||||
[Parameter] public InvitoEventoViewModel invito { get; set; }
|
||||
|
||||
[SupplyParameterFromForm]
|
||||
private IscrizioneEventoViewModel iscrizione { get; set; } = new();
|
||||
private IEnumerable<string> comuneList { get; set; }
|
||||
private IEnumerable<string> provinciaList { get; set; }
|
||||
private IEnumerable<DestinazioneViewModel> destinazioniList { get; set; }
|
||||
private IEnumerable<LookupViewModel<Guid>> tipologiaList { get; set; }
|
||||
private IEnumerable<string> esperienzaList { get; set; }
|
||||
private IEnumerable<LookupViewModel<int>> ruoloList { get; set; }
|
||||
|
||||
private bool presaVisionePrivacy { get; set; }
|
||||
private bool presaVisioneDatiPersonali { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
base.OnInitializedAsync();
|
||||
var eUtils = new EnumUtils();
|
||||
|
||||
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" };
|
||||
provinciaList = new List<string>() { "BS" };
|
||||
esperienzaList = new List<string>() { "Si", "No" };
|
||||
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>();
|
||||
}
|
||||
|
||||
private async Task onIscrizioneSave()
|
||||
{
|
||||
var model = new IscrizioneEvento()
|
||||
{
|
||||
EventoId = invito.EventoId,
|
||||
InvitoEventoId = invito.Id,
|
||||
ClienteId = invito.ClienteId,
|
||||
DestinazioneId = iscrizione.DestinazioneId,
|
||||
TipologiaClienteId = iscrizione.TipologiaClienteId
|
||||
};
|
||||
if (invito.EventoId != Guid.Empty && iscrizione.DestinazioneId == Guid.Empty)
|
||||
{
|
||||
_dialogService.Alert("Selezionare una destinazione valida.", "Attenzione");
|
||||
return;
|
||||
}
|
||||
|
||||
model = iscrizione.Map(model);
|
||||
|
||||
await _managerService.IscrizioneEventoService.Salva(model);
|
||||
|
||||
_navManager.NavigateTo($"/Grazie");
|
||||
}
|
||||
|
||||
public void SetDatiCliente()
|
||||
{
|
||||
iscrizione.DestinazioneId = invito.DestinazioneId;
|
||||
iscrizione.ClienteId = invito.ClienteId;
|
||||
iscrizione.RagioneSociale = invito.RagioneSociale;
|
||||
}
|
||||
}
|
||||
@ -9,15 +9,15 @@
|
||||
Capitale Sociale € 3.000.000,00 i.v.<br />
|
||||
</div>
|
||||
<div class="col-4 text-left">
|
||||
<i class="fa-regular fa-map"></i><b> Sede legale e amministrativa</b><br />
|
||||
<b><i class="fa-regular fa-map footer-icon"></i> Sede legale e amministrativa</b><br />
|
||||
Via G.Marconi, n.15 - 25020 Flero (BS)<br />
|
||||
<i class="fa-solid fa-phone"></i><b> Tel. +39 030 256 8211</b><br />
|
||||
<i class="fa-regular fa-envelope"></i><b> info@gruppodac.eu</b>
|
||||
<b><i class="fa-solid fa-phone footer-icon"></i> Tel. +39 030 256 8211</b><br />
|
||||
<b><i class="fa-regular fa-envelope footer-icon"></i> info@gruppodac.eu</b>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<a href="#" class="text-white mx-2 text-decoration-none" aria-label="Button"><i class="fa-brands fa-facebook"></i></a>
|
||||
<a href="#" class="text-white mx-2 text-decoration-none" aria-label="Button"><i class="fa-brands fa-instagram"></i></a>
|
||||
<a href="#" class="text-white mx-2 text-decoration-none" aria-label="Button"><i class="fa-brands fa-youtube"></i></a>
|
||||
<a href="#" class="text-white mx-2 text-decoration-none" aria-label="Button"><i class="fa-brands fa-facebook footer-icon"></i></a>
|
||||
<a href="#" class="text-white mx-2 text-decoration-none" aria-label="Button"><i class="fa-brands fa-instagram footer-icon"></i></a>
|
||||
<a href="#" class="text-white mx-2 text-decoration-none" aria-label="Button"><i class="fa-brands fa-youtube footer-icon"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
52
StandManager/Components/Pages/Grazie.razor
Normal file
52
StandManager/Components/Pages/Grazie.razor
Normal file
@ -0,0 +1,52 @@
|
||||
@page "/Grazie"
|
||||
@inject NavigationManager Navigation
|
||||
|
||||
<div class="page page-center">
|
||||
<div class="container container-tight py-4">
|
||||
<div class="card card-md">
|
||||
<div class="card-body text-center py-4 p-sm-5">
|
||||
<div class="mb-4">
|
||||
<!-- Icona Successo -->
|
||||
<div class="avatar avatar-xl rounded-circle bg-primary-lt text-primary mb-2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-check" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M5 12l5 5l10 -10"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<h1 class="mt-2">Ti aspettiamo!</h1>
|
||||
<p class="text-secondary">
|
||||
Controlla la tua email per verificare di aver ricevuto il QR code di invito.
|
||||
</p>
|
||||
</div>
|
||||
<div class="hr-text hr-text-center hr-text-spaceless"></div>
|
||||
<div class="card-body">
|
||||
<button class="btn btn-primary w-100" @onclick="goToHome">
|
||||
Torna alla home
|
||||
</button>
|
||||
<div class="text-center text-secondary mt-3">
|
||||
<a href="#" class="text-secondary" style="text-decoration: none;">Hai bisogno d'aiuto?</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--tblr-primary: #D63939;
|
||||
--tblr-primary-rgb: 214, 57, 57;
|
||||
}
|
||||
|
||||
.bg-primary-lt {
|
||||
background-color: rgba(214, 57, 57, 0.1) !important;
|
||||
color: #D63939 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@code {
|
||||
private void goToHome()
|
||||
{
|
||||
Navigation.NavigateTo("/");
|
||||
}
|
||||
}
|
||||
@ -57,171 +57,7 @@
|
||||
{
|
||||
@if (destinazioniList.Count() > 0)
|
||||
{
|
||||
<EditForm Model="iscrizione" OnValidSubmit="onIscrizioneSave" FormName="iscrizioneForm">
|
||||
<DataAnnotationsValidator />
|
||||
|
||||
<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="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="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="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>
|
||||
<Home_Registrazione invito="invito" />
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -283,21 +119,11 @@
|
||||
[Parameter]
|
||||
public Guid? invitationId { get; set; }
|
||||
|
||||
private InvitoEvento invito { get; set; }
|
||||
|
||||
[SupplyParameterFromForm]
|
||||
private IscrizioneEventoViewModel iscrizione { get; set; } = new();
|
||||
private IEnumerable<string> comuneList { get; set; }
|
||||
private IEnumerable<string> provinciaList { get; set; }
|
||||
private IEnumerable<DestinazioneViewModel> destinazioniList { get; set; }
|
||||
private IEnumerable<LookupViewModel<Guid>> tipologiaList { get; set; }
|
||||
private IEnumerable<string> esperienzaList { get; set; }
|
||||
private IEnumerable<LookupViewModel<int>> ruoloList { get; set; }
|
||||
|
||||
public string invitationCode { get; set; } = string.Empty;
|
||||
private InvitoEvento invito { get; set; }
|
||||
private string invalidCode = string.Empty;
|
||||
private bool PresaVisionePrivacy { get; set; }
|
||||
private bool PresaVisioneDatiPersonali { get; set; }
|
||||
|
||||
private IEnumerable<DestinazioneViewModel> destinazioniList { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
@ -307,26 +133,8 @@
|
||||
includi: x => x.Include(y => y.Evento).Include(y => y.Cliente).ThenInclude(y => y.Destinazioni).Include(y => y.IscrizioniEvento))
|
||||
: new();
|
||||
|
||||
if (invito == null)
|
||||
invalidCode = "Il codice inserito non risulta corretto";
|
||||
else
|
||||
{
|
||||
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" };
|
||||
provinciaList = new List<string>() { "BS" };
|
||||
esperienzaList = new List<string>() { "Si", "No" };
|
||||
var eUtils = new EnumUtils();
|
||||
|
||||
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;
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
@ -351,23 +159,4 @@
|
||||
{
|
||||
_navManager.NavigateTo($"/");
|
||||
}
|
||||
|
||||
private async Task onIscrizioneSave()
|
||||
{
|
||||
var model = new IscrizioneEvento()
|
||||
{
|
||||
EventoId = invito.EventoId,
|
||||
InvitoEventoId = invito.Id,
|
||||
ClienteId = invito.ClienteId,
|
||||
DestinazioneId = iscrizione.DestinazioneId,
|
||||
TipologiaClienteId = iscrizione.TipologiaClienteId
|
||||
};
|
||||
model = iscrizione.Map(model);
|
||||
//model.TipologiaCliente = await _managerService.TipologiaClienteService.RicercaPer(x => x.Id == iscrizione.TipologiaClienteId && x.Eliminato == false);
|
||||
|
||||
await _managerService.IscrizioneEventoService.Salva(model);
|
||||
|
||||
_navManager.NavigateTo($"/");
|
||||
}
|
||||
|
||||
}
|
||||
88
StandManager/Components/Pages/Registrazione.razor
Normal file
88
StandManager/Components/Pages/Registrazione.razor
Normal file
@ -0,0 +1,88 @@
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using StandManager.Components.Layout
|
||||
@using System.Threading.Tasks
|
||||
@using StandManager.Model
|
||||
|
||||
@page "/Registrazione"
|
||||
@layout PublicLayout
|
||||
|
||||
@rendermode InteractiveServer
|
||||
|
||||
<PageTitle>Iscrizione Evento</PageTitle>
|
||||
<header class="navbar navbar-expand-lg navbar-transparent bg-red py-3" data-bs-theme="dark">
|
||||
<div class="container position-relative">
|
||||
|
||||
<img src="/Logo_dac.png" alt="Logo DAC" class="d-block mx-auto" style="height: 80px;" />
|
||||
|
||||
<div class="collapse navbar-collapse position-absolute end-0 top-50 translate-middle-y pe-3">
|
||||
<nav class="navbar-nav ms-auto">
|
||||
<div class="nav-item">
|
||||
<a class="nav-link text-white" href="/management"><span class="nav-link-title">Management</span></a>
|
||||
</div>
|
||||
<div class="nav-item">
|
||||
<a class="nav-link text-white" href="/scan"><span class="nav-link-title">Scansione</span></a>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container my-5 py-3">
|
||||
<ClienteToggle ValueChanged="onClienteToggleChanged" />
|
||||
@if (showCodiceCliente)
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="row">
|
||||
<div class="col-12 mb-3">
|
||||
<RadzenFormField Text="Codice cliente o Partita IVA" Variant="Variant.Flat" Style="width: 100%;">
|
||||
<RadzenTextBox Style="width: 100%" aria-label="Codice cliente o Partita IVA" Change="(args => onCodiceFornitoChanged(args))" />
|
||||
</RadzenFormField>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (showForm)
|
||||
{
|
||||
<Component_Registrazione invito="invito" @ref="registrazione" />
|
||||
}
|
||||
|
||||
</div>
|
||||
|
||||
<Footer />
|
||||
|
||||
@code {
|
||||
private bool showCodiceCliente { get; set; } = false;
|
||||
private bool showForm { get; set; } = false;
|
||||
private InvitoEventoViewModel invito { get; set; } = new InvitoEventoViewModel();
|
||||
private Component_Registrazione registrazione { get; set; }
|
||||
|
||||
private string codiceFornito { get; set; }
|
||||
|
||||
private void onClienteToggleChanged(bool value)
|
||||
{
|
||||
showCodiceCliente = value;
|
||||
|
||||
showForm = true;
|
||||
}
|
||||
|
||||
private async Task onCodiceFornitoChanged(string text)
|
||||
{
|
||||
codiceFornito = text;
|
||||
invito.CodiceFornito = codiceFornito;
|
||||
|
||||
var destinazione = (await _managerService.DestinazioneService.RicercaPer(
|
||||
x => x.PartitaIva == codiceFornito || x.CodiceFiscale == codiceFornito || x.Rid == codiceFornito || x.Cliente.Rid == codiceFornito,
|
||||
includi: x => x.Include(y => y.Cliente)));
|
||||
|
||||
if (destinazione != null)
|
||||
{
|
||||
invito.ClienteId = destinazione.ClienteId;
|
||||
invito.DestinazioneId = destinazione.Id;
|
||||
invito.CodiceFornito = codiceFornito;
|
||||
invito.RagioneSociale = destinazione.Cliente?.RagioneSociale ?? string.Empty;
|
||||
registrazione.SetDatiCliente();
|
||||
}
|
||||
|
||||
showForm = true;
|
||||
}
|
||||
}
|
||||
31
StandManager/Model/InvitoEventoViewModel.cs
Normal file
31
StandManager/Model/InvitoEventoViewModel.cs
Normal file
@ -0,0 +1,31 @@
|
||||
using StandManager.Domain.Entita;
|
||||
using StandManager.Domain.Entita.Base;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace StandManager.Model
|
||||
{
|
||||
public class InvitoEventoViewModel
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public Guid? EventoId { get; set; }
|
||||
public Guid? ClienteId { get; set; }
|
||||
public Guid? DestinazioneId { get; set; }
|
||||
public string CodiceFornito { get; set; }
|
||||
public string RagioneSociale { get; set; }
|
||||
public List<IscrizioneEventoViewModel> IscrizioniEvento { get; set; }
|
||||
|
||||
public static implicit operator InvitoEventoViewModel(InvitoEvento model)
|
||||
{
|
||||
return model == null
|
||||
? null
|
||||
: new InvitoEventoViewModel()
|
||||
{
|
||||
ClienteId = model.ClienteId,
|
||||
CodiceFornito = model.CodiceFornito,
|
||||
EventoId = model.EventoId,
|
||||
Id = model.Id,
|
||||
IscrizioniEvento = model.IscrizioniEvento?.Select(x => (IscrizioneEventoViewModel)x).ToList()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -9,10 +9,9 @@ public class IscrizioneEventoViewModel
|
||||
public EventoViewModel Evento { get; set; }
|
||||
public InvitoEvento InvitoEvento { get; set; }
|
||||
public ClienteViewModel Cliente { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "La destinazione è obbligatoria")]
|
||||
public Guid? ClienteId { get; set; }
|
||||
public Guid? DestinazioneId { get; set; }
|
||||
[Range(1, int.MaxValue, ErrorMessage = "Inserire un numero di partecipanti validi")]
|
||||
[Range(1, int.MaxValue, ErrorMessage = "Inserire un numero di partecipanti valido")]
|
||||
public int Partecipanti { get; set; }
|
||||
|
||||
public string? Note { get; set; }
|
||||
@ -42,10 +41,8 @@ public class IscrizioneEventoViewModel
|
||||
[Required(ErrorMessage = "Il ruolo è obbigatorio")]
|
||||
public int? RuoloInt { 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; }
|
||||
[Required(ErrorMessage = "E' necessario indicare la data di partecipazione")]
|
||||
public DateTime? GiornoPresenza { get; set; }
|
||||
|
||||
public IscrizioneEvento Map(IscrizioneEvento model)
|
||||
{
|
||||
@ -63,10 +60,40 @@ public class IscrizioneEventoViewModel
|
||||
model.RagioneSociale = RagioneSociale;
|
||||
model.EsperienzaConDAC = EsperienzaConDAC;
|
||||
model.PartitaIva = PartitaIva;
|
||||
model.GiornoPresenzaDal = GiornoPresenzaDal.Value;
|
||||
model.GiornoPresenzaAl = GiornoPresenzaAl.Value;
|
||||
model.GiornoPresenza = GiornoPresenza.Value;
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
public static implicit operator IscrizioneEventoViewModel(IscrizioneEvento model)
|
||||
{
|
||||
return model == null
|
||||
? null
|
||||
: new IscrizioneEventoViewModel()
|
||||
{
|
||||
Id = model.Id,
|
||||
InvitoEvento = model.InvitoEvento,
|
||||
DestinazioneId = model.DestinazioneId,
|
||||
ClienteId = model.Cliente?.Id,
|
||||
Partecipanti = model.Partecipanti,
|
||||
Note = model.Note,
|
||||
ScanCompleto = model.ScanCompleto,
|
||||
DataScan = model.DataScan,
|
||||
Nome = model.Nome,
|
||||
Cognome = model.Cognome,
|
||||
Email = model.Email,
|
||||
NumeroTelefono = model.NumeroTelefono,
|
||||
Provincia = model.Provincia,
|
||||
Comune = model.Comune,
|
||||
Cap = model.Cap,
|
||||
RagioneSociale = model.RagioneSociale,
|
||||
EsperienzaConDAC = model.EsperienzaConDAC,
|
||||
TipologiaClienteId = model.TipologiaClienteId,
|
||||
Ruolo = model.Ruolo,
|
||||
RuoloInt = (int?)model.Ruolo,
|
||||
PartitaIva = model.PartitaIva,
|
||||
GiornoPresenza = model.GiornoPresenza
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user