From b4c15f6f7f5a01908f88960e60598e7f40d67b57 Mon Sep 17 00:00:00 2001 From: Syed Mustafa Ahmed Naqvi Date: Mon, 24 Aug 2026 12:35:29 +0500 Subject: [PATCH] Initial commit --- .gitignore | 19 + HikvisionAttendanceManager.sln | 19 + .../.schema-test/Program.cs | 23 + src/HikvisionAttendanceManager.App/App.xaml | 65 +++ .../App.xaml.cs | 15 + .../AttendanceSyncView.xaml | 44 ++ .../AttendanceSyncView.xaml.cs | 64 +++ .../DbToDeviceView.xaml | 52 ++ .../DbToDeviceView.xaml.cs | 97 ++++ .../DepartmentalUserSyncView.xaml | 90 +++ .../DepartmentalUserSyncView.xaml.cs | 170 ++++++ .../DeviceToDbView.xaml | 24 + .../DeviceToDbView.xaml.cs | 49 ++ .../HikvisionAttendanceManager.App.csproj | 19 + .../MainWindow.xaml | 165 ++++++ .../MainWindow.xaml.cs | 386 +++++++++++++ .../Models/DashboardViewModel.cs | 117 ++++ .../Models/Device.cs | 82 +++ .../Models/HikvisionUser.cs | 3 + .../Models/SyncModels.cs | 133 +++++ .../Models/UserSyncModels.cs | 23 + .../Services/AppLogger.cs | 50 ++ .../Services/AttendanceLogRepository.cs | 44 ++ ...AttendanceMachineFaceTemplateRepository.cs | 87 +++ .../Services/AttendanceMachineRepository.cs | 28 + .../AttendanceMachineUserRepository.cs | 53 ++ .../Services/AttendanceSyncService.cs | 100 ++++ .../Services/DashboardService.cs | 117 ++++ .../Services/DepartmentalUserSyncService.cs | 33 ++ .../Services/DeviceConnectionService.cs | 86 +++ .../Services/DeviceService.cs | 97 ++++ .../Services/DeviceStore.cs | 32 ++ .../Services/EmployeePhotoService.cs | 42 ++ .../Services/HikvisionIsapiClient.cs | 529 ++++++++++++++++++ .../Services/HrmsConnectionFactory.cs | 138 +++++ .../Services/HrmsEmployeeService.cs | 201 +++++++ .../Services/OperationHistoryService.cs | 54 ++ .../Services/PasswordProtector.cs | 14 + .../Services/TemplateSyncService.cs | 156 ++++++ .../Services/UserManagementService.cs | 185 ++++++ .../Services/UserSyncEngine.cs | 59 ++ .../SyncHistoryView.xaml | 33 ++ .../SyncHistoryView.xaml.cs | 27 + .../UserManagementView.xaml | 88 +++ .../UserManagementView.xaml.cs | 213 +++++++ .../appsettings.Development.example.json | 5 + .../appsettings.json | 1 + 47 files changed, 4131 insertions(+) create mode 100644 .gitignore create mode 100644 HikvisionAttendanceManager.sln create mode 100644 src/HikvisionAttendanceManager.App/.schema-test/Program.cs create mode 100644 src/HikvisionAttendanceManager.App/App.xaml create mode 100644 src/HikvisionAttendanceManager.App/App.xaml.cs create mode 100644 src/HikvisionAttendanceManager.App/AttendanceSyncView.xaml create mode 100644 src/HikvisionAttendanceManager.App/AttendanceSyncView.xaml.cs create mode 100644 src/HikvisionAttendanceManager.App/DbToDeviceView.xaml create mode 100644 src/HikvisionAttendanceManager.App/DbToDeviceView.xaml.cs create mode 100644 src/HikvisionAttendanceManager.App/DepartmentalUserSyncView.xaml create mode 100644 src/HikvisionAttendanceManager.App/DepartmentalUserSyncView.xaml.cs create mode 100644 src/HikvisionAttendanceManager.App/DeviceToDbView.xaml create mode 100644 src/HikvisionAttendanceManager.App/DeviceToDbView.xaml.cs create mode 100644 src/HikvisionAttendanceManager.App/HikvisionAttendanceManager.App.csproj create mode 100644 src/HikvisionAttendanceManager.App/MainWindow.xaml create mode 100644 src/HikvisionAttendanceManager.App/MainWindow.xaml.cs create mode 100644 src/HikvisionAttendanceManager.App/Models/DashboardViewModel.cs create mode 100644 src/HikvisionAttendanceManager.App/Models/Device.cs create mode 100644 src/HikvisionAttendanceManager.App/Models/HikvisionUser.cs create mode 100644 src/HikvisionAttendanceManager.App/Models/SyncModels.cs create mode 100644 src/HikvisionAttendanceManager.App/Models/UserSyncModels.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/AppLogger.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/AttendanceLogRepository.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/AttendanceMachineFaceTemplateRepository.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/AttendanceMachineRepository.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/AttendanceMachineUserRepository.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/AttendanceSyncService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/DashboardService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/DepartmentalUserSyncService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/DeviceConnectionService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/DeviceService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/DeviceStore.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/EmployeePhotoService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/HikvisionIsapiClient.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/HrmsConnectionFactory.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/HrmsEmployeeService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/OperationHistoryService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/PasswordProtector.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/TemplateSyncService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/UserManagementService.cs create mode 100644 src/HikvisionAttendanceManager.App/Services/UserSyncEngine.cs create mode 100644 src/HikvisionAttendanceManager.App/SyncHistoryView.xaml create mode 100644 src/HikvisionAttendanceManager.App/SyncHistoryView.xaml.cs create mode 100644 src/HikvisionAttendanceManager.App/UserManagementView.xaml create mode 100644 src/HikvisionAttendanceManager.App/UserManagementView.xaml.cs create mode 100644 src/HikvisionAttendanceManager.App/appsettings.Development.example.json create mode 100644 src/HikvisionAttendanceManager.App/appsettings.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4f0b6d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# Local development secrets +src/HikvisionAttendanceManager.App/appsettings.Development.json + +.vs/ +bin/ +obj/ + +*.user +*.suo +*.userosscache +*.sln.docstates + +Debug/ +Release/ + +*.log + +.env +.env.* \ No newline at end of file diff --git a/HikvisionAttendanceManager.sln b/HikvisionAttendanceManager.sln new file mode 100644 index 0000000..34a38d0 --- /dev/null +++ b/HikvisionAttendanceManager.sln @@ -0,0 +1,19 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HikvisionAttendanceManager.App", "src\HikvisionAttendanceManager.App\HikvisionAttendanceManager.App.csproj", "{7E70BA02-5D8E-4CB1-BB72-5FB4B167D120}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7E70BA02-5D8E-4CB1-BB72-5FB4B167D120}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E70BA02-5D8E-4CB1-BB72-5FB4B167D120}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E70BA02-5D8E-4CB1-BB72-5FB4B167D120}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E70BA02-5D8E-4CB1-BB72-5FB4B167D120}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/src/HikvisionAttendanceManager.App/.schema-test/Program.cs b/src/HikvisionAttendanceManager.App/.schema-test/Program.cs new file mode 100644 index 0000000..b48b37a --- /dev/null +++ b/src/HikvisionAttendanceManager.App/.schema-test/Program.cs @@ -0,0 +1,23 @@ +using HikvisionAttendanceManager.App.Services; + +var hrms = new HrmsEmployeeService(); +try +{ + var sites = await hrms.GetLocationSitesAsync(CancellationToken.None); + Console.WriteLine("Sites: " + sites.Count); + if (sites.Count > 0) + { + var site = sites[0]; + var deps = await hrms.GetActiveDepartmentsBySiteAsync(site.Id, CancellationToken.None); + Console.WriteLine("Departments for site " + site.Id + ": " + deps.Count); + var search = await hrms.SearchEmployeesAsync("1", site.Id, CancellationToken.None); + Console.WriteLine("Search results: " + search.Count); + if (search.Count > 0) + Console.WriteLine("First: " + search[0].SerialNumber + " - " + search[0].Name); + } +} +catch (Exception ex) +{ + Console.WriteLine("FAIL: " + ex.Message); + if (ex.InnerException is not null) Console.WriteLine(ex.InnerException.Message); +} diff --git a/src/HikvisionAttendanceManager.App/App.xaml b/src/HikvisionAttendanceManager.App/App.xaml new file mode 100644 index 0000000..4c1765b --- /dev/null +++ b/src/HikvisionAttendanceManager.App/App.xaml @@ -0,0 +1,65 @@ + + + #2563EB + #1D4ED8 + #F4F7FB + #E6EBF3 + + + + + + + + + + + diff --git a/src/HikvisionAttendanceManager.App/App.xaml.cs b/src/HikvisionAttendanceManager.App/App.xaml.cs new file mode 100644 index 0000000..acf2f4a --- /dev/null +++ b/src/HikvisionAttendanceManager.App/App.xaml.cs @@ -0,0 +1,15 @@ +using System.Windows; +using HikvisionAttendanceManager.App.Services; + +namespace HikvisionAttendanceManager.App; + +public partial class App : Application +{ + public App() + { + AppLogger.Initialize(); + AppLogger.Info("[STARTUP] Application starting"); + AppLogger.Info("[STARTUP] Configuration loaded"); + DispatcherUnhandledException += (_, args) => AppLogger.Error("Unhandled UI exception.", args.Exception); + } +} diff --git a/src/HikvisionAttendanceManager.App/AttendanceSyncView.xaml b/src/HikvisionAttendanceManager.App/AttendanceSyncView.xaml new file mode 100644 index 0000000..155db89 --- /dev/null +++ b/src/HikvisionAttendanceManager.App/AttendanceSyncView.xaml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +