Files
ISP-Billing/seed_clients.php
2026-01-16 12:06:59 +01:00

188 lines
8.2 KiB
PHP

<?php
/**
* Client Data Seeder Script
* Generates 60 varied client records for testing statistics
*/
// Include the application initialization
require_once 'init.php';
// Sample data arrays for generating varied information
$firstNames = [
'John', 'Jane', 'Michael', 'Sarah', 'David', 'Emily', 'Robert', 'Jessica', 'William', 'Ashley',
'James', 'Amanda', 'Christopher', 'Jennifer', 'Daniel', 'Lisa', 'Matthew', 'Nancy', 'Anthony', 'Karen',
'Mark', 'Betty', 'Donald', 'Helen', 'Steven', 'Sandra', 'Paul', 'Donna', 'Andrew', 'Carol',
'Joshua', 'Ruth', 'Kenneth', 'Sharon', 'Kevin', 'Michelle', 'Brian', 'Laura', 'George', 'Sarah',
'Edward', 'Kimberly', 'Ronald', 'Deborah', 'Timothy', 'Dorothy', 'Jason', 'Lisa', 'Jeffrey', 'Nancy',
'Ryan', 'Karen', 'Jacob', 'Betty', 'Gary', 'Helen', 'Nicholas', 'Sandra', 'Eric', 'Donna'
];
$lastNames = [
'Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez',
'Hernandez', 'Lopez', 'Gonzalez', 'Wilson', 'Anderson', 'Thomas', 'Taylor', 'Moore', 'Jackson', 'Martin',
'Lee', 'Perez', 'Thompson', 'White', 'Harris', 'Sanchez', 'Clark', 'Ramirez', 'Lewis', 'Robinson',
'Walker', 'Young', 'Allen', 'King', 'Wright', 'Scott', 'Torres', 'Nguyen', 'Hill', 'Flores',
'Green', 'Adams', 'Nelson', 'Baker', 'Hall', 'Rivera', 'Campbell', 'Mitchell', 'Carter', 'Roberts',
'Gomez', 'Phillips', 'Evans', 'Turner', 'Diaz', 'Parker', 'Cruz', 'Edwards', 'Collins', 'Reyes'
];
$cities = [
'Nairobi', 'Mombasa', 'Kisumu', 'Nakuru', 'Eldoret', 'Thika', 'Malindi', 'Kitale', 'Garissa', 'Kakamega',
'Nyeri', 'Meru', 'Machakos', 'Kisii', 'Kericho', 'Bungoma', 'Busia', 'Vihiga', 'Siaya', 'Homa Bay',
'Migori', 'Kisii', 'Nyamira', 'Trans Nzoia', 'Uasin Gishu', 'Nandi', 'Baringo', 'Laikipia', 'Nakuru', 'Narok'
];
$districts = [
'Central', 'East', 'West', 'North', 'South', 'Downtown', 'Uptown', 'Riverside', 'Hillside', 'Valley',
'Park', 'Garden', 'Heights', 'Ridge', 'Meadows', 'Woods', 'Springs', 'Lakes', 'Pines', 'Oaks'
];
$states = [
'Nairobi', 'Mombasa', 'Kisumu', 'Nakuru', 'Uasin Gishu', 'Kakamega', 'Bungoma', 'Busia', 'Vihiga', 'Siaya',
'Homa Bay', 'Migori', 'Kisii', 'Nyamira', 'Trans Nzoia', 'Nandi', 'Baringo', 'Laikipia', 'Narok', 'Kajiado'
];
$serviceTypes = ['Hotspot', 'PPPoE', 'Others'];
$accountTypes = ['Business', 'Personal'];
$statuses = ['Active', 'Inactive', 'Limited', 'Suspended', 'Banned', 'Disabled'];
// Function to generate random phone number
function generatePhoneNumber() {
$prefixes = ['254', '2547', '2541', '2542', '2543', '2544', '2545', '2546', '2548', '2549'];
$prefix = $prefixes[array_rand($prefixes)];
$suffix = str_pad(rand(0, 99999999), 8, '0', STR_PAD_LEFT);
return $prefix . $suffix;
}
// Function to generate random email
function generateEmail($firstName, $lastName) {
$domains = ['gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com', 'company.co.ke', 'business.ke'];
$domain = $domains[array_rand($domains)];
$variations = ['', '.', '_', rand(1, 99)];
$variation = $variations[array_rand($variations)];
return strtolower($firstName . $variation . $lastName . '@' . $domain);
}
// Function to generate random coordinates (Kenya bounds)
function generateCoordinates() {
$lat = rand(-4700000, -1000000) / 100000; // Kenya latitude range
$lng = rand(33000000, 42000000) / 100000; // Kenya longitude range
return $lat . ',' . $lng;
}
// Function to generate random balance
function generateBalance() {
$balances = [0, 50, 100, 150, 200, 250, 300, 500, 750, 1000, 1500, 2000, 2500, 3000, 5000];
return $balances[array_rand($balances)];
}
// Function to generate random address
function generateAddress($city) {
$streets = ['Main St', 'First Ave', 'Second Ave', 'Oak St', 'Pine St', 'Cedar Ave', 'Maple Dr', 'Elm St', 'Park Ave', 'Broadway'];
$street = $streets[array_rand($streets)];
$number = rand(1, 9999);
return $number . ' ' . $street . ', ' . $city;
}
// Function to generate random zip code
function generateZipCode() {
return str_pad(rand(10000, 99999), 5, '0', STR_PAD_LEFT);
}
echo "Starting client data seeding...\n";
try {
// Get admin ID for created_by field
$admin = ORM::for_table('tbl_users')->where('user_type', 'SuperAdmin')->find_one();
$adminId = $admin ? $admin['id'] : 1;
$successCount = 0;
$errorCount = 0;
for ($i = 1; $i <= 60; $i++) {
try {
// Generate random data
$firstName = $firstNames[array_rand($firstNames)];
$lastName = $lastNames[array_rand($lastNames)];
$fullname = $firstName . ' ' . $lastName;
$username = generatePhoneNumber();
$email = generateEmail($firstName, $lastName);
$city = $cities[array_rand($cities)];
$district = $districts[array_rand($districts)];
$state = $states[array_rand($states)];
$serviceType = $serviceTypes[array_rand($serviceTypes)];
$accountType = $accountTypes[array_rand($accountTypes)];
$status = $statuses[array_rand($statuses)];
$balance = generateBalance();
$coordinates = generateCoordinates();
$address = generateAddress($city);
$zip = generateZipCode();
$phonenumber = generatePhoneNumber();
// Generate passwords
$password = 'client' . $i . 'pass';
$pppoePassword = 'pppoe' . $i . 'pass';
// Create customer record
$customer = ORM::for_table('tbl_customers')->create();
$customer->username = $username;
$customer->password = $password;
$customer->pppoe_password = $pppoePassword;
$customer->email = $email;
$customer->account_type = $accountType;
$customer->fullname = $fullname;
$customer->address = $address;
$customer->created_by = $adminId;
$customer->phonenumber = $phonenumber;
$customer->service_type = $serviceType;
$customer->coordinates = $coordinates;
$customer->city = $city;
$customer->district = $district;
$customer->state = $state;
$customer->zip = $zip;
$customer->balance = $balance;
$customer->auto_renewal = rand(0, 1);
$customer->status = $status;
if ($customer->save()) {
$successCount++;
echo "Created client #$i: $fullname ($email) - $serviceType - $accountType - $status\n";
// Add some custom fields for variety
if (rand(0, 1)) { // 50% chance of having custom fields
$customFields = [
'Company' => 'Company ' . $i,
'Department' => ['IT', 'Sales', 'Marketing', 'Finance', 'HR'][array_rand(['IT', 'Sales', 'Marketing', 'Finance', 'HR'])],
'Referral' => ['Website', 'Friend', 'Advertisement', 'Walk-in', 'Social Media'][array_rand(['Website', 'Friend', 'Advertisement', 'Walk-in', 'Social Media'])],
'Notes' => 'Customer notes for ' . $fullname
];
foreach ($customFields as $fieldName => $fieldValue) {
$customField = ORM::for_table('tbl_customers_fields')->create();
$customField->customer_id = $customer->id();
$customField->field_name = $fieldName;
$customField->field_value = $fieldValue;
$customField->save();
}
}
} else {
$errorCount++;
echo "Failed to create client #$i\n";
}
} catch (Exception $e) {
$errorCount++;
echo "Error creating client #$i: " . $e->getMessage() . "\n";
}
}
echo "\nSeeding completed!\n";
echo "Successfully created: $successCount clients\n";
echo "Errors: $errorCount\n";
echo "Total clients in database: " . ORM::for_table('tbl_customers')->count() . "\n";
} catch (Exception $e) {
echo "Fatal error: " . $e->getMessage() . "\n";
}
?>