@using System.Globalization @using System.Text.RegularExpressions @using CommunityToolkit.Mvvm.Messaging @using salesbook.Shared.Core.Dto @using salesbook.Shared.Components.Layout @using salesbook.Shared.Core.Entity @using salesbook.Shared.Core.Interface @using salesbook.Shared.Components.Layout.Overlay @using salesbook.Shared.Components.SingleElements.BottomSheet @using salesbook.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 Vuoi creare un promemoria? Crea
@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; } private bool OpenAddMemo { get; set; } //MessageBox private MudMessageBox ConfirmDelete { get; set; } private MudMessageBox ConfirmMemo { get; set; } protected override async Task OnInitializedAsync() { Snackbar.Configuration.PositionClass = Defaults.Classes.Position.TopCenter; _ = LoadData(); LabelSave = IsNew ? "Aggiungi" : null; if (!Id.IsNullOrEmpty()) ActivityModel = (await ManageData.GetActivity(x => x.ActivityId.Equals(Id))).Last(); if (ActivityCopied != null) { ActivityModel = ActivityCopied.Clone(); } await LoadCommesse(); 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(); 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")); } 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() { ActivityModel.CodJcom = null; if (ActivityModel.Cliente.IsNullOrEmpty()) return; var match = Regex.Match(ActivityModel.Cliente!, @"^\s*(\S+)\s*-\s*(.*)$"); if (!match.Success) return; ActivityModel.CodAnag = match.Groups[1].Value; ActivityModel.Cliente = match.Groups[2].Value; 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; } if (ActivityModel.EstimatedEndtime <= ActivityModel.EstimatedTime) { ActivityModel.EstimatedEndtime = ActivityModel.EstimatedTime.Value.AddHours(1); } } private async Task OnAfterChangeEsito() { OnAfterChangeValue(); // var result = await ConfirmMemo.ShowAsync(); // if (result is true) // OpenAddMemo = !OpenAddMemo; } private void OpenSelectEsito() { if (!IsNew && (ActivityModel.UserName is null || !ActivityModel.UserName.Equals(UserSession.User.Username))) { Snackbar.Add("Non puoi inserire un esito per un'attività che non ti è stata assegnata.", Severity.Info); 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)); } }