Update Banyak

This commit is contained in:
WD - Dev
2025-09-21 21:40:17 +07:00
parent c6bee729c5
commit efca8f5f80
145 changed files with 195185 additions and 1378 deletions
+490 -68
View File
@@ -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);
?>
<!-- Main content -->
@@ -29,13 +41,10 @@ $status = $data[0]['status_payment_gateway'];
<!-- /.card-header -->
<div class="card-body">
<div class="row">
<div class="col-md-5">
<div class="col-md-4">
<div class="card">
<div class="card-body">
<center>
<h3 class="text-danger">PERHATIAN..!</h3>
<p>Untuk mengaktifkan payment gateway anda harus terlebih dahulu mempunyai akun FLIP BUSSINESS</p>
<hr>
<?php if($status == "ACTIVE"){ ?>
<div class="card bg-success">
<h5 class="text-light m-1">STATUS : <?php echo $status; ?></h5>
@@ -49,36 +58,14 @@ $status = $data[0]['status_payment_gateway'];
<form method="post" enctype="multipart/form-data">
<div class="form-group">
<label>Jenis Payment Gateway</label>
<select class="form-control" name="jenis">
<select class="form-control" name="jenis" id="getSelected">
<option value="">Pilih Salah Satu</option>
<option value="flip" <?php if($payment_gateway == 'flip'){ echo "selected"; } ?>>Flip Bussiness</option>
<option value="paydisini" <?php if($payment_gateway == 'paydisini'){ echo "selected"; } ?>>Default ManjaPro (Paydisini)</option>
</select>
</div>
<div class="form-group">
<label>ENDPOINT URL</label>
<input class="form-control" type="text" name="enpoint" value="<?php echo $enpoint; ?>">
</div>
<div class="form-group">
<label>API SECRET KEY</label>
<div class="input-group">
<input type="password" class="form-control password-input" id="password1" name="apikey" value="<?php echo $apikey; ?>">
<div class="input-group-append">
<div class="input-group-text password-toggle" data-target="password1">
<span class="fas fa-eye"></span>
</div>
</div>
</div>
</div>
<div class="form-group">
<label>TOKEN VALIDASI</label>
<div class="input-group">
<input type="password" class="form-control password-input" id="password2" name="tokenkey" value="<?php echo $tokenkey; ?>">
<div class="input-group-append">
<div class="input-group-text password-toggle" data-target="password2">
<span class="fas fa-eye"></span>
</div>
</div>
</div>
<div class="Paykategori mb-4">
</div>
<input type="submit" class="btn btn-sm btn-primary m-1" name="simpan" value="Simpan Konfigurasi">
<?php if($status == "ACTIVE"){ ?>
@@ -90,12 +77,152 @@ $status = $data[0]['status_payment_gateway'];
</div>
</div>
</div>
<div class="col-md-7">
<?php
// echo "<pre>";
// print_r($_SERVER);
// echo "</pre>";
?>
<div class="col-md-8">
<?php if($jenis == 'paydisini') { ?>
<div class="card-body">
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-3 mb-2">
</div>
<div class="col-md-6">
<center>
<p>Akumulasi Keuangan Tagihan Payment Gateway</p>
</center>
</div>
</div>
<div class="row">
<div class="col-lg-4 col-6">
<!-- small box -->
<div class="small-box bg-info" id="penjualanBox">
<div class="inner">
<h4><?= 'Rp. ' . number_format($saldo['total_saldo'], 0, ',', '.'); ?></h4>
<p><small>Total Penjualan</small></p>
</div>
<div class="icon">
<i class="ion ion-card"></i>
</div>
</div>
</div>
<div class="col-lg-4 col-6">
<!-- small box -->
<div class="small-box bg-danger" id="lunasBox">
<div class="inner">
<h4><?= 'Rp. ' . number_format($saldo['total_ditahan'], 0, ',', '.'); ?></h4>
<p><small>Saldo Ditahan</small></p>
</div>
<div class="icon">
<i class="ion ion-card"></i>
</div>
</div>
</div>
<div class="col-lg-4 col-12">
<!-- small box -->
<div class="small-box bg-success" id="pendingBox">
<div class="inner">
<h4><?= 'Rp. ' . number_format($saldo['total_tersedia'], 0, ',', '.'); ?></h4>
<p><small>Saldo Tersedia</small></p>
</div>
<div class="icon">
<i class="ion ion-card"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<center>
<p>Riwayat Pencairan Dana</p>
</center>
</div>
<div class="col-md-2 mb-2 text-right">
<a type="button" class="btn btn-primary btn-sm m-1" data-toggle="modal" data-target="#ModalPencairan">Pencairan Dana</a>
</div>
</div>
<table id="withdrawTable" class="table table-striped table-bordered" style="zoom: 90%; width: 100%;">
<thead class="text-center">
<tr>
<th>Server</th>
<th>Dibuat</th>
<th>Nominal</th>
<th>User</th>
<th>Status</th>
<th>Diproses</th>
<th>Action</th>
</tr>
</thead>
</table>
<hr>
<div class="row mt-2">
<div class="col-md-10">
<center>
<p>Riwayat Transaksi</p>
</center>
</div>
<div class="col-md-2 mb-2 text-right">
<div class="form-group">
<select class="form-control" id="selectStatus">
<option value="SUCCESS">SUCCESS</option>
<option value="PENDING">PENDING</option>
<option value="CANCELED">CANCELED</option>
</select>
</div>
</div>
</div>
<table id="transactionTable" class="table table-striped table-bordered" style="width: 100%;">
<thead class="text-center">
<tr>
<th>Kode Unik</th>
<th>Keterangan</th>
<th>Nama</th>
<th>Jumlah</th>
<th>Saldo</th>
<th>Biaya</th>
<th>Status</th>
<th>Jenis</th>
<th>Waktu</th>
<th>Waktu</th>
</tr>
</thead>
</table>
</div>
<script>
$(document).ready(function() {
var table = $('#transactionTable').DataTable({
"processing": true,
"serverSide": true,
"responsive": true,
"ajax": {
"url": "controller/get_client_payment.php?i=<?= $SvId; ?>&s=" + $('#selectStatus').val(),
"type": "POST"
},
"pageLength": 10,
"columns": [
{ "data": 0 },
{ "data": 1 },
{ "data": 2 },
{ "data": 3 },
{ "data": 4 },
{ "data": 5 },
{ "data": 6 },
{ "data": 7 },
{ "data": 8 },
{ "data": 9 }
],
"order": [[1, "desc"]] // urut berdasarkan Dibuat
});
// reload data saat selectStatus berubah
$('#selectStatus').on('change', function() {
var newStatus = $(this).val();
table.ajax.url("controller/get_client_payment.php?i=<?= $SvId; ?>&s=" + newStatus).load();
});
});
</script>
<?php } ?>
</div>
</div>
</div>
@@ -108,21 +235,149 @@ $status = $data[0]['status_payment_gateway'];
</div>
</section>
<!--START Modal WithDrow-->
<div class="modal fade" id="ModalPencairan" data-backdrop="static" data-keyboard="false" tabindex="-1" aria-labelledby="ModalPencairanLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<form method="post" enctype="multipart/form-data">
<div class="modal-header bg-primary">
<h5 class="modal-title" id="staticBackdropLabel">Pencairan Dana</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="card-body">
<?php
// ambil data server untuk script
$ListServer = new Listdata();
$ListServer->set_list("data_server", "WHERE id IN (" . $SvId . ")");
?>
<div class="form-group">
<label>Nama Server</label>
<select class="form-control" id="idgetSaldo" name="idgetSaldo">
<option value="0">-- PILIH --</option>
<?php foreach ($ListServer->get_list() as $value): ?>
<option value="<?= htmlspecialchars($value['id']) ?>">
<?= htmlspecialchars($value['nama_server']) ?>
</option>
<?php endforeach ?>
</select>
</div>
<div class="form-group">
<label>Saldo</label>
<div id="saldoServer" class="mt-2 text-success font-weight-bold" style="font-size: 24px;">Rp. 0</div>
</div>
<div class="form-group" id="formNominal">
<label>Nominal</label>
<input type="text" class="form-control rupiah" id="rupiah0" placeholder="Rp. 0" name="nominal" disabled readonly>
</div>
<i class="text-danger">Dana bisa di cairkan jika Saldo lebih dari Rp 10.000</i>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<input type="submit" name="cairkan" class="btn btn-primary" value="Cairkan">
</div>
</form>
</div>
</div>
</div>
<!--END Modal WithDrow-->
<!--END Modal WithDrow-->
<div class="modal fade" id="viewBuktiModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" style="max-width: fit-content; margin: auto;">
<div class="modal-content border-0 bg-transparent shadow-none" style="width: auto;">
<div class="position-relative d-inline-block">
<!-- Tombol Close -->
<button type="button" class="close text-white position-absolute"
data-dismiss="modal" aria-label="Close"
style="top: 10px; right: 10px; filter: invert(1); z-index: 10;">
<span aria-hidden="true">&times;</span>
</button>
<!-- Gambar dari JS -->
<img id="viewBuktiImg" src=""
class="img-fluid rounded shadow d-block"
alt="Bukti Transaksi" style="max-height: 600px;">
</div>
</div>
</div>
</div>
<?php
if (isset($_POST['cairkan'])) {
$SQLCek = "SELECT nama_server, rekening_bank, rekening_nama, rekening_nomor, rekening_status
FROM data_server WHERE id = :idsv";
$stmt = $pdo->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");
}
}
?>
<?php
//Aktifkan Payment Gateway
if (isset($_POST['active'])) {
try {
if(!empty($apikey) || !empty($tokenkey) || !empty($enpoint) ) {
$stmt = $pdo->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'];
}
}
?>
<script>
document.querySelectorAll('.password-toggle').forEach(function(toggle) {
toggle.addEventListener('click', function() {
var targetId = this.getAttribute('data-target');
var passwordInput = document.getElementById(targetId);
var icon = this.querySelector('span');
if (passwordInput.type === 'password') {
passwordInput.type = 'text';
icon.classList.remove('fa-eye');
icon.classList.add('fa-eye-slash');
} else {
passwordInput.type = 'password';
icon.classList.remove('fa-eye-slash');
icon.classList.add('fa-eye');
<script>
document.addEventListener('DOMContentLoaded', function() {
const select = document.getElementById('getSelected');
const container = document.querySelector('.Paykategori');
function loadFormPage(data) {
fetch('controller/payment_gateway.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
})
.then(res => res.text())
.then(html => {
container.innerHTML = html;
// Pasang password toggle setelah HTML dimasukkan
container.querySelectorAll(".password-toggle").forEach(function(toggle) {
toggle.addEventListener("click", function() {
const targetId = this.getAttribute("data-target");
const input = document.getElementById(targetId);
const icon = this.querySelector("span");
if (!input) return;
if (input.type === "password") {
input.type = "text";
icon.classList.remove("fa-eye");
icon.classList.add("fa-eye-slash");
} else {
input.type = "password";
icon.classList.remove("fa-eye-slash");
icon.classList.add("fa-eye");
}
});
});
})
.catch(err => {
console.error('Error:', err);
container.innerHTML = "<p class='text-danger'>Terjadi kesalahan saat memuat data.</p>";
});
}
select.addEventListener('change', function() {
const value = this.value;
if (!value) {
container.innerHTML = "";
return;
}
let data = { page: value };
// Jika flip, kirim juga endpoint, apikey, tokenkey
if (value === "flip") {
data.endpoint = "<?= $enpoint ?>"; // sesuaikan dari PHP
data.apikey = "<?= $apikey ?>";
data.tokenkey = "<?= $tokenkey ?>";
}
loadFormPage(data);
});
// Optional: trigger load jika ada yang sudah selected
if (select.value) {
select.dispatchEvent(new Event('change'));
}
});
$(document).ready(function() {
$('#withdrawTable').DataTable({
"processing": true,
"serverSide": true,
"responsive": true,
"ajax": {
"url": "controller/get_withdrow.php?i=<?= $SvId; ?>&s=tagihan",
"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 `<span class="badge bg-primary p-2">${data.toUpperCase()}</span>`;
} else {
return `<span class="badge bg-success p-2">${data.toUpperCase()}</span>`;
}
}
},
{ "data": 5 }, // Diproses
{
"data": 6, // id unik
"render": function(data, type, row, meta) {
let btn = "";
if (row[4] === 'success') {
btn += `<button class="btn btn-sm btn-secondary me-1" onclick="viewBukti('${data.bukti_success}')">
<i class="fa fa-image"></i>
</button>`;
}
return btn;
}
}
],
"order": [[1, "desc"]] // urut berdasarkan Dibuat
});
});
// function viewBukti Transaksi
function viewBukti(imgPath) {
$("#viewBuktiImg").attr("src", imgPath);
$("#viewBuktiModal").modal("show");
}
$(document).ready(function(){
var currentSaldo = 0; // simpan saldo terakhir
$("#idgetSaldo").on("change", function(){
var serverId = $(this).val();
var $nominalInput = $("#formNominal input");
if(serverId == 0){
$("#saldoServer").html("Rp. 0");
$nominalInput.prop("disabled", true).prop("readonly", true).val("");
currentSaldo = 0;
return;
}
$.ajax({
url: "controller/get_saldo.php",
type: "GET",
data: { id: serverId, s: '1' },
dataType: "json",
success: function(res){
if(res && res.saldo !== undefined){
currentSaldo = parseInt(res.saldo) || 0;
$("#saldoServer").html("Rp. " + new Intl.NumberFormat().format(currentSaldo));
if(currentSaldo < 10000){
$nominalInput.prop("disabled", true).prop("readonly", true).val("");
} else {
$nominalInput.prop("disabled", false).prop("readonly", false);
}
} else {
$("#saldoServer").html("Rp. 0");
$nominalInput.prop("disabled", true).prop("readonly", true).val("");
currentSaldo = 0;
}
},
error: function(){
$("#saldoServer").html("Gagal mengambil saldo");
$nominalInput.prop("disabled", true).prop("readonly", true).val("");
currentSaldo = 0;
}
});
});
</script>
// 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
});
});
</script>