diff --git a/.gitignore b/.gitignore
index e6f0876..d368dc7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@ whapi_webhook/*.log
payment/paydisini/callback/*.log
.well-known/
berita_acara/*.pdf
+load/logs/*.txt
diff --git a/config/cronjob_tagihan.log b/config/cronjob_tagihan.log
index 00cbbde..c89d201 100644
--- a/config/cronjob_tagihan.log
+++ b/config/cronjob_tagihan.log
@@ -1 +1 @@
-NO ACTION => 2 <-> cc.net Limit_Tgl_5 NO ACTION => 3 <-> nsn utama Limit_Tgl_10 NO ACTION => 3 <-> ciangsana Limit_Tgl_15 NO ACTION => 4 <-> fast.net Limit_Tgl_12 NO ACTION => 5 <-> bima net Limit Tagihan Tgl 15 NO ACTION => 6 <-> kingnet Limit Tgl 15 NO ACTION => 8 <-> diamond.net Limit_Tgl_15 NO ACTION => 9 <-> 22 p.net Limit_Tgl_15 NO ACTION => 10 <-> nettizen Tagihan Limit tgl 15 NO ACTION => 12 <-> Tagihan_Limit_Tgl5 NO ACTION => 15 <-> Tag_NTA2 Limit Tgl 5 NO ACTION => 16 <-> Tagihan Limit Tgl 5 BUAT TAGIHAN => 13 <-> Limit Tanggal 26 (Infinnet) Start : 2025-07-04 - Last : 2025-07-09 REMAND => 18 <-> BUM-Limit-Tgl-5 NO ACTION => 14 <-> Kh_Limit Tanggal 25 KIRIM TAGIHAN => 17 <-> Tagihan Limit Tgl 10 NO ACTION => 17 <-> Tagihan Limit Tgl 15 NO ACTION => 20 <-> IVVI-10 NO ACTION => 20 <-> IVVI-20 NO ACTION => 20 <-> IVVI-30 BUAT TAGIHAN => 21 <-> QONNET Start : 2025-07-02 - Last : 2025-07-05 NO ACTION => 21 <-> QONNET2 NO ACTION => 25 <-> Tagihan Limit Tgl 5 REMAND => 23 <-> Limit Tanggal 5 NO ACTION => 26 <-> Limit Tanggal 10 NO ACTION => 24 <-> Tagihan30 BUAT TAGIHAN => 23 <-> limit tanggal 19 Start : 2025-06-27 - Last : 2025-07-14 KIRIM TAGIHAN => 31 <-> 23-ISOLIR NO ACTION => 33 <-> usolir-10 NO ACTION => 37 <-> paket 140 ribu REMAND => 28 <-> PAKET-100K REMAND => 28 <-> PAKET-150K REMAND => 28 <-> PAKET-200K REMAND => 28 <-> PAKET-300K KIRIM TAGIHAN => 42 <-> meldina-20 BUAT TAGIHAN => 41 <-> lippy-20 Start : 2025-07-04 - Last : 2025-07-09 BUAT TAGIHAN => 43 <-> Tagihan_Limit_tgl_13 Start : 2025-07-01 - Last : 2025-07-06 REMAND => 46 <-> Limit_Tgl_5 NO ACTION => 35 <-> PAKET 1 DEVICE NO ACTION => 35 <-> PAKET 2 DEVICE NO ACTION => 35 <-> PAKET 3 DEVICE NO ACTION => 35 <-> PAKET 4 DEVICE NO ACTION => 35 <-> PAKET 5 DEVICE [1/80] NO ACTION => 35 <-> PAKET 5 DEVICE [1/70] NO ACTION => 35 <-> PAKET 6 DEVICE [1/80] NO ACTION => 35 <-> PAKET 6 DEVICE [1/70] NO ACTION => 35 <-> PAKET 7 DEVICE NO ACTION => 35 <-> PAKET 8 DEVICE BUAT TAGIHAN => 44 <-> Isolir_20 Start : 2025-07-04 - Last : 2025-07-07 BUAT TAGIHAN => 53 <-> PAKET BRONZE Start : 2025-07-01 - Last : 2025-07-06 KIRIM TAGIHAN => 54 <-> Muhamad rouf BUAT TAGIHAN => 53 <-> PAKET PLATINUM 5MBs Start : 2025-07-01 - Last : 2025-07-06 BUAT TAGIHAN => 53 <-> PAKET GLOD 7 MBs Start : 2025-07-01 - Last : 2025-07-06 BUAT TAGIHAN => 53 <-> PAKET GLOD+ 10 MBs Start : 2025-07-01 - Last : 2025-07-06 NO ACTION => 59 <-> Isolir_21 BUAT TAGIHAN => 46 <-> Limit tgl 30 Start : 2025-06-29 - Last : 2025-07-24 NO ACTION => 61 <-> Isolir_20 BUAT TAGIHAN => 55 <-> Dcn_CO_Isolir Start : 2025-06-28 - Last : 2025-07-24 REMAND => 62 <-> limit tanggal 5 NO ACTION => 21 <-> VIP-BAGUS REMAND => 55 <-> Dcn_GB_Isolir BUAT TAGIHAN => 49 <-> TAGIHAN TANGGAL 20 Start : 2025-06-29 - Last : 2025-07-18 NO ACTION => 19 <-> TAGIHAN-TGL1 NO ACTION => 49 <-> TAGIHAN TANGGAL 1 NO ACTION => 66 <-> Tagihan Isolir Tgl 1 NO ACTION => 67 <-> Tag Netborhood Limit Tgl 10 REMAND => 73 <-> Tagihan01-05
\ No newline at end of file
+NO ACTION => 2 <-> cc.net Limit_Tgl_5 NO ACTION => 3 <-> nsn utama Limit_Tgl_10 NO ACTION => 3 <-> ciangsana Limit_Tgl_15 NO ACTION => 4 <-> fast.net Limit_Tgl_12 NO ACTION => 5 <-> bima net Limit Tagihan Tgl 15 NO ACTION => 6 <-> kingnet Limit Tgl 15 NO ACTION => 8 <-> diamond.net Limit_Tgl_15 NO ACTION => 9 <-> 22 p.net Limit_Tgl_15 NO ACTION => 10 <-> nettizen Tagihan Limit tgl 15 NO ACTION => 12 <-> Tagihan_Limit_Tgl5 NO ACTION => 15 <-> Tag_NTA2 Limit Tgl 10 NO ACTION => 16 <-> Tagihan Limit Tgl 5 NO ACTION => 13 <-> Limit Tanggal 26 (Infinnet) NO ACTION => 18 <-> BUM-Limit-Tgl-5 BUAT TAGIHAN => 14 <-> Kh_Limit Tanggal 25 Start : 2025-07-13 - Last : 2025-07-18 NO ACTION => 17 <-> Tagihan Limit Tgl 10 NO ACTION => 17 <-> Tagihan Limit Tgl 15 NO ACTION => 20 <-> IVVI-10 NO ACTION => 20 <-> IVVI-20 NO ACTION => 20 <-> IVVI-30 NO ACTION => 21 <-> QONNET NO ACTION => 21 <-> QONNET2 NO ACTION => 25 <-> Tagihan Limit Tgl 5 NO ACTION => 23 <-> Limit Tanggal 5 NO ACTION => 26 <-> Limit Tanggal 10 NO ACTION => 24 <-> Tagihan30 NO ACTION => 23 <-> limit tanggal 19 NO ACTION => 31 <-> 23-ISOLIR NO ACTION => 33 <-> usolir-10 NO ACTION => 37 <-> paket 140 ribu NO ACTION => 28 <-> PAKET-100K NO ACTION => 28 <-> PAKET-150K NO ACTION => 28 <-> PAKET-200K NO ACTION => 28 <-> PAKET-300K NO ACTION => 42 <-> meldina-20 NO ACTION => 41 <-> lippy-20 NO ACTION => 43 <-> Tagihan_Limit_tgl_13 NO ACTION => 46 <-> Limit_Tgl_5 NO ACTION => 35 <-> PAKET 1 DEVICE NO ACTION => 35 <-> PAKET 2 DEVICE NO ACTION => 35 <-> PAKET 3 DEVICE NO ACTION => 35 <-> PAKET 4 DEVICE NO ACTION => 35 <-> PAKET 5 DEVICE [1/80] NO ACTION => 35 <-> PAKET 5 DEVICE [1/70] NO ACTION => 35 <-> PAKET 6 DEVICE [1/80] NO ACTION => 35 <-> PAKET 6 DEVICE [1/70] NO ACTION => 35 <-> PAKET 7 DEVICE NO ACTION => 35 <-> PAKET 8 DEVICE NO ACTION => 44 <-> Isolir_20 NO ACTION => 53 <-> PAKET BRONZE NO ACTION => 54 <-> Muhamad rouf NO ACTION => 53 <-> PAKET PLATINUM 5MBs NO ACTION => 53 <-> PAKET GLOD 7 MBs NO ACTION => 53 <-> PAKET GLOD+ 10 MBs NO ACTION => 59 <-> Isolir_21 NO ACTION => 46 <-> Limit tgl 30 NO ACTION => 61 <-> Isolir_20 NO ACTION => 55 <-> Dcn_CO_Isolir NO ACTION => 62 <-> limit tanggal 5 NO ACTION => 55 <-> Dcn_GB_Isolir NO ACTION => 49 <-> TAGIHAN TANGGAL 20 NO ACTION => 19 <-> TAGIHAN-TGL1 NO ACTION => 49 <-> TAGIHAN TANGGAL 1 NO ACTION => 66 <-> Tagihan Isolir Tgl 1 NO ACTION => 67 <-> Tag Netborhood Limit Tgl 10 NO ACTION => 73 <-> Tagihan01-05
\ No newline at end of file
diff --git a/dashboard.php b/dashboard.php
index 829ceb6..ffa1213 100644
--- a/dashboard.php
+++ b/dashboard.php
@@ -707,7 +707,8 @@ $statuspaygw = $datastatus['status_payment_gateway'];
}).buttons().container().appendTo('#example1_wrapper .col-md-6:eq(0)');
$("#example2").DataTable({
"responsive": true,
- "autoWidth": false
+ "autoWidth": false,
+ "pageLength": 100
});
$("#example3").DataTable({
"responsive": true,
diff --git a/img/default_kwitansi_Lyppi.png b/img/default_kwitansi_Lyppi.png
new file mode 100644
index 0000000..1fdcc55
Binary files /dev/null and b/img/default_kwitansi_Lyppi.png differ
diff --git a/load/check_voucher.php b/load/check_voucher.php
index c779cc7..e3d013d 100644
--- a/load/check_voucher.php
+++ b/load/check_voucher.php
@@ -2,127 +2,189 @@
ini_set('display_errors', 1);
error_reporting(E_ALL);
+// =======================
// Include necessary files
+// =======================
include "/www/wwwroot/bilspro/config/connect.php";
include "/www/wwwroot/bilspro/config/routeros_api.class.php";
-// include "../config/connect.php";
-// include "../config/routeros_api.class.php";
+// ============================
+// Get parameters from CLI args
+// ============================
+$m_ip = $argv[1]; // IP address
+$m_user = $argv[2]; // Username
+$m_pass = $argv[3]; // Password
+$m_port = $argv[4]; // Port
+$idsm = $argv[5]; // Mikrotik setting ID
+$nama = $argv[6]; // Nama Mikrotik
-// Get parameters from command line arguments
-$m_ip = $argv[1]; // IP address
-$m_user = $argv[2]; // Username
-$m_pass = $argv[3]; // Password
-$m_port = $argv[4]; // Port
-$idsm = $argv[5]; // Mikrotik setting ID
+// ====================
+// Log file location
+// ====================
+$logFile = "/www/wwwroot/bilspro/load/logs/voucher_{$nama}_log.txt";
-// Create new RouterosAPI instance
+// ================================
+// Function: Write to log file
+// ================================
+function writeLog($message)
+{
+ global $logFile;
+ $date = date("Y-m-d H:i:s");
+ $newLine = "[$date] $message\n";
+
+ // Append new log
+ file_put_contents($logFile, $newLine, FILE_APPEND);
+
+ // Keep log file max 1000 lines
+ $lines = file($logFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+ $totalLines = count($lines);
+ if ($totalLines > 1000) {
+ $lines = array_slice($lines, -1000); // Keep only last 1000
+ file_put_contents($logFile, implode("\n", $lines) . "\n");
+ }
+}
+
+// ==========================
+// Create RouterOS API object
+// ==========================
$API = new RouterosAPI();
$API->debug = false;
-// Connect to the router API
+// =======================
+// Connect to RouterOS API
+// =======================
if ($API->connect2($m_ip, $m_user, $m_pass, $m_port)) {
- echo "\nConnected to Router: {$m_ip}\n";
+ echo "✅ Berhasil terhubung ke Router: {$m_ip}\n";
+ writeLog("[✅] Berhasil terhubung ke Router: {$m_ip}");
- // Query vouchers that need to be checked
- $ambilv1 = $pdo->prepare("SELECT id, create_time, voucher, durasi FROM v_load_cek_voucher WHERE id_setting_mikrotik = :idsm AND status_cek IS NULL LIMIT 75");
- $ambilv1->execute([':idsm' => $idsm]);
+ $batchSize = 200; // Batasi 200 voucher per batch
+ $offset = 0;
- while ($cekv1 = $ambilv1->fetch(PDO::FETCH_ASSOC)) {
- $iddatav1 = $cekv1['id'];
- $datav1 = $cekv1['voucher'];
- $durasi = $cekv1['durasi'];
+ do {
+ $ambilv1 = $pdo->prepare("
+ SELECT id, create_time, voucher, durasi
+ FROM v_load_cek_voucher
+ WHERE id_setting_mikrotik = :idsm
+ LIMIT :limit OFFSET :offset
+ ");
+ $ambilv1->bindValue(':idsm', $idsm, PDO::PARAM_INT);
+ $ambilv1->bindValue(':limit', $batchSize, PDO::PARAM_INT);
+ $ambilv1->bindValue(':offset', $offset, PDO::PARAM_INT);
+ $ambilv1->execute();
- // Convert the 'durasi' to a valid DateInterval format
- $inter = convertDurationToInterval($durasi);
- if (!$inter) {
- echo "Invalid duration format: $durasi.\n";
- continue; // Skip this voucher if the duration is invalid
- }
+ $rows = $ambilv1->fetchAll(PDO::FETCH_ASSOC);
+ if (!$rows) break;
- // Check if the voucher exists in the hotspot users
- $cek = $API->comm('/ip/hotspot/user/print', ["?name" => $datav1]);
+ foreach ($rows as $cekv1) {
+ $iddatav1 = $cekv1['id'];
+ $datav1 = $cekv1['voucher'];
+ $durasi = $cekv1['durasi'];
- if ($cek) {
- // If voucher exists, check the comment
- if (isset($cek[0]['comment']) && $cek[0]['comment'] != '') {
- $activetime = processCommentDate($cek[0]['comment']);
- $Tgl = new DateTime($activetime);
+ // ================================
+ // Convert duration to DateInterval
+ // ================================
+ $inter = convertDurationToInterval($durasi);
+ if (!$inter) {
+ $status = "Durasi tidak valid ($durasi)";
+ echo "{$datav1} => $status\n";
+ writeLog("[⛔] {$datav1} => $status");
+ continue;
+ }
+
+ // =====================================
+ // Check if voucher exists on Hotspot
+ // =====================================
+ $cek = $API->comm('/ip/hotspot/user/print', ["?name" => $datav1]);
+
+ if ($cek) {
+ // If voucher exists and has comment
+ if (!empty($cek[0]['comment'])) {
+ $activetime = processCommentDate($cek[0]['comment']);
+ $Tgl = new DateTime($activetime);
+ $Tgl->add($inter);
+ $exp = $Tgl->format('Y-m-d H:i:s');
+
+ updateVoucher($pdo, $iddatav1, $activetime, $exp);
+ $status = "Voucher aktif & diperbarui. Expired: $exp";
+ echo "{$datav1} => $status\n";
+ writeLog("[✅] {$datav1} => $status");
+ } else {
+ markVoucherChecked($pdo, $iddatav1);
+ $status = "Voucher ditemukan tanpa komentar, ditandai sudah dicek";
+ echo "{$datav1} => $status\n";
+ writeLog("[ℹ️] {$datav1} => $status");
+ }
+ } else {
+ // If voucher does not exist
+ $aktif = $cekv1['create_time'];
+ $Tgl = new DateTime($aktif);
$Tgl->add($inter);
$exp = $Tgl->format('Y-m-d H:i:s');
- echo "{$datav1} comment->{$cek[0]['comment']} active->{$activetime} exp->{$exp} => Exists\n";
-
- // Update the database with active and expired time
- updateVoucher($pdo, $iddatav1, $activetime, $exp);
- } else {
- // Mark the voucher as checked
- markVoucherChecked($pdo, $iddatav1);
+ updateVoucher($pdo, $iddatav1, $aktif, $exp);
+ $status = "Voucher tidak ditemukan, dianggap aktif sejak $aktif, expired: $exp";
+ echo "{$datav1} => $status\n";
+ writeLog("[⚠️] {$datav1} => $status");
}
- } else {
- // If voucher does not exist, calculate expiration time based on creation date
- $aktif = $cekv1['create_time'];
- $Tgl = new DateTime($aktif);
- $Tgl->add($inter);
- $exp = $Tgl->format('Y-m-d H:i:s');
-
- echo "{$datav1} active->{$aktif} exp->{$exp} => Does not exist\n";
-
- // Update the database with active and expired time
- updateVoucher($pdo, $iddatav1, $aktif, $exp);
}
- echo "{$cekv1['voucher']}\n";
- }
+ $offset += $batchSize;
+ } while (count($rows) == $batchSize);
+
+ echo "✅ Selesai memproses semua voucher untuk Router {$m_ip}\n";
+ writeLog("[✅] Selesai memproses semua voucher untuk Router {$m_ip}");
} else {
- echo "Unable to connect to router: {$m_ip}\n";
+ $msg = "Gagal terhubung ke Router: {$m_ip}";
+ echo "❌ $msg\n";
+ writeLog("[❌] $msg");
}
-// Disconnect the API session
+// =======================
+// Disconnect API session
+// =======================
$API->disconnect();
-// Function to convert duration string to DateInterval
-function convertDurationToInterval($durasi) {
+
+// ============================================
+// Helper Functions
+// ============================================
+function convertDurationToInterval($durasi)
+{
if (substr($durasi, -1) == 'H') {
- return new DateInterval("PT" . rtrim($durasi, 'H') . "H"); // For hours
+ return new DateInterval("PT" . rtrim($durasi, 'H') . "H");
} elseif (substr($durasi, -1) == 'D') {
- return new DateInterval("P" . rtrim($durasi, 'D') . "D"); // For days
+ return new DateInterval("P" . rtrim($durasi, 'D') . "D");
} elseif (substr($durasi, -1) == 'M') {
- return new DateInterval("PT" . rtrim($durasi, 'M') . "M"); // For minutes
+ return new DateInterval("PT" . rtrim($durasi, 'M') . "M");
} else {
- return false; // Invalid duration format
+ return false;
}
}
-// Function to process the comment and extract valid activation time
-function processCommentDate($comment) {
+function processCommentDate($comment)
+{
$modifiedDateTime = substr($comment, 6);
if (substr($modifiedDateTime, 0, 4) == date('Y')) {
return $modifiedDateTime;
} else {
$date = date_create_from_format("M/d/Y H:i:s", $modifiedDateTime);
- if ($date !== false) {
- return date_format($date, "Y-m-d H:i:s");
- } else {
- echo "Invalid date format: {$modifiedDateTime}\n";
- return null;
- }
+ return $date ? date_format($date, "Y-m-d H:i:s") : null;
}
}
-// Function to update the voucher in the database
-function updateVoucher($pdo, $iddatav1, $activetime, $exp) {
+function updateVoucher($pdo, $iddatav1, $activetime, $exp)
+{
$updateQuery = "UPDATE ganerate_voucher SET active_time = :activetime, expaired_time = :exp WHERE id = :id";
$stmt = $pdo->prepare($updateQuery);
$stmt->execute([
':activetime' => $activetime,
- ':exp' => $exp,
- ':id' => $iddatav1
+ ':exp' => $exp,
+ ':id' => $iddatav1
]);
}
-// Function to mark voucher as checked in the database
-function markVoucherChecked($pdo, $iddatav1) {
+function markVoucherChecked($pdo, $iddatav1)
+{
$updateQuery = "UPDATE ganerate_voucher SET status_cek = '1' WHERE id = :id";
$stmt = $pdo->prepare($updateQuery);
$stmt->execute([':id' => $iddatav1]);
diff --git a/load/koneksi_off.log b/load/koneksi_off.log
index 2c8ea27..f7a6d7d 100644
--- a/load/koneksi_off.log
+++ b/load/koneksi_off.log
@@ -1,23 +1,23 @@
SV_Cikembar_Utama Data pelanggan tidak ada
-2025-07-05 16:21:01SV_BojongKerta Data pelanggan tidak ada
-2025-07-05 16:21:01SV_Permata_Sampora Data pelanggan tidak ada
-2025-07-05 16:21:01SV_Kingnet_Cibadak Data pelanggan tidak ada
-2025-07-05 16:21:01SV_CC-Net_Cipicung Data pelanggan tidak ada
-2025-07-05 16:21:01SV_Nusaina_Cibadak Data pelanggan tidak ada
-2025-07-05 16:21:01SV_Diamond Net Status koneksi tidak aktif atau interval tidak tersedia.
+2025-07-14 23:47:01SV_BojongKerta Data pelanggan tidak ada
+2025-07-14 23:47:01SV_Permata_Sampora Data pelanggan tidak ada
+2025-07-14 23:47:01SV_Kingnet_Cibadak Data pelanggan tidak ada
+2025-07-14 23:47:01SV_CC-Net_Cipicung Data pelanggan tidak ada
+2025-07-14 23:47:01SV_Nusaina_Cibadak Data pelanggan tidak ada
+2025-07-14 23:47:01SV_Diamond Net Status koneksi tidak aktif atau interval tidak tersedia.
SV_22P Net Cibadak Data pelanggan tidak ada
-2025-07-05 16:21:01SV_Nettizen_Segaranten Data pelanggan tidak ada
-2025-07-05 15:51:01SV-DNY-Net-1 Data pelanggan tidak ada
-2025-07-05 16:31:01SV_NTA_2_Pasawahan Status koneksi tidak aktif atau interval tidak tersedia.
+2025-07-14 23:47:01SV_Nettizen_Segaranten Data pelanggan tidak ada
+2025-07-14 23:17:02SV-DNY-Net-1 Data pelanggan tidak ada
+2025-07-14 23:57:02SV_NTA_2_Pasawahan Status koneksi tidak aktif atau interval tidak tersedia.
SV_NTA_1 Status koneksi tidak aktif atau interval tidak tersedia.
SV-Cicukang Status koneksi tidak aktif atau interval tidak tersedia.
RO-Bumdes-Mekarmanah Status koneksi tidak aktif atau interval tidak tersedia.
RO-Pak-Kholiq Data pelanggan tidak ada
-2025-07-05 16:36:01RO-Dendrit-Net Status koneksi tidak aktif atau interval tidak tersedia.
+2025-07-15 00:02:02RO-Dendrit-Net Status koneksi tidak aktif atau interval tidak tersedia.
LJN.NS.CSR.NET Status koneksi tidak aktif atau interval tidak tersedia.
IVVINET-CBD Data pelanggan tidak ada
-2025-07-05 16:21:01QONNET Data pelanggan tidak ada
-2025-07-05 16:21:01Mikrotik_X86 Status koneksi tidak aktif atau interval tidak tersedia.
+2025-07-14 23:47:02QONNET Data pelanggan tidak ada
+2025-07-14 23:47:02Mikrotik_X86 Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik_BSW_1 Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik_Alea Status koneksi tidak aktif atau interval tidak tersedia.
STANG Status koneksi tidak aktif atau interval tidak tersedia.
@@ -25,7 +25,7 @@ UNIX-NET Status koneksi tidak aktif atau interval tidak tersedia.
BTR CIEMAS Status koneksi tidak aktif atau interval tidak tersedia.
SV_NTA_2_TBL Status koneksi tidak aktif atau interval tidak tersedia.
MULYANAJAYA Status koneksi tidak aktif atau interval tidak tersedia.
-PERWASIM.NET Status koneksi tidak aktif atau interval tidak tersedia.
+PERWASIM-NETWORK Status koneksi tidak aktif atau interval tidak tersedia.
RO_MELDINA Status koneksi tidak aktif atau interval tidak tersedia.
RO_LIPPY Status koneksi tidak aktif atau interval tidak tersedia.
RO_Asep Status koneksi tidak aktif atau interval tidak tersedia.
@@ -37,14 +37,14 @@ RO_Wargasari Status koneksi tidak aktif atau interval tidak tersedia.
LJN_AGUNG Status koneksi tidak aktif atau interval tidak tersedia.
RNET-CMS Status koneksi tidak aktif atau interval tidak tersedia.
DCN-GB-CCR Data pelanggan tidak ada
-2025-07-05 16:21:01coba Status koneksi tidak aktif atau interval tidak tersedia.
+2025-07-14 23:47:02coba Status koneksi tidak aktif atau interval tidak tersedia.
412NET Status koneksi tidak aktif atau interval tidak tersedia.
brf Status koneksi tidak aktif atau interval tidak tersedia.
BMSNET Status koneksi tidak aktif atau interval tidak tersedia.
purabaya Status koneksi tidak aktif atau interval tidak tersedia.
DCN-CO-GX4 Data pelanggan tidak ada
-2025-07-05 16:21:01MIKROTIK GX4 Status koneksi tidak aktif atau interval tidak tersedia.
+2025-07-14 23:47:02MIKROTIK GX4 Status koneksi tidak aktif atau interval tidak tersedia.
RO - Netborhood Wifi Status koneksi tidak aktif atau interval tidak tersedia.
Neglasari Status koneksi tidak aktif atau interval tidak tersedia.
SV-DNY-Net-2 Data pelanggan tidak ada
-2025-07-05 16:31:01DNY-Neglasari Status koneksi tidak aktif atau interval tidak tersedia.
+2025-07-14 23:57:02DNY-Neglasari Status koneksi tidak aktif atau interval tidak tersedia.
diff --git a/load/load_multi_cek.log b/load/load_multi_cek.log
index 1c49085..6e6050b 100644
--- a/load/load_multi_cek.log
+++ b/load/load_multi_cek.log
@@ -1 +1 @@
-Update ALL to NULL successful
+Successfully started background process for IP: tunnel.manjapro.net SV-DNY-Net-1 Successfully started background process for IP: nsn.my.id SV_22P Net Cibadak Successfully started background process for IP: nsn.my.id RO-Bumdes-Mekarmanah Successfully started background process for IP: 103.242.104.69 RO-Dendrit-Net Successfully started background process for IP: 103.26.176.93 LJN.NS.CSR.NET Successfully started background process for IP: 103.155.198.109 RO_Asep Successfully started background process for IP: 103.155.199.191 PERWASIM-NETWORK Successfully started background process for IP: tunnel.manjapro.net SV_NTA_2_Pasawahan Successfully started background process for IP: tunnel.manjapro.net SV-Cicukang Successfully started background process for IP: tunnel.manjapro.net SV_NTA_1 Successfully started background process for IP: 103.94.10.112 STANG Successfully started background process for IP: 157.20.128.231 QONNET Successfully started background process for IP: 114.141.51.12 BMSNET Successfully started background process for IP: 114.141.51.12 purabaya Successfully started background process for IP: nsn.my.id SV_Cikembar_Utama Successfully started background process for IP: tunnel.bilspro.com RO_Sukasari Successfully started background process for IP: tunnel.bilspro.com Mikrotik_X86 Successfully started background process for IP: 103.155.196.145 UNIX-NET Successfully started background process for IP: nsn.my.id SV_Diamond Net Successfully started background process for IP: 103.26.176.81 SV_CC-Net_Cipicung Successfully started background process for IP: 103.242.105.199 SV-DNY-Net-2 Started parallel processes for checking vouchers. => 2025-07-15 00:00:01
\ No newline at end of file
diff --git a/load/load_multi_cek.php b/load/load_multi_cek.php
index a7963c7..a9b1156 100644
--- a/load/load_multi_cek.php
+++ b/load/load_multi_cek.php
@@ -19,6 +19,7 @@ if ($set1->rowCount() > 0) {
while ($pset = $set1->fetch(PDO::FETCH_ASSOC)) {
// Get connection details for the router
+ $nama = $pset['nama'];
$m_ip = $pset['ip_address'];
$m_user = $pset['username'];
$m_pass = $pset['password'];
@@ -26,16 +27,16 @@ if ($set1->rowCount() > 0) {
$idsm = $pset['id_setting_mikrotik'];
// Prepare the command for each router
- $command = "php /www/wwwroot/bilspro/load/check_voucher.php {$m_ip} {$m_user} {$m_pass} {$m_port} {$idsm} > /dev/null 2>&1 &";
+ $command = "php /www/wwwroot/bilspro/load/check_voucher.php {$m_ip} {$m_user} {$m_pass} {$m_port} {$idsm} {$nama} > /dev/null 2>&1 &";
// Execute the command in background
exec($command, $output, $return_var);
// Check if there was an issue with exec
if ($return_var !== 0) {
- echo "Error executing command for IP: {$m_ip}\n";
+ echo "Error executing command for IP: {$m_ip} ";
} else {
- echo "Successfully started background process for IP: {$m_ip}\n";
+ echo "Successfully started background process for IP: {$m_ip} {$nama} ";
}
}
diff --git a/load/load_pesan.php b/load/load_pesan.php
index 493e589..4114398 100644
--- a/load/load_pesan.php
+++ b/load/load_pesan.php
@@ -319,7 +319,7 @@ try {
// Kirim Pesan WhatsApp
$nomor = explode(',', $tagihan['nomor_whatsapp']);
- $Url = 'http://bilspro.com/invoice/' . $invoice;
+ $Url = 'https://manjapro.net/invoice/' . $invoice;
$APIwa = new PesanWA();
$APIwa->Create_Pesan($tagihan['id_data_server'], $idtag, 'pesan_melunasi_tagihan', 'tag');
diff --git a/load/pppoe_update.log b/load/pppoe_update.log
index 7511230..b8b9c48 100644
--- a/load/pppoe_update.log
+++ b/load/pppoe_update.log
@@ -24,7 +24,7 @@ STANG =>
UNIX-NET =>
SV_NTA_2_TBL =>
MULYANAJAYA =>
-PERWASIM.NET =>
+PERWASIM-NETWORK =>
RO_MELDINA =>
RO_LIPPY =>
RO_Asep =>
diff --git a/load/update_sewa_apk.log b/load/update_sewa_apk.log
index b09c162..88a941e 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 Harga harus diupdate untuk ID Data Server: 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
\ 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.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
diff --git a/load/update_sewa_apk.php b/load/update_sewa_apk.php
index a3af0c3..55bcd11 100644
--- a/load/update_sewa_apk.php
+++ b/load/update_sewa_apk.php
@@ -55,6 +55,24 @@ try {
echo "Harga khusus untuk ID: " . $data['id'] . " Rp." . number_format($data['harga_sewa']) . " ";
}
}
+
+ $sekarang = date('Y-m-d H:i:s');
+ $harilalu = date('Y-m-d H:i:s', strtotime("$sekarang -3 days"));
+
+ // Hitung jumlah data yang akan dihapus
+ $sqlCount = "SELECT COUNT(id) AS jumid FROM master_pesan WHERE waktu <= :harilalu";
+ $stmtCount = $pdo->prepare($sqlCount);
+ $stmtCount->execute(['harilalu' => $harilalu]);
+ $pp = $stmtCount->fetch(PDO::FETCH_ASSOC);
+ $jumlahHapus = $pp['jumid'] ?? 0;
+
+ // Hapus data
+ $sqlDelete = "DELETE FROM master_pesan WHERE waktu <= :harilalu";
+ $stmtDelete = $pdo->prepare($sqlDelete);
+ $stmtDelete->execute(['harilalu' => $harilalu]);
+
+ echo $jumlahHapus . " data pesan sebelum 3 hari terakhir berhasil dihapus. ";
+
} catch (PDOException $e) {
// Tangani kesalahan koneksi atau query
echo "Terjadi kesalahan: " . $e->getMessage();
diff --git a/pages/log_pesan.php b/pages/log_pesan.php
index b229aa0..b7bbe34 100644
--- a/pages/log_pesan.php
+++ b/pages/log_pesan.php
@@ -1,5 +1,5 @@
-
+