Penambahan tombol PDF di Bukubesar, Neraca, Laba rugi, Neraca saldo, dan Data Barang
Format PDF tersimpan di library semua
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class Generatebuku extends CI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class Generateitems extends CI_Controller {
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->load->model('DynamicModel', 'dm');
|
||||
}
|
||||
|
||||
|
||||
public function generatepdf()
|
||||
{
|
||||
if(ob_get_length()){
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
$this->db->select('
|
||||
items.id,
|
||||
items.nama_barang,
|
||||
items.kode_detail,
|
||||
items.harga_beli,
|
||||
items.harga_jual,
|
||||
items.created_at,
|
||||
items.tanggal_pembelian,
|
||||
items.stok,
|
||||
(
|
||||
SELECT GROUP_CONCAT(DISTINCT w.nama SEPARATOR ", ")
|
||||
FROM stock_logs sl
|
||||
LEFT JOIN warehouses w ON sl.warehouse_id = w.id
|
||||
WHERE sl.item_id = items.id
|
||||
) as gudang
|
||||
');
|
||||
|
||||
$this->db->where('items.status','active');
|
||||
$this->db->where('items.stok >', 0); // <-- stok 0 agar tidak muncul
|
||||
|
||||
$this->db->order_by('(items.stok = 0)','ASC',false);
|
||||
$this->db->order_by('items.tanggal_pembelian','ASC');
|
||||
$this->db->order_by('items.kode_detail','ASC');
|
||||
|
||||
$data = $this->db->get('items')->result();
|
||||
|
||||
|
||||
$company = $this->db->get('pengaturan')->row_array();
|
||||
|
||||
|
||||
require_once(APPPATH . 'third_party/fpdf/fpdf.php');
|
||||
require_once(APPPATH. 'libraries/PDF_Items.php');
|
||||
|
||||
$pdf = new PDF();
|
||||
|
||||
$pdf->setHeaderData(
|
||||
$company['nama_perusahaan'],
|
||||
$company['alamat_perusahaan'],
|
||||
$company['telepon_perusahaan'],
|
||||
FCPATH.'uploads/img/logo-ljn.png'
|
||||
);
|
||||
|
||||
$pdf->AddPage('P', 'A4');
|
||||
$pdf->ItemsTable($data);
|
||||
$pdf->TotalBarang(count($data));
|
||||
// $pdf->Pembuat($company['nama_bendahara']);
|
||||
$pdf->Output('I','Data_Barang_'.date('YmdHis').'.pdf');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class Generatelabarugi 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" => "laba_rugi"];
|
||||
$this->load->view('partials/header', $data);
|
||||
$this->load->view('laporan/laba_rugi');
|
||||
$this->load->view('partials/footer');
|
||||
}
|
||||
|
||||
// =========================
|
||||
// AMBIL DATA LABA RUGI (DIPAKAI BERSAMA OLEH get_data() & generatepdf())
|
||||
// =========================
|
||||
private function get_labarugi_data($tanggal_dari = null, $tanggal_sampai = null)
|
||||
{
|
||||
$this->db->select('
|
||||
a.id,
|
||||
a.kode_akun,
|
||||
a.nama_akun,
|
||||
a.tipe,
|
||||
COALESCE(SUM(jd.debit),0) as debit,
|
||||
COALESCE(SUM(jd.kredit),0) as kredit
|
||||
');
|
||||
$this->db->from('accounts a');
|
||||
|
||||
// ================= JOIN
|
||||
$this->db->join('journal_details jd','a.id = jd.account_id','LEFT');
|
||||
$this->db->join('journals j','j.id = jd.journal_id','LEFT');
|
||||
|
||||
// ================= FILTER AKUN
|
||||
$this->db->where('a.kategori','laba_rugi');
|
||||
$this->db->where('a.is_active',1);
|
||||
|
||||
// ================= FILTER TANGGAL (AMAN)
|
||||
if($tanggal_dari){
|
||||
$this->db->where('(j.tanggal >= "'.$tanggal_dari.'" OR j.tanggal IS NULL)');
|
||||
}
|
||||
|
||||
if($tanggal_sampai){
|
||||
$this->db->where('(j.tanggal <= "'.$tanggal_sampai.'" OR j.tanggal IS NULL)');
|
||||
}
|
||||
|
||||
$this->db->group_by('a.id');
|
||||
$this->db->order_by('a.kode_akun','ASC');
|
||||
|
||||
$rows = $this->db->get()->result();
|
||||
|
||||
$pendapatan = [];
|
||||
$beban = [];
|
||||
|
||||
$revenue = 0;
|
||||
$expense = 0;
|
||||
|
||||
foreach ($rows as $r) {
|
||||
|
||||
if ($r->tipe == 'revenue') {
|
||||
$saldo = $r->kredit - $r->debit;
|
||||
$revenue += $saldo;
|
||||
|
||||
$pendapatan[] = [
|
||||
'kode' => $r->kode_akun,
|
||||
'nama' => $r->nama_akun,
|
||||
'saldo' => $saldo
|
||||
];
|
||||
}
|
||||
|
||||
if ($r->tipe == 'expense') {
|
||||
$saldo = $r->debit - $r->kredit;
|
||||
$expense += $saldo;
|
||||
|
||||
$beban[] = [
|
||||
'kode' => $r->kode_akun,
|
||||
'nama' => $r->nama_akun,
|
||||
'saldo' => $saldo
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'data' => $rows,
|
||||
'pendapatan' => $pendapatan,
|
||||
'beban' => $beban,
|
||||
'revenue' => $revenue,
|
||||
'expense' => $expense,
|
||||
'total_pendapatan'=> $revenue,
|
||||
'total_beban' => $expense,
|
||||
'laba' => $revenue - $expense
|
||||
];
|
||||
}
|
||||
|
||||
// =========================
|
||||
// GET DATA LABA RUGI (JSON, untuk AJAX/datatable)
|
||||
// =========================
|
||||
public function get_data()
|
||||
{
|
||||
$tanggal_dari = $this->input->get('tanggal_dari');
|
||||
$tanggal_sampai = $this->input->get('tanggal_sampai');
|
||||
|
||||
$result = $this->get_labarugi_data($tanggal_dari, $tanggal_sampai);
|
||||
|
||||
echo json_encode([
|
||||
'data' => $result['data'],
|
||||
'revenue' => $result['revenue'],
|
||||
'expense' => $result['expense'],
|
||||
'laba' => $result['laba']
|
||||
]);
|
||||
}
|
||||
|
||||
// =========================
|
||||
// PDF GENERATE — LABA RUGI
|
||||
// =========================
|
||||
public function generatepdf($start = null, $end = null)
|
||||
{
|
||||
if ($this->session->userdata('role') != 'Admin') {
|
||||
show_error('Akses ditolak', 403);
|
||||
}
|
||||
|
||||
if (ob_get_length()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
// Normalisasi parameter URL (0000-00-00 dianggap kosong)
|
||||
$tanggal_dari = (!empty($start) && $start != '0000-00-00') ? $start : null;
|
||||
$tanggal_sampai = (!empty($end) && $end != '0000-00-00') ? $end : null;
|
||||
|
||||
// =============================================================
|
||||
// AMBIL DATA
|
||||
// =============================================================
|
||||
$labarugi = $this->get_labarugi_data($tanggal_dari, $tanggal_sampai);
|
||||
|
||||
// =============================================================
|
||||
// DATA PERUSAHAAN
|
||||
// =============================================================
|
||||
$company = $this->db->get('pengaturan')->row();
|
||||
|
||||
// =============================================================
|
||||
// BUILD STRING PERIODE
|
||||
// =============================================================
|
||||
$periodeStr = (!empty($tanggal_dari) && !empty($tanggal_sampai))
|
||||
? 'Periode : ' . date('d-m-Y', strtotime($tanggal_dari))
|
||||
. ' s/d ' . date('d-m-Y', strtotime($tanggal_sampai))
|
||||
: ((!empty($tanggal_sampai))
|
||||
? 'Per Tanggal : ' . date('d-m-Y', strtotime($tanggal_sampai))
|
||||
: 'Per Tanggal : ' . date('d-m-Y'));
|
||||
|
||||
// =============================================================
|
||||
// LOAD LIBRARY PDF
|
||||
// =============================================================
|
||||
require_once(APPPATH . 'third_party/fpdf/fpdf.php');
|
||||
require_once(APPPATH . 'libraries/PDF_Labarugi.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('P', 'A4');
|
||||
$pdf->LabaRugiTable(
|
||||
$labarugi['pendapatan'],
|
||||
$labarugi['beban'],
|
||||
$labarugi['total_pendapatan'],
|
||||
$labarugi['total_beban']
|
||||
);
|
||||
$pdf->LabaRugiRingkasan($labarugi['laba']);
|
||||
$pdf->Pembuat('Tito Ngudiana', 'Finance Department');
|
||||
|
||||
// =============================================================
|
||||
// OUTPUT
|
||||
// =============================================================
|
||||
$filename = 'Laba_Rugi_' . date('YmdHis') . '.pdf';
|
||||
$pdf->Output('D', $filename);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,252 @@
|
||||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class Generateneraca 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"];
|
||||
$this->load->view('partials/header', $data);
|
||||
$this->load->view('laporan/neraca');
|
||||
$this->load->view('partials/footer');
|
||||
}
|
||||
|
||||
// =========================
|
||||
// LABA BERJALAN (PAKAI TANGGAL JOURNAL)
|
||||
// =========================
|
||||
private function get_laba_berjalan($tanggal_dari = null, $tanggal_sampai = null)
|
||||
{
|
||||
$this->db->select('
|
||||
accounts.tipe,
|
||||
COALESCE(SUM(jd.debit),0) as debit,
|
||||
COALESCE(SUM(jd.kredit),0) as kredit
|
||||
');
|
||||
$this->db->from('accounts');
|
||||
$this->db->join('journal_details jd','jd.account_id = accounts.id','LEFT');
|
||||
$this->db->join('journals j','j.id = jd.journal_id','LEFT');
|
||||
|
||||
$this->db->where_in('accounts.tipe',['revenue','expense']);
|
||||
|
||||
// ================= FILTER TANGGAL
|
||||
if($tanggal_dari){
|
||||
$this->db->where('(j.tanggal >= "'.$tanggal_dari.'" OR j.tanggal IS NULL)');
|
||||
}
|
||||
|
||||
if($tanggal_sampai){
|
||||
$this->db->where('(j.tanggal <= "'.$tanggal_sampai.'" OR j.tanggal IS NULL)');
|
||||
}
|
||||
|
||||
$rows = $this->db->get()->result();
|
||||
|
||||
$revenue = 0;
|
||||
$expense = 0;
|
||||
|
||||
foreach ($rows as $r) {
|
||||
if ($r->tipe == 'revenue') {
|
||||
$revenue += ($r->kredit - $r->debit);
|
||||
} else {
|
||||
$expense += ($r->debit - $r->kredit);
|
||||
}
|
||||
}
|
||||
|
||||
return $revenue - $expense;
|
||||
}
|
||||
|
||||
// =========================
|
||||
// AMBIL DATA NERACA (DIPAKAI BERSAMA OLEH get_data() & generatepdf())
|
||||
// =========================
|
||||
private function get_neraca_data($tanggal_dari = null, $tanggal_sampai = null)
|
||||
{
|
||||
$this->db->select('
|
||||
a.id,
|
||||
a.kode_akun,
|
||||
a.nama_akun,
|
||||
a.tipe,
|
||||
a.posisi,
|
||||
a.is_kontra,
|
||||
COALESCE(SUM(jd.debit),0) as debit,
|
||||
COALESCE(SUM(jd.kredit),0) as kredit
|
||||
');
|
||||
$this->db->from('accounts a');
|
||||
$this->db->join('journal_details jd','jd.account_id = a.id','LEFT');
|
||||
$this->db->join('journals j','j.id = jd.journal_id','LEFT');
|
||||
|
||||
$this->db->where('a.kategori','neraca');
|
||||
|
||||
// ================= FILTER TANGGAL
|
||||
if($tanggal_dari){
|
||||
$this->db->where('(j.tanggal >= "'.$tanggal_dari.'" OR j.tanggal IS NULL)');
|
||||
}
|
||||
|
||||
if($tanggal_sampai){
|
||||
$this->db->where('(j.tanggal <= "'.$tanggal_sampai.'" OR j.tanggal IS NULL)');
|
||||
}
|
||||
|
||||
$this->db->group_by('a.id');
|
||||
$this->db->order_by('a.kode_akun','ASC');
|
||||
|
||||
$rows = $this->db->get()->result();
|
||||
|
||||
$activa = [];
|
||||
$pasiva = [];
|
||||
|
||||
$total_activa = 0;
|
||||
$total_pasiva = 0;
|
||||
|
||||
// ================= LABA BERJALAN
|
||||
$laba = $this->get_laba_berjalan($tanggal_dari, $tanggal_sampai);
|
||||
|
||||
foreach ($rows as $r) {
|
||||
|
||||
// ================= SALDO NORMAL
|
||||
if ($r->posisi == 'debit') {
|
||||
$saldo = $r->debit - $r->kredit;
|
||||
} else {
|
||||
$saldo = $r->kredit - $r->debit;
|
||||
}
|
||||
|
||||
// ================= KONTRA ACCOUNT
|
||||
if ($r->is_kontra == 1) {
|
||||
$saldo = -$saldo;
|
||||
}
|
||||
|
||||
// ================= LABA BERJALAN
|
||||
if ($r->kode_akun == '302') {
|
||||
$saldo = $laba;
|
||||
}
|
||||
|
||||
// ================= ACTIVA
|
||||
if ($r->tipe == 'asset') {
|
||||
|
||||
$activa[] = [
|
||||
'kode' => $r->kode_akun,
|
||||
'nama' => $r->nama_akun,
|
||||
'saldo' => $saldo
|
||||
];
|
||||
|
||||
$total_activa += $saldo;
|
||||
}
|
||||
|
||||
// ================= PASIVA
|
||||
if (in_array($r->tipe, ['liability','equity'])) {
|
||||
|
||||
$pasiva[] = [
|
||||
'kode' => $r->kode_akun,
|
||||
'nama' => $r->nama_akun,
|
||||
'saldo' => $saldo
|
||||
];
|
||||
|
||||
$total_pasiva += $saldo;
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'activa' => $activa,
|
||||
'pasiva' => $pasiva,
|
||||
'total_activa' => $total_activa,
|
||||
'total_pasiva' => $total_pasiva,
|
||||
'laba' => $laba,
|
||||
'selisih' => $total_activa - $total_pasiva
|
||||
];
|
||||
}
|
||||
|
||||
// =========================
|
||||
// GET DATA NERACA (JSON, untuk AJAX/datatable)
|
||||
// =========================
|
||||
public function get_data()
|
||||
{
|
||||
$tanggal_dari = $this->input->get('tanggal_dari');
|
||||
$tanggal_sampai = $this->input->get('tanggal_sampai');
|
||||
|
||||
$data = $this->get_neraca_data($tanggal_dari, $tanggal_sampai);
|
||||
|
||||
echo json_encode($data);
|
||||
}
|
||||
|
||||
// =========================
|
||||
// PDF GENERATE — NERACA
|
||||
// =========================
|
||||
public function generatepdf($start = null, $end = null)
|
||||
{
|
||||
if ($this->session->userdata('role') != 'Admin') {
|
||||
show_error('Akses ditolak', 403);
|
||||
}
|
||||
|
||||
if (ob_get_length()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
// Normalisasi parameter URL (0000-00-00 dianggap kosong)
|
||||
$tanggal_dari = (!empty($start) && $start != '0000-00-00') ? $start : null;
|
||||
$tanggal_sampai = (!empty($end) && $end != '0000-00-00') ? $end : null;
|
||||
|
||||
// =============================================================
|
||||
// AMBIL DATA
|
||||
// =============================================================
|
||||
$neraca = $this->get_neraca_data($tanggal_dari, $tanggal_sampai);
|
||||
|
||||
// =============================================================
|
||||
// DATA PERUSAHAAN
|
||||
// =============================================================
|
||||
$company = $this->db->get('pengaturan')->row();
|
||||
|
||||
// =============================================================
|
||||
// BUILD STRING PERIODE
|
||||
// =============================================================
|
||||
$periodeStr = (!empty($tanggal_dari) && !empty($tanggal_sampai))
|
||||
? 'Per Tanggal : ' . date('d-m-Y', strtotime($tanggal_sampai))
|
||||
. ' (Sejak ' . date('d-m-Y', strtotime($tanggal_dari)) . ')'
|
||||
: ((!empty($tanggal_sampai))
|
||||
? 'Per Tanggal : ' . date('d-m-Y', strtotime($tanggal_sampai))
|
||||
: 'Per Tanggal : ' . date('d-m-Y'));
|
||||
|
||||
// =============================================================
|
||||
// LOAD LIBRARY PDF
|
||||
// =============================================================
|
||||
require_once(APPPATH . 'third_party/fpdf/fpdf.php');
|
||||
require_once(APPPATH . 'libraries/PDF_Neraca.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('P', 'A4');
|
||||
$pdf->NeracaTable(
|
||||
$neraca['activa'],
|
||||
$neraca['pasiva'],
|
||||
$neraca['total_activa'],
|
||||
$neraca['total_pasiva']
|
||||
);
|
||||
$pdf->NeracaRingkasan($neraca['laba'], $neraca['selisih']);
|
||||
$pdf->Pembuat('Tito Ngudiana', 'Finance Department');
|
||||
|
||||
// =============================================================
|
||||
// OUTPUT
|
||||
// =============================================================
|
||||
$filename = 'Neraca_' . date('YmdHis') . '.pdf';
|
||||
$pdf->Output('D', $filename);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
<?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');
|
||||
}
|
||||
|
||||
// =========================
|
||||
// HITUNG LABA BERJALAN (REALTIME)
|
||||
// =========================
|
||||
private function get_laba_berjalan()
|
||||
{
|
||||
$this->db->select('
|
||||
accounts.tipe,
|
||||
COALESCE(SUM(journal_details.debit),0) as debit,
|
||||
COALESCE(SUM(journal_details.kredit),0) as kredit
|
||||
');
|
||||
$this->db->from('accounts');
|
||||
$this->db->join('journal_details','journal_details.account_id = accounts.id','LEFT');
|
||||
$this->db->where_in('accounts.tipe',['revenue','expense']);
|
||||
|
||||
$rows = $this->db->get()->result();
|
||||
|
||||
$revenue = 0;
|
||||
$expense = 0;
|
||||
|
||||
foreach ($rows as $r) {
|
||||
if ($r->tipe == 'revenue') {
|
||||
$revenue += ($r->kredit - $r->debit);
|
||||
} else {
|
||||
$expense += ($r->debit - $r->kredit);
|
||||
}
|
||||
}
|
||||
|
||||
return $revenue - $expense;
|
||||
}
|
||||
|
||||
// =========================
|
||||
// AMBIL DATA NERACA SALDO (DIPAKAI BERSAMA OLEH get_data() & generatepdf())
|
||||
// =========================
|
||||
private function get_neracasaldo_data()
|
||||
{
|
||||
$this->db->select('
|
||||
accounts.kode_akun,
|
||||
accounts.nama_akun,
|
||||
accounts.tipe,
|
||||
accounts.posisi,
|
||||
COALESCE(SUM(journal_details.debit),0) as debit,
|
||||
COALESCE(SUM(journal_details.kredit),0) as kredit
|
||||
');
|
||||
$this->db->from('accounts');
|
||||
$this->db->join('journal_details','journal_details.account_id = accounts.id','LEFT');
|
||||
|
||||
// OPTIONAL (best practice)
|
||||
$this->db->where('accounts.is_active',1);
|
||||
$this->db->where('accounts.kategori','neraca');
|
||||
|
||||
$this->db->group_by('accounts.id');
|
||||
$this->db->order_by('accounts.kode_akun','ASC');
|
||||
|
||||
$rows = $this->db->get()->result();
|
||||
|
||||
// =========================
|
||||
// HITUNG LABA BERJALAN
|
||||
// =========================
|
||||
$laba = $this->get_laba_berjalan();
|
||||
|
||||
$result = [];
|
||||
$total_debit = 0;
|
||||
$total_kredit = 0;
|
||||
|
||||
foreach ($rows as $r) {
|
||||
|
||||
// ================= SALDO NORMAL
|
||||
if ($r->posisi == 'debit') {
|
||||
$saldo = $r->debit - $r->kredit;
|
||||
} else {
|
||||
$saldo = $r->kredit - $r->debit;
|
||||
}
|
||||
|
||||
// ================= OVERRIDE LABA BERJALAN
|
||||
if ($r->kode_akun == '302') {
|
||||
$saldo = $laba;
|
||||
}
|
||||
|
||||
// ================= NORMALISASI KE KOLOM
|
||||
if ($saldo >= 0 AND $r->posisi == 'debit') {
|
||||
$r->saldo_debit = $saldo;
|
||||
$r->saldo_kredit = 0;
|
||||
} else {
|
||||
$r->saldo_debit = 0;
|
||||
$r->saldo_kredit = abs($saldo);
|
||||
}
|
||||
|
||||
$total_debit += $r->saldo_debit;
|
||||
$total_kredit += $r->saldo_kredit;
|
||||
|
||||
$result[] = [
|
||||
'kode' => $r->kode_akun,
|
||||
'nama' => $r->nama_akun,
|
||||
'saldo_debit' => $r->saldo_debit,
|
||||
'saldo_kredit' => $r->saldo_kredit,
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'rows' => $rows,
|
||||
'data' => $result,
|
||||
'total_debit' => $total_debit,
|
||||
'total_kredit' => $total_kredit,
|
||||
];
|
||||
}
|
||||
|
||||
// =========================
|
||||
// GET DATA NERACA SALDO (JSON, untuk AJAX/datatable)
|
||||
// =========================
|
||||
public function get_data()
|
||||
{
|
||||
$result = $this->get_neracasaldo_data();
|
||||
|
||||
echo json_encode($result['rows']);
|
||||
}
|
||||
|
||||
// =========================
|
||||
// PDF GENERATE — NERACA SALDO
|
||||
// =========================
|
||||
public function generatepdf()
|
||||
{
|
||||
if ($this->session->userdata('role') != 'Admin') {
|
||||
show_error('Akses ditolak', 403);
|
||||
}
|
||||
|
||||
if (ob_get_length()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
// =============================================================
|
||||
// AMBIL DATA
|
||||
// =============================================================
|
||||
$neracasaldo = $this->get_neracasaldo_data();
|
||||
|
||||
// =============================================================
|
||||
// DATA PERUSAHAAN
|
||||
// =============================================================
|
||||
$company = $this->db->get('pengaturan')->row();
|
||||
|
||||
// =============================================================
|
||||
// BUILD STRING PERIODE
|
||||
// =============================================================
|
||||
$periodeStr = 'Per Tanggal : ' . date('d-m-Y');
|
||||
|
||||
// =============================================================
|
||||
// LOAD LIBRARY 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('P', 'A4');
|
||||
$pdf->NeracaSaldoTable(
|
||||
$neracasaldo['data'],
|
||||
$neracasaldo['total_debit'],
|
||||
$neracasaldo['total_kredit']
|
||||
);
|
||||
$pdf->NeracaSaldoRingkasan(
|
||||
$neracasaldo['total_debit'],
|
||||
$neracasaldo['total_kredit']
|
||||
);
|
||||
$pdf->Pembuat('Tito Ngudiana', 'Finance Department');
|
||||
|
||||
// =============================================================
|
||||
// OUTPUT
|
||||
// =============================================================
|
||||
$filename = 'Neraca_Saldo_' . date('YmdHis') . '.pdf';
|
||||
$pdf->Output('I', $filename);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user