⚝
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
/
Transaksi
/
Controllers
/
Edit File: Transaksi.php
<?php namespace Modules\Transaksi\Controllers; use App\Controllers\BaseController; use Ramsey\Uuid\Uuid; class Transaksi extends BaseController { public function index() { $data['title'] = 'Transaksi'; $data['li_1'] = 'Daftar Transaksi'; $data['body'] = 'Modules\Transaksi\Views\list.php'; $data['pembayaran'] = $this->db->table('pembayaran')->get()->getResult(); $data['table'] = $this->db->table('pengeluaran')->get()->getResult(); $data['kelompok'] = $this->db->table('kelompok') ->select('id_kelompok, nama') ->groupBy('nama') ->groupBy('id_kelompok') ->get()->getResult(); return view('template', $data); } public function sync(){ $data['title'] = 'Transaksi'; $data['li_1'] = 'Daftar Transaksi'; $data['body'] = 'Modules\Transaksi\Views\sync.php'; $url = link_api().'/api/chunkTable'; $data_api = ['table' => 'transaksi', 'limit' => 500, 'order' => 'tgl']; $data['tr'] = json_decode(api_siak($url, $data_api), true); return view('template', $data); echo '<pre>'; print_r($data['tr']); echo '</pre>'; } public function prosesSync(){ $p = $this->request->getPost(); $url = link_api().'/api/syncTr'; $data = ['start' => $p['start'], 'end' => $p['end'], 'order' => $p['order']]; $tr = json_decode(api_siak($url, $data), true); $pmb = $this->db->table('pembayaran')->get()->getResult(); foreach ($pmb as $k) { $id_p[base64_encode($k->nama)] = $k->id_pembayaran; } $all_ids = array_column($tr['data'], 'id_transaksi'); $existing_records = $this->db->table('transaksi') ->whereIn('id', $all_ids) ->select('id') ->get()->getResultArray(); $existing_ids = array_column($existing_records, 'id'); $input = []; $update = []; foreach ($tr['data'] as $k) { $id_pembayaran = $id_p[base64_encode($k['nama'])] ?? "-"; $insertDt =[ 'id' => $k['id_transaksi'], 'batch_id' => $k['batch_id'], 'tgl' => $k['tgl'], 'status' => $k['status'], 'id_pembayaran' => $id_pembayaran, 'id_mhs' => $k['id_mhs'], 'jumlah' => $k['jumlah'], 'smt' => $k['smt'], 'id_idn' => 'API' ]; if (in_array($k['id_transaksi'], $existing_ids)) { $update[] = $insertDt; } else { $input[] = $insertDt; } }; if(count($input) > 0){ $this->db->table('transaksi')->insertBatch($input); } if(count($update) > 0){ $this->db->table('transaksi')->updateBatch($update, 'id'); } return $this->response->setJSON([ 'status' => 'success', 'data' => $all_ids, 'count' => ['input' => count($input), 'update' => count($update)] ]); } public function getBku(){ $p = $this->request->getPost(); $m = $p['mulai']; $s = $p['selesai']; $j = $this->request->getPost('id_p'); $prodi = $this->request->getPost('prodi'); $kelompok = $this->request->getPost('kelompok'); $beasiswa = $this->db->table('beasiswa')->select('id, nama')->get()->getResult(); foreach ($beasiswa as $k) { $id_beasiswa[$k->id]=$k->nama; } // 1. Ambil data DEBIT (Gunakan kutip tunggal untuk nilai 'debit') $debitQuery = $this->db->table('transaksi t') ->select("t.tgl, t.jumlah, m.nama as nm_mhs, p.nama as nm, m.nim, 'debit' as tipe, t.sumber_dana") // Pakai 'debit' ->join('pembayaran p', 't.id_pembayaran = p.id_pembayaran') ->join('mhs m', 't.id_mhs = m.id') ->where("t.status ='1'") ->where('t.tgl >=', $m.' 00:00:00') ->where('t.tgl <=', $s.' 23:59:59'); // 2. Ambil data KREDIT (Gunakan kutip tunggal untuk nilai 'kredit') $kreditQuery = $this->db->table('pengeluaran t') ->select("t.tanggal as tgl, t.jumlah, t.nama as nm_mhs, p.nama as nm, '-' as nim, 'kredit' as tipe, '-' as sumber_dana") // Pakai 'kredit' dan '-' ->join('pembayaran p', 't.id_pembayaran = p.id_pembayaran') ->where('tanggal >=', $m.' 00:00:00') ->where('tanggal <=', $s.' 23:59:59'); // Filter dinamis id_pembayaran if($j && is_array($j)){ $debitQuery->whereIn('t.id_pembayaran', $j); $kreditQuery->whereIn('t.id_pembayaran', $j); } if($prodi && is_array($prodi)){ $debitQuery->whereIn('m.jurusan', $prodi); $kreditQuery->whereIn('t.jurusan', $prodi); } if($kelompok && is_array($kelompok)){ $idMhsKelompok = []; $dtKelompok = $this->db->table('kelompok') ->select('id_mhs') ->whereIn('id_kelompok', $kelompok) ->get()->getResultArray(); $idMhsKelompok = array_column($dtKelompok, 'id_mhs'); $debitQuery->whereIn('m.id', $idMhsKelompok); } // Eksekusi dan ambil sebagai Array $res_debit = $debitQuery->get()->getResultArray(); $rawSql = (string)$this->db->getLastQuery(); $res_kredit = $kreditQuery->get()->getResultArray(); $monitor = $this->db->getLastQuery(); // 3. Gabungkan Array $dt_bku = array_merge($res_debit, $res_kredit); // 4. Urutkan berdasarkan tanggal (tgl) secara Ascending (Lama ke Baru) // Gunakan strtotime untuk membandingkan string tanggal usort($dt_bku, function($a, $b) { return strtotime($a['tgl']) - strtotime($b['tgl']); }); $t = ''; $tableRekap = ''; $no =1 ; $saldo = 0; $hitung_kredit = 0; $hitung_debit = 0; $rekapPengeluaran = []; $groupPemasukan = []; $groupPemasukanBeasiswa = []; foreach ($dt_bku as $k) { if($k['tipe'] == 'debit'){ $saldo = $saldo + $k['jumlah']; $nama = 'Pemasukan '.$k['nm'].' '.$k['nm_mhs'].' ('.$k['nim'].')'; $debit = number_format($k['jumlah']); $kredit = ''; $hitung_debit = $hitung_debit + $k['jumlah']; $groupTgl = date("Y-m-d", strtotime($k['tgl'])); if($k['sumber_dana'] == ''){ $groupPemasukan[$groupTgl][base64_encode($k['nm'])][] = $k['jumlah']; }else{ $groupPemasukanBeasiswa[$groupTgl][$k['sumber_dana']][base64_encode($k['nm'])][] = $k['jumlah']; } }else{ $hitung_kredit = $hitung_kredit + $k['jumlah']; $saldo = $saldo - $k['jumlah']; $nama = 'Pembayaran '.$k['nm_mhs']; $debit = ''; $kredit = number_format($k['jumlah']); $rekapPengeluaran[] = [ 'tanggal' => date("Y-m-d", strtotime($k['tgl'])), 'uraian' => $k['nm_mhs'], 'jumlah' => $k['jumlah'], 'type' => 'kredit', 'sumber_dana' => '' ]; } $tgl = $k['tgl']; $t .= '<tr> <td>'.$no++.'</td> <td>'.tgl_indo($tgl).'</td> <td>'.$nama.'</td> <td align="right">'.$debit.'</td> <td align="right">'.$kredit.'</td> <td align="right">'.number_format($saldo).'</td> </tr>'; } $t .= '<tr style="font-weight:bold"> <td></td> <td align="center">Total</td> <td></td> <td align="right">'.number_format($hitung_debit).'</td> <td align="right">'.number_format($hitung_kredit).'</td> <td align="right">'.number_format($saldo).'</td> </tr>'; $rekapPemasukan = []; foreach ($groupPemasukan as $tanggal => $kodes) { foreach ($kodes as $kode => $nominalArray) { $rekapPemasukan[] = [ 'tanggal' => $tanggal, 'uraian' => base64_decode($kode), 'jumlah' => array_sum($nominalArray), 'type' => 'debit', 'sumber_dana' => 'Mahasiswa' ]; } } foreach ($groupPemasukanBeasiswa as $tanggal => $id_pembayaranBeasiswa) { foreach ($id_pembayaranBeasiswa as $id => $namas) { foreach ($namas as $nama => $nominal) { $rekapPemasukan[] = [ 'tanggal' => $tanggal, 'uraian' => base64_decode($nama), 'jumlah' => array_sum($nominal), 'type' => 'debit', 'sumber_dana' => 'Beasiswa '.$id_beasiswa[$id] ]; } } } $dt_rekap = array_merge($rekapPemasukan, $rekapPengeluaran); // 4. Urutkan berdasarkan tanggal (tgl) secara Ascending (Lama ke Baru) // Gunakan strtotime untuk membandingkan string tanggal usort($dt_rekap, function($a, $b) { return strtotime($a['tanggal']) - strtotime($b['tanggal']); }); $noRekap = 1; $saldoRekap = 0; foreach ($dt_rekap as $key) { if($key['type'] == 'debit'){ $saldoRekap = $saldoRekap + $key['jumlah']; $key['uraian'] = 'Diterima Pembayaran '.$key['uraian'].' Dari '.$key['sumber_dana']; $tableRekap .= ' <tr> <td>'.$noRekap++.'</td> <td>'.$key['tanggal'].'</td> <td>'.$key['uraian'].'</td> <td align="right">'.number_format($key['jumlah']).'</td> <td>-</td> <td align="right">'.number_format($saldoRekap).'</td> </tr>'; $rekapDebit[] = $key['jumlah']; }else{ $saldoRekap = $saldoRekap - $key['jumlah']; $tableRekap .= ' <tr> <td>'.$noRekap++.'</td> <td>'.$key['tanggal'].'</td> <td>'.$key['uraian'].'</td> <td>-</td> <td align="right">'.number_format($key['jumlah']).'</td> <td align="right">'.number_format($saldoRekap).'</td> </tr>'; $rekapKredit[] = $key['jumlah']; } } $rekapKredit[] = 0; $rekapDebit[] = 0; $tableRekap .= ' <tr> <td></td> <td></td> <td>Total</td> <td align="right">'.number_format(array_sum($rekapDebit)).'</td> <td align="right">'.number_format(array_sum($rekapKredit)).'</td> <td align="right">'.number_format($saldoRekap).'</td> </tr> '; // 5. Kembalikan JSON return $this->response->setJSON([ 'status' => 'success', 'data' => $t, 'debit' => number_format($hitung_debit), 'kredit' => number_format($hitung_kredit), 'saldo' => number_format($saldo), 'count' => count($dt_bku), 'rekap' => $tableRekap, 'cek' => $groupPemasukanBeasiswa ]); } public function delete($id = null){ if($this->db->table('pengeluaran')->where('id', enc($id))->delete()){ session()->setFlashData(success('Berhasil Mengapus Data')); return redirect()->to(base_url('pengeluaran')); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect()->to(base_url('pengeluaran')); } } public function get($id = null){ $d = $this->db->table('pengeluaran')->where('id', enc($id))->get()->getRow(); return json_encode($d); } public function edit(){ $p = $this->request->getPost(); $rules = [ 'nama' => [ 'label' => 'Nama Transaksi', // Mengizinkan Huruf (A-z), Spasi, Titik (.), dan Koma (,) 'rules' => 'required|regex_match[/^[a-zA-Z\s.,]*$/]|min_length[3]|max_length[255]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', 'max_length' => '{field} maksimal {param} karakter.', ], ], 'tgl' => [ 'label' => 'Format tanggal tidak sesuai', // Label untuk pesan error 'rules' => 'required|valid_date[Y-m-d H:i:s]', 'errors' => [ 'valid_date' => '{field} harus dalam format database yang benar.', 'required' => '{field} wajib diisi.', ], ], 'sumber_dana' => [ 'label' => 'Sumber Dana', // Label untuk pesan error 'rules' => 'required', 'errors' => [ 'required' => '{field} wajib diisi.', ], ], 'jumlah' => [ 'label' => 'Jumlah Transaksi', // Label untuk pesan error 'rules' => 'required|numeric', 'errors' => [ 'required' => '{field} wajib diisi.', 'numeric' => '{field} Hanya boleh berisi angka' ], ], ]; if (! $this->validateData($p,$rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->to(base_url('pengeluaran')); } $d = [ 'id_pembayaran' => $p['sumber_dana'], 'nama' => $p['nama'], 'tanggal' => $p['tgl'], 'jumlah' => $p['jumlah'], ]; if($this->db->table('pengeluaran')->where('id', enc($p['data_id']))->update($d)){ session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect()->to(base_url('pengeluaran')); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect()->to(base_url('pengeluaran')); } } }
Simpan