You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
6.4 KiB
PHP

<?php
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use NN\files;
use NN\Post;
use NN\Session;
use NN\Module\DB;
use NN\Module\Help;
use NN\Link;
use NN\Module\DD;
use NN\Enc;
use NN\module\View;
use xls\Param;
class Kekayaan2 {
private function setup(){
set_time_limit(300);
$file = SETUP_PATH.'excel/kekayaan'.date('Y').'.xlsx';
$filex = SETUP_PATH.'/excel/kekayaan.xlsx';
return [
"file" => $file,
"filex" => $filex
];
}
private function toArray($data = null, $name = ""){
$new = [];
$start = 7;
foreach ($data as $key => $n) {
$e = ( array ) $n;
$new[] = str_replace("{no}",$start+$key, $e[$name]);
}
return $new;
}
public static function do(){
ini_set('display_errors', 1);
$setup = (new self)->setup();
$file = $setup['file'];
$filex = $setup['filex'];
$pjname = ['reg','khusus', 'usp1','usp2','usp3'];
define('SPECIAL_ARRAY_TYPE', CellSetterArrayValueSpecial::class);
$bln = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
// config
$dataNama = [];
$dataNama[] = [
"name" => "no"
];
$dataNama[] = [
"name" => "kode"
];
$dataNama[] = [
"name" => "nama"
];
$dataNama[] = [
"name" => "temtala"
];
$dataNama[] = [
"name" => "jk"
];
$dataNama[] = [
"name" => "telp"
];
$dataNama[] = [
"name" => "alamat"
];
$dataNama[] = [
"name" => "unitkerja"
];
$dataNama[] = [
"name" => "masuk"
];
// config
$simpanan = DB::query_result_object("SELECT lower(kode) kode FROM jpinjam WHERE typetransaksi = 'simpanan' HAVING kode <> 'pt'");
$join ="";
$slc = "";
$year = date('Y');
foreach ($simpanan as $ky => $val) {
$join .= "
LEFT JOIN (
SELECT concat(
year(tgl),'-',
lpad(month(tgl),2,0)
) dy, lpad(month(tgl),2,0) mnt, kode, kodesp, sum(jumlah) total FROM
msimpan WHERE tgl LIKE '$year%' AND kodesp = '$val->kode' GROUP BY dy, kode, kodesp
ORDER BY kodesp ASC, dy ASC, kode ASC
) $val->kode ON a.kode = $val->kode.kode
";
$join .= "\n
LEFT JOIN (
SELECT
kode
, sum(jumlah) total
FROM
msimpan WHERE tgl < '$year-01-01' AND kodesp = '$val->kode' GROUP BY kode
ORDER BY kode ASC
) ".$val->kode."a ON a.kode = ".$val->kode."a.kode
";
$join .= "\n
LEFT JOIN (
SELECT
kode
, sum(jumlah) total
FROM
msimpan WHERE tgl LIKE '$year%' AND kodesp = '$val->kode' GROUP BY kode
ORDER BY kode ASC
) ".$val->kode."totb ON a.kode = ".$val->kode."totb.kode
";
$join .= "\n
LEFT JOIN (
SELECT
kode
, sum(jumlah) total
FROM
msimpan WHERE tgl <= '".date("Y-m-t", strtotime($year."-12") )."' AND kodesp = '$val->kode' GROUP BY kode
ORDER BY kode ASC
) ".$val->kode."tota ON a.kode = ".$val->kode."tota.kode
";
$join .= "\n";
foreach ($bln as $ky => $blnd) {
$slc .= ",ifnull((IF( $val->kode.mnt = '$blnd', $val->kode.total, 0 )),0) $val->kode$blnd ";
$slc .= "\n";
}
$slc .= ",ifnull(".$val->kode."a.total,0) ".$val->kode."a ";
$slc .= "\n";
$slc .= ",ifnull(".$val->kode."totb.total,0) ".$val->kode."totb ";
$slc .= "\n";
$slc .= ",ifnull(".$val->kode."tota.total,0) ".$val->kode."tota ";
$slc .= "\n";
}
foreach ($pjname as $key => $vv) {
foreach ($bln as $ky => $blnn) {
$slc .= ", ifnull(sum(if(
mags.tr = 'G',
if(
mags.kodesp = '$vv',
if(
mags.bln = '$blnn',
mags.pokok,
0
)
, 0
)
, 0
)),0) ".$vv."angshu".$blnn." ";
$slc .= "\n";
$slc .= ", ifnull(sum(if(
mags.tr <> 'G',
if(
mags.kodesp = '$vv',
if(
mags.bln = '$blnn',
mags.pokok,
0
)
, 0
)
, 0
)),0) ".$vv."angnon".$blnn." ";
$slc .= "\n";
}
}
$join .= "
LEFT JOIN (
SELECT
mags.kode
, LPAD(month(mags.tgl),2,0) bln
, m.tr
, substring_index(substring_index(mags.fkt, \"/\",2),\"/\",-1) kodesp
, sum(mags.pokok) pokok
, sum(mags.bunga) bunga
FROM mags
LEFT JOIN mpinjam m ON m.faktur = mags.fkt
WHERE mags.tgl like '$year%'
GROUP BY kode, tr, kodesp,bln
) mags ON mags.kode = a.kode
";
$qr = "
SELECT
'{no}' `no`
, a.kode
,a.nama
, if(a.kota = '', a.tgllahir, concat(a.kota,',',a.tgllahir)) temtala
,a.jk
,a.telp
,a.alamat
,a.unitkerja
,year(a.masuk) masuk
$slc
FROM anggota a
$join
GROUP BY a.kode ORDER BY a.kode ASC
";
$data = DB::query_result_object($qr);
echo json_encode($data);
}
}