You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
753 lines
24 KiB
PHP
753 lines
24 KiB
PHP
<?php
|
|
|
|
use NN\files;
|
|
use NN\Post;
|
|
use NN\Session;
|
|
use NN\Module\DB;
|
|
use NN\Module\DD;
|
|
use NN\Module\Help;
|
|
use NN\Module\Datatable;
|
|
use NN\Link;
|
|
use NN\Enc;
|
|
use NN\module\View;
|
|
use NN\load;
|
|
|
|
class Jurubayar {
|
|
|
|
private static $prefix = "_jb";
|
|
|
|
public static function api(){
|
|
|
|
header('Content-Type: application/json');
|
|
header('Access-Control-Allow-Origin: *');
|
|
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
|
|
header('Access-Control-Allow-Headers: Content-Type, Authorization');
|
|
|
|
|
|
if(isset($_GET['path'])){
|
|
if($_GET['path'] == 'master'){
|
|
self::master();
|
|
}
|
|
if($_GET['path'] == 'login'){
|
|
self::login();
|
|
}
|
|
if($_GET['path'] == 'anggota'){
|
|
self::anggota();
|
|
}
|
|
if($_GET['path'] == 'faktur_pinjaman'){
|
|
self::fakturPinajaman();
|
|
}
|
|
if($_GET['path'] == 'faktur_simpanan'){
|
|
self::fakturSimpanan();
|
|
}
|
|
|
|
if($_GET['path'] == 'faktur_angsuran'){
|
|
self::fakturAngsuran();
|
|
}
|
|
|
|
if($_GET['path'] == 'simpan_angsuran'){
|
|
self::simpan_angsuran();
|
|
}
|
|
|
|
if($_GET['path'] == 'simpan_pinjaman'){
|
|
self::simpanPinjaman();
|
|
}
|
|
|
|
if($_GET['path'] == 'simpan_simpanan'){
|
|
self::simpanSimpanan();
|
|
}
|
|
|
|
if($_GET['path'] == 'list_pinjaman'){
|
|
self::listPinjaman();
|
|
}
|
|
|
|
if($_GET['path'] == 'history'){
|
|
self::getHistoryTransaksi();
|
|
}
|
|
|
|
if($_GET['path'] == 'simpanan'){
|
|
self::getHistoryTransaksiSimpanan();
|
|
}
|
|
|
|
if($_GET['path'] == 'item-simpanan'){
|
|
self::itemSimpanan();
|
|
}
|
|
|
|
if($_GET['path'] == 'pinjaman'){
|
|
self::getHistoryTransaksiPinjaman();
|
|
}
|
|
|
|
if($_GET['path'] == 'item-pinjaman'){
|
|
self::itemPinjaman();
|
|
}
|
|
|
|
if($_GET['path'] == 'angsuran'){
|
|
self::getHistoryTransaksiAngsuran();
|
|
}
|
|
|
|
if($_GET['path'] == 'saldo'){
|
|
self::getTotalNominal();
|
|
}
|
|
}
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'message' => 'sorry no data request',
|
|
'path' => $_GET['path']
|
|
]);
|
|
}
|
|
|
|
public static function listPinjaman() {
|
|
$kodesp = $_GET['kodesp'];
|
|
$prefix = self::$prefix; // Prefix tabel
|
|
|
|
// Ambil bulan dan tahun saat ini
|
|
$currentMonth = date('m'); // Bulan sekarang (01-12)
|
|
$currentYear = date('Y'); // Tahun sekarang (YYYY)
|
|
|
|
$query = "
|
|
SELECT
|
|
p.faktur,
|
|
p.keterangan,
|
|
p.jumlah AS jumlah_pinjaman,
|
|
p.angsuran,
|
|
p.bunga,
|
|
IFNULL(SUM(CASE WHEN h.jenis_transaksi = 'pembayaran-pinjaman' THEN h.nominal ELSE 0 END), 0) AS total_pembayaran_pinjaman,
|
|
IFNULL(SUM(CASE WHEN h.jenis_transaksi = 'pembayaran-bunga' THEN h.nominal ELSE 0 END), 0) AS total_pembayaran_bunga,
|
|
(p.jumlah - IFNULL(SUM(CASE WHEN h.jenis_transaksi = 'pembayaran-pinjaman' THEN h.nominal ELSE 0 END), 0)) AS sisa_pinjaman,
|
|
COALESCE(MAX(h.created_at), '-') AS tgl_angsuran_terakhir,
|
|
COUNT(h.nominal) AS angsuran_ke,
|
|
p.tgl AS tgl_pinjaman,
|
|
CASE
|
|
WHEN MAX(h.created_at) IS NULL THEN DATE_ADD(p.tgl, INTERVAL 30 DAY) -- Jika tidak ada pembayaran sebelumnya, jatuh tempo pertama dari tgl pinjaman
|
|
ELSE DATE_ADD(DATE_ADD(MAX(h.created_at), INTERVAL 1 MONTH), INTERVAL 30 DAY) -- Jatuh tempo berikutnya dari tgl bayar terakhir + 1 bulan + 30 hari
|
|
END AS jatuh_tempo,
|
|
-- Menghitung masa angsuran
|
|
CASE
|
|
WHEN COUNT(h.nominal) = 0 THEN 0 -- Jika belum ada pembayaran, masa angsuran adalah 0
|
|
ELSE ROUND(COUNT(h.nominal) * p.angsuran / p.jumlah, 2) -- Masa angsuran dihitung dari jumlah angsuran yang sudah dibayar
|
|
END AS masa_angsuran,
|
|
-- Persentase bunga per tahun
|
|
p.bunga AS persentase_bunga_per_tahun
|
|
FROM mpinjam$prefix p
|
|
LEFT JOIN history_transaksi$prefix h
|
|
ON p.faktur = h.kode
|
|
WHERE p.kode = '$kodesp'
|
|
GROUP BY p.faktur, p.keterangan, p.jumlah, p.angsuran, p.bunga, p.tgl
|
|
";
|
|
|
|
$listPinjaman = DB::query_result_object($query);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"data" => $listPinjaman,
|
|
]);
|
|
die();
|
|
}
|
|
|
|
|
|
|
|
public static function fakturSimpanan(){
|
|
$kodesp = $_GET['kodesp'];
|
|
$code1 = date('y');
|
|
$prefix = self::$prefix;
|
|
$query = "SELECT concat('BKM/$kodesp/$code1/',lpad( ifnull(
|
|
(SELECT substring_index(MAX(RIGHT(faktur,5)), '$code1/',-1) FROM msimpan$prefix WHERE faktur LIKE 'BKM/$kodesp/$code1/%' ORDER BY faktur DESC LIMIT 1)
|
|
,0
|
|
) + 1,5,0)) faktur";
|
|
$faktur = DB::query_result_object_row($query);
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"data" => $faktur,
|
|
]);
|
|
die();
|
|
}
|
|
|
|
|
|
public static function fakturAngsuran() {
|
|
if (!isset($_GET['kodesp'])) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => "Parameter 'kodesp' is required."
|
|
]);
|
|
die();
|
|
}
|
|
|
|
$kodesp = $_GET['kodesp'];
|
|
$code1 = date('y'); // Tahun 2 digit
|
|
$prefix = self::$prefix; // Prefix tabel tanpa _jb
|
|
|
|
$query = "
|
|
SELECT CONCAT('BKM/', '$kodesp', '/', '$code1', '/',
|
|
LPAD(
|
|
IFNULL(
|
|
(
|
|
SELECT MAX(CAST(RIGHT(faktur, 6) AS UNSIGNED))
|
|
FROM mags$prefix
|
|
WHERE faktur LIKE 'BKM/$kodesp/$code1/%'
|
|
),
|
|
0) + 1, 6, '0'
|
|
)
|
|
) AS faktur
|
|
";
|
|
|
|
$faktur = DB::query_result_object_row($query);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"data" => $faktur,
|
|
]);
|
|
die();
|
|
}
|
|
|
|
|
|
public static function simpanSimpanan() {
|
|
$data = $_POST;
|
|
|
|
// Data untuk msimpan_jb
|
|
$simpananData = [[
|
|
"tgl" => $data["tgl"] ?? null,
|
|
"kode" => $data["kode"] ?? null,
|
|
"nama" => '', // Tidak tersedia di form, bisa diisi otomatis kalau ada relasi
|
|
"faktur" => $data["faktur"] ?? null,
|
|
"golkar" => $data["golgaji"] ?? null,
|
|
"kodesp" => $data["kodesp"] ?? null,
|
|
"dk" => 'D', // Default "D" untuk simpanan masuk
|
|
"jumlah" => $data["jumlah"] ?? 0,
|
|
"status" => $data["status"] ?? '1',
|
|
"keterangan" => $data["keterangan"] ?? '',
|
|
"username" => $data["username"] ?? null,
|
|
"userlog" => date('Y-m-d H:i:s'),
|
|
"prima" => 0,
|
|
"jam" => date('H:i:s'),
|
|
"kasir" => '', // Bisa isi dengan user login jika ada
|
|
"cash" => 'Y',
|
|
"posting" => 'N',
|
|
]];
|
|
|
|
// Data untuk history_transaksi_jb
|
|
$historyData = [[
|
|
"kode" => $data["faktur"] ?? null,
|
|
"jenis_transaksi" => "simpanan",
|
|
"keterangan" => "simpanan",
|
|
"username" => $data["username"] ?? null,
|
|
"nominal" => $data["jumlah"] ?? 0
|
|
]];
|
|
|
|
try {
|
|
// Insert ke msimpan_jb
|
|
$sqlMain = self::toInsert($simpananData, 'msimpan_jb');
|
|
DB::query($sqlMain);
|
|
|
|
// Insert ke history_transaksi_jb
|
|
$sqlHistory = self::toInsert($historyData, 'history_transaksi_jb');
|
|
DB::query($sqlHistory);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"message" => "Data simpanan dan histori berhasil disimpan."
|
|
]);
|
|
} catch (Error $e) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => $e->getMessage(),
|
|
"sql" => $sqlMain,
|
|
"sql2" => $sqlHistory
|
|
]);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
public static function simpan_angsuran() {
|
|
$data = $_POST;
|
|
|
|
// Data untuk mags_jb
|
|
$magsData = [[
|
|
"status" => $data["status"] ?? null,
|
|
"cash" => $data["cash"] ?? null,
|
|
"tgl" => $data["tgl"] ?? null,
|
|
"kode" => $data["kode"] ?? null,
|
|
"nomor" => $data["nomor"] ?? null,
|
|
"faktur" => $data["faktur"] ?? null,
|
|
"fkt" => $data["fkt"] ?? null,
|
|
"ke" => $data["ke"] ?? 0,
|
|
"lama" => $data["lama"] ?? 0,
|
|
"pokok" => $data["pokok"] ?? 0,
|
|
"bunga" => $data["bunga"] ?? 0,
|
|
"penalti" => 0, // Di sini penalty default diset ke 0, bisa disesuaikan
|
|
"discount" => $data["discount"] ?? 0,
|
|
"keterangan" => $data["keterangan"] ?? '',
|
|
"user" => $data["user"] ?? null,
|
|
"userlog" => date('Y-m-d H:i:s'),
|
|
"date" => date('Y-m-d'),
|
|
"time" => date('H:i:s'),
|
|
"bank" => $data["bank"] ?? null,
|
|
"jthtmp" => $data["tgljt"] ?? null,
|
|
"lunas" => 'N', // Anggap pinjaman belum lunas pada saat penyimpanan
|
|
"prima" => 0, // Prima jika diperlukan
|
|
"shu" => $data["shu"] ?? 0,
|
|
"nonshu" => $data["nonshu"] ?? 0,
|
|
"posting" => 'N', // Status posting default "N"
|
|
]];
|
|
|
|
// Data untuk history_transaksi_jb
|
|
$historyData = [];
|
|
$jenisTransaksi = [
|
|
"shu" => "pembayaran-pinjaman",
|
|
"nonshu" => "pembayaran-pinjamannon",
|
|
"bunga" => "pembayaran-bunga",
|
|
"discount" => "pembayaran-discount"
|
|
];
|
|
|
|
foreach ($jenisTransaksi as $key => $jenis) {
|
|
$amount = $data[$key] ?? 0;
|
|
if ($amount > 0) {
|
|
$historyData[] = [
|
|
"kode" => $data["faktur"] . '-' . ($key == 'bunga' ? 'bng' : ($key == 'discount' ? 'dic' : 'non')),
|
|
"jenis_transaksi" => $jenis,
|
|
"username" => $data["user"] ?? null,
|
|
"keterangan" => $data["keterangan"] ?? '',
|
|
"nominal" => $amount,
|
|
];
|
|
}
|
|
}
|
|
|
|
try {
|
|
// Insert ke mags_jb
|
|
$sqlMain = self::toInsert($magsData, 'mags_jb');
|
|
DB::query($sqlMain);
|
|
|
|
// Insert ke history_transaksi_jb
|
|
foreach ($historyData as $history) {
|
|
$sqlHistory = self::toInsert([$history], 'history_transaksi_jb');
|
|
DB::query($sqlHistory);
|
|
}
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"message" => "Data angsuran dan histori berhasil disimpan."
|
|
]);
|
|
} catch (Error $e) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
|
|
|
|
public static function simpanPinjaman() {
|
|
$data = $_POST;
|
|
|
|
// Data untuk tabel msimpan_jb
|
|
$mainData = [[
|
|
"jenis" => $data["jenis"] ?? null,
|
|
"dept" => $data["dept"] ?? null,
|
|
"tr" => $data["tr"] ?? null,
|
|
"faktur" => $data["faktur"] ?? null,
|
|
"fkt" => '',
|
|
"tglmohon" => $data["tglmohon"] ?? null,
|
|
"tgl" => $data["tgl"] ?? null,
|
|
"jthtmp" => 0,
|
|
"kode" => $data["kode"] ?? null,
|
|
"golkar" => $data["golgaji"] ?? null,
|
|
"sisagaji" => $data["gaji"] ?? 0,
|
|
"kodesp" => $data["kodesp"] ?? null,
|
|
"keterangan" => $data["keterangan"] ?? null,
|
|
"jumlah" => $data["jumlah"] ?? 0,
|
|
"bungath" => $data["bungath"] ?? 0,
|
|
"lama" => $data["lama"] ?? 0,
|
|
"angsuran" => $data["angsuran"] ?? 0,
|
|
"pokok" => $data["pokok"] ?? 0,
|
|
"bunga" => $data["bunga"] ?? 0,
|
|
"penalti" => 0,
|
|
"lpokok" => 0,
|
|
"lbunga" => 0,
|
|
"slpokok" => 0,
|
|
"slbunga" => 0,
|
|
"ke" => 0,
|
|
"ske" => 0,
|
|
"lunas" => 'N',
|
|
"status" => '1',
|
|
"oldtr" => null,
|
|
"user" => $data["user"] ?? null,
|
|
"userlog" => date('Y-m-d H:i:s'),
|
|
"date" => date('Y-m-d'),
|
|
"time" => date('H:i:s'),
|
|
"nomor" => 0,
|
|
"prima" => 0,
|
|
"bga" => 0,
|
|
"bgb" => 0,
|
|
"mka" => 0,
|
|
"mkb" => 0,
|
|
]];
|
|
|
|
// Data untuk tabel history_transaksi_jb
|
|
$historyData = [[
|
|
"kode" => $data["faktur"] ?? null,
|
|
"jenis_transaksi" => "pinjaman",
|
|
"keterangan" => "pengajuan pinjaman",
|
|
"username" => $data["user"] ?? null,
|
|
"nominal" => $data["jumlah"] ?? 0
|
|
]];
|
|
|
|
try {
|
|
// Generate dan eksekusi insert ke msimpan_jb
|
|
$sqlMain = self::toInsert($mainData, 'mpinjam_jb');
|
|
DB::query($sqlMain);
|
|
|
|
// Generate dan eksekusi insert ke history_transaksi_jb
|
|
$sqlHistory = self::toInsert($historyData, 'history_transaksi_jb');
|
|
DB::query($sqlHistory);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"message" => "Data pinjaman dan histori transaksi berhasil disimpan."
|
|
]);
|
|
} catch (Error $e) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
|
|
|
|
public static function fakturPinajaman(){
|
|
$kodesp = $_GET['kodesp'];
|
|
$code1 = date('y');
|
|
$prefix = self::$prefix;
|
|
$query = "SELECT concat('BKK/$kodesp/$code1/',lpad( ifnull(
|
|
(SELECT substring_index(faktur, '$code1/',-1) FROM mpinjam$prefix WHERE faktur LIKE 'BKK/$kodesp/$code1/%' ORDER BY faktur DESC LIMIT 1)
|
|
,0
|
|
) + 1,6,0)) faktur";
|
|
$faktur = DB::query_result_object_row($query);
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"data" => $faktur
|
|
]);
|
|
die();
|
|
}
|
|
|
|
public static function getHistoryTransaksi() {
|
|
$query = "
|
|
SELECT
|
|
SUBSTRING_INDEX(h.kode,'-',1) kode,
|
|
h.jenis_transaksi,
|
|
h.keterangan,
|
|
h.nominal,
|
|
h.created_at,
|
|
a.nama
|
|
FROM
|
|
history_transaksi_jb h
|
|
LEFT JOIN msimpan_jb m ON h.kode = m.faktur
|
|
LEFT JOIN mpinjam_jb p ON h.kode = p.faktur
|
|
LEFT JOIN mags_jb ags ON SUBSTRING_INDEX(h.kode,'-',1) = ags.faktur
|
|
LEFT JOIN anggota a ON (m.kode = a.kode OR p.kode = a.kode OR ags.kode = a.kode)
|
|
ORDER BY
|
|
h.created_at DESC
|
|
";
|
|
|
|
try {
|
|
$result = DB::query_result_object($query);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"data" => $result
|
|
]);
|
|
} catch (Error $e) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
public static function getHistoryTransaksiSimpanan() {
|
|
$query = "
|
|
SELECT
|
|
SUBSTRING_INDEX(h.kode,'-',1) kode,
|
|
h.jenis_transaksi,
|
|
h.keterangan,
|
|
h.nominal,
|
|
h.created_at,
|
|
a.nama
|
|
FROM
|
|
history_transaksi_jb h
|
|
LEFT JOIN msimpan_jb m ON h.kode = m.faktur
|
|
LEFT JOIN mpinjam_jb p ON h.kode = p.faktur
|
|
LEFT JOIN mags_jb ags ON SUBSTRING_INDEX(h.kode,'-',1) = ags.faktur
|
|
LEFT JOIN anggota a ON (m.kode = a.kode OR p.kode = a.kode OR ags.kode = a.kode)
|
|
WHERE h.jenis_transaksi = 'simpanan'
|
|
ORDER BY
|
|
h.created_at DESC
|
|
";
|
|
|
|
$querysum = "SELECT ifnull( ( SELECT sum(nominal) FROM history_transaksi_jb WHERE jenis_transaksi = 'simpanan'),0) total";
|
|
|
|
try {
|
|
$result = DB::query_result_object($query);
|
|
$total = DB::query_result_object_row($querysum);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"data" => $result,
|
|
"total" => $total->total
|
|
]);
|
|
} catch (Error $e) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
public static function getHistoryTransaksiPinjaman() {
|
|
$query = "
|
|
SELECT
|
|
SUBSTRING_INDEX(h.kode,'-',1) kode,
|
|
h.jenis_transaksi,
|
|
h.keterangan,
|
|
h.nominal,
|
|
h.created_at,
|
|
a.nama
|
|
FROM
|
|
history_transaksi_jb h
|
|
LEFT JOIN msimpan_jb m ON h.kode = m.faktur
|
|
LEFT JOIN mpinjam_jb p ON h.kode = p.faktur
|
|
LEFT JOIN mags_jb ags ON SUBSTRING_INDEX(h.kode,'-',1) = ags.faktur
|
|
LEFT JOIN anggota a ON (m.kode = a.kode OR p.kode = a.kode OR ags.kode = a.kode)
|
|
WHERE h.jenis_transaksi = 'pinjaman'
|
|
ORDER BY
|
|
h.created_at DESC
|
|
";
|
|
|
|
$querysum = "SELECT ifnull( ( SELECT sum(nominal) FROM history_transaksi_jb WHERE jenis_transaksi = 'pinjaman'),0) total";
|
|
|
|
try {
|
|
$result = DB::query_result_object($query);
|
|
$total = DB::query_result_object_row($querysum);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"data" => $result,
|
|
"total" => $total->total
|
|
]);
|
|
} catch (Error $e) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
public static function getHistoryTransaksiAngsuran() {
|
|
$query = "
|
|
SELECT
|
|
SUBSTRING_INDEX(h.kode,'-',1) kode,
|
|
h.jenis_transaksi,
|
|
h.keterangan,
|
|
h.nominal,
|
|
h.created_at,
|
|
a.nama
|
|
FROM
|
|
history_transaksi_jb h
|
|
LEFT JOIN msimpan_jb m ON h.kode = m.faktur
|
|
LEFT JOIN mpinjam_jb p ON h.kode = p.faktur
|
|
LEFT JOIN mags_jb ags ON SUBSTRING_INDEX(h.kode,'-',1) = ags.faktur
|
|
LEFT JOIN anggota a ON (m.kode = a.kode OR p.kode = a.kode OR ags.kode = a.kode)
|
|
WHERE h.jenis_transaksi LIKE 'pembayaran%'
|
|
ORDER BY
|
|
h.created_at DESC
|
|
";
|
|
|
|
$querysum = "SELECT ifnull( ( SELECT sum(nominal) FROM history_transaksi_jb WHERE jenis_transaksi like 'pembayaran%'),0) total";
|
|
|
|
try {
|
|
$result = DB::query_result_object($query);
|
|
$total = DB::query_result_object_row($querysum);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"data" => $result,
|
|
"total" => $total->total
|
|
]);
|
|
} catch (Error $e) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
public static function login()
|
|
{
|
|
$data = $_POST;
|
|
$password = md5($data['password']);
|
|
$username = md5($data['username']);
|
|
$data = DB::query_result_object("SELECT * FROM juru_bayar WHERE md5(username) = '$username' AND md5(password) = '$password'");
|
|
if(count($data) > 0){
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"message" => "login success",
|
|
"data" => $data
|
|
]);
|
|
die();
|
|
}
|
|
echo json_encode([
|
|
"status" => "failed",
|
|
"message" => "login gagal, username atau password salah",
|
|
"data" => []
|
|
]);
|
|
die();
|
|
}
|
|
|
|
public static function anggota(){
|
|
$jurubayar = $_GET['jurubayar'];
|
|
$anggota = DB::query_result_object("SELECT * FROM anggota" . (!empty($jurubayar) ? " WHERE jurubayar = '$jurubayar'" : ""));
|
|
echo json_encode([
|
|
"data" => $anggota,
|
|
"status" => "success",
|
|
]);
|
|
die();
|
|
}
|
|
|
|
public static function master(){
|
|
$data = DB::query_result_object("SELECT * FROM mjurubayar");
|
|
$anggota = DB::query_result_object("SELECT * FROM anggota");
|
|
echo json_encode([
|
|
"lokasi_juru_bayar" => $data,
|
|
"anggota" => $anggota,
|
|
"status" => "success"
|
|
]);
|
|
die();
|
|
}
|
|
|
|
public static function getTotalNominal() {
|
|
$query = "
|
|
SELECT
|
|
SUM(CASE
|
|
WHEN h.jenis_transaksi = 'pinjaman' THEN -h.nominal
|
|
ELSE h.nominal
|
|
END) AS total_nominal
|
|
FROM
|
|
history_transaksi_jb h
|
|
";
|
|
|
|
try {
|
|
$result = DB::query_result_object_row($query);
|
|
|
|
echo json_encode([
|
|
"status" => "success",
|
|
"total_nominal" => $result->total_nominal
|
|
]);
|
|
} catch (Error $e) {
|
|
echo json_encode([
|
|
"status" => "error",
|
|
"message" => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
private static function itemPinjaman(){
|
|
$faktur = $_GET['faktur'];
|
|
$data = DB::query_result_object("SELECT * FROM mpinjam_jb WHERE faktur = '$faktur'");
|
|
echo json_encode([
|
|
"data" => $data,
|
|
"status" => "success"
|
|
]);
|
|
die();
|
|
}
|
|
|
|
private static function itemSimpanan(){
|
|
$faktur = $_GET['faktur'];
|
|
$data = DB::query_result_object("SELECT * FROM msimpan_jb WHERE faktur = '$faktur'");
|
|
echo json_encode([
|
|
"data" => $data,
|
|
"status" => "success"
|
|
]);
|
|
die();
|
|
}
|
|
|
|
private static function toInsert($data, $table = 'test', $wht = []) {
|
|
// Validasi data
|
|
if (!is_array($data) || count($data) === 0) {
|
|
throw new Error("Data harus berupa array dan tidak boleh kosong.");
|
|
}
|
|
|
|
// Validasi nama tabel
|
|
if (!is_string($table) || trim($table) === '') {
|
|
throw new Error("Nama tabel harus berupa string dan tidak boleh kosong.");
|
|
}
|
|
|
|
// Validasi where clause
|
|
if (!is_array($wht)) {
|
|
throw new Error("Where clause harus berupa array.");
|
|
}
|
|
|
|
// Ambil keys dari data pertama
|
|
$keys = array_keys($data[0]);
|
|
if (count($keys) === 0) {
|
|
throw new Error("Data harus memiliki setidaknya satu kolom.");
|
|
}
|
|
|
|
// Mulai membangun query
|
|
$query = 'INSERT INTO ' . $table . ' (';
|
|
$query .= implode(', ', array_map(function($key) {
|
|
return '`' . $key . '`';
|
|
}, $keys));
|
|
$query .= ') ';
|
|
$query .= 'SELECT ';
|
|
$query .= implode(', ', array_map(function($key) {
|
|
return 'a.' . $key;
|
|
}, $keys));
|
|
$query .= ' FROM (';
|
|
|
|
// Bangun subquery untuk setiap baris data
|
|
$subqueries = array_map(function($row) use ($keys) {
|
|
$values = array_map(function($key) use ($row) {
|
|
if (isset($row[$key]) && $row[$key] !== null) {
|
|
return '"' . str_replace('"', '\"', $row[$key]) . '" AS `' . $key . '`';
|
|
} else {
|
|
return 'NULL AS `' . $key . '`';
|
|
}
|
|
}, $keys);
|
|
return 'SELECT ' . implode(', ', $values);
|
|
}, $data);
|
|
|
|
$query .= implode(' UNION ALL ', $subqueries);
|
|
$query .= ') a';
|
|
|
|
// Tambahkan where clause jika ada
|
|
if (count($wht) > 0) {
|
|
$query .= ' LEFT JOIN ' . $table . ' ON ';
|
|
$query .= implode(' AND ', array_map(function($whtx) use ($table) {
|
|
return $table . '.' . $whtx . ' = a.' . $whtx;
|
|
}, $wht));
|
|
$query .= ' WHERE ';
|
|
$query .= implode(' AND ', array_map(function($whtx) use ($table) {
|
|
return $table . '.' . $whtx . ' IS NULL';
|
|
}, $wht));
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
}
|