diff --git a/TODO-Legacy.md b/TODO-Legacy.md index 97431d9..e05693b 100644 --- a/TODO-Legacy.md +++ b/TODO-Legacy.md @@ -3,10 +3,10 @@ Purpose: Track features and workflows from legacy Paradox (.SC) scripts to port into the modern app. Each item includes a clear example to guide implementation and testing. ### Cross-cutting platform and data -- [ ] Data model: create relational tables and relations +- [x] Data model: create relational tables and relations - Example: Create tables `Rolodex`, `Phone`, `Files`, `Ledger`, `Deposits`, `Payments`, `Printers`, `Setup`, `Footers`, `FileStat`, `FileType`, `TrnsLkup`, `TrnsType`, `GrupLkup`, `PlanInfo`, `Pensions`, `Results`, `Output`, `Schedule`, `Separate`, `Death`, `Marriage`, `States`, `LifeTabl`, `NumberAl`. Foreign keys: `Phone.id -> Rolodex.id`, `Files.id -> Rolodex.id`, `Ledger.file_no -> Files.file_no`. -- [ ] CSV import: one-time and repeatable import from legacy CSVs +- [x] CSV import: one-time and repeatable import from legacy CSVs - Example: Import `old-database/Office/FILES.csv` into `files` table; validate required fields and normalize dates; log row count and any rejects. - [ ] Answer table pattern for query results @@ -26,10 +26,10 @@ Purpose: Track features and workflows from legacy Paradox (.SC) scripts to port - Example: Home shows links to Rolodex, File Cabinet, Pensions, Plan Info, Deposits, Utilities, Printers/Customize, Tally Accounts. ### Rolodex (names/addresses/phones) -- [ ] CRUD for `Rolodex` and child `Phone` entries +- [x] CRUD for `Rolodex` and child `Phone` entries - Example: Add a phone number with `Location = Office` and format validation (e.g., `1-555-555-1234`). -- [ ] Advanced search dialog joining `Phone` +- [x] Advanced search dialog joining `Phone` - Example: Search by `Last = "Smith"` and `Phone contains "555-12"`; results include records linked by `Phone.Id -> Rolodex.Id`. - [ ] Reports: Envelope, Phone Book (2 variants), Rolodex Info @@ -39,7 +39,7 @@ Purpose: Track features and workflows from legacy Paradox (.SC) scripts to port - Example: Select one or more contacts, choose a form, and produce a merged document with their address data. ### File Cabinet (client files and billing) -- [ ] Master-detail UI for `Files` with `Ledger` detail +- [x] Master-detail UI for `Files` with `Ledger` detail - Example: Selecting a file shows ledger entries inline; adding a ledger line updates file totals. - [ ] Ask/Search dialog over `Files` @@ -70,10 +70,10 @@ Purpose: Track features and workflows from legacy Paradox (.SC) scripts to port - [ ] Validations and defaults - Example: Require `Date`, `T_Code`, `Empl_Num`, `Amount`, `Billed`; if `T_Type = 2 (Hourly)`, default `Rate` from `Employee.Rate_Per_Hour` for the selected employee. -- [ ] Auto-compute `Amount = Quantity * Rate` +- [x] Auto-compute `Amount = Quantity * Rate` - Example: Enter `Quantity = 2`, `Rate = 150.00` auto-sets `Amount = 300.00` when either field changes. -- [ ] Unique posting for `Item_No` +- [x] Unique posting for `Item_No` - Example: On save, if `(File_No, Date, Item_No)` conflicts, increment `Item_No` until unique, then persist. - [ ] Recompute file totals (Tally_Ledger) on change @@ -83,7 +83,7 @@ Purpose: Track features and workflows from legacy Paradox (.SC) scripts to port - Example: Keyboard toggle to set `Billed` Y/N; buttons to shift `Date` ±1 day. ### Deposits / Payments -- [ ] Payments search (date range, File_No, Id, Regarding) +- [x] Payments search (date range, File_No, Id, Regarding) - Example: `From_Date=2025-01-01`, `To_Date=2025-03-31` shows all payments in Q1 2025 with optional filters for file or id. - [ ] Reports: Summary and Detailed payments