Skip to content

System Overview

Purpose

ConproSoft is a web-based construction resource and procurement management system built for BMH Africa. It centralises the operational, human resources, and procurement functions of construction project management into a single browser-accessible platform.

The system manages projects and contracts from creation through to financial close-out. It coordinates clients, suppliers, and subcontractors, handles human resources including employee profiles, compliance records, leave, timesheets, and payroll linkages, manages the entire procurement workflow from requisitions through to payments, tracks tasks and quality/safety records, and provides reporting through RDLC-based printable reports and on-screen dashboards.

The application name displayed in the UI is ConproSoft, operated under the domain conprosoft.co.za.


Technology Platform

Concern Detail
Runtime ASP.NET Web Forms on .NET Framework 4.8
Database Microsoft SQL Server: database conprosoft_tenantName
UI TouchUI: A Bootstrap-based responsive UI framework specifically focused on touch interaction
Authentication ASP.NET Forms Authentication with SQL Membership and Roles
Reports Microsoft RDLC via Microsoft.ReportViewer.WebForms 15.x
File attachments File system BLOB storage via registered BLOB adapter handlers in ~\App_Data\ folder; metadata tracked with FileName, FileType, FileSize fields
Email SMTP relay via smtp.bulkmail-za.com (configured in web.config)
Locale en-ZA (South Africa): date, currency, and culture formatting

How it works

  1. Controller XML files (/app/controllers/*.xml) define everything about a data entity:

    • The SQL SELECT statement (including joins to lookup tables)
    • An INSERT command (usually generating a new GUID primary key)
    • All fields with types, labels, validation, dropdown items, and lookup references
    • Named views (grid views, form views, create forms)
    • Actions (Insert, Update, Delete, Export, custom SQL, email triggers)
    • Role-based access via roles= attributes on fields, views, and actions
  2. Page HTML files (/app/pages/*.html) are thin wrappers that reference a controller by name via data-controller="..." attributes on <div> elements. The framework reads these at runtime and renders the full TouchUI interface.

  3. Site.aspx is the single entry point for all page requests. The SiteBase handler (App_Code/Handlers/Site.cs) reads the requested page HTML, injects the TouchUI JavaScript/CSS shell, and serves it as a complete SPA response. A URL such as ~/pages/purchase-orders resolves to pages/PurchaseOrders.html.

  4. Business Rules (App_Code/Rules/*.Generated.cs) are C# partial classes decorated with [RowBuilder] and [ControllerAction] attributes. The framework invokes these automatically at the appropriate lifecycle phase (Before/After Insert/Update).

  5. DataControllerService is the AJAX service endpoint. The browser calls it via JSON requests to fetch data pages, execute actions, and retrieve autocomplete/lookup values — all without page reloads.

Request flow summary

Browser request → ~/pages/<page-name>
  → Site.aspx (SiteBase handler)
      → Reads /pages/<PageName>.html
      → Injects TouchUI JS/CSS
      → Returns SPA shell to browser

Browser AJAX → DataControllerService
  → ControllerFactory.CreateDataController()
      → Loads /controllers/<Name>.xml
      → Invokes BusinessRules (RowBuilder / ControllerAction hooks)
      → Executes SQL against conprosoft_bmhcrp
      → Returns JSON to browser

Browser file upload/download → Blob.ashx
  → BlobFactoryConfig (Blob.generated.cs)
      → Reads/writes BLOB column in SQL Server

Browser report request → Report.ashx
  → Report.generated.cs
      → Loads .rdlc template from /reports/
      → Renders via Microsoft.Reporting.WebForms
      → Returns PDF/Excel/Word stream

Core Business Areas

Projects & Contracts

Manage the full project lifecycle: creation, participant assignment, financial claims, overhead expenses, change orders, and close-out. Key controllers: Project, ProjectClaims, ProjectSubcontractors, ProjectUsers, FiscalCalendar.

Human Resources

Employee profiles, compliance documentation (medical, training, IPAC, PPE), leave management, disciplinary records, and timesheet capture. Key controllers: PersonResource, LeaveApplication, TimeSheetHeader, MedicalScreening, Training, DisciplinaryAction.

Procurement

Full procurement cycle from requisition through to payment. Key controllers: Requisition, PurchaseOrders, GoodsReceipt, Payments, DeliveryNote.

Task Manager & Operations

Task and activity tracking with email notifications. Issue register and response management. Key controllers: Task, SubTask, IssueRegister, IssueResponse.

Quality & Safety

Quality management records and safety management registers. Policy document library. Key controllers: QualityManagement, SAFETYMANAGEMENT, PolicyDocuments. Not yet implemented — landing page designed per requirements, but module shortcuts are disabled until development is complete.

Reporting

RDLC-based printed reports fed by dedicated report controllers. On-screen dashboards and summary landing pages. Reports reside under /app/reports/*.rdlc.

System Administration

User and role management (ASP.NET Membership), reference/lookup data, project user associations, operator setup, and supporting document management.


Roles & Access Control

Role Access Summary
Administrators Full access to all modules and configuration
Manager HR, Procurement, Finance, Reporting, Admin
Supervisor HR operations, Task Manager, Procurement view
Employee Time Sheet, Leave Application, Task Manager (own records)
Readonly All controllers visible but all write actions disabled
Procurement Procurement module only
HumanResources HR module only
TaskManager Task Manager module only
QualityManagement Quality Management module
SafetyManagement Safety Management module
Reporting Reports section

Project-level data isolation is enforced in SharedBusinessRules.cs: non-Administrator users automatically see only records where their UserID is present in the Project_Users table for the relevant ProjectID.