306 lines
16 KiB
Plaintext
306 lines
16 KiB
Plaintext
@page "/"
|
|
@page "/Home"
|
|
@page "/{invitationId:guid}"
|
|
@layout PublicLayout
|
|
|
|
@using Microsoft.EntityFrameworkCore
|
|
@using StandManager.Components.Layout
|
|
@using StandManager.Model
|
|
|
|
@inject AuthenticationStateProvider auth
|
|
@inject BodyClassService BodyClass
|
|
@rendermode InteractiveServer
|
|
|
|
<PageTitle>Iscrizioni Evento</PageTitle>
|
|
|
|
<AuthorizeView>
|
|
<Authorized>
|
|
<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>
|
|
</Authorized>
|
|
|
|
<NotAuthorized>
|
|
<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>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
</NotAuthorized>
|
|
</AuthorizeView>
|
|
|
|
<div class="container my-5 py-3">
|
|
@if (invitationId.HasValue && invito != null)
|
|
{
|
|
@if (destinazioniList.Count() > 0)
|
|
{
|
|
<div class="row g-5 mb-3">
|
|
<EditForm Model="iscrizione" OnValidSubmit="onIscrizioneSave" FormName="iscrizioneForm">
|
|
<DataAnnotationsValidator />
|
|
|
|
<div class="col-12">
|
|
<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" 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>
|
|
|
|
<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>
|
|
</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="@(!iscrizione.PresaVisionePrivacy || !iscrizione.PresaVisioneDatiPersonali)">
|
|
Invia
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</EditForm>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="text-danger mt-1">Non sono presenti destinazioni da compilare per questo evento!</div>
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
<div class="mb-2">
|
|
<h1 class="hero-title">Iscriviti ad un evento, inserisci il tuo codice di invito</h1>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<div class="row">
|
|
<div class="col-9 mb-3">
|
|
<RadzenTextBox @bind-Value="@invitationCode" Placeholder="Inserirci il codice invito" Style="width: 100%;" />
|
|
@if (!string.IsNullOrEmpty(invalidCode))
|
|
{
|
|
<div class="text-danger mt-1">@invalidCode</div>
|
|
}
|
|
</div>
|
|
<div class="col-3 mb-3">
|
|
<button type="button" class="btn btn-danger w-100" @onclick="reloadWithCode">
|
|
Invia
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
@code {
|
|
[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 string invalidCode = string.Empty;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
base.OnInitializedAsync();
|
|
invito = invitationId.GetValueOrDefault() != Guid.Empty
|
|
? await _managerService.InvitoEventoService.RicercaPer(x => x.Id == invitationId && x.Eliminato == false,
|
|
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
|
|
{
|
|
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" };
|
|
provinciaList = new List<string>() { "BS" };
|
|
esperienzaList = new List<string>() { "Si", "No" };
|
|
var eUtils = new EnumUtils();
|
|
|
|
tipologiaList = (await _managerService.TipologiaClienteService.RicercaQueryable(x => x.Eliminato == false))
|
|
.Select(x => new LookupViewModel<Guid>(x.Id, x.Nome)).ToList();
|
|
ruoloList = eUtils.GetEnumList<RuoloTipo>();
|
|
}
|
|
}
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (firstRender)
|
|
await BodyClass.SetBodyClass("body-marketing body-gradient");
|
|
}
|
|
|
|
private void reloadWithCode()
|
|
{
|
|
if (Guid.TryParse(invitationCode, out Guid invitationCodeParsed))
|
|
{
|
|
_navManager.NavigateTo($"/{invitationCodeParsed}");
|
|
}
|
|
else
|
|
{
|
|
invalidCode = "Il codice inserito non risulta corretto";
|
|
}
|
|
}
|
|
|
|
private void backToHome()
|
|
{
|
|
_navManager.NavigateTo($"/");
|
|
}
|
|
|
|
private async Task onIscrizioneSave()
|
|
{
|
|
var model = new IscrizioneEvento() {
|
|
EventoId = invito.EventoId,
|
|
InvitoEventoId = invito.Id,
|
|
ClienteId = invito.ClienteId,
|
|
DestinazioneId = iscrizione.DestinazioneId };
|
|
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($"/");
|
|
}
|
|
|
|
} |