Backend Team

RollPay CPanel

Active Module

{{ vm.activeMenuTitle() }} Signed in as {{ vm.currentUser.loginName }} ({{ vm.currentUser.loginType }})

RollPay Client Operations

{{ vm.activeMenuTitle() }}

Loading data...
{{ vm.errorMessage }}

Client Registry

Company Master Table

Current view: {{ vm.activeFilterLabel() }}

ID Company Alias Town Product Price List Website Status
{{ company.companyId }} {{ company.companyName }} {{ company.domainName || 'No domain configured' }} {{ company.aliasName || '-' }} {{ company.town || '-' }} {{ company.productName || '-' }} {{ company.priceListName || ('#' + company.priceListId) }} {{ company.websiteLogoPath ? 'Logo' : 'No Logo' }} {{ company.websiteTestimonial ? 'Testimonial saved' : 'No testimonial' }} {{ company.isDeleted ? 'Deleted' : 'Active' }}
No companies matched the current filter and search.

Editor

{{ vm.isCreateMode ? 'Create Client Record' : 'Company Detail Panel' }}

{{ vm.isCreateMode ? 'Add a new RollPay client company record.' : 'Update selected client settings and save changes directly to company master.' }}

{{ vm.successMessage }}
Price List
Website Customer Logo
{{ vm.form.companyName }} logo preview
{{ vm.selectedWebsiteLogoFile ? vm.selectedWebsiteLogoFile.name : (vm.form.websiteLogoPath ? 'Current logo is active on the website.' : 'Upload JPG, PNG, WEBP or GIF up to 2 MB.') }}

Backend Notes

Company Notes Desk

All company notes in one table. Use Add Note to open the drawer and create a new remark.

{{ vm.successMessage }}
Company Name Note By Note Date & Time Note Added Action
{{ note.companyName || note.companyId }} {{ note.companyId }} {{ note.addedByLoginName || '-' }} {{ note.noteDateTime | date:'dd-MMM-yyyy HH:mm:ss' }} {{ note.noteRemarks }}
No company notes matched the current search.
No companies are available to attach notes to yet.

Add Note

New Company Note

Select company name and add the backend note or reminder from this drawer.

Company Name
Every new note triggers an email notification to support@rollpe.com.

Website Leads

Enquiries

Contact page enquiries captured from the RollPay v2 website. Open a row to update status and add manager comments.

{{ vm.successMessage }}
Received Customer Company Requirement Status Latest Update Action
#{{ item.websiteEnquiryId }} {{ item.createdOn | date:'dd-MMM-yyyy HH:mm:ss' }} {{ item.personName || '-' }} {{ item.emailAddress || '-' }} {{ item.mobileNo || '-' }} {{ item.companyName || '-' }} {{ item.designation || '-' }} {{ item.subject || 'RollPay demo request' }} {{ item.message || '-' }} {{ vm.enquiryStatusLabel(item.enquiryStatus) }} {{ vm.latestWebsiteEnquiryComment(item).commentedByLoginName }} {{ vm.latestWebsiteEnquiryComment(item).commentText }} {{ vm.latestWebsiteEnquiryComment(item).commentDateTime | date:'dd-MMM-yyyy HH:mm' }} No manager comment yet.
No enquiries matched the current search.

Enquiry Detail

{{ vm.websiteEnquiryForm.personName || 'Website Enquiry' }}

{{ vm.websiteEnquiryForm.companyName || 'No company provided' }} ยท {{ vm.websiteEnquiryForm.createdOn | date:'dd-MMM-yyyy HH:mm' }}

Name {{ vm.websiteEnquiryForm.personName || '-' }}
Email {{ vm.websiteEnquiryForm.emailAddress || '-' }}
Mobile {{ vm.websiteEnquiryForm.mobileNo || '-' }}
Status {{ vm.enquiryStatusLabel(vm.websiteEnquiryForm.enquiryStatus) }}

Original Requirement

{{ vm.websiteEnquiryForm.subject || 'RollPay demo request' }}

{{ vm.websiteEnquiryForm.message || '-' }}

Saving a comment updates the enquiry status and emails the note to ceo@rollpay.in.

Comment History

Timestamped manager comments and CEO email delivery status.

{{ comment.commentedByLoginName || '-' }} {{ comment.commentDateTime | date:'dd-MMM-yyyy HH:mm' }}

{{ comment.commentText }}

No manager comments have been added yet.

Issue Queue

Bug Tracker Desk

{{ vm.successMessage }}
Bug Tenant Company Priority Bug From User Added On Created By Remarks Latest Chat
#{{ bug.companyBugTrackerId }} {{ vm.companyBugAttachmentCount(bug) }} {{ bug.tenantCompanyName || bug.tenantCompanyId || '-' }} {{ bug.tenantCompanyId || '-' }} | {{ bug.companyName || bug.companyId || '-' }} {{ vm.bugPriorityMeta(bug.priority).label }} {{ bug.bugFromUserName || '-' }} {{ bug.bugAddedDateTime | date:'dd-MMM-yyyy HH:mm' }} {{ bug.createdByLoginName || '-' }} Login ID {{ bug.createdByLoginId || '-' }} {{ bug.bugRemarks }}
No {{ vm.isCompanyBugClosedView() ? 'closed' : 'open' }} bugs matched the current search.

Bug Detail

{{ vm.isCompanyBugCreateMode ? 'Create Bug' : ('Bug #' + vm.companyBugForm.companyBugTrackerId) }}

{{ vm.isCompanyBugCreateMode ? 'Select tenant company and save the issue first. Workflow flags can be updated directly from the table.' : 'Review bug details and continue the team chat history below.' }}

Tenant Company*
Priority*

Attachment URLs

Paste shared issue screenshots, videos, OneDrive links, or any external reference URLs for this bug.

Created by {{ vm.companyBugForm.createdByLoginName || '-' }} (Login ID {{ vm.companyBugForm.createdByLoginId || '-' }}) on {{ vm.companyBugForm.bugAddedDateTime | date:'dd-MMM-yyyy HH:mm' }}.

Bug Chat

Bug #{{ vm.companyBugForm.companyBugTrackerId }} Conversation

Continue the bug discussion in a dedicated chat drawer instead of working at the bottom of the detail form.

{{ vm.companyBugForm.tenantCompanyName || vm.companyBugForm.tenantCompanyId || ('Bug #' + vm.companyBugForm.companyBugTrackerId) }} {{ vm.companyBugForm.companyName || vm.companyBugForm.companyId || '-' }} {{ (vm.companyBugForm.comments || []).length }} comments
{{ comment.commentedByLoginName || 'Unknown User' }} {{ comment.commentDateTime | date:'dd-MMM-yyyy HH:mm:ss' }}

{{ comment.commentText }}

No comments added yet. Start the discussion below.

Client Approval Desk

Ticketing

Capture client instructions, send approval mail, and retain the full decision trail for future checks.

{{ vm.successMessage }}
Ticket Tenant Company Requested By Work Request Attachments Status Approval Email
#{{ ticket.companyTicketId }} {{ ticket.requestReceivedOn | date:'dd-MMM-yyyy HH:mm' }} {{ ticket.tenantCompanyName || ticket.tenantCompanyId || '-' }} {{ ticket.tenantCompanyId || '-' }} | {{ ticket.companyName || ticket.companyId || '-' }} {{ ticket.requestedByClientName || '-' }} Source: {{ vm.ticketRequestSourceLabel(ticket.requestSource) }} {{ ticket.workSubject || '-' }} {{ ticket.workDetails || '-' }} No attachments {{ vm.ticketStatusLabel(ticket.ticketStatus) }} {{ (ticket.recipients || []).length }} email rows {{ vm.ticketApprovalStatusLabel(ticket.clientApprovalStatus) }} {{ ticket.clientRespondedOn | date:'dd-MMM-yyyy HH:mm' }} {{ ticket.clientRespondedByLoginName }}
{{ ticket.approvalEmailSentOn | date:'dd-MMM-yyyy HH:mm' }} -
No tickets matched the current search.

Ticket Detail

{{ vm.isCompanyTicketCreateMode ? 'Create Ticket' : ('Ticket #' + vm.companyTicketForm.companyTicketId) }}

{{ vm.isCompanyTicketCreateMode ? 'Document the client request first, then send the approval email from the saved ticket.' : 'Update the ticket, review the approval state, and keep the request trail complete.' }}

Tenant Company
Request Source

Email Recipients

Add To and CC email rows for the approval mail.

Loading tenant logins...
No tenant logins were found for this company. You can still type the login name and email manually.
Tenant Login

Attachment URLs

Paste shared OneDrive links or other external URLs. File upload is not needed here.

Approval Summary

Current approval status from the client-side decision page.

Approval Status {{ vm.ticketApprovalStatusLabel(vm.companyTicketForm.clientApprovalStatus) }} {{ vm.companyTicketForm.clientRespondedOn | date:'dd-MMM-yyyy HH:mm:ss' }}
Approval Mail {{ vm.companyTicketForm.approvalEmailSentOn ? 'Sent' : 'Not Sent' }} {{ vm.companyTicketForm.approvalEmailSentOn ? (vm.companyTicketForm.approvalEmailSentOn | date:'dd-MMM-yyyy HH:mm:ss') : 'Send from here when ready.' }}
Responded By {{ vm.companyTicketForm.clientRespondedByLoginName || '-' }} {{ vm.companyTicketForm.clientResponseRemarks || 'No client response remarks yet.' }}

Audit Trail

Saved history of create, update, login, and response events.

{{ audit.auditSummary || audit.auditType || 'Activity' }} {{ audit.auditDateTime | date:'dd-MMM-yyyy HH:mm:ss' }}
{{ audit.auditType || 'log' }} By {{ audit.auditByLoginName }} Client Login: {{ audit.tenantLoginName }}

{{ audit.auditRemarks }}

No audit history is available for this ticket yet.
Created by {{ vm.companyTicketForm.createdByLoginName || '-' }} on {{ vm.companyTicketForm.createdOn | date:'dd-MMM-yyyy HH:mm:ss' }}. Last updated by {{ vm.companyTicketForm.updatedByLoginName || '-' }} on {{ vm.companyTicketForm.updatedOn | date:'dd-MMM-yyyy HH:mm:ss' }}.

Client Onboarding

Onboarding Control Desk

Last Sync {{ vm.latestCompanyMasterCrossSync() ? (vm.latestCompanyMasterCrossSync().lastSyncedOn | date:'dd-MMM-yyyy HH:mm') : '-' }} {{ vm.latestCompanyMasterCrossSync() ? ((vm.latestCompanyMasterCrossSync().companyName || vm.latestCompanyMasterCrossSync().companyId) + ' synced latest.') : 'Cross table has not been populated yet.' }}
{{ vm.successMessage }}
Company ID Company Name Tenant Company ID Tenant Company Name Last Synced On
{{ item.companyId }} Cross {{ item.companyMasterCrossId }} {{ item.companyName || '-' }} {{ item.tenantCompanyId || '-' }} {{ item.tenantCompanyName || '-' }} {{ item.lastSyncedOn | date:'dd-MMM-yyyy HH:mm:ss' }}
No cross-table rows matched the current search.
Company Tenant Company Email Count Headings
{{ item.companyName || item.companyId }} {{ item.companyId }} {{ item.tenantCompanyName || '-' }} {{ item.tenantCompanyId || '-' }} {{ vm.onboardingEmailContactCount(item.companyMasterCrossId) }} {{ vm.onboardingEmailHeadingSummary(item.companyMasterCrossId) }}
{{ vm.onboardingEmailContactsMissingOnly ? 'No tenant-company rows without contact information matched the current search.' : 'No tenant-company rows matched the current search.' }}
Checklist Description Order Status Action
{{ item.checklistName }} System checklist {{ item.checklistDescription || '-' }} {{ item.displayOrder }} {{ item.isActive ? 'Active' : 'Inactive' }}
No onboarding checklist rows matched the current search.
Client / Progress / Tenant
{{ checklist.checklistName }} {{ checklist.checklistDescription }}
{{ row.companyName || row.companyId }} {{ row.companyId }}
{{ vm.onboardingRowProgress(row).percent }}% {{ vm.onboardingRowProgress(row).completedCount }}/{{ vm.onboardingRowProgress(row).totalCount }}
{{ row.tenantCompanyName || row.tenantCompanyId }} {{ row.tenantCompanyId }}
{{ vm.onboardingStatusMeta(vm.getMatrixStatus(row, checklist.onboardingChecklistId).onboardingStatus).icon }}
By {{ vm.getMatrixStatus(row, checklist.onboardingChecklistId).updatedByLoginName }} {{ vm.getMatrixStatus(row, checklist.onboardingChecklistId).statusDateTime | date:'dd-MMM-yyyy HH:mm' }} {{ vm.getMatrixStatus(row, checklist.onboardingChecklistId).fetchedSummary }} Fetched on {{ vm.getMatrixStatus(row, checklist.onboardingChecklistId).lastTenantFetchedOn | date:'dd-MMM-yyyy HH:mm' }} {{ vm.getMatrixStatus(row, checklist.onboardingChecklistId).statusRemarks }}
{{ vm.onboardingChecklistStatusFilter === 'pending' ? 'No pending onboarding checklist rows matched the current search.' : (vm.onboardingChecklistStatusFilter === 'not required' ? 'No not-required onboarding checklist rows matched the current search.' : 'No onboarding matrix rows matched the current search.') }}
Checklist Pending Data Pending Open Total Companies
{{ item.checklistName }} {{ item.checklistDescription }} {{ item.pendingCount }} {{ item.dataPendingCount }} {{ item.openCount }} {{ item.openCount }} companies Pending and data-pending client rows
No pending onboarding checklist report rows matched the current search.
Checklist Company Tenant Requested By Requested Slot Status Meeting Link Remarks Action
{{ item.checklistName || '-' }} Request #{{ item.companyOnboardingMeetingRequestId }} {{ item.companyName || item.companyId || '-' }} {{ item.companyId || '-' }} {{ item.tenantCompanyName || item.tenantCompanyId || '-' }} {{ item.tenantCompanyId || '-' }} {{ item.requesterName || '-' }} {{ item.requesterEmail || '-' }} {{ item.requestedMeetingDateTime | date:'dd-MMM-yyyy HH:mm' }} Booked from public scheduling page {{ item.requestStatusLabel || item.requestStatus || '-' }} {{ item.supportHandledByLoginName }} on {{ item.supportHandledOn | date:'dd-MMM-yyyy HH:mm' }} Open Meeting Link - Sent {{ item.meetingLinkSentOn | date:'dd-MMM-yyyy HH:mm' }} Client: {{ item.clientRemarks || '-' }} Support: {{ item.supportRemarks || '-' }}
No onboarding meeting requests matched the current search.

{{ quadrant.title }}

{{ quadrant.companies.length }} Parties

{{ quadrant.description }}

{{ company.companyName || company.companyId }} {{ company.companyId }}
{{ company.progressPercent }}%
Child Companies: {{ company.childCount }} Completed Checklists: {{ company.completedChecklistCount }}
Salary: {{ company.lastSalaryDate | date:'dd-MMM-yyyy' }} Attendance: {{ company.lastAttendanceDate | date:'dd-MMM-yyyy' }} Asset: {{ company.lastAssetDate | date:'dd-MMM-yyyy' }} Uniform: {{ company.lastUniformDate | date:'dd-MMM-yyyy' }} No tenant activity captured yet.
No companies are currently falling into this quadrant.

Onboarding Detail

{{ vm.onboardingSelectedRowDetail ? (vm.onboardingSelectedRowDetail.tenantCompanyName || vm.onboardingSelectedRowDetail.tenantCompanyId || ('Cross ' + vm.onboardingSelectedRowDetail.companyMasterCrossId)) : 'Select Client Row' }}

{{ vm.onboardingSelectedRowDetail ? (vm.onboardingTab === 'email-contacts' ? 'Manage onboarding recipient groups and multiple email IDs for this tenant company from one focused panel.' : 'Review checklist progress, latest remarks, and work through comments or history from one focused panel.') : 'Select a row from the current onboarding tab to open the focus panel.' }}

Select any onboarding row to keep the table on the left and the working detail on the right.
Company {{ vm.onboardingSelectedRowDetail.companyName || vm.onboardingSelectedRowDetail.companyId || '-' }} {{ vm.onboardingSelectedRowDetail.companyId || '-' }}
Tenant {{ vm.onboardingSelectedRowDetail.tenantCompanyName || vm.onboardingSelectedRowDetail.tenantCompanyId || '-' }} {{ vm.onboardingSelectedRowDetail.tenantCompanyId || '-' }}
Cross ID #{{ vm.onboardingSelectedRowDetail.companyMasterCrossId }} {{ vm.onboardingSelectedRowDetail.lastSyncedOn ? ('Synced ' + (vm.onboardingSelectedRowDetail.lastSyncedOn | date:'dd-MMM-yyyy HH:mm')) : 'Sync not available' }}

Saved Contact Emails

Use headings like HR Managers, Accounts Team, Owner, or any custom group you need for onboarding communication.

Total Active Emails {{ vm.onboardingEmailContactsForSelectedRow().length }} {{ vm.onboardingEmailHeadingSummary(vm.selectedOnboardingCompanyMasterCrossId) }}
Heading Contact Person Email Mobile Order Action
{{ contact.contactHeading }} {{ contact.remarks }} {{ contact.contactPersonName || '-' }} {{ contact.emailAddress }} {{ contact.mobileNo || '-' }} {{ contact.displayOrder }}
No contact emails have been added for this tenant company yet.

{{ vm.isOnboardingEmailContactCreateMode ? 'Add Contact Email' : 'Edit Contact Email' }}

Each row stores one email ID under a reusable heading, so we can target the right people later without changing the schema again.

Saving against {{ vm.onboardingSelectedRowDetail.tenantCompanyName || vm.onboardingSelectedRowDetail.tenantCompanyId || '-' }} (Cross #{{ vm.onboardingSelectedRowDetail.companyMasterCrossId }}).
{{ vm.onboardingRowProgress(vm.onboardingSelectedRowDetail).percent }}% {{ vm.onboardingRowProgress(vm.onboardingSelectedRowDetail).completedCount }}/{{ vm.onboardingRowProgress(vm.onboardingSelectedRowDetail).totalCount }} checklists done
{{ checklist.checklistName }} {{ checklist.checklistDescription }}
{{ vm.onboardingStatusMeta(vm.getMatrixStatus(vm.onboardingSelectedRowDetail, checklist.onboardingChecklistId).onboardingStatus).label }}
{{ vm.onboardingStatusMeta(vm.getMatrixStatus(vm.onboardingSelectedRowDetail, checklist.onboardingChecklistId).onboardingStatus).icon }}
By {{ vm.getMatrixStatus(vm.onboardingSelectedRowDetail, checklist.onboardingChecklistId).updatedByLoginName }} {{ vm.getMatrixStatus(vm.onboardingSelectedRowDetail, checklist.onboardingChecklistId).statusDateTime | date:'dd-MMM-yyyy HH:mm' }} {{ vm.getMatrixStatus(vm.onboardingSelectedRowDetail, checklist.onboardingChecklistId).fetchedSummary }} Fetched on {{ vm.getMatrixStatus(vm.onboardingSelectedRowDetail, checklist.onboardingChecklistId).lastTenantFetchedOn | date:'dd-MMM-yyyy HH:mm' }} {{ vm.getMatrixStatus(vm.onboardingSelectedRowDetail, checklist.onboardingChecklistId).statusRemarks }}
{{ vm.onboardingChecklistStatusFilter === 'pending' ? 'No pending checklist items remain for this client row.' : (vm.onboardingChecklistStatusFilter === 'not required' ? 'No not-required checklist items remain for this client row.' : 'No active onboarding checklist columns are available yet.') }}

Checklist Editor

{{ vm.isOnboardingChecklistCreateMode ? 'Add Checklist Item' : 'Edit Checklist Item' }}

Checklist columns here are common and will appear for all child companies in the onboarding status matrix.

This is a system checklist. Its name stays fixed, but you can still change its display order.

Pricing Registry

Price List Table

Current view: {{ vm.activePriceListFilterLabel() }}

ID Name Year Month Per HR Setup Fee SMS Status
{{ priceList.priceListId }} {{ priceList.priceListName }} WA {{ priceList.whatsappCharge }} | GB {{ priceList.gbCharge }} | TrackPay {{ priceList.trackPayCost }} | TaskPay {{ priceList.taskPay }} {{ priceList.priceListYear }} {{ priceList.priceListMonth }} {{ priceList.perHr }} {{ priceList.setupFee }} {{ priceList.smsCharge }} {{ priceList.isDeleted ? 'Deleted' : 'Active' }}
No price lists matched the current filter and search.

Editor

{{ vm.isPriceListCreateMode ? 'Create Price List' : 'Price List Detail Panel' }}

{{ vm.isPriceListCreateMode ? 'Add a new pricing master record.' : 'Update selected price-list settings and save changes.' }}

{{ vm.successMessage }}

Quote Registry

Quote Master Table

Current view: {{ vm.activeQuoteFilterLabel() }}

Quote No Rev Quote Date Company Price List Commercials Status Remarks Action
{{ quote.quoteNo }} {{ quote.revisionNo > 0 ? ('Rev ' + quote.revisionNo) : 'Original' }} Series RP/{{ quote.quoteSeriesNo || quote.quoteNo }} {{ quote.quoteDateTime | date:'dd-MMM-yyyy HH:mm' }} {{ quote.companyName }} {{ quote.customerNumber || quote.emailId || 'No contact captured' }} {{ quote.basePriceListName || ('#' + quote.basePriceListId) }} Setup {{ quote.quotedSetupFee }} Per HR {{ quote.quotedPerHr }} | TrackPay {{ quote.quotedTrackPayCost }} | TaskPay {{ quote.quotedTaskPay }} {{ quote.quoteStatus || (quote.isDeleted ? 'Deleted' : 'Open') }} {{ quote.backendRemarks || 'No remarks' }}
No quotes matched the current filter and search.

Editor

{{ vm.isQuoteCreateMode ? (vm.isQuoteRevisionMode ? 'Create Quote Revision' : 'Create Quote') : 'Quote Detail Panel' }}

{{ vm.isQuoteCreateMode ? (vm.isQuoteRevisionMode ? 'Create a revision record while keeping the original quotation unchanged.' : 'Create a commercial proposal for a new client.') : 'Update the selected quote and preview the offer sheet.' }}

{{ vm.successMessage }}
Quote Status
Base Price List
Charge Head Master Quoted
{{ row.label }} {{ row.unit }} Save {{ vm.quoteDiscountAmount(row) | number:2 }}
Asset Commercials
Charge Head Master Quoted
{{ row.label }} {{ row.unit }} Save {{ vm.quoteDiscountAmount(row) | number:2 }}

Estimate Registry

Estimate Master Table

Current view: {{ vm.activeEstimateFilterLabel() }}

Estimate No Quote Ref Date Party Employees One-Time Monthly Status Action
{{ estimate.estimateNo }} {{ estimate.quoteNo ? ('RP/' + estimate.quoteNo) : '-' }} {{ estimate.estimateDateTime | date:'dd-MMM-yyyy HH:mm' }} {{ estimate.companyName }} {{ estimate.contactName || estimate.emailId || 'No contact captured' }} {{ estimate.totalEmployees }} {{ estimate.oneTimeTotal | number:2 }} {{ estimate.monthlyTotal | number:2 }} {{ estimate.isDeleted ? 'Deleted' : 'Active' }}
No estimates matched the current filter and search.

Editor

{{ vm.isEstimateCreateMode ? 'Create Estimate' : 'Estimate Detail Panel' }}

{{ vm.isEstimateCreateMode ? 'Prepare a client estimate from an existing quotation.' : 'Update the selected estimate and send the estimate sheet.' }}

{{ vm.successMessage }}
Quote Reference (Optional)
One-Time Total {{ vm.estimateOneTimeTotal() | number:2 }}
Monthly Total {{ vm.estimateMonthlyTotal() | number:2 }}

Device Registry

Device Status Table

Read-only view of all RollPay devices. Devices mapped to companies are protected from deletion.

Sort By
{{ vm.successMessage }}
Device ID Device Name Connection Last Update Action
{{ device.deviceId }} {{ device.deviceName || '-' }} {{ vm.isDeviceConnected(device) ? 'Connected' : 'Disconnected' }} {{ device.lastUpdateTime | date:'dd-MMM-yyyy HH:mm:ss' }} -
No devices matched the current search.

Company Device Registry

Company Device Table

Read-only mapping view of companies and their devices. Delete removes only the mapping row.

{{ vm.successMessage }}
Action
{{ item.cdId }} {{ item.companyId }} {{ item.companyName || '-' }} {{ item.deviceId }} {{ item.deviceName || '-' }} {{ vm.isDeviceConnected(item) ? 'Connected' : 'Disconnected' }} -
No company device mappings matched the current search.

Tenant Diagnostics

Error Logs

Admin-only view of active company dbo.tblerror records and latest database summaries.

Fetched {{ vm.tenantErrorLogDashboard.successfulCompanyCount || 0 }} of {{ vm.tenantErrorLogDashboard.activeCompanyCount || 0 }} active companies on {{ vm.tenantErrorLogDashboard.fetchedOn | date:'dd-MMM-yyyy HH:mm:ss' }}
{{ vm.successMessage }}
{{ vm.tenantErrorLogFailures.length }} company log fetch{{ vm.tenantErrorLogFailures.length === 1 ? '' : 'es' }} failed. Search or export still uses the companies that loaded successfully.
Loading tenant error logs from active company databases...
Deleting tenant error logs from active company databases...
Company Error ID Error Datetime Source Error Message Inner Message Stack Trace Action
{{ item.companyName || item.companyId || '-' }} {{ item.companyId || '-' }} {{ item.errorId || '-' }} {{ item.errorDateTime ? (item.errorDateTime | date:'dd-MMM-yyyy HH:mm:ss') : '-' }} {{ item.errorSource || '-' }}

{{ item.errorMessage || '-' }}

{{ item.innerMessage || '-' }}

{{ item.stackTrace || '-' }}

No tenant error log rows matched the current search.
Open this page to load active company error logs.
Company Total Errors Latest Error ID Latest Time Source Latest Message Action
{{ item.companyName || item.companyId || '-' }} {{ item.companyId || '-' }} {{ item.totalErrorCount || 0 }} {{ item.latestErrorId || '-' }} {{ item.latestErrorDateTime ? (item.latestErrorDateTime | date:'dd-MMM-yyyy HH:mm:ss') : '-' }} {{ item.latestErrorSource || '-' }}

{{ item.latestErrorMessage || '-' }}

No tenant log summary rows matched the current search.
Open this page to load the summary.

Fetch Failures

Companies skipped because the database connection or dbo.tblerror table could not be read.

{{ failure.companyName || failure.companyId }} {{ failure.companyId }}

{{ failure.errorMessage }}

Access Registry

Login User Table

Create users, assign login type, and control active access for the CPanel.

ID Login Name Login Type Status Created Updated
{{ user.loginId }} {{ user.loginName }} Internal access account {{ user.loginType }} {{ user.isActive ? 'Active' : 'Inactive' }} {{ user.createdOn | date:'dd-MMM-yyyy HH:mm' }} {{ user.updatedOn | date:'dd-MMM-yyyy HH:mm' }}
No users matched the current search.

Editor

{{ vm.isUserCreateMode ? 'Create Login User' : 'User Access Detail' }}

{{ vm.isUserCreateMode ? 'Add a new backend-team login for the control panel.' : 'Update login name, role, password, or active access for the selected user.' }}

{{ vm.successMessage }}
Login Type*

Menu Master

{{ vm.activeMenuTitle() }}

This panel is ready for the next backend-team module. The control-panel shell, navigation, and theme are already set up for expansion.