Technology Stack¶
This page answers the question "what is SmartSoft Inventory built with?" — the languages, runtimes, frameworks, and tools, plus why each is there and what it implies for anyone working on the system.
The stack in one diagram¶
flowchart TB
subgraph L5["Presentation"]
WF["WinForms UI"]
SK["IrisSkin / Skinner<br/>(theming)"]
CFX["ChartFX.Lite<br/>(charts)"]
CR["Crystal Reports<br/>(report rendering)"]
end
subgraph L4["Application"]
APP["smartsoft_inventory<br/>Forms · Class · Module"]
end
subgraph L3["SmartSoft FrameWork (shared DLLs)"]
BLL["BLL<br/>stock · promos · closing"]
GEN["General<br/>data access · config"]
GUI["GUI<br/>base forms · controls"]
STR["Struk<br/>receipt printing"]
NET["Net · Closing · Laporan · CetakGiro · MyLib"]
end
subgraph L2["Platform"]
NETFX[".NET Framework 3.5 (x86)"]
COM["COM interop: SQLDMO · Raw printing · QRCode"]
end
subgraph L1["Data"]
SQL[("Microsoft SQL Server")]
end
L5 --> L4 --> L3 --> L2 --> L1
style L3 fill:#e8eaf6,stroke:#3f51b5
style L1 fill:#e0f2f1,stroke:#00897b
Core platform¶
| Layer | Technology | Version / detail |
|---|---|---|
| Language | VB.NET | Visual Basic .NET |
| Runtime | .NET Framework | 3.5, targeting x86 |
| UI framework | Windows Forms (WinForms) | Desktop, event-driven |
| IDE / build | Visual Studio 2008 | MSBuild-compatible for the main project |
| Database | Microsoft SQL Server | 2005 / 2014-era, SQL authentication |
| Data access | ADO.NET | SqlConnection / SqlCommand / SqlDataAdapter |
| Reporting | Crystal Reports | Report rendering & printing |
| OS | Windows | The app is Windows-only end-to-end |
Why VB.NET / .NET 3.5?
This is the technology it was originally written in and never migrated from. .NET 3.5 + WinForms + Visual Studio 2008 was a mainstream Windows line-of-business stack at the time. The choice is now a constraint, not a decision: the dependencies below (Crystal Reports, SQLDMO COM interop, skinning DLLs) tie it firmly to this era. Treat the stack as fixed unless a deliberate modernization project says otherwise.
Third-party & UI libraries¶
| Component | Role |
|---|---|
| IrisSkin / Skinner | Skinning engine — the themed look of every form. Skin name comes from config. |
| ChartFX.Lite | Charting control used in dashboards/reports. |
| Crystal Reports | The reporting engine; report viewers live under INVENTORY/Form/Laporan/. |
| MessagingToolkit.QRCode | QR-code generation (labels / receipts). |
| MyControl | In-house custom WinForms controls. |
| Interop.SQLDMO | COM interop to SQL-DMO for database admin tasks (backup/restore, server info). |
The SmartSoft FrameWork (internal shared libraries)¶
The heavy lifting lives in a set of internal DLL assemblies — the SmartSoft FrameWork — shared across SmartSoft's product line (Inventory, POS, Service). The application references them as compiled DLLs.
| Assembly | Responsibility |
|---|---|
FrameWork.SmartSoft.BLL |
Business logic — stock & costing (BLL_STOCK), promotions, point-reward, daily process. |
FrameWork.SmartSoft.General |
Data-access gateway (DataAccessControl), value conversion, registry config, version check. |
FrameWork.SmartSoft.GUI |
Base forms, custom controls, message boxes, skinning glue. |
FrameWork.SmartSoft.Struk |
Receipt / label ("struk") printing, including raw printer access. |
FrameWork.SmartSoft.Closing |
Daily / monthly close, backup, restore, data housekeeping. |
FrameWork.SmartSoft.Net |
Networking — email (SMTP/GMail), FTP, modem messaging. |
FrameWork.SmartSoft.Laporan |
Specific report builders (purchase order, margin/profit). |
FrameWork.SmartSoft.CetakGiro |
Cheque / giro printing for specific banks (Mandiri, BCA). |
DataAccessControl |
Typed data-access classes (tbMaster_*, tv_*) for Inventory / POS / Service. |
SmartSoft.Parameter |
Company (PERUSAHAAN), parameters, computer/system reference entities. |
MyLib |
Cross-cutting utilities — licensing (CdKey), login, Oracle DAC, raw printing, clock sync. |
See The SmartSoft FrameWork for a per-assembly deep dive.
Configuration & deployment technology¶
| Concern | How it's done |
|---|---|
| App configuration | Stored in the Windows Registry, obfuscated (server, database, credentials, skin). Read at startup via SystemRegistry. |
| Connection string | Built at runtime from registry values; SQL Server authentication with credentials embedded. |
| Licensing | CdKey (MyLib) + a cloud license check at license.smartsoft.co.id gated on an expiry date in REF_SYSTEM. |
| Clock/locale | On startup the app syncs the workstation clock and date/number formats to the SQL Server (SynchroniseDateTime). |
| Install | A Visual Studio setup/installer project (SetupInventory.vdproj) produces a per-PC MSI-style install. |
What this stack means for you¶
Practical consequences
- Windows-only, no cross-platform. No
dotnetCLI build; you need Windows + Visual Studio 2008 (or a matching MSBuild + the DLL dependencies). - Desktop, not web. Each till/PC runs the full app and connects directly to SQL Server. There is no application server or API tier.
- Shared DLLs are external. The app references the FrameWork via relative paths outside the repo — see Build & Deploy.
- The database is the integration point. Branches/products integrate through shared SQL tables and closing/sync processes, not services.
- The stack is frozen in time. Modern .NET, EF Core, or a web front-end would be a rewrite, not an upgrade — because of Crystal Reports, SQLDMO, and the skinning DLLs.