diff --git a/src/app/transaction-logs/transaction-logs.component.html b/src/app/transaction-logs/transaction-logs.component.html index b052641..639b069 100644 --- a/src/app/transaction-logs/transaction-logs.component.html +++ b/src/app/transaction-logs/transaction-logs.component.html @@ -21,6 +21,16 @@ {{ "transactionLogs" | translate }}
+ + + + +
+
+
+ + +
+
+ + +
+
+
+ +
+ + + +
+ + + +
+
+
+ + +
+ + + {{ "activeFilter" | translate }}: + {{ "from" | translate }} {{ fromDate | date }} + {{ "to" | translate }} + {{ toDate | date }} + +
+
+
Loading...

{{ "loadingTransactionLogs" | translate }}

+ + {{ "filteringByDate" | translate }} +
@@ -77,6 +167,9 @@
{{ "noTransactionLogsFound" | translate }}
+

+ {{ "tryAdjustingFilters" | translate }} +

@@ -167,6 +260,9 @@ ({{ totalCount }} {{ "totalItems" | translate }}) + + + diff --git a/src/app/transaction-logs/transaction-logs.component.scss b/src/app/transaction-logs/transaction-logs.component.scss index e980abf..7767147 100644 --- a/src/app/transaction-logs/transaction-logs.component.scss +++ b/src/app/transaction-logs/transaction-logs.component.scss @@ -1,125 +1,139 @@ -:host { - display: block; +// Date filter section +.date-filter-section { + transition: all 0.3s ease; + + .date-input-group { + position: relative; + + .form-control { + padding-right: 2.5rem; + } + + .date-icon { + position: absolute; + right: 0.75rem; + top: 50%; + transform: translateY(-50%); + color: #6c757d; + } + } + + .quick-filter-btn { + &.active { + background-color: var(--bs-primary); + color: white; + border-color: var(--bs-primary); + } + } } -.card-header { - background-color: #f8f9fa; - border-bottom: 1px solid rgba(0, 0, 0, 0.125); +// Table styling +.table-responsive { + min-height: 400px; + + table { + font-size: 0.875rem; + + th { + font-weight: 600; + white-space: nowrap; + background-color: #f8f9fa; + } + + td { + vertical-align: middle; + + code { + font-size: 0.75rem; + background-color: #f8f9fa; + padding: 0.2rem 0.4rem; + border-radius: 0.25rem; + } + + .badge { + font-size: 0.7rem; + padding: 0.25rem 0.5rem; + } + } + } } +// Loading spinner +.spinner-border { + width: 3rem; + height: 3rem; +} + +// Search box .search-box { position: relative; min-width: 200px; - .form-control { - padding-left: 2.5rem; - padding-right: 1rem; - } - .search-icon { position: absolute; - left: 1rem; + right: 0.75rem; top: 50%; transform: translateY(-50%); color: #6c757d; pointer-events: none; } -} - -.table { - th { - font-weight: 600; - background-color: #f8f9fa; - border-bottom: 2px solid #dee2e6; - white-space: nowrap; - } - td { - vertical-align: middle; + .form-control { + padding-right: 2.5rem; } } -.btn-group-sm > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; -} - -.badge { - font-size: 0.75em; +// Active filter badge +.active-filter-badge { + animation: fadeIn 0.3s ease; } -.alert-info { - background-color: #e7f3ff; - border-color: #b3d7ff; - color: #004085; - - .btn-close { - padding: 0.5rem; +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); } } -.spinner-border { - width: 3rem; - height: 3rem; -} - -// Responsive adjustments +// Mobile responsive adjustments @media (max-width: 768px) { - .card-header .d-flex { - flex-direction: column; - align-items: stretch !important; - gap: 0.75rem !important; - } - - .search-box { - min-width: 100%; + .date-filter-section { + .btn-group { + width: 100%; + + .btn { + flex: 1; + font-size: 0.75rem; + padding: 0.375rem 0.5rem; + } + } } .table-responsive { - font-size: 0.875rem; - } - - .d-flex.justify-content-between { - flex-direction: column; - gap: 1rem; + overflow-x: auto; - > div { - width: 100%; - justify-content: center !important; + table { + min-width: 1200px; } } - .btn-group { - width: 100%; - - .btn { - flex: 1; - } + .search-box { + min-width: 150px; } } -// Loading overlay -.text-center.py-5 { - min-height: 200px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -// Hover effects -.table-hover tbody tr:hover { - background-color: rgba(0, 123, 255, 0.05); -} - -// Date filter styles -.form-control-sm { - min-width: 120px; -} - -// Active state for filter buttons -.btn-outline-primary.active { - background-color: #0d6efd; - color: white; - border-color: #0d6efd; +// Dark mode support (if needed) +[data-bs-theme="dark"] { + .table-light { + background-color: #2d333b !important; + color: #adb5bd; + } + + .search-box .search-icon { + color: #adb5bd; + } } \ No newline at end of file diff --git a/src/app/transaction-logs/transaction-logs.component.ts b/src/app/transaction-logs/transaction-logs.component.ts index 1befd51..4045235 100644 --- a/src/app/transaction-logs/transaction-logs.component.ts +++ b/src/app/transaction-logs/transaction-logs.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { CommonModule } from '@angular/common'; import { TranslateModule } from '@ngx-translate/core'; 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 { HttpURIService } from '../app.http.uri.service'; import { formatDate } from '@angular/common'; +import { Subject } from 'rxjs'; +import { takeUntil, debounceTime } from 'rxjs/operators'; @Component({ selector: 'app-transaction-logs', @@ -19,7 +21,7 @@ import { formatDate } from '@angular/common'; styleUrls: ['./transaction-logs.component.scss'], imports: [CommonModule, TranslateModule, NgSelectModule, FormsModule, ReactiveFormsModule, TableFilterPipe] }) -export class TransactionLogsComponent implements OnInit { +export class TransactionLogsComponent implements OnInit, OnDestroy { currentPage: number = 1; totalCount: number = 0; renewalDataExpanded: boolean = true; @@ -39,6 +41,10 @@ export class TransactionLogsComponent implements OnInit { maxDate: string = ''; showDateFilters: boolean = false; + // Search subject for debouncing + private searchSubject = new Subject(); + private destroy$ = new Subject(); + constructor( private excelExportService: ExcelExportService, private httpService: HttpURIService, @@ -48,21 +54,47 @@ export class TransactionLogsComponent implements OnInit { // Set max date to today 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 lastMonth = new Date(); - lastMonth.setDate(today.getDate() - 30); + const lastWeek = new Date(); + 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'); + // 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(); + }); + } + loadTransactionLogs(): void { this.isLoading = true; this.errorMessage = ''; + // Validate date range before making API call + if (!this.validateDateRange()) { + this.isLoading = false; + return; + } + // Build query parameters let params = new HttpParams(); @@ -121,20 +153,31 @@ export class TransactionLogsComponent implements OnInit { }); } - // Date filter change handler - onDateFilterChange(): void { - // Validate date range + private validateDateRange(): boolean { if (this.fromDate && this.toDate) { const from = new Date(this.fromDate); const to = new Date(this.toDate); if (from > to) { 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; } } - // Reset to first page and reload + return true; + } + + // Date filter change handler + onDateFilterChange(): void { this.currentPage = 1; this.loadTransactionLogs(); } @@ -184,6 +227,17 @@ export class TransactionLogsComponent implements OnInit { 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 { this.transactionDataExpanded = !this.transactionDataExpanded; } @@ -194,14 +248,7 @@ export class TransactionLogsComponent implements OnInit { } onSearch(value: string): void { - this.searchText = 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); + this.searchSubject.next(value); } totalPages(): number { @@ -220,8 +267,6 @@ export class TransactionLogsComponent implements OnInit { const startIndex = (this.currentPage - 1) * 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); } @@ -233,13 +278,67 @@ export class TransactionLogsComponent implements OnInit { } exportDataInExcel(): void { - // Export filtered data - const dataToExport = this.allItems.length > 0 ? this.allItems : this.transactionLog; - this.excelExportService.exportExcel(dataToExport, TRANSACTION_LOGS_FILE_NAME); + // Build export parameters + let params = new HttpParams(); + + // 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(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 filteredItems(): TransactionLog[] { 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; + } } \ No newline at end of file diff --git a/src/assets/i18n/Arabic.json b/src/assets/i18n/Arabic.json index 0853fee..8f64418 100644 --- a/src/assets/i18n/Arabic.json +++ b/src/assets/i18n/Arabic.json @@ -295,5 +295,23 @@ "showTable": "عرض الجدول", "collapse": "يطوي", "expand": "توسيع", - "entries": "إدخالات" + "entries": "إدخالات", + "dateFilter": "تصفية التاريخ", + "fromDate": "من تاريخ", + "toDate": "إلى تاريخ", + "clearFilter": "مسح التصفية", + "activeFilter": "التصفية نشطة", + "from": "من", + "to": "إلى", + "last7Days": "آخر 7 أيام", + "last30Days": "آخر 30 يومًا", + "thisMonth": "هذا الشهر", + "last3Months": "آخر 3 أشهر", + "hideDateFilters": "إخفاء تصفية التاريخ", + "showDateFilters": "عرض تصفية التاريخ", + "filteringByDate": "جاري التصفية حسب نطاق التاريخ...", + "tryAdjustingFilters": "حاول تعديل تصفية التاريخ أو مصطلحات البحث", + "noDataInRange": "لم يتم العثور على معاملات في نطاق التاريخ المحدد", + "dateRangeError": "الرجاء تحديد نطاق تاريخ صالح", + "exportAllData": "تصدير جميع البيانات" } diff --git a/src/assets/i18n/English.json b/src/assets/i18n/English.json index 7965341..a65b0f0 100644 --- a/src/assets/i18n/English.json +++ b/src/assets/i18n/English.json @@ -1,301 +1,316 @@ { - - "logintoAccount":"Login to your account", - "userName":"Username", - "userNamePlaceHolder":"Enter Username", - "password":"Password", - "passwordPlaceHolder":"Enter Password", - "defaultPassword":"Default Password", - "rememberMe":"Remember me", - "forgotPassword":"Forgot password?", - "login":"Login", - "dashboardTitle":"Dashboard", - "monthlyReqTitle":"Monthly Requests", - "monthlySmsTitle":"Monthly SMS", - "dashboard":"Dashboard", - "UserManagement":"User Management", - "thirdPartyRegistration":"Third Party Registration", - "setupUser":"Setup User", - "resetPassword":"Reset User Password", - "changePassword":"Change Password", - "Logging":"Logging", - "loggerManager":"Logger Manager", - "loggerManagerDetails":"Logger Manager Details", - "SMSBanking":"SMS Banking", - "smsLogger":"SMS Logger", - "smsLoggerDetails": "SMS Logger Details", - "smsGateway":"SMS Gateway", - "ibUnblockUser": "UnBlock IB User", - "ibSupport": "IB Support", - "Permissions":"Permissions", - "permissions":"Permission Manager", - "TodayTotalRequests":"Today Total Requests", - "TodayTotalSms":"Today Total Sms", - "DescriptionUserPermission":"Description", - "PermissionsUserPermission":"Permissions", - "SaveUserPermission":"Save", - "UpdateUserPermission":"Update", - "DeleteUserPermission":"Delete", - "ViewUserPermission":"View", - "SelectUser":"Select User", - "SelectAUser":"Select a User", - "loggingTitle":"Logging", - "IBChildTitle":"UnBlock User", - "unblockUserDetails": "Unblock User Details", - "IBTitle":"Internet Banking Support", - "loggingChildTitle":"Logger Manager", - "fromDate":"From Date", - "custId":"Customer Identity Value", - "toDate":"To Date", - "findLogs":"Find Logs", - "unBlockCustomer":"UnBlock Customer", - "fetchCustomer":"Find Customer", - "loggingID":"Id", - "firstName":"First Name", - "lastName": "Last Name", - "cmpCuststatus":"Customer Status", - "cmpCustlastlogin": "Last Login", - "accountNonLocked":"Account Locked", - "lockTime":"Lock Time", - "accountno":"Account No", - "phoneno":"Phone No", - "loggingRequestUri":"Request Uri", - "loggingResponseCode":"Response code", - "loggingRemoteIP":"Remote IP", - "loggingTimeTaken":"Time Taken", - "loggingDate":"Date", - "loggingDateTime":"Date and Time", - "loggingMethod":"Method", - "DataAnalysis":"Data Analysis", - "Analysis":"Analysis", - "smsBankingTitle":"SMS Banking", - "smsBankingChildTitle":"SMS Logger", - "smsTrackingID":"Tracking ID", - "smsMessage":"Message", - "message": "Message", - "template": "Template", - "smsNo":"Phone Number", - "smsOrgaCode":"Organization Code", - "smsDate":"Date", - "smsStatus":"Status", - "language":"Language", - "viewThirdPartyAccounts":"View Accounts", - "ThirdPartyID":"Third Party ID", - "name":"Name", - "EnterThirdPartyName":"Enter Third Party Name", - "email":"Email", - "Address":"Address", - "phoneNumber":"Phone Number", - "PhoneNumberPlaceHolder":"Enter Phone Number", - "regPhoneNo": "Phone number must be 10 digits", - "NewNoOfAccounts":"New No of Accounts", - "EnterNewNumberOfAccounts":"Enter New Number of Accounts", - "TotalNoOfAccounts":"Total No of Accounts", - "gridSearch":"Search:", - "gridShow":"Show", - "gridEntries":"entries", - "gridFilter":"Filter", - "gridNum10":"10", - "gridNum25":"25", - "gridNum50":"50", - "gridNum100":"100", - "userID":"User ID", - "userId":"User ID", - "userContactNumber":"Enter User Contact Number", - "SelectHomeBranch":"Select Home Branch", - "SelectRole":"Select Role", - "HomeBranch":"Home Branch", - "Role":"Role", - "ResetPassword":"Reset Password", - "enterNewPassword":"Enter New Password", - "oldPassword":"Old Password", - "newPasswordStatic":"New Password", - "savePassword":"Save", - "passwordPattern":"Password must be 8–20 characters and include uppercase, lowercase, number, and special character", - "SMSGatewaySelect":"Select Gateway", - "selectIdentValueType": "Select Type", - "IdTypeSelect":"Select Select Type", - "SMSGatewaySyriatel":"Syriatel", - "SMSGatewayTwillio":"Twilio", - "SMSGatewayJazz":"Jazz", - "syriatelCredentials":"Syriatel Credentials", - "twilioCredentials":"Twilio Credentials", - "jazzCredentials":"Jazz Credentials", - "accountSID":"Account SID", - "authToken":"Auth Token", - "fromNumber":"From Number", - "notificationType":"Notification Type", - "sinceLastDay":"Since last day", - "TodayTotalErrorRequest":"Today Total Error Request", - "TodayTotalPendingSms":"Today Total Pending Sms", - "selectTheDates":"Please Select the Dates", - "selectIdentValue":"Please Select the Identity No", - "selectIdentityValue":"Identity No is Required", - "noLogsFound":"No Logs Found Between these Dates", - "loginSuccess":"Successfully Logged In", - "passwordNotMatched":"Password Does Not Match", - "passwordPatternNotMatched":"Password Pattern Not Matched", - "successDeleted":"Successfully Deleted", - "passwordNotSame":"Password Cannot be same as Old Password", - "passwordTooShort": "Password is too short.", - "passwordsDoNotMatch": "Passwords do not match.", - "SuccessSave":"Successfully Saved", - "SuccessFind":"Successfully Find", - "customerAlreadyUnblocked": "Customer Already UnBlocked", - "SuccessUpdate":"Successfully Updated", - "UpdateFailed":"Unable to update", - "formInvalid":"Form is Invalid", - "ServerError":"Server Error", - "fieldsMissing":"Required Fields are missing or invalid", - "selectAll":"Select All ", - "logoutSuccess":"Successfully Logout", - "smsGateWayChanged":"SMS Gateway Successfully Changed", - "cnic_scnic": "CNIC/SCNIC", - "poc": "POC", - "nicop": "S/NICOP", - "passport": "PASSPORT", - "senderNamePlaceHolder":"Enter Sender Name", - "enterIdentityValue":"Enter Identity Value", - "senderName":"Sender Name", - "passwordChangeRequired": "Password Change Required", - "Next": "Next", - "ERR_APP_B_0001":"Internal Server Error", - "ERR_APP_B_0002":"Possible connection error with {{value1}} module", - "ERR_APP_B_0003":"Bad Request on {{value1}} module", - "ERR_APP_B_0004":"Session timed out", - "ERR_APP_B_0005":"Unauthorized: {{value1}}.", - "ERR_MDL_B_0001": "Purpose Code already exists", - "feedbackSetup": "Feedback Setup", - "credentials": "Credentials", - "credentialsTitle": "Feedback Credentials Setup", - "passwordPlaceholder": "Enter Password", - "confirmPasswordPlaceholder": "Enter confirm password", - "newPasswordPlaceholder": "Enter new password", - "confirmPassword": "Confirm Password", - "fieldRequired": "Field Required", - "emailLabel": "Email", - "emailRequiredError": "Email is required.", - "invalidEmailFormatError": "Invalid email format.", - "invalidEmail": "Enter a valid email with @", - "passNotMatch": "Password does not match", - "POR_ORGACODE": "Organization ID", - "purposeSetup": "Configure Transaction Purpose", - "purpcodeLabel": "Purpose Code", - "purpdescLabel": "Purpose Description", - "purpcodePlaceholder": "Enter Purpose Code", - "purpdescPlaceholder": "Enter Purpose Description", - "transactionDetails": "Transaction Details", - "invalidField": "Invalid Input", - "lengthExceed": "Length exceeded", - "transactionLogs": "Transaction Logs", - "loadingTransactionLogs": "Loading transaction logs...", - "noTransactionLogsFound": "No transaction logs found.", - "logID": "Log ID", - "organization": "Organization", - "transactionID": "Transaction ID", - "drAccount": "DR Account", - "crAccount": "CR Account", - "crPcaglacode": "CR GL Account", - "drPcaGlacode": "DR GL Account", - "paymentMode": "Payment Mode", - "channel": "Channel", - "createdAt": "Created At", - "refresh": "Refresh", - "loading": "Loading", - "action": "Action", - "recordNotFound": "Record not found", - "confirmDelete":"Are you sure you want to delete?", - "confirmSave":"Are you sure you want to save?", - "2-stepAppPassword": "Enter 2-step verification Generated - App Password", - "english": "English", - "arabic": "Arabic", - "userNameRequired" : "User name is required", - "userNamePattterenError": "Only lower case alphabets and numbers are allowed", - "PasswordRequired": "Password is required", - "copyRightsReserved": "Copyright © {{currentYearLong}} MFSYS Technologies. All rights reserved.", - "versionAndBuildNumber": "Version {{versionNumber}} Build {{buildNumber}}", - "versionBuildDate": "+ Build Date {{date}}", - "date" : "Date", - "logout": "Log Out", - "save": "Save", - "update": "Update", - "cancel": "Cancel", - "thirdPartyRegistrationDetails": "Third Party Registration Details", - "SetupUserDetails":"Setup User Details", - "search": "Search", - "thirdPartyNamePlaceholder": "Enter Third Party Name", - "phoneNumberPlaceholder": "Enter Phone Number", - "newNoOfAccountsPlaceholder": "Enter New Number of Accounts", - "page": "Page", - "of": "of", - "totalItems": "Records", - "record": "Record", - "previous": "Previous", - "next": "Next", - "LOGIN_SUCCESSFULLY":"Login SucessFully", - "RESET_PASSWORD_SUCCESS":"Password Reset Successfully", - "CHANGE_PASSWORD_SUCCESS":"Password Changed Successfully", - "ALREADY_LOGGED_IN": "User Already Logged In", - "ACCESS_DENIED" : "Access Denied", - "INTERNAL_SERVER_ERROR": "Internal Server Error", - "CONNECTION_ERROR": "Connection Error", - "BAD_REQUEST": "Bad Request", - "FORBIDDEN_REQUEST": "Forbidden Request", - "UNAUTHORIZED_REQUEST": "Unauthorized Request", - "edit": "Edit", - "delete": "Delete", - "deleteUser": "Delete User", - "permissionManagement": "Permission Managment", - "userCode": "User", - "choose" : "Choose", - "allow": "Allow", - "toDateInvalidError": "To Date must be greater than or equal to From Date", - "noLoggingDetailsFound": "No Activity Log Details found", - "noUserDetailsFound":"No User Details found", - "noThirdPartyRegFound":"No Third Party Registration Details Found", - "ERR_SEC_0001": "Email already exists", - "ERR_SEC_0007": "New password cannot be same as old password", - "ERR_SEC_0002": "User ID already exists", - "ERR_SEC_0003": "Old Password is not correct", - "ERR_SEC_0004":"Invalid credentials", - "ERR_SEC_0005": "User not found", - "ERR_SEC_0006": "Incorrect password", - "toDateGreaterThanToday": "To 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", - "nameMinLength" : "Name must be at least 5 characters", - "emptySpaceRestriction" : "Empty spaces & capital letters are not allowed", - "USER_CREATED_SUCCESS": "User Created", - "USER_UPDATE_SUCCESS": "User Updated", - "USER_DELETE_SUCCESS": "User Deleted", - "SAVED_SUCCESSFULLY" :"Saved Successfully", - "oldAndNewPass":"Old password and new password cannot be the same", - "activityLogs": "Activity Logs", - "activityLogDetails": "Activity Log Details", - "transactionCode": "Transaction Code", - "transactionUri": "Transaction URI", - "resetPasswordButton": "Reset Password", - "dateTime": "Date Time", - "responseCode": "Response Code", - "remoteIp": "Remote IP", - "requestBody": "Request Body", - "requestUri": "Request URI", - "method": "Method", - "id": "Id", - "logId": "Log ID", - "porOrgacode": "Organization Code", - "drMbmbkmsnumber": "Debit Account Number", - "crMbmbkmsnumber": "Credit Account Number", - "ppmPymdcode": "Payment Code", - "sgtGntrdate": "Transaction Date", - "sgtGntrcreateat": "Creation Date", - "updatedAt": "Updated At", - "channelCode": "Channel Code", - "userFullname" : "Full Name", - "show": "Show", - "entries": "entries", - "tableCollapsed": "Table collapsed", - "showTable": "Show Table", - "collapse": "Collapse", - "expand": "Expand" -} \ No newline at end of file + "logintoAccount": "Login to your account", + "userName": "Username", + "userNamePlaceHolder": "Enter Username", + "password": "Password", + "passwordPlaceHolder": "Enter Password", + "defaultPassword": "Default Password", + "rememberMe": "Remember me", + "forgotPassword": "Forgot password?", + "login": "Login", + "dashboardTitle": "Dashboard", + "monthlyReqTitle": "Monthly Requests", + "monthlySmsTitle": "Monthly SMS", + "dashboard": "Dashboard", + "UserManagement": "User Management", + "thirdPartyRegistration": "Third Party Registration", + "setupUser": "Setup User", + "resetPassword": "Reset User Password", + "changePassword": "Change Password", + "Logging": "Logging", + "loggerManager": "Logger Manager", + "loggerManagerDetails": "Logger Manager Details", + "SMSBanking": "SMS Banking", + "smsLogger": "SMS Logger", + "smsLoggerDetails": "SMS Logger Details", + "smsGateway": "SMS Gateway", + "ibUnblockUser": "UnBlock IB User", + "ibSupport": "IB Support", + "Permissions": "Permissions", + "permissions": "Permission Manager", + "TodayTotalRequests": "Today Total Requests", + "TodayTotalSms": "Today Total Sms", + "DescriptionUserPermission": "Description", + "PermissionsUserPermission": "Permissions", + "SaveUserPermission": "Save", + "UpdateUserPermission": "Update", + "DeleteUserPermission": "Delete", + "ViewUserPermission": "View", + "SelectUser": "Select User", + "SelectAUser": "Select a User", + "loggingTitle": "Logging", + "IBChildTitle": "UnBlock User", + "unblockUserDetails": "Unblock User Details", + "IBTitle": "Internet Banking Support", + "loggingChildTitle": "Logger Manager", + "fromDate": "From Date", + "custId": "Customer Identity Value", + "toDate": "To Date", + "findLogs": "Find Logs", + "unBlockCustomer": "UnBlock Customer", + "fetchCustomer": "Find Customer", + "loggingID": "Id", + "firstName": "First Name", + "lastName": "Last Name", + "cmpCuststatus": "Customer Status", + "cmpCustlastlogin": "Last Login", + "accountNonLocked": "Account Locked", + "lockTime": "Lock Time", + "accountno": "Account No", + "phoneno": "Phone No", + "loggingRequestUri": "Request Uri", + "loggingResponseCode": "Response code", + "loggingRemoteIP": "Remote IP", + "loggingTimeTaken": "Time Taken", + "loggingDate": "Date", + "loggingDateTime": "Date and Time", + "loggingMethod": "Method", + "DataAnalysis": "Data Analysis", + "Analysis": "Analysis", + "smsBankingTitle": "SMS Banking", + "smsBankingChildTitle": "SMS Logger", + "smsTrackingID": "Tracking ID", + "smsMessage": "Message", + "message": "Message", + "template": "Template", + "smsNo": "Phone Number", + "smsOrgaCode": "Organization Code", + "smsDate": "Date", + "smsStatus": "Status", + "language": "Language", + "viewThirdPartyAccounts": "View Accounts", + "ThirdPartyID": "Third Party ID", + "name": "Name", + "EnterThirdPartyName": "Enter Third Party Name", + "email": "Email", + "Address": "Address", + "phoneNumber": "Phone Number", + "PhoneNumberPlaceHolder": "Enter Phone Number", + "regPhoneNo": "Phone number must be 10 digits", + "NewNoOfAccounts": "New No of Accounts", + "EnterNewNumberOfAccounts": "Enter New Number of Accounts", + "TotalNoOfAccounts": "Total No of Accounts", + "gridSearch": "Search:", + "gridShow": "Show", + "gridEntries": "entries", + "gridFilter": "Filter", + "gridNum10": "10", + "gridNum25": "25", + "gridNum50": "50", + "gridNum100": "100", + "userID": "User ID", + "userId": "User ID", + "userContactNumber": "Enter User Contact Number", + "SelectHomeBranch": "Select Home Branch", + "SelectRole": "Select Role", + "HomeBranch": "Home Branch", + "Role": "Role", + "ResetPassword": "Reset Password", + "enterNewPassword": "Enter New Password", + "oldPassword": "Old Password", + "newPasswordStatic": "New Password", + "savePassword": "Save", + "passwordPattern": "Password must be 8–20 characters and include uppercase, lowercase, number, and special character", + "SMSGatewaySelect": "Select Gateway", + "selectIdentValueType": "Select Type", + "IdTypeSelect": "Select Select Type", + "SMSGatewaySyriatel": "Syriatel", + "SMSGatewayTwillio": "Twilio", + "SMSGatewayJazz": "Jazz", + "syriatelCredentials": "Syriatel Credentials", + "twilioCredentials": "Twilio Credentials", + "jazzCredentials": "Jazz Credentials", + "accountSID": "Account SID", + "authToken": "Auth Token", + "fromNumber": "From Number", + "notificationType": "Notification Type", + "sinceLastDay": "Since last day", + "TodayTotalErrorRequest": "Today Total Error Request", + "TodayTotalPendingSms": "Today Total Pending Sms", + "selectTheDates": "Please Select the Dates", + "selectIdentValue": "Please Select the Identity No", + "selectIdentityValue": "Identity No is Required", + "noLogsFound": "No Logs Found Between these Dates", + "loginSuccess": "Successfully Logged In", + "passwordNotMatched": "Password Does Not Match", + "passwordPatternNotMatched": "Password Pattern Not Matched", + "successDeleted": "Successfully Deleted", + "passwordNotSame": "Password Cannot be same as Old Password", + "passwordTooShort": "Password is too short.", + "passwordsDoNotMatch": "Passwords do not match.", + "SuccessSave": "Successfully Saved", + "SuccessFind": "Successfully Find", + "customerAlreadyUnblocked": "Customer Already UnBlocked", + "SuccessUpdate": "Successfully Updated", + "UpdateFailed": "Unable to update", + "formInvalid": "Form is Invalid", + "ServerError": "Server Error", + "fieldsMissing": "Required Fields are missing or invalid", + "selectAll": "Select All ", + "logoutSuccess": "Successfully Logout", + "smsGateWayChanged": "SMS Gateway Successfully Changed", + "cnic_scnic": "CNIC/SCNIC", + "poc": "POC", + "nicop": "S/NICOP", + "passport": "PASSPORT", + "senderNamePlaceHolder": "Enter Sender Name", + "enterIdentityValue": "Enter Identity Value", + "senderName": "Sender Name", + "passwordChangeRequired": "Password Change Required", + "Next": "Next", + "ERR_APP_B_0001": "Internal Server Error", + "ERR_APP_B_0002": "Possible connection error with {{value1}} module", + "ERR_APP_B_0003": "Bad Request on {{value1}} module", + "ERR_APP_B_0004": "Session timed out", + "ERR_APP_B_0005": "Unauthorized: {{value1}}.", + "ERR_MDL_B_0001": "Purpose Code already exists", + "feedbackSetup": "Feedback Setup", + "credentials": "Credentials", + "credentialsTitle": "Feedback Credentials Setup", + "passwordPlaceholder": "Enter Password", + "confirmPasswordPlaceholder": "Enter confirm password", + "newPasswordPlaceholder": "Enter new password", + "confirmPassword": "Confirm Password", + "fieldRequired": "Field Required", + "emailLabel": "Email", + "emailRequiredError": "Email is required.", + "invalidEmailFormatError": "Invalid email format.", + "invalidEmail": "Enter a valid email with @", + "passNotMatch": "Password does not match", + "POR_ORGACODE": "Organization ID", + "purposeSetup": "Configure Transaction Purpose", + "purpcodeLabel": "Purpose Code", + "purpdescLabel": "Purpose Description", + "purpcodePlaceholder": "Enter Purpose Code", + "purpdescPlaceholder": "Enter Purpose Description", + "transactionDetails": "Transaction Details", + "invalidField": "Invalid Input", + "lengthExceed": "Length exceeded", + "transactionLogs": "Transaction Logs", + "loadingTransactionLogs": "Loading transaction logs...", + "noTransactionLogsFound": "No transaction logs found.", + "logID": "Log ID", + "organization": "Organization", + "transactionID": "Transaction ID", + "drAccount": "DR Account", + "crAccount": "CR Account", + "crPcaglacode": "CR GL Account", + "drPcaGlacode": "DR GL Account", + "paymentMode": "Payment Mode", + "channel": "Channel", + "createdAt": "Created At", + "refresh": "Refresh", + "loading": "Loading", + "action": "Action", + "recordNotFound": "Record not found", + "confirmDelete": "Are you sure you want to delete?", + "confirmSave": "Are you sure you want to save?", + "2-stepAppPassword": "Enter 2-step verification Generated - App Password", + "english": "English", + "arabic": "Arabic", + "userNameRequired": "User name is required", + "userNamePattterenError": "Only lower case alphabets and numbers are allowed", + "PasswordRequired": "Password is required", + "copyRightsReserved": "Copyright © {{currentYearLong}} MFSYS Technologies. All rights reserved.", + "versionAndBuildNumber": "Version {{versionNumber}} Build {{buildNumber}}", + "versionBuildDate": "+ Build Date {{date}}", + "date": "Date", + "logout": "Log Out", + "save": "Save", + "update": "Update", + "cancel": "Cancel", + "thirdPartyRegistrationDetails": "Third Party Registration Details", + "SetupUserDetails": "Setup User Details", + "search": "Search", + "thirdPartyNamePlaceholder": "Enter Third Party Name", + "phoneNumberPlaceholder": "Enter Phone Number", + "newNoOfAccountsPlaceholder": "Enter New Number of Accounts", + "page": "Page", + "of": "of", + "totalItems": "Records", + "record": "Record", + "previous": "Previous", + "next": "Next", + "LOGIN_SUCCESSFULLY": "Login SucessFully", + "RESET_PASSWORD_SUCCESS": "Password Reset Successfully", + "CHANGE_PASSWORD_SUCCESS": "Password Changed Successfully", + "ALREADY_LOGGED_IN": "User Already Logged In", + "ACCESS_DENIED": "Access Denied", + "INTERNAL_SERVER_ERROR": "Internal Server Error", + "CONNECTION_ERROR": "Connection Error", + "BAD_REQUEST": "Bad Request", + "FORBIDDEN_REQUEST": "Forbidden Request", + "UNAUTHORIZED_REQUEST": "Unauthorized Request", + "edit": "Edit", + "delete": "Delete", + "deleteUser": "Delete User", + "permissionManagement": "Permission Managment", + "userCode": "User", + "choose": "Choose", + "allow": "Allow", + "toDateInvalidError": "To Date must be greater than or equal to From Date", + "noLoggingDetailsFound": "No Activity Log Details found", + "noUserDetailsFound": "No User Details found", + "noThirdPartyRegFound": "No Third Party Registration Details Found", + "ERR_SEC_0001": "Email already exists", + "ERR_SEC_0007": "New password cannot be same as old password", + "ERR_SEC_0002": "User ID already exists", + "ERR_SEC_0003": "Old Password is not correct", + "ERR_SEC_0004": "Invalid credentials", + "ERR_SEC_0005": "User not found", + "ERR_SEC_0006": "Incorrect password", + "toDateGreaterThanToday": "To 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", + "nameMinLength": "Name must be at least 5 characters", + "emptySpaceRestriction": "Empty spaces & capital letters are not allowed", + "USER_CREATED_SUCCESS": "User Created", + "USER_UPDATE_SUCCESS": "User Updated", + "USER_DELETE_SUCCESS": "User Deleted", + "SAVED_SUCCESSFULLY": "Saved Successfully", + "oldAndNewPass": "Old password and new password cannot be the same", + "activityLogs": "Activity Logs", + "activityLogDetails": "Activity Log Details", + "transactionCode": "Transaction Code", + "transactionUri": "Transaction URI", + "resetPasswordButton": "Reset Password", + "dateTime": "Date Time", + "responseCode": "Response Code", + "remoteIp": "Remote IP", + "requestBody": "Request Body", + "requestUri": "Request URI", + "method": "Method", + "id": "Id", + "logId": "Log ID", + "porOrgacode": "Organization Code", + "drMbmbkmsnumber": "Debit Account Number", + "crMbmbkmsnumber": "Credit Account Number", + "ppmPymdcode": "Payment Code", + "sgtGntrdate": "Transaction Date", + "sgtGntrcreateat": "Creation Date", + "updatedAt": "Updated At", + "channelCode": "Channel Code", + "userFullname": "Full Name", + "show": "Show", + "entries": "entries", + "tableCollapsed": "Table collapsed", + "showTable": "Show Table", + "collapse": "Collapse", + "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" +}