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