Files
2026-07-12 22:10:02 +07:00

188 lines
5.1 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Generateneracasaldo extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('DynamicModel', 'dm');
if (!$this->session->userdata('logged_in')) {
redirect('auth');
}
}
public function index()
{
if($this->session->userdata('role') != 'Admin'){
show_error('Akses ditolak', 403);
}
$data = ["active_menu" => "neraca_saldo"];
$this->load->view('partials/header', $data);
$this->load->view('laporan/neraca_saldo');
$this->load->view('partials/footer');
}
// =========================
// AMBIL DATA NERACA SALDO
// DIPAKAI OLEH AJAX & PDF
// =========================
private function get_neracasaldo_data()
{
$tanggal_awal = $this->input->get('tanggal_awal');
$tanggal_akhir = $this->input->get('tanggal_akhir');
$this->db->select("
accounts.id,
accounts.kode_akun,
accounts.nama_akun,
accounts.kategori,
accounts.tipe,
COALESCE(SUM(journal_details.debit),0) AS debit,
COALESCE(SUM(journal_details.kredit),0) AS kredit
");
$this->db->from('accounts');
// ======================================
// FILTER PERIODE
// ======================================
if (!empty($tanggal_awal) && !empty($tanggal_akhir)) {
$this->db->join(
"(SELECT jd.*
FROM journal_details jd
JOIN journals j ON j.id = jd.journal_id
WHERE j.tanggal BETWEEN ".$this->db->escape($tanggal_awal)."
AND ".$this->db->escape($tanggal_akhir)."
) journal_details",
"journal_details.account_id = accounts.id",
"left",
false
);
} else {
$this->db->join(
'journal_details',
'journal_details.account_id = accounts.id',
'left'
);
}
$rows = $this->db
->where('accounts.is_active',1)
->group_by('accounts.id')
->order_by('accounts.kode_akun','ASC')
->get()
->result();
$total_debit = 0;
$total_kredit = 0;
foreach($rows as $row){
$row->debit = (float)$row->debit;
$row->kredit = (float)$row->kredit;
$total_debit += $row->debit;
$total_kredit += $row->kredit;
}
return [
'tanggal_awal' => $tanggal_awal,
'tanggal_akhir' => $tanggal_akhir,
'rows' => $rows,
'total_debit' => $total_debit,
'total_kredit' => $total_kredit
];
}
public function get_data()
{
$result = $this->get_neracasaldo_data();
echo json_encode($result['rows']);
}
public function generatepdf()
{
if ($this->session->userdata('role') != 'Admin') {
show_error('Akses ditolak',403);
}
if (ob_get_length()) {
ob_end_clean();
}
// ==========================================
// DATA
// ==========================================
$neracasaldo = $this->get_neracasaldo_data();
// ==========================================
// PERUSAHAAN
// ==========================================
$company = $this->db->get('pengaturan')->row();
// ==========================================
// PERIODE
// ==========================================
if(!empty($neracasaldo['tanggal_awal']) && !empty($neracasaldo['tanggal_akhir'])){
$periodeStr = 'Periode : '
. date('d-m-Y',strtotime($neracasaldo['tanggal_awal']))
.' s/d '
. date('d-m-Y',strtotime($neracasaldo['tanggal_akhir']));
}else{
$periodeStr = 'Seluruh Periode';
}
// ==========================================
// PDF
// ==========================================
require_once(APPPATH.'third_party/fpdf/fpdf.php');
require_once(APPPATH.'libraries/PDF_Neracasaldo.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($periodeStr);
$pdf->AddPage();
$pdf->NeracaSaldoTable(
$neracasaldo['rows'],
$neracasaldo['total_debit'],
$neracasaldo['total_kredit']
);
$pdf->NeracaSaldoRingkasan(
$neracasaldo['total_debit'],
$neracasaldo['total_kredit']
);
$pdf->Pembuat(
$this->session->userdata('nama') ?: 'Administrator',
'Finance Department'
);
$filename = 'Neraca_Saldo_'.date('YmdHis').'.pdf';
$pdf->Output('I',$filename);
exit;
}
}