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.

232 lines
9.0 KiB
PHP

<?php
use alhimik1986\PhpExcelTemplator\PhpExcelTemplator;
use alhimik1986\PhpExcelTemplator\params\ExcelParam;
use alhimik1986\PhpExcelTemplator\params\CallbackParam;
use alhimik1986\PhpExcelTemplator\setters\CellSetterArrayValueSpecial;
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 Tunggakan {
private function toArray2($data = null, $name = ""){
$new = [];
$start = 5;
foreach ($data as $key => $n) {
$e = ( array ) $n;
$new[] = str_replace("{no}",$start+$key, $e[$name]);
}
return $new;
}
public static function do($tahun = "2023", $bulan="09"){
$thn = $tahun."-".$bulan;
$thn2 = ($tahun-1)."-12";
$thnsekarang = $tahun;
$thnlalu = $tahun-1;
$th1 = date('Y-m-t', strtotime( $thn ) );
$th2 = date('Y-m-t', strtotime( $thn2 ) );
$bulanData = ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"];
ini_set('display_errors', 1);
$file = SETUP_PATH.'tunggakan-'.date('Y-m-d h:i:s').'.xlsx';
$filex = SETUP_PATH.'/excel/tunggakan.xlsx';
define('SPECIAL_ARRAY_TYPE', CellSetterArrayValueSpecial::class);
$simp = ["sp","sw","sm","tk","bw"];
$pj = ["reg","khusus","usp1","usp2","usp3"];
$condSimp = "";
$condPJ = "";
foreach ($simp as $key => $simpan) {
$condSimp .= ", round(sum(if(kodesp = '$simpan', pokok, 0))) $simpan";
}
foreach ($pj as $key => $pinjam) {
$condPJ .= ", round(sum(if(kodesp = '$pinjam', pokok, 0))) $pinjam";
$condPJ .= ", round(sum(if(kodesp = '$pinjam', jasa, 0))) ".$pinjam."jasa ";
}
$qr = "
SELECT
'{no}' no
, a.kode
, a.nama
, a.kodesp
, a.tgl
, concat(max(bln),' bln') tgk
, sum(IF(a.kodesp = 'sm', pokok, 0)) sm
, sum(IF(a.kodesp = 'sw', pokok, 0)) sw
, sum(IF(a.kodesp = 'sp', pokok, 0)) sp
, sum(IF(a.kodesp = 'bw', pokok, 0)) bw
, sum(IF(a.kodesp = 'swp', pokok, 0)) swp
, sum(IF(a.kodesp = 'tk', pokok, 0)) tk
, sum(IF(a.kodesp = 'sm', bln, 0)) jsm
, sum(IF(a.kodesp = 'sw', bln, 0)) jsw
, sum(IF(a.kodesp = 'sp', bln, 0)) jsp
, sum(IF(a.kodesp = 'bw', bln, 0)) jbw
, sum(IF(a.kodesp = 'swp', bln, 0)) jswp
, sum(IF(a.kodesp = 'tk', bln, 0)) jtk
, sum(IF(a.kodesp = 'usp1', pokok, 0)) usp1
, sum(IF(a.kodesp = 'usp1', bunga, 0)) busp1
, sum(IF(a.kodesp = 'usp1', bln, 0)) jusp1
, sum(IF(a.kodesp = 'usp2', pokok, 0)) usp2
, sum(IF(a.kodesp = 'usp2', bunga, 0)) busp2
, sum(IF(a.kodesp = 'usp2', bln, 0)) jusp2
, sum(IF(a.kodesp = 'usp3', pokok, 0)) usp3
, sum(IF(a.kodesp = 'usp3', bunga, 0)) busp3
, sum(IF(a.kodesp = 'usp3', bln, 0)) jusp3
, sum(IF(a.kodesp = 'khusus', pokok, 0)) khusus
, sum(IF(a.kodesp = 'khusus', bunga, 0)) bkhusus
, sum(IF(a.kodesp = 'khusus', bln, 0)) jkhusus
, sum(IF(a.kodesp = 'reg', pokok, 0)) reg
, sum(IF(a.kodesp = 'reg', bunga, 0)) breg
, sum(IF(a.kodesp = 'reg', bln, 0)) jreg
, sum(IF(a.kodesp = 'pt', pokok, 0)) pt
, sum(IF(a.kodesp = 'pt', bunga, 0)) bpt
, sum(IF(a.kodesp = 'pt', bln, 0)) jpt
FROM (
SELECT concat( TranslateMonth(month(max(tgl))),' ', year(max(tgl)),' - ', TranslateMonth(month(now())),' ', year(now())) tgl, a.kode, a.nama, a.kodesp, sum(bln) bln, sum(pokok) pokok , sum(bunga) bunga FROM (
SELECT
substring_index(m.tgl,'-',2) th
, count(1) bln
, m.tgl
, m.kode
, a.nama
, m.kodesp
, sum(IF(m.jumlah = 0, m.pokok, m.jumlah)) pokok
, sum(m.bunga) bunga FROM mgagalbayar m
LEFT JOIN anggota a ON m.kode = a.kode
WHERE m.tgl <= '$th1'
GROUP BY th, kodesp, kode
HAVING pokok <> 0
) a GROUP BY a.kode, a.kodesp
ORDER BY bln DESC
) a GROUP BY kode
";
$qr2 = "
SELECT
'{no}' no
, a.kode
, a.nama
, a.kodesp
, sum(IF(a.kodesp = 'sm', pokok, 0)) sm
, sum(IF(a.kodesp = 'sw', pokok, 0)) sw
, sum(IF(a.kodesp = 'sp', pokok, 0)) sp
, sum(IF(a.kodesp = 'bw', pokok, 0)) bw
, sum(IF(a.kodesp = 'swp', pokok, 0)) swp
, sum(IF(a.kodesp = 'tk', pokok, 0)) tk
, sum(IF(a.kodesp = 'sm', bln, 0)) jsm
, sum(IF(a.kodesp = 'sw', bln, 0)) jsw
, sum(IF(a.kodesp = 'sp', bln, 0)) jsp
, sum(IF(a.kodesp = 'bw', bln, 0)) jbw
, sum(IF(a.kodesp = 'swp', bln, 0)) jswp
, sum(IF(a.kodesp = 'tk', bln, 0)) jtk
, sum(IF(a.kodesp = 'usp1', pokok, 0)) usp1
, sum(IF(a.kodesp = 'usp1', bunga, 0)) busp1
, sum(IF(a.kodesp = 'usp1', bln, 0)) jusp1
, sum(IF(a.kodesp = 'usp2', pokok, 0)) usp2
, sum(IF(a.kodesp = 'usp2', bunga, 0)) busp2
, sum(IF(a.kodesp = 'usp2', bln, 0)) jusp2
, sum(IF(a.kodesp = 'usp3', pokok, 0)) usp3
, sum(IF(a.kodesp = 'usp3', bunga, 0)) busp3
, sum(IF(a.kodesp = 'usp3', bln, 0)) jusp3
, sum(IF(a.kodesp = 'khusus', pokok, 0)) khusus
, sum(IF(a.kodesp = 'khusus', bunga, 0)) bkhusus
, sum(IF(a.kodesp = 'khusus', bln, 0)) jkhusus
, sum(IF(a.kodesp = 'reg', pokok, 0)) reg
, sum(IF(a.kodesp = 'reg', bunga, 0)) breg
, sum(IF(a.kodesp = 'reg', bln, 0)) jreg
, sum(IF(a.kodesp = 'pt', pokok, 0)) pt
, sum(IF(a.kodesp = 'pt', bunga, 0)) bpt
, sum(IF(a.kodesp = 'pt', bln, 0)) jpt
FROM (
SELECT a.kode, a.nama, a.kodesp, sum(bln) bln, sum(pokok) pokok , sum(bunga) bunga FROM (
SELECT
substring_index(m.tgl,'-',2) th
, count(1) bln
, m.kode
, a.nama
, m.kodesp
, sum(IF(m.jumlah = 0, m.pokok, m.jumlah)) pokok
, sum(m.bunga) bunga FROM mgagalbayar m
LEFT JOIN anggota a ON m.kode = a.kode
WHERE m.tgl <= '$th2'
GROUP BY th, kodesp, kode
HAVING pokok <> 0
) a GROUP BY a.kode, a.kodesp
ORDER BY bln DESC
) a GROUP BY kode
";
$data = DB::query_result_object($qr);
$data2 = DB::query_result_object($qr2);
$dataParse = [];
$newPar = new Param();
//
$dataParse['no'] = (new self)->toArray2($data, "no");
$newPar->add('no', $dataParse);
for ($i=1; $i <= 3 ; $i++) {
$q = $i+2;
$dataParse["p$q"] = (new self)->toArray2($data, "usp$i");
$newPar->add("p$q", $dataParse);
$dataParse["j$q"] = (new self)->toArray2($data, "busp$i");
$newPar->add("j$q", $dataParse);
$dataParse["l$q"] = (new self)->toArray2($data, "jusp$i");
$newPar->add("l$q", $dataParse);
}
$dataParse["nama"] = (new self)->toArray2($data, "nama");
$newPar->add("nama", $dataParse);
$dataParse["tunggakan"] = (new self)->toArray2($data, "tgl");
$newPar->add("tunggakan", $dataParse);
// $dataParse["tunggakan"] = (new self)->toArray2($data, "tgk");
// $newPar->add("tunggakan", $dataParse);
$dataParse["p1"] = (new self)->toArray2($data, "reg");
$newPar->add("p1", $dataParse);
$dataParse["j1"] = (new self)->toArray2($data, "breg");
$newPar->add("j1", $dataParse);
$dataParse["l1"] = (new self)->toArray2($data, "jreg");
$newPar->add("l1", $dataParse);
$dataParse["p2"] = (new self)->toArray2($data, "khusus");
$newPar->add("p2", $dataParse);
$dataParse["j2"] = (new self)->toArray2($data, "bkhusus");
$newPar->add("j2", $dataParse);
$dataParse["l2"] = (new self)->toArray2($data, "jkhusus");
$newPar->add("l2", $dataParse);
$datasm = ["sm", "sw", "swp", "bw", "sp", "tk"];
foreach ($datasm as $sx => $sxv) {
$dataParse[$sxv."2"] = (new self)->toArray2($data, $sxv);
$newPar->add($sxv."2", $dataParse);
$dataParse[$sxv."1"] = (new self)->toArray2($data2, $sxv);
$newPar->add($sxv."1", $dataParse);
}
$w = explode("-", date('t-m-Y', strtotime( $th1 ) ));
$newPar->single('per', $w[0]." ". strtoupper( $bulanData[ $w[1] -1 ] )." ".$w[2] );
$newPar->single('th2', $thnsekarang);
$newPar->single('th1', $thnlalu);
// encopy
$params = $newPar->get();
$callbacks = [];
PhpExcelTemplator::outputToFile($filex, $file, $params, $callbacks);
}
}