⚝
One Hat Cyber Team
⚝
Your IP:
192.168.31.6
Server IP:
192.168.1.11
Server:
Linux pams 6.1.0-29-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.123-1 (2025-01-02) x86_64
PHP Version:
8.2.28
Buat File
|
Buat Folder
Upload File
Eksekusi
Dir :
~
/
var
/
www
/
apik
/
modules
/
Api
/
Controllers
/
Edit File: KeuanganController.php
<?php namespace Modules\Api\Controllers; use CodeIgniter\RESTful\ResourceController; class KeuanganController extends ResourceController { protected $format = 'json'; public function getSyncMeta(){ $db = \Config\Database::connect(); // 1. Hitung total baris keseluruhan $builder = $db->table('transaksi t') ->select('t.id, t.id_mhs, t.id_pembayaran, p.nama, t.smt, t.jumlah, t.tgl, t.batch_id, t.status, mhs.jurusan') ->join('pembayaran p', 't.id_pembayaran = p.id_pembayaran') ->join('mhs','t.id_mhs = mhs.id') ->orderBy('t.tgl', 'DESC') ->orderBy('t.id', 'ASC'); $totalRows = $builder->countAllResults(); $limitPerPage = 200; // Sesuai data terbaru Anda, kita pakai 200 $totalHits = ceil($totalRows / $limitPerPage); // 2. Generate koordinat limit dan offset untuk Client $listHits = []; for ($i = 1; $i <= $totalHits; $i++) { // Rumus offset: (Halaman Ke-n - 1) * Limit $offset = ($i - 1) * $limitPerPage; $listHits[] = [ 'hit_ke' => $i, 'limit' => $limitPerPage, 'offset' => $offset ]; } // 3. Kembalikan response terstruktur return $this->respond([ 'status' => true, 'meta' => [ 'total_records' => $totalRows, 'limit_per_hit' => $limitPerPage, 'total_hits_req' => (int) $totalHits, ], 'data' => $listHits // Ini yang akan di-looping oleh client ], 200); } public function getSyncData(){ $db = \Config\Database::connect(); $p = $this->request->getJSON(true) ?? $this->request->getVar(); // 1. VALIDASI PARAMETER WAJIB (Pengecekan Ketat) // Menggunakan isset() atau array_key_exists karena nilai offset bisa berupa angka 0 (empty mendeteksi 0 sebagai kosong) $requiredFields = ['limit', 'offset']; foreach ($requiredFields as $field) { if (!isset($p[$field]) || $p[$field] === '') { return $this->respond([ 'status' => false, 'message' => "Parameter '{$field}' wajib diisi untuk koordinat data." ], 400); } } // Konversi paksa ke integer setelah divalidasi aman $limit = (int)$p['limit']; $offset = (int)$p['offset']; // 2. Tarik data dari tabel transaksi menggunakan Limit dan Offset // Sesuai dengan struktur tabel PostgreSQL yang Anda bagikan di awal $builder = $db->table('transaksi t') ->select('t.id, t.id_mhs, t.id_pembayaran, p.nama, t.smt, t.jumlah, t.tgl, t.batch_id, t.status, mhs.jurusan') ->join('pembayaran p', 't.id_pembayaran = p.id_pembayaran') ->join('mhs','t.id_mhs = mhs.id') ->limit($limit, $offset) ->orderBy('t.tgl', 'DESC') ->orderBy('t.id', 'ASC'); $d = $builder->get()->getResult(); $i=0; $data = []; foreach ($d as $k) { $data[$i]['id'] = $k->id; $data[$i]['id_mhs'] = $k->id_mhs; $data[$i]['id_pembayaran'] = base64_encode($k->nama); $data[$i]['smt'] = $k->smt; $data[$i]['jumlah'] = $k->jumlah; $data[$i]['tgl'] = $k->tgl; $data[$i]['batch_id'] = $k->batch_id; $data[$i]['status'] = $k->status; $data[$i]['jurusan'] = $k->jurusan; $i++; } // 3. Kembalikan data ke client return $this->respond([ 'status' => true, 'hit_limit' => $limit, 'hit_offset' => $offset, 'count' => count($data), 'data' => $data ], 200); } public function getTrMhs() { $db = \Config\Database::connect(); $p = $this->request->getJSON(true) ?? $this->request->getVar(); $requiredFields = ['id_mhs']; foreach ($requiredFields as $field) { if (!isset($p[$field]) || $p[$field] === '') { return $this->respond([ 'status' => false, 'message' => "Parameter '{$field}' wajib diisi untuk koordinat data." ], 400); } } // 1. Hitung total baris keseluruhan $tr = $db->table('transaksi t') ->select('t.tgl, SUM(t.jumlah) AS jumlah, t.batch_id, t.status') ->where('t.id_mhs', $p['id_mhs']) ->groupBy(['t.batch_id', 't.tgl', 't.status']) ->orderBy('t.tgl', 'DESC')->get()->getResult(); return $this->respond([ 'status' => true, 'data' => $tr // Ini yang akan di-looping oleh client ], 200); } public function geDetailtTrMhs() { $db = \Config\Database::connect(); $p = $this->request->getJSON(true) ?? $this->request->getVar(); $requiredFields = ['batch_id']; foreach ($requiredFields as $field) { if (!isset($p[$field]) || $p[$field] === '') { return $this->respond([ 'status' => false, 'message' => "Parameter '{$field}' wajib diisi untuk koordinat data." ], 400); } } // 1. Hitung total baris keseluruhan $tr = $db->table('transaksi t') ->select('t.*, p.nama') ->join('pembayaran p', 't.id_pembayaran = p.id_pembayaran') ->where('t.batch_id', $p['batch_id']) ->orderBy('t.tgl', 'DESC')->get()->getResult(); return $this->respond([ 'status' => true, 'data' => $tr // Ini yang akan di-looping oleh client ], 200); } public function authTrSmtMhs(){ $db = \Config\Database::connect(); $p = $this->request->getJSON(true) ?? $this->request->getVar(); $requiredFields = ['nama_pembayaran', 'id_mhs', 'smt', 'jurusan']; foreach ($requiredFields as $field) { if (!isset($p[$field]) || $p[$field] === '') { return $this->respond([ 'status' => false, 'message' => "Parameter '{$field}' wajib diisi untuk koordinat data." ], 400); } } // 1. Hitung total baris keseluruhan $tr = $db->table('transaksi t') ->select('SUM(t.jumlah) as jumlah, t.id_pembayaran') ->join('pembayaran p', 't.id_pembayaran = p.id_pembayaran') ->where('t.smt', $p['smt']) ->where('t.id_mhs', $p['id_mhs']) ->groupBy('t.id_pembayaran'); $tr->groupStart() ->like('p.nama', $p['nama_pembayaran']) ->groupEnd(); $dt = $tr->get()->getRow(); $auth = $db->table('auth_mhs') ->where('id_pembayaran', $dt->id_pembayaran) ->where('jurusan', $p['jurusan']) ->get()->getRow(); $jml_auth = $auth->jumlah ?? 0; $status = false; if($dt->jumlah >= $jml_auth){ $status = true; } return $this->respond([ 'status' => true, 'isValid' => $status, 'data' => $dt // Ini yang akan di-looping oleh client ], 200); } public function authTrMhs(){ $db = \Config\Database::connect(); $p = $this->request->getJSON(true) ?? $this->request->getVar(); $requiredFields = ['nama_pembayaran', 'id_mhs', 'jurusan']; foreach ($requiredFields as $field) { if (!isset($p[$field]) || $p[$field] === '') { return $this->respond([ 'status' => false, 'message' => "Parameter '{$field}' wajib diisi untuk koordinat data." ], 400); } } // 1. Hitung total baris keseluruhan $tr = $db->table('transaksi t') ->select('SUM(t.jumlah) as jumlah, t.id_pembayaran') ->join('pembayaran p', 't.id_pembayaran = p.id_pembayaran') ->where('t.id_mhs', $p['id_mhs']) ->groupBy('t.id_pembayaran'); $tr->groupStart() ->like('p.nama', $p['nama_pembayaran']) ->groupEnd(); $dt = $tr->get()->getRow(); $status = false; if(empty($dt)){ return $this->respond([ 'status' => true, 'isValid' => $status, 'data' => [ "jumlah" => 0, "id_pembayaran" => "" ] // Ini yang akan di-looping oleh client ], 200); } $auth = $db->table('auth_mhs') ->where('id_pembayaran', $dt->id_pembayaran) ->where('jurusan', $p['jurusan']) ->get()->getRow(); $jml_auth = $auth->jumlah ?? 0; if($dt->jumlah >= $jml_auth){ $status = true; } return $this->respond([ 'status' => true, 'isValid' => $status, 'data' => $dt // Ini yang akan di-looping oleh client ], 200); } }
Simpan