No description
  • C# 93.1%
  • HTML 6.6%
  • CSS 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
OpenClaw (Bryan's agent) 36b100c04e Updater.cs: tenant DBs target SQL Server, not LocalDB
The catalog DB UniTEKTIME (created at 18:20 UTC) stores Tenant rows.
Updater.cs seeds two tenants in non-RELEASE builds:

  company1.com  -> UNItekTIME_company1
  company2.com  -> UNItekTIME_company2

The seed code's CreateTenant helper was hard-coded to LocalDB:

  Data Source=(localdb)\\mssqllocaldb;Integrated Security=SSPI;
  Pooling=false;Initial Catalog={databaseName}

That meant logging in as company1.com/company2.com would try LocalDB,
not Bryan's 7740-002\SQLDEVELOPER server.

Updated CreateTenant so the seeded ConnectionString matches the same
shape Bryan applied to appsettings.json:

  Integrated Security=SSPI;Pooling=false;
  Data Source=7740-002\\SQLDEVELOPER;Initial Catalog={databaseName};
  Encrypt=True;TrustServerCertificate=True

Per-tenant database names kept exactly as Bryan typed:
  UNItekTIME_company1
  UNItekTIME_company2

DBA note: existing Tenant rows in the UniTEKTIME catalog DB (if any
were written on the 18:20 UTC run) still hold the old LocalDB
connection strings. Either delete the two seeded Tenant rows in the
catalog DB and let Updater re-seed them on next run, or UPDATE the
ConnectionString column directly.

UNItekTIME.E2E.Tests/Tests.cs still references LocalDB 'Company1' for
ephemeral xUnit databases — left untouched per the verbatim-template
rule until Bryan asks.
2026-05-16 18:24:51 +00:00
UNItekTIME.Blazor.Server Set SQL Server connection strings (per Bryan 18:09 UTC) 2026-05-16 18:12:31 +00:00
UNItekTIME.E2E.Tests Initial scaffold from UniCORE-v25.2.7-Template0 2026-05-16 16:18:56 +00:00
UNItekTIME.MiddleTier Set SQL Server connection strings (per Bryan 18:09 UTC) 2026-05-16 18:12:31 +00:00
UNItekTIME.Module Updater.cs: tenant DBs target SQL Server, not LocalDB 2026-05-16 18:24:51 +00:00
UNItekTIME.WebApi Set SQL Server connection strings (per Bryan 18:09 UTC) 2026-05-16 18:12:31 +00:00
UNItekTIME.Win Re-add Win and MiddleTier projects from template 2026-05-16 16:21:15 +00:00
.gitattributes Add UNItekTIME business objects: foundation lookups + masters + first TimeEntry 2026-05-16 16:55:59 +00:00
.gitignore Initial scaffold from UniCORE-v25.2.7-Template0 2026-05-16 16:18:56 +00:00
LICENSE-NOTES.md Initial scaffold from UniCORE-v25.2.7-Template0 2026-05-16 16:18:56 +00:00
README.md Re-add Win and MiddleTier projects from template 2026-05-16 16:21:15 +00:00
UNItekTIME-Claw.sln Re-add Win and MiddleTier projects from template 2026-05-16 16:21:15 +00:00

UNItekTIME-Claw

UNItekTIME rebuild on DevExpress XAF v25.2.7 / XPO / .NET 10.

Part of the Unitek Systems Limited R&D portfolio. Modernises the legacy LiveTecs-derived UNItekTIMEWeb codebase (time, expense and billing tracking) onto the current DevExpress stack.

See ../ANALYSIS.md (in the OpenClaw workspace) for the full legacy analysis, target architecture (§7A), legal/IP basis (§10) and template inspection (§11). This repository is the target — the new build.


Status

🟡 Initial scaffold. Project structure imported from UniCORE-v25.2.7-Template0 and renamed to UNItekTIME conventions. No UNItekTIME-specific business objects or controllers added yet.

Solution layout

UNItekTIME-Claw.sln
├── UNItekTIME.Module/              ← Business objects, controllers, domain logic
│                                     (platform-agnostic; the heart of the app)
├── UNItekTIME.Blazor.Server/       ← Blazor Server host (PRIMARY UI)
├── UNItekTIME.Win/                 ← WinForms host
├── UNItekTIME.WebApi/              ← OData + REST + JWT (for future MAUI mobile,
│                                     third-party integrations)
├── UNItekTIME.MiddleTier/          ← Optional 3-tier application server
└── UNItekTIME.E2E.Tests/           ← End-to-end test project

This is the full set of projects from the UniCORE-v25.2.7-Template0 scaffold, with no projects dropped — the scaffold is preserved verbatim except for the rename to UNItekTIME conventions.

Target stack

Component Version
.NET 10.0
DevExpress XAF 25.2.7
ORM XPO
Primary UI Blazor Server (DevExpress Blazor components)
API OData + REST (DevExpress.ExpressApp.Api.Xpo.All) with Swagger + JWT
Database (dev) SQL Server LocalDB ((localdb)\mssqllocaldb)
Database (prod TBD) SQL Server
Background jobs Hangfire (planned)
Mobile (planned) .NET MAUI sharing Module BOs via WebApi

DevExpress packages in .csproj files currently float to 25.2.* (the template default). The first developer build on VS 2026 will resolve them to 25.2.7 from the licensed DevExpress NuGet feed. A Directory.Packages.props for explicit pinning can be added in a later commit if reproducible builds across machines become important.

Build

This repository is built on a Windows developer machine, not in CI (yet). To build locally:

  1. Prerequisites

    • Windows
    • Visual Studio 2026 with the ASP.NET and web development and .NET desktop development workloads
    • DevExpress Universal Subscription v25.2.7 installed (Bryan Fred / bryan.fred@unitek-systems.com)
    • .NET 10 SDK
    • SQL Server LocalDB (ships with Visual Studio)
  2. Open UNItekTIME-Claw.sln in Visual Studio 2026.

  3. Restore NuGet packages — VS will pull from your configured DevExpress NuGet feed automatically.

  4. Build Solution (Ctrl+Shift+B).

  5. Set the startup project to UNItekTIME.Blazor.Server and run (F5). The XAF database will be created on first run via the ModuleUpdater in UNItekTIME.Module/DatabaseUpdate/Updater.cs.

    Default Blazor URL: https://localhost:5001.

Branch / commit conventions

  • main is the integration branch. All work merges here.
  • Commits authored by the OpenClaw assistant are signed OpenClaw (Bryan's agent) <openclaw@unitek-systems.com>.
  • Commits authored by Bryan from VS 2026 use his standard Git identity.

Cross-references

  • Full design document: <workspace>/ANALYSIS.md §7A (target architecture)
  • Legal / IP basis: <workspace>/ANALYSIS.md §10
  • Template inspection: <workspace>/ANALYSIS.md §11
  • Legacy source (rebranded by Unitek): <workspace>/legacy/UNItekTIMEWeb/
  • Legacy source (original LiveTecs, pristine): <workspace>/legal/livetecs-original-source/
  • Issue tracking sister product: BryanLogan/UNItekTRAK-Claw (planned)
  • Shared library (future): Unitek.Core (extracted from duplication once TIME and TRAK both exist — see ANALYSIS.md §7C)

Licence

See LICENSE-NOTES.md.