Add date range filtering to transaction logs

Introduces a date filter section with quick-select buttons (last 7 days, last 30 days, this month), clear filter, and active filter badge to the transaction logs component. Implements debounced search, date range validation, and updates export to include date filters. Enhances UI/UX with new SCSS styles and adds relevant i18n keys for both English and Arabic.
mazdak/UX-2367
Naeem Ullah 5 days ago
parent 0929acd502
commit 9821ed4d9e

@ -21,6 +21,16 @@
{{ "transactionLogs" | translate }} {{ "transactionLogs" | translate }}
<div class="d-flex align-items-center gap-2"> <div class="d-flex align-items-center gap-2">
<!-- Date Filter Toggle Button -->
<button
class="btn btn-sm btn-outline-info"
(click)="toggleDateFilters()"
[title]="(showDateFilters ? 'hideDateFilters' : 'showDateFilters') | translate"
>
<i class="fas fa-calendar-alt"></i>
<span class="d-none d-md-inline ms-1">{{ "dateFilter" | translate }}</span>
</button>
<div class="search-box"> <div class="search-box">
<input <input
type="text" type="text"
@ -55,6 +65,83 @@
</div> </div>
</div> </div>
<!-- Date Filter Section -->
<div class="card-body border-bottom bg-light" *ngIf="showDateFilters">
<div class="row g-3">
<div class="col-md-3">
<label class="form-label small">{{ "fromDate" | translate }}</label>
<input
type="date"
class="form-control form-control-sm"
[(ngModel)]="fromDate"
[max]="maxDate"
(change)="onDateFilterChange()"
[disabled]="isLoading"
/>
</div>
<div class="col-md-3">
<label class="form-label small">{{ "toDate" | translate }}</label>
<input
type="date"
class="form-control form-control-sm"
[(ngModel)]="toDate"
[max]="maxDate"
(change)="onDateFilterChange()"
[disabled]="isLoading"
/>
</div>
<div class="col-md-6">
<div class="d-flex flex-wrap gap-2 align-items-end h-100">
<!-- Quick Date Filters -->
<div class="btn-group btn-group-sm">
<button
class="btn btn-outline-primary"
(click)="applyLast7Days()"
[disabled]="isLoading"
>
{{ "last7Days" | translate }}
</button>
<button
class="btn btn-outline-primary"
(click)="applyLast30Days()"
[disabled]="isLoading"
>
{{ "last30Days" | translate }}
</button>
<button
class="btn btn-outline-primary"
(click)="applyThisMonth()"
[disabled]="isLoading"
>
{{ "thisMonth" | translate }}
</button>
</div>
<!-- Clear Filter Button -->
<button
class="btn btn-sm btn-outline-danger"
(click)="clearDateFilters()"
[disabled]="isLoading || (!fromDate && !toDate)"
>
<i class="fas fa-times"></i>
{{ "clearFilter" | translate }}
</button>
</div>
</div>
</div>
<!-- Active Filter Badge -->
<div class="mt-2" *ngIf="fromDate || toDate">
<span class="badge bg-info">
<i class="fas fa-filter me-1"></i>
{{ "activeFilter" | translate }}:
<span *ngIf="fromDate">{{ "from" | translate }} {{ fromDate | date }}</span>
<span *ngIf="fromDate && toDate"> {{ "to" | translate }} </span>
<span *ngIf="toDate">{{ toDate | date }}</span>
</span>
</div>
</div>
<div <div
class="card-body" class="card-body"
*ngIf="transactionDataExpanded; else collapsedTable" *ngIf="transactionDataExpanded; else collapsedTable"
@ -65,6 +152,9 @@
<span class="visually-hidden">Loading...</span> <span class="visually-hidden">Loading...</span>
</div> </div>
<p class="text-muted mt-2">{{ "loadingTransactionLogs" | translate }}</p> <p class="text-muted mt-2">{{ "loadingTransactionLogs" | translate }}</p>
<small *ngIf="fromDate || toDate" class="text-info">
{{ "filteringByDate" | translate }}
</small>
</div> </div>
<!-- Error Message --> <!-- Error Message -->
@ -77,6 +167,9 @@
<div *ngIf="!isLoading && !errorMessage && transactionLog.length === 0" class="text-center py-5 text-muted"> <div *ngIf="!isLoading && !errorMessage && transactionLog.length === 0" class="text-center py-5 text-muted">
<i class="fas fa-database fa-3x mb-3 opacity-50"></i> <i class="fas fa-database fa-3x mb-3 opacity-50"></i>
<h5>{{ "noTransactionLogsFound" | translate }}</h5> <h5>{{ "noTransactionLogsFound" | translate }}</h5>
<p *ngIf="fromDate || toDate" class="small">
{{ "tryAdjustingFilters" | translate }}
</p>
</div> </div>
<!-- Data Table --> <!-- Data Table -->
@ -167,6 +260,9 @@
<span class="d-none d-md-inline"> <span class="d-none d-md-inline">
({{ totalCount }} {{ "totalItems" | translate }}) ({{ totalCount }} {{ "totalItems" | translate }})
</span> </span>
<span *ngIf="fromDate || toDate" class="badge bg-info ms-2">
<i class="fas fa-filter"></i>
</span>
</div> </div>
<!-- Pagination buttons --> <!-- Pagination buttons -->

@ -1,125 +1,139 @@
:host { // Date filter section
display: block; .date-filter-section {
} transition: all 0.3s ease;
.card-header {
background-color: #f8f9fa;
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
}
.search-box { .date-input-group {
position: relative; position: relative;
min-width: 200px;
.form-control { .form-control {
padding-left: 2.5rem; padding-right: 2.5rem;
padding-right: 1rem;
} }
.search-icon { .date-icon {
position: absolute; position: absolute;
left: 1rem; right: 0.75rem;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
color: #6c757d; color: #6c757d;
pointer-events: none; }
}
.quick-filter-btn {
&.active {
background-color: var(--bs-primary);
color: white;
border-color: var(--bs-primary);
}
} }
} }
.table { // Table styling
.table-responsive {
min-height: 400px;
table {
font-size: 0.875rem;
th { th {
font-weight: 600; font-weight: 600;
background-color: #f8f9fa;
border-bottom: 2px solid #dee2e6;
white-space: nowrap; white-space: nowrap;
background-color: #f8f9fa;
} }
td { td {
vertical-align: middle; vertical-align: middle;
code {
font-size: 0.75rem;
background-color: #f8f9fa;
padding: 0.2rem 0.4rem;
border-radius: 0.25rem;
} }
}
.btn-group-sm > .btn { .badge {
font-size: 0.7rem;
padding: 0.25rem 0.5rem; padding: 0.25rem 0.5rem;
font-size: 0.875rem; }
} }
.badge {
font-size: 0.75em;
}
.alert-info {
background-color: #e7f3ff;
border-color: #b3d7ff;
color: #004085;
.btn-close {
padding: 0.5rem;
} }
} }
// Loading spinner
.spinner-border { .spinner-border {
width: 3rem; width: 3rem;
height: 3rem; height: 3rem;
} }
// Responsive adjustments // Search box
@media (max-width: 768px) { .search-box {
.card-header .d-flex { position: relative;
flex-direction: column; min-width: 200px;
align-items: stretch !important;
gap: 0.75rem !important;
}
.search-box { .search-icon {
min-width: 100%; position: absolute;
right: 0.75rem;
top: 50%;
transform: translateY(-50%);
color: #6c757d;
pointer-events: none;
} }
.table-responsive { .form-control {
font-size: 0.875rem; padding-right: 2.5rem;
} }
}
.d-flex.justify-content-between { // Active filter badge
flex-direction: column; .active-filter-badge {
gap: 1rem; animation: fadeIn 0.3s ease;
}
> div { @keyframes fadeIn {
width: 100%; from {
justify-content: center !important; opacity: 0;
transform: translateY(-10px);
} }
to {
opacity: 1;
transform: translateY(0);
} }
}
// Mobile responsive adjustments
@media (max-width: 768px) {
.date-filter-section {
.btn-group { .btn-group {
width: 100%; width: 100%;
.btn { .btn {
flex: 1; flex: 1;
font-size: 0.75rem;
padding: 0.375rem 0.5rem;
}
} }
} }
}
// Loading overlay .table-responsive {
.text-center.py-5 { overflow-x: auto;
min-height: 200px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
// Hover effects table {
.table-hover tbody tr:hover { min-width: 1200px;
background-color: rgba(0, 123, 255, 0.05); }
} }
// Date filter styles .search-box {
.form-control-sm { min-width: 150px;
min-width: 120px; }
} }
// Active state for filter buttons // Dark mode support (if needed)
.btn-outline-primary.active { [data-bs-theme="dark"] {
background-color: #0d6efd; .table-light {
color: white; background-color: #2d333b !important;
border-color: #0d6efd; color: #adb5bd;
}
.search-box .search-icon {
color: #adb5bd;
}
} }

@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit, OnDestroy } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { ExcelExportService } from '../shared/services/excel-export.service'; import { ExcelExportService } from '../shared/services/excel-export.service';
@ -12,6 +12,8 @@ import { URIKey } from '../utils/uri-enums';
import { HttpParams } from '@angular/common/http'; import { HttpParams } from '@angular/common/http';
import { HttpURIService } from '../app.http.uri.service'; import { HttpURIService } from '../app.http.uri.service';
import { formatDate } from '@angular/common'; import { formatDate } from '@angular/common';
import { Subject } from 'rxjs';
import { takeUntil, debounceTime } from 'rxjs/operators';
@Component({ @Component({
selector: 'app-transaction-logs', selector: 'app-transaction-logs',
@ -19,7 +21,7 @@ import { formatDate } from '@angular/common';
styleUrls: ['./transaction-logs.component.scss'], styleUrls: ['./transaction-logs.component.scss'],
imports: [CommonModule, TranslateModule, NgSelectModule, FormsModule, ReactiveFormsModule, TableFilterPipe] imports: [CommonModule, TranslateModule, NgSelectModule, FormsModule, ReactiveFormsModule, TableFilterPipe]
}) })
export class TransactionLogsComponent implements OnInit { export class TransactionLogsComponent implements OnInit, OnDestroy {
currentPage: number = 1; currentPage: number = 1;
totalCount: number = 0; totalCount: number = 0;
renewalDataExpanded: boolean = true; renewalDataExpanded: boolean = true;
@ -39,6 +41,10 @@ export class TransactionLogsComponent implements OnInit {
maxDate: string = ''; maxDate: string = '';
showDateFilters: boolean = false; showDateFilters: boolean = false;
// Search subject for debouncing
private searchSubject = new Subject<string>();
private destroy$ = new Subject<void>();
constructor( constructor(
private excelExportService: ExcelExportService, private excelExportService: ExcelExportService,
private httpService: HttpURIService, private httpService: HttpURIService,
@ -48,21 +54,47 @@ export class TransactionLogsComponent implements OnInit {
// Set max date to today // Set max date to today
this.maxDate = formatDate(new Date(), 'yyyy-MM-dd', 'en-US'); this.maxDate = formatDate(new Date(), 'yyyy-MM-dd', 'en-US');
// Optionally set default date range (last 30 days) // Set default date range (last 7 days)
const today = new Date(); const today = new Date();
const lastMonth = new Date(); const lastWeek = new Date();
lastMonth.setDate(today.getDate() - 30); lastWeek.setDate(today.getDate() - 7);
this.fromDate = formatDate(lastMonth, 'yyyy-MM-dd', 'en-US'); this.fromDate = formatDate(lastWeek, 'yyyy-MM-dd', 'en-US');
this.toDate = formatDate(today, 'yyyy-MM-dd', 'en-US'); this.toDate = formatDate(today, 'yyyy-MM-dd', 'en-US');
// Set up search debouncing
this.setupSearchDebounce();
this.loadTransactionLogs();
}
ngOnDestroy(): void {
this.destroy$.next();
this.destroy$.complete();
this.searchSubject.complete();
}
private setupSearchDebounce(): void {
this.searchSubject.pipe(
takeUntil(this.destroy$),
debounceTime(300)
).subscribe((searchValue: string) => {
this.searchText = searchValue;
this.currentPage = 1;
this.loadTransactionLogs(); this.loadTransactionLogs();
});
} }
loadTransactionLogs(): void { loadTransactionLogs(): void {
this.isLoading = true; this.isLoading = true;
this.errorMessage = ''; this.errorMessage = '';
// Validate date range before making API call
if (!this.validateDateRange()) {
this.isLoading = false;
return;
}
// Build query parameters // Build query parameters
let params = new HttpParams(); let params = new HttpParams();
@ -121,20 +153,31 @@ export class TransactionLogsComponent implements OnInit {
}); });
} }
// Date filter change handler private validateDateRange(): boolean {
onDateFilterChange(): void {
// Validate date range
if (this.fromDate && this.toDate) { if (this.fromDate && this.toDate) {
const from = new Date(this.fromDate); const from = new Date(this.fromDate);
const to = new Date(this.toDate); const to = new Date(this.toDate);
if (from > to) { if (from > to) {
this.errorMessage = 'From date cannot be after To date'; this.errorMessage = 'From date cannot be after To date';
return; return false;
} }
// Optional: Validate date range is not too wide
const diffTime = Math.abs(to.getTime() - from.getTime());
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
if (diffDays > 365) {
this.errorMessage = 'Date range cannot exceed 1 year';
return false;
}
}
return true;
} }
// Reset to first page and reload // Date filter change handler
onDateFilterChange(): void {
this.currentPage = 1; this.currentPage = 1;
this.loadTransactionLogs(); this.loadTransactionLogs();
} }
@ -184,6 +227,17 @@ export class TransactionLogsComponent implements OnInit {
this.onDateFilterChange(); this.onDateFilterChange();
} }
// Apply date range (Last 3 months)
applyLast3Months(): void {
const today = new Date();
const threeMonthsAgo = new Date();
threeMonthsAgo.setMonth(today.getMonth() - 3);
this.fromDate = formatDate(threeMonthsAgo, 'yyyy-MM-dd', 'en-US');
this.toDate = formatDate(today, 'yyyy-MM-dd', 'en-US');
this.onDateFilterChange();
}
toggleTableCard(): void { toggleTableCard(): void {
this.transactionDataExpanded = !this.transactionDataExpanded; this.transactionDataExpanded = !this.transactionDataExpanded;
} }
@ -194,14 +248,7 @@ export class TransactionLogsComponent implements OnInit {
} }
onSearch(value: string): void { onSearch(value: string): void {
this.searchText = value; this.searchSubject.next(value);
this.currentPage = 1;
// Debounce search to avoid too many API calls
clearTimeout((this as any).searchTimeout);
(this as any).searchTimeout = setTimeout(() => {
this.loadTransactionLogs();
}, 300);
} }
totalPages(): number { totalPages(): number {
@ -220,8 +267,6 @@ export class TransactionLogsComponent implements OnInit {
const startIndex = (this.currentPage - 1) * this.itemsPerPage; const startIndex = (this.currentPage - 1) * this.itemsPerPage;
const endIndex = startIndex + this.itemsPerPage; const endIndex = startIndex + this.itemsPerPage;
// If using server-side pagination, use transactionLog directly
// If using client-side filtering with tableFilter pipe, this might not be needed
this.pagedItems = this.allItems.slice(startIndex, endIndex); this.pagedItems = this.allItems.slice(startIndex, endIndex);
} }
@ -233,13 +278,67 @@ export class TransactionLogsComponent implements OnInit {
} }
exportDataInExcel(): void { exportDataInExcel(): void {
// Export filtered data // Build export parameters
const dataToExport = this.allItems.length > 0 ? this.allItems : this.transactionLog; let params = new HttpParams();
this.excelExportService.exportExcel(dataToExport, TRANSACTION_LOGS_FILE_NAME);
// Include date filters in export if they are set
if (this.fromDate) {
params = params.set('fromDate', this.fromDate);
}
if (this.toDate) {
params = params.set('toDate', this.toDate);
}
if (this.searchText && this.searchText.trim() !== '') {
params = params.set('search', this.searchText.trim());
}
// For large exports, you might want to fetch all data without pagination
params = params.set('limit', '10000'); // Adjust as needed
this.httpService
.requestGET<any>(URIKey.TRANSACTION_LOGS, params)
.subscribe({
next: (res) => {
const logs = Array.isArray(res) ? res : res?.data;
const dataToExport = logs ?? [];
if (dataToExport.length === 0) {
this.errorMessage = 'No data to export';
return;
}
// Generate filename with date range if applicable
let fileName = TRANSACTION_LOGS_FILE_NAME;
if (this.fromDate || this.toDate) {
const from = this.fromDate ? formatDate(new Date(this.fromDate), 'dd-MMM-yyyy', 'en-US') : 'All';
const to = this.toDate ? formatDate(new Date(this.toDate), 'dd-MMM-yyyy', 'en-US') : 'All';
fileName = `TransactionLogs_${from}_to_${to}`;
}
this.excelExportService.exportExcel(dataToExport, fileName);
},
error: (err) => {
console.error('Error exporting data:', err);
this.errorMessage = 'Failed to export data. Please try again.';
}
});
} }
// Get filtered items for display (used in template) // Get filtered items for display (used in template)
get filteredItems(): TransactionLog[] { get filteredItems(): TransactionLog[] {
return this.allItems; return this.allItems;
} }
// Format date for display
formatDateDisplay(dateString: string): string {
if (!dateString) return '';
return formatDate(new Date(dateString), 'MMM dd, yyyy', 'en-US');
}
// Check if date filter is active
get isDateFilterActive(): boolean {
return !!this.fromDate || !!this.toDate;
}
} }

@ -295,5 +295,23 @@
"showTable": "عرض الجدول", "showTable": "عرض الجدول",
"collapse": "يطوي", "collapse": "يطوي",
"expand": "توسيع", "expand": "توسيع",
"entries": "إدخالات" "entries": "إدخالات",
"dateFilter": "تصفية التاريخ",
"fromDate": "من تاريخ",
"toDate": "إلى تاريخ",
"clearFilter": "مسح التصفية",
"activeFilter": "التصفية نشطة",
"from": "من",
"to": "إلى",
"last7Days": "آخر 7 أيام",
"last30Days": "آخر 30 يومًا",
"thisMonth": "هذا الشهر",
"last3Months": "آخر 3 أشهر",
"hideDateFilters": "إخفاء تصفية التاريخ",
"showDateFilters": "عرض تصفية التاريخ",
"filteringByDate": "جاري التصفية حسب نطاق التاريخ...",
"tryAdjustingFilters": "حاول تعديل تصفية التاريخ أو مصطلحات البحث",
"noDataInRange": "لم يتم العثور على معاملات في نطاق التاريخ المحدد",
"dateRangeError": "الرجاء تحديد نطاق تاريخ صالح",
"exportAllData": "تصدير جميع البيانات"
} }

@ -1,169 +1,168 @@
{ {
"logintoAccount": "Login to your account",
"logintoAccount":"Login to your account", "userName": "Username",
"userName":"Username", "userNamePlaceHolder": "Enter Username",
"userNamePlaceHolder":"Enter Username", "password": "Password",
"password":"Password", "passwordPlaceHolder": "Enter Password",
"passwordPlaceHolder":"Enter Password", "defaultPassword": "Default Password",
"defaultPassword":"Default Password", "rememberMe": "Remember me",
"rememberMe":"Remember me", "forgotPassword": "Forgot password?",
"forgotPassword":"Forgot password?", "login": "Login",
"login":"Login", "dashboardTitle": "Dashboard",
"dashboardTitle":"Dashboard", "monthlyReqTitle": "Monthly Requests",
"monthlyReqTitle":"Monthly Requests", "monthlySmsTitle": "Monthly SMS",
"monthlySmsTitle":"Monthly SMS", "dashboard": "Dashboard",
"dashboard":"Dashboard", "UserManagement": "User Management",
"UserManagement":"User Management", "thirdPartyRegistration": "Third Party Registration",
"thirdPartyRegistration":"Third Party Registration", "setupUser": "Setup User",
"setupUser":"Setup User", "resetPassword": "Reset User Password",
"resetPassword":"Reset User Password", "changePassword": "Change Password",
"changePassword":"Change Password", "Logging": "Logging",
"Logging":"Logging", "loggerManager": "Logger Manager",
"loggerManager":"Logger Manager", "loggerManagerDetails": "Logger Manager Details",
"loggerManagerDetails":"Logger Manager Details", "SMSBanking": "SMS Banking",
"SMSBanking":"SMS Banking", "smsLogger": "SMS Logger",
"smsLogger":"SMS Logger",
"smsLoggerDetails": "SMS Logger Details", "smsLoggerDetails": "SMS Logger Details",
"smsGateway":"SMS Gateway", "smsGateway": "SMS Gateway",
"ibUnblockUser": "UnBlock IB User", "ibUnblockUser": "UnBlock IB User",
"ibSupport": "IB Support", "ibSupport": "IB Support",
"Permissions":"Permissions", "Permissions": "Permissions",
"permissions":"Permission Manager", "permissions": "Permission Manager",
"TodayTotalRequests":"Today Total Requests", "TodayTotalRequests": "Today Total Requests",
"TodayTotalSms":"Today Total Sms", "TodayTotalSms": "Today Total Sms",
"DescriptionUserPermission":"Description", "DescriptionUserPermission": "Description",
"PermissionsUserPermission":"Permissions", "PermissionsUserPermission": "Permissions",
"SaveUserPermission":"Save", "SaveUserPermission": "Save",
"UpdateUserPermission":"Update", "UpdateUserPermission": "Update",
"DeleteUserPermission":"Delete", "DeleteUserPermission": "Delete",
"ViewUserPermission":"View", "ViewUserPermission": "View",
"SelectUser":"Select User", "SelectUser": "Select User",
"SelectAUser":"Select a User", "SelectAUser": "Select a User",
"loggingTitle":"Logging", "loggingTitle": "Logging",
"IBChildTitle":"UnBlock User", "IBChildTitle": "UnBlock User",
"unblockUserDetails": "Unblock User Details", "unblockUserDetails": "Unblock User Details",
"IBTitle":"Internet Banking Support", "IBTitle": "Internet Banking Support",
"loggingChildTitle":"Logger Manager", "loggingChildTitle": "Logger Manager",
"fromDate":"From Date", "fromDate": "From Date",
"custId":"Customer Identity Value", "custId": "Customer Identity Value",
"toDate":"To Date", "toDate": "To Date",
"findLogs":"Find Logs", "findLogs": "Find Logs",
"unBlockCustomer":"UnBlock Customer", "unBlockCustomer": "UnBlock Customer",
"fetchCustomer":"Find Customer", "fetchCustomer": "Find Customer",
"loggingID":"Id", "loggingID": "Id",
"firstName":"First Name", "firstName": "First Name",
"lastName": "Last Name", "lastName": "Last Name",
"cmpCuststatus":"Customer Status", "cmpCuststatus": "Customer Status",
"cmpCustlastlogin": "Last Login", "cmpCustlastlogin": "Last Login",
"accountNonLocked":"Account Locked", "accountNonLocked": "Account Locked",
"lockTime":"Lock Time", "lockTime": "Lock Time",
"accountno":"Account No", "accountno": "Account No",
"phoneno":"Phone No", "phoneno": "Phone No",
"loggingRequestUri":"Request Uri", "loggingRequestUri": "Request Uri",
"loggingResponseCode":"Response code", "loggingResponseCode": "Response code",
"loggingRemoteIP":"Remote IP", "loggingRemoteIP": "Remote IP",
"loggingTimeTaken":"Time Taken", "loggingTimeTaken": "Time Taken",
"loggingDate":"Date", "loggingDate": "Date",
"loggingDateTime":"Date and Time", "loggingDateTime": "Date and Time",
"loggingMethod":"Method", "loggingMethod": "Method",
"DataAnalysis":"Data Analysis", "DataAnalysis": "Data Analysis",
"Analysis":"Analysis", "Analysis": "Analysis",
"smsBankingTitle":"SMS Banking", "smsBankingTitle": "SMS Banking",
"smsBankingChildTitle":"SMS Logger", "smsBankingChildTitle": "SMS Logger",
"smsTrackingID":"Tracking ID", "smsTrackingID": "Tracking ID",
"smsMessage":"Message", "smsMessage": "Message",
"message": "Message", "message": "Message",
"template": "Template", "template": "Template",
"smsNo":"Phone Number", "smsNo": "Phone Number",
"smsOrgaCode":"Organization Code", "smsOrgaCode": "Organization Code",
"smsDate":"Date", "smsDate": "Date",
"smsStatus":"Status", "smsStatus": "Status",
"language":"Language", "language": "Language",
"viewThirdPartyAccounts":"View Accounts", "viewThirdPartyAccounts": "View Accounts",
"ThirdPartyID":"Third Party ID", "ThirdPartyID": "Third Party ID",
"name":"Name", "name": "Name",
"EnterThirdPartyName":"Enter Third Party Name", "EnterThirdPartyName": "Enter Third Party Name",
"email":"Email", "email": "Email",
"Address":"Address", "Address": "Address",
"phoneNumber":"Phone Number", "phoneNumber": "Phone Number",
"PhoneNumberPlaceHolder":"Enter Phone Number", "PhoneNumberPlaceHolder": "Enter Phone Number",
"regPhoneNo": "Phone number must be 10 digits", "regPhoneNo": "Phone number must be 10 digits",
"NewNoOfAccounts":"New No of Accounts", "NewNoOfAccounts": "New No of Accounts",
"EnterNewNumberOfAccounts":"Enter New Number of Accounts", "EnterNewNumberOfAccounts": "Enter New Number of Accounts",
"TotalNoOfAccounts":"Total No of Accounts", "TotalNoOfAccounts": "Total No of Accounts",
"gridSearch":"Search:", "gridSearch": "Search:",
"gridShow":"Show", "gridShow": "Show",
"gridEntries":"entries", "gridEntries": "entries",
"gridFilter":"Filter", "gridFilter": "Filter",
"gridNum10":"10", "gridNum10": "10",
"gridNum25":"25", "gridNum25": "25",
"gridNum50":"50", "gridNum50": "50",
"gridNum100":"100", "gridNum100": "100",
"userID":"User ID", "userID": "User ID",
"userId":"User ID", "userId": "User ID",
"userContactNumber":"Enter User Contact Number", "userContactNumber": "Enter User Contact Number",
"SelectHomeBranch":"Select Home Branch", "SelectHomeBranch": "Select Home Branch",
"SelectRole":"Select Role", "SelectRole": "Select Role",
"HomeBranch":"Home Branch", "HomeBranch": "Home Branch",
"Role":"Role", "Role": "Role",
"ResetPassword":"Reset Password", "ResetPassword": "Reset Password",
"enterNewPassword":"Enter New Password", "enterNewPassword": "Enter New Password",
"oldPassword":"Old Password", "oldPassword": "Old Password",
"newPasswordStatic":"New Password", "newPasswordStatic": "New Password",
"savePassword":"Save", "savePassword": "Save",
"passwordPattern":"Password must be 820 characters and include uppercase, lowercase, number, and special character", "passwordPattern": "Password must be 820 characters and include uppercase, lowercase, number, and special character",
"SMSGatewaySelect":"Select Gateway", "SMSGatewaySelect": "Select Gateway",
"selectIdentValueType": "Select Type", "selectIdentValueType": "Select Type",
"IdTypeSelect":"Select Select Type", "IdTypeSelect": "Select Select Type",
"SMSGatewaySyriatel":"Syriatel", "SMSGatewaySyriatel": "Syriatel",
"SMSGatewayTwillio":"Twilio", "SMSGatewayTwillio": "Twilio",
"SMSGatewayJazz":"Jazz", "SMSGatewayJazz": "Jazz",
"syriatelCredentials":"Syriatel Credentials", "syriatelCredentials": "Syriatel Credentials",
"twilioCredentials":"Twilio Credentials", "twilioCredentials": "Twilio Credentials",
"jazzCredentials":"Jazz Credentials", "jazzCredentials": "Jazz Credentials",
"accountSID":"Account SID", "accountSID": "Account SID",
"authToken":"Auth Token", "authToken": "Auth Token",
"fromNumber":"From Number", "fromNumber": "From Number",
"notificationType":"Notification Type", "notificationType": "Notification Type",
"sinceLastDay":"Since last day", "sinceLastDay": "Since last day",
"TodayTotalErrorRequest":"Today Total Error Request", "TodayTotalErrorRequest": "Today Total Error Request",
"TodayTotalPendingSms":"Today Total Pending Sms", "TodayTotalPendingSms": "Today Total Pending Sms",
"selectTheDates":"Please Select the Dates", "selectTheDates": "Please Select the Dates",
"selectIdentValue":"Please Select the Identity No", "selectIdentValue": "Please Select the Identity No",
"selectIdentityValue":"Identity No is Required", "selectIdentityValue": "Identity No is Required",
"noLogsFound":"No Logs Found Between these Dates", "noLogsFound": "No Logs Found Between these Dates",
"loginSuccess":"Successfully Logged In", "loginSuccess": "Successfully Logged In",
"passwordNotMatched":"Password Does Not Match", "passwordNotMatched": "Password Does Not Match",
"passwordPatternNotMatched":"Password Pattern Not Matched", "passwordPatternNotMatched": "Password Pattern Not Matched",
"successDeleted":"Successfully Deleted", "successDeleted": "Successfully Deleted",
"passwordNotSame":"Password Cannot be same as Old Password", "passwordNotSame": "Password Cannot be same as Old Password",
"passwordTooShort": "Password is too short.", "passwordTooShort": "Password is too short.",
"passwordsDoNotMatch": "Passwords do not match.", "passwordsDoNotMatch": "Passwords do not match.",
"SuccessSave":"Successfully Saved", "SuccessSave": "Successfully Saved",
"SuccessFind":"Successfully Find", "SuccessFind": "Successfully Find",
"customerAlreadyUnblocked": "Customer Already UnBlocked", "customerAlreadyUnblocked": "Customer Already UnBlocked",
"SuccessUpdate":"Successfully Updated", "SuccessUpdate": "Successfully Updated",
"UpdateFailed":"Unable to update", "UpdateFailed": "Unable to update",
"formInvalid":"Form is Invalid", "formInvalid": "Form is Invalid",
"ServerError":"Server Error", "ServerError": "Server Error",
"fieldsMissing":"Required Fields are missing or invalid", "fieldsMissing": "Required Fields are missing or invalid",
"selectAll":"Select All ", "selectAll": "Select All ",
"logoutSuccess":"Successfully Logout", "logoutSuccess": "Successfully Logout",
"smsGateWayChanged":"SMS Gateway Successfully Changed", "smsGateWayChanged": "SMS Gateway Successfully Changed",
"cnic_scnic": "CNIC/SCNIC", "cnic_scnic": "CNIC/SCNIC",
"poc": "POC", "poc": "POC",
"nicop": "S/NICOP", "nicop": "S/NICOP",
"passport": "PASSPORT", "passport": "PASSPORT",
"senderNamePlaceHolder":"Enter Sender Name", "senderNamePlaceHolder": "Enter Sender Name",
"enterIdentityValue":"Enter Identity Value", "enterIdentityValue": "Enter Identity Value",
"senderName":"Sender Name", "senderName": "Sender Name",
"passwordChangeRequired": "Password Change Required", "passwordChangeRequired": "Password Change Required",
"Next": "Next", "Next": "Next",
"ERR_APP_B_0001":"Internal Server Error", "ERR_APP_B_0001": "Internal Server Error",
"ERR_APP_B_0002":"Possible connection error with {{value1}} module", "ERR_APP_B_0002": "Possible connection error with {{value1}} module",
"ERR_APP_B_0003":"Bad Request on {{value1}} module", "ERR_APP_B_0003": "Bad Request on {{value1}} module",
"ERR_APP_B_0004":"Session timed out", "ERR_APP_B_0004": "Session timed out",
"ERR_APP_B_0005":"Unauthorized: {{value1}}.", "ERR_APP_B_0005": "Unauthorized: {{value1}}.",
"ERR_MDL_B_0001": "Purpose Code already exists", "ERR_MDL_B_0001": "Purpose Code already exists",
"feedbackSetup": "Feedback Setup", "feedbackSetup": "Feedback Setup",
"credentials": "Credentials", "credentials": "Credentials",
@ -204,24 +203,24 @@
"loading": "Loading", "loading": "Loading",
"action": "Action", "action": "Action",
"recordNotFound": "Record not found", "recordNotFound": "Record not found",
"confirmDelete":"Are you sure you want to delete?", "confirmDelete": "Are you sure you want to delete?",
"confirmSave":"Are you sure you want to save?", "confirmSave": "Are you sure you want to save?",
"2-stepAppPassword": "Enter 2-step verification Generated - App Password", "2-stepAppPassword": "Enter 2-step verification Generated - App Password",
"english": "English", "english": "English",
"arabic": "Arabic", "arabic": "Arabic",
"userNameRequired" : "User name is required", "userNameRequired": "User name is required",
"userNamePattterenError": "Only lower case alphabets and numbers are allowed", "userNamePattterenError": "Only lower case alphabets and numbers are allowed",
"PasswordRequired": "Password is required", "PasswordRequired": "Password is required",
"copyRightsReserved": "Copyright © {{currentYearLong}} MFSYS Technologies. All rights reserved.", "copyRightsReserved": "Copyright © {{currentYearLong}} MFSYS Technologies. All rights reserved.",
"versionAndBuildNumber": "Version {{versionNumber}} Build {{buildNumber}}", "versionAndBuildNumber": "Version {{versionNumber}} Build {{buildNumber}}",
"versionBuildDate": "+ Build Date {{date}}", "versionBuildDate": "+ Build Date {{date}}",
"date" : "Date", "date": "Date",
"logout": "Log Out", "logout": "Log Out",
"save": "Save", "save": "Save",
"update": "Update", "update": "Update",
"cancel": "Cancel", "cancel": "Cancel",
"thirdPartyRegistrationDetails": "Third Party Registration Details", "thirdPartyRegistrationDetails": "Third Party Registration Details",
"SetupUserDetails":"Setup User Details", "SetupUserDetails": "Setup User Details",
"search": "Search", "search": "Search",
"thirdPartyNamePlaceholder": "Enter Third Party Name", "thirdPartyNamePlaceholder": "Enter Third Party Name",
"phoneNumberPlaceholder": "Enter Phone Number", "phoneNumberPlaceholder": "Enter Phone Number",
@ -232,11 +231,11 @@
"record": "Record", "record": "Record",
"previous": "Previous", "previous": "Previous",
"next": "Next", "next": "Next",
"LOGIN_SUCCESSFULLY":"Login SucessFully", "LOGIN_SUCCESSFULLY": "Login SucessFully",
"RESET_PASSWORD_SUCCESS":"Password Reset Successfully", "RESET_PASSWORD_SUCCESS": "Password Reset Successfully",
"CHANGE_PASSWORD_SUCCESS":"Password Changed Successfully", "CHANGE_PASSWORD_SUCCESS": "Password Changed Successfully",
"ALREADY_LOGGED_IN": "User Already Logged In", "ALREADY_LOGGED_IN": "User Already Logged In",
"ACCESS_DENIED" : "Access Denied", "ACCESS_DENIED": "Access Denied",
"INTERNAL_SERVER_ERROR": "Internal Server Error", "INTERNAL_SERVER_ERROR": "Internal Server Error",
"CONNECTION_ERROR": "Connection Error", "CONNECTION_ERROR": "Connection Error",
"BAD_REQUEST": "Bad Request", "BAD_REQUEST": "Bad Request",
@ -247,29 +246,29 @@
"deleteUser": "Delete User", "deleteUser": "Delete User",
"permissionManagement": "Permission Managment", "permissionManagement": "Permission Managment",
"userCode": "User", "userCode": "User",
"choose" : "Choose", "choose": "Choose",
"allow": "Allow", "allow": "Allow",
"toDateInvalidError": "To Date must be greater than or equal to From Date", "toDateInvalidError": "To Date must be greater than or equal to From Date",
"noLoggingDetailsFound": "No Activity Log Details found", "noLoggingDetailsFound": "No Activity Log Details found",
"noUserDetailsFound":"No User Details found", "noUserDetailsFound": "No User Details found",
"noThirdPartyRegFound":"No Third Party Registration Details Found", "noThirdPartyRegFound": "No Third Party Registration Details Found",
"ERR_SEC_0001": "Email already exists", "ERR_SEC_0001": "Email already exists",
"ERR_SEC_0007": "New password cannot be same as old password", "ERR_SEC_0007": "New password cannot be same as old password",
"ERR_SEC_0002": "User ID already exists", "ERR_SEC_0002": "User ID already exists",
"ERR_SEC_0003": "Old Password is not correct", "ERR_SEC_0003": "Old Password is not correct",
"ERR_SEC_0004":"Invalid credentials", "ERR_SEC_0004": "Invalid credentials",
"ERR_SEC_0005": "User not found", "ERR_SEC_0005": "User not found",
"ERR_SEC_0006": "Incorrect password", "ERR_SEC_0006": "Incorrect password",
"toDateGreaterThanToday": "To Date must be less than Current Date", "toDateGreaterThanToday": "To Date must be less than Current Date",
"fromDateGreaterThanToday": "From Date must be less than Current Date", "fromDateGreaterThanToday": "From Date must be less than Current Date",
"userIdMinLength" : "User ID must be at least 5 characters", "userIdMinLength": "User ID must be at least 5 characters",
"nameMinLength" : "Name must be at least 5 characters", "nameMinLength": "Name must be at least 5 characters",
"emptySpaceRestriction" : "Empty spaces & capital letters are not allowed", "emptySpaceRestriction": "Empty spaces & capital letters are not allowed",
"USER_CREATED_SUCCESS": "User Created", "USER_CREATED_SUCCESS": "User Created",
"USER_UPDATE_SUCCESS": "User Updated", "USER_UPDATE_SUCCESS": "User Updated",
"USER_DELETE_SUCCESS": "User Deleted", "USER_DELETE_SUCCESS": "User Deleted",
"SAVED_SUCCESSFULLY" :"Saved Successfully", "SAVED_SUCCESSFULLY": "Saved Successfully",
"oldAndNewPass":"Old password and new password cannot be the same", "oldAndNewPass": "Old password and new password cannot be the same",
"activityLogs": "Activity Logs", "activityLogs": "Activity Logs",
"activityLogDetails": "Activity Log Details", "activityLogDetails": "Activity Log Details",
"transactionCode": "Transaction Code", "transactionCode": "Transaction Code",
@ -291,11 +290,27 @@
"sgtGntrcreateat": "Creation Date", "sgtGntrcreateat": "Creation Date",
"updatedAt": "Updated At", "updatedAt": "Updated At",
"channelCode": "Channel Code", "channelCode": "Channel Code",
"userFullname" : "Full Name", "userFullname": "Full Name",
"show": "Show", "show": "Show",
"entries": "entries", "entries": "entries",
"tableCollapsed": "Table collapsed", "tableCollapsed": "Table collapsed",
"showTable": "Show Table", "showTable": "Show Table",
"collapse": "Collapse", "collapse": "Collapse",
"expand": "Expand" "expand": "Expand",
"dateFilter": "Date Filter",
"clearFilter": "Clear Filter",
"activeFilter": "Active Filter",
"from": "From",
"to": "to",
"last7Days": "Last 7 Days",
"last30Days": "Last 30 Days",
"thisMonth": "This Month",
"last3Months": "Last 3 Months",
"hideDateFilters": "Hide Date Filters",
"showDateFilters": "Show Date Filters",
"filteringByDate": "Filtering by date range...",
"tryAdjustingFilters": "Try adjusting your date filters or search terms",
"noDataInRange": "No transactions found in the selected date range",
"dateRangeError": "Please select a valid date range",
"exportAllData": "Export All Data"
} }
Loading…
Cancel
Save