first commit
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/php/api/dalev.php
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 31st, 2026.
|
||||
|
||||
(c) 2026, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.sippd.php");
|
||||
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
|
||||
/* DALEV SUB KEGIATAN */
|
||||
|
||||
function sinkron_dalev_subkeg($db = null) {//oke
|
||||
$aret = ['status' => "success", 'message' => 'Berhasil singkron data!'];
|
||||
|
||||
$adata = json_decode(stripslashes(html_entity_decode($_POST['subkeg'])), true);
|
||||
|
||||
foreach ($adata as $_key1 => $subkeg) {
|
||||
fastInsert("dpa_dalev_sub", $subkeg);
|
||||
}
|
||||
$db->Query("UPDATE dpa_dalev_sub A,para90_opd B SET A.OPDID=B.OPDID WHERE A.K_OPD=B.K_OPD");
|
||||
return $aret;
|
||||
}
|
||||
|
||||
function ambil_dalev_subkeg($db = null) {//oke
|
||||
$aret = ['status' => "success", 'message' => 'Berhasil mendapatkan data!', 'action' => $_POST['action'], 'run' => $_POST['run'], 'data' => []];
|
||||
$aopd = [];
|
||||
|
||||
$twulan = 1;//todo: auto from config !
|
||||
$tahun = Param::Get("tahun", 0);
|
||||
$kode_skpd = Param::Get("kode_skpd", "");
|
||||
if ($kode_skpd <> "") {
|
||||
$db->Query("SELECT * FROM para90_opd WHERE K_OPD='".$kode_skpd."' LIMIT 1");
|
||||
if ($db->Next()) $aopd = $db->AllRow();
|
||||
}
|
||||
|
||||
$data_subkeg = [];
|
||||
$tsql = (count($aopd)==0) ? "" : " AND OPDID='".$aopd['OPDID']."'";
|
||||
$db->Query("SELECT * FROM (SELECT OPDID,SubID,K_Sub,RealK_TW1,RealK_TW2,RealK_TW3,RealK_TW4 FROM dpa_sub WHERE Tahun='".$tahun."'".$tsql.") S LEFT JOIN (SELECT OPDID,SubID,Satuan_Output Satuan,Real_TW1 RealF_TW1,Real_TW2 RealF_TW2,Real_TW3 RealF_TW3,Real_TW4 RealF_TW4 FROM dpa_sub_output WHERE Tahun='".$tahun."'".$tsql.") O ON (O.OPDID=S.OPDID AND O.SubID=S.SubID) LEFT JOIN (SELECT * FROM dpa_dalev_sub WHERE Tahun='".$tahun."'".$tsql.") D ON (D.OPDID=S.OPDID AND D.K_Sub=S.K_Sub) WHERE D.SIPD_OUTCOME IS NOT NULL ORDER BY S.K_Sub");
|
||||
while ($db->Next()) {
|
||||
$_tri_kin = []; $_tri_keu = []; $_thn_kin = 0; $_thn_keu = 0;
|
||||
for ($_tri = 1; $_tri <= 4; $_tri++) {
|
||||
$_tri_kin['triwulan_kinerja_'.$_tri] = ($_tri <= $twulan) ? $db->Row("RealF_TW".$_tri) : "";
|
||||
$_tri_keu['triwulan_keuangan_'.$_tri] = ($_tri <= $twulan) ? (float)$db->Row("RealK_TW".$_tri) : 0;
|
||||
$_thn_kin += ($_tri <= $twulan) ? (float)$db->Row("RealF_TW".$_tri) : 0;
|
||||
$_thn_keu += ($_tri <= $twulan) ? (float)$db->Row("RealK_TW".$_tri) : 0;
|
||||
}
|
||||
//komulatif / positif / negatif / rata-rata
|
||||
switch ($db->Row("Status", "komulatif")) {
|
||||
case "komulatif":
|
||||
break;
|
||||
case "rata-rata":
|
||||
$_thn_kin = $_thn_kin / $twulan;
|
||||
break;
|
||||
default:
|
||||
$_thn_kin = (float)$db->Row("RealK_TW".$twulan);
|
||||
}
|
||||
$data_subkeg[] = [
|
||||
'tahun' => $tahun,
|
||||
'kodeskpd' => $db->Row("K_OPD"),
|
||||
'kodebidang' => $db->Row("K_Bidu"),
|
||||
'kodeprogram' => $db->Row("K_Prog"),
|
||||
'kodekegiatan' => $db->Row("K_Keg"),
|
||||
'kodesubkegiatan' => $db->Row("K_Sub"),
|
||||
'satuan' => $db->Row("Satuan"),
|
||||
'formula' => $db->Row("Status"), //#info-status-kinerja
|
||||
'status' => $db->Row("Status"), //#info-status-kinerja
|
||||
'status_rkpd' => $db->Row("Status"), //#info-status-kinerja
|
||||
//'status_renstra' => "komulatif", //#info-status-renstra
|
||||
//'target_realisasi_kinerja' => $targetRealisasiKinerjaData,
|
||||
//'target_realisasi_keuangan' => $targetRealisasiKeuanganData,
|
||||
'triwulan_kinerja' => $_tri_kin,
|
||||
'triwulan_keuangan' => $_tri_keu,
|
||||
'realisasi_kinerja_tahunan' => $_thn_kin,
|
||||
'realisasi_keuangan_tahunan' => $_thn_keu,
|
||||
'idoutcome' => $db->Row("SIPD_OUTCOME"),
|
||||
'idoutput' => $db->Row("SIPD_OUTPUT"),
|
||||
'kodesubkegiatan_indikator' => $db->Row("SIPD_SUBKEG_INDI"),
|
||||
'uraisubkegiatan_indikator' => "",
|
||||
];
|
||||
}
|
||||
|
||||
if (!empty($data_subkeg)) {
|
||||
$aret['data'] = $data_subkeg;
|
||||
}
|
||||
|
||||
return $aret;
|
||||
}
|
||||
|
||||
/* DALEV PROGRAM */
|
||||
|
||||
function sinkron_dalev_prog($db = null) {
|
||||
$aret = ['status' => "success", 'message' => 'Berhasil singkron data!'];
|
||||
|
||||
$adata = json_decode(stripslashes(html_entity_decode($_POST['prog'])), true);
|
||||
|
||||
foreach ($adata as $_key1 => $prog) {
|
||||
fastInsert("dpa_dalev_prog", $prog);
|
||||
}
|
||||
$db->Query("UPDATE dpa_dalev_prog A,para90_opd B SET A.OPDID=B.OPDID WHERE A.K_OPD=B.K_OPD");
|
||||
return $aret;
|
||||
}
|
||||
|
||||
function ambil_dalev_prog($db = null) {
|
||||
$aret = ['status' => "success", 'message' => 'Berhasil mendapatkan data!', 'action' => $_POST['action'], 'run' => $_POST['run'], 'data' => []];
|
||||
$aopd = [];
|
||||
|
||||
while ($db->Next()) {
|
||||
/*$_tri_kin = []; $_tri_keu = []; $_thn_kin = 0; $_thn_keu = 0;
|
||||
for ($_tri = 1; $_tri <= 4; $_tri++) {
|
||||
$_tri_kin['triwulan_kinerja_'.$_tri] = ($_tri <= $twulan) ? $db->Row("RealF_TW".$_tri) : "";
|
||||
$_tri_keu['triwulan_keuangan_'.$_tri] = ($_tri <= $twulan) ? (float)$db->Row("RealK_TW".$_tri) : 0;
|
||||
$_thn_kin += ($_tri <= $twulan) ? (float)$db->Row("RealF_TW".$_tri) : 0;
|
||||
$_thn_keu += ($_tri <= $twulan) ? (float)$db->Row("RealK_TW".$_tri) : 0;
|
||||
}
|
||||
//komulatif / positif / negatif / rata-rata
|
||||
switch ($db->Row("Status", "komulatif")) {
|
||||
case "komulatif":
|
||||
break;
|
||||
case "rata-rata":
|
||||
$_thn_kin = $_thn_kin / $twulan;
|
||||
break;
|
||||
default:
|
||||
$_thn_kin = (float)$db->Row("RealK_TW".$twulan);
|
||||
}*/
|
||||
/* coding js
|
||||
|
||||
const tahun = $('#modal-realisasi').data('current-tahun') || tahun_sekarang;
|
||||
const info = rowData;
|
||||
const tipeData = info.tipe_data || 'numeric';
|
||||
const isNumeric = isNumericTipeData(tipeData);
|
||||
|
||||
const triwulan = {};
|
||||
for (let i = 1; i <= 4; i++) {
|
||||
if (tipeData === 'rasio') {
|
||||
// Rasio: dua input dengan separator ":"
|
||||
const valBawah = $(`#triwulan_${i}_bawah`).val();
|
||||
const valAtas = $(`#triwulan_${i}_atas`).val();
|
||||
// Hanya kirim jika user benar-benar mengisi (minimal salah satu ada nilai)
|
||||
// Jika salah satu kosong, gunakan '0' sebagai fallback
|
||||
// Jika keduanya kosong, tidak akan masuk ke sini (hasil: tidak kirim)
|
||||
if (valBawah || valAtas) {
|
||||
triwulan[`triwulan_${i}`] = `${valBawah || '0'}:${valAtas || '0'}`;
|
||||
}
|
||||
} else if (isNumeric) {
|
||||
// Numeric dan range: 1 input dengan format angka
|
||||
const rawVal = $(`#triwulan_${i}`).val();
|
||||
// Hanya kirim jika user benar-benar mengisi
|
||||
if (rawVal !== null && rawVal !== '') {
|
||||
const val = unformatRupiahRealisasi(rawVal);
|
||||
triwulan[`triwulan_${i}`] = val;
|
||||
}
|
||||
} else {
|
||||
// enum_v2 dan lainnya
|
||||
const raw = $(`#triwulan_${i}`).val();
|
||||
// Hanya kirim jika ada nilai
|
||||
if (raw !== null && raw !== undefined && raw !== '') {
|
||||
triwulan[`triwulan_${i}`] = raw.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let realisasiTahunan = '';
|
||||
const selectedFormula = $('#info-status-kinerja').val() || (isNumeric ? 'komulatif' : 'positif');
|
||||
if (isNumeric) {
|
||||
realisasiTahunan = calculateNumericRealisasiByFormula(selectedFormula, triwulan);
|
||||
} else {
|
||||
// non-numeric: set from last non-empty triwulan as string
|
||||
realisasiTahunan = getLastNonEmptyTriwulanString();
|
||||
}
|
||||
const targetRealisasi = {};
|
||||
years.forEach((year, idx) => {
|
||||
targetRealisasi[`target_${year}`] = $(`#target_${year}`).val();
|
||||
const rVal = $(`#realisasi_${year}`).val();
|
||||
if (tipeData === 'rasio') {
|
||||
// Untuk rasio: kirim sebagai string dengan format "pembilang:pembanding"
|
||||
// Jika kosong, kirim empty string (bukan '0:0')
|
||||
targetRealisasi[`realisasi_${year}`] = (rVal != null && rVal !== '') ? rVal.toString() : '';
|
||||
} else if (isNumeric) {
|
||||
// Untuk numeric: jika kosong, kirim empty string (bukan 0)
|
||||
// Jika user benar-benar input 0, tetap kirim 0 (nilai valid)
|
||||
if (rVal == null || rVal === '') {
|
||||
targetRealisasi[`realisasi_${year}`] = '';
|
||||
} else {
|
||||
const numVal = unformatRupiahRealisasi(rVal);
|
||||
targetRealisasi[`realisasi_${year}`] = numVal;
|
||||
}
|
||||
} else {
|
||||
targetRealisasi[`realisasi_${year}`] = rVal != null ? rVal.toString() : '';
|
||||
}
|
||||
targetRealisasi[`target_${idx}`] = $(`#target_${year}`).val();
|
||||
});
|
||||
const statusRenstraSubmit = $('#info-status-renstra').val(),
|
||||
statusRkpdSubmit = statusRenstraSubmit === 'negatif' ? 'negatif' : $('#info-status-kinerja').val();
|
||||
const payload = {
|
||||
tahun: tahun,
|
||||
kodeskpd: info.kodeskpd,
|
||||
kodebidang: info.kodebidang || '',
|
||||
kodeprogram: info.kodeprogram,
|
||||
idoutcome: info.idoutcome || info.id || '',
|
||||
kodeprogram_indikator: info.kodeindikator_program || '',
|
||||
uraiprogram_indikator: info.uraiindikator_program || '',
|
||||
formula: statusRkpdSubmit,
|
||||
status: statusRkpdSubmit,
|
||||
status_rkpd: statusRkpdSubmit,
|
||||
status_renstra: statusRenstraSubmit,
|
||||
baseline: $('#info-baseline').val(),
|
||||
satuan: $('#info-satuan').val(),
|
||||
tipe_data: info.tipe_data || 'numeric',
|
||||
target_realisasi: targetRealisasi,
|
||||
triwulan: triwulan,
|
||||
realisasi_tahunan: realisasiTahunan
|
||||
};
|
||||
*/
|
||||
$data_prog[] = [
|
||||
'tahun' => $tahun,
|
||||
'kodeskpd' => $db->Row("K_OPD"),
|
||||
'kodebidang' => $db->Row("K_Bidu"),
|
||||
'kodeprogram' => $db->Row("K_Prog"),
|
||||
'idoutcome' => $db->Row("SIPD_OUTCOME"),
|
||||
'formula' => $db->Row("Status"), //#info-status-kinerja
|
||||
'status' => $db->Row("Status"), //#info-status-kinerja
|
||||
'status_rkpd' => $db->Row("Status"), //#info-status-kinerja
|
||||
//'status_renstra' => "komulatif", //#info-status-renstra
|
||||
'baseline' => $_tri_kin, //#info-baseline ?
|
||||
'satuan' => $_tri_keu, //#info-satuan ?
|
||||
'tipe_data' => $_thn_kin, // ? || 'numeric',
|
||||
'target_realisasi' => 0, // ?
|
||||
'triwulan' => 0, // ?
|
||||
'realisasi_tahunan' => 0, // ?
|
||||
'kodeprogram_indikator' => $db->Row("SIPD_PROG_INDI"),
|
||||
'uraiprogram_indikator' => "",
|
||||
];
|
||||
}
|
||||
|
||||
if (!empty($data_prog)) {
|
||||
$aret['data'] = $data_prog;
|
||||
}
|
||||
|
||||
return $aret;
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user