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.
534 lines
17 KiB
PHP
534 lines
17 KiB
PHP
<?php
|
|
use NN\Module\DB;
|
|
|
|
$GLOBALS["acc"] = DB::query_result_assoc("SELECT * FROM acc");
|
|
$GLOBALS['namaBulan'] = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'];
|
|
$GLOBALS['namaHari'] = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'];
|
|
|
|
function array_to_update($array=[], $table = 'test', $wht = 'kode') {
|
|
$s = $array;
|
|
|
|
// Check if the array has elements
|
|
if (count($s) > 0) {
|
|
$y = array_keys($s[0]);
|
|
$x = 'UPDATE ' . $table . ' aa , ( ';
|
|
$x .= 'SELECT ' . implode(', ', array_map(function ($g) {
|
|
return 'a.' . $g;
|
|
}, $y)) . " FROM (\n";
|
|
$x .= implode("\n UNION ALL \n", array_map(function ($w) use ($y) {
|
|
$f = " SELECT ";
|
|
$f .= implode(', ', array_map(function ($q) use ($w) {
|
|
return '"' . str_replace('"', '\\"', $w[$q]) . "\" `$q`";
|
|
}, $y));
|
|
|
|
return $f;
|
|
}, $s));
|
|
$x .= "\n) a ) bb SET ";
|
|
$x .= implode(', ', array_map(function ($c) {
|
|
return " aa.$c = bb.$c";
|
|
}, $y));
|
|
$x .= ' WHERE ';
|
|
if (is_array($wht)) {
|
|
$x .= implode(' AND ', array_map(function ($whtx) {
|
|
return " aa.$whtx = bb.$whtx";
|
|
}, $wht));
|
|
} else {
|
|
$x .= " aa.$wht = bb.$wht";
|
|
}
|
|
|
|
return $x;
|
|
} else {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
function array_to_insert($array, $table = 'test', $wht = '') {
|
|
$s = $array;
|
|
|
|
// Check if the array has elements
|
|
if (count($s) > 0) {
|
|
$y = array_keys($s[0]);
|
|
$x = 'INSERT INTO ' . $table . '(' . implode(', ', array_map(function ($u) {
|
|
return "`$u`";
|
|
}, $y)) . ")\n";
|
|
$x .= 'SELECT ' . implode(', ', array_map(function ($g) {
|
|
return 'a.' . $g;
|
|
}, $y)) . " FROM (\n";
|
|
$x .= implode("\n UNION ALL \n", array_map(function ($w) use ($y) {
|
|
$f = " SELECT ";
|
|
$f .= implode(', ', array_map(function ($q) use ($w) {
|
|
if ($w[$q] !== null) {
|
|
return '"' . str_replace('"', '\\"', $w[$q]) . "\" `$q`";
|
|
} else {
|
|
return '"-" `$q`';
|
|
}
|
|
}, $y));
|
|
|
|
return $f;
|
|
}, $s));
|
|
$x .= "\n) a";
|
|
|
|
// Check if wht is an array
|
|
if (is_array($wht)) {
|
|
$x .= ' LEFT JOIN ' . $table . ' ON ';
|
|
$x .= implode(' AND ', array_map(function ($whtx) use ($table) {
|
|
return "$table.$whtx = a.$whtx";
|
|
}, $wht));
|
|
$x .= ' WHERE ';
|
|
$x .= implode(' AND ', array_map(function ($whtx) use ($table) {
|
|
return "$table.$whtx IS NULL";
|
|
}, $wht));
|
|
}
|
|
|
|
return $x;
|
|
} else {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
class Help {
|
|
public static function cond($array, $search = '', $name = '') {
|
|
if (!empty($search)) {
|
|
$search = is_numeric($search) ? strtolower(strval($search)) : strtolower($search);
|
|
$result = array_filter($array, function ($dat) use ($search, $name) {
|
|
if (is_array($dat) && isset($dat[$name])) {
|
|
$g = $dat[$name];
|
|
$numcek = 0;
|
|
if ($g !== null) {
|
|
$g = is_numeric($g) ? strtolower(strval($g)) : strtolower($g);
|
|
if ($numcek == 0) {
|
|
if ($g == $search) {
|
|
$numcek = 1;
|
|
}
|
|
}
|
|
}
|
|
return $numcek == 1 ? true : false;
|
|
} elseif ($dat !== null) {
|
|
if (is_numeric($dat)) {
|
|
$dats = strtolower(strval($dat));
|
|
return $dats == $search ? true : false;
|
|
} elseif (strtolower($dat) == $search) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
if(count($result) > 0){
|
|
$jx = [];
|
|
foreach ($result as $key => $ax) {
|
|
$jx[] = $ax;
|
|
}
|
|
return $jx;
|
|
}else{
|
|
return [];
|
|
}
|
|
} else {
|
|
return [];
|
|
}
|
|
}
|
|
}
|
|
|
|
function buat($newDate, $a)
|
|
{
|
|
$year = $newDate->format('Y');
|
|
$month = $newDate->format('m');
|
|
$day = $newDate->format('d');
|
|
$format = '00';
|
|
$ansMonth = str_pad($month, strlen($format), '0', STR_PAD_LEFT);
|
|
$ansDay = str_pad($day, strlen($format), '0', STR_PAD_LEFT);
|
|
$dayKnow = $ansDay . '-' . $ansMonth . '-' . $year;
|
|
|
|
return ($a === null) ? "" : $dayKnow;
|
|
}
|
|
|
|
function buatN($newDate, $a)
|
|
{
|
|
$year = $newDate->format('Y');
|
|
$month = $newDate->format('n') - 1;
|
|
$day = $newDate->format('d');
|
|
$format = '00';
|
|
$ansMonth = $GLOBALS['namaBulan'][$month];
|
|
$ansDay = str_pad($day, strlen($format), '0', STR_PAD_LEFT);
|
|
$dayKnow = $ansDay . ' ' . $ansMonth . ' ' . $year;
|
|
|
|
return ($a === null) ? "" : $dayKnow;
|
|
}
|
|
|
|
function buatO($newDate, $a)
|
|
{
|
|
$year = $newDate->format('Y');
|
|
$month = $newDate->format('m');
|
|
$day = $newDate->format('d');
|
|
$format = '00';
|
|
$ansMonth = str_pad($month, strlen($format), '0', STR_PAD_LEFT);
|
|
$ansDay = str_pad($day, strlen($format), '0', STR_PAD_LEFT);
|
|
$dayKnow = $year . '-' . $ansMonth . '-' . $ansDay;
|
|
|
|
return [
|
|
'full' => $dayKnow,
|
|
'day' => $newDate->format('w'),
|
|
];
|
|
}
|
|
|
|
function buatNum($newDate, $a)
|
|
{
|
|
$year = $newDate->format('Y');
|
|
$month = $newDate->format('m');
|
|
$day = $newDate->format('d');
|
|
$format = '00';
|
|
$ansMonth = str_pad($month, strlen($format), '0', STR_PAD_LEFT);
|
|
$ansDay = str_pad($day, strlen($format), '0', STR_PAD_LEFT);
|
|
$dayKnow = $year . $ansMonth . $ansDay;
|
|
|
|
return intval($dayKnow);
|
|
}
|
|
|
|
function buatC($newDate, $a)
|
|
{
|
|
$year = $newDate->format('Y');
|
|
$month = $newDate->format('m');
|
|
$day = $newDate->format('d');
|
|
$dateK = new DateTime($year . '-' . $month . '-' . $day);
|
|
|
|
return $dateK;
|
|
}
|
|
|
|
function tanggal($a = null)
|
|
{
|
|
$newDate = new DateTime();
|
|
|
|
if ($a !== null) {
|
|
if ($a === "gugus") {
|
|
$newDate = new DateTime(helper_sesiGet('tahun') . '-' . helper_sesiGet('bulan'));
|
|
} else {
|
|
$newDate = new DateTime($a);
|
|
}
|
|
}
|
|
|
|
$date = new DateTime();
|
|
$y = $date->format('Y');
|
|
$m = $date->format('m');
|
|
$firstDay = new DateTime($newDate->format('Y-m') . '-01');
|
|
$lastDay = new DateTime($newDate->format('Y-m-t'));
|
|
|
|
$returnData = [
|
|
'oneDayMilisecond' => 86400000,
|
|
'milisecond' => $newDate->getTimestamp(),
|
|
'normal' => buatO($newDate,$a)['full'],
|
|
'cek1' => buatC($newDate,$a),
|
|
'sekarang' => buat($newDate,$a),
|
|
'sekarang2' => buatN($newDate,$a),
|
|
'cek2' => buatC($firstDay,$a),
|
|
'normal2' => buatO($firstDay,$a)['full'],
|
|
'awal' => buat($firstDay,$a),
|
|
'awal2' => buatN($firstDay,$a),
|
|
'akhir' => buat($lastDay,$a),
|
|
'akhir2' => buatN($lastDay,$a),
|
|
'cek3' => buatC($lastDay,$a),
|
|
'normal3' => buatO($lastDay,$a)['full'],
|
|
'angka' => buatNum($newDate,$a),
|
|
'dayn' => $GLOBALS['namaHari'][buatO($newDate,$a)['day']],
|
|
'day' => buatO($newDate,$a)['day'],
|
|
'day2n' => $GLOBALS['namaHari'][buatO($firstDay,$a)['day']],
|
|
'day2' => buatO($firstDay,$a)['day'],
|
|
'day3n' => $GLOBALS['namaHari'][buatO($lastDay,$a)['day']],
|
|
'day3' => buatO($lastDay,$a)['day'],
|
|
];
|
|
|
|
return $returnData;
|
|
}
|
|
|
|
function _slice7($w = []) {
|
|
$n = count($w) / 7;
|
|
$newArray = [];
|
|
|
|
for ($x = 0; $x < $n; $x++) {
|
|
$ar = [];
|
|
|
|
for ($j = 0; $j < 7; $j++) {
|
|
$h = $j + ($x * 7);
|
|
$ar[] = $w[$h];
|
|
}
|
|
|
|
$newArray[] = $ar;
|
|
}
|
|
|
|
return $newArray;
|
|
}
|
|
|
|
function accnil($year = null, $app = null)
|
|
{
|
|
if (!$year) {
|
|
$year = explode('-', tanggal()['normal'])[0];
|
|
}
|
|
if (!$app) {
|
|
$app = "acc";
|
|
}
|
|
|
|
$condition = "";
|
|
|
|
if ($app == 'usp') {
|
|
$condition = " AND acc.app = 'usp' ";
|
|
} elseif ($app == 'acc') {
|
|
$condition = " AND acc.app = 'acc' ";
|
|
}
|
|
|
|
$year = is_array($year) ? $year : [$year];
|
|
|
|
$queries = [];
|
|
|
|
foreach ($year as $yr) {
|
|
$query = "
|
|
SELECT
|
|
main,
|
|
rek,
|
|
nama_main,
|
|
nama,
|
|
sum(if(bln = 'a0', total, 0)) ba0,
|
|
sum(if(bln = '00', total, 0)) b00,
|
|
sum(if(bln = '01', total, 0)) b01,
|
|
sum(if(bln = '02', total, 0)) b02,
|
|
sum(if(bln = '03', total, 0)) b03,
|
|
sum(if(bln = '04', total, 0)) b04,
|
|
sum(if(bln = '05', total, 0)) b05,
|
|
sum(if(bln = '06', total, 0)) b06,
|
|
sum(if(bln = '07', total, 0)) b07,
|
|
sum(if(bln = '08', total, 0)) b08,
|
|
sum(if(bln = '09', total, 0)) b09,
|
|
sum(if(bln = '10', total, 0)) b10,
|
|
sum(if(bln = '11', total, 0)) b11,
|
|
sum(if(bln = '12', total, 0)) b12,
|
|
sum(if(bln = '13', total, 0)) b13
|
|
FROM (
|
|
(
|
|
SELECT 'a0' bln, main, nama_main, dk, kode rek, nama, total FROM bbtahunan acc
|
|
WHERE tahun = " . (intval($yr) - 2) . $condition . "
|
|
)
|
|
UNION ALL
|
|
(
|
|
SELECT '00' bln, main, nama_main, dk, kode rek, nama, total FROM bbtahunan acc
|
|
WHERE tahun = " . (intval($yr) - 1) . $condition . "
|
|
)
|
|
UNION ALL
|
|
(
|
|
SELECT bln, main, nama_main, dk, rek, nama, sum(total) total FROM (
|
|
SELECT
|
|
lpad(month(tgl), 2, 0) bln,
|
|
main,
|
|
nama_main,
|
|
dk,
|
|
rekkredit rek,
|
|
nama,
|
|
sum(if(dk = 'D', kredit * -1, kredit)) total
|
|
FROM lap_bb
|
|
LEFT JOIN acc ON acc.kode = lap_bb.rekkredit
|
|
WHERE tgl LIKE '{$yr}%' $condition
|
|
GROUP BY rekkredit, bln
|
|
UNION ALL
|
|
SELECT
|
|
lpad(month(tgl), 2, 0) bln,
|
|
main,
|
|
nama_main,
|
|
dk,
|
|
rekdebit rek,
|
|
nama,
|
|
sum(if(dk <> 'D', debit * -1, debit)) total
|
|
FROM lap_bb
|
|
LEFT JOIN acc ON acc.kode = lap_bb.rekdebit
|
|
WHERE tgl LIKE '{$yr}%' $condition
|
|
GROUP BY rekdebit, bln
|
|
) a
|
|
GROUP BY rek, bln
|
|
HAVING main IS NOT NULL
|
|
ORDER BY bln ASC, main ASC, rek ASC
|
|
)
|
|
) a
|
|
GROUP BY rek[;]
|
|
SELECT * FROM setbeban[;]
|
|
SELECT * FROM akn[;]
|
|
SELECT * FROM tahun_awal[;]
|
|
SELECT * FROM v_beban_acc[;]
|
|
SELECT * FROM v_beban_usp[;]
|
|
SELECT * FROM (
|
|
SELECT 'usp' app, 2022 tahun, ifnull((SELECT data FROM `profile` WHERE kode = 'shu usp'), 0) total
|
|
UNION ALL
|
|
SELECT 'acc' app, 2022 tahun, ifnull((SELECT data FROM `profile` WHERE kode = 'shu induk'), 0) total
|
|
) a
|
|
";
|
|
$queries[] = explode("[;]",$query);
|
|
}
|
|
|
|
$getData = [];
|
|
|
|
foreach ($queries as $key => $q) {
|
|
foreach ($q as $key => $y) {
|
|
$getData[] = DB::query_result_assoc($y);
|
|
}
|
|
}
|
|
|
|
return $getData;
|
|
}
|
|
|
|
|
|
class OpenData {
|
|
// Properties
|
|
private $data = [];
|
|
private $acc = [];
|
|
|
|
// Constructor
|
|
public function __construct($data=[], $acc=[]) {
|
|
$this->data = $data;
|
|
$this->acc = $acc;
|
|
}
|
|
|
|
// Method
|
|
public function lastBBUpdate() {
|
|
$dat = $this->data; // Assuming $this->acc is an array or an object with a "cond" method
|
|
$data = $dat['data']; // Assuming $this->acc is an array or an object with a "cond" method
|
|
$acc = $this->acc; // Assuming $this->acc is an array or an object with a "cond" method
|
|
$year = $dat['thn']; // Assuming $this->acc is an array or an object with a "cond" method
|
|
$newData = array_map(function($w) use ($acc, $year) {
|
|
list($dataR) = Help::cond($acc, $w['rek'], 'kode');
|
|
return [
|
|
'kode' => $w['rek'],
|
|
'main' => $w['main'],
|
|
'nama' => $w['nama'],
|
|
'nama_main' => $w['nama_main'],
|
|
'tahun' => $year,
|
|
'total' => (float) $w['b13'],
|
|
'dk' => $dataR ? $dataR['dk'] : null,
|
|
'nr' => $dataR ? $dataR['nr'] : null,
|
|
'app' => $dataR ? $dataR['app'] : null
|
|
];
|
|
}, $data);
|
|
return $newData;
|
|
}
|
|
}
|
|
|
|
function accNillRes($res, $year)
|
|
{
|
|
list($data, $beban, $acc, $thn, $bacc, $busp, $shuawal) = $res;
|
|
$dat = [
|
|
'tahun' => $thn[0]['tahun'],
|
|
'thn' => intval($year),
|
|
'bacc' => $bacc,
|
|
'busp' => $busp,
|
|
'shuawal' => $shuawal,
|
|
'dates' => tanggal($thn[0]['dates'] . '-01')['milisecond'],
|
|
'data' => array_map(function ($d) use ($acc, $year, $thn) {
|
|
$b13 = 0;
|
|
[$nr] = Help::cond($acc, $d['rek'], 'kode');
|
|
$d['nr'] = $nr ? $nr['nr'] : '-';
|
|
$d['dk'] = $nr ? $nr['dk'] : '-';
|
|
$d['amain'] = $nr ? $nr['amain'] : '-';
|
|
$d['asub'] = $nr ? $nr['asub'] : '-';
|
|
$d['ba0'] = intval($d['ba0']);
|
|
|
|
for ($x = 0; $x <= 12; $x++) {
|
|
$pad = 'b' . str_pad($x, 2, '0', STR_PAD_LEFT);
|
|
|
|
if ($x == 0) {
|
|
if (intval($year) > intval($thn[0]['tahun'])) {
|
|
$b13 += round($d[$pad]);
|
|
}
|
|
} else {
|
|
$b13 += round($d[$pad]);
|
|
}
|
|
|
|
$d[$pad] = round($d[$pad]);
|
|
}
|
|
|
|
$d['b13'] = $b13;
|
|
return $d;
|
|
}, $data)
|
|
];
|
|
$funcOpen = new OpenData($dat, $GLOBALS["acc"]);
|
|
return $funcOpen;
|
|
}
|
|
|
|
ini_set('display_errors', 1);
|
|
ini_set('display_startup_errors', 1);
|
|
error_reporting(E_ALL);
|
|
|
|
function array_sum_custom($array, $key = null) {
|
|
// Create a copy of the array to avoid modifying the original
|
|
$copy = $array;
|
|
|
|
// If a key is provided, map the array to get the values of that key
|
|
if ($key !== null) {
|
|
$copy = array_map(function ($item) use ($key) {
|
|
return isset($item[$key]) ? $item[$key] : 0;
|
|
}, $copy);
|
|
}
|
|
|
|
// Use the array_sum function to calculate the sum
|
|
return array_sum($copy);
|
|
}
|
|
|
|
function loadDataR($a = null, $s = [], $appType = "", $year = "") {
|
|
if($a){
|
|
$update = $a->lastBBUpdate();
|
|
$labarugi = array_sum_custom( array_map(function ($w) {
|
|
$h = $w;
|
|
if ($w['dk'] == 'D') {
|
|
$h['total'] = $w['total'] * -1;
|
|
}
|
|
return $h;
|
|
}, Help::cond($update,'L', 'nr')) , 'total');
|
|
[$hs] = Help::cond($s, $appType, 'app');
|
|
$shubl = [
|
|
"kode" => $hs['kode'],
|
|
"main" => $hs['main'],
|
|
"nama" => $hs['nama'],
|
|
"nama_main" => $hs['nama_main'],
|
|
"tahun" => $year,
|
|
"total" => $labarugi,
|
|
"dk" => $hs['dk'],
|
|
"nr" => $hs['nr'],
|
|
"app" => $hs['app']
|
|
];
|
|
$update = array_filter($update, function ($h) use ($hs) {
|
|
return $h['kode'] != $hs['kode'];
|
|
});
|
|
$update[] = $shubl;
|
|
echo(json_encode([
|
|
"hs" => $hs,
|
|
"data" => $update
|
|
]));
|
|
// DB::query( array_to_insert($update, 'bbtahunan',['kode', 'tahun']) );
|
|
// DB::query( array_to_update($update, 'bbtahunan',['kode', 'tahun']) );
|
|
}
|
|
}
|
|
|
|
$GLOBALS['s'] = DB::query_result_assoc("SELECT
|
|
a.kode,
|
|
b.main,
|
|
b.nama,
|
|
b.nama_main,
|
|
b.dk,
|
|
b.nr,
|
|
b.app
|
|
FROM (
|
|
SELECT
|
|
if(substring_index(kode, \"bl\", -1) = 'usp', 'usp', 'acc') app
|
|
, data kode
|
|
FROM `profile`
|
|
WHERE kode LIKE 'shubl%'
|
|
) a LEFT JOIN acc b ON a.kode = b.kode");
|
|
|
|
function abc($apptype = 'usp'){
|
|
$yr = [date('Y')];
|
|
if(isset($_GET['thn'])){
|
|
$yr = [$_GET['thn']];
|
|
}
|
|
$get = _slice7(accnil($yr, $apptype));
|
|
foreach ($get as $key => $getRes) {
|
|
$w = accNillRes($getRes, $yr[$key]);
|
|
loadDataR($w, $GLOBALS['s'], $apptype, $yr[$key]);
|
|
}
|
|
}
|
|
abc('acc');
|
|
// abc('usp');
|
|
|
|
|