Eclipse Admin Portal Configuration

Eclipse includes a highly configurable and extendable back office support portal. For details on features and functionality please refer to the Eclipse Admin Portal Guide.

There is a high degree of flexibility and configurability on the Eclipse Admin Portal. This ensures that the Admin Portal covers the wide range of Eclipse use cases but can also be configured as a fit for purpose user experience depending on the specific tenant use case.

Admin Portal Theme

Institutions and tenants can apply their own branding to the Eclipse admin portal as follows:

  1. Configure reverse proxy with URL rewriting to forward custom URL to Eclipse URL e.g. https://eclipse-portal-admin-sandbox.ukheshe.rocks/admin-portal/
  2. Configure public property public.institution.adminportal.<hostname> // i.e public.institution.adminportal.mycustomurl.com as follows:
ValueKeyExampleDescription
primaryButtonColorcolor code# F15A22Specifies the prime colour for primary buttons
primaryButtonTextColorcolor code# fffSpecifies the text colour for primary buttons
primaryHeaderBackgroundColourcolor code# 96a2b4Specifies header colour where Tenant and search is presented
actionButtonBackGroundColorcolor code# 00984ESpecifies edit and delete icon colour
menuActiveHoverFocusColorcolor code# F15A22Specifies the hover color when you select icon
textColorcolor code# 555Specificies the login page text colour
primarySubHeaderBackgroundColorcolor codetransparentSpecifices the tenant header background colour
primaryHeaderColorcolor code# fffSpecifies the main header colour where profile information is presented
primaryLeftSideBarColorcolor code# fffSpecifies the left menu colour where Tenant, KYC/KYB etc. is presented
primarySearchFilterBoxcolor code# fffSpecifies search box primary colour
primarySearchTextColorcolor code# 808080Specifies search box text colour
faviconBrandAdd value for base64 formatfavicon1It must be added in database
favTitleAdd valueMyCompanySpecifies the title of the page (will be shown in browser tabs)
tableCallOldRowColorcolor codef0f3fbSpecifies odd row colour in tables
tableCallEvenRowColorcolor codef0f3fbSpecifies even row colour in tables
logoadd value for base64 formatdata:image/png;base64,iVBORw0KGgoAA....Specifies the logo shown in the left panel
loginPageBackgroundImageadd value for base64 formatdata:image/png;base64,iVBORw0KGgoAA....Specifies the background image of the login page
profileAvtarIconadd value for base64 formatdata:image/png;base64,iVBORw0KGgoAA....Specifies the profile icon to be used

Admin Portal Emails

Eclipse allows tenants to send customised SMS and email notifications by configuring mustache templates and calling the notifications endpoint as documented here.

The Eclipse Admin Portal uses email notifications for:

  1. Onboarding new tenant admin users and providing a link to set the password
  2. Allow tenant admins to reset their passwords by receiving a link by email to set a new password.

By default these emails are controlled by the following global properties that define mustache templates:

  • mustache.email.admin.user
  • mustache.email.customer.password.reset

Institutions can override these properties and apply their own branding and content to these emails. e.g. Institution ABC has defined a custom Admin User Welcome Email in global property mustache.email.admin.user.ABC. If they set tenant config mustache.email.admin.user=mustache.email.admin.user.ABC for all their tenants then that email template will be used when adding admin users to those tenants.

Similarly institutions can define a custom Password Reset email in global property mustache.email.customer.password.reset.ABC. And by setting tenant config mustache.email.customer.password.reset=mustache.email.customer.password.reset.ABC on their tenants - this reset password email will be used for all admin users on those tenants.

Admin Portal Views

Institutions and tenants can configure the menu's and submenus shown in the admin portal for each role. This allows the admin portal, which is a general purpose admin console for all Eclipse capabilities, to be configured to be used as a fit for purposes admin portal for particular use cases, for example merchant management.

This is controlled by setting a global property: admin.portal.layout.{ROLE_OR_POSITION}.{tenantId}

Example portal layout for a TENANT_SYSTEM user:

{
      "tenantMenu": [
          {
            "id": "customers",
            "label": "Customers",
            "icon": "supervisor_account",
            "subMenu": [
              {
                "id": "customers_general",
                "label": "General",
                "icon": "assignment_ind"
              },
              {
                "id": "customers_addresses",
                "label": "Addresses",
                "icon": "location_on"
              },
              {
                "id": "customers_documents",
                "label": "Documents",
                "icon": "description"
              },
              {
                "id": "customers_devices",
                "label": "Devices",
                "icon": "devices"
              },
              {
                "id": "customers_attachments",
                "label": "Attachments",
                "icon": "attachment"
              },
              {
                "id": "customers_identity",
                "label": "Identity",
                "icon": "perm_identity"
              },
              {
                "id": "customers_kyc",
                "label": "KYC",
                "icon": "star_rate"
              },
              {
                "id": "customers_positions",
                "label": "Positions",
                "icon": "people_outline"
              },
              {
                "id": "customers_wallets",
                "label": "Wallets",
                "icon": "account_balance_wallet",
                "subMenu": [
                  {
                    "id": "customers_wallets_general",
                    "label": "General",
                    "icon": "account_balance_wallet"
                  },
                  {
                    "id": "customers_wallets_attachments",
                    "label": "Attachments",
                    "icon": "attachment"
                  },
                  {
                    "id": "customers_wallets_transaction_history",
                    "label": "Transaction History",
                    "icon": "compare_arrows"
                  },
                  {
                    "id": "customers_wallets_topups",
                    "label": "Topups",
                    "icon": "monetization_on"
                  },
                  {
                    "id": "customers_wallets_withdrawals",
                    "label": "Withdrawals",
                    "icon": "monetization_on"
                  },
                  {
                    "id": "customers_wallets_remittance",
                    "label": "Remittance",
                    "icon": "payments"
                  },
                  {
                    "id": "customers_wallets_qr_codes",
                    "label": "QRCodes",
                    "icon": "qr_code"
                  },
                  {
                    "id": "customers_wallets_reservations",
                    "label": "Reservations",
                    "icon": "stop"
                  },
                  {
                    "id": "customers_wallets_transfers",
                    "label": "Transfers",
                    "icon": "compare_arrows"
                  }, {
                    "id": "customers_wallets_audit_events",
                    "label": "Audit Events",
                    "icon": "history"
                  },
                  {
                    "id": "customers_wallets_cards",
                    "label": "Cards",
                    "icon": "credit_card"
                  }
                ]
              },
              {
                "id": "customers_cards",
                "label": "Cards",
                "icon": "credit_card"
              },
              {
                "id": "customers_payments",
                "label": "Payments",
                "icon": "attach_money"
              },
              {
                "id": "customers_cards_on_file",
                "label": "Cards On File",
                "icon": "card_membership"
              },
              {
                "id": "customers_audit_events",
                "label": "Audit Events",
                "icon": "history"
              },
              {
                "id": "customers_beneficiaries",
                "label": "Beneficiaries",
                "icon": "account_balance"
              },
              {
                "id": "customers_others",
                "label": "Others",
                "icon": "settings"
              }
            ]
          },
          {
            "id": "organisations",
            "label": "Organisations",
            "icon": "workspaces",
            "subMenu": [
              {
                "id": "organisations_general",
                "label": "General",
                "icon": "assignment_ind"
              },
              {
                "id": "organisations_addresses",
                "label": "Addresses",
                "icon": "location_on"
              },
              {
                "id": "organisations_documents",
                "label": "Documents",
                "icon": "description"
              },
              {
                "id": "organisations_devices",
                "label": "Devices",
                "icon": "devices"
              },
              {
                "id": "organisations_wallets",
                "label": "Wallets",
                "icon": "account_balance_wallet",
                "subMenu": [
                  {
                    "id": "organisations_wallets_general",
                    "label": "General",
                    "icon": "account_balance_wallet"
                  },
                  {
                    "id": "organisations_wallets_attachments",
                    "label": "Attachments",
                    "icon": "attachment"
                  },
                  {
                    "id": "organisations_wallets_transaction_history",
                    "label": "Transaction History",
                    "icon": "compare_arrows"
                  },
                  {
                    "id": "organisations_wallets_topups",
                    "label": "Topups",
                    "icon": "monetization_on"
                  },
                  {
                    "id": "organisations_wallets_withdrawals",
                    "label": "Withdrawals",
                    "icon": "monetization_on"
                  },
                  {
                    "id": "organisations_wallets_remittance",
                    "label": "Remittance",
                    "icon": "payments"
                  },
                  {
                    "id": "organisations_wallets_qr_codes",
                    "label": "QRCodes",
                    "icon": "qr_code"
                  },
                  {
                    "id": "organisations_wallets_reservations",
                    "label": "Reservations",
                    "icon": "stop"
                  },
                  {
                    "id": "organisations_wallets_transfers",
                    "label": "Transfers",
                    "icon": "compare_arrows"
                  }, 
                  {
                    "id": "organisations_wallets_audit_events",
                    "label": "Audit Events",
                    "icon": "history"
                  },
                  {
                    "id": "organisations_wallets_cards",
                    "label": "Cards",
                    "icon": "credit_card"
                  }
                ]
              },
              {
                "id": "organisations_attachments",
                "label": "Attachments",
                "icon": "attachment"
              },
              {
                "id": "organisations_terminals",
                "label": "Terminals",
                "icon": "phonelink_ring"
              },
              {
                "id": "organisations_kyb",
                "label": "KYB",
                "icon": "star_rate"
              },
              {
                "id": "organisations_positions",
                "label": "Positions",
                "icon": "people_outline"
              }
            ]
          },
          {
            "id": "tenant_wallets",
            "label": "Tenant Wallets",
            "icon": "account_balance_wallet",
            "subMenu": [
              {
                "id": "tenant_wallets_general",
                "label": "General",
                "icon": "account_balance_wallet"
              },
              {
                "id": "tenant_wallets_attachments",
                "label": "Attachments",
                "icon": "attachment"
              },
              {
                "id": "tenant_wallets_transaction_history",
                "label": "Transaction History",
                "icon": "compare_arrows"
              },
              {
                "id": "tenant_wallets_topups",
                "label": "Topups",
                "icon": "monetization_on"
              },
              {
                "id": "tenant_wallets_withdrawals",
                "label": "Withdrawals",
                "icon": "monetization_on"
              },
              {
                "id": "tenant_wallets_remittance",
                "label": "Remittance",
                "icon": "payments"
              },
              {
                "id": "tenant_wallets_qr_codes",
                "label": "QRCodes",
                "icon": "qr_code"
              },
              {
                "id": "tenant_wallets_reservations",
                "label": "Reservations",
                "icon": "stop"
              },
              {
                "id": "tenant_wallets_transfers",
                "label": "Transfers",
                "icon": "compare_arrows"
              }, {
                "id": "tenant_wallets_audit_events",
                "label": "Audit Events",
                "icon": "history"
              }
            ]
          },
          {
            "id": "system_wallets",
            "label": "System Wallets",
            "icon": "settings",
            "subMenu": [
              {
                "id": "system_wallets_general",
                "label": "General",
                "icon": "account_balance_wallet"
              },
              {
                "id": "system_wallets_attachments",
                "label": "Attachments",
                "icon": "attachment"
              },
              {
                "id": "system_wallets_transaction_history",
                "label": "Transaction History",
                "icon": "compare_arrows"
              },
              {
                "id": "system_wallets_topups",
                "label": "Topups",
                "icon": "monetization_on"
              },
              {
                "id": "system_wallets_withdrawals",
                "label": "Withdrawals",
                "icon": "monetization_on"
              },
              {
                "id": "system_wallets_remittance",
                "label": "Remittance",
                "icon": "payments"
              },
              {
                "id": "system_wallets_qr_codes",
                "label": "QRCodes",
                "icon": "qr_code"
              },
              {
                "id": "system_wallets_reservations",
                "label": "Reservations",
                "icon": "stop"
              },
              {
                "id": "system_wallets_transfers",
                "label": "Transfers",
                "icon": "compare_arrows"
              }, {
                "id": "system_wallets_audit_events",
                "label": "Audit Events",
                "icon": "history"
              }
            ]
          },
          {
            "id": "wallet_types",
            "label": "Wallet Types",
            "icon": "account_balance_wallet"
          },
          {
            "id": "admin_users",
            "label": "Admin Users",
            "icon": "bar_chart"
          },
          {
            "id": "configuration",
            "label": "Configuration",
            "icon": "settings"
          },
          {
            "id": "reports",
            "label": "Reports",
            "icon": "receipt"
          },
          {
            "id": "wallet_transfer",
            "label": "Wallet Transfer",
            "icon": "receipt"
          },                                                                                                                                                                                                                                                    
          {
            "id": "search_item",
            "label": "Search Item",
            "icon": "youtube_searched_for"
          }
      ]
    }

Merchant Management Portal

A common use case for the Eclipse Admin Portal is for merchant managers to create and onboard merchants and as a self service portal for merchants to view and manage their transactions. Through simple configuration the Eclipse Admin Portal can have:

  1. Configured customised views relevant only to merchant managers or merchants - see Customising Admin Portal Views for more details.
  2. A configured merchant managment wizard that can easily onboard a merchant and do all the necessary configurations to accept payments
  3. A configured new team members wizard for merchants to easily manage members of their organisation

Merchant Onboarding Wizard

Through simple configuration a merchant onboarding wizard can be added to the Organisations tab. This wizard can be configured to cover the range of regional requirements for the information to be gathered and configured to onboard a merchant:

Merchant onboarding wizard

Merchant onboarding wizard

This is controlled by setting global property: merchant.onboarding.wizard.config.{tenantId}

Example merchant onboarding configuration:

{
  "merchant_details_step": {
    "title": "Merchant details",
    "fields": [
      {
        "key": "name",
        "label": "Name",
        "type": "text",
        "isRequired": true,
        "maxLength": 50,
        "minLength": 3
      },
      {
        "key": "tradingName",
        "label": "Trading Name",
        "type": "text",
        "maxLength": 50,
        "minLength": 3
      },
      {
        "key": "taxNumber",
        "label": "Tax Number",
        "type": "number",
        "maxLength": 20,
        "minLength": 3
      },
      {
        "key": "categoryCode",
        "label": "Merchant Category Code",
        "type": "number"
      },
      {
        "key": "phone1",
        "label": "Phone",
        "type": "number",
        "isRequired": true
      }
    ]
  },
  "merchant_address_step": {
    "title": "Merchant address",
    "fields": [
      {
        "key": "addressType",
        "label": "Address Type",
        "type": "select",
        "isRequired": true,
        "options": [
          "BRANCH",
          "HEADQUARTERS",
          "OPERATING",
          "PHYSICAL",
          "POSTAL",
          "PRIMARY",
          "REGISTERED"
        ]
      },
      {
        "key": "line1",
        "label": "Line1",
        "type": "text",
        "isRequired": true,
        "maxLength": 150,
        "minLength": 3
      },
      {
        "key": "city",
        "label": "City",
        "type": "text",
        "isRequired": true,
        "maxLength": 20,
        "minLength": 2
      },
      {
        "key": "state",
        "label": "State",
        "type": "text",
        "isRequired": true,
        "maxLength": 50,
        "minLength": 3
      },
      {
        "key": "country",
        "label": "Country",
        "type": "auto",
        "isRequired": true
      }
    ]
  },
  "qr_details_steps": {
    "title": "Enable QR",
    "walletTypeId": 6090,
    "toggleFieldsSwitch": {
      "key": "enableQR",
      "label": "Enable QR payments",
      "type": "boolean",
      "isRequired": true
    },
    "fields": [
      {
        "key": "type",
        "label": "QR type",
        "type": "select",
        "options": [
          "GLOBAL_EMVCO"
        ],
        "isRequired": true
      },
      {
        "key": "qrId",
        "label": "QR ID",
        "type": "select",
        "options": [
          "zw.co.zimswitch.qr"
        ],
        "isRequired": true
      },
      {
        "key": "terminalId",
        "label": "Terminal ID",
        "type": "text",
        "isRequired": true
      },
      {
        "key": "notificationUrl",
        "label": "Notification URL",
        "type": "text"
      }
    ]
  },
  "merchant_admin_user_details_step": {
    "title": "Merchant admin details",
    "fields": [
      {
        "key": "firstName",
        "label": "First Name",
        "type": "text",
        "isRequired": true,
        "maxLength": 20,
        "minLength": 2
      },
      {
        "key": "lastName",
        "label": "Last Name",
        "type": "text",
        "isRequired": true,
        "maxLength": 20,
        "minLength": 2
      },
      {
        "key": "email",
        "label": "Email address",
        "type": "text",
        "isRequired": true,
        "maxLength": 50,
        "minLength": 10
      }
    ]
  }
}

📘

Note

The merchant onboarding wizard can include the creation of a customer with a MANAGER position in that organisation - essentially onboarding the merchant user.

Any CUSTOMER with a MANAGER position in an organisation is able to access to the admin portal.

Organisation Team Member Wizard

Through simple configuration a new team member wizard can be added to the Organisation Positions tab:

New Team Member Wizard

New Team Member Wizard

This is controlled by setting global property: organisation.team.wizard.enabled.{tenantId}

Example team member configuration:

{
  "onboardIdentity": "onboarding_user",
  "onboardCredential": "ABC",
  "title": "Team member details",
  "fields": [
    {
      "key": "firstName",
      "label": "First Name",
      "type": "text",
      "isRequired": true,
      "maxLength": 20,
      "minLength": 2
    },
    {
      "key": "lastName",
      "label": "Last Name",
      "type": "text",
      "isRequired": true,
      "maxLength": 20,
      "minLength": 2
    },
    {
      "key": "email",
      "label": "Email address",
      "type": "text",
      "isRequired": true,
      "maxLength": 50,
      "minLength": 10
    }
  ]
}

📘

Note

By default team members are added as customers with a MANAGER position in the organisation.