Skip to content

Software Settings ​

Overview ​

Software Settings control the core behavior, features, and modules of ZAL ULTRA. These settings affect data validation, UI display, logging, security, and enable/disable major system modules. Proper configuration is crucial for optimal system performance.


📋 Table of Contents ​

  1. Data Format Settings
  2. Display & UI Settings
  3. Google Maps Integration
  4. Module Management
  5. Logging & Debugging
  6. Import & Migration
  7. Network Security

Data Format Settings ​

Phone Format ​

Field Name: phone_formate
Type: Text Input
Required: Yes
Default: +880XXXXXXXXXX

Description ​

Defines the standard phone number format used throughout the entire system for subscribers, users, and SMS sending.

Format Patterns ​

  • X = Any digit (0-9)
  • + = Country code prefix
  • - = Separator (optional)

Examples by Country ​

Bangladesh: +880XXXXXXXXXX
USA: +1XXXXXXXXXX
India: +91XXXXXXXXXX
Pakistan: +92XXXXXXXXXX
Kenya: +254XXXXXXXXX

System Impact ​

  • Validation: All phone inputs validated against this format
  • SMS Gateway: Numbers formatted before sending
  • Display: Numbers shown in this format across all pages
  • CSV Import: Import validates against this format

Phone Format Status ​

Field Name: phone_formate_status
Type: Toggle Switch (On/Off)
Default: Off

When Enabled (On) ​

  • ✅ Phone numbers MUST match the defined format
  • ✅ Invalid numbers rejected during creation/update
  • ✅ Real-time validation in forms

When Disabled (Off) ​

  • ⚠️ Numbers can be entered in any format
  • ⚠️ May cause SMS delivery failures

Recommendation: Keep this ENABLED for data consistency.


Identity Format ​

Field Name: identity_formate
Type: Text Input
Required: Yes
Default: XXXXXXXXXX

Description ​

Defines the format for identity documents (National ID, Passport, etc.).

Format Patterns ​

  • X = Any digit (0-9)
  • A = Any letter (A-Z, a-z)
  • # = Any alphanumeric

Examples ​

Bangladesh NID (Old): XXXXXXXXXX (10 digits)
Bangladesh NID (New): XXXXXXXXXXXXX (13 digits)
Passport: AA####### (2 letters + 7 alphanumeric)

Identity Format Status ​

Field Name: identity_formate_status
Type: Toggle Switch (On/Off)
Default: Off

Enables or disables strict identity number format validation.


Display & UI Settings ​

Page Loading Animation ​

Field Name: page_loading
Type: Dropdown Select
Options: spinner-message, spinner-logo, none
Default: spinner-message

Options ​

  • spinner-message - Shows spinner with loading message
  • spinner-logo - Shows spinner with company logo (better branding)
  • none - No loading animation (fastest perceived performance)

Table View Type ​

Field Name: table_view_type
Type: Dropdown Select
Options: default, compact, comfortable
Default: default

Options ​

  • default - Standard row height (balanced view)
  • compact - Smaller rows (more data visible, recommended for 10,000+ records)
  • comfortable - Larger rows (easier to read, better for data entry)

Applies To ​

All data tables: Subscriber list, User list, Invoice list, Payment list, Package list, etc.


Google Maps Integration ​

Google Map Status ​

Field Name: google_map_status
Type: Toggle Switch (On/Off)
Default: Off

When Enabled (On) ​

  • ✅ Google Maps displayed on dashboard
  • ✅ Subscriber locations shown with markers
  • ✅ Click markers to view subscriber details
  • ✅ Visual representation of subscriber distribution

When Disabled (Off) ​

  • ❌ No map displayed
  • ✅ No API calls (saves quota)
  • ✅ Faster dashboard loading (~500ms faster)

Performance Impact ​

  • Adds ~500ms to dashboard load time
  • Loads up to 100 subscribers with valid coordinates
  • Requires valid Google Maps API key

Google Map API Key ​

Field Name: google_map_api_key
Type: Text Input
Required: Yes (if Google Map Status is enabled)

How to Get API Key ​

  1. Go to Google Cloud Console
  2. Create project or select existing
  3. Enable "Maps JavaScript API"
  4. Create credentials → API Key
  5. Restrict API key to your domain
  6. Copy and paste key here

Security Best Practices ​

  • ✅ Restrict API key to your domain only
  • ✅ Enable only required APIs
  • ✅ Set usage quotas to prevent abuse
  • ✅ Monitor API usage regularly

Pricing ​

  • Free Tier: 28,000 map loads per month
  • Cost: $7 per 1,000 additional map loads

Module Management ​

These settings enable or disable entire modules. Disabling unused modules improves performance and simplifies the UI.

Inventory Module Status ​

Field Name: inventory_module_status
Type: Toggle Switch (On/Off)
Default: Off

When Enabled (On) ​

  • ✅ Inventory menu visible
  • ✅ Manage products, categories, stock levels
  • ✅ Track purchase orders and sales
  • ✅ Inventory reports available

Use Cases ​

  • ISPs selling routers, cables, accessories
  • Tracking hardware inventory
  • Managing stock levels

Voucher Module Status ​

Field Name: voucher_module_status
Type: Toggle Switch (On/Off)
Default: Off

When Enabled (On) ​

  • ✅ Generate voucher codes
  • ✅ Hotspot card printing
  • ✅ Batch voucher generation
  • ✅ Voucher sales tracking

Use Cases ​

  • Hotspot/WiFi businesses
  • Prepaid internet cards
  • Guest WiFi access
  • Hotel/cafe WiFi

Prepaid Card Module Status ​

Field Name: prepaid_card_module_status
Type: Toggle Switch (On/Off)
Default: Off

When Enabled (On) ​

  • ✅ Generate scratch cards
  • ✅ Card recharge system
  • ✅ Card sales tracking
  • ✅ Batch card generation

Difference from Voucher ​

  • Voucher: For internet access codes (one-time login)
  • Prepaid Card: For balance recharge (add money to account)

Tickets Module Status ​

Field Name: tickets_module_status
Type: Toggle Switch (On/Off)
Default: Off

When Enabled (On) ​

  • ✅ Support ticket system active
  • ✅ Subscribers can create tickets
  • ✅ Staff can respond to tickets
  • ✅ Ticket status tracking
  • ✅ Email notifications

Use Cases ​

  • Customer support management
  • Technical issue tracking
  • Billing inquiries
  • Service requests

Notices Module Status ​

Field Name: notices_module_status
Type: Toggle Switch (On/Off)
Default: Off

When Enabled (On) ​

  • ✅ Create system-wide announcements
  • ✅ Notices displayed on dashboard
  • ✅ Scrolling notice ticker
  • ✅ Target specific user types

Use Cases ​

  • System maintenance announcements
  • Payment reminders
  • New feature announcements
  • Holiday schedules

Department Module Status ​

Field Name: department_module_status
Type: Toggle Switch (On/Off)
Default: Off

When Enabled (On) ​

  • ✅ Create departments (Sales, Support, Technical, etc.)
  • ✅ Assign staff to departments
  • ✅ Department-based reporting
  • ✅ Department-wise permissions

Use Cases ​

  • Large ISPs with multiple departments
  • Organizing staff by function
  • Team management

Logging & Debugging ​

CoA Request Log Status ​

Field Name: coa_request_log_status
Type: Toggle Switch (On/Off)
Default: Off

What is CoA? ​

CoA (Change of Authorization) is a RADIUS protocol feature (RFC 5176) that allows the server to send real-time commands to NAS (Network Access Server) to:

  • Disconnect a user session immediately
  • Change user bandwidth limits
  • Update user policies
  • Force re-authentication

When Enabled (On) ​

  • ✅ All CoA requests are logged to database
  • ✅ Log includes:
    • Subscriber ID and username
    • NAS IP address and port
    • CoA command sent (Disconnect, CoA-Request)
    • Response from NAS
    • Success/failure status
    • Timestamp
  • ✅ Logs stored in coa_requests table
  • ✅ Viewable in Logs → CoA Logs menu

When Disabled (Off) ​

  • ❌ CoA requests are NOT logged
  • ✅ CoA functionality still works normally
  • ✅ Better performance (no database writes)

System Impact ​

Database:

  • Table: coa_requests
  • Growth: ~100-1000 records per day
  • Storage: ~1KB per record

Performance:

  • Minimal impact (~5ms per CoA request)
  • Recommended for debugging only

Code Location:

php
// File: app/Services/RadiusServices.php
// Lines: 474-480
if (isset($softwareSettings->coa_request_log_status) && 
    $softwareSettings->coa_request_log_status == 1) {
    $coa = new CoaRequest;
    $coa->isp_id = $subscriber->isp_id;
    $coa->subscriber_id = $subscriber->id;
    $coa->nas_ip = $nasData->nas_ip;
    $coa->command = 'Disconnect-Request';
    $coa->save();
}

Use Cases ​

  • Debugging: Troubleshoot CoA failures
  • Auditing: Track all CoA requests for compliance
  • Monitoring: Identify NAS connectivity issues
  • Support: Investigate subscriber complaints

Best Practice ​

  • ✅ Enable during initial setup and testing
  • ✅ Enable when troubleshooting connection issues
  • ❌ Disable in production for better performance
  • ✅ Periodically clean old logs (older than 30 days)

Failed Auto Renew Log Status ​

Field Name: failed_auto_renew_log_status
Type: Toggle Switch (On/Off)
Default: Off

CRITICAL SETTING

This is one of the MOST IMPORTANT settings for monitoring system health and revenue. ALWAYS KEEP ENABLED in production.

What is Auto Renew? ​

Auto Renew automatically renews subscriber packages when they expire, ensuring continuous service and revenue. It runs every minute via cron job.

When Enabled (On) ​

  • ✅ All failed auto-renewal attempts are logged
  • ✅ Log includes:
    • Subscriber ID, username, and full name
    • Package ID and name
    • Failure reason (detailed)
    • Subscriber balance
    • Reseller balance
    • Package price
    • Discount amount
    • Timestamp
  • ✅ Logs stored in auto_renew_failed_logs table
  • ✅ Viewable in Logs → Failed Auto Renew menu

When Disabled (Off) ​

  • ❌ Failed attempts are NOT logged
  • ⚠️ You will NOT know why renewals are failing
  • ⚠️ Revenue loss cannot be tracked

Failure Reasons Logged ​

  1. Insufficient Subscriber Balance - Prepaid subscriber doesn't have enough balance
  2. Insufficient Reseller Balance - Reseller doesn't have enough balance (postpaid)
  3. Inactive Subscriber - Subscriber account is disabled
  4. Inactive Reseller - Reseller account is disabled
  5. Package Auto Renew Disabled - Package has auto-renew turned off
  6. Subscriber Auto Renew Disabled - Subscriber has auto-renew turned off
  7. Reseller Auto Renew Disabled - Reseller has auto-renew turned off
  8. Invalid Package Accounting - Package pricing not configured properly
  9. Package Validation Failed - Package data is invalid or missing
  10. Excessive Discount - Subscriber discount exceeds reseller profit margin
  11. Invoice Generation Failed - Error creating invoice
  12. Duplicate Activation - Already activated in last 2 minutes
  13. Too Frequent Invoice - Invoice created in last 2 minutes
  14. Invalid Data - Missing required subscriber or package data

System Impact ​

Database:

  • Table: auto_renew_failed_logs
  • Growth: Varies (0-1000+ records per day depending on issues)
  • Storage: ~500 bytes per record

Performance:

  • Minimal impact (~5ms per failed attempt)
  • Only writes on failure (not on success)

Code Location:

php
// File: app/Services/Command/AutorenewServices.php
// Lines: 918-921
if (isset($softwareSettings->failed_auto_renew_log_status) && 
    $softwareSettings->failed_auto_renew_log_status == 1) {
    $failedLog = new AutoRenewFailedLog();
    $failedLog->subscriber_id = $subscriberData->id;
    $failedLog->failure_reason = $reason;
    $failedLog->subscriber_balance = $subscriberBalance;
    $failedLog->save();
}

Use Cases ​

  • Revenue Monitoring: Track revenue loss from failed renewals
  • Troubleshooting: Identify why renewals are failing
  • Customer Support: Explain to subscribers why renewal failed
  • Financial Analysis: Calculate potential revenue loss
  • Proactive Support: Contact subscribers before balance runs out

Revenue Impact Example ​

Scenario:
- 100 failed renewals per day
- Average package price: $10
- Monthly revenue loss: 100 × $10 × 30 = $30,000

With logging enabled:
- Identify issues quickly
- Contact subscribers proactively
- Recover 70% of failed renewals
- Recover $21,000 per month

Best Practice ​

  • ✅ ALWAYS KEEP ENABLED in production
  • ✅ Review logs daily to identify issues
  • ✅ Set up alerts for high failure rates
  • ✅ Clean old logs periodically (older than 90 days)
  • ✅ Export logs monthly for analysis

Viewing Logs ​

  1. Go to Logs → Failed Auto Renew
  2. Filter by date range, subscriber, or failure reason
  3. Export to CSV for analysis
  4. Take action based on failure reasons

Import & Migration ​

Import from ZAL PRO Status ​

Field Name: import_from_zalpro_status
Type: Toggle Switch (On/Off)
Default: Off

What is ZAL PRO? ​

ZAL PRO is the previous version of this ISP management software. This feature allows you to migrate all your data from ZAL PRO to ZAL ULTRA.

When Enabled (On) ​

  • ✅ Import menu visible in sidebar
  • ✅ Can import subscribers from ZAL PRO
  • ✅ CSV import templates for ZAL PRO format
  • ✅ Data mapping and transformation tools
  • ✅ Validation and error reporting
  • ✅ Progress tracking

When Disabled (Off) ​

  • ❌ Import features hidden
  • ❌ Cannot import from ZAL PRO

What Can Be Imported? ​

  1. Subscribers (46 fields)

    • Personal information
    • Contact details
    • Network configuration
    • Package assignments
    • Expiration dates
    • Location data (latitude/longitude)
    • FTTH details
  2. Packages - Package configurations and pricing

  3. Users/Resellers - User accounts and hierarchy

  4. Invoices - Historical invoices

  5. RADIUS Data - radcheck, radreply, radusergroup

Import Process ​

  1. Export from ZAL PRO - Export data to CSV format
  2. Upload to ZAL ULTRA - Go to Subscribers → Import
  3. Select Options:
    • Import Type: New or Update
    • Process Type: Frontend (max 1000) or Backend (unlimited)
  4. Upload CSV - Select file and click Import
  5. Monitor Progress - Track import status
  6. Review Logs - Check for errors

System Impact ​

  • Performance: Queue-based processing (no timeouts)
  • Capacity: Can handle 10,000+ records
  • Validation: Phone/identity format validation
  • Duplicate Detection: Based on username

Best Practice ​

  • ✅ Enable only during migration period
  • ✅ Test with small dataset first (100 records)
  • ✅ Backup database before import
  • ✅ Use backend processing for large datasets
  • ✅ Disable after migration is complete

Network Security ​

MAC Lock Mode Status ​

Field Name: mac_lock_mode_status
Type: Dropdown Select
Options: disabled, strict, flexible
Default: disabled

What is MAC Locking? ​

MAC (Media Access Control) locking restricts a subscriber's internet access to specific devices identified by their MAC address. This prevents:

  • Account sharing between multiple users
  • Unauthorized device usage
  • Multiple simultaneous connections
  • Revenue loss from account sharing

Options ​

1. Disabled ​
  • ❌ No MAC address locking
  • ✅ Subscribers can connect from any device
  • ✅ Unlimited devices
  • ⚠️ Account sharing possible

When to Use:

  • Public WiFi hotspots
  • Guest networks
  • No security concerns
2. Strict Mode ​
  • ✅ MAC address MUST be pre-registered
  • ✅ Only registered MAC addresses can connect
  • ❌ Unregistered devices are blocked immediately
  • ✅ CoA disconnect sent to unregistered devices
  • ✅ Maximum security

Strict Mode Flow:

1. Subscriber tries to connect from new device
2. RADIUS checks MAC address in database
3. MAC not found → Connection REJECTED
4. CoA disconnect sent to NAS
5. Subscriber must register MAC address first
6. Device can now connect

When to Use:

  • Corporate clients
  • Business accounts
  • High-security networks
  • Prevent account sharing
3. Flexible Mode ​
  • ✅ First device MAC is auto-registered
  • ✅ Subsequent devices must be manually registered
  • ✅ Allows initial connection without registration
  • ⚠️ Less secure than strict mode

Flexible Mode Flow:

1. Subscriber connects from new device (first time)
2. RADIUS checks MAC address
3. MAC not found, but subscriber has no registered MACs
4. Connection ALLOWED
5. MAC address auto-registered
6. Next device must be manually registered

When to Use:

  • Residential clients
  • Better user experience
  • Still prevents excessive sharing

System Impact ​

Database:

  • Table: subscriber_mac_addresses
  • Columns: subscriber_id, mac_address, device_name, registered_at

RADIUS Integration:

  • MAC address checked during authentication
  • CoA disconnect sent for unauthorized MACs
  • Logs stored in coa_mac_lock_logs table

Best Practice ​

  • ✅ Use Strict Mode for corporate/business clients
  • ✅ Use Flexible Mode for residential clients
  • ✅ Allow 2-3 MAC addresses per subscriber
  • ✅ Provide self-service MAC registration portal

MAC Address Formats Supported ​

  • AA:BB:CC:DD:EE:FF
  • AA-BB-CC-DD-EE-FF
  • AABBCCDDEEFF

Summary & Recommendations ​

Critical Settings (Always Enable) ​

  1. ✅ Failed Auto Renew Log Status - Track revenue loss
  2. ✅ Phone Format Status - Data consistency
  3. ✅ Identity Format Status - Data validation

Performance Settings ​

SettingSmall ISP (<1K)Large ISP (10K+)
Table ViewDefaultCompact
Page LoadingSpinner LogoNone
Google MapsEnabledDisabled
CoA LogsEnabledDisabled

Module Recommendations ​

  • Inventory Module: Enable if selling hardware
  • Voucher Module: Enable for hotspot business
  • Tickets Module: Enable for customer support
  • Notices Module: Enable for announcements
  • Department Module: Enable for large teams (10+ staff)

Security Recommendations ​

  • MAC Lock Mode:
    • Corporate: Strict
    • Residential: Flexible
    • Public WiFi: Disabled

Troubleshooting ​

Phone Numbers Not Validating ​

  • Check phone_formate_status is enabled
  • Verify phone_formate pattern is correct
  • Test with sample phone number

Google Maps Not Showing ​

  • Check google_map_status is enabled
  • Verify google_map_api_key is valid
  • Check API key restrictions
  • Verify subscribers have latitude/longitude

CoA Requests Not Working ​

  • Check NAS configuration
  • Verify CoA port (3799) is open
  • Enable coa_request_log_status to debug
  • Check logs for error messages

Auto-Renew Failing ​

  • Enable failed_auto_renew_log_status
  • Check logs for failure reasons
  • Verify subscriber/reseller balance
  • Check package auto-renew settings

MAC Lock Not Working ​

  • Verify mac_lock_mode_status is not disabled
  • Check RADIUS configuration
  • Enable CoA logs to debug
  • Verify MAC addresses are registered

www.onezeroart.com