Skip to content

Integrations with External Services


SMTP — Email

SMTP is the only active external integration. It is configured in web.config under <system.net><mailSettings>:

<smtp deliveryMethod="Network" from="no-reply@conprosoft.co.za">
  <network host="smtp.bulkmail-vendor.com"
           port="25"
           userName="myUserName@smtp.bulkmail-vendor.com"
           password="[configured in web.config]" />
</smtp>

Email Business Rules — Full Register

Email rules are defined directly inside controller XML files as <rule type="Email"> elements. They fire automatically after a specified action (Insert or Update). The following table lists every email rule active in the system:

Controller Rule Name Trigger From To CC Subject
LeaveApplication NewApplicationEmail After Insert no-reply@conprosoft.co.za no-reply@conprosoft.co.za; {SupervisorEmailAddress} {@BusinessRules_UserEmail} {Status}: {LeaveType} Request for {PersonName} ({StartDate} - {EndDate})
LeaveApplication UpdateApplicationEmail After Update no-reply@conprosoft.co.za no-reply@conprosoft.co.za; {PersonEmailAddress}; {SupervisorEmailAddress} {@BusinessRules_UserEmail} {Status}: {LeaveType} Request for {PersonName} ({StartDate} - {EndDate})
TimeSheet NewTimeCardEmail After Insert/Update no-reply@bmh-crp.co.za admin@bmh-crp.co.za; {SupervisorEmailAddress} {PersonEmailAddress} New Time Transaction: {PersonName} (Week: {TimesheetStartDate} through {Date07})
TimeSheet UpdateTimeCardEmail After Update no-reply@bmh-crp.co.za admin@bmh-crp.co.za; {PersonEmailAddress} {SupervisorEmailAddress} Time Transaction {Status}
TimeSheetHeader NewTimeCardEmail After Insert/Update no-reply@conprosoft.co.za admin@conprosoft.co.za; {SupervisorEmailAddress} {PersonEmailAddress} New Time Transaction: {PersonName} (Week: {TimesheetStartDate} through {Date07})
TimeSheetHeader UpdateTimeCardEmail After Update no-reply@conprosoft.co.za admin@conprosoft.co.za; {PersonEmailAddress} {SupervisorEmailAddress} Time Transaction {Status}
Requisition sendEmail_RequestApproval After Update no-reply@conprosoft.co.za {SupervisorEmailAddress}; finance@bmhafrica.co.za {RequestorEmailAddress}; no-reply@conprosoft.co.za Approval Requested - {RequisitionNumber}
Requisition sendEmail_Approved After Update no-reply@conprosoft.co.za {RequestorEmailAddress}; finance@bmhafrica.co.za {SupervisorEmailAddress}; no-reply@conprosoft.co.za {RequisitionNumber}: {RequisitionStatus}
PurchaseOrders sendEmail_PO After Update no-reply@conprosoft.co.za {SupplierEmail}; finance@bmhafrica.co.za {RequestorEmailAddress}; {ApprovedByPersonEmailAddress}; no-reply@conprosoft.co.za PURCHASE ORDER {PurchaseOrderNumber}
PurchaseOrders sendEmail_RequestApproval After Update no-reply@conprosoft.co.za {ApprovedByPersonEmailAddress}; finance@bmhafrica.co.za {RequestorEmailAddress}; no-reply@conprosoft.co.za Revision Approval Requested: {PurchaseOrderNumber} (Rev {RevisionNumber})
PurchaseOrders sendEmail_Approved After Update no-reply@conprosoft.co.za {ApprovedByPersonEmailAddress}; finance@bmhafrica.co.za {RequestorEmailAddress}; no-reply@conprosoft.co.za Revision Approval: {PurchaseOrderNumber} (Rev {RevisionNumber})
Payments (unnamed) After Insert no-reply@bmh-crp.co.za {PurchaseOrderSupplierEmail}; finance@bmhafrica.co.za {RequestorEmailAddress}; {IssuedByPersonEmailAddress}; no-reply@bmh-crp.co.za PAYMENT NOTIFICATION: {PurchaseOrderNumber}
Task Email New Task After Insert no-reply@bmh-crp.co.za {TaskOwnerEmailAddress}; {TaskAssignmentEmailAddress}; {SupplierEmail}; no-reply@bmh-crp.co.za Up to 5 participants + supervisor New Task "{TaskName}" due on {DueDate}
SubTask Email New Task After Insert no-reply@bmh-crp.co.za no-reply@bmh-crp.co.za; {ActivityOwnerEmailAddress}; {ActivityAssignmentEmailAddress}; {SupplierEmail} Up to 5 participants New Activity "{TaskName}" created for Task {TaskName1} due on {TaskDueDate}
IssueRegister IssueNew After Insert no-reply@bmh-crp.co.za {IssueLoggedByUserEmail}; {IssueAssignedToUserEmail}; no-reply@bmh-crp.co.za New Issue Lodged: N: {IssueNumber}, T: {IssueType}
IssueRegister IssueUpdated After Update no-reply@bmh-crp.co.za {IssueLoggedByUserEmail}; {IssueAssignedToUserEmail}; no-reply@bmh-crp.co.za Issue Updated: N: {IssueNumber}: T: {IssueType} - S: {Status}
IssueResponse ResponseNew After Insert no-reply@bmh-crp.co.za {IssueLoggedByUserEmail}; {IssueAssignedToUserEmail}; no-reply@bmh-crp.co.za New Response on Issue Nr: {IssueNumber}, Type: {IssueType}, Status: {IssueStatus}
IssueResponse ResponseUpdated After Update no-reply@bmh-crp.co.za {IssueLoggedByUserEmail}; {IssueAssignedToUserEmail}; no-reply@bmh-crp.co.za Response updated on Issue Nr: {IssueNumber}, Type: {IssueType}, Status: {IssueStatus}

Hardcoded Recipient Addresses

Several rules send to fixed addresses in addition to dynamic field-based recipients. These are embedded in the controller XML and must be updated directly in the XML if they need to change:

Address Used in
finance@bmhafrica.co.za PurchaseOrders, Requisition, Payments
admin@bmh-crp.co.za TimeSheet (Deprecated)
admin@conprosoft.co.za TimeSheetHeader
no-reply@conprosoft.co.za Most controllers (BCC/audit copy)
no-reply@bmh-crp.co.za Task, SubTask, IssueRegister, IssueResponse, Payments

Note: If the client's email domain or finance contact changes, these addresses must be updated in the relevant controller XML files. They are not configurable via web.config.


REST API (Engine Present — Not In Use)

The ConproSoft solution includes the Code On Time REST engine in App_Code/Services/Rest.*.cs. The engine is enabled in touch-settings.json:

"rest": {
  "enabled": true,
  "authorization": {
    "keys": [
      { "key": "{your-public-key}", "user": "admin" }
    ]
  }
}

Important: "enabled": true loads the REST middleware but does not expose any data. No controllers have been configured with REST-accessible views or data sources, so REST requests return empty results. The REST engine is not in active use.

The static API key in touch-settings.json should be rotated or removed before going live — see System Constants for details.


OAuth2 / Third-Party Identity (Not Used)

The file config/oauth2-schema.yaml defines an OAuth2 configuration schema supported by the framework, however, ConproSoft does not use third-party identity providers.

SMTP Integration

The main Email functionality is configured in web.config under <system.net><mailSettings>.

Usage Within the Application

Email actions are typically configured through controller actions (metadata in /app/controllers/*.xml).

The application uses the configured SMTP settings whenever an email action is triggered, e.g.:

  • Membership registration or password resets
  • Notifications triggered by custom business rules
  • Manually invoked “Send Email” actions in views

Other External Integrations

No hardcoded third-party APIs are exposed in the core project structure. Potential integration points include:

  • REST APIs

The App_Code/Services/Rest.* files provide generic REST endpoints that can be consumed by external systems or extended as needed. ConproSoft does not have this feature enabled.

  • OAuth2 / Third Party Identity Providers

The config/oauth2-schema.yaml file defines an OAuth2 schema that can be used if the application is extended to integrate with external identity providers. ConproSoft does not make use of 3rd party identity providers

A typical configuration looks like:

<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network" from="no-reply@your-domain">
      <network host="your-smtp-host"
               port="25"
               userName="your-smtp-username"
               password="your-smtp-password" />
    </smtp>
  </mailSettings>
</system.net>