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.

335 lines
12 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 Partisipasi {
public static function excel(){
return View::render("exceljs");
}
private function setup(){
$file = SETUP_PATH.'excel/partisipan'.date('Y-m-d h:i:s').'.xlsx';
$filex = SETUP_PATH.'excel/partisipan.xlsx';
return [
"file" => $file,
"filex" => $filex
];
}
private function setup2(){
$file = SETUP_PATH.'excel/simpanan-akhir-tahun'.date('Y-m-d h:i:s').'.xlsx';
$filex = SETUP_PATH.'excel/simpplus.xlsx';
return [
"file" => $file,
"filex" => $filex
];
}
private function toArray($data = null, $name = ""){
$new = [];
$start = 3;
foreach ($data as $key => $n) {
$e = ( array ) $n;
$new[] = str_replace("{no}",$start+$key, $e[$name]);
}
return $new;
}
private function toArray2($data = null, $name = ""){
$new = [];
$start = 4;
foreach ($data as $key => $n) {
$e = ( array ) $n;
$new[] = str_replace("{no}",$start+$key, $e[$name]);
}
return $new;
}
public static function do($tahun = "2023",$type = "1"){
define('SPECIAL_ARRAY_TYPE', CellSetterArrayValueSpecial::class);
ini_set('display_errors', 1);
$setup = (new self)->setup();
if($type != "1"){
$setup = (new self)->setup2();
}
$file = $setup['file'];
$filex = $setup['filex'];
$dataNama = [];
$dataNama[] = [
"name" => "kode"
];
$dataNama[] = [
"name" => "nama"
];
$dataNama[] = [
"name" => "reg"
];
$dataNama[] = [
"name" => "usp1"
];
$dataNama[] = [
"name" => "usp2"
];
$dataNama[] = [
"name" => "usp3"
];
$dataNama[] = [
"name" => "bt"
];
$dataNama[] = [
"name" => "bn"
];
$dataNama[] = [
"name" => "pp"
];
$dataNama[] = [
"name" => "tot"
];
$dataNama[] = [
"name" => "bw"
];
$qr = "
SELECT
'{no}' `no`
, '=SUM(F{no}:J{no})' jml
, concat('\'',a.kode) kode
, a.nama
, if(a.kota = '', a.tgllahir, concat(a.kota,',',a.tgllahir)) temtala
, a.jk
, a.telp
, a.alamat
, a.unitkerja
, a.masuk
, ( ifnull(IF(b.kodesp = 'REG', b.pokok, 0 ),0)
+ ifnull(IF(b1.kodesp = 'USP1', b1.pokok, 0 ),0)
+ ifnull(IF(b2.kodesp = 'USP2', b2.pokok, 0 ),0)
+ ifnull(IF(b3.kodesp = 'USP3', b3.pokok, 0 ),0)
+ ifnull(IF(c.bank = 'cash', c.lunas, 0 ),0)
+ ifnull(bbw.total,0)
+ ifnull(d.lunas,0) ) `all`
, ifnull(h.total,0) pdt
, ifnull(IF(tk.kodesp = 'tk', tk.jumlah, 0 ),0) tk
, ifnull(IF(sm.kodesp = 'sm', sm.jumlah, 0 ),0) sm
, ifnull(IF(sw.kodesp = 'sw', sw.jumlah, 0 ),0) sw
, ifnull(IF(sp.kodesp = 'sp', sp.jumlah, 0 ),0) sp
, ifnull(IF(swp.kodesp = 'swp', swp.jumlah, 0 ),0) swp
, ifnull(bbw.total,0) bw
, ifnull(IF(b.kodesp = 'REG', b.pokok, 0 ),0) reg
, ifnull(IF(b1.kodesp = 'USP1', b1.pokok, 0 ),0) usp1
, ifnull(IF(b2.kodesp = 'USP2', b2.pokok, 0 ),0) usp2
, ifnull(IF(b3.kodesp = 'USP3', b3.pokok, 0 ),0) usp3
, ifnull(IF(c.bank = 'cash', c.lunas, 0 ),0) bt
, ifnull(IF(w.bank <> 'cash', w.lunas, 0 ),0) bn
, ifnull(d.lunas,0) pp
, '=SUM(C{no}:J{no})' tot
FROM anggota a
LEFT JOIN (
SELECT kode, kodesp, sum(if(dk = 'd', jumlah, jumlah * -1 )) jumlah FROM msimpan
WHERE tgl LIKE '$tahun%' AND kodesp = 'sm'
GROUP BY kode,kodesp
) sm ON sm.kode = a.kode
LEFT JOIN (
SELECT kode, kodesp, sum(if(dk = 'd', jumlah, jumlah * -1 )) jumlah FROM msimpan
WHERE tgl LIKE '$tahun%' AND kodesp = 'tk'
GROUP BY kode,kodesp
) tk ON tk.kode = a.kode
LEFT JOIN (
SELECT kode, kodesp, sum(if(dk = 'd', jumlah, jumlah * -1 )) jumlah FROM msimpan
WHERE tgl LIKE '$tahun%' AND kodesp = 'sw'
GROUP BY kode,kodesp
) sw ON sw.kode = a.kode
LEFT JOIN (
SELECT kode, kodesp, sum(if(dk = 'd', jumlah, jumlah * -1 )) jumlah FROM msimpan
WHERE tgl LIKE '$tahun%' AND kodesp = 'swp'
GROUP BY kode,kodesp
) swp ON swp.kode = a.kode
LEFT JOIN (
SELECT kode, kodesp, sum(if(dk = 'd', jumlah, jumlah * -1 )) jumlah FROM msimpan
WHERE tgl LIKE '$tahun%' AND kodesp = 'sp'
GROUP BY kode,kodesp
) sp ON sp.kode = a.kode
LEFT JOIN (
SELECT kodesc kode, 'BW' kodesp, sum(kredit) jumlah FROM totsl WHERE kredit <> 0 GROUP BY kodesc
) bw ON bw.kode = a.kode
LEFT JOIN (
SELECT kodesc kode, sum(debet) total FROM totsl WHERE debet <> 0 AND tgl LIKE '$tahun%' GROUP BY kode
) bbw ON bbw.kode = a.kode
LEFT JOIN (
SELECT * FROM (
SELECT kode, kodesp, sum(pokok) pokok FROM (
SELECT kode, kodesp, sum(partisipasi) pokok FROM spartisipasi WHERE tgl LIKE '$tahun%' GROUP BY kode, kodesp
UNION ALL
SELECT mags.kode, m.kodesp, sum(mags.shu) pokok FROM mags
LEFT JOIN mpinjam m ON m.faktur = mags.fkt
WHERE mags.tgl LIKE '$tahun%' AND mags.keterangan NOT LIKE 'Posting: Data Awal%' GROUP BY kode, kodesp
) a GROUP BY kode, kodesp HAVING kodesp = 'reg'
) a
) b ON b.kode = a.kode
LEFT JOIN (
SELECT * FROM (
SELECT kode, kodesp, sum(pokok) pokok FROM (
SELECT kode, kodesp, sum(partisipasi) pokok FROM spartisipasi WHERE tgl LIKE '$tahun%' GROUP BY kode, kodesp
UNION ALL
SELECT mags.kode, m.kodesp, sum(mags.shu) pokok FROM mags
LEFT JOIN mpinjam m ON m.faktur = mags.fkt
WHERE mags.tgl LIKE '$tahun%' AND mags.keterangan NOT LIKE 'Posting: Data Awal%' GROUP BY kode, kodesp
) a GROUP BY kode, kodesp HAVING kodesp = 'USP1'
) a
) b1 ON b1.kode = a.kode
LEFT JOIN (
SELECT * FROM (
SELECT kode, kodesp, sum(pokok) pokok FROM (
SELECT kode, kodesp, sum(partisipasi) pokok FROM spartisipasi WHERE tgl LIKE '$tahun%' GROUP BY kode, kodesp
UNION ALL
SELECT mags.kode, m.kodesp, sum(mags.shu) pokok FROM mags
LEFT JOIN mpinjam m ON m.faktur = mags.fkt
WHERE mags.tgl LIKE '$tahun%' AND mags.keterangan NOT LIKE 'Posting: Data Awal%' GROUP BY kode, kodesp
) a GROUP BY kode, kodesp HAVING kodesp = 'USP2'
) a
) b2 ON b2.kode = a.kode
LEFT JOIN (
SELECT * FROM (
SELECT kode, kodesp, sum(pokok) pokok FROM (
SELECT kode, kodesp, sum(partisipasi) pokok FROM spartisipasi WHERE tgl LIKE '$tahun%' GROUP BY kode, kodesp
UNION ALL
SELECT mags.kode, m.kodesp, sum(mags.shu) pokok FROM mags
LEFT JOIN mpinjam m ON m.faktur = mags.fkt
WHERE mags.tgl LIKE '$tahun%' AND mags.keterangan NOT LIKE 'Posting: Data Awal%' GROUP BY kode, kodesp
) a GROUP BY kode, kodesp HAVING kodesp = 'USP3'
) a
) b3 ON b3.kode = a.kode
LEFT JOIN (
SELECT 'cash' bank, kodesc kode, sum(tunai - ifnull(kembali,0) ) lunas FROM totsl
WHERE tr = 2 AND tgl LIKE '$tahun%' GROUP BY kode
) c ON c.kode = a.kode
LEFT JOIN (
SELECT 'bank' bank, kodesc kode, sum(tunai - ifnull(kembali,0) ) lunas FROM totsl
WHERE tr <> 2 AND tgl LIKE '$tahun%' GROUP BY kode
) w ON w.kode = a.kode
LEFT JOIN (
SELECT
totptg.kodesc kode
, sum(ptg.lunas) lunas
FROM ptg
LEFT JOIN totptg ON ptg.faktur = totptg.faktur
WHERE ptg.tgl LIKE '$tahun%'
GROUP BY kode
) d ON d.kode = a.kode
LEFT JOIN (
SELECT * FROM (
SELECT kodesc kode, sum(kredit) total FROM totsl WHERE kredit <> 0 GROUP BY kode
UNION ALL
SELECT totsl.kodesc kode, sum(ptg.lunas) * -1 total FROM ptg LEFT JOIN totsl ON totsl.faktur = ptg.fkt
WHERE totsl.kredit <> 0 GROUP BY kode
) a
) h ON h.kode = a.kode
WHERE a.status = 0 AND a.laporan = 1
GROUP BY a.kode
";
// echo $qr;
// die();
$data = DB::query_result_object($qr);
if($type == "1"){
$dataParse = [];
$newPar = new Param();
foreach($dataNama as $key => $nm){
$dataParse[ $nm['name'] ] = (new self)->toArray($data, $nm['name']);
$newPar->add( $nm['name'] , $dataParse);
}
$params = $newPar->get();
// encopy
$callbacks = [];
PhpExcelTemplator::outputToFile($filex, $file, $params, $callbacks);
}else{
$dataParse = [];
$newPar = new Param();
$dataParse[ 'no' ] = (new self)->toArray2($data, 'no');
$newPar->add( 'no' , $dataParse);
$dataParse[ 'nama' ] = (new self)->toArray2($data, 'nama');
$newPar->add( 'nama' , $dataParse);
$dataParse[ 'telp' ] = (new self)->toArray2($data, 'telp');
$newPar->add( 'telp' , $dataParse);
$dataParse[ 'alamat' ] = (new self)->toArray2($data, 'alamat');
$newPar->add( 'alamat' , $dataParse);
$dataParse[ 'unitkerja' ] = (new self)->toArray2($data, 'unitkerja');
$newPar->add( 'unitkerja' , $dataParse);
$dataParse[ 'bw' ] = (new self)->toArray2($data, 'bw');
$newPar->add( 'bw' , $dataParse);
$dataParse[ 'sm' ] = (new self)->toArray2($data, 'sm');
$newPar->add( 'sm' , $dataParse);
$dataParse[ 'swp' ] = (new self)->toArray2($data, 'swp');
$newPar->add( 'swp' , $dataParse);
$dataParse[ 'sp' ] = (new self)->toArray2($data, 'sp');
$newPar->add( 'sp' , $dataParse);
$dataParse[ 'sw' ] = (new self)->toArray2($data, 'sw');
$newPar->add( 'sw' , $dataParse);
$dataParse[ 'tk' ] = (new self)->toArray2($data, 'tk');
$newPar->add( 'tk' , $dataParse);
$dataParse[ 'pt' ] = (new self)->toArray2($data, 'pdt');
$newPar->add( 'pt' , $dataParse);
$dataParse[ 'tot' ] = (new self)->toArray2($data, 'all');
$newPar->add( 'tot' , $dataParse);
$dataParse[ 'simp' ] = (new self)->toArray2($data, 'jml');
$newPar->add( 'simp' , $dataParse);
$params = $newPar->get();
// encopy
$callbacks = [];
PhpExcelTemplator::outputToFile($filex, $file, $params, $callbacks);
}
}
}