diff --git a/agen/autentikasi/aut_akses.php b/agen/autentikasi/aut_akses.php index 843b800..eb3ce7e 100644 --- a/agen/autentikasi/aut_akses.php +++ b/agen/autentikasi/aut_akses.php @@ -80,8 +80,8 @@ $logo = (baseurl() == "https://agen.manjapro.net/") ? 'images/white_logo_manja.p - - + + @@ -210,11 +210,11 @@ $logo = (baseurl() == "https://agen.manjapro.net/") ? 'images/white_logo_manja.p - + - + - + + + + +

OCR dengan Google Vision API

+ +
+
+ + + +

Hasil:

+ + + + + + + + diff --git a/load/pppoe_update.log b/load/pppoe_update.log index b8b9c48..47c5613 100644 --- a/load/pppoe_update.log +++ b/load/pppoe_update.log @@ -1,6 +1,6 @@ SV_Cikembar_Utama =>
SV_BojongKerta =>
-SV_Permata_Sampora =>
+RO Bima Net =>
SV_Kingnet_Cibadak =>
SV_CC-Net_Cipicung =>
SV_Nusaina_Cibadak =>
@@ -8,7 +8,7 @@ SV_Diamond Net =>
SV_22P Net Cibadak =>
SV_Nettizen_Segaranten =>
SV-DNY-Net-1 =>
-SV_NTA_2_Pasawahan =>
+SV_NTA_2_PSW_1 =>
SV_NTA_1 =>
SV-Cicukang =>
RO-Bumdes-Mekarmanah =>
@@ -46,3 +46,11 @@ RO - Netborhood Wifi =>
Neglasari =>
SV-DNY-Net-2 =>
DNY-Neglasari =>
+RO_TTO =>
+AP - NET =>
+GAS NET =>
+SV_NTA_2_PSW_2 =>
+chr tencent =>
+DamarisNet =>
+Triunsa =>
+Mikrotik GR 3 =>
diff --git a/load/test.php b/load/test.php index c7f6a0e..5087692 100644 --- a/load/test.php +++ b/load/test.php @@ -1,17 +1,146 @@ -prepare($sql); +$stmt->execute($idServers); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); + +if ($results) { + $no = 1; + $gmailDomain = '@gmail.com'; + + foreach ($results as $row) { + $id = $row['id']; + $nama = $row['nama']; + $email = trim($row['email']); + $emailLower = strtolower($email); + + if (!empty($email) && filter_var($email, FILTER_VALIDATE_EMAIL) && substr($emailLower, -strlen($gmailDomain)) === $gmailDomain) { + // Email valid dan Gmail + if ($email === $emailLower) { + // Semua huruf kecil -> hitam (biarkan) + $color = "black"; + echo "$no => $id => $nama => " . htmlspecialchars($email) . "
"; + } else { + // Ada huruf besar -> kuning (UPDATE ke lowercase) + $color = "orange"; + // $update = $pdo->prepare("UPDATE pelanggan SET email = ? WHERE id = ?"); + // $update->execute([$emailLower, $id]); + + echo "$no => $id => $nama => " . htmlspecialchars($email) . " =UPDATED> $emailLower
"; + } + } else { + // Email tidak valid -> generate baru dan UPDATE + $namaClean = strtolower(preg_replace('/[^a-z]/i', '', $nama)); + $randomNumber = rand(1000, 9999); + $newmail = $namaClean . $randomNumber . $gmailDomain; + + // $update = $pdo->prepare("UPDATE pelanggan SET email = ? WHERE id = ?"); + // $update->execute([$newmail, $id]); + + echo "$no => $id => $nama => " . htmlspecialchars($email) . " =NEW> $newmail
"; + } + + $no++; + } +} else { + echo "Tidak ada data ditemukan."; +} -include "../controller/crudRadiusServer.php"; -$radius = new CrudRadiusServer(); -$radius->request('add_user', 'POST', [ - 'jenis' => 'Hotspot', - 'username' => 'TESTVCR', - 'password' => 'TESTVCR', - 'groupname' => 'paket-6-device-8', - 'nasgroupname' => 'server8' -]); +// try { +// $bulan = '2025-08'; +// $tanggal = date('Y-m-d'); +// $metode = "API Payment"; + +// $stmt = $pdo->prepare(" +// SELECT v_tagihan.* +// FROM v_tagihan +// LEFT JOIN transaksi ON v_tagihan.id = transaksi.id_tagihan +// WHERE transaksi.id_tagihan IS NULL +// AND SUBSTRING(v_tagihan.limit_pembayaran, 1, 7) = :bulan +// AND v_tagihan.status = 'lunas' +// "); +// $stmt->bindParam(':bulan', $bulan); +// $stmt->execute(); + +// $results = $stmt->fetchAll(PDO::FETCH_ASSOC); + +// if (!$results) { +// echo "Tidak ada tagihan lunas tanpa transaksi di bulan $bulan.
"; +// exit; +// } + +// echo "Memproses " . count($results) . " tagihan lunas tanpa transaksi...
"; + +// foreach ($results as $index => $tagihan) { +// $idtag = $tagihan['id']; +// $cek = $pdo->prepare("SELECT id_tagihan FROM transaksi WHERE id_tagihan = :idtag"); +// $cek->bindParam(':idtag', $idtag, PDO::PARAM_INT); +// $cek->execute(); + +// if ($cek->fetchColumn() === false) { +// $statuskas = $tagihan['jenis_layanan'] === 'Hotspot' ? 'Pendapatan Hotspot' : 'Pendapatan PPPOE'; + +// // $insert = $pdo->prepare(" +// // INSERT INTO transaksi ( +// // id_data_server, id_tagihan, id_user_akses, start_time, +// // keterangan, pemasukan, metode_pembayaran, status +// // ) VALUES ( +// // :idds, :idtag, :idua, :start_time, +// // :keterangan, :pemasukan, :metode, :status +// // ) +// // "); +// // $insert->bindParam(':idds', $tagihan['id_data_server'], PDO::PARAM_INT); +// // $insert->bindParam(':idtag', $tagihan['id'], PDO::PARAM_INT); +// // $insert->bindParam(':idua', $tagihan['id_marketing'], PDO::PARAM_INT); +// // $insert->bindParam(':start_time', $tanggal); +// // $insert->bindParam(':keterangan', $tagihan['keterangan']); +// // $insert->bindParam(':pemasukan', $tagihan['verifikasi_tagihan']); +// // $insert->bindParam(':metode', $metode); +// // $insert->bindParam(':status', $statuskas); +// // $insert->execute(); + +// echo "[SUKSES] Insert transaksi untuk tagihan ID: {$tagihan['id']} - {$tagihan['nama']} - {$tagihan['nama_server']}
"; +// } else { +// echo "[LEWAT] Tagihan ID {$tagihan['id']} sudah ada di transaksi.
"; +// } +// } + +// } catch (PDOException $e) { +// echo "[PDO ERROR] " . $e->getMessage() . "
"; +// } catch (Exception $e) { +// echo "[ERROR] " . $e->getMessage() . "
"; +// } + + +// include "../controller/crudRadiusServer.php"; + +// $radius = new CrudRadiusServer(); +// $radius->request('add_user', 'POST', [ +// 'jenis' => 'Hotspot', +// 'username' => 'TESTVCR', +// 'password' => 'TESTVCR', +// 'groupname' => 'paket-6-device-8', +// 'nasgroupname' => 'server8' +// ]); // $radius->request('add_user', 'POST', [ @@ -133,7 +262,7 @@ $radius->request('add_user', 'POST', [ // // $updateStatusOff[] = $idakun; // // } // // } -// // echo $row['nama'] . " =>
\n"; +// // echo $row['nama'] . " =>

"; // // // Update status koneksi yang 'On' sekaligus // // if (!empty($updates)) { @@ -157,6 +286,6 @@ $radius->request('add_user', 'POST', [ // } // } else { -// echo "No data found.\n"; +// echo "No data found.
"; // } // ?> diff --git a/load/update_sewa_apk.log b/load/update_sewa_apk.log index 88a941e..4b4713e 100644 --- a/load/update_sewa_apk.log +++ b/load/update_sewa_apk.log @@ -1 +1 @@ -Tidak perlu update untuk ID: 2 Rp.200,000
Harga khusus untuk ID: 3 Rp.250,000
Tidak perlu update untuk ID: 4 Rp.300,000
Tidak perlu update untuk ID: 5 Rp.300,000
Tidak perlu update untuk ID: 6 Rp.200,000
Harga khusus untuk ID: 7 Rp.200,000
Tidak perlu update untuk ID: 8 Rp.200,000
Tidak perlu update untuk ID: 9 Rp.200,000
Tidak perlu update untuk ID: 10 Rp.200,000
Tidak perlu update untuk ID: 12 Rp.750,000
Tidak perlu update untuk ID: 13 Rp.750,000
Tidak perlu update untuk ID: 14 Rp.450,000
Tidak perlu update untuk ID: 15 Rp.450,000
Tidak perlu update untuk ID: 16 Rp.300,000
Harga khusus untuk ID: 17 Rp.300,000
Tidak perlu update untuk ID: 18 Rp.300,000
Tidak perlu update untuk ID: 19 Rp.450,000
Tidak perlu update untuk ID: 20 Rp.200,000
Tidak perlu update untuk ID: 21 Rp.300,000
Tidak perlu update untuk ID: 22 Rp.300,000
Tidak perlu update untuk ID: 23 Rp.450,000
Tidak perlu update untuk ID: 24 Rp.200,000
Tidak perlu update untuk ID: 25 Rp.250,000
Tidak perlu update untuk ID: 26 Rp.200,000
Tidak perlu update untuk ID: 28 Rp.200,000
Tidak perlu update untuk ID: 29 Rp.300,000
Tidak perlu update untuk ID: 30 Rp.200,000
Tidak perlu update untuk ID: 31 Rp.200,000
Tidak perlu update untuk ID: 32 Rp.200,000
Tidak perlu update untuk ID: 33 Rp.200,000
Tidak perlu update untuk ID: 34 Rp.200,000
Tidak perlu update untuk ID: 35 Rp.200,000
Tidak perlu update untuk ID: 36 Rp.200,000
Tidak perlu update untuk ID: 37 Rp.300,000
Tidak perlu update untuk ID: 38 Rp.200,000
Tidak perlu update untuk ID: 39 Rp.200,000
Harga khusus untuk ID: 40 Rp.1,000,000
Tidak perlu update untuk ID: 41 Rp.200,000
Tidak perlu update untuk ID: 42 Rp.200,000
Harga khusus untuk ID: 43 Rp.100,000
Tidak perlu update untuk ID: 44 Rp.200,000
Tidak perlu update untuk ID: 45 Rp.300,000
Tidak perlu update untuk ID: 46 Rp.200,000
Tidak perlu update untuk ID: 47 Rp.200,000
Tidak perlu update untuk ID: 48 Rp.200,000
Tidak perlu update untuk ID: 49 Rp.200,000
Tidak perlu update untuk ID: 50 Rp.200,000
Tidak perlu update untuk ID: 51 Rp.200,000
Tidak perlu update untuk ID: 52 Rp.1,000,000
Tidak perlu update untuk ID: 53 Rp.200,000
Tidak perlu update untuk ID: 54 Rp.200,000
Tidak perlu update untuk ID: 55 Rp.200,000
Tidak perlu update untuk ID: 56 Rp.200,000
Tidak perlu update untuk ID: 57 Rp.200,000
Tidak perlu update untuk ID: 58 Rp.200,000
Tidak perlu update untuk ID: 59 Rp.200,000
Tidak perlu update untuk ID: 60 Rp.200,000
Tidak perlu update untuk ID: 61 Rp.300,000
Tidak perlu update untuk ID: 62 Rp.200,000
Tidak perlu update untuk ID: 63 Rp.200,000
Tidak perlu update untuk ID: 64 Rp.200,000
Tidak perlu update untuk ID: 65 Rp.200,000
Tidak perlu update untuk ID: 66 Rp.200,000
Tidak perlu update untuk ID: 67 Rp.200,000
Harga khusus untuk ID: 68 Rp.200,000
Harga khusus untuk ID: 69 Rp.200,000
Tidak perlu update untuk ID: 70 Rp.200,000
Tidak perlu update untuk ID: 71 Rp.200,000
Tidak perlu update untuk ID: 72 Rp.200,000
Tidak perlu update untuk ID: 73 Rp.200,000
2399 data pesan sebelum 3 hari terakhir berhasil dihapus.
\ No newline at end of file +Tidak perlu update untuk ID: 2 Rp.200,000
Harga khusus untuk ID: 3 Rp.250,000
Tidak perlu update untuk ID: 4 Rp.300,000
Tidak perlu update untuk ID: 5 Rp.300,000
Tidak perlu update untuk ID: 6 Rp.200,000
Harga khusus untuk ID: 7 Rp.200,000
Tidak perlu update untuk ID: 8 Rp.200,000
Tidak perlu update untuk ID: 9 Rp.200,000
Tidak perlu update untuk ID: 10 Rp.200,000
Tidak perlu update untuk ID: 12 Rp.750,000
Tidak perlu update untuk ID: 13 Rp.750,000
Tidak perlu update untuk ID: 14 Rp.450,000
Tidak perlu update untuk ID: 15 Rp.450,000
Tidak perlu update untuk ID: 16 Rp.300,000
Harga khusus untuk ID: 17 Rp.300,000
Tidak perlu update untuk ID: 18 Rp.300,000
Tidak perlu update untuk ID: 19 Rp.450,000
Tidak perlu update untuk ID: 20 Rp.200,000
Tidak perlu update untuk ID: 21 Rp.300,000
Tidak perlu update untuk ID: 22 Rp.300,000
Tidak perlu update untuk ID: 23 Rp.450,000
Tidak perlu update untuk ID: 24 Rp.200,000
Tidak perlu update untuk ID: 25 Rp.250,000
Tidak perlu update untuk ID: 26 Rp.200,000
Tidak perlu update untuk ID: 28 Rp.200,000
Tidak perlu update untuk ID: 29 Rp.300,000
Tidak perlu update untuk ID: 30 Rp.200,000
Tidak perlu update untuk ID: 31 Rp.300,000
Tidak perlu update untuk ID: 32 Rp.200,000
Tidak perlu update untuk ID: 33 Rp.200,000
Tidak perlu update untuk ID: 34 Rp.200,000
Tidak perlu update untuk ID: 35 Rp.200,000
Tidak perlu update untuk ID: 36 Rp.200,000
Tidak perlu update untuk ID: 37 Rp.300,000
Tidak perlu update untuk ID: 38 Rp.200,000
Tidak perlu update untuk ID: 39 Rp.200,000
Harga khusus untuk ID: 40 Rp.1,000,000
Tidak perlu update untuk ID: 41 Rp.200,000
Tidak perlu update untuk ID: 42 Rp.200,000
Harga khusus untuk ID: 43 Rp.100,000
Tidak perlu update untuk ID: 44 Rp.200,000
Tidak perlu update untuk ID: 45 Rp.300,000
Tidak perlu update untuk ID: 46 Rp.200,000
Tidak perlu update untuk ID: 47 Rp.200,000
Tidak perlu update untuk ID: 48 Rp.200,000
Tidak perlu update untuk ID: 49 Rp.200,000
Tidak perlu update untuk ID: 50 Rp.200,000
Tidak perlu update untuk ID: 51 Rp.200,000
Tidak perlu update untuk ID: 52 Rp.1,000,000
Tidak perlu update untuk ID: 53 Rp.200,000
Tidak perlu update untuk ID: 54 Rp.200,000
Tidak perlu update untuk ID: 55 Rp.200,000
Tidak perlu update untuk ID: 56 Rp.200,000
Tidak perlu update untuk ID: 57 Rp.200,000
Tidak perlu update untuk ID: 58 Rp.200,000
Tidak perlu update untuk ID: 59 Rp.200,000
Tidak perlu update untuk ID: 60 Rp.200,000
Tidak perlu update untuk ID: 61 Rp.300,000
Tidak perlu update untuk ID: 62 Rp.200,000
Tidak perlu update untuk ID: 63 Rp.200,000
Tidak perlu update untuk ID: 64 Rp.200,000
Tidak perlu update untuk ID: 65 Rp.200,000
Tidak perlu update untuk ID: 66 Rp.200,000
Tidak perlu update untuk ID: 67 Rp.200,000
Harga khusus untuk ID: 68 Rp.200,000
Harga khusus untuk ID: 69 Rp.200,000
Tidak perlu update untuk ID: 70 Rp.200,000
Tidak perlu update untuk ID: 71 Rp.200,000
Tidak perlu update untuk ID: 72 Rp.200,000
Tidak perlu update untuk ID: 73 Rp.200,000
Harga khusus untuk ID: 74 Rp.0
Harga khusus untuk ID: 75 Rp.0
Harga khusus untuk ID: 76 Rp.0
Tidak perlu update untuk ID: 77 Rp.200,000
Harga khusus untuk ID: 78 Rp.200,000
Harga khusus untuk ID: 79 Rp.200,000
339 data pesan sebelum 3 hari terakhir berhasil dihapus.
\ No newline at end of file diff --git a/load/update_sewa_apk.php b/load/update_sewa_apk.php index 55bcd11..517a970 100644 --- a/load/update_sewa_apk.php +++ b/load/update_sewa_apk.php @@ -24,15 +24,15 @@ try { } // Tentukan harga berdasarkan jumlah_agen - if ($data['jumlah_agen'] <= 15) { + if ($data['jumlah_agen'] <= 30) { $harga_agen = 200000; - } elseif ($data['jumlah_agen'] > 15 && $data['jumlah_agen'] <= 30) { + } elseif ($data['jumlah_agen'] > 30 && $data['jumlah_agen'] <= 70) { $harga_agen = 300000; - } elseif ($data['jumlah_agen'] > 30 && $data['jumlah_agen'] <= 60) { + } elseif ($data['jumlah_agen'] > 70 && $data['jumlah_agen'] <= 120) { $harga_agen = 450000; - } elseif ($data['jumlah_agen'] > 60 && $data['jumlah_agen'] <= 90) { + } elseif ($data['jumlah_agen'] > 120 && $data['jumlah_agen'] <= 180) { $harga_agen = 750000; - } elseif ($data['jumlah_agen'] > 90 && $data['jumlah_agen'] <= 130) { + } elseif ($data['jumlah_agen'] > 180 && $data['jumlah_agen'] <= 250) { $harga_agen = 1000000; } else { $harga_agen = 1500000; // Harga default jika jumlah_agen lebih dari 130 diff --git a/pages/dashboard.php b/pages/dashboard.php index 141b4af..b51add2 100644 --- a/pages/dashboard.php +++ b/pages/dashboard.php @@ -51,57 +51,7 @@ $stmt = $pdo->prepare("SELECT FROM v_jumlah_transaksi_tahunan WHERE tahun = '$tahun' $SqlDataId"); $stmt->execute(); $jumtahun = $stmt->fetchAll(); -// if($SvId == '1') { -// $stmt = $pdo->prepare("SELECT SUM(order_aktif) AS order_aktif FROM v_jumlah_order_list "); -// $stmt->execute(); -// $data = $stmt->fetchAll(); -// $stmt = $pdo->prepare("SELECT -// SUM(user_regis) AS user_regis, -// SUM(user_aktif) AS user_aktif, -// SUM(user_tidak_aktif) AS user_tidak_aktif, -// SUM(user_konek) AS user_konek, -// SUM(user_diskonek) AS user_diskonek -// FROM v_jumlah_pelanggan "); -// $stmt->execute(); -// $datauser = $stmt->fetchAll(); - -// $stmt = $pdo->prepare("SELECT -// SUM(pemasukan) AS pemasukan, -// SUM(pengeluaran) AS pengeluaran, -// SUM(saldo) AS saldo -// FROM v_jumlah_transaksi_bulanan WHERE bulan = '$bulan' "); -// $stmt->execute(); -// $jumbulan = $stmt->fetchAll(); - -// $stmt = $pdo->prepare("SELECT -// SUM(pemasukan) AS pemasukan, -// SUM(pengeluaran) AS pengeluaran, -// SUM(saldo) AS saldo -// FROM v_jumlah_transaksi_tahunan WHERE tahun = '$tahun' "); -// $stmt->execute(); -// $jumtahun = $stmt->fetchAll(); - -// } else { -// $stmt = $pdo->prepare("SELECT * FROM v_jumlah_order_list $SqlDataWHId"); -// $stmt->execute(); -// $data = $stmt->fetchAll(); - -// $stmt = $pdo->prepare("SELECT * FROM v_jumlah_pelanggan $SqlDataWHId"); -// $stmt->execute(); -// $datauser = $stmt->fetchAll(); - -// $stmt = $pdo->prepare("SELECT * FROM v_jumlah_transaksi_bulanan WHERE bulan = '$bulan' $SqlDataId"); -// $stmt->execute(); -// $jumbulan = $stmt->fetchAll(); - -// $stmt = $pdo->prepare("SELECT * FROM v_jumlah_transaksi_tahunan WHERE tahun = '$tahun' $SqlDataId"); -// $stmt->execute(); -// $jumtahun = $stmt->fetchAll(); -// } - -// print_r($datauser); -// print_r($_SESSION); ?>
@@ -351,7 +301,7 @@ $stmt = $pdo->prepare("SELECT
prepare("SELECT * FROM v_tiket_gangguan WHERE status = '1' $SqlDataId ORDER BY level ASC, start_time DESC"); + $stmt = $pdo->prepare("SELECT * FROM v_tiket_gangguan WHERE status = '1' $SqlDataId ORDER BY COALESCE(level, 999) ASC, start_time DESC"); $stmt->execute(); while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) { // Tentukan warna garis berdasarkan level diff --git a/pages/data_server.php b/pages/data_server.php index c3ece93..0c4cde1 100644 --- a/pages/data_server.php +++ b/pages/data_server.php @@ -52,6 +52,7 @@ @@ -129,6 +130,97 @@
+ + + + :now"; + } elseif ($_POST['jenisserver'] == 2) { + $wer = "WHERE id != 1 AND expaired_date < :now"; + } else { + $wer = ""; + } + + // Query database (ambil semua nomor) + $sql = "SELECT whatsApp FROM data_server $wer"; + $stm = $pdo->prepare($sql); + + // Bind parameter jika ada kondisi tanggal + if ($_POST['jenisserver'] == 1 || $_POST['jenisserver'] == 2) { + $stm->bindParam(':now', $now); + } + + $stm->execute(); + $data = $stm->fetchAll(PDO::FETCH_COLUMN); // langsung array nomor + + // Hapus nomor kosong & duplikat + $nomorList = array_filter(array_unique($data)); + + if (!empty($nomorList)) { + $message = $_POST['isipesan']; + $APIwa = new PesanWA(); + + // Kirim semua nomor sekaligus (array) + $APIwa->Send_Pesan(1, 'sendMessage', $nomorList, $message); + + sweetAlert("Pesan akan segera dikirim ke ".count($nomorList)." nomor", "success"); + } else { + sweetAlert("Data nomor WhatsApp tidak ditemukan", "error"); + } +} + +?> + + @@ -138,6 +230,7 @@ No Nama Server + Saldo Voucher Alamat Nama Admin Nomor WhatsApp @@ -150,16 +243,17 @@ + Rp. - + Rp. = date('Y-m-d')) { ?> diff --git a/pages/detail_data_server.php b/pages/detail_data_server.php index 15df1c3..2ba41a3 100644 --- a/pages/detail_data_server.php +++ b/pages/detail_data_server.php @@ -36,6 +36,12 @@ $nomor = $data[0]['nomor_whatsapp']; $username = $data[0]['username']; $email = $data[0]['email']; $profile = $data[0]['profile']; +$rek_nomor = $data[0]['rekening_nomor']; +$rek_nama = $data[0]['rekening_nama']; +$rek_bank = $data[0]['rekening_bank']; +$rek_status = $data[0]['rekening_status']; +$nama_server = $data[0]['nama_server']; +$whatsapp = $data[0]['whatsapp']; // echo "
";
 // print_r($data);
 // echo "
"; @@ -57,23 +63,30 @@ $profile = $data[0]['profile']; -
-
-
-
+
+
+
+
- -
- Click to upload image - Image preview +
+
+
+
+
+
+
+ +
+ +
@@ -99,46 +112,10 @@ $profile = $data[0]['profile'];
Nama
- - - - - - - - - -
+
+
+
+
@@ -179,8 +156,182 @@ $profile = $data[0]['profile']; +
+
+ + +
+
+
+ +
+ + + + + + + + + + + + + + + + + +
Bank: +
+ +
+
Nomor Rekening: +
+ > +
+
Nama Penerima: +
+ +
+ +
+ ' + : ''; ?> + ' + : ''; ?> + + + +prepare($SQLrek); + +// // pakai bindValue (langsung ambil dari $_POST) +// $stmt->bindValue(':rekening_bank', $_POST['bank_code']); +// $stmt->bindValue(':rekening_nomor', $_POST['account_number']); +// $stmt->bindValue(':rekening_nama', $_POST['account_holder']); +// $stmt->bindValue(':iddatas', $id, PDO::PARAM_INT); + +// if ($stmt->execute()) { +// $Pesan = "*Permintaan Verifikasi Rekening* + +// Server : " . $nama_server . " +// BANK : " . strtoupper($_POST['bank_code']) . " +// Rekening : *" . $_POST['account_number'] . "* +// Nama Rek : " . strtoupper($_POST['account_holder']) . " + +// status : _*On Verification*_ + + +// _# Manja ~ Notif_ +// "; +// $nomorWA = ['6281298698422', '6285655548738']; +// $APIwa = new PesanWA(); +// $APIwa->Send_Pesan('1','sendMessage',$nomorWA,$Pesan); + +// sweetAlert("BERHASIL.! Rekening telah ditambahkan silahkan tunggu verifikasi", "success"); +// } +// } + + +if (isset($_POST['verifikasirek'])) { + $SQLrek = "UPDATE data_server + SET rekening_status = 'verificated' + WHERE id = :iddatas"; + $stmt = $pdo->prepare($SQLrek); + + $stmt->bindValue(':iddatas', $id, PDO::PARAM_INT); + + $stmt->execute(); + $Pesanwarek = "*Verifikasi Rekening Berhasil* + +Server : " . $nama_server . " +BANK : " . strtoupper($rek_bank) . " +Rekening : *" . $rek_nomor . "* +Nama Rek : " . $rek_nama . " + +status : _*Verificated*_ + + +_# Manja ~ Notif_ +"; + $nomorWArek = ["$whatsapp", "6281298698422", "6285655548738"]; + $APIwa = new PesanWA(); + $APIwa->Send_Pesan('1','sendMessage',$nomorWArek,$Pesanwarek); + + sweetAlert("BERHASIL.! Rekening telah di verifikasi", "success"); + +} +?> + + + + +
+
+
-
+
+
+
+
+
+
+
+
+
+
+

Riwayat Pencairan Dana

+
+
+
+ + + + + + + + + + + + +
ServerDibuatNominalUserStatusDiprosesAction
+
+
+
+
@@ -335,13 +486,12 @@ $profile = $data[0]['profile']; Priode Nominal Status - Action prepare("SELECT * FROM apk_payment WHERE id_data_server = :id ORDER BY waktu_transaksi"); + $stmt = $pdo->prepare("SELECT * FROM apk_payment WHERE id_data_server = :id AND jenis IS NULL ORDER BY waktu_transaksi"); $stmt->bindParam(':id', $id); $stmt->execute(); @@ -355,17 +505,6 @@ $profile = $data[0]['profile']; - -
- - Bayar - - - - Detail - -
-
+ + + + + + + + ", + "type": "POST" + }, + "pageLength": 10, + "columns": [ + { "data": 0 }, // Server + { "data": 1 }, // Dibuat + { "data": 2 }, // Nominal + { "data": 3 }, // User + { + "data": 4, // Status + "render": function(data, type, row, meta) { + if (data === 'pending') { + return `${data.toUpperCase()}`; + } else { + return `${data.toUpperCase()}`; + } + } + }, + { "data": 5 }, // Diproses + { + "data": 6, // id unik + "render": function(data, type, row, meta) { + let btn = ""; + + if (row[4] === 'pending') { + btn += ``; + } + + if (row[4] === 'success') { + btn += ``; + } + + return btn; + } + } + ], + "order": [[1, "desc"]] // urut berdasarkan Dibuat + }); +}); + + +// Preview gambar saat pilih file +document.getElementById("bukti_success").addEventListener("change", function(event){ + const file = event.target.files[0]; + if(file){ + // preview gambar + const reader = new FileReader(); + reader.onload = function(e){ + document.getElementById("previewImg").src = e.target.result; + } + reader.readAsDataURL(file); + + // tampilkan nama file + document.getElementById("fileName").innerText = file.name; + } +}); + + +function editData(id) { + $("#editId").val(id); // set hidden input + $("#bukti_success").val(""); // reset file input + $("#previewImg").attr("src", "img/imgblank.jpg"); // reset preview + $("#editModal").modal("show"); // tampilkan modal +} + +function viewBukti(imgPath) { + $("#viewBuktiImg").attr("src", imgPath); + $("#viewBuktiModal").modal("show"); +} + + +// submit form +$("#editForm").on("submit", function(e){ + e.preventDefault(); + let formData = new FormData(this); + + $.ajax({ + url: "controller/update_withdraw.php", + type: "POST", + data: formData, + processData: false, + contentType: false, + success: function(res){ + try { + let json = JSON.parse(res); + if(json.success){ + Swal.fire("Berhasil!", json.message, "success"); + $("#editModal").modal("hide"); + $('#withdrawTable').DataTable().ajax.reload(null, false); + } else { + Swal.fire("Gagal!", json.message, "error"); + } + } catch(e){ + Swal.fire("Error!", "Response tidak valid: " + res, "error"); + } + } + }); +}); + + \ No newline at end of file diff --git a/pages/ganerate_voucher.php b/pages/ganerate_voucher.php index a67d347..9027f0a 100644 --- a/pages/ganerate_voucher.php +++ b/pages/ganerate_voucher.php @@ -1,3 +1,7 @@ +
@@ -11,6 +15,7 @@
    + Ambil Script Generate
@@ -88,6 +93,7 @@ beginTransaction(); @@ -111,7 +117,7 @@ if (isset($_POST['generate'])) { $data = json_decode($paket['radius_data']); $kode = $data ? 'VR' : 'VM'; // VR = Radius, VM = MikroTik $jenis = $data ? 'sv-radius' : 'sv-mikrotik'; - $karakter = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890qwertyuiopasdfghjklzxcvbnm"; + $karakter = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890"; $str = $paket['durasi']; $jumlah = intval($_POST['jumlah']); $date = date('Y-m-d H:i:s'); @@ -162,7 +168,7 @@ if (isset($_POST['generate'])) { } } else { - require('router_api/routeros_api.class.php'); + // require('router_api/routeros_api.class.php'); $API = new RouterosAPI(); $API->debug = false; @@ -221,15 +227,72 @@ if (isset($_POST['generate'])) { sweetAlert("$totalSuccess voucher berhasil dibuat. Gagal: $totalError", "success"); } catch (Exception $e) { $pdo->rollBack(); - // sweetAlert("Gagal membuat voucher: " . $e->getMessage(), "error"); + sweetAlert("Gagal membuat voucher: " . $e->getMessage(), "error"); } } ?> - + + + + + + +
-
+
@@ -246,7 +309,7 @@ if (isset($_POST['generate'])) {

0

-

Total Penjualan

+

Total Penjualan

@@ -258,19 +321,19 @@ if (isset($_POST['generate'])) {

0

-

Saldo Ditahan

+

Saldo Ditahan

-
+

0

-

Saldo Tersedia

+

Saldo Tersedia

@@ -279,40 +342,302 @@ if (isset($_POST['generate'])) {
-
-set_list("setting_mikrotik", $SqlDataWHId); -?> -
Mikrotik
- +
-
Login Page Script
-
-
- - - +
+
+
+
+
+
+ +
+
+
+

Akumulasi Penjualan Voucher

+
+
+
+
+
+ +
+
+

0

+

Transaksi Success

+
+
+ +
+
+
+
+ +
+
+

0

+

Transaksi Pending

+
+
+ +
+
+
+
+ +
+
+

0

+

Transaksi Cancel

+
+
+ +
+
+
+
+ +
+
+

0

+

Voucher Tersedia

+
+
+ +
+
+
+
+ +
+
+

0

+

Voucher Active

+
+
+ +
+
+
+
+ +
+
+

0

+

Voucher Expired

+
+
+ +
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+

Riwayat Pencairan Dana

+
+
+ +
+ + + + + + + + + + + + +
ServerDibuatNominalUserStatusDiprosesAction
+
+
+
+
+
+

Voucher List

+
+
+
+ +
+
+ + + + + + + + + + + + + + +
ServerVoucherHargaBiayaSaldoStatusDibuatAktifExpired
+
+
+ + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ + +prepare($SQLCek); + $stmt->execute([':idsv' => $_POST['idgetSaldo']]); + $rek_data = $stmt->fetch(PDO::FETCH_ASSOC); // ✅ fetch single row + + if (!empty($rek_data['rekening_nama'])) { + if ($rek_data['rekening_status'] == 'verificated') { + + $nominal = preg_replace("/[^0-9]/", "", $_POST['nominal']); + + $SQLCarikan = "INSERT INTO transaksi_withdraw + (id_data_server, start_time, nominal, user_create, status, jenis) VALUES + (:id_data_server, :start_time, :nominal, :user_create, 'pending', 'hotspot_auto')"; + $stmt = $pdo->prepare($SQLCarikan); + $stmt->bindValue(':id_data_server', $_POST['idgetSaldo'], PDO::PARAM_INT); + $stmt->bindValue(':start_time', date('Y-m-d H:i:s')); // ✅ pakai bindValue + $stmt->bindValue(':nominal', $nominal, PDO::PARAM_INT); + $stmt->bindValue(':user_create', $SvNama, PDO::PARAM_STR); // pastikan $SvNama ada + $stmt->execute(); + + $Pesanwarek = "*PERMINTAAN PENCAIRAN DANA* + +Server : " . $rek_data['nama_server'] . " +BANK : " . strtoupper($rek_data['rekening_bank']) . " +Rekening : *" . $rek_data['rekening_nomor'] . "* +Nama Rek : " . $rek_data['rekening_nama'] . " + +Nominal : *" . $_POST['nominal'] . "* + + +_# Manja ~ Notif_ +"; + $nomorWArek = ["6281298698422", "6285655548738"]; + $APIwa = new PesanWA(); + $APIwa->Send_Pesan('1','sendMessage',$nomorWArek,$Pesanwarek); + + sweetAlert("BERHASIL.! Pencairan akan segera diproses, mohon tunggu.", "success"); + } else { + sweetAlert("GAGAL.! Rekening anda sedang diverifikasi mohon ditunggu.", "error"); + } + } else { + sweetAlert("GAGAL.! Tidak ada rekening yang tersedia, silahkan isi rekening di Profile Master.", "error"); + } +} +?> + + + + + - -
- -
- - -
-
-
-
-
-
-

Voucher List

-
-
-
- - - - - - - - - - - - - - -
ServerVoucherHargaBiayaSaldoStatusDibuatAktifExpired
-
- - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pages/maps_marker_topologi.php b/pages/maps_marker_topologi.php index d78bc64..5a45bee 100644 --- a/pages/maps_marker_topologi.php +++ b/pages/maps_marker_topologi.php @@ -27,63 +27,6 @@ + diff --git a/pages/master_list_olt.php b/pages/master_list_olt.php new file mode 100644 index 0000000..658ac3f --- /dev/null +++ b/pages/master_list_olt.php @@ -0,0 +1,204 @@ +prepare($sql); +$stm->execute($idArray); + +$uuids = $stm->fetchAll(PDO::FETCH_COLUMN); // ambil langsung kolom uuid +$tenant_id = implode(',', $uuids); // gabungkan jadi string dipisah koma + +// --- Panggil API pakai tenant_id --- +$oltData = []; +if ($tenant_id) { + $apiUrl = "http://manjapro.net:20263/api/v1/olt/?tenant_id=" . $tenant_id; + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $apiUrl, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HTTPHEADER => ["accept: application/json"] + ]); + $response = curl_exec($ch); + if (curl_errno($ch)) { + $apiError = curl_error($ch); + } + curl_close($ch); + $oltData = json_decode($response, true); +} + +$oltVendor = []; + +$apiUrl = "http://manjapro.net:20263/api/v1/olt-vendor/"; +$ch = curl_init(); +curl_setopt_array($ch, [ + CURLOPT_URL => $apiUrl, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HTTPHEADER => ["accept: application/json"] +]); +$resvendor = curl_exec($ch); +if (curl_errno($ch)) { + $apiError = curl_error($ch); +} +curl_close($ch); +$oltVendor = json_decode($resvendor, true); + +foreach ($oltVendor as $vendor) { + $vendorMap[$vendor['id']] = $vendor['nama_vendor'] . " (" . $vendor['model'] . ")" ; +} +// print_r($oltVendor); + +?> + +
+
+
+
+
+
+
+
+

List OLT

+
+
+
    + +
+
+
+ + +
+
+ +
Gagal ambil data API:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NoNama PerangkatIPLokasiVendorPort SNMPPort TelnetStatusAction
+ + Online + + Offline + + + + + Edit + Hapus +
Data tidak tersedia
+
+
+
+
+
+
+ + + + + $_POST['tenant_id'], + "name" => trim($_POST['name']), + "ip" => trim($_POST['ip']), + "snmp_community" => "public", + "telnet_user" => "root", + "telnet_pass" => "admin", + "vendor_id" => (int)$_POST['vendor_id'], + "location" => trim($_POST['location']), + "snmp_port" => 161, + "telnet_port" => 23 + ]; + $ch = curl_init("http://manjapro.net:20263/api/v1/olt/"); + curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_POST => true, + CURLOPT_HTTPHEADER => ["Content-Type: application/json"], + CURLOPT_POSTFIELDS => json_encode($postData) + ]); + $res = curl_exec($ch); + curl_close($ch); + + // setelah simpan redirect supaya tidak POST ulang + header("Location: ".$_SERVER['PHP_SELF']."?id=".urlencode($SvId)); + exit; +} +?> \ No newline at end of file diff --git a/pages/master_topologi.php b/pages/master_topologi.php index 36234c2..c4b2d0a 100644 --- a/pages/master_topologi.php +++ b/pages/master_topologi.php @@ -159,3 +159,5 @@ + + diff --git a/pages/master_topologi_edit.php b/pages/master_topologi_edit.php index c4e5054..bfdf629 100644 --- a/pages/master_topologi_edit.php +++ b/pages/master_topologi_edit.php @@ -101,4 +101,6 @@ if (isset($_POST['edit'])) { } -?> \ No newline at end of file +?> + + \ No newline at end of file diff --git a/pages/order_list_tambah.php b/pages/order_list_tambah.php index dd3ce41..0888b53 100644 --- a/pages/order_list_tambah.php +++ b/pages/order_list_tambah.php @@ -51,10 +51,13 @@ -
- - -
+ +
+ + + +
+
@@ -149,3 +152,35 @@ if (isset($_POST['tambah'])) { } ?> + + + \ No newline at end of file diff --git a/pages/order_list_ubah.php b/pages/order_list_ubah.php index 38a25cf..0044987 100644 --- a/pages/order_list_ubah.php +++ b/pages/order_list_ubah.php @@ -155,4 +155,6 @@ if (isset($_POST['ubah'])) { -?> \ No newline at end of file +?> + + \ No newline at end of file diff --git a/pages/order_list_update.php b/pages/order_list_update.php index 29222ef..be44394 100644 --- a/pages/order_list_update.php +++ b/pages/order_list_update.php @@ -256,3 +256,5 @@ if (isset($_POST['ubah'])) {
+ + diff --git a/pages/payment_gateway.php b/pages/payment_gateway.php index 69560b0..348eb06 100644 --- a/pages/payment_gateway.php +++ b/pages/payment_gateway.php @@ -9,6 +9,18 @@ $apikey = $data[0]['apikey_payment_gateway']; $tokenkey = $data[0]['tokenkey_payment_gateway']; $enpoint = $data[0]['url_payment_gateway']; $status = $data[0]['status_payment_gateway']; +$jenis = $data[0]['payment_gateway']; + +$stmt = $pdo->prepare(" + SELECT + SUM(saldo) AS total_saldo, + SUM(ditahan) AS total_ditahan, + SUM(tersedia) AS total_tersedia + FROM v_akumulasi_client_payment + WHERE id_data_server IN ($SvId) +"); +$stmt->execute(); +$saldo = $stmt->fetch(PDO::FETCH_ASSOC); ?> @@ -29,13 +41,10 @@ $status = $data[0]['status_payment_gateway'];
-
+
-

PERHATIAN..!

-

Untuk mengaktifkan payment gateway anda harus terlebih dahulu mempunyai akun FLIP BUSSINESS

-
STATUS :
@@ -49,36 +58,14 @@ $status = $data[0]['status_payment_gateway'];
- +
-
- - -
-
- -
- -
-
- -
-
-
-
-
- -
- -
-
- -
-
-
+
+
@@ -90,12 +77,152 @@ $status = $data[0]['status_payment_gateway'];
-
- "; - // print_r($_SERVER); - // echo ""; - ?> +
+ +
+
+
+
+
+ +
+
+
+

Akumulasi Keuangan Tagihan Payment Gateway

+
+
+
+
+
+ +
+
+

+

Total Penjualan

+
+
+ +
+
+
+
+ +
+
+

+

Saldo Ditahan

+
+
+ +
+
+
+
+ +
+
+

+

Saldo Tersedia

+
+
+ +
+
+
+
+
+
+
+
+
+

Riwayat Pencairan Dana

+
+
+ +
+ + + + + + + + + + + + +
ServerDibuatNominalUserStatusDiprosesAction
+
+
+
+
+

Riwayat Transaksi

+
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + +
Kode UnikKeteranganNamaJumlahSaldoBiayaStatusJenisWaktuWaktu
+
+ +
@@ -108,21 +235,149 @@ $status = $data[0]['status_payment_gateway'];
+ + + + + + + +prepare($SQLCek); + $stmt->execute([':idsv' => $_POST['idgetSaldo']]); + $rek_data = $stmt->fetch(PDO::FETCH_ASSOC); // ✅ fetch single row + + if (!empty($rek_data['rekening_nama'])) { + if ($rek_data['rekening_status'] == 'verificated') { + + $nominal = preg_replace("/[^0-9]/", "", $_POST['nominal']); + + $SQLCarikan = "INSERT INTO transaksi_withdraw + (id_data_server, start_time, nominal, user_create, status, jenis) VALUES + (:id_data_server, :start_time, :nominal, :user_create, 'pending', 'tagihan')"; + $stmt = $pdo->prepare($SQLCarikan); + $stmt->bindValue(':id_data_server', $_POST['idgetSaldo'], PDO::PARAM_INT); + $stmt->bindValue(':start_time', date('Y-m-d H:i:s')); // ✅ pakai bindValue + $stmt->bindValue(':nominal', $nominal, PDO::PARAM_INT); + $stmt->bindValue(':user_create', $SvNama, PDO::PARAM_STR); // pastikan $SvNama ada + $stmt->execute(); + + $Pesanwarek = "*PERMINTAAN PENCAIRAN DANA* + +Server : " . $rek_data['nama_server'] . " +BANK : " . strtoupper($rek_data['rekening_bank']) . " +Rekening : *" . $rek_data['rekening_nomor'] . "* +Nama Rek : " . $rek_data['rekening_nama'] . " + +Nominal : *" . $_POST['nominal'] . "* + + +_# Manja ~ Notif_ +"; + $nomorWArek = ["6281298698422", "6285655548738"]; + $APIwa = new PesanWA(); + $APIwa->Send_Pesan('1','sendMessage',$nomorWArek,$Pesanwarek); + + sweetAlert("BERHASIL.! Pencairan akan segera diproses, mohon tunggu.", "success"); + } else { + sweetAlert("GAGAL.! Rekening anda sedang diverifikasi mohon ditunggu.", "error"); + } + } else { + sweetAlert("GAGAL.! Tidak ada rekening yang tersedia, silahkan isi rekening di Profile Master.", "error"); + } +} +?> + prepare("UPDATE data_server SET status_payment_gateway = 'ACTIVE' WHERE id = :idtik"); - $stmt->bindParam(':idtik', $id, PDO::PARAM_INT); - $stmt->execute(); - sweetAlert("Payment Gateway Telah Di Aktifkan", "success"); - } - else { - sweetAlert("Gagal : Silahkan isi dulu API paramenter", "error"); - } + if ($_POST['jenis'] === 'flip') { + if ($apikey && $tokenkey && $enpoint) { + $stmt = $pdo->prepare("UPDATE data_server SET status_payment_gateway='ACTIVE' WHERE id=:id"); + $stmt->execute([':id' => $id]); + sweetAlert("Payment Gateway Telah Di Aktifkan", "success"); + } else { + sweetAlert("Gagal: Silahkan isi dulu API parameter", "error"); + } + } elseif ($_POST['jenis'] === 'paydisini') { + $stmt = $pdo->prepare("UPDATE data_server SET status_payment_gateway='ACTIVE' WHERE id=:id"); + $stmt->execute([':id' => $id]); + sweetAlert("Payment Gateway Telah Di Aktifkan", "success"); + } else { + sweetAlert("Gagal: Anda belum menyimpan jenis Payment Gateway", "error"); + } } catch (PDOException $e) { - sweetAlert("Gagal: " . $e->getMessage(), "error"); + sweetAlert("Gagal: " . $e->getMessage(), "error"); } } //Non Aktifkan Payment Gateway @@ -140,13 +395,23 @@ $status = $data[0]['status_payment_gateway']; //Simpan data Payment gateway if (isset($_POST['simpan'])) { try { - $stmt = $pdo->prepare("UPDATE data_server SET payment_gateway = :payment_gateway, apikey_payment_gateway = :apikey_payment_gateway, url_payment_gateway = :url_payment_gateway, tokenkey_payment_gateway = :tokenkey_payment_gateway WHERE id = :idtik"); - $stmt->bindParam(':payment_gateway', $_POST['jenis']); - $stmt->bindParam(':apikey_payment_gateway', $_POST['apikey']); - $stmt->bindParam(':url_payment_gateway', $_POST['enpoint']); - $stmt->bindParam(':tokenkey_payment_gateway', $_POST['tokenkey']); - $stmt->bindParam(':idtik', $id, PDO::PARAM_INT); - $stmt->execute(); + if ($_POST['jenis'] === 'flip') { + $stmt = $pdo->prepare("UPDATE data_server SET payment_gateway = :payment_gateway, apikey_payment_gateway = :apikey_payment_gateway, url_payment_gateway = :url_payment_gateway, tokenkey_payment_gateway = :tokenkey_payment_gateway WHERE id = :idtik"); + $stmt->bindParam(':payment_gateway', $_POST['jenis']); + $stmt->bindParam(':apikey_payment_gateway', $_POST['apikey']); + $stmt->bindParam(':url_payment_gateway', $_POST['enpoint']); + $stmt->bindParam(':tokenkey_payment_gateway', $_POST['tokenkey']); + $stmt->bindParam(':idtik', $id, PDO::PARAM_INT); + $stmt->execute(); + } + else { + $adminpg = !empty($_POST['adminpg']) ? $_POST['adminpg'] : 2; + $stmt = $pdo->prepare("UPDATE data_server SET payment_gateway = :payment_gateway, biaya_payment_gateway = :biaya_payment_gateway WHERE id = :idtik"); + $stmt->bindParam(':payment_gateway', $_POST['jenis']); + $stmt->bindParam(':biaya_payment_gateway', $adminpg); + $stmt->bindParam(':idtik', $id, PDO::PARAM_INT); + $stmt->execute(); + } sweetAlert("Payment Gateway telah ubah", "success"); } catch (PDOException $e) { @@ -154,22 +419,179 @@ $status = $data[0]['status_payment_gateway']; } } ?> - \ No newline at end of file + + // Cek saat user input nominal + $("#formNominal input").on("input", function(){ + var val = parseInt($(this).val().replace(/\D/g, '')) || 0; // ambil angka aja + if(val > currentSaldo){ + val = currentSaldo; // batasin maksimal saldo + } + $(this).val(val); // set kembali ke input + }); +}); + + + + diff --git a/pages/pesan_siaran.php b/pages/pesan_siaran.php index 8800511..c108816 100644 --- a/pages/pesan_siaran.php +++ b/pages/pesan_siaran.php @@ -101,7 +101,7 @@ if (isset($_POST['kirim'])) { $sk1 = !empty($sk) ? " AND status_koneksi = :sk" : ""; $mt1 = !empty($mt) ? " AND id_master_topologi = :mt" : ""; - $target_dir = "https://bilspro.com/img/user/"; + $target_dir = "https://manjapro.net/img/user/"; $SQL = "WHERE id_data_server IN ($idsv)" . $sp1 . $sk1 . $mt1; try { diff --git a/pages/setting_mikrotik.php b/pages/setting_mikrotik.php index e3479a1..aba43c9 100644 --- a/pages/setting_mikrotik.php +++ b/pages/setting_mikrotik.php @@ -399,16 +399,16 @@ // Jika data tunnel radius kosong tapi mau bikin tunnel & radius if (empty($server['radius_nas_data']) && $_POST['tunnel'] == 1) { + $nasgroup = "server" . $SvId; $tunnel = new CreateTunnel(); - $resultTun = $tunnel->addTunnel($_POST['nmk'] . '_' . $_POST['ids']); + $resultTun = $tunnel->addTunnel($_POST['nmk'] . '_' . $_POST['ids'], $nasgroup); $radius_nas_data = $resultTun; $decodedResult = json_decode($resultTun); $nasname = $decodedResult->data->{"remote-address"} ?? null; $shortname = strtok($decodedResult->data->{"name"}, '@'); $nassecret = $decodedResult->data->{"nas_secret"} ?? null; - $nasgroup = "server" . $SvId; // Tambahkan NAS ke Radius jika diminta if ($decodedResult->{'status'} == true && !empty($_POST['radius'])) { @@ -672,7 +672,7 @@ add dst-address=172.16.254.242 gateway=172.18.1.100 check-gateway=ping distance=
 /interface ovpn-client 
-add name=opvn-manjapro connect-to=tunnel.manjapro.net port=1199 mode=ip protocol=udp user= password= profile=default-encryption add-default-route=no route-nopull-yes disabled=no
+add name=opvn-manjapro connect-to=tunnel.manjapro.net port=1199 mode=ip protocol=udp user= password= profile=default-encryption add-default-route=no route-nopull=yes disabled=no
 /ip firewall nat 
 add chain=dstnat dst-address= protocol=tcp dst-port= action=dst-nat to-addresses=172.0.0.1 to-port=80 comment="Remote"
 /ip service
diff --git a/pages/setting_profile.php b/pages/setting_profile.php
index 8c8c179..6b4f870 100644
--- a/pages/setting_profile.php
+++ b/pages/setting_profile.php
@@ -1,4 +1,10 @@
 Password
                               :
                               
-                              
+
@@ -166,7 +177,7 @@ if(isset($_SESSION['user']) && $_SESSION['user'] == 1) { Confirm Password : -
+
@@ -180,6 +191,112 @@ if(isset($_SESSION['user']) && $_SESSION['user'] == 1) { + + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + +
Bank: +
+ +
+
Nomor Rekening: +
+ > +
+
Nama Penerima: +
+ +
+ +
+ ' + : ''; ?> + +
+ +prepare($SQLrek); + + // pakai bindValue (langsung ambil dari $_POST) + $stmt->bindValue(':rekening_bank', $_POST['bank_code']); + $stmt->bindValue(':rekening_nomor', $_POST['account_number']); + $stmt->bindValue(':rekening_nama', $_POST['account_holder']); + $stmt->bindValue(':iddatas', $id, PDO::PARAM_INT); + + if ($stmt->execute()) { + $Pesan = "*Permintaan Verifikasi Rekening* + +Server : " . $nama_server . " +BANK : " . strtoupper($_POST['bank_code']) . " +Rekening : *" . $_POST['account_number'] . "* +Nama Rek : " . strtoupper($_POST['account_holder']) . " + +status : _*On Verification*_ + + +_# Manja ~ Notif_ +"; + $nomorWA = ['6281298698422', '6285655548738']; + $APIwa = new PesanWA(); + $APIwa->Send_Pesan('1','sendMessage',$nomorWA,$Pesan); + + sweetAlert("BERHASIL.! Rekening telah ditambahkan silahkan tunggu verifikasi", "success"); + } +} +?> + + +
@@ -353,7 +470,7 @@ if(isset($_SESSION['user']) && $_SESSION['user'] == 1) { // $stmt->bindParam(':id', $_SESSION['master']); // $stmt->execute(); // } - $stmt = $pdo->prepare("SELECT * FROM apk_payment WHERE id_data_server = :id ORDER BY waktu_transaksi DESC"); + $stmt = $pdo->prepare("SELECT * FROM apk_payment WHERE id_data_server = :id AND jenis IS NULL ORDER BY waktu_transaksi DESC"); $stmt->bindParam(':id', $idserver); $stmt->execute(); // Ambil semua hasil dari query @@ -547,4 +664,116 @@ document.querySelectorAll('.toggle-password').forEach(function(toggle) { } }); }); - \ No newline at end of file + + + + + + diff --git a/pages/tagihan_bayar.php b/pages/tagihan_bayar.php index 634a594..9f1a86e 100644 --- a/pages/tagihan_bayar.php +++ b/pages/tagihan_bayar.php @@ -373,11 +373,15 @@ $datakonpensasi = ($data[0]['konpensasi'] == 0) ? $data[0]['jumlah_konpensasi'] $stmt->execute(); } - if (in_array($data[0]['id_data_server'], [2, 3, 4, 5, 6, 8, 9])) { - $nomor = explode(',', $data[0]['nomor_whatsapp'] . ',6282130888937'); - } else { - $nomor = explode(',', $data[0]['nomor_whatsapp']); - } + // --- KIRIM CUSTOM ---- + // if (in_array($data[0]['id_data_server'], [2, 3, 4, 5, 6, 8, 9])) { + // $nomor = explode(',', $data[0]['nomor_whatsapp'] . ',6282130888937'); + // } else { + // $nomor = explode(',', $data[0]['nomor_whatsapp']); + // } + + + $nomor = explode(',', $data[0]['nomor_whatsapp']); // Kirim Pesan WhatsApp $Url = baseurl($invoicePath); @@ -453,4 +457,4 @@ $datakonpensasi = ($data[0]['konpensasi'] == 0) ? $data[0]['jumlah_konpensasi'] document.getElementById("detik").addEventListener("change", updateHiddenDatetime); updateHiddenDatetime(); - \ No newline at end of file + diff --git a/pages/tagihan_buat_satuan.php b/pages/tagihan_buat_satuan.php index 3704bd3..217d1ff 100644 --- a/pages/tagihan_buat_satuan.php +++ b/pages/tagihan_buat_satuan.php @@ -113,13 +113,13 @@ if (isset($_POST['tambah'])) { $status = 'pending'; // Payment gateway processing - $transaction_id = ''; - $transaction_link = ''; - $transaction_status = ''; + $transaction_id = NULL; + $transaction_link = NULL; + $transaction_status = NULL; $total_desimal = round($verifikasi_tagihan); - if (!empty($paygw['apikey_payment_gateway']) && $paygw['status_payment_gateway'] === 'ACTIVE') { + if (!empty($paygw['apikey_payment_gateway']) && $paygw['status_payment_gateway'] === 'ACTIVE' && $paygw['payment_gateway'] == 'flip') { require 'payment/flip/Flip/Transaction.php'; $flip = new FlipPaymentGateway($paygw['apikey_payment_gateway'], $paygw['url_payment_gateway']); $response = $flip->createBill($keterangan, $total_desimal, $pelanggan['email'], $pelanggan['nama'], $pelanggan['nomor_whatsapp'], $pelanggan['alamat']); @@ -159,6 +159,21 @@ if (isset($_POST['tambah'])) { ]); $last_id = $pdo->lastInsertId(); + + if ($paygw['payment_gateway'] == 'paydisini' && $paygw['status_payment_gateway'] == 'ACTIVE') { + require 'controller/payment_paydisini.php'; + $link_paydisini = createUrlpaydisini($last_id); + if ($link_paydisini) { + $transaction_link_paydisini = $link_paydisini['url']; + $stmt = $pdo->prepare("UPDATE tagihan + SET transaction_link = :transaction_link + WHERE id = :idtag"); + $stmt->bindParam(':transaction_link', $transaction_link_paydisini); + $stmt->bindParam(':idtag', $last_id); + $stmt->execute(); + } + } + sweetAlert("Tagihan telah ditambahkan", "success", '?' . encrypt_url('tagihan_detail|' . $last_id . '|tagihan_sedang_berjalan')); } catch (Exception $e) { // Handle exceptions and errors gracefully diff --git a/pages/tagihan_detail.php b/pages/tagihan_detail.php index 7bb76de..bfd04ba 100644 --- a/pages/tagihan_detail.php +++ b/pages/tagihan_detail.php @@ -7,6 +7,12 @@ if ($data[0]['konpensasi'] == 0) { } else { $datakonpensasi = 0; } + +$stmt = $pdo->prepare("SELECT payment_gateway, apikey_payment_gateway, url_payment_gateway,status_payment_gateway FROM data_server WHERE id = :id_data"); +$stmt->bindParam(':id_data', $data[0]['id_data_server'], PDO::PARAM_INT); +$stmt->execute(); +$paygw = $stmt->fetch(PDO::FETCH_ASSOC); + // echo "
";
 // print_r($_SERVER);
 // echo "
"; @@ -112,18 +118,19 @@ if ($data[0]['konpensasi'] == 0) { Rp. + if(isset($data[0]['transaction_status'])) { ?> Status Payment : + Link Pembayaran : https:// @@ -154,7 +161,11 @@ if ($data[0]['konpensasi'] == 0) { - + + + + + @@ -165,7 +176,75 @@ if ($data[0]['konpensasi'] == 0) { - createBill( + $data[0]['keterangan'] ?? '', + $data[0]['verifikasi_tagihan'] ?? '', + $data[0]['email'] ?? '', + $data[0]['nama'] ?? '', + $data[0]['nomor_whatsapp'] ?? '', + $data[0]['alamat'] ?? '' + ); + + if (isset($response['link_id'])) { + $transaction_id = $response['link_id']; + $transaction_link = $response['link_url']; + $transaction_status = $response['status']; + + $stmt = $pdo->prepare("UPDATE tagihan + SET transaction_id = :transaction_id, + transaction_link = :transaction_link, + transaction_status = :transaction_status + WHERE id = :idtag"); + $stmt->bindParam(':transaction_id', $transaction_id); + $stmt->bindParam(':transaction_link', $transaction_link); + $stmt->bindParam(':transaction_status', $transaction_status); + $stmt->bindParam(':idtag', $page[1]); + $stmt->execute(); + + sweetAlert("Link Payment Gateway telah dibuat", "success"); + } else { + // Error dari response Flip + $er = json_encode($response, JSON_PRETTY_PRINT); + sweetAlert("Gagal membuat link pembayaran:
{$er}
", "error"); + } + } elseif ($paygw['payment_gateway'] == 'paydisini' && $paygw['status_payment_gateway'] === 'ACTIVE') { + require 'controller/payment_paydisini.php'; + + $link_paydisini = createUrlpaydisini($page[1]); + if ($link_paydisini) { + $transaction_link_paydisini = $link_paydisini['url']; + + $stmt = $pdo->prepare("UPDATE tagihan + SET transaction_link = :transaction_link + WHERE id = :idtag"); + $stmt->bindParam(':transaction_link', $transaction_link_paydisini); + $stmt->bindParam(':idtag', $page[1]); + $stmt->execute(); + + sweetAlert("Link Payment Gateway telah dibuat", "success"); + } else { + sweetAlert("Gagal membuat link pembayaran", "error"); + } + } else { + sweetAlert("Payment Gateway tidak aktif atau API key kosong.", "error"); + } + } catch (Exception $e) { + // Error dari sistem / database + sweetAlert("Terjadi kesalahan: " . $e->getMessage(), "error"); + } + } + + + //PERINTAH UBAH TAGIHAN if(isset($_POST['simpan'])) { try { $stmt = $pdo->prepare("SELECT * FROM profile_tagihan WHERE id = :id1 "); @@ -228,7 +307,7 @@ if ($data[0]['konpensasi'] == 0) { $paygw = $stmt->fetchAll(PDO::FETCH_ASSOC); // print_r($paygw); //Jika menggunakan payment gateway - if (!empty($paygw[0]['apikey_payment_gateway']) && isset($paygw[0]['status_payment_gateway']) && $paygw[0]['status_payment_gateway'] === 'ACTIVE') { + if (!empty($paygw[0]['apikey_payment_gateway']) && isset($paygw[0]['status_payment_gateway']) && $paygw[0]['status_payment_gateway'] === 'ACTIVE' && $paygw[0]['payment_gateway'] == 'flip') { require 'payment/flip/Flip/Transaction.php'; $apiKey = $paygw[0]['apikey_payment_gateway']; $apiUrl = $paygw[0]['url_payment_gateway']; @@ -250,10 +329,15 @@ if ($data[0]['konpensasi'] == 0) { $transaction_link = $response['link_url']; $transaction_status = $response['status']; } + elseif ($paygw[0]['payment_gateway'] == 'paydisini') { + $transaction_id = NULL; + $transaction_link = $data[0]['transaction_link']; + $transaction_status = NULL; + } else { - $transaction_id = ""; - $transaction_link = ""; - $transaction_status = ""; + $transaction_id = NULL; + $transaction_link = NULL; + $transaction_status = NULL; } $stmt = $pdo->prepare("UPDATE tagihan SET konpensasi = :konpensasi, jumlah_konpensasi = :jumlahkon, jumlah_tagihan = :jumlah_tagihan, ppn = :ppn, total_tagihan = :total_tagihan, verifikasi_tagihan = :verifikasi_tagihan, transaction_id = :transaction_id, transaction_link = :transaction_link, transaction_status = :transaction_status, kode_unik = :kode_unik WHERE id = :idtag"); diff --git a/pages/tiket_buat.php b/pages/tiket_buat.php index 942c141..221237a 100644 --- a/pages/tiket_buat.php +++ b/pages/tiket_buat.php @@ -37,7 +37,7 @@ query("SELECT * FROM v_tiket_gangguan WHERE status = '1' $SqlDataId ORDER BY level"); + $stmt = $pdo->query("SELECT * FROM v_tiket_gangguan WHERE status = '1' $SqlDataId ORDER BY COALESCE(level, 999) ASC, start_time DESC"); while ($server = $stmt->fetch(PDO::FETCH_ASSOC)) { if ($server['jenis_tiket'] == 'Pelanggan') { $ket = ''.$server['nama_pelanggan'].'
'.$server['permasalahan']; diff --git a/pages/user_aktif.php b/pages/user_aktif.php index 64af34a..a0c70a4 100644 --- a/pages/user_aktif.php +++ b/pages/user_aktif.php @@ -1,9 +1,8 @@ prepare("SELECT - SUM(user_hs_aktif) AS user_hs_aktif - FROM v_jumlah_pelanggan $SqlDataWHIdM"); - $stmt->execute(); - $datauser = $stmt->fetchAll(); +$stmt = $pdo->prepare("SELECT SUM(user_hs_aktif) AS user_hs_aktif FROM v_jumlah_pelanggan $SqlDataWHIdM"); +$stmt->execute(); +$datauser = $stmt->fetch(PDO::FETCH_ASSOC); +$hotspotAktif = ($datauser['user_hs_aktif'] > 0); ?>
@@ -15,21 +14,24 @@ $stmt = $pdo->prepare("SELECT

Pelanggan Aktif

-
+
+
+ + +
-
- +
- + - 0) { ?> - + + @@ -42,68 +44,43 @@ $stmt = $pdo->prepare("SELECT - - query("SELECT COUNT(id) FROM v_pelanggan WHERE $SqlSvData status = 'aktif' ORDER BY nama"); - $totalRows = $stmt->fetchColumn(); - for ($offset = 0; $offset < $totalRows; $offset += $chunkSize) { - $stmt = $pdo->prepare("SELECT id,akun,user_hotspot,nama,alamat,latitude,longitude,nomor_whatsapp,email,nik,nama_server,nama_paket,time_start,status_koneksi,nama_mikrotik,id_setting_mikrotik,time_update,ip_address FROM v_pelanggan WHERE $SqlSvData status = 'aktif' ORDER BY nama LIMIT :limit OFFSET :offset"); - $stmt->bindValue(':limit', $chunkSize, PDO::PARAM_INT); - $stmt->bindValue(':offset', $offset, PDO::PARAM_INT); - $stmt->execute(); - - $data = $stmt->fetchAll(); - foreach ($data as $row) { - - ?> - - - - - - 0) { ?> - - - - - - - - - - - - - - -
NoNo Nama NIK Id PelangganAkun HotspotAkun Hotspot Alamat KoordinatAction
- - - - - - - -
- -
- - Remote -
- -
-
- Detail -
- \ No newline at end of file + + + + + diff --git a/pages/user_detail.php b/pages/user_detail.php index 87a3336..33e6356 100644 --- a/pages/user_detail.php +++ b/pages/user_detail.php @@ -13,6 +13,28 @@ $stmt1 = $pdo->prepare("SELECT catatan FROM order_list WHERE akun = :akun"); $stmt1->execute(['akun' => $user]); $isi1 = $stmt1->fetch(PDO::FETCH_ASSOC); +$catatanada = ($isi1) ? $isi1['catatan'] : ''; + +$lat = $isi['latitude'] ?? null; +$long = $isi['longitude'] ?? null; + + +function isValidLat($lat) { + return is_numeric($lat) && (float)$lat >= -90 && (float)$lat <= 90; +} + +function isValidLong($long) { + return is_numeric($long) && (float)$long >= -180 && (float)$long <= 180; +} + +if (!isValidLat($lat)) { + $lat = null; +} + +if (!isValidLong($long)) { + $long = null; +} + ?>
@@ -161,8 +183,8 @@ $isi1 = $stmt1->fetch(PDO::FETCH_ASSOC); Anda bisa pilih salah satu untuk mengisi bagian ini - - + +
@@ -209,7 +231,7 @@ $isi1 = $stmt1->fetch(PDO::FETCH_ASSOC);
- +
@@ -419,10 +441,62 @@ if (isset($_POST['ubah'])) { $fotoonu1 = $_SESSION['uploaded_files']['onu'.$isi['id']]; $fototes1 = $_SESSION['uploaded_files']['tes'.$isi['id']]; + $stmt = $pdo->prepare("SELECT ip_address,username,password,port_api FROM setting_mikrotik WHERE id = :id"); + $stmt->execute(['id' => $isi['id_setting_mikrotik']]); + $mikEdit = $stmt->fetch(PDO::FETCH_ASSOC); + if($_POST['jenis'] == "Hotspot"){ $hotspot = $_POST['user_hotspot']; } else { $hotspot = ""; + $logubahpaket = ""; + if ($isi['id_profile_paket'] != $_POST['idp']) { + $userEdit = $isi['akun']; + + $stmt = $pdo->prepare("SELECT nama_profile FROM profile_paket WHERE id = :id"); + $stmt->execute(['id' => $_POST['idp']]); + $proPaket = $stmt->fetch(PDO::FETCH_ASSOC); + + if ($proPaket && !empty($proPaket['nama_profile'])) { + $profileNew = $proPaket['nama_profile']; + + $API = new RouterosAPI(); + $API->debug = false; + + if ($API->connect2($mikEdit['ip_address'], $mikEdit['username'], $mikEdit['password'], $mikEdit['port_api'])) { + + $arrID = $API->comm("/ppp/secret/getall", [ + ".proplist"=> ".id", + "?name" => $userEdit, + ]); + + if (!empty($arrID)) { + $API->comm("/ppp/secret/set", [ + ".id" => $arrID[0][".id"], + "profile" => $profileNew, + ]); + + $arrID1 = $API->comm("/ppp/active/getall", [ + ".proplist" => ".id", + "?name" => $userEdit, + ]); + + if (!empty($arrID1)) { + $API->comm("/ppp/active/remove", [ + ".id" => $arrID1[0][".id"], + ]); + } + } + + $API->disconnect(); + $logubahpaket = "dan paket di Mikrotik "; + } else { + sweetAlert("Perubahan paket gagal, Aplikasi tidak terhubung ke mikrotik", "error"); + exit(); + } + } + } + } $SQL = "UPDATE pelanggan SET @@ -478,7 +552,7 @@ if (isset($_POST['ubah'])) { ':id' => $page[1] ]); - sweetAlert("Data pelanggan sudah diubah", "success"); + sweetAlert("Data pelanggan " . $logubahpaket . "berhasil diubah", "success"); } catch (PDOException $e) { // Handle error appropriately sweetAlert("Error: " . $e->getMessage(), "error"); @@ -635,4 +709,5 @@ $_SESSION['uploaded_files']['odp'.$isi['id']] = $isi['foto_odp']; $_SESSION['uploaded_files']['rmh'.$isi['id']] = $isi['foto_rumah']; $_SESSION['uploaded_files']['onu'.$isi['id']] = $isi['foto_onu']; $_SESSION['uploaded_files']['tes'.$isi['id']] = $isi['foto_test']; -?> \ No newline at end of file +?> + \ No newline at end of file diff --git a/pages/user_register.php b/pages/user_register.php index f97aa9e..2aa60a0 100644 --- a/pages/user_register.php +++ b/pages/user_register.php @@ -85,4 +85,6 @@ $stmt = $pdo->prepare("SELECT - \ No newline at end of file + + + \ No newline at end of file diff --git a/pages/user_remote.php b/pages/user_remote.php index e0bc72d..2f0ce9d 100644 --- a/pages/user_remote.php +++ b/pages/user_remote.php @@ -15,6 +15,8 @@ query("SELECT id,ip_address,username,password,port_api,port_remote,user_remote,last_remote FROM setting_mikrotik WHERE id='$page[2]'"); $pecah= $ambil->fetch_assoc(); @@ -53,11 +55,49 @@ $end = new DateTime($now); $diff_in_seconds = $end->getTimestamp() - $start->getTimestamp();// -// print_r($pecah); -// echo "


"; -// print_r($pel); if ($SvNama != $user_remote && $diff_in_seconds <= 180) { + include "controller/remoteModem.php"; + + $remote = new RemoteModem($pdo); + $result = $remote->remote_add($page[2], $addressuser, $nama); + $dataresult = json_decode($result, true); + + if ($dataresult['status'] == "success") { + + ?> +
+ + + + + + + + + + + + + + + + + +
Nama
Alamat
Last Ip Address
Last Up Time


+
+
+ PERINGATAN..!! + Router / Modem Pelanggan bisa di remote jika fitur remote di Router/Modem di aktifkan. +
+ Buka Web Browser +
+
+
@@ -70,6 +110,7 @@ if ($SvNama != $user_remote && $diff_in_seconds <= 180)
- + +
+ + + +
@@ -250,4 +255,36 @@ if (isset($_POST['tambah'])) { } } -?> \ No newline at end of file +?> + + + \ No newline at end of file diff --git a/pages/whatsapp_gateway.php b/pages/whatsapp_gateway.php index fe410a2..b302b0e 100644 --- a/pages/whatsapp_gateway.php +++ b/pages/whatsapp_gateway.php @@ -24,15 +24,18 @@ API Key Status Action + + Status + Edit + + + = date('Y-m-d')) { ?> + Aktif + + Tidak Aktif + +