From 62419a2c2858f23a39a5cfa8f1400d3b8a64041d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Szab=C3=B3?= Date: Fri, 25 Apr 2025 10:29:14 +0200 Subject: [PATCH] MOBILE BUGFIX-ek --- src/WorkFlowCheck.MAUI/Helper/SystemHelper.cs | 23 ++- .../Pages/CheckList/CheckListPage.xaml | 107 +++++++++----- .../Pages/CheckList/CheckListPage.xaml.cs | 132 +++++++++++++++++- .../Pages/CheckList/CheckListWorkPage.xaml.cs | 11 +- .../Pages/Security/LoginPage.xaml | 2 +- .../Pages/Security/LoginPage.xaml.cs | 27 +++- .../Resources/Images/cloud_download.svg | 4 + .../Services/CheckListService.cs | 4 +- .../Services/SyncService.cs | 21 ++- .../WorkFlowCheck.MAUI.csproj | 2 + 10 files changed, 266 insertions(+), 67 deletions(-) create mode 100644 src/WorkFlowCheck.MAUI/Resources/Images/cloud_download.svg diff --git a/src/WorkFlowCheck.MAUI/Helper/SystemHelper.cs b/src/WorkFlowCheck.MAUI/Helper/SystemHelper.cs index 3be4d6a..6eb3b6d 100644 --- a/src/WorkFlowCheck.MAUI/Helper/SystemHelper.cs +++ b/src/WorkFlowCheck.MAUI/Helper/SystemHelper.cs @@ -1,6 +1,7 @@ using Android.Util; using CommunityToolkit.Maui.Alerts; using CommunityToolkit.Maui.Core; +using DevExpress.Maui.Core.Internal; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; @@ -18,7 +19,7 @@ namespace WorkFlowCheck.MAUI.Helper public static string DatabaseName = ""; public static bool Syncronised = false; public static UserDTO SystemUserDTO; - public static string ProgramVersion = "v1.1.018"; + public static string ProgramVersion = "v1.1.020"; #if DEBUG public static string ApiBaseUrl = $"https://dev.wfcapi.nuvolar.hu/"; @@ -57,20 +58,20 @@ namespace WorkFlowCheck.MAUI.Helper } } public async static Task ShowSnackBar(string message, - string actionButtonTextColor = "#FF0000", - string backgroundColor = "#FF0000", - string textColor = "#FF0000", + string actionButtonTextColor = "#FFFFFF00", + string backgroundColor = "#FFFF0000", + string textColor = "##FFFFFF00", int duration = 10, string actionButtonText = "Ok", Func action = null) { var visualOptions = new SnackbarOptions { - ActionButtonTextColor = Colors.Yellow, + ActionButtonTextColor = Color.FromArgb(actionButtonTextColor), CornerRadius = new CornerRadius(10), Font = Microsoft.Maui.Font.SystemFontOfSize(16), - BackgroundColor = Colors.Red, - TextColor = Colors.Yellow + BackgroundColor = Color.FromArgb(backgroundColor), + TextColor = Color.FromArgb(textColor) }; var snackbar = Snackbar.Make( @@ -86,5 +87,13 @@ namespace WorkFlowCheck.MAUI.Helper ); await snackbar.Show(); } + public static string ColorToHex(Color color) + { + // ARGB értékek lekérése + uint colorInt = (uint)color.ToArgb(); + + // Hexadecimális stringgé alakítás, és a '#'-t is hozzáadjuk + return $"#{colorInt:X8}"; + } } } diff --git a/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListPage.xaml b/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListPage.xaml index 76e417e..e7b1d06 100644 --- a/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListPage.xaml +++ b/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListPage.xaml @@ -38,32 +38,61 @@ - - + + - - - - - - + + + + + + + + + + - _isRefreshing; + set + { + if (_isRefreshing != value) + { + _isRefreshing = value; + OnPropertyChanged(nameof(IsRefreshing)); + } + } + } + public CheckListPage() { InitializeComponent(); @@ -58,8 +73,55 @@ public partial class CheckListPage : ContentPage UnblockCommand = new Command(OnUnblockItem); BlockCommand = new Command(OnBlockItem); AcceptCommand = new Command(OnAcceptItem); + RefreshCommand = new Command(async () => await OnRefresh()); + } + private async void OnSyncClicked(object sender, EventArgs e) + { + SyncBtn.IsEnabled = false; + LoadingIndicator.IsRunning = true; + LoadingIndicator.IsVisible = true; + progressLabel.Text = "Szinkronizálás indítása..."; + progressBar.Progress = 0; + try + { + await Task.Run(async () => + { + await _syncService.SyncCheckListHeader_Down((percentage, infostring) => + { + // Direkt UI frissítés + MainThread.BeginInvokeOnMainThread(() => + { + progressBar.Progress = percentage / 100; + progressLabel.Text = $"{infostring}: {percentage:0.00}%"; + }); + }); + }); + SystemHelper.Syncronised = true; + progressLabel.Text = "Szinkronizálás befejezve!"; + + } + catch (Exception ex) + { + progressLabel.Text = $"Hiba történt: {ex.Message}"; + } + finally + { + SyncBtn.IsEnabled = true; + LoadingIndicator.IsVisible = false; + LoadingIndicator.IsRunning = false; + } + } + private async Task OnRefresh() + { + IsRefreshing = true; + + //await _syncService.SyncCheckListHeader_Down((d, s) => { }); + + await LoadCheckList(); + + IsRefreshing = false; } private void SetInfo() { @@ -170,18 +232,55 @@ public partial class CheckListPage : ContentPage bool answer = await DisplayAlert("Megerõsítés", "Biztosan feloldod a blokkolást?", "Igen", "Mégsem"); if (answer) { - await _checkListService.UnBlockCheckListHeader(checkListHeaderDTO); - await LoadCheckList(); + var success = await _checkListService.UnBlockCheckListHeader(checkListHeaderDTO); + if (success) + { + IsRefreshing = true; + await LoadCheckList(); + IsRefreshing = false; + await SystemHelper.ShowSnackBar("Blokkolás feloldás sikeres!", + SystemHelper.ColorToHex(Colors.Green), + SystemHelper.ColorToHex(Colors.Green), + SystemHelper.ColorToHex(Colors.White), + 5); + } + else + { + + await SystemHelper.ShowSnackBar("Blokkolás feloldás SIKERTELEN!", + SystemHelper.ColorToHex(Colors.Red), + SystemHelper.ColorToHex(Colors.Red), + SystemHelper.ColorToHex(Colors.Yellow), + 15); + } } - } private async void OnBlockItem(CheckListHeaderDTO checkListHeaderDTO) { bool answer = await DisplayAlert("Megerõsítés", "Biztosan blokkolod a folyamatot?", "Igen", "Mégsem"); if (answer) { - await _checkListService.BlockCheckListHeader(checkListHeaderDTO); - await LoadCheckList(); + var success = await _checkListService.BlockCheckListHeader(checkListHeaderDTO); + if (success) + { + IsRefreshing = true; + await LoadCheckList(); + IsRefreshing = false; + await SystemHelper.ShowSnackBar("Blokkolás sikeres!", + SystemHelper.ColorToHex(Colors.Green), + SystemHelper.ColorToHex(Colors.Green), + SystemHelper.ColorToHex(Colors.White), + 5); + } + else + { + + await SystemHelper.ShowSnackBar("Blokkolás SIKERTELEN!", + SystemHelper.ColorToHex(Colors.Red), + SystemHelper.ColorToHex(Colors.Red), + SystemHelper.ColorToHex(Colors.Yellow), + 15); + } } } private async void OnAcceptItem(CheckListHeaderDTO checkListHeaderDTO) @@ -189,8 +288,27 @@ public partial class CheckListPage : ContentPage bool answer = await DisplayAlert("Megerõsítés", "Biztosan jóváhagyod a folyamatot?", "Igen", "Mégsem"); if (answer) { - await _checkListService.AcceptCheckListHeader(checkListHeaderDTO); - await LoadCheckList(); + var success = await _checkListService.AcceptCheckListHeader(checkListHeaderDTO); + if (success) + { + IsRefreshing = true; + await LoadCheckList(); + IsRefreshing = false; + await SystemHelper.ShowSnackBar("Jóváhagyás sikeres!", + SystemHelper.ColorToHex(Colors.Green), + SystemHelper.ColorToHex(Colors.Green), + SystemHelper.ColorToHex(Colors.White), + 5); + } + else + { + + await SystemHelper.ShowSnackBar("Jóváhagyás SIKERTELEN!", + SystemHelper.ColorToHex(Colors.Red), + SystemHelper.ColorToHex(Colors.Red), + SystemHelper.ColorToHex(Colors.Yellow), + 15); + } } } private async Task LoadCheckListTemplate() diff --git a/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListWorkPage.xaml.cs b/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListWorkPage.xaml.cs index 2e21ae6..39b5465 100644 --- a/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListWorkPage.xaml.cs +++ b/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListWorkPage.xaml.cs @@ -43,8 +43,8 @@ public partial class CheckListWorkPage : ContentPage _syncService = MauiProgram.ServiceProvider.GetRequiredService(); _userService = MauiProgram.ServiceProvider.GetRequiredService(); - SaveCommand = new Command(OnSave); - SendCommand = new Command(OnSend); + SaveCommand = new Command(async () => await OnSave()); + SendCommand = new Command(async () => await OnSend()); } private async Task SetInfo() { @@ -60,14 +60,14 @@ public partial class CheckListWorkPage : ContentPage } } - private async void OnSend() + private async Task OnSend() { IsLoading = true; sendButton.IsEnabled = false; saveButton.IsEnabled = false; try { - OnSave(); + await OnSave(); await Task.Run(async () => { @@ -109,7 +109,7 @@ public partial class CheckListWorkPage : ContentPage } } - private async void OnSave() + private async Task OnSave() { IsLoading = true; try @@ -156,6 +156,7 @@ public partial class CheckListWorkPage : ContentPage { if (MediaPicker.IsCaptureSupported) { + await OnSave(); var photo = await MediaPicker.CapturePhotoAsync(); if (photo != null) { diff --git a/src/WorkFlowCheck.MAUI/Pages/Security/LoginPage.xaml b/src/WorkFlowCheck.MAUI/Pages/Security/LoginPage.xaml index d05061f..c15104d 100644 --- a/src/WorkFlowCheck.MAUI/Pages/Security/LoginPage.xaml +++ b/src/WorkFlowCheck.MAUI/Pages/Security/LoginPage.xaml @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="WorkFlowCheck.MAUI.Pages.Security.LoginPage" xmlns:local="clr-namespace:WorkFlowCheck.MAUI.Pages" - Title="Workflow Check Application (v1.1.018)" + Title="" BackgroundColor="#f0f0f0"> diff --git a/src/WorkFlowCheck.MAUI/Pages/Security/LoginPage.xaml.cs b/src/WorkFlowCheck.MAUI/Pages/Security/LoginPage.xaml.cs index 66c4d07..ad62fba 100644 --- a/src/WorkFlowCheck.MAUI/Pages/Security/LoginPage.xaml.cs +++ b/src/WorkFlowCheck.MAUI/Pages/Security/LoginPage.xaml.cs @@ -33,10 +33,9 @@ public partial class LoginPage : BasePage if (response != null && response.IsSuccess) { _userService.SetCurrentUser(response.Data); - SystemHelper.SystemUserDTO = response.Data; - //await _syncService.SyncDatas(); + var wFCUser = Newtonsoft.Json.JsonConvert.SerializeObject(response.Data); await SecureStorage.Default.SetAsync("WFCUser", "wFCUser"); @@ -67,10 +66,27 @@ public partial class LoginPage : BasePage await snackbar.Show(); } } - catch (Exception) + catch (Exception ex) { + var visualOptions = new SnackbarOptions + { + ActionButtonTextColor = Colors.Yellow, + CornerRadius = new CornerRadius(10), + Font = Microsoft.Maui.Font.SystemFontOfSize(16), + BackgroundColor = Microsoft.Maui.Graphics.Color.Parse("Red"), + TextColor = Colors.Yellow + + }; + var snackbar = Snackbar.Make( + "Invalid login credentials.", + duration: TimeSpan.FromSeconds(10), + action: () => Console.WriteLine("Snackbar dismissed"), + actionButtonText: "OK", + visualOptions: visualOptions + ); + + await snackbar.Show(); - throw; } finally { @@ -101,8 +117,7 @@ public partial class LoginPage : BasePage if (response != null && response.IsSuccess) { _userService.SetCurrentUser(response.Data); - - //await _syncService.SyncDatas(); + SystemHelper.SystemUserDTO = response.Data; var wFCUser = Newtonsoft.Json.JsonConvert.SerializeObject(response.Data); await SecureStorage.Default.SetAsync("WFCUser", "wFCUser"); diff --git a/src/WorkFlowCheck.MAUI/Resources/Images/cloud_download.svg b/src/WorkFlowCheck.MAUI/Resources/Images/cloud_download.svg new file mode 100644 index 0000000..8c05a35 --- /dev/null +++ b/src/WorkFlowCheck.MAUI/Resources/Images/cloud_download.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/WorkFlowCheck.MAUI/Services/CheckListService.cs b/src/WorkFlowCheck.MAUI/Services/CheckListService.cs index fd33a3d..14b109b 100644 --- a/src/WorkFlowCheck.MAUI/Services/CheckListService.cs +++ b/src/WorkFlowCheck.MAUI/Services/CheckListService.cs @@ -188,7 +188,7 @@ namespace WorkFlowCheck.MAUI.Services if (checkListHeader != null) { var userDTO = _userService.GetCurrentUser(); - var endpoint = $"{_httpClient.BaseAddress}api/CheckList/BlockCheckListHeader/{checkListHeaderDTO.Id}/{userDTO.Id}"; + var endpoint = $"{_httpClient.BaseAddress}api/CheckList/UnBlockCheckListHeader/{checkListHeaderDTO.Id}/{userDTO.Id}"; var response = await _httpClient.GetFromJsonAsync>(endpoint); if (response != null) { @@ -219,7 +219,7 @@ namespace WorkFlowCheck.MAUI.Services if (checkListHeader != null) { var userDTO = _userService.GetCurrentUser(); - var endpoint = $"{_httpClient.BaseAddress}api/CheckList/UnBlockCheckListHeader/{checkListHeaderDTO.Id}/{userDTO.Id}"; + var endpoint = $"{_httpClient.BaseAddress}api/CheckList/BlockCheckListHeader/{checkListHeaderDTO.Id}/{userDTO.Id}"; var response = await _httpClient.GetFromJsonAsync>(endpoint); if (response != null) { diff --git a/src/WorkFlowCheck.MAUI/Services/SyncService.cs b/src/WorkFlowCheck.MAUI/Services/SyncService.cs index 4469f2f..4f417d0 100644 --- a/src/WorkFlowCheck.MAUI/Services/SyncService.cs +++ b/src/WorkFlowCheck.MAUI/Services/SyncService.cs @@ -34,7 +34,7 @@ namespace WorkFlowCheck.MAUI.Services await SyncEquipments_Down(reportProgress); await SyncCheckListTemplates_Down(reportProgress); await SyncCheckListHeader_Down(reportProgress); - await SyncUsers_Down(reportProgress); + await SyncUsers_Down(reportProgress); } public async Task DownloadAPK(Action reportProgress) { @@ -290,6 +290,25 @@ namespace WorkFlowCheck.MAUI.Services reportProgress(itemPercentage, "Adatbázis szinkronizáció..."); // Közvetlen progress jelentés i++; } + + foreach (var checkListHeaderDTO in responseList.Data) + { + var checkListHeader = await _dbContext.CheckListHeaders.Where(w => w.Id == checkListHeaderDTO.Id).FirstOrDefaultAsync(); + if (checkListHeader != null) + { + checkListHeader.CheckStatus = checkListHeaderDTO.CheckStatus; + await _dbContext.SaveChangesAsync(); + + //foreach (var checkListRow in checkListHeader.CheckListRows) + //{ + // var checkListRowDTO = checkListHeaderDTO.CheckListRowDTO.Where(w => w.GuidNumber == checkListRow.GuidNumber).FirstOrDefault(); + + // if (checklistrow{ + + // } + //} + } + } } } catch (Exception ex) diff --git a/src/WorkFlowCheck.MAUI/WorkFlowCheck.MAUI.csproj b/src/WorkFlowCheck.MAUI/WorkFlowCheck.MAUI.csproj index 36976c0..12d028a 100644 --- a/src/WorkFlowCheck.MAUI/WorkFlowCheck.MAUI.csproj +++ b/src/WorkFlowCheck.MAUI/WorkFlowCheck.MAUI.csproj @@ -83,6 +83,8 @@ + +