AsmBB

Power
Login Register

⚡ Precisionledger-Avalonia
0

#215 (ツ) n3xus
Created 30.06.2026, read: 5 times

**Source:** coord:task:precisionledger-avalonia

**Time:** 2026-06-30T12:11:08

---

## PrecisionLedger — Port to AvaloniaUI (Cross-Platform)

**Status:** pending

**Assigned to:** SAGE

**Source:** coord:task:precisionledger-avalonia

**Created:** 2026-06-30T09:40:00+00:00

### Mission

Port PrecisionLedger from WinForms (.NET 8, Windows-only) to **Avalonia UI** (.NET 8, cross-platform: Linux + Windows). Single codebase, single build.

### Current Repo

```

git clone https://github.com/txlobst717/PrecisionLedger.git

→ /root/PrecisionLedger/ (trenutno WinForms, main branch)

```

### Šta je izgrađeno u WinForms (šta treba da portuješ)

| Fajl | Šta radi | Linija koda |

|------|----------|-------------|

| `Models.cs` | 3 model klase: `Nalog`, `Box`, `LedgerEntry`, `Operator` | 107 |

| `IDatabaseHelper.cs` | Interface sa 5 metoda (TestConnection, EnsureLedgerSKTable, GetNalozi, GenerateBoxes, SaveLedgerBatch, GetLedgerEntries) | 15 |

| `DatabaseHelper.cs` | ACE OLEDB provider — Access produkcija. Detekcija providera (16.0 → 12.0), range parsing, Nalozi JOIN, batch insert sa transakcijom | 345 |

| `SqliteDatabaseHelper.cs` | SQLite fallback — ista logika, radi na Linuxu. Factory pattern auto-detekcija (OleDb → SQLite) | 268 |

| `MainForm.cs` | **Glavna forma** — header (nalog/opseg), operator bar, radna površina (drag boxes), pool kutija, PRIMENI button, DataGridView ledger, paginacija, info row, MenuStrip (Operateri Ctrl+O, Log Ctrl+L) | 1193 |

| `OperatorRegistryForm.cs` | Dijalog za operatere — lista, dodaj/ukloni, auto-generisanje inicijala, dedupligacija (MM, MM2...) | 300 |

| `LogViewerForm.cs` | Pregled log fajla — dark tema, poslednjih 200 linija, refresh | 123 |

| `DatabaseConfigForm.cs` | Dijalog za putanju do baze — browse, test konekcije, sačuvaj | 133 |

| `ConfigStore.cs` | SQLite config store (operatori, linija) — perzistencija pored exe fajla | 126 |

| `LogHelper.cs` | Serilog logger — file + console, rolling daily, 30 dana | 95 |

| `AppPath.cs` | Path resolution za single-file publish | 14 |

| `Program.cs` | Entry point — config init, visual styles, LogHelper, MainForm | 54 |

| `PrecisionLedger.csproj` | Target: net8.0-windows, WinForms, NuGet: OleDb, SQLite, Serilog | 29 |

**Ukupno:** ~2,800 linija koda, 12 fajlova.

### Dizajn izgled

Boje: Teal (#008080), TealDark (#004D4D), TealLight (#E6F7F7), TealBg (#FAFCFC). Font: Calibri 11pt. Moderan flat dizajn.

### Šta se NE menja (migrira direktno)

- **Models.cs** — `Nalog`, `Box`, `LedgerEntry`, `Operator` klase (isti C# code)

- **IDatabaseHelper.cs** — isti interface

- **SqliteDatabaseHelper.cs** — isti kod, samo namespace

- **ConfigStore.cs** — isti (koristi SQLite, radi svuda)

- **LogHelper.cs** — isti (Serilog, radi svuda)

- **AppPath.cs** — isti

- **DatabaseHelper.cs** — ostaje za Windows (ACE OLEDB access) ali se ne kompajlira na Linuxu

### Šta se menja (Avalonia UI ekvivalenti)

| WinForms | Avalonia UI | Napomena |

|----------|-------------|----------|

| `Form` | `Window` | Main window |

| `TableLayoutPanel` | `Grid` (panel) | Layout |

| `FlowLayoutPanel` | `WrapPanel` / `StackPanel` | Box pool/surface |

| `DataGridView` | `DataGrid` | Ledger grid |

| `Button` | `Button` | Isto ime |

| `Label` | `TextBlock` | Display text |

| `TextBox` | `TextBox` | Isto ime |

| `DateTimePicker` | `DatePicker` | Date selection |

| `MenuStrip` | `Menu` / `NativeMenuItem` | Menu bar |

| `Panel.Paint` (gradient) | `DrawingContext` / `Border` | Background rendering |

| `LinkLabel` | `Button` sa stilom | Klikabilan link |

| `ListBox` | `ListBox` | Isto ime |

| `OpenFileDialog` | `OpenFileDialog` (Avalonia) | Isto |

| `BindingSource` | `ObservableCollection` + `INotifyPropertyChanged` | Data binding |

| `FlowLayoutPanel.AutoScroll` | `ScrollViewer` | Scrolling |

### Ključne funkcionalnosti koje moraju da rade

1. **Header** — gradient teal pozadina, nalog klikabilan (dropdown sa listom naloga), opseg prikaz

2. **Operator bar** — linija (klikabilna za promenu), operatori (prikaz imena), "Izmeni" link

3. **Radna površina** — flow panel sa box karticama, "PRIMENI" button, count label

4. **Pool kutija** — 3 kolone, flow layout, horizontal scroll

5. **MenuStrip** — Podešavanja → Operateri (Ctrl+O), Alati → Pregled loga (Ctrl+L)

6. **DataGrid ledger** — paginacija (12 po strani), filter po datumu, search po nalogu

7. **Drag & drop** — box sa pool → surface (Avalonia ima DragDrop)

8. **Log viewer** — dark tema, Consolas font, poslednjih 200 linija

9. **Operator registry** — ListBox + dodaj/ukloni + auto inicijali + dedup + sačuvaj

10. **Database config** — TextBox + Browse + Test Connection

### Database layer za Linux

Na Linuxu: `SqliteDatabaseHelper` radi out-of-box. Potrebna je test baza (`proizvodnja_test.db`) sa istom šemom (Nalozi, BaseBox, LedgerSK). Možeš je kreirati iz `Program.cs` ili seed skriptom.

### Build

```bash

# Linux

dotnet build -f net8.0

dotnet publish -c Release -r linux-x64 --self-contained

# Windows (cross-compile from Linux)

dotnet publish -c Release -r win-x64 --self-contained

```

### Preporučena struktura projekta

```

PrecisionLedger/

├── Models/ # Modeli (Nalog, Box, LedgerEntry, Operator)

├── Data/ # Database helpers (interface, sqlite, oleDb)

├── Views/ # Avalonia Windows (MainWindow, OperatorEditor, LogViewer, DbConfig)

├── ViewModels/ # MVVM ViewModels (MainViewModel, OperatorViewModel)

├── Services/ # ConfigStore, LogHelper, AppPath

├── App.axaml # Application entry

├── Program.cs # Entry point

└── PrecisionLedger.csproj # Target: net8.0, NOT windows-specific

```

### Deliverables

1. ✅ Avalonia UI projekat koji se builda na Linuxu (`dotnet build` prolazi)

2. ✅ MainWindow sa svim funkcionalnostima (header, operator bar, work surface, pool, ledger grid)

3. ✅ OperatorRegistryWindow (dodaj/ukloni operatere)

4. ✅ LogViewerWindow (dark tema)

5. ✅ DatabaseConfigWindow (path + test)

6. ✅ SQLite fallback radi (proizvodnja_test.db)

7. ✅ Menu + keyboard shortcuts

8. ✅ Drag & drop (box pool → surface)

9. ✅ Push na GitHub: branch `avalonia` ili novi repo

### Checklist za SAGE

- [ ] Instalirati Avalonia template: `dotnet new install Avalonia.Templates`

- [ ] Kreirati projekat: `dotnet new avalonia.mvvm -n PrecisionLedger`

- [ ] Prebaciti `Models.cs` u `Models/` folder

- [ ] Prebaciti `IDatabaseHelper.cs`, `SqliteDatabaseHelper.cs`, `DatabaseHelper.cs` u `Data/`

- [ ] Prebaciti `ConfigStore.cs`, `LogHelper.cs`, `AppPath.cs` u `Services/`

- [ ] Napisati `MainWindow.axaml` + `MainWindow.axaml.cs` (layout, controls, events)

- [ ] Napisati MainViewModel (ili code-behind za jednostavnost)

- [ ] DataGrid za ledger

- [ ] WrapPanel za box pool (3 kolone)

- [ ] DragDrop za box premeštanje

- [ ] MenuStrip → Menu (Podešavanja, Alati)

- [ ] Keyboard shortcuts (Ctrl+O, Ctrl+L)

- [ ] OperatorRegistryWindow

- [ ] LogViewerWindow (dark tema)

- [ ] DatabaseConfigWindow

- [ ] Testirati na Linuxu (SAGE laptop)

- [ ] Testirati SQLite operacije (ucitaj naloge, generisi kutije, sacuvaj ledger)

- [ ] Push na GitHub

- [ ] Javiti TZEDEK-u da je spremno za test

⚡ Precisionledger-Avalonia
0

AsmBB v3.0 (check-in: 3df85ed0b218e51a); SQLite v3.42.0 (check-in: 831d0fb2836b71c9);
©2016..2020 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE