load->model('DynamicModel', 'dm'); if (!$this->session->userdata('logged_in')) { redirect('auth'); } } // ================= INDEX public function index() { if($this->session->userdata('role') != 'Admin'){ show_error('Akses ditolak', 403); } $data = [ "active_menu" => "basejurnal" ]; $this->load->view('partials/header', $data); $this->load->view('basejurnal/layout', $data); $this->load->view('partials/footer'); } // ================= DATATABLE public function get_data() { $this->dm->setTable('base_journal') ->setColumn( [null,'kode','nama','deskripsi','is_active',null], ['kode','nama'], ['id'=>'DESC'] ); $list = $this->dm->get_datatables(); $data = []; $no = $_POST['start']; foreach ($list as $row) { $no++; $status = $row->is_active ? 'Aktif' : 'Nonaktif'; $data[] = [ $no, $row->kode, $row->nama, $row->deskripsi, $status, ' ' ]; } echo json_encode([ "draw" => $_POST['draw'], "recordsTotal" => $this->dm->count_all(), "recordsFiltered" => $this->dm->count_filtered(), "data" => $data ]); } public function save() { $this->db->trans_start(); $kode = trim($this->input->post('kode')); $nama = trim($this->input->post('nama')); if(empty($kode) || empty($nama)){ echo json_encode([ 'status' => false, 'message' => 'Kode & Nama wajib diisi' ]); return; } $header = [ 'kode' => $kode, 'nama' => $nama, 'deskripsi' => $this->input->post('deskripsi'), 'is_active' => 1 ]; $this->dm->setTable('base_journal')->insert($header); $base_id = $this->db->insert_id(); $accounts = $this->input->post('account_id'); $posisi = $this->input->post('posisi'); if(!empty($accounts)){ $detail = []; foreach ($accounts as $i => $acc) { if(empty($acc)) continue; $detail[] = [ 'base_journal_id' => $base_id, 'account_id' => $acc, 'posisi' => $posisi[$i] ?? 'debit', 'urutan' => $i + 1 ]; } if(!empty($detail)){ $this->db->insert_batch('base_journal_detail', $detail); } } $this->db->trans_complete(); if (!$this->db->trans_status()) { echo json_encode([ 'status' => false, 'message' => 'Gagal simpan data' ]); return; } log_activity( 'base_journal', 'create', 'Membuat base journal kode: '.$kode, 'success' ); echo json_encode([ 'status' => true, 'message' => 'Data berhasil disimpan' ]); } public function update() { $id = $this->input->post('id'); if(empty($id)){ echo json_encode([ 'status' => false, 'message' => 'ID tidak valid' ]); return; } $this->db->trans_start(); $header = [ 'kode' => trim($this->input->post('kode')), 'nama' => trim($this->input->post('nama')), 'deskripsi' => $this->input->post('deskripsi'), ]; $this->dm->setTable('base_journal')->update($id, $header); // 🔥 DELETE OLD DETAIL $this->db->where('base_journal_id', $id)->delete('base_journal_detail'); // 🔥 INSERT NEW DETAIL $accounts = $this->input->post('account_id'); $posisi = $this->input->post('posisi'); if(!empty($accounts)){ $detail = []; foreach ($accounts as $i => $acc) { if(empty($acc)) continue; $detail[] = [ 'base_journal_id' => $id, 'account_id' => $acc, 'posisi' => $posisi[$i] ?? 'debit', 'urutan' => $i + 1 ]; } if(!empty($detail)){ $this->db->insert_batch('base_journal_detail', $detail); } } $this->db->trans_complete(); if (!$this->db->trans_status()) { echo json_encode([ 'status' => false, 'message' => 'Gagal update data' ]); return; } log_activity( 'base_journal', 'update', 'Mengubah base journal ID: '.$id.' (kode: '.$header['kode'].')', 'success' ); echo json_encode([ 'status' => true, 'message' => 'Data berhasil diupdate' ]); } // ================= DETAIL public function detail($id) { $header = $this->dm->setTable('base_journal')->find($id); $detail = $this->db ->select('d.*, a.nama_akun as account_name') ->from('base_journal_detail d') ->join('accounts a','a.id = d.account_id','left') // <-- GANTI DI SINI ->where('d.base_journal_id',$id) ->order_by('d.urutan','ASC') ->get() ->result(); echo json_encode([ 'header' => $header, 'detail' => $detail ]); } public function delete($id = null) { // set response JSON $this->output->set_content_type('application/json'); if (empty($id)) { echo json_encode([ 'status' => false, 'message' => 'ID tidak valid' ]); return; } $this->db->trans_start(); // hapus detail dulu $this->db->where('base_journal_id', $id)->delete('base_journal_detail'); // hapus header $delete = $this->dm->setTable('base_journal')->delete($id); $this->db->trans_complete(); if (!$this->db->trans_status() || !$delete) { echo json_encode([ 'status' => false, 'message' => 'Gagal hapus data' ]); return; } // ================= LOG ACTIVITY ================= log_activity( 'base_journal', 'delete', 'Menghapus base journal ID: '.$id, 'success' ); echo json_encode([ 'status' => true, 'message' => 'Data berhasil dihapus' ]); } public function get_list_account() { $data = $this->db->select('id, nama_akun, kode_akun') ->from('accounts') // sesuaikan tabel kamu ->order_by('kode_akun','ASC') ->get() ->result(); echo json_encode($data); } }