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": trueloads 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.jsonshould 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>