259 lines
12 KiB
Plaintext
259 lines
12 KiB
Plaintext
<MudDialog Visible="@(Attivita is not null && Visible)" VisibleChanged="OnVisibleChanged"
|
|
Options="BottomSheetOptions" Class="bottom-sheet">
|
|
<TitleContent>
|
|
@if (Attivita is not null)
|
|
{
|
|
<div class="sheet-grabber"></div>
|
|
<div class="sheet-header">
|
|
<span class="sheet-title">
|
|
<MudIcon Icon="@Icons.Material.Outlined.Build" Size="Size.Small" />
|
|
@Attivita.PuntoVendita
|
|
</span>
|
|
<MudIconButton Icon="@Icons.Material.Filled.Close" Size="Size.Small"
|
|
Class="sheet-close" OnClick="Annulla" />
|
|
</div>
|
|
}
|
|
</TitleContent>
|
|
<DialogContent>
|
|
@if (Attivita is not null)
|
|
{
|
|
<div class="tab-bar">
|
|
<button class="tab-btn @(_tab == "chiudi" ? "active" : "")" @onclick='() => _tab = "chiudi"'>
|
|
<MudIcon Icon="@Icons.Material.Filled.CheckCircle" Size="Size.Small" /> Chiudi
|
|
</button>
|
|
<button class="tab-btn @(_tab == "rimanda" ? "active" : "")" @onclick='() => _tab = "rimanda"'>
|
|
<MudIcon Icon="@Icons.Material.Filled.Schedule" Size="Size.Small" /> Rimanda
|
|
</button>
|
|
</div>
|
|
|
|
<div class="sheet-body">
|
|
|
|
@if (_tab == "chiudi")
|
|
{
|
|
<div class="form-row">
|
|
<MudTimePicker Label="Ora ingresso" @bind-Time="_oraIngresso"
|
|
Variant="Variant.Outlined" Margin="Margin.Dense" />
|
|
<MudTimePicker Label="Ora fine lavori" @bind-Time="_oraFine"
|
|
Variant="Variant.Outlined" Margin="Margin.Dense" />
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<MudText Typo="Typo.caption" Class="form-label">Operatori</MudText>
|
|
<div class="operatori-list">
|
|
@for (int i = 0; i < _operatori.Count; i++)
|
|
{
|
|
int idx = i;
|
|
<div class="operatore-row">
|
|
<MudTextField T="string" Value="_operatori[idx]"
|
|
ValueChanged="v => _operatori[idx] = v"
|
|
Placeholder="Nome operatore"
|
|
Variant="Variant.Outlined" Margin="Margin.Dense" />
|
|
@if (_operatori.Count > 1)
|
|
{
|
|
<MudIconButton Icon="@Icons.Material.Filled.Remove"
|
|
Color="Color.Error" Size="Size.Small"
|
|
OnClick="() => _operatori.RemoveAt(idx)" />
|
|
}
|
|
</div>
|
|
}
|
|
<MudButton StartIcon="@Icons.Material.Filled.Add" Variant="Variant.Text"
|
|
Color="Color.Primary" Size="Size.Small"
|
|
OnClick="() => _operatori.Add(string.Empty)">
|
|
Aggiungi operatore
|
|
</MudButton>
|
|
</div>
|
|
</div>
|
|
|
|
<MudTextField T="string" Label="Descrizione intervento"
|
|
@bind-Value="_descrizioneIntervento"
|
|
Lines="3" Placeholder="Descrivi l intervento eseguito..."
|
|
Variant="Variant.Outlined" Margin="Margin.Dense"
|
|
Required="true"
|
|
Error="@(_validato && string.IsNullOrWhiteSpace(_descrizioneIntervento))"
|
|
ErrorText="Campo obbligatorio" />
|
|
|
|
<div class="form-group">
|
|
<MudText Typo="Typo.caption" Class="form-label">
|
|
Firma Capo Negozio <span class="required">*</span>
|
|
</MudText>
|
|
<SignaturePad OnFirmaCambiata="f => _firma = f" />
|
|
@if (_validato && string.IsNullOrWhiteSpace(_firma))
|
|
{
|
|
<MudText Typo="Typo.caption" Color="Color.Error">Firma obbligatoria</MudText>
|
|
}
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<MudText Typo="Typo.caption" Class="form-label">Foto lavoro svolto</MudText>
|
|
<InputFile class="form-input-file" accept="image/*" multiple
|
|
OnChange="OnFotoChiusura" />
|
|
@if (_fotoNomi.Any())
|
|
{
|
|
<div class="foto-preview-list">
|
|
@foreach (var nome in _fotoNomi)
|
|
{
|
|
<MudChip T="string" Icon="@Icons.Material.Outlined.Image"
|
|
Size="Size.Small" Color="Color.Primary">@nome</MudChip>
|
|
}
|
|
</div>
|
|
}
|
|
<MudTextField T="string" Label="Commento foto (opzionale)"
|
|
@bind-Value="_commentoFoto" Lines="2"
|
|
Variant="Variant.Outlined" Margin="Margin.Dense"
|
|
Class="mt-2" />
|
|
</div>
|
|
|
|
<MudButton FullWidth="true" Variant="Variant.Filled" Color="Color.Primary"
|
|
Size="Size.Large" StartIcon="@Icons.Material.Filled.CheckCircleOutline"
|
|
OnClick="ConfermaChiusura">
|
|
Chiudi Attivita
|
|
</MudButton>
|
|
}
|
|
else
|
|
{
|
|
<MudTextField T="string" Label="Motivo del rimando"
|
|
@bind-Value="_motivoRimando" Lines="3"
|
|
Placeholder="Es. Non di competenza ufficio tecnico..."
|
|
Variant="Variant.Outlined" Margin="Margin.Dense"
|
|
Required="true"
|
|
Error="@(_validato && string.IsNullOrWhiteSpace(_motivoRimando))"
|
|
ErrorText="Campo obbligatorio" />
|
|
|
|
<MudSelect T="string" Label="Azienda terza (se di competenza)"
|
|
@bind-Value="_aziendaTerza"
|
|
Variant="Variant.Outlined" Margin="Margin.Dense">
|
|
<MudSelectItem T="string" Value='""'>Nessuna</MudSelectItem>
|
|
@foreach (var az in _aziendeTerme)
|
|
{
|
|
<MudSelectItem T="string" Value="@az">@az</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
|
|
@if (_aziendaTerza == "Altro")
|
|
{
|
|
<MudTextField T="string" Label="Specifica azienda"
|
|
@bind-Value="_aziendaAltra"
|
|
Variant="Variant.Outlined" Margin="Margin.Dense" />
|
|
}
|
|
|
|
<div class="form-group">
|
|
<MudText Typo="Typo.caption" Class="form-label">
|
|
Foto KO <span class="required">*</span>
|
|
</MudText>
|
|
<InputFile class="form-input-file" accept="image/*" multiple
|
|
OnChange="OnFotoRimando" />
|
|
@if (_fotoRimandoNomi.Any())
|
|
{
|
|
<div class="foto-preview-list">
|
|
@foreach (var nome in _fotoRimandoNomi)
|
|
{
|
|
<MudChip T="string" Icon="@Icons.Material.Outlined.Image"
|
|
Size="Size.Small" Color="Color.Warning">@nome</MudChip>
|
|
}
|
|
</div>
|
|
}
|
|
@if (_validato && !_fotoRimandoNomi.Any())
|
|
{
|
|
<MudText Typo="Typo.caption" Color="Color.Error">Almeno una foto e obbligatoria</MudText>
|
|
}
|
|
</div>
|
|
|
|
<MudButton FullWidth="true" Variant="Variant.Filled" Color="Color.Warning"
|
|
Size="Size.Large" StartIcon="@Icons.Material.Filled.ArrowForward"
|
|
OnClick="ConfermaRimando">
|
|
Rimanda Attivita
|
|
</MudButton>
|
|
}
|
|
</div>
|
|
}
|
|
</DialogContent>
|
|
</MudDialog>
|
|
|
|
@code {
|
|
[Parameter] public AttivitaItem? Attivita { get; set; }
|
|
[Parameter] public bool Visible { get; set; }
|
|
[Parameter] public EventCallback OnClosed { get; set; }
|
|
[Parameter] public EventCallback<(AttivitaItem, StatoAttivita)> OnConferma { get; set; }
|
|
|
|
string _tab = "chiudi";
|
|
bool _validato;
|
|
|
|
static readonly DialogOptions BottomSheetOptions = new()
|
|
{
|
|
Position = DialogPosition.BottomCenter,
|
|
FullWidth = true,
|
|
MaxWidth = MaxWidth.Medium,
|
|
CloseButton = false,
|
|
BackdropClick = true,
|
|
CloseOnEscapeKey = true
|
|
};
|
|
|
|
async Task OnVisibleChanged(bool visible)
|
|
{
|
|
if (!visible)
|
|
await Annulla();
|
|
}
|
|
|
|
TimeSpan? _oraIngresso = DateTime.Now.TimeOfDay;
|
|
TimeSpan? _oraFine = DateTime.Now.TimeOfDay;
|
|
|
|
List<string> _operatori = ["Marco Esposito"];
|
|
string _descrizioneIntervento = string.Empty;
|
|
string _firma = string.Empty;
|
|
string _commentoFoto = string.Empty;
|
|
List<string> _fotoNomi = [];
|
|
|
|
string _motivoRimando = string.Empty;
|
|
string _aziendaTerza = string.Empty;
|
|
string _aziendaAltra = string.Empty;
|
|
List<string> _fotoRimandoNomi = [];
|
|
|
|
readonly List<string> _aziendeTerme = ["Arneg", "Desich", "Idracol", "Carrier", "Danfoss", "Alfa Laval", "Altro"];
|
|
|
|
void OnFotoChiusura(InputFileChangeEventArgs e) =>
|
|
_fotoNomi = e.GetMultipleFiles().Select(f => f.Name).ToList();
|
|
|
|
void OnFotoRimando(InputFileChangeEventArgs e) =>
|
|
_fotoRimandoNomi = e.GetMultipleFiles().Select(f => f.Name).ToList();
|
|
|
|
async Task ConfermaChiusura()
|
|
{
|
|
_validato = true;
|
|
if (string.IsNullOrWhiteSpace(_descrizioneIntervento) || string.IsNullOrWhiteSpace(_firma))
|
|
return;
|
|
if (Attivita is not null)
|
|
await OnConferma.InvokeAsync((Attivita, StatoAttivita.Chiusa));
|
|
Reset();
|
|
}
|
|
|
|
async Task ConfermaRimando()
|
|
{
|
|
_validato = true;
|
|
if (string.IsNullOrWhiteSpace(_motivoRimando) || !_fotoRimandoNomi.Any())
|
|
return;
|
|
if (Attivita is not null)
|
|
await OnConferma.InvokeAsync((Attivita, StatoAttivita.Rimandata));
|
|
Reset();
|
|
}
|
|
|
|
Task Annulla()
|
|
{
|
|
Reset();
|
|
return OnClosed.InvokeAsync();
|
|
}
|
|
|
|
void Reset()
|
|
{
|
|
_validato = false;
|
|
_tab = "chiudi";
|
|
_descrizioneIntervento = string.Empty;
|
|
_firma = string.Empty;
|
|
_commentoFoto = string.Empty;
|
|
_fotoNomi = [];
|
|
_motivoRimando = string.Empty;
|
|
_aziendaTerza = string.Empty;
|
|
_aziendaAltra = string.Empty;
|
|
_fotoRimandoNomi = [];
|
|
_operatori = ["Marco Esposito"];
|
|
}
|
|
} |