Skip to content

Add BidParserLite WPF desktop variant (shared core, two solutions)#2

Merged
regalen merged 1 commit into
mainfrom
feat/bidparserlite-desktop
Jun 20, 2026
Merged

Add BidParserLite WPF desktop variant (shared core, two solutions)#2
regalen merged 1 commit into
mainfrom
feat/bidparserlite-desktop

Conversation

@regalen

@regalen regalen commented Jun 20, 2026

Copy link
Copy Markdown
Owner

Summary

Adds BidParserLite, a portable Windows desktop variant of BidParser, without disturbing the web app. Both products live in one repo and share the same parser core, so a new parser is written once and both pick it up.

  • BidParserLite.sln (new) references the shared Domain/Parsing/Output projects + the new Core/Wpf projects + the existing parsing test suite. The web BidParser.sln is untouched (Linux/Docker CI and dotnet test BidParser.sln unaffected).
  • src/BidParser.Core/ParseRunner.cs — the pure parse→write orchestration lifted from ParseService with all DB/auth/User code removed. Returns ParseOutcome { Validation, Currency, CancelledLines, OutputPath }.
  • src/BidParser.Wpf/ (net10.0-windows, single self-contained publish) — MVVM shell. MainViewModel ports the web SPA: vendor/file-type/template pickers, the vendor-driven conditional-field matrix from ParseSettingsCard.tsx + settings blocks, canSubmit/error branching from DashboardPage.tsx, and success/warning/error result panels. Output auto-named beside the input via OutputNaming. No DB, no config files, no persistent storage.
  • CI — new publish-windows (windows-latest) + release jobs publish BidParserLite-X.Y.Z-win-x64.exe as a GitHub Release asset on every v* tag, in lockstep with the Docker image; release body includes a docker pull reference.

Conditional-field matrix (mirrors the web)

Vendor-driven, matching ParseSettingsCard.tsx:

  • Nutanix / Lenovo → FX Rate + Uplift (regardless of CRM template — Lenovo's No Calculation ignores them but the fields still show)
  • HP (OneConfig / Bid / Global Bid) → Uplift for Uplift/% Off RRP with Uplift; Discount Off MSRP for % Off RRP with Uplift
  • Zebra → template dropdown + optional On Cost %; Uplift adds the Uplift field

Verification

  • dotnet build BidParser.sln (web) — clean, 0 warnings/errors
  • dotnet build src/BidParser.Core — clean
  • dotnet test BidParser.sln — 161 parsing tests pass (78 API tests need a Docker daemon, not run here)
  • src/BidParser.Wpf targets net10.0-windows and must be built on Windows — not compiled in this Linux environment. Remaining manual checks per the plan's §8 (smoke per writer family, portability test on a clean no-.NET box, throwaway release-tag pipeline test).

Not done

  • App icon (.ico) — needs a design asset.

- BidParser.Core: de-webbed ParseRunner (validation, writer dispatch,
  wrong-file-type flow) with no DB/auth/User dependencies; returns
  ParseOutcome { Validation, Currency, CancelledLines, OutputPath }
- BidParser.Wpf: net10.0-windows WPF shell — MainViewModel ports the
  web ParseSettingsCard's vendor-driven conditional-field matrix
  (Zebra / HP / Nutanix+Lenovo branches), canSubmit logic, error
  stages, success/warning/error result panel; output auto-named beside
  input via OutputNaming; single self-contained publish
- BidParserLite.sln: references shared Domain/Parsing/Output/Core/Wpf
  and the existing parsing test suite — web BidParser.sln untouched
- CI: publish-windows job (windows-latest) + release job publish
  BidParserLite-X.Y.Z-win-x64.exe as a GitHub Release asset on v* tags;
  release body includes docker pull reference for the web image
- Docs: fix stale Parsing parser counts (five->six Nutanix, add Zebra),
  add Vendors.Zebra and Zebra slugs to Domain constants list, reorder
  Core/Wpf entries after Output in project_memory.md
@regalen regalen merged commit 8a7871f into main Jun 20, 2026
2 checks passed
@regalen regalen deleted the feat/bidparserlite-desktop branch June 27, 2026 06:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant