@using System.Globalization @using CommunityToolkit.Mvvm.Messaging @using Template.Shared.Core.Dto @using Template.Shared.Components.Layout @using Template.Shared.Core.Entity @using Template.Shared.Core.Interface @using Template.Shared.Components.Layout.Overlay @using Template.Shared.Components.SingleElements.BottomSheet @using Template.Shared.Core.Messages.Activity.Copy @inject IManageDataService ManageData @inject INetworkService NetworkService @inject IIntegryApiService IntegryApiService @inject IMessenger Messenger Commessa @if (Commesse.IsNullOrEmpty()) { Nessuna commessa presente } else { @foreach (var com in Commesse) { @($"{com.CodJcom} - {com.Descrizione}") } } Inizio Fine Avviso Assegnata a @foreach (var user in Users) { @user.FullName } Tipo @foreach (var type in ActivityType) { @type.ActivityTypeId } Esito @foreach (var result in ActivityResult) { @result.ActivityResultId } @if (!IsNew) { Duplica Elimina } Confermi la cancellazione dell'attività corrente? Cancella @code { [CascadingParameter] private IMudDialogInstance MudDialog { get; set; } [Parameter] public string? Id { get; set; } [Parameter] public ActivityDTO? ActivityCopied { get; set; } private ActivityDTO OriginalModel { get; set; } = new(); private ActivityDTO ActivityModel { get; set; } = new(); private List ActivityResult { get; set; } = []; private List ActivityType { get; set; } = []; private List Users { get; set; } = []; private List Commesse { get; set; } = []; private List Clienti { get; set; } = []; private List Pros { get; set; } = []; private bool IsNew => Id.IsNullOrEmpty(); private bool IsView => !NetworkService.IsNetworkAvailable(); private string? LabelSave { get; set; } //Overlay for save private bool VisibleOverlay { get; set; } private bool SuccessAnimation { get; set; } private bool OpenEsito { get; set; } = false; private MudMessageBox ConfirmDelete { get; set; } protected override async Task OnInitializedAsync() { _ = LoadData(); LabelSave = IsNew ? "Aggiungi" : null; if (!Id.IsNullOrEmpty()) ActivityModel = (await ManageData.GetActivity(x => x.ActivityId.Equals(Id))).Last(); if (ActivityCopied != null) { ActivityModel = ActivityCopied.Clone(); } if (IsNew) { ActivityModel.EstimatedTime = DateTime.Today.Add(TimeSpan.FromHours(DateTime.Now.Hour)); ActivityModel.EstimatedEndtime = DateTime.Today.Add(TimeSpan.FromHours(DateTime.Now.Hour) + TimeSpan.FromHours(1)); ActivityModel.UserName = UserSession.User.Username; } OriginalModel = ActivityModel.Clone(); } private async Task Save() { if (!CheckPreSave()) return; VisibleOverlay = true; StateHasChanged(); var response = await IntegryApiService.SaveActivity(ActivityModel); if (response == null) return; var newActivity = response.Last(); await ManageData.InsertOrUpdate(newActivity); SuccessAnimation = true; StateHasChanged(); await Task.Delay(1250); MudDialog.Close(newActivity); } private bool CheckPreSave() { Snackbar.Clear(); Snackbar.Configuration.PositionClass = Defaults.Classes.Position.TopCenter; if (!ActivityModel.ActivityTypeId.IsNullOrEmpty()) return true; Snackbar.Add("Tipo attività obbligatorio!", Severity.Error); return false; } private async Task LoadData() { Users = await ManageData.GetTable(); ActivityResult = await ManageData.GetTable(); Clienti = await ManageData.GetTable(x => x.FlagStato.Equals("A")); Pros = await ManageData.GetTable(); ActivityType = await ManageData.GetTable(x => x.FlagTipologia.Equals("A")); await LoadCommesse(); } private async Task LoadCommesse() => Commesse = await ManageData.GetTable(x => x.CodAnag != null && x.CodAnag.Equals(ActivityModel.CodAnag)); private async Task?> SearchCliente(string value, CancellationToken token) { if (string.IsNullOrEmpty(value)) return null; var listToReturn = new List(); listToReturn.AddRange( Clienti.Where(x => x.RagSoc.Contains(value, StringComparison.OrdinalIgnoreCase)).Select(x => $"{x.CodAnag} - {x.RagSoc}") ); listToReturn.AddRange( Pros.Where(x => x.RagSoc.Contains(value, StringComparison.OrdinalIgnoreCase)).Select(x => $"{x.CodPpro} - {x.RagSoc}") ); return listToReturn; } private async Task OnClienteChanged() { string? codAnag = null; ActivityModel.CodJcom = null; var cliente = Clienti.LastOrDefault(x => ActivityModel.Cliente != null && x.RagSoc.Contains(ActivityModel.Cliente, StringComparison.OrdinalIgnoreCase)); if (cliente is null) { var pros = Pros.LastOrDefault(x => ActivityModel.Cliente != null && x.RagSoc.Contains(ActivityModel.Cliente, StringComparison.OrdinalIgnoreCase)); if (pros is not null) { codAnag = pros.CodAnag; } } else { codAnag = cliente.CodAnag; } if (codAnag is not null) { ActivityModel.CodAnag = codAnag; await LoadCommesse(); OnAfterChangeValue(); } } private async Task OnCommessaChanged() { ActivityModel.Commessa = (await ManageData.GetTable(x => x.CodJcom.Equals(ActivityModel.CodJcom))).Last().Descrizione; OnAfterChangeValue(); } private void OnAfterChangeValue() { if (!IsNew) { LabelSave = !OriginalModel.Equals(ActivityModel) ? "Aggiorna" : null; } } private void OpenSelectEsito() { if (!IsNew && (ActivityModel.UserName is null || !ActivityModel.UserName.Equals(UserSession.User.Username))) return; OpenEsito = !OpenEsito; StateHasChanged(); } private async Task DeleteActivity() { var result = await ConfirmDelete.ShowAsync(); if (result is true) { VisibleOverlay = true; StateHasChanged(); try { await IntegryApiService.DeleteActivity(ActivityModel.ActivityId); ActivityModel.Deleted = true; SuccessAnimation = true; StateHasChanged(); await Task.Delay(1250); MudDialog.Close(ActivityModel); } catch (Exception e) { VisibleOverlay = false; StateHasChanged(); Snackbar.Add("Impossibile cancellare l'attività", Severity.Error); } } } private void Duplica() { var activityCopy = ActivityModel.Clone(); MudDialog.Cancel(); Messenger.Send(new CopyActivityMessage(activityCopy)); } }