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.

225 lines
6.4 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 Anggota {
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=""){
$tht = date('Y-m-t', strtotime( $tahun.'-'.$bulan ) );
ini_set('display_errors', 1);
$file = SETUP_PATH.'excel/anggota-'.$tahun.'.xlsx';
$filex = SETUP_PATH.'/excel/jmanggota.xlsx';
define('SPECIAL_ARRAY_TYPE', CellSetterArrayValueSpecial::class);
$x = "";
$xa = " lawl ";
$xb = " pawl ";
$xj = " (lawl) + pawl ";
for ($i=1; $i <= 4; $i++) {
$xa .= " + ml$i - kl$i ";
$xb .= " + mp$i - kp$i ";
$xj .= " + ml$i - kl$i + mp$i - kp$i ";
$x .= "
, ml$i
, mp$i
, ml$i + mp$i jmlm$i
, kl$i
, kp$i
, kl$i + kp$i jmlk$i
, $xa l$i
, $xb p$i
, $xj jm$i
";
}
$qr = "
SELECT
'={no}-4' `no`
, jurubayar
, lawl
, pawl
, (lawl) + pawl jmawl
$x
FROM (
SELECT
jurubayar
, sum(if(bulan = 'lawl', total, 0)) lawl
, sum(if(bulan = 'pawl', total, 0)) pawl
, sum(if(bulan = 'ml1', total, 0)) ml1
, sum(if(bulan = 'mp1', total, 0)) mp1
, sum(if(bulan = 'kl1', total, 0)) kl1
, sum(if(bulan = 'kp1', total, 0)) kp1
, sum(if(bulan = 'ml2', total, 0)) ml2
, sum(if(bulan = 'mp2', total, 0)) mp2
, sum(if(bulan = 'kl2', total, 0)) kl2
, sum(if(bulan = 'kp2', total, 0)) kp2
, sum(if(bulan = 'ml3', total, 0)) ml3
, sum(if(bulan = 'mp3', total, 0)) mp3
, sum(if(bulan = 'kl3', total, 0)) kl3
, sum(if(bulan = 'kp3', total, 0)) kp3
, sum(if(bulan = 'ml4', total, 0)) ml4
, sum(if(bulan = 'mp4', total, 0)) mp4
, sum(if(bulan = 'kl4', total, 0)) kl4
, sum(if(bulan = 'kp4', total, 0)) kp4
FROM (
(
SELECT jurubayar, 'masuk' status, lower(concat(jk,'awl')) bulan, sum(total) total FROM (
(SELECT
rekapgol jurubayar
, 'masuk' status
, jk
, count(*) total
FROM
anggota WHERE masuk < '$tahun-01-01'
AND masuk IS NOT NULL
GROUP BY jk, jurubayar
)
UNION ALL
(
SELECT
rekapgol jurubayar
, 'keluar' status
, jk
, count(*) * -1 total
FROM
anggota WHERE keluar < '$tahun-01-01'
AND keluar IS NOT NULL
GROUP BY jk, jurubayar
)
) a GROUP BY jk, jurubayar
)
UNION ALL
(SELECT
jurubayar
, 'masuk' status
, lower( concat('m',jk
,if(
bulan <= 3, '1', if(bulan > 3
AND bulan <= 6, '2', if(bulan > 6
AND bulan <= 9, '3', '4') )
))) bulan
,count(1) total
FROM (
SELECT rekapgol jurubayar, jk, month(masuk) bulan
FROM anggota WHERE masuk LIKE '$tahun%'
) a
GROUP BY jurubayar, jk, bulan ORDER BY bulan ASC, jurubayar ASC)
UNION ALL
(
SELECT
jurubayar
, 'keluar' status
, lower( concat('k',jk
,if(
bulan <= 3, '1', if(bulan > 3
AND bulan <= 6, '2', if(bulan > 6
AND bulan <= 9, '3', '4') )
))) bulan
,count(1) total
FROM (
SELECT rekapgol jurubayar, jk, month(keluar) bulan
FROM anggota WHERE keluar LIKE '$tahun%'
) a
GROUP BY jurubayar, jk, bulan ORDER BY bulan ASC, jurubayar ASC
)
) a GROUP BY jurubayar
) a
";
// echo $qr;
// die();
$data = DB::query_result_object($qr);
$dataParse = [];
$newPar = new Param();
$dataParse[ 'no' ] = (new self)->toArray2($data, 'no');
$newPar->add( 'no' , $dataParse);
$name = ["lawl", "pawl", "jmawl"];
for ($i=1; $i <= 4; $i++) {
$name[] = "ml$i";
$name[] = "mp$i";
$name[] = "jmlm$i";
$name[] = "kl$i";
$name[] = "kp$i";
$name[] = "jmlk$i";
$name[] = "l$i";
$name[] = "p$i";
$name[] = "jm$i";
}
$dataParse[ 'jurubayar' ] = (new self)->toArray2($data, 'jurubayar');
$newPar->add( 'jurubayar' , $dataParse);
$newPar->single( 'th1' , date('Y') -1 );
$newPar->single( 'th2' , date('Y'));
foreach ($name as $key => $nm) {
$dataParse[ $nm ] = (new self)->toArray2($data, $nm);
$newPar->add( $nm , $dataParse);
}
$params = $newPar->get();
$callbacks = [];
PhpExcelTemplator::outputToFile($filex, $file, $params, $callbacks);
}
public static function view(){
return View::render('laporan/anggota');
}
function exist($dataArray, $property, $condition, $value) {
foreach ($dataArray as $item) {
if (isset($item[$property]) && $item[$property] === $value) {
return true;
}
}
return false;
}
public function transformArray($dataArray, $groupKeys, $transformKeys) {
$result = [];
$group = [];
foreach ($dataArray as $key => $value) {
$value = (array) $value;
if((new self)->exist($group, $groupKeys, $value[$groupKeys]) === false){
$group[] = [
$groupKeys => $value[$groupKeys]
];
}
}
return $group;
}
}