fix data and dashboard count and sum
This commit is contained in:
66
app/Console/Commands/SyncDashboardPbg.php
Normal file
66
app/Console/Commands/SyncDashboardPbg.php
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use App\Services\ServiceGoogleSheet;
|
||||||
|
use App\Models\BigdataResume;
|
||||||
|
use App\Models\ImportDatasource;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class SyncDashboardPbg extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'app:sync-dashboard-pbg';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Command description';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$import_datasource = ImportDatasource::create([
|
||||||
|
'message' => 'Initiating sync dashboard pbg...',
|
||||||
|
'response_body' => null,
|
||||||
|
'status' => 'processing',
|
||||||
|
'start_time' => now(),
|
||||||
|
'failed_uuid' => null
|
||||||
|
]);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$service = new ServiceGoogleSheet();
|
||||||
|
|
||||||
|
$data_setting_result = $service->get_big_resume_data();
|
||||||
|
Log::info('Data setting result: ' . json_encode($data_setting_result));
|
||||||
|
BigdataResume::generateResumeData($import_datasource->id, "simbg", $data_setting_result);
|
||||||
|
|
||||||
|
$import_datasource->update([
|
||||||
|
'status' => 'success',
|
||||||
|
'message' => 'Sync dashboard pbg completed successfully.',
|
||||||
|
'finish_time' => now()
|
||||||
|
]);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error('Sync dashboard pbg failed: ' . $e->getMessage(), ['trace' => $e->getTraceAsString()]);
|
||||||
|
|
||||||
|
// Update status to failed
|
||||||
|
if (isset($import_datasource)) {
|
||||||
|
$import_datasource->update([
|
||||||
|
'status' => 'failed',
|
||||||
|
'message' => 'Sync dashboard pbg failed.',
|
||||||
|
'finish_time' => now()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,14 +23,15 @@ class BigDataResumeController extends Controller
|
|||||||
{
|
{
|
||||||
try{
|
try{
|
||||||
$filterDate = $request->get("filterByDate");
|
$filterDate = $request->get("filterByDate");
|
||||||
|
$type = $request->get("type");
|
||||||
|
|
||||||
if (!$filterDate || $filterDate === "latest") {
|
if (!$filterDate || $filterDate === "latest") {
|
||||||
$big_data_resume = BigdataResume::where('year', 'leader')->latest()->first();
|
$big_data_resume = BigdataResume::where('year', $type)->latest()->first();
|
||||||
if (!$big_data_resume) {
|
if (!$big_data_resume) {
|
||||||
return $this->response_empty_resume();
|
return $this->response_empty_resume();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$big_data_resume = BigdataResume::where('year', 'leader')
|
$big_data_resume = BigdataResume::where('year', $type)
|
||||||
->whereDate('created_at', $filterDate)
|
->whereDate('created_at', $filterDate)
|
||||||
->orderBy('id', 'desc')
|
->orderBy('id', 'desc')
|
||||||
->first();
|
->first();
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ class RequestAssignmentController extends Controller
|
|||||||
$query = PbgTask::with([
|
$query = PbgTask::with([
|
||||||
'attachments' => function ($q) {
|
'attachments' => function ($q) {
|
||||||
$q->whereIn('pbg_type', ['berita_acara', 'bukti_bayar']);
|
$q->whereIn('pbg_type', ['berita_acara', 'bukti_bayar']);
|
||||||
}
|
},
|
||||||
|
'pbg_task_retributions'
|
||||||
])->orderBy('id', 'desc');
|
])->orderBy('id', 'desc');
|
||||||
|
|
||||||
if ($request->has('filter') && !empty($request->get('filter'))) {
|
if ($request->has('filter') && !empty($request->get('filter'))) {
|
||||||
@@ -34,7 +35,8 @@ class RequestAssignmentController extends Controller
|
|||||||
case 'non-business':
|
case 'non-business':
|
||||||
$query->where(function ($q) {
|
$query->where(function ($q) {
|
||||||
$q->where(function ($q2) {
|
$q->where(function ($q2) {
|
||||||
$q2->whereRaw("LOWER(function_type) != ?", ['sebagai tempat usaha'])
|
$q2->whereRaw("LOWER(function_type) NOT LIKE ?", ['%fungsi usaha%'])
|
||||||
|
->whereRaw("LOWER(function_type) NOT LIKE ?", ['%sebagai tempat usaha%'])
|
||||||
->whereRaw("status != ?", 20)
|
->whereRaw("status != ?", 20)
|
||||||
->orWhereNull('function_type');
|
->orWhereNull('function_type');
|
||||||
});
|
});
|
||||||
@@ -43,8 +45,11 @@ class RequestAssignmentController extends Controller
|
|||||||
|
|
||||||
case 'business':
|
case 'business':
|
||||||
$query->where(function ($q) {
|
$query->where(function ($q) {
|
||||||
$q->whereRaw("LOWER(function_type) = ?", ['sebagai tempat usaha'])
|
$q->where(function ($q2) {
|
||||||
->whereRaw("status != ?", 20);
|
$q2->whereRaw("LOWER(function_type) LIKE ?", ['%fungsi usaha%'])
|
||||||
|
->orWhereRaw("LOWER(function_type) LIKE ?", ['%sebagai tempat usaha%'])
|
||||||
|
->whereRaw("status != ?", 20);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ class RequestAssignmentResouce extends JsonResource
|
|||||||
->where('pbg_type', 'bukti_bayar')
|
->where('pbg_type', 'bukti_bayar')
|
||||||
->sortByDesc('created_at')
|
->sortByDesc('created_at')
|
||||||
->first(),
|
->first(),
|
||||||
|
'pbg_task_retributions' => $this->pbg_task_retributions,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ class ScrapingDataJob implements ShouldQueue
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
// Run the scraping services
|
// Run the scraping services
|
||||||
// $service_google_sheet->run_service();
|
$service_google_sheet->run_service();
|
||||||
// $service_pbg_task->run_service();
|
$service_pbg_task->run_service();
|
||||||
try{
|
try{
|
||||||
$service_tab_pbg_task->run_service();
|
$service_tab_pbg_task->run_service();
|
||||||
}catch(\Exception $e){
|
}catch(\Exception $e){
|
||||||
|
|||||||
@@ -38,28 +38,30 @@ class BigdataResume extends Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static function generateResumeData($import_datasource_id, $year, $data_setting){
|
public static function generateResumeData($import_datasource_id, $year, $data_setting){
|
||||||
$stats = PbgTask::with(['googleSheet', 'pbg_task_retributions'])
|
$stats = PbgTask::with(['pbg_task_retributions'])
|
||||||
->leftJoin('pbg_task_retributions as ptr', 'pbg_task.uuid', '=', 'ptr.pbg_task_uid')
|
->leftJoin('pbg_task_retributions as ptr', 'pbg_task.uuid', '=', 'ptr.pbg_task_uid')
|
||||||
->leftJoin('pbg_task_google_sheet as ptgs', 'pbg_task.registration_number', '=', 'ptgs.no_registrasi')
|
|
||||||
->when($year !== 'all', function ($query) use ($year) {
|
|
||||||
$query->whereYear('pbg_task.task_created_at', (int) $year);
|
|
||||||
})
|
|
||||||
->selectRaw("
|
->selectRaw("
|
||||||
COUNT(CASE WHEN LOWER(TRIM(ptgs.status_verifikasi)) = 'selesai verifikasi' THEN 1 END) AS verified_count,
|
COUNT(CASE WHEN pbg_task.status = 20 THEN 1 END) AS verified_count,
|
||||||
SUM(CASE WHEN LOWER(TRIM(ptgs.status_verifikasi)) = 'selesai verifikasi' THEN ptr.nilai_retribusi_bangunan ELSE 0 END) AS verified_total,
|
SUM(CASE WHEN pbg_task.status = 20 THEN ptr.nilai_retribusi_bangunan ELSE 0 END) AS verified_total,
|
||||||
|
|
||||||
COUNT(CASE WHEN LOWER(TRIM(ptgs.status_verifikasi)) != 'selesai verifikasi' OR ptgs.status_verifikasi IS NULL THEN 1 END) AS non_verified_count,
|
COUNT(CASE WHEN pbg_task.status != 20 OR pbg_task.status IS NULL THEN 1 END) AS non_verified_count,
|
||||||
SUM(CASE WHEN LOWER(TRIM(ptgs.status_verifikasi)) != 'selesai verifikasi' OR ptgs.status_verifikasi IS NULL THEN ptr.nilai_retribusi_bangunan ELSE 0 END) AS non_verified_total,
|
SUM(CASE WHEN pbg_task.status != 20 OR pbg_task.status IS NULL THEN ptr.nilai_retribusi_bangunan ELSE 0 END) AS non_verified_total,
|
||||||
|
|
||||||
COUNT(CASE WHEN (LOWER(TRIM(ptgs.status_verifikasi)) != 'selesai verifikasi' OR ptgs.status_verifikasi IS NULL)
|
COUNT(CASE WHEN (LOWER(TRIM(pbg_task.function_type)) LIKE '%fungsi usaha%'
|
||||||
AND LOWER(TRIM(pbg_task.function_type)) = 'sebagai tempat usaha' THEN 1 END) AS business_count,
|
OR LOWER(TRIM(pbg_task.function_type)) LIKE '%sebagai tempat usaha%')
|
||||||
SUM(CASE WHEN (LOWER(TRIM(ptgs.status_verifikasi)) != 'selesai verifikasi' OR ptgs.status_verifikasi IS NULL)
|
AND pbg_task.status != 20 THEN 1 END) AS business_count,
|
||||||
AND LOWER(TRIM(pbg_task.function_type)) = 'sebagai tempat usaha' THEN ptr.nilai_retribusi_bangunan ELSE 0 END) AS business_total,
|
SUM(CASE WHEN (LOWER(TRIM(pbg_task.function_type)) LIKE '%fungsi usaha%'
|
||||||
|
OR LOWER(TRIM(pbg_task.function_type)) LIKE '%sebagai tempat usaha%')
|
||||||
|
AND pbg_task.status != 20 THEN ptr.nilai_retribusi_bangunan ELSE 0 END) AS business_total,
|
||||||
|
|
||||||
COUNT(CASE WHEN (LOWER(TRIM(ptgs.status_verifikasi)) != 'selesai verifikasi' OR ptgs.status_verifikasi IS NULL)
|
COUNT(CASE WHEN ((LOWER(TRIM(pbg_task.function_type)) NOT LIKE '%fungsi usaha%'
|
||||||
AND (LOWER(TRIM(pbg_task.function_type)) != 'sebagai tempat usaha' OR pbg_task.function_type IS NULL) THEN 1 END) AS non_business_count,
|
AND LOWER(TRIM(pbg_task.function_type)) NOT LIKE '%sebagai tempat usaha%')
|
||||||
SUM(CASE WHEN (LOWER(TRIM(ptgs.status_verifikasi)) != 'selesai verifikasi' OR ptgs.status_verifikasi IS NULL)
|
OR pbg_task.function_type IS NULL)
|
||||||
AND (LOWER(TRIM(pbg_task.function_type)) != 'sebagai tempat usaha' OR pbg_task.function_type IS NULL) THEN ptr.nilai_retribusi_bangunan ELSE 0 END) AS non_business_total
|
AND pbg_task.status != 20 THEN 1 END) AS non_business_count,
|
||||||
|
SUM(CASE WHEN ((LOWER(TRIM(pbg_task.function_type)) NOT LIKE '%fungsi usaha%'
|
||||||
|
AND LOWER(TRIM(pbg_task.function_type)) NOT LIKE '%sebagai tempat usaha%')
|
||||||
|
OR pbg_task.function_type IS NULL)
|
||||||
|
AND pbg_task.status != 20 THEN ptr.nilai_retribusi_bangunan ELSE 0 END) AS non_business_total
|
||||||
")
|
")
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
@@ -77,10 +79,6 @@ class BigdataResume extends Model
|
|||||||
$query = PbgTask::leftJoin('pbg_task_retributions as ptr', 'pbg_task.uuid', '=', 'ptr.pbg_task_uid')
|
$query = PbgTask::leftJoin('pbg_task_retributions as ptr', 'pbg_task.uuid', '=', 'ptr.pbg_task_uid')
|
||||||
->selectRaw('COUNT(DISTINCT pbg_task.id) as task_count, SUM(ptr.nilai_retribusi_bangunan) as total_retribution');
|
->selectRaw('COUNT(DISTINCT pbg_task.id) as task_count, SUM(ptr.nilai_retribusi_bangunan) as total_retribution');
|
||||||
|
|
||||||
if ($year !== 'all') {
|
|
||||||
$query->whereYear('pbg_task.task_created_at', (int) $year);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $query->first();
|
return $query->first();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -98,10 +96,6 @@ class BigdataResume extends Model
|
|||||||
SUM(CASE WHEN sp.id IS NOT NULL AND ptr.id IS NOT NULL THEN ptr.nilai_retribusi_bangunan ELSE 0 END) as total_retribution
|
SUM(CASE WHEN sp.id IS NOT NULL AND ptr.id IS NOT NULL THEN ptr.nilai_retribusi_bangunan ELSE 0 END) as total_retribution
|
||||||
');
|
');
|
||||||
|
|
||||||
if ($year !== 'all') {
|
|
||||||
$query->whereYear('pbg_task.task_created_at', (int) $year);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $query->first();
|
return $query->first();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -356,39 +356,63 @@ class ServiceGoogleSheet
|
|||||||
|
|
||||||
public function get_big_resume_data(){
|
public function get_big_resume_data(){
|
||||||
try {
|
try {
|
||||||
$sheet_big_data = $this->get_data_by_sheet();
|
$sections = [
|
||||||
$data_setting_result = []; // Initialize result storage
|
'TARGET_PAD' => "TARGET PAD 2024",
|
||||||
|
'KEKURANGAN_POTENSI' => "DEVIASI TARGET DENGAN POTENSI TOTAL BERKAS",
|
||||||
|
'TOTAL_POTENSI_BERKAS' => "•TOTAL BERKAS 2025",
|
||||||
|
'BELUM_TERVERIFIKASI' => "•BERKAS AKTUAL BELUM TERVERIFIKASI (POTENSI):",
|
||||||
|
'TERVERIFIKASI' => "•BERKAS AKTUAL TERVERIFIKASI DINAS TEKNIS 2025:",
|
||||||
|
'NON_USAHA' => "•NON USAHA: HUNIAN, SOSBUD, KEAGAMAAN",
|
||||||
|
'USAHA' => "•USAHA: USAHA, CAMPURAN, KOLEKTIF, PRASARANA",
|
||||||
|
'PROSES_DINAS_TEKNIS' => "•TERPROSES DI DPUTR: belum selesai rekomtek'",
|
||||||
|
'WAITING_KLIK_DPMPTSP' => "•TERPROSES DI PTSP: Pengiriman SKRD/ Validasi di PTSP",
|
||||||
|
'REALISASI_TERBIT_PBG' => "•BERKAS YANG TERBIT PBG 2025:"
|
||||||
|
];
|
||||||
|
|
||||||
$found_section = null; // Track which section is found
|
$result = [];
|
||||||
|
|
||||||
foreach ($sheet_big_data as $row) {
|
foreach ($sections as $key => $identifier) {
|
||||||
// Check for section headers
|
$values = $this->get_values_from_section($identifier, [10, 11], 8);
|
||||||
if (in_array("•PROSES PENERBITAN:", $row)) {
|
|
||||||
$found_section = "MENUNGGU_KLIK_DPMPTSP";
|
if (!empty($values)) {
|
||||||
} elseif (in_array("•BERKAS AKTUAL TERVERIFIKASI DINAS TEKNIS 2024:", $row)) {
|
$result[$key] = [
|
||||||
$found_section = "REALISASI_TERBIT_PBG";
|
'identifier' => $identifier,
|
||||||
} elseif (in_array("•TERPROSES DI DPUTR: belum selesai rekomtek'", $row)) {
|
'total' => $values[0] ?? null, // index 0 untuk total/jumlah
|
||||||
$found_section = "PROSES_DINAS_TEKNIS";
|
'nominal' => $values[1] ?? null // index 1 untuk nominal
|
||||||
}
|
];
|
||||||
|
|
||||||
// If a section is found and we reach "Grand Total", save the corresponding values
|
|
||||||
if ($found_section && isset($row[0]) && trim($row[0]) === "Grand Total") {
|
|
||||||
if ($found_section === "MENUNGGU_KLIK_DPMPTSP") {
|
|
||||||
$data_setting_result["MENUNGGU_KLIK_DPMPTSP_COUNT"] = $this->convertToInteger($row[2]) ?? null;
|
|
||||||
$data_setting_result["MENUNGGU_KLIK_DPMPTSP_SUM"] = $this->convertToDecimal($row[3]) ?? null;
|
|
||||||
} elseif ($found_section === "REALISASI_TERBIT_PBG") {
|
|
||||||
$data_setting_result["REALISASI_TERBIT_PBG_COUNT"] = $this->convertToInteger($row[2]) ?? null;
|
|
||||||
$data_setting_result["REALISASI_TERBIT_PBG_SUM"] = $this->convertToDecimal($row[4]) ?? null;
|
|
||||||
} elseif ($found_section === "PROSES_DINAS_TEKNIS") {
|
|
||||||
$data_setting_result["PROSES_DINAS_TEKNIS_COUNT"] = $this->convertToInteger($row[2]) ?? null;
|
|
||||||
$data_setting_result["PROSES_DINAS_TEKNIS_SUM"] = $this->convertToDecimal($row[3]) ?? null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset section tracking after capturing "Grand Total"
|
|
||||||
$found_section = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $data_setting_result;
|
|
||||||
|
// Save data settings
|
||||||
|
$dataSettings = [
|
||||||
|
'TARGET_PAD' => $this->convertToDecimal($result['TARGET_PAD']['nominal']) ?? 0,
|
||||||
|
'KEKURANGAN_POTENSI' => $this->convertToDecimal($result['KEKURANGAN_POTENSI']['nominal']) ?? 0,
|
||||||
|
'REALISASI_TERBIT_PBG_COUNT' => $this->convertToInteger($result['REALISASI_TERBIT_PBG']['total']) ?? 0,
|
||||||
|
'REALISASI_TERBIT_PBG_SUM' => $this->convertToDecimal($result['REALISASI_TERBIT_PBG']['nominal']) ?? 0,
|
||||||
|
'MENUNGGU_KLIK_DPMPTSP_COUNT' => $this->convertToInteger($result['WAITING_KLIK_DPMPTSP']['total']) ?? 0,
|
||||||
|
'MENUNGGU_KLIK_DPMPTSP_SUM' => $this->convertToDecimal($result['WAITING_KLIK_DPMPTSP']['nominal']) ?? 0,
|
||||||
|
'PROSES_DINAS_TEKNIS_COUNT' => $this->convertToInteger($result['PROSES_DINAS_TEKNIS']['total']) ?? 0,
|
||||||
|
'PROSES_DINAS_TEKNIS_SUM' => $this->convertToDecimal($result['PROSES_DINAS_TEKNIS']['nominal']) ?? 0,
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($dataSettings as $key => $value) {
|
||||||
|
// Ensure value is not null before saving to database
|
||||||
|
$processedValue = 0; // Default to 0 instead of null
|
||||||
|
if ($value !== null && $value !== '') {
|
||||||
|
// Try to convert to appropriate type based on key name
|
||||||
|
if (strpos($key, '_COUNT') !== false) {
|
||||||
|
$processedValue = $this->convertToInteger($value) ?? 0;
|
||||||
|
} else {
|
||||||
|
$processedValue = $this->convertToDecimal($value) ?? 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DataSetting::updateOrCreate(
|
||||||
|
['key' => $key],
|
||||||
|
['value' => $processedValue]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $dataSettings;
|
||||||
}catch(Exception $exception){
|
}catch(Exception $exception){
|
||||||
Log::error("Error getting big resume data", ['error' => $exception->getMessage()]);
|
Log::error("Error getting big resume data", ['error' => $exception->getMessage()]);
|
||||||
throw $exception;
|
throw $exception;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class BigData {
|
|||||||
async getBigDataResume(filterByDate) {
|
async getBigDataResume(filterByDate) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterByDate}`,
|
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterByDate}&type=simbg`,
|
||||||
{
|
{
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class LackOfPotential {
|
|||||||
async getDataTotalPotensi(filterDate) {
|
async getDataTotalPotensi(filterDate) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterDate}`,
|
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterDate}&type=leader`,
|
||||||
{
|
{
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class BigData {
|
|||||||
async getBigDataResume(filterByDate) {
|
async getBigDataResume(filterByDate) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterByDate}`,
|
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterByDate}&&type=leader`,
|
||||||
{
|
{
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ class DashboardPBG {
|
|||||||
async getResume(filterByDate) {
|
async getResume(filterByDate) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterByDate}`,
|
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterByDate}&type=leader`,
|
||||||
{
|
{
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
@@ -15,8 +15,10 @@ class DashboardPotentialInsideSystem {
|
|||||||
this.reklameCount = this.allCountData.total_reklame ?? 0;
|
this.reklameCount = this.allCountData.total_reklame ?? 0;
|
||||||
this.pdamCount = this.allCountData.total_pdam ?? 0;
|
this.pdamCount = this.allCountData.total_pdam ?? 0;
|
||||||
this.tataRuangCount = this.allCountData.total_tata_ruang ?? 0;
|
this.tataRuangCount = this.allCountData.total_tata_ruang ?? 0;
|
||||||
this.tataRuangUsahaCount = this.allCountData.total_tata_ruang_usaha ?? 0;
|
this.tataRuangUsahaCount =
|
||||||
this.tataRuangNonUsahaCount = this.allCountData.total_tata_ruang_non_usaha ?? 0;
|
this.allCountData.total_tata_ruang_usaha ?? 0;
|
||||||
|
this.tataRuangNonUsahaCount =
|
||||||
|
this.allCountData.total_tata_ruang_non_usaha ?? 0;
|
||||||
|
|
||||||
let dataReportTourism = this.allCountData.data_report;
|
let dataReportTourism = this.allCountData.data_report;
|
||||||
|
|
||||||
@@ -51,7 +53,7 @@ class DashboardPotentialInsideSystem {
|
|||||||
async getDataTotalPotensi(filterDate) {
|
async getDataTotalPotensi(filterDate) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterDate}`,
|
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterDate}&type=leader`,
|
||||||
{
|
{
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class DashboardPotentialOutsideSystem {
|
|||||||
async getBigDataResume(filterDate) {
|
async getBigDataResume(filterDate) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterDate}`,
|
`${GlobalConfig.apiHost}/api/bigdata-resume?filterByDate=${filterDate}&type=leader`,
|
||||||
{
|
{
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export function addThousandSeparators(value, fractionDigits = 2) {
|
|||||||
|
|
||||||
// Convert to string first if it's a number
|
// Convert to string first if it's a number
|
||||||
if (typeof value === "number") {
|
if (typeof value === "number") {
|
||||||
return new Intl.NumberFormat("en-US", {
|
return new Intl.NumberFormat("id-ID", {
|
||||||
minimumFractionDigits: fractionDigits,
|
minimumFractionDigits: fractionDigits,
|
||||||
maximumFractionDigits: fractionDigits,
|
maximumFractionDigits: fractionDigits,
|
||||||
}).format(value);
|
}).format(value);
|
||||||
@@ -26,8 +26,8 @@ export function addThousandSeparators(value, fractionDigits = 2) {
|
|||||||
|
|
||||||
if (isNaN(number)) return null; // Return null if conversion fails
|
if (isNaN(number)) return null; // Return null if conversion fails
|
||||||
|
|
||||||
// Format the number with thousand separators
|
// Format the number with Indonesian format (dot for thousands, comma for decimal)
|
||||||
return new Intl.NumberFormat("en-US", {
|
return new Intl.NumberFormat("id-ID", {
|
||||||
minimumFractionDigits: fractionDigits,
|
minimumFractionDigits: fractionDigits,
|
||||||
maximumFractionDigits: fractionDigits,
|
maximumFractionDigits: fractionDigits,
|
||||||
}).format(number);
|
}).format(number);
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { Grid, html } from "gridjs/dist/gridjs.umd.js";
|
import { Grid, html } from "gridjs/dist/gridjs.umd.js";
|
||||||
import GlobalConfig from "../global-config";
|
import GlobalConfig from "../global-config";
|
||||||
import { Dropzone } from "dropzone";
|
import { Dropzone } from "dropzone";
|
||||||
|
import { addThousandSeparators } from "../global-config";
|
||||||
|
|
||||||
Dropzone.autoDiscover = false;
|
Dropzone.autoDiscover = false;
|
||||||
|
|
||||||
class PbgTasks {
|
class PbgTasks {
|
||||||
@@ -87,6 +89,9 @@ class PbgTasks {
|
|||||||
"Function Type",
|
"Function Type",
|
||||||
"Consultation Type",
|
"Consultation Type",
|
||||||
{ name: "Due Date" },
|
{ name: "Due Date" },
|
||||||
|
{
|
||||||
|
name: "Retribution",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "Action",
|
name: "Action",
|
||||||
formatter: (cell) => {
|
formatter: (cell) => {
|
||||||
@@ -191,6 +196,12 @@ class PbgTasks {
|
|||||||
item.function_type,
|
item.function_type,
|
||||||
item.consultation_type,
|
item.consultation_type,
|
||||||
item.due_date,
|
item.due_date,
|
||||||
|
item.pbg_task_retributions
|
||||||
|
? addThousandSeparators(
|
||||||
|
item.pbg_task_retributions
|
||||||
|
.nilai_retribusi_bangunan
|
||||||
|
)
|
||||||
|
: "-",
|
||||||
item,
|
item,
|
||||||
]),
|
]),
|
||||||
total: (data) => data.meta.total,
|
total: (data) => data.meta.total,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<div class="d-flex justify-content-between align-items-center mt-3 ms-2">
|
<div class="d-flex justify-content-between align-items-center mt-3 ms-2">
|
||||||
<h2 class="text-danger m-0">
|
<h2 class="text-danger m-0">
|
||||||
ANALISA BIG DATA PROSES PBG <br>
|
ANALISA BIG DATA PROSES PBG <br>
|
||||||
MELALUI APLIKASI SIBEDAS PBG
|
MELALUI APLIKASI SIBEDAS PBG (SIMBG)
|
||||||
</h2>
|
</h2>
|
||||||
<div class="text-black text-end d-flex flex-column align-items-end me-3">
|
<div class="text-black text-end d-flex flex-column align-items-end me-3">
|
||||||
<span class="fs-5">Terakhir di update - {{$latest_created}}</span>
|
<span class="fs-5">Terakhir di update - {{$latest_created}}</span>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<div class="d-flex justify-content-between align-items-center mt-3 ms-2">
|
<div class="d-flex justify-content-between align-items-center mt-3 ms-2">
|
||||||
<h2 class="text-danger m-0">
|
<h2 class="text-danger m-0">
|
||||||
ANALISA BIG DATA PROSES PBG <br>
|
ANALISA BIG DATA PROSES PBG <br>
|
||||||
MELALUI APLIKASI SIBEDAS PBG
|
MELALUI APLIKASI SIBEDAS PBG (LEADER)
|
||||||
</h2>
|
</h2>
|
||||||
<div class="text-black text-end d-flex flex-column align-items-end me-3">
|
<div class="text-black text-end d-flex flex-column align-items-end me-3">
|
||||||
<span class="fs-5">Terakhir di update - {{$latest_created}}</span>
|
<span class="fs-5">Terakhir di update - {{$latest_created}}</span>
|
||||||
|
|||||||
@@ -153,7 +153,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<dt>Nilai SHST</dt>
|
<dt>Nilai SHST</dt>
|
||||||
<dd>{{$data->pbg_task_retributions->nilai_shst}}</dd>
|
<dd>{{ number_format($data->pbg_task_retributions->nilai_shst, 2, ',', '.') }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<dt>Indeks Integrasi</dt>
|
<dt>Indeks Integrasi</dt>
|
||||||
@@ -167,7 +167,7 @@
|
|||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<dt>Nilai Retribusi Bangunan</dt>
|
<dt>Nilai Retribusi Bangunan</dt>
|
||||||
<dd>{{$data->pbg_task_retributions->nilai_retribusi_bangunan}}</dd>
|
<dd>{{ number_format($data->pbg_task_retributions->nilai_retribusi_bangunan, 2, ',', '.') }}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<dt>Nilai Prasarana</dt>
|
<dt>Nilai Prasarana</dt>
|
||||||
@@ -183,7 +183,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<dt>SKRD Amount</dt>
|
<dt>SKRD Amount</dt>
|
||||||
<dd>{{$data->pbg_task_retributions->skrd_amount}}</dd>
|
<dd>{{ number_format($data->pbg_task_retributions->skrd_amount, 2, ',', '.') }}</dd>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user