diff --git a/clients/valleywide/session-logs/2026-06/2026-06-13-mike-vwp-server3-migration-and-orders-source-recovery.md b/clients/valleywide/session-logs/2026-06/2026-06-13-mike-vwp-server3-migration-and-orders-source-recovery.md index 513b365..1602e9a 100644 --- a/clients/valleywide/session-logs/2026-06/2026-06-13-mike-vwp-server3-migration-and-orders-source-recovery.md +++ b/clients/valleywide/session-logs/2026-06/2026-06-13-mike-vwp-server3-migration-and-orders-source-recovery.md @@ -158,3 +158,18 @@ Orders project tree. Staged 12.2 MB of pure source (147 .frm, 4 .bas, 5 .vbp; ne - **RMM:** http://172.16.3.30:3001 — VWP site "Main Office" 7c18fe2c-38fe-4ebf-8a26-b47745db2d19 (code INNER-TIGER-8330). - **VWP Syncro customer:** 31694734. + +## Update: 05:40 PT — Orders modernization: research + wiki + +- Inventoried the recovered source (`ORDERS_C.vbp`): ~40 active forms + `modADO` (ADO.bas/ADO2.bas + data layer); confirmed full construction-ERP domain (Projects/Lots, Takeoffs, Crew/Payroll incl. + Certified Payroll, Scaffold, Inventory/PO/Suppliers, AR/AP/Billing/Job-Cost, Positive Pay 3 banks, + Repairs, Texture/Foam). Stack from .vbp refs: VB6 + ADO 2.6/Jet, Crystal 7 (craxdrt/Crystl32), + True DBGrid Pro 7 (todg7), FarPoint Spread (Flp32a30), TABCTL32/MSCOMCTL/EasyP, MSXML4. +- Researched modernization paths: VBUC (Mobilize.Net / gapvelocity AI Migrator) VB6->C#/.NET8; + Jet->SQL Server; OCX successors all in MESCIUS/GrapeCity family (True DBGrid->FlexGrid w/ migration + utility; FarPoint Spread->Spread for WinForms, .ss2->XML; Crystal->Crystal for VS auto-convert). +- **Created wiki article:** `wiki/projects/valleywide-orders-modernization.md` (app domain, stack, + recovered-source status + locations, modernization assessment + first concrete steps, sources). +- Linked from `wiki/index.md` (Projects table) and `wiki/clients/valleywide.md` (app-mod section + pointer + "source RECOVERED" note superseding the old "lost" text). diff --git a/wiki/clients/valleywide.md b/wiki/clients/valleywide.md index 4595ff2..e80dc2e 100644 --- a/wiki/clients/valleywide.md +++ b/wiki/clients/valleywide.md @@ -112,6 +112,12 @@ Plastering / stucco subcontractor based in Arizona. Active ACG client. Primary w ## App Modernization Project +> **Dedicated article: [[projects/valleywide-orders-modernization]].** +> **UPDATE 2026-06-13 — the full VB6 source has been RECOVERED** (from Darv's machine backup +> `F:\Darv\Darv.rar` on WINFileSvr `192.168.0.35`; staged to the repo). The "source lost / +> only frmPayroll.frm survived / VB Decompiler" notes below are **superseded** — decompilation +> is no longer needed. + VWP's core business application is a custom-built construction ERP. The original developer (known as "Darv") is deceased. The app is hitting the 2GB Jet/Access database file size limit. ACG was engaged to assess modernization feasibility. ### Application Stack (Confirmed) diff --git a/wiki/index.md b/wiki/index.md index 0965e05..7974a5f 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -72,6 +72,7 @@ Run `/wiki-lint` to check for stale entries and broken backlinks. | [Wrightstown Solar](projects/wrightstown-solar.md) | Off-grid solar project (EVE C40 16S5P packs, Victron MultiPlus II, JK BMS); Phase 1 budget $2,175–2,945; planning phase only as of 2026-02-09; no hardware purchased | 2026-05-24 | | [GuruRMM Agent](projects/gururmm-agent.md) | Cross-platform endpoint agent (Rust) for the GuruRMM platform — metrics, remote execution (system/user_session contexts), BSOD detection, VSS shadow copy, self-update w/ rollback, watchdog, compliance reporting; Windows/Linux/macOS. Companion to [GuruRMM](projects/gururmm.md) | 2026-06-12 | | [MSP Tools (umbrella)](projects/msp-tools.md) | Umbrella directory for ACG's MSP tooling — hosts the GuruRMM + GuruConnect submodules plus GuruScan, audit scripts, quote-wizard, and operational utilities | 2026-06-12 | +| [Valley Wide "Orders" Modernization](projects/valleywide-orders-modernization.md) | VWP's custom VB6 construction ERP ("ORDERS" / Orders_10A.exe) — Jet/Access, Crystal 7, True DBGrid, FarPoint Spread, ~130 tables (2GB Jet wall). **Full VB6 source RECOVERED 2026-06-13** from Darv's machine backup (Darv.rar on WINFileSvr); staged to repo (147 .frm/4 .bas, newest 2020-06-09). Decompilation retired. Path: VBUC→.NET, Jet→SQL Server, OCX→MESCIUS successors. Ticket #32280 | 2026-06-14 | ## Systems diff --git a/wiki/projects/valleywide-orders-modernization.md b/wiki/projects/valleywide-orders-modernization.md new file mode 100644 index 0000000..83b9baa --- /dev/null +++ b/wiki/projects/valleywide-orders-modernization.md @@ -0,0 +1,175 @@ +--- +type: project +name: valleywide-orders-modernization +display_name: Valley Wide "Orders" App Modernization +client: valleywide +status: active +last_compiled: 2026-06-14 +compiled_by: GURU-5070/claude-main +sources: + - clients/valleywide/app-modernization/CONTEXT.md + - clients/valleywide/app-modernization/source-code/Orders-VWP_Current-2020/ + - clients/valleywide/session-logs/2026-06/2026-06-13-mike-vwp-server3-migration-and-orders-source-recovery.md + - wiki/clients/valleywide.md +backlinks: + - clients/valleywide +--- + +# Valley Wide "Orders" App Modernization + +Assessment + modernization of Valley Wide Plastering's custom construction ERP, an in-house VB6 +application called **ORDERS** (`Orders_10A.exe` / `ORDERS.exe`). The original developer ("Darv") +is deceased. The app still runs production but is on a dead stack (VB6 + Jet/Access) and is +approaching the 2 GB Jet file-size wall. ACG engaged to assess feasibility and a path forward. + +**Tracking ticket:** Syncro **#32280 — Source Code Data Recovery** (id 110305931). + +--- + +## STATUS HEADLINE (2026-06-13): SOURCE FULLY RECOVERED + +The complete VB6 source was believed lost (only `frmPayroll.frm` had ever been found). On +2026-06-13 it was **recovered in full** from Darv's machine backup (`F:\Darv\Darv.rar`, 51 GB, on +WINFileSvr `192.168.0.35`, extracted to `F:\Darv\Darv-rar`). The full ORDERS project tree is +present with multiple versions; newest **`…\Kingston\Project\VWP_Current\ORDERS_C.vbp` (2020-06-09)**. + +12.2 MB of pure source is staged in the repo at +`clients/valleywide/app-modernization/source-code/Orders-VWP_Current-2020/` (147 `.frm`, 4 `.bas`, +5 `.vbp`, 2 `.Dsr`). **VB Decompiler Pro is no longer needed** — modernization can proceed from +real, buildable 2020 source. + +--- + +## The Application + +ORDERS is a full **construction ERP for a plastering/stucco subcontractor**. The `ORDERS_C.vbp` +project links ~40 active forms (the folder holds 128 `.frm` total, many being Darv's `old`/`bak`/`xx` +working copies). Form names map cleanly onto the documented Jet schema (`tbl…` in +[[clients/valleywide]]): + +| Domain | Forms (representative) | DB tables | +|---|---|---| +| Projects & Lots | frmProject, frmLotInfo, frmPlans, frmLotOrders, frmChange, frmLotChLog | tblPROJECT, tblLOTINFO, tblPLANS, tblCHANGE | +| Orders & Takeoffs | frmOrders, frmTake, frmViewTake, frmInvTake, frmOrderDates | tblORDERS, tblTAKE, tblMEASURE | +| Crew / Labor / **Payroll** | frmCrew(s), frmEmployee, frmLabor, frmPayroll, frmPayHead, frmPaySheet, frmHourList | tblCREW, tblHRDAILY, tblPAYHEADER, tblPAYROLL | +| **Certified Payroll** | frmCertified | **tblCERTIFIED** (prevailing-wage, legal HARD requirement) | +| Scaffold | frmScaffold, frmScafList, frmScafPay, frmSCrew | tblScaffold, tblSC_Crew | +| Inventory / Purchasing | frmInventory, frmInvPrice, frmYardOrder, frmPO, frmPOList, frmPOMatrl, frmSupplier, frmContractor | tblINVTRY, tblINVPRICE, tblSUPPLIER, tblPOrder, tblYardOrder | +| AR / AP / Billing / Job Cost | frmAR(Master), frmAP(Master), frmBilling, frmMANBILL, frmJCList, frmJCPrint | tblARMASTER, tblAPMASTER, tblJOBCOST | +| **Positive Pay (3 banks)** | frmPosPayC, frmPosPayS, frmPosPayV | **tblPosPayCRD, tblPosPaySWI, tblPosPayVWP** (bank fraud-prevention, HARD dependency) | +| Repairs | frmRepair, frmRepairLot, frmRepList | tblREPAIR, tblRepList | +| Materials/Finishes | frmTexture, frmFoam, frmSand, frmBlackPaper | — | +| System | frmLogin, frmUser, frmMain, frmSplash, frmAbout, frmError, frmReport | tblSECURITY, tblSYSInfo | + +--- + +## Technology Stack (confirmed from `ORDERS_C.vbp` references) + +- **Language/runtime:** Visual Basic 6.0, compiled **P-Code** (best case for any fallback + decompile — ~70-80% recoverable — but moot now that we have source). +- **Data access:** ADO 2.6 (`msado26`), MS ADO Data Control (`MSADODC.OCX`), RDO 2.0 (`msrdo20`), + ADOX DDL (`msadox`) → **MS Jet / Access `.mdb`** (Jet 3.x, Access 97 format). +- **Reporting:** **Crystal Reports 7** ActiveX runtime (`craxdrt.dll`, `Crystl32.OCX`) + MS Data + Report 6.0 (`MSDBRPTR`, `DataReport1.Dsr`, `CrystalReport2.Dsr`). (~791 `.rpt` files documented.) +- **Grids:** **True DBGrid Pro 7.0** (`todg7.ocx`, `tdbg7da`) + MS FlexGrid. +- **Spreadsheet grid:** **FarPoint Spread** (`Flp32a30.ocx`). +- **UI controls:** TABCTL32 (tab control), MSCOMCTL / mscomct2 (common controls), comdlg32, + `EasyP.ocx` (EasyPrint). +- **Misc:** MSXML 4.0, Scripting Runtime, MS Data Binding (`MSBIND`), data formatting (`msstdfmt`). + +Data layer is centralized in **`ADO.bas` / `ADO2.bas`** (the `modADO` module) — the place to start +when reading the code. + +--- + +## Database + +- Custom Jet/Access ERP, **~130 tables**. Production DB `VWP.mdb` was **938 MB (2026)** and growing + (671 MB 2020 → 761 MB 2022 → 938 MB 2026) — **approaching the 2 GB Jet hard limit** (the core + modernization driver). Multiple `.mdb` copies exist in the Darv backup (e.g. + `…\000_ASource\Vwp.mdb` 801 MB, `…\VWP\db1.mdb` 120 MB) — left on the server, not in the repo. +- Modern ACE/DAO drivers refuse to open the Jet 3.x file; earlier schema extraction was via binary + scan. With source in hand, the schema can now be read directly from the forms' SQL + `modADO`. + +--- + +## Modernization Assessment + +### Constraints that shape every option +- **Certified payroll** (prevailing-wage gov't jobs) — legal compliance, cannot be dropped. +- **Positive Pay** to 3 banks (CRD/SWI/VWP) — fraud-prevention integration, hard dependency. +- **~791 Crystal Reports** — a large, separate reporting surface to carry or replace. +- **Heavy commercial OCX dependency** (True DBGrid, FarPoint Spread, Crystal) — these, not the VB6 + language, are the migration's hard part. Lesson from the field: business rules hide in grid event + handlers — favor migration that preserves logic over a clean-room rewrite. + +### Strategy options (industry-standard for VB6 + Jet) +1. **Automated migration to .NET (C#/VB.NET)** — baseline-convert with **VBUC** (Mobilize.Net / + gapvelocity "VB6 AI Migrator"; targets up to .NET 8, multi-project), then manual refactor. + Preserves ~25 yrs of business logic. **Recommended baseline.** +2. **Incremental / strangler** — expose VB6 via COM/services, rewrite module-by-module; old+new + coexist. Lowest risk, longest timeline. +3. **Full rewrite** (web/.NET) — only justified if the code is unsalvageable; discards the logic + investment and risks the "47 undocumented rules" trap. +4. **Hybrid** — keep stable parts on VB6, rewrite the high-value/at-risk parts (data layer + the + Jet→SQL move first). + +### The OCX/report dependencies have direct .NET successors (key finding) +The three commercial controls map cleanly onto modern equivalents from the **same vendor lineage** +(MESCIUS / GrapeCity / ComponentOne — formerly FarPoint), which de-risks the migration: +- **True DBGrid Pro 7 → ComponentOne/MESCIUS FlexGrid** (recommended .NET successor; True DBGrid Pro + 8 also exists with a migration utility). +- **FarPoint Spread (ActiveX) → Spread for WinForms (.NET)** — convert `.ss2` designs to XML via the + GrapeCity Spread designer; same vendor. +- **Crystal Reports 7 → Crystal Reports for Visual Studio** — auto-converts older projects on open + (or re-platform reports to a modern engine long-term). +- **Jet/Access `.mdb` → SQL Server** — removes the 2 GB wall, adds proper concurrency/security; + data-access already abstracted in `modADO`, easing the swap. + +### Suggested first concrete steps +1. Stand up a **VB6 IDE build environment** (VB6 SP6 + the OCX set: TABCTL32, todg7, Flp32a30, + Crystl32/craxdrt, MSCOMCTL, EasyP) and confirm `ORDERS_C.vbp` **compiles from the recovered tree**. +2. Migrate **Jet → SQL Server** behind `modADO` first (biggest pain, lowest UI risk). +3. Pilot a **VBUC** conversion of one self-contained module to gauge effort + control-replacement cost. +4. Inventory the 791 `.rpt` against what's actually used before committing to a reporting path. + +--- + +## Source Code Status & Locations + +- **Recovered tree (repo):** `clients/valleywide/app-modernization/source-code/Orders-VWP_Current-2020/` + (newest `ORDERS_C.vbp` 2020-06-09; also `ORDERS_Cx`, historical `ORDERSold.vbp` 2002 / + `ORDERSSave`). Plus `000_ASource/TEST_VWP.vbp` (a LotInfo test harness) and the `darv-G-finds/` + binaries (`ORDERS0727-2015.exe`, `ORDERS-2005.exe`, `Package1508` installer + the OCX set). +- **Source of record (server):** WINFileSvr `192.168.0.35` — `F:\Darv\Darv.rar` (51 GB archive) and + `F:\Darv\Darv-rar` (135 GB extract). Also present: `VWP_Inv` (inventory) and `VWP_Update` projects + (not yet staged). Keep until the source is verified to compile, then the 135 GB extract can be + cleaned up. +- Compiled production build is `Orders_10A.exe`; the running app is launched via shortcuts to it. + +--- + +## History + +| Date | Event | +|---|---| +| 2026-04-27 | App-mod project initiated. VB6 P-Code + Jet 3.x stack confirmed; ~130 tables extracted via binary scan; Crystal 8.5 / 791 `.rpt` documented. Decompilation planned. | +| 2026-05-14 | Ticket #32280 "Source Code Data Recovery" opened. | +| 2026-05-16 | VB6 source search across server drives (D/drive2/drive3 scans) — substantial VB6 found, confirming which is VWP's was in progress. | +| 2026-06-13 | **Full source recovered** from `Darv.rar` (WINFileSvr). Staged to repo; decompilation retired. Found during the SERVER3→VWP-FILES G: migration server sweep. | + +--- + +## Reference + +- **Ticket:** #32280 (id 110305931), customer 31694734. +- **Repo:** `clients/valleywide/app-modernization/` (CONTEXT.md, source-code/, source-analysis/). +- **Newest project:** `ORDERS_C.vbp` 2020-06-09 — Type=Exe, 80 forms + `modADO`, 10 OCX/13 references. +- **Related:** [[clients/valleywide]] (client + the 2026-06-13 G: migration to VWP-FILES). + +### Modernization research sources +- Mobilize.Net VBUC (VB6→C#/.NET 8): https://www.mobilize.net/products/app-migrations/vbuc/c-generation +- VBUC third-party / ActiveX control handling: https://docs.gapvelocity.ai/vbuc/third-party-controls +- True DBGrid → FlexGrid (.NET) / migration utility: https://developer.mescius.com/kb/using-the-true-dbgrid-pro-80-migration-utility +- FarPoint Spread ActiveX → Spread for WinForms (.ss2→XML): https://www.gapvelocity.ai/blog/migrating-activex-farpoint-grid-designer +- VB6 modernization strategies (big-bang / strangler / rewrite / hybrid): https://dzone.com/articles/migrating-legacy-applications-modern-platforms