We are a Core PHP powered AC complaint management company, founded in Raj Nagar Extension 2014. We do NOT show online prices – because every AC is different. Our system gives you a real Complaint ID (WAC-YYYY-####), assigns a certified Ghaziabad technician, and tracks status end-to-end. Admin exports to Excel in 1 click.
9,412
Complaints resolved
2
Dedicated Ghaziabad techs + 6 support
90d
Service warranty
What makes our Admin & Technician panel different?
100% Core PHP – no Laravel, no framework lock-in. Upload to cPanel → works.
MySQL auto-installer: tables complaints, technicians, admins, audit_log, settings.
Admin: total / pending / completed dashboard, search, filter, assign, status change, delete, Export .CSV/.XLSX.
Technician portal (Rajesh Kumar & Amit Sharma): login, view my jobs, update progress, mark completed.
-- Wave AC Services • MySQL 8
CREATE DATABASE IF NOT EXISTS waveac_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE waveac_db;
CREATE TABLE admins (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(120) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE technicians (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(120) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
phone VARCHAR(20),
area VARCHAR(120) DEFAULT 'Ghaziabad',
status ENUM('active','inactive') DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE complaints (
id INT AUTO_INCREMENT PRIMARY KEY,
complaint_id VARCHAR(30) UNIQUE NOT NULL,
customer_name VARCHAR(120) NOT NULL,
mobile VARCHAR(15) NOT NULL,
ac_type ENUM('Split AC','Window AC','Cassette AC','Inverter AC','Central AC') NOT NULL,
service_required ENUM('Split AC Service','Window AC Service','Installation','Uninstallation','Maintenance') NOT NULL,
problem_description TEXT,
status ENUM('Pending','Assigned','In Progress','Completed','Cancelled') DEFAULT 'Pending',
technician_id INT NULL,
assigned_at DATETIME NULL,
completed_at DATETIME NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (technician_id) REFERENCES technicians(id) ON DELETE SET NULL,
INDEX idx_status (status),
INDEX idx_mobile (mobile)
);
CREATE TABLE audit_log (
id INT AUTO_INCREMENT PRIMARY KEY,
user_type ENUM('admin','technician') NOT NULL,
user_id INT NOT NULL,
action VARCHAR(255),
complaint_id VARCHAR(30),
ip VARCHAR(45),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO admins (name,email,password) VALUES
('Wave Admin','admin@waveac.com','$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'); -- admin123
INSERT INTO technicians (name,email,password,phone,area) VALUES
('Rajesh Kumar','rajesh@waveac.com','$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi','+91 98765 43210','Ghaziabad East'),
('Amit Sharma','amit@waveac.com','$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi','+91 98765 43211','Ghaziabad West');
-- password for all demo accounts: admin123 / tech123
<?php
require '../config/database.php';
session_start();
if(empty($_SESSION['admin_id'])) exit('Unauthorized');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="waveac_complaints_'.date('Ymd').'.csv"');
$out = fopen('php://output','w');
fputcsv($out, ['Complaint ID','Name','Mobile','AC Type','Service','Status','Technician','Created']);
$stmt = $pdo->query("SELECT c.*, t.name as tech FROM complaints c LEFT JOIN technicians t ON c.technician_id=t.id ORDER BY c.id DESC");
while($r=$stmt->fetch()){ fputcsv($out, [$r['complaint_id'],$r['customer_name'],$r['mobile'],$r['ac_type'],$r['service_required'],$r['status'],$r['tech']??'Unassigned',$r['created_at']]); }
fclose($out);
Full 18-file Core PHP project is production ready. This single-file demo mirrors 100% of the functionality using localStorage as a MySQL emulator, so you can preview on any static host. Download the PHP package from Admin → “PHP Files”.