load->model('DynamicModel', 'dm'); } // ---------------------------------------------------------------- // PDF GENERATE — BUKU BESAR // ---------------------------------------------------------------- public function generatepdf($account_id, $start, $end) { if ($this->session->userdata('role') != 'Admin') { show_error('Akses ditolak', 403); } if (ob_get_length()) { ob_end_clean(); } // ============================================================= // AMBIL INFO AKUN // ============================================================= $akun = null; if (!empty($account_id)) { $akun = $this->db->get_where('accounts', ['id' => (int) $account_id])->row(); } // ============================================================= // QUERY DATA // ============================================================= $this->db->select(' journals.tanggal, journals.no_ref, journals.keterangan, journal_details.debit, journal_details.kredit, accounts.tipe '); $this->db->from('journal_details'); $this->db->join('journals', 'journals.id = journal_details.journal_id'); $this->db->join('accounts', 'accounts.id = journal_details.account_id'); if (!empty($account_id)) { $this->db->where('journal_details.account_id', (int) $account_id); } if (!empty($start) && !empty($end)) { $this->db->where('journals.tanggal >=', $start); $this->db->where('journals.tanggal <=', $end); } $this->db->group_start(); $this->db->where('journal_details.debit >', 0); $this->db->or_where('journal_details.kredit >', 0); $this->db->group_end(); $this->db->order_by('journals.tanggal', 'ASC'); $rows = $this->db->get()->result(); // ============================================================= // HITUNG SALDO BERJALAN // ============================================================= $saldo = 0; $result = []; foreach ($rows as $r) { if (in_array($r->tipe, ['asset', 'expense'])) { $saldo += ($r->debit - $r->kredit); } else { $saldo += ($r->kredit - $r->debit); } $result[] = [ 'tanggal' => $r->tanggal, 'no_ref' => $r->no_ref, 'keterangan' => $r->keterangan, 'debit' => $r->debit, 'kredit' => $r->kredit, 'saldo' => $saldo, ]; } $total_debit = array_sum(array_column($result, 'debit')); $total_kredit = array_sum(array_column($result, 'kredit')); // ============================================================= // DATA PERUSAHAAN // ============================================================= $company = $this->db->get('pengaturan')->row(); // ============================================================= // BUILD STRING INFO LAPORAN // ============================================================= $namaAkun = $akun ? $akun->kode_akun . ' - ' . $akun->nama_akun : 'Semua Akun'; $periodeStr = (!empty($start) && !empty($end)) ? 'Periode : ' . date('d-m-Y', strtotime($start)) . ' s/d ' . date('d-m-Y', strtotime($end)) : 'Periode : Semua Tanggal'; // ============================================================= // LOAD LIBRARY PDF // ============================================================= require_once(APPPATH . 'third_party/fpdf/fpdf.php'); require_once(APPPATH . 'libraries/PDF_BukuBesar.php'); $pdf = new PDF ('P', 'mm', 'A4'); $pdf->SetMargins(10, 10, 10); $pdf->setHeaderData( $company->nama_perusahaan, $company->alamat_perusahaan, FCPATH . 'uploads/img/logo-ljn.png' ); $pdf->setInfoLaporan($namaAkun, $periodeStr); $pdf->AddPage('P', 'A4'); $pdf->BukuBesarTable($result); $pdf->BukuBesarTotal($total_debit, $total_kredit, $saldo); $pdf->Pembuat('Tito Ngudiana', 'Finance Department'); // ============================================================= // OUTPUT // ============================================================= $filename = 'Buku_Besar_' . date('YmdHis') . '.pdf'; $pdf->Output('D', $filename); exit; } }