154 lines
6.0 KiB
Markdown
154 lines
6.0 KiB
Markdown
# Frymaster Badge App
|
|
|
|
A cross-platform **.NET MAUI** application for managing employee records, generating customizable ID badges, handling company profiles, and printing via local desktop printers. Features dynamic tab navigation, photo capture/cropping, barcode generation, and robust file-based logging.
|
|
|
|
---
|
|
|
|
## 📋 Prerequisites
|
|
|
|
| Requirement | Details |
|
|
|-------------|---------|
|
|
| **SDK** | `.NET 8.0` or later |
|
|
| **Workload** | `maui` workload installed (`dotnet workload install maui`) |
|
|
| **IDE** | Visual Studio 2022 (v17.8+) with MAUI, or VS Code + C# Dev Kit |
|
|
| **Database** | SQL Server (2019/2022/Express/Azure SQL) |
|
|
| **Platform** | Windows 10/11 (recommended for printing & file pickers) |
|
|
|
|
> ⚠️ **Note:** Printer APIs (`System.Drawing.Printing`) and folder/file pickers used in this app are desktop-optimized. Mobile targets may require platform-specific fallbacks.
|
|
|
|
---
|
|
|
|
## 🗄️ Database Setup
|
|
|
|
1. Create a database named `Frymaster` in your SQL Server instance.
|
|
2. Run the following schema to create the required tables (matches application queries):
|
|
|
|
```sql
|
|
CREATE TABLE dbo.Companies (
|
|
ID INT IDENTITY(1,1) PRIMARY KEY,
|
|
Name NVARCHAR(100) NOT NULL,
|
|
Address NVARCHAR(200),
|
|
City NVARCHAR(100),
|
|
State NVARCHAR(50),
|
|
Zip NVARCHAR(20),
|
|
Logo NVARCHAR(255)
|
|
);
|
|
|
|
CREATE TABLE dbo.tblData (
|
|
Data1 NVARCHAR(50) PRIMARY KEY, -- Employee Record Number
|
|
Data2 NVARCHAR(100), -- First Name
|
|
LastName NVARCHAR(100),
|
|
Data3 NVARCHAR(100), -- Display Name
|
|
Data4 NVARCHAR(100), -- Additional Info
|
|
Data5 DATETIME, -- Issue/Start Date
|
|
Data7 NVARCHAR(10), -- Medical Indicator 1 (True/False)
|
|
Data8 NVARCHAR(10), -- Medical Indicator 2 (1/0 or True/False)
|
|
Active NVARCHAR(10), -- YES/NO
|
|
Data9 NVARCHAR(50), -- Badge Number
|
|
picCode NVARCHAR(255), -- Photo filename reference
|
|
cropX FLOAT DEFAULT 0,
|
|
cropY FLOAT DEFAULT 0,
|
|
cropScale FLOAT DEFAULT 1.0,
|
|
BadgeType NVARCHAR(50) DEFAULT 'OFFICE', -- OFFICE, GUEST, PLANT, MAINTENANCE, VENDOR
|
|
ToPrint BIT DEFAULT 0,
|
|
CdsPrinted BIT DEFAULT 0
|
|
);
|
|
```
|
|
|
|
---
|
|
|
|
## ⚙️ Configuration
|
|
|
|
1. Create `appsettings.json` inside `Resources/Raw/`
|
|
2. Set its **Build Action** to `MauiAsset`
|
|
3. Add your connection string:
|
|
|
|
```json
|
|
{
|
|
"ConnectionStrings": {
|
|
"DefaultConnection": "Server=127.0.0.1;Database=Frymaster;User Id=sa;Password=YourSecurePassword;TrustServerCertificate=True;"
|
|
}
|
|
}
|
|
```
|
|
|
|
> 🔒 **Security Note:** The app contains a hardcoded fallback connection string in `MauiProgram.cs`. **Never deploy to production without providing `appsettings.json`**, as the fallback uses plain-text credentials and will log a warning.
|
|
|
|
---
|
|
|
|
## 🛠️ Building & Running
|
|
|
|
### ✅ Using CLI
|
|
```bash
|
|
# Restore dependencies
|
|
dotnet restore
|
|
|
|
# Build
|
|
dotnet build -c Release
|
|
|
|
# Run (Windows Desktop default)
|
|
dotnet run -f net8.0-windows10.0.19041.0
|
|
```
|
|
|
|
### ✅ Using Visual Studio
|
|
1. Open `FrymasterBadgeApp.csproj` or `.sln`
|
|
2. Select your target framework in the toolbar (e.g., `net8.0-windows10.0.19041.0`)
|
|
3. Press `F5` or click ▶ Run
|
|
4. The app will automatically restore NuGet packages and launch.
|
|
|
|
---
|
|
|
|
## 🚀 First Run & Navigation Flow
|
|
|
|
1. **Initial Setup Tab**: If no companies exist in the database, the app shows a `Setup` tab. Click it to add your first company via `CompanyPage`.
|
|
2. **Dynamic Tabs**: Once companies are added, each gets its own tab in the bottom `TabBar`. Tabs are generated dynamically at runtime.
|
|
3. **Employee Management**: Click a company tab → select/search employees → view/edit badge preview → capture/update photos → print.
|
|
4. **Settings**: Use the top-right `⚙️` icon to configure storage paths (`C:\FrymasterData\...` defaults) and UI theme (`System`/`Light`/`Dark`).
|
|
5. **Company Management**: Use the `🏢` icon in `AppShell` to manage company records and upload logos.
|
|
|
|
---
|
|
|
|
## 📂 Storage & Paths
|
|
|
|
| Setting | Default | Notes |
|
|
|---------|---------|-------|
|
|
| Photos | `C:\FrymasterData\photos` | Stores employee JPGs (`{recordNum}_{ticks}.jpg`) |
|
|
| Logos | `C:\FrymasterData\logos` | Stores company logo images |
|
|
| Images | `C:\FrymasterData\images` | Stores guest/default badge assets |
|
|
| Logs | `%LOCALAPPDATA%` | Rotates daily, max 5MB/file, 30-day auto-cleanup |
|
|
|
|
> 🌍 **Cross-Platform Note:** The `C:\...` defaults are Windows-specific. On macOS/Linux, change paths immediately via the **Settings Page** to avoid `UnauthorizedAccessException` or missing directory errors.
|
|
|
|
---
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
| Issue | Solution |
|
|
|-------|----------|
|
|
| `SqlService` connection fails | Verify SQL Server is running, check `appsettings.json`, ensure `TrustServerCertificate=True` |
|
|
| App crashes on startup | Check `FrymasterBadgeApp_*.log` in `%LOCALAPPDATA%` for DI or XAML errors |
|
|
| Missing tabs / "Loading..." stuck | Ensure at least one company exists in `dbo.Companies` |
|
|
| Print fails / `PrinterSettings` empty | Ensure desktop target is selected. Mobile platforms don't expose `InstalledPrinters` |
|
|
| `FolderPicker` or `Toast` crashes | Wrapped in try/catch. Intentionally disables auto-navigation after save to prevent Shell crashes |
|
|
| Missing barcode font | Ensure `LibreBarcode39-Regular.ttf` is in `Resources/Fonts` with `Build Action: MauiFont` |
|
|
|
|
---
|
|
|
|
## 📜 Logging & Diagnostics
|
|
|
|
- **Location:** `%LOCALAPPDATA%\FrymasterBadgeApp_YYYY-MM-DD.log`
|
|
- **Rotation:** Files >5MB are renamed to `.old` (previous `.old` is deleted)
|
|
- **Cleanup:** `AppLogger.CleanupOldLogs()` deletes logs older than 30 days
|
|
- **Viewing:** Open with any text editor or run:
|
|
```powershell
|
|
Get-ChildItem $env:LOCALAPPDATA\FrymasterBadgeApp_*.log | Sort-Object LastWriteTime -Descending | Select-Object -First 1 | Invoke-Item
|
|
```
|
|
|
|
---
|
|
|
|
## 📄 License
|
|
|
|
Property of Frymaster
|
|
|
|
---
|
|
|
|
> 💡 **Tip:** Run `dotnet workload restore` before first build if you encounter missing MAUI SDK errors. Ensure your `.csproj` targets a supported Windows SDK version (`net8.0-windows10.0.19041.0` or higher). |