Solution structure
The Damsy ERP codebase is a Visual Studio solution with four projects. Each project has a clear responsibility, and dependencies flow in one direction: the UI references everything; the DAL never references the UI.
Purpose
Understanding project boundaries tells you where to add code — a new payroll screen belongs in DamsyERP.UI/Areas/Payroll, its data calls in DAL, and its transfer objects in BO.
Solution file
Open DamsyERP.sln at the repository root. Set DamsyERP.UI as the startup project before running or debugging.
Projects at a glance
| Project | Namespace | Responsibility |
|---|---|---|
| DamsyERP.UI | DamsyERP.UI | Web application — controllers, Areas, views, static assets, report viewers, routing |
| DAL | DAL | Data access layer — ADO.NET calls to stored procedures via BaseHelper |
| BO | BO | Business objects / DTOs — BO.Payroll, BO.Employee, BO.User, etc. |
| UTILITIES | UTILITIES | Shared helpers — cryptography, constants, cross-cutting utilities |
Dependency diagram
Rule of thumb: If you need SQL access, add or extend a class in DAL. If you need a shape for form data or SP results, add a class in BO. If both UI and DAL need it (hashing, formatting), put it in UTILITIES.
DamsyERP.UI
The web project contains everything user-facing.
Root controllers
| Location | Examples |
|---|---|
Controllers/ | LoginController, DashboardController, EmployeeMController, ManageErrorController |
Root controllers handle authentication, the module launcher dashboard, shared employee master screens, and global error pages.
MVC Areas
Each module is an Area under Areas/:
Areas/
├── Payroll/
├── Registration/
├── Bills/
├── Stock/
├── Sales/
├── ESS/
├── ContractedRates/
├── Operation/
├── AttendancePunching/
├── Adminisration/ ← intentional spelling
├── ManagmentDashBoard/ ← intentional spelling
└── VerificationAndApproval/
Each Area includes:
Controllers/— module-specific actionsViews/— Razor templates and_Layout*.cshtml- Optional
.aspxCrystal report viewer pages
App_Start
RouteConfig.cs, BundleConfig.cs, FilterConfig.cs, and AreaRegistration classes wire routing and static asset bundling at application start.
Static assets
app-assets/ holds shared CSS (shell-modern.css, sidebar-unified.css) and module-specific styles (payroll-modern.css, etc.).
DAL
The data access project contains one or more *_DAL classes per domain (e.g., Login_DAL, PayRollDashBoard_DAL). Methods build SqlParameter arrays and delegate to BaseHelper:
// Pattern used throughout DAL classes
var dt = baseHelper.GetDataTable("dbo.GetLoginUser", parameters);
BaseHelper.ResolveConnectionString() reads MyConnectionString from Web.config (see Connection strings).
BO
Plain C# classes representing entities and form payloads. Controllers populate BO objects from request data and session; DAL methods accept BO instances as inputs to stored procedure parameters.
The BO.User object is especially important — it carries module boolean flags (Payroll, Billing, ZSTOCK, …) deserialized into session as dtVerifyUser after login.
UTILITIES
Shared code with no database dependency:
HashCryptography— password encryption before SP comparison- Constants and formatting helpers referenced by both UI and DAL
How a feature flows across projects
Developer notes
- Do not add UI references from DAL or BO — keep dependency direction clean.
- DAL classes often define a private
struct Procedurewith SP name constants — search for an existing DAL in the same domain before creating a new one. - Report
.rptfiles live inside the UI project near their Area report viewers. - Web.config lives only in DamsyERP.UI — connection strings and appSettings are not duplicated in other projects.
When debugging a module action, set breakpoints in this order: Area controller → DAL method → BaseHelper → SQL Profiler on the stored procedure name from the DAL struct.
Common mistakes
| Mistake | Fix |
|---|---|
| Adding business logic only in the controller | Move persistence to DAL; keep controller thin |
| Creating duplicate DTOs in UI project | Use or extend BO classes |
Referencing System.Web from DAL | Keep DAL web-agnostic except where legacy code already does |
| Renaming Area folders | Breaks routes — see Features for correct spellings |
Related pages
Next steps
With the solution map in hand, proceed to Requirements and Installation to open and run the solution locally.