Compare commits
13 Commits
feat/data-
...
feat/detai
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6307417ae3 | ||
|
|
55dc0751d3 | ||
|
|
97ffd322a1 | ||
|
|
6fb59e58e9 | ||
|
|
7e99d547c8 | ||
|
|
65f82c9bfd | ||
|
|
44ebc20d3c | ||
|
|
b60bbd4290 | ||
|
|
29b705b59c | ||
|
|
95ab8eff7f | ||
|
|
bfc2f7f1f9 | ||
|
|
50f1757a64 | ||
|
|
3309664bae |
@@ -4,6 +4,7 @@ APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_TIMEZONE=UTC
|
||||
APP_URL=http://localhost
|
||||
API_URL=http://localhost:8000
|
||||
|
||||
APP_LOCALE=en
|
||||
APP_FALLBACK_LOCALE=en
|
||||
|
||||
@@ -12,30 +12,34 @@ class DashboardController extends Controller
|
||||
use GlobalApiResponse;
|
||||
|
||||
public function businnessDocument(Request $request){
|
||||
$query = DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Join ke pbg_task_retributions
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->orWhereNull('ptgs.status_verifikasi');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(pt.function_type)) = ?', [strtolower(trim('Sebagai Tempat Usaha'))]);
|
||||
})
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
|
||||
->first();
|
||||
$taskCount = $query->total_data;
|
||||
$query = once(function () {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid')
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->orWhereNull('ptgs.status_verifikasi');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(pt.function_type)) = ?', [strtolower(trim('Sebagai Tempat Usaha'))]);
|
||||
})
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution')
|
||||
->first();
|
||||
});
|
||||
|
||||
$taskCount = $query->total_data ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
$result = [
|
||||
|
||||
return $this->resSuccess([
|
||||
"count" => $taskCount,
|
||||
"total" => $taskTotal
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
]);
|
||||
}
|
||||
public function nonBusinnessDocument(Request $request){
|
||||
|
||||
$query = DB::table('pbg_task AS pt')
|
||||
$query = once( function () {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Join ke pbg_task_retributions
|
||||
->where(function ($query) {
|
||||
@@ -49,53 +53,55 @@ class DashboardController extends Controller
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
|
||||
->first();
|
||||
$taskCount = $query->total_data;
|
||||
});
|
||||
$taskCount = $query->total_data ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
$result = [
|
||||
return $this->resSuccess([
|
||||
"count" => $taskCount,
|
||||
"total" => $taskTotal
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
]);
|
||||
}
|
||||
public function allTaskDocuments(){
|
||||
$query = DB::table('pbg_task')
|
||||
$query = once( function () {
|
||||
return DB::table('pbg_task')
|
||||
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
|
||||
->select(
|
||||
DB::raw('COUNT(DISTINCT pbg_task.id) as task_count'),
|
||||
DB::raw('SUM(pbg_task_retributions.nilai_retribusi_bangunan) as total_retribution')
|
||||
)
|
||||
->first();
|
||||
$taskCount = $query->task_count;
|
||||
$taskTotal = $query->total_retribution;
|
||||
$result = [
|
||||
});
|
||||
$taskCount = $query->task_count ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
return $this->resSuccess([
|
||||
"count" => $taskCount,
|
||||
"total" => $taskTotal
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
]);
|
||||
}
|
||||
|
||||
public function verificationDocuments(){
|
||||
$query = DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Menambahkan join ke pbg_task_retributions
|
||||
->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) = ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution')
|
||||
->first();
|
||||
$query = once( function (){
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Menambahkan join ke pbg_task_retributions
|
||||
->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) = ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution')
|
||||
->first();
|
||||
});
|
||||
|
||||
$taskCount = $query->total_data;
|
||||
$taskTotal = $query->total_retribution;
|
||||
$taskCount = $query->total_data ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
|
||||
$result = [
|
||||
return $this->resSuccess([
|
||||
"count"=> $taskCount,
|
||||
"total"=> $taskTotal
|
||||
];
|
||||
|
||||
return $this->resSuccess($result);
|
||||
]);
|
||||
}
|
||||
|
||||
public function nonVerificationDocuments(){
|
||||
$query = DB::table('pbg_task AS pt')
|
||||
$query = once(function () {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Join tabel pbg_task_retributions
|
||||
->where(function ($query) {
|
||||
@@ -105,16 +111,15 @@ class DashboardController extends Controller
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
|
||||
->first();
|
||||
});
|
||||
|
||||
$taskCount = $query->total_data;
|
||||
$taskCount = $query->total_data ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
|
||||
$result = [
|
||||
return $this->resSuccess([
|
||||
"count"=> $taskCount,
|
||||
"total"=> $taskTotal
|
||||
];
|
||||
|
||||
return $this->resSuccess($result);
|
||||
]);
|
||||
}
|
||||
|
||||
public function pbgTaskDocuments(Request $request){
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Enums\ImportDatasourceStatus;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\PbgTaskMultiStepRequest;
|
||||
use App\Http\Resources\PbgTaskResource;
|
||||
use App\Models\ImportDatasource;
|
||||
use App\Models\PbgTask;
|
||||
use App\Models\PbgTaskGoogleSheet;
|
||||
use App\Services\GoogleSheetService;
|
||||
@@ -68,7 +71,19 @@ class PbgTaskController extends Controller
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
try{
|
||||
$pbg_task = PbgTask::with(['pbg_task_retributions','pbg_task_index_integrations','pbg_task_retributions.pbg_task_prasarana'])->findOrFail($id);
|
||||
return response()->json([
|
||||
"success"=> true,
|
||||
"message"=> "Data ditemukan",
|
||||
"data"=> $pbg_task
|
||||
]);
|
||||
}catch(\Exception $e){
|
||||
return response()->json([
|
||||
"success"=> false,
|
||||
"message"=> $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -99,6 +114,13 @@ class PbgTaskController extends Controller
|
||||
$sheetData = $this->googleSheetService->getSheetDataCollection($totalRowCount);
|
||||
$mapToUpsert = [];
|
||||
$count = 0;
|
||||
|
||||
$import_datasource = ImportDatasource::create([
|
||||
"message" => "initialization",
|
||||
"response_body" => null,
|
||||
"status" => ImportDatasourceStatus::Processing->value,
|
||||
]);
|
||||
|
||||
foreach($sheetData as $data){
|
||||
$mapToUpsert[] =
|
||||
[
|
||||
@@ -217,6 +239,13 @@ class PbgTaskController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
$total_data = count($mapToUpsert);
|
||||
|
||||
$import_datasource->update([
|
||||
"message" => "Successfully imported {$total_data}",
|
||||
"status" => ImportDatasourceStatus::Success->value,
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
@@ -225,6 +254,11 @@ class PbgTaskController extends Controller
|
||||
], 200);
|
||||
}catch(\Exception $ex){
|
||||
DB::rollBack();
|
||||
$import_datasource->update([
|
||||
"message" => "Failed to importing",
|
||||
"response_body" => $ex->getMessage(),
|
||||
"status" => ImportDatasourceStatus::Failed->value,
|
||||
]);
|
||||
return response()->json([
|
||||
"success" => false,
|
||||
"message" => "Gagal menyimpan data",
|
||||
|
||||
@@ -3,11 +3,19 @@
|
||||
namespace App\Http\Controllers\Dashboards;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ImportDatasource;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BigDataController extends Controller
|
||||
{
|
||||
public function index(){
|
||||
return view('dashboards.bigdata');
|
||||
$latest_import_datasource = ImportDatasource::latest()->first();
|
||||
$latest_created = $latest_import_datasource ?
|
||||
$latest_import_datasource->created_at->format("j F Y H:i:s") : null;
|
||||
return view('dashboards.bigdata', compact('latest_created'));
|
||||
}
|
||||
|
||||
public function pbg(){
|
||||
return view('index');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\RequestAssignment;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\PbgTask;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PbgTaskController extends Controller
|
||||
@@ -36,7 +37,8 @@ class PbgTaskController extends Controller
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
return view("pbg_task.show");
|
||||
$data = PbgTask::with(['pbg_task_retributions','pbg_task_index_integrations', 'pbg_task_retributions.pbg_task_prasarana'])->findOrFail($id);
|
||||
return view("pbg_task.show", compact("data"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -8,32 +8,38 @@ use Illuminate\Http\Request;
|
||||
use Exception;
|
||||
class SyncronizeController extends Controller
|
||||
{
|
||||
protected $service_simbg;
|
||||
public function __construct(ServiceSIMBG $service_simbg){
|
||||
$this->service_simbg = $service_simbg;
|
||||
}
|
||||
public function index(Request $request){
|
||||
return view('settings.syncronize.index');
|
||||
}
|
||||
|
||||
public function syncPbgTask(){
|
||||
$res = (new ServiceSIMBG())->syncTaskList();
|
||||
$res = $this->service_simbg->syncTaskList();
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function syncronizeTask(Request $request){
|
||||
$res = (new ServiceSIMBG())->syncTaskList();
|
||||
$res = $this->service_simbg->syncTaskList();
|
||||
return redirect()->back()->with('success', 'Processing completed successfully');
|
||||
}
|
||||
|
||||
public function getUserToken(){
|
||||
$res = (new ServiceSIMBG())->getToken();
|
||||
$res = $this->service_simbg->getToken();
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function syncIndexIntegration($uuid){
|
||||
$res = (new ServiceSIMBG())->syncIndexIntegration($uuid);
|
||||
public function syncIndexIntegration(Request $request, $uuid){
|
||||
$token = $request->get('token');
|
||||
$res = $this->service_simbg->syncIndexIntegration($uuid, $token);
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function syncTaskDetailSubmit($uuid){
|
||||
$res = (new ServiceSIMBG())->syncTaskDetailSubmit($uuid);
|
||||
public function syncTaskDetailSubmit(Request $request, $uuid){
|
||||
$token = $request->get('token');
|
||||
$res = $this->service_simbg->syncTaskDetailSubmit($uuid, $token);
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,11 @@ class PbgTask extends Model
|
||||
'task_created_at'
|
||||
];
|
||||
|
||||
public function retributions(){
|
||||
public function pbg_task_retributions(){
|
||||
return $this->hasOne(PbgTaskRetributions::class, 'pbg_task_uid', 'uuid');
|
||||
}
|
||||
|
||||
public function pbg_task_index_integrations(){
|
||||
return $this->hasOne(PbgTaskIndexIntegrations::class, 'pbg_task_uid', 'uuid');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,4 +21,8 @@ class PbgTaskIndexIntegrations extends Model
|
||||
'indeks_terintegrasi',
|
||||
'total',
|
||||
];
|
||||
|
||||
public function pbg_task(){
|
||||
return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,5 +20,10 @@ class PbgTaskPrasarana extends Model
|
||||
'quantity',
|
||||
'unit',
|
||||
'index_prasarana',
|
||||
'pbg_task_retribution_id'
|
||||
];
|
||||
|
||||
public function pbg_task_retributions(){
|
||||
return $this->hasMany(PbgTaskRetributions::class, 'pbg_task_retribution_id', 'id');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,11 @@ class PbgTaskRetributions extends Model
|
||||
'pbg_task_uid'
|
||||
];
|
||||
|
||||
public function task(){
|
||||
public function pbg_task(){
|
||||
return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid');
|
||||
}
|
||||
|
||||
public function pbg_task_prasarana(){
|
||||
return $this->hasMany(PbgTaskPrasarana::class, 'pbg_task_retribution_id', 'id');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,26 +21,27 @@ class ServiceSIMBG
|
||||
private $password;
|
||||
private $simbg_host;
|
||||
private $fetch_per_page;
|
||||
private $service_client;
|
||||
/**
|
||||
* Create a new class instance.
|
||||
*/
|
||||
public function __construct()
|
||||
public function __construct(ServiceClient $service_client)
|
||||
{
|
||||
$this->email = trim((string) GlobalSetting::where('key','SIMBG_EMAIL')->first()->value);
|
||||
$this->password = trim((string) GlobalSetting::where('key','SIMBG_PASSWORD')->first()->value);
|
||||
$this->simbg_host = trim((string)GlobalSetting::where('key','SIMBG_HOST')->first()->value);
|
||||
$this->fetch_per_page = trim((string)GlobalSetting::where('key','FETCH_PER_PAGE')->first()->value);
|
||||
$this->service_client = new ServiceClient($this->simbg_host);
|
||||
}
|
||||
|
||||
public function getToken(){
|
||||
$clientHelper = new ServiceClient($this->simbg_host);
|
||||
$url = "/api/user/v1/auth/login/";
|
||||
$body = [
|
||||
'email' => $this->email,
|
||||
'password' => $this->password,
|
||||
];
|
||||
|
||||
$res = $clientHelper->post($url, $body);
|
||||
$res = $this->service_client->post($url, $body);
|
||||
if(!$res->original['success']){
|
||||
Log::error("Token not retrieved ", ['response' => $res]);
|
||||
return null;
|
||||
@@ -50,14 +51,13 @@ class ServiceSIMBG
|
||||
|
||||
public function syncIndexIntegration($uuid, $token)
|
||||
{
|
||||
$clientHelper = new ServiceClient($this->simbg_host);
|
||||
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/indeks-terintegrasi/";
|
||||
|
||||
$headers = [
|
||||
'Authorization' => "Bearer " . $token,
|
||||
];
|
||||
|
||||
$res = $clientHelper->get($url, $headers);
|
||||
$res = $this->service_client->get($url, $headers);
|
||||
|
||||
Log::info("response index integration", ['res' => $res]);
|
||||
|
||||
@@ -98,7 +98,6 @@ class ServiceSIMBG
|
||||
|
||||
public function syncTaskList()
|
||||
{
|
||||
$clientHelper = new ServiceClient($this->simbg_host);
|
||||
$initResToken = $this->getToken();
|
||||
|
||||
$importDatasource = ImportDatasource::create([
|
||||
@@ -117,7 +116,7 @@ class ServiceSIMBG
|
||||
$headers = ['Authorization' => "Bearer " . $apiToken];
|
||||
|
||||
$url = "/api/pbg/v1/list/?page=1&size={$this->fetch_per_page}&sort=ASC";
|
||||
$initialResponse = $clientHelper->get($url, $headers);
|
||||
$initialResponse = $this->service_client->get($url, $headers);
|
||||
|
||||
$totalPage = $initialResponse->original['data']['total_page'] ?? 0;
|
||||
if ($totalPage == 0) {
|
||||
@@ -130,7 +129,7 @@ class ServiceSIMBG
|
||||
|
||||
$savedCount = $failedCount = 0;
|
||||
|
||||
for ($currentPage = 50; $currentPage <= $totalPage; $currentPage++) {
|
||||
for ($currentPage = 1; $currentPage <= $totalPage; $currentPage++) {
|
||||
$pageUrl = "/api/pbg/v1/list/?page={$currentPage}&size={$this->fetch_per_page}&sort=ASC";
|
||||
$getToken = $this->getToken();
|
||||
Log::info("response index integration", ['currentPage' => $currentPage]);
|
||||
@@ -143,7 +142,7 @@ class ServiceSIMBG
|
||||
}
|
||||
$token = $getToken->original['data']['token']['access'];
|
||||
$headers = ['Authorization' => "Bearer " . $token];
|
||||
$response = $clientHelper->get($pageUrl, $headers);
|
||||
$response = $this->service_client->get($pageUrl, $headers);
|
||||
$tasks = $response->original['data']['data'] ?? [];
|
||||
|
||||
if (empty($tasks)) {
|
||||
@@ -221,16 +220,12 @@ class ServiceSIMBG
|
||||
|
||||
public function syncTaskDetailSubmit($uuid, $token)
|
||||
{
|
||||
$clientHelper = new ServiceClient($this->simbg_host);
|
||||
|
||||
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/submit/";
|
||||
$headers = [
|
||||
'Authorization' => "Bearer " . $token,
|
||||
];
|
||||
|
||||
$res = $clientHelper->get($url, $headers);
|
||||
|
||||
Log::info("response task detail submit", ['res' => $res]);
|
||||
$res = $this->service_client->get($url, $headers);
|
||||
|
||||
if (empty($res->original['success']) || !$res->original['success']) {
|
||||
// Log error
|
||||
@@ -252,7 +247,7 @@ class ServiceSIMBG
|
||||
? Carbon::parse($data['updated_at'])->format('Y-m-d H:i:s')
|
||||
: null;
|
||||
|
||||
PbgTaskRetributions::updateOrCreate(
|
||||
$pbg_task_retributions = PbgTaskRetributions::updateOrCreate(
|
||||
['detail_id' => $data['id']],
|
||||
[
|
||||
'detail_uid' => $data['uid'] ?? null,
|
||||
@@ -276,10 +271,13 @@ class ServiceSIMBG
|
||||
]
|
||||
);
|
||||
|
||||
$pbg_task_retribution_id = $pbg_task_retributions->id;
|
||||
|
||||
$prasaranaData = $data['prasarana'] ?? [];
|
||||
if (!empty($prasaranaData)) {
|
||||
$insertData = array_map(fn($item) => [
|
||||
'pbg_task_uid' => $uuid,
|
||||
'pbg_task_retribution_id' => $pbg_task_retribution_id,
|
||||
'prasarana_id' => $item['id'] ?? null,
|
||||
'prasarana_type' => $item['prasarana_type'] ?? null,
|
||||
'building_type' => $item['building_type'] ?? null,
|
||||
@@ -290,7 +288,7 @@ class ServiceSIMBG
|
||||
], $prasaranaData);
|
||||
|
||||
// Use bulk insert or upsert for faster database operation
|
||||
PbgTaskPrasarana::upsert($insertData, ['pbg_task_uid', 'prasarana_id']);
|
||||
PbgTaskPrasarana::upsert($insertData, ['prasarana_id']);
|
||||
}
|
||||
|
||||
Log::info("retribution and prasarana successfully", ['uuid' => $uuid]);
|
||||
|
||||
@@ -123,4 +123,5 @@ return [
|
||||
'store' => env('APP_MAINTENANCE_STORE', 'database'),
|
||||
],
|
||||
|
||||
'api_url' => env('API_URL', 'http://localhost:8000')
|
||||
];
|
||||
|
||||
@@ -12,6 +12,17 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task', function (Blueprint $table) {
|
||||
$constraintExists = DB::select("
|
||||
SELECT COUNT(*) as count
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'pbg_task'
|
||||
AND index_name = 'pbg_task_uuid_unique'
|
||||
");
|
||||
|
||||
if ($constraintExists[0]->count > 0) {
|
||||
$table->dropUnique('pbg_task_uuid_unique');
|
||||
}
|
||||
$table->string('uuid')->nullable()->unique()->change();
|
||||
});
|
||||
}
|
||||
@@ -22,6 +33,7 @@ return new class extends Migration
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task', function (Blueprint $table) {
|
||||
$table->dropUnique('pbg_task_uuid_unique');
|
||||
$table->string('uuid')->nullable()->change();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -12,6 +12,17 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task_index_integrations', function (Blueprint $table) {
|
||||
$constraintExists = DB::select("
|
||||
SELECT COUNT(*) as count
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'pbg_task_index_integrations'
|
||||
AND index_name = 'pbg_task_index_integrations_pbg_task_uid_unique'
|
||||
");
|
||||
|
||||
if ($constraintExists[0]->count > 0) {
|
||||
$table->dropUnique('pbg_task_index_integrations_pbg_task_uid_unique');
|
||||
}
|
||||
$table->string('pbg_task_uid')->unique()->change();
|
||||
});
|
||||
}
|
||||
@@ -22,6 +33,7 @@ return new class extends Migration
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task_index_integrations', function (Blueprint $table) {
|
||||
$table->dropUnique('pbg_task_index_integrations_pbg_task_uid_unique');
|
||||
$table->string('pbg_task_uid')->unique()->change();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -12,6 +12,17 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task_retributions', function (Blueprint $table) {
|
||||
$constraintExists = DB::select("
|
||||
SELECT COUNT(*) as count
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'pbg_task_retributions'
|
||||
AND index_name = 'pbg_task_retributions_detail_id_unique'
|
||||
");
|
||||
|
||||
if ($constraintExists[0]->count > 0) {
|
||||
$table->dropUnique('pbg_task_retributions_detail_id_unique');
|
||||
}
|
||||
$table->string('detail_id')->unique()->change();
|
||||
});
|
||||
}
|
||||
@@ -22,6 +33,7 @@ return new class extends Migration
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task_retributions', function (Blueprint $table) {
|
||||
$table->dropUnique('pbg_task_retributions_detail_id_unique');
|
||||
$table->string('detail_id')->unique()->change();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
|
||||
$constraintExists = DB::select("
|
||||
SELECT COUNT(*) as count
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'pbg_task_prasarana'
|
||||
AND index_name = 'pbg_task_prasarana_prasarana_id_unique'
|
||||
");
|
||||
|
||||
if ($constraintExists[0]->count > 0) {
|
||||
$table->dropUnique('pbg_task_prasarana_prasarana_id_unique');
|
||||
}
|
||||
$table->integer('prasarana_id')->nullable()->unique()->change();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
|
||||
$table->dropUnique('pbg_task_prasarana_prasarana_id_unique');
|
||||
$table->integer('prasarana_id')->nullable()->unique()->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('pbg_task_retribution_id')->nullable(); // nullable in case some records do not match
|
||||
|
||||
// Step 2: Define the foreign key relation from `table3` to `table2`
|
||||
$table->foreign('pbg_task_retribution_id')->references('id')->on('pbg_task_retributions')->onDelete('cascade');
|
||||
});
|
||||
|
||||
\DB::table('pbg_task_prasarana')
|
||||
->join('pbg_task', 'pbg_task.uuid', '=', 'pbg_task_prasarana.pbg_task_uid') // Relating pbg_task_prasarana to pbg_task
|
||||
->join('pbg_task_retributions', 'pbg_task_retributions.pbg_task_uid', '=', 'pbg_task.uuid') // Relating pbg_task_retributions to pbg_task
|
||||
->whereNotNull('pbg_task_retributions.id') // Ensure the `pbg_task_retributions` id exists
|
||||
->update(['pbg_task_prasarana.pbg_task_retribution_id' => \DB::raw('pbg_task_retributions.id')]); // Set the foreign key
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
|
||||
$table->dropForeign(['pbg_task_retribution_id']);
|
||||
$table->dropColumn('pbg_task_retribution_id');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -16,7 +16,12 @@ class DataSettingSeeder extends Seeder
|
||||
$data_settings = [
|
||||
[
|
||||
"key" => "TARGET_PAD",
|
||||
"value" => "33.200.000.000",
|
||||
"value" => "50000000000",
|
||||
"type" => "integer"
|
||||
],
|
||||
[
|
||||
"key" => "TATA_RUANG",
|
||||
"value" => "10000000000",
|
||||
"type" => "integer"
|
||||
]
|
||||
];
|
||||
|
||||
5920
package-lock.json
generated
5920
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
66
package.json
66
package.json
@@ -1,35 +1,35 @@
|
||||
{
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"dev": "vite"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.20",
|
||||
"axios": "^1.7.4",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^1.0",
|
||||
"postcss": "^8.4.47",
|
||||
"sass": "^1.81.1",
|
||||
"tailwindcss": "^3.4.13",
|
||||
"vite": "^5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"apexcharts": "^3.44.2",
|
||||
"big.js": "^6.2.2",
|
||||
"bootstrap": "^5.3.3",
|
||||
"countup.js": "^2.3.2",
|
||||
"dropzone": "^5.9.0",
|
||||
"flatpickr": "^4.6.13",
|
||||
"gmaps": "^0.4.25",
|
||||
"gridjs": "^5.1.0",
|
||||
"iconify-icon": "^2.1.0",
|
||||
"jsvectormap": "^1.5.1",
|
||||
"moment": "^2.29.4",
|
||||
"node-waves": "^0.7.6",
|
||||
"quill": "^1.3.7",
|
||||
"simplebar": "^5.3.9",
|
||||
"wnumb": "^1.2.0"
|
||||
}
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"dev": "vite"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.20",
|
||||
"axios": "^1.7.4",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^1.0",
|
||||
"postcss": "^8.4.47",
|
||||
"sass": "^1.81.1",
|
||||
"tailwindcss": "^3.4.13",
|
||||
"vite": "^5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"apexcharts": "^3.44.2",
|
||||
"big.js": "^6.2.2",
|
||||
"bootstrap": "^5.3.3",
|
||||
"countup.js": "^2.3.2",
|
||||
"dropzone": "^5.9.0",
|
||||
"flatpickr": "^4.6.13",
|
||||
"gmaps": "^0.4.25",
|
||||
"gridjs": "^5.1.0",
|
||||
"iconify-icon": "^2.1.0",
|
||||
"jsvectormap": "^1.5.1",
|
||||
"moment": "^2.29.4",
|
||||
"node-waves": "^0.7.6",
|
||||
"quill": "^1.3.7",
|
||||
"simplebar": "^5.3.9",
|
||||
"wnumb": "^1.2.0"
|
||||
}
|
||||
}
|
||||
|
||||
284
public/build/.vite/manifest.json
Normal file
284
public/build/.vite/manifest.json
Normal file
@@ -0,0 +1,284 @@
|
||||
{
|
||||
"__commonjsHelpers-C4iS2aBk.js": {
|
||||
"file": "assets/_commonjsHelpers-C4iS2aBk.js",
|
||||
"name": "_commonjsHelpers"
|
||||
},
|
||||
"_apexcharts.common-7mov3gaG.js": {
|
||||
"file": "assets/apexcharts.common-7mov3gaG.js",
|
||||
"name": "apexcharts.common",
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"_global-config-9uDKFQ8j.js": {
|
||||
"file": "assets/global-config-9uDKFQ8j.js",
|
||||
"name": "global-config"
|
||||
},
|
||||
"_gridjs.umd-BiCNXlqL.js": {
|
||||
"file": "assets/gridjs.umd-BiCNXlqL.js",
|
||||
"name": "gridjs.umd",
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"_world-BH8KG5u4.js": {
|
||||
"file": "assets/world-BH8KG5u4.js",
|
||||
"name": "world",
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"node_modules/flatpickr/dist/flatpickr.min.css": {
|
||||
"file": "assets/flatpickr-CksuuEqD.css",
|
||||
"src": "node_modules/flatpickr/dist/flatpickr.min.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/flatpickr/dist/themes/dark.css": {
|
||||
"file": "assets/dark-CLxH30By.css",
|
||||
"src": "node_modules/flatpickr/dist/themes/dark.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/gridjs/dist/theme/mermaid.css": {
|
||||
"file": "assets/mermaid-B5wPN5RC.css",
|
||||
"src": "node_modules/gridjs/dist/theme/mermaid.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/gridjs/dist/theme/mermaid.min.css": {
|
||||
"file": "assets/mermaid-1KsrsKla.css",
|
||||
"src": "node_modules/gridjs/dist/theme/mermaid.min.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/quill/dist/quill.bubble.css": {
|
||||
"file": "assets/quill-BzaoboQ1.css",
|
||||
"src": "node_modules/quill/dist/quill.bubble.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/quill/dist/quill.snow.css": {
|
||||
"file": "assets/quill-D-Ncpkvi.css",
|
||||
"src": "node_modules/quill/dist/quill.snow.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/fonts/boxicons.eot": {
|
||||
"file": "assets/boxicons-0t2gX1vj.eot",
|
||||
"src": "resources/fonts/boxicons.eot"
|
||||
},
|
||||
"resources/fonts/boxicons.svg": {
|
||||
"file": "assets/boxicons-KSR1BgPC.svg",
|
||||
"src": "resources/fonts/boxicons.svg"
|
||||
},
|
||||
"resources/fonts/boxicons.ttf": {
|
||||
"file": "assets/boxicons-BEZXjQG5.ttf",
|
||||
"src": "resources/fonts/boxicons.ttf"
|
||||
},
|
||||
"resources/fonts/boxicons.woff": {
|
||||
"file": "assets/boxicons-CEgI8ccS.woff",
|
||||
"src": "resources/fonts/boxicons.woff"
|
||||
},
|
||||
"resources/fonts/boxicons.woff2": {
|
||||
"file": "assets/boxicons-C7pETWQJ.woff2",
|
||||
"src": "resources/fonts/boxicons.woff2"
|
||||
},
|
||||
"resources/js/app.js": {
|
||||
"file": "assets/app-Wz_4hh3O.js",
|
||||
"name": "app",
|
||||
"src": "resources/js/app.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/config.js": {
|
||||
"file": "assets/config-DqV4EBmE.js",
|
||||
"name": "config",
|
||||
"src": "resources/js/config.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/dashboards/bigdata.js": {
|
||||
"file": "assets/bigdata-C1y9KS-u.js",
|
||||
"name": "bigdata",
|
||||
"src": "resources/js/dashboards/bigdata.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_global-config-9uDKFQ8j.js"
|
||||
]
|
||||
},
|
||||
"resources/js/data-settings/index.js": {
|
||||
"file": "assets/index-CzuDcG6g.js",
|
||||
"name": "index",
|
||||
"src": "resources/js/data-settings/index.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"_global-config-9uDKFQ8j.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/master/users/users.js": {
|
||||
"file": "assets/users-BoDXPe3W.js",
|
||||
"name": "users",
|
||||
"src": "resources/js/master/users/users.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"_global-config-9uDKFQ8j.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/chart.js": {
|
||||
"file": "assets/chart-DQBoD9wk.js",
|
||||
"name": "chart",
|
||||
"src": "resources/js/pages/chart.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_apexcharts.common-7mov3gaG.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/dashboard.js": {
|
||||
"file": "assets/dashboard-nkb3Omy9.js",
|
||||
"name": "dashboard",
|
||||
"src": "resources/js/pages/dashboard.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_apexcharts.common-7mov3gaG.js",
|
||||
"_world-BH8KG5u4.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/form-fileupload.js": {
|
||||
"file": "assets/form-fileupload-mrxZaoHv.js",
|
||||
"name": "form-fileupload",
|
||||
"src": "resources/js/pages/form-fileupload.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/form-flatepicker.js": {
|
||||
"file": "assets/form-flatepicker-ChSlk6xC.js",
|
||||
"name": "form-flatepicker",
|
||||
"src": "resources/js/pages/form-flatepicker.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/form-quilljs.js": {
|
||||
"file": "assets/form-quilljs-pSObT4Ti.js",
|
||||
"name": "form-quilljs",
|
||||
"src": "resources/js/pages/form-quilljs.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/maps-canada.js": {
|
||||
"file": "assets/maps-canada-Btz07hSk.js",
|
||||
"name": "maps-canada",
|
||||
"src": "resources/js/pages/maps-canada.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/maps-google.js": {
|
||||
"file": "assets/maps-google-KamR_rNw.js",
|
||||
"name": "maps-google",
|
||||
"src": "resources/js/pages/maps-google.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/maps-iraq.js": {
|
||||
"file": "assets/maps-iraq-Blhf9V_8.js",
|
||||
"name": "maps-iraq",
|
||||
"src": "resources/js/pages/maps-iraq.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/maps-russia.js": {
|
||||
"file": "assets/maps-russia-C3XucoMP.js",
|
||||
"name": "maps-russia",
|
||||
"src": "resources/js/pages/maps-russia.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/maps-spain.js": {
|
||||
"file": "assets/maps-spain-CdBIHB66.js",
|
||||
"name": "maps-spain",
|
||||
"src": "resources/js/pages/maps-spain.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/maps-vector.js": {
|
||||
"file": "assets/maps-vector-C2WpvMU7.js",
|
||||
"name": "maps-vector",
|
||||
"src": "resources/js/pages/maps-vector.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_world-BH8KG5u4.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/table-gridjs.js": {
|
||||
"file": "assets/table-gridjs-BQh80cFh.js",
|
||||
"name": "table-gridjs",
|
||||
"src": "resources/js/pages/table-gridjs.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pbg-task/index.js": {
|
||||
"file": "assets/index-BW29TEbh.js",
|
||||
"name": "index",
|
||||
"src": "resources/js/pbg-task/index.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"_global-config-9uDKFQ8j.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/settings/general/general-settings.js": {
|
||||
"file": "assets/general-settings-BoJeYQk1.js",
|
||||
"name": "general-settings",
|
||||
"src": "resources/js/settings/general/general-settings.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"_global-config-9uDKFQ8j.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/settings/syncronize/syncronize.js": {
|
||||
"file": "assets/syncronize-DjtcngRb.js",
|
||||
"name": "syncronize",
|
||||
"src": "resources/js/settings/syncronize/syncronize.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"_global-config-9uDKFQ8j.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/tables/common-table.js": {
|
||||
"file": "assets/common-table-KF_NVAIE.js",
|
||||
"name": "common-table",
|
||||
"src": "resources/js/tables/common-table.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"_global-config-9uDKFQ8j.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/scss/components/_circle.scss": {
|
||||
"file": "assets/_circle-ByHaR-XI.css",
|
||||
"src": "resources/scss/components/_circle.scss",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/scss/icons.scss": {
|
||||
"file": "assets/icons-CHxf0fE3.css",
|
||||
"src": "resources/scss/icons.scss",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/scss/style.scss": {
|
||||
"file": "assets/style-B2v4WMju.css",
|
||||
"src": "resources/scss/style.scss",
|
||||
"isEntry": true
|
||||
}
|
||||
}
|
||||
1
public/build/assets/_commonjsHelpers-C4iS2aBk.js
Normal file
1
public/build/assets/_commonjsHelpers-C4iS2aBk.js
Normal file
@@ -0,0 +1 @@
|
||||
var u=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function f(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function l(e){if(e.__esModule)return e;var r=e.default;if(typeof r=="function"){var t=function o(){return this instanceof o?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};t.prototype=r.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach(function(o){var n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:function(){return e[o]}})}),t}export{f as a,u as c,l as g};
|
||||
808
public/build/assets/apexcharts.common-7mov3gaG.js
Normal file
808
public/build/assets/apexcharts.common-7mov3gaG.js
Normal file
File diff suppressed because one or more lines are too long
18
public/build/assets/app-Wz_4hh3O.js
Normal file
18
public/build/assets/app-Wz_4hh3O.js
Normal file
File diff suppressed because one or more lines are too long
BIN
public/build/assets/boxicons-0t2gX1vj.eot
Normal file
BIN
public/build/assets/boxicons-0t2gX1vj.eot
Normal file
Binary file not shown.
BIN
public/build/assets/boxicons-BEZXjQG5.ttf
Normal file
BIN
public/build/assets/boxicons-BEZXjQG5.ttf
Normal file
Binary file not shown.
BIN
public/build/assets/boxicons-C7pETWQJ.woff2
Normal file
BIN
public/build/assets/boxicons-C7pETWQJ.woff2
Normal file
Binary file not shown.
BIN
public/build/assets/boxicons-CEgI8ccS.woff
Normal file
BIN
public/build/assets/boxicons-CEgI8ccS.woff
Normal file
Binary file not shown.
1653
public/build/assets/boxicons-KSR1BgPC.svg
Normal file
1653
public/build/assets/boxicons-KSR1BgPC.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 1.2 MiB |
10
public/build/assets/chart-DQBoD9wk.js
Normal file
10
public/build/assets/chart-DQBoD9wk.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/config-DqV4EBmE.js
Normal file
1
public/build/assets/config-DqV4EBmE.js
Normal file
@@ -0,0 +1 @@
|
||||
(function(){var i=sessionStorage.getItem("__DARKONE_CONFIG__"),e=document.getElementsByTagName("html")[0],a={theme:"light",topbar:{color:"light"},menu:{size:"default",color:"light"}};document.getElementsByTagName("html")[0];var t=Object.assign(JSON.parse(JSON.stringify(a)),{});(t=Object.assign(JSON.parse(JSON.stringify(a)),{})).theme=e.getAttribute("data-bs-theme")||a.theme,t.topbar.color=e.getAttribute("data-topbar-color")||a.topbar.color,t.menu.color=e.getAttribute("data-sidebar-color")||a.menu.color,t.menu.size=e.getAttribute("data-sidebar-size")||a.menu.size,window.defaultConfig=JSON.parse(JSON.stringify(t)),i!==null&&(t=JSON.parse(i)),(window.config=t)&&(e.setAttribute("data-bs-theme",t.theme),e.setAttribute("data-topbar-color",t.topbar.color),e.setAttribute("data-sidebar-color",t.menu.color),window.innerWidth<=1140?e.setAttribute("data-sidebar-size","hidden"):e.setAttribute("data-sidebar-size",t.menu.size))})();
|
||||
1
public/build/assets/dark-CLxH30By.css
Normal file
1
public/build/assets/dark-CLxH30By.css
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/dashboard-nkb3Omy9.js
Normal file
1
public/build/assets/dashboard-nkb3Omy9.js
Normal file
@@ -0,0 +1 @@
|
||||
import{A as t}from"./apexcharts.common-7mov3gaG.js";import{j as i}from"./world-BH8KG5u4.js";import"./_commonjsHelpers-C4iS2aBk.js";var r={chart:{type:"area",height:50,sparkline:{enabled:!0}},series:[{data:[25,28,32,38,43,55,60,48,42,51,35]}],stroke:{width:2,curve:"smooth"},markers:{size:0},colors:["#7e67fe"],tooltip:{fixed:{enabled:!1},x:{show:!1},y:{title:{formatter:function(e){return""}}},marker:{show:!1}},fill:{opacity:[1],type:["gradient"],gradient:{type:"vertical",inverseColors:!1,opacityFrom:.5,opacityTo:0,stops:[0,100]}}};new t(document.querySelector("#chart01"),r).render();var r={chart:{type:"area",height:50,sparkline:{enabled:!0}},series:[{data:[87,54,4,76,31,95,70,92,53,9,6]}],stroke:{width:2,curve:"smooth"},markers:{size:0},colors:["#7e67fe"],tooltip:{fixed:{enabled:!1},x:{show:!1},y:{title:{formatter:function(e){return""}}},marker:{show:!1}},fill:{opacity:[1],type:["gradient"],gradient:{type:"vertical",inverseColors:!1,opacityFrom:.5,opacityTo:0,stops:[0,100]}}};new t(document.querySelector("#chart02"),r).render();var r={chart:{type:"area",height:50,sparkline:{enabled:!0}},series:[{data:[41,42,35,42,6,12,13,22,42,94,95]}],stroke:{width:2,curve:"smooth"},markers:{size:0},colors:["#7e67fe"],tooltip:{fixed:{enabled:!1},x:{show:!1},y:{title:{formatter:function(e){return""}}},marker:{show:!1}},fill:{opacity:[1],type:["gradient"],gradient:{type:"vertical",inverseColors:!1,opacityFrom:.5,opacityTo:0,stops:[0,100]}}};new t(document.querySelector("#chart03"),r).render();var r={chart:{type:"area",height:50,sparkline:{enabled:!0}},series:[{data:[8,41,40,48,77,35,0,77,63,100,71]}],stroke:{width:2,curve:"smooth"},markers:{size:0},colors:["#7e67fe"],tooltip:{fixed:{enabled:!1},x:{show:!1},y:{title:{formatter:function(e){return""}}},marker:{show:!1}},fill:{opacity:[1],type:["gradient"],gradient:{type:"vertical",inverseColors:!1,opacityFrom:.5,opacityTo:0,stops:[0,100]}}};new t(document.querySelector("#chart04"),r).render();var a={chart:{height:180,type:"donut"},series:[44.25,52.68,45.98],legend:{show:!1},stroke:{width:0},plotOptions:{pie:{donut:{size:"70%",labels:{show:!1,total:{showAlways:!0,show:!0}}}}},labels:["Direct","Affilliate","Sponsored"],colors:["#7e67fe","#17c553","#7942ed"],dataLabels:{enabled:!1},responsive:[{breakpoint:480,options:{chart:{width:200}}}],fill:{type:"gradient"}},o=new t(document.querySelector("#conversions"),a);o.render();var a={series:[{name:"Page Views",type:"bar",data:[34,65,46,68,49,61,42,44,78,52,63,67]},{name:"Clicks",type:"area",data:[8,12,7,17,21,11,5,9,7,29,12,35]},{name:"Revenue",type:"area",data:[12,16,11,22,28,25,15,29,35,45,42,48]}],chart:{height:330,type:"line",toolbar:{show:!1}},stroke:{dashArray:[0,0,2],width:[0,2,2],curve:"smooth"},fill:{opacity:[1,1,1],type:["solid","gradient","gradient"],gradient:{type:"vertical",inverseColors:!1,opacityFrom:.5,opacityTo:0,stops:[0,90]}},markers:{size:[0,0],strokeWidth:2,hover:{size:4}},xaxis:{categories:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],axisTicks:{show:!1},axisBorder:{show:!1}},yaxis:{min:0,axisBorder:{show:!1}},grid:{show:!0,strokeDashArray:3,xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},padding:{top:0,right:-2,bottom:10,left:10}},legend:{show:!0,horizontalAlign:"center",offsetX:0,offsetY:5,markers:{width:9,height:9,radius:6},itemMargin:{horizontal:10,vertical:0}},plotOptions:{bar:{columnWidth:"30%",barHeight:"70%",borderRadius:3}},colors:["#7e67fe","#17c553","#7942ed"],tooltip:{shared:!0,y:[{formatter:function(e){return typeof e<"u"?e.toFixed(1)+"k":e}},{formatter:function(e){return typeof e<"u"?e.toFixed(1)+"k":e}}]}},o=new t(document.querySelector("#dash-performance-chart"),a);o.render();class n{initWorldMapMarker(){new i({map:"world",selector:"#world-map-markers",zoomOnScroll:!0,zoomButtons:!1,markersSelectable:!0,markers:[{name:"Canada",coords:[56.1304,-106.3468]},{name:"Brazil",coords:[-14.235,-51.9253]},{name:"Russia",coords:[61,105]},{name:"China",coords:[35.8617,104.1954]},{name:"United States",coords:[37.0902,-95.7129]}],markerStyle:{initial:{fill:"#7f56da"},selected:{fill:"#1bb394"}},labels:{markers:{render:s=>s.name}},regionStyle:{initial:{fill:"rgba(169,183,197, 0.3)",fillOpacity:1}}})}init(){this.initWorldMapMarker()}}document.addEventListener("DOMContentLoaded",function(e){new n().init()});
|
||||
1
public/build/assets/flatpickr-CksuuEqD.css
Normal file
1
public/build/assets/flatpickr-CksuuEqD.css
Normal file
File diff suppressed because one or more lines are too long
8
public/build/assets/form-fileupload-mrxZaoHv.js
Normal file
8
public/build/assets/form-fileupload-mrxZaoHv.js
Normal file
File diff suppressed because one or more lines are too long
18
public/build/assets/form-flatepicker-ChSlk6xC.js
Normal file
18
public/build/assets/form-flatepicker-ChSlk6xC.js
Normal file
File diff suppressed because one or more lines are too long
41
public/build/assets/form-quilljs-pSObT4Ti.js
Normal file
41
public/build/assets/form-quilljs-pSObT4Ti.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/icons-CHxf0fE3.css
Normal file
1
public/build/assets/icons-CHxf0fE3.css
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/maps-canada-Btz07hSk.js
Normal file
1
public/build/assets/maps-canada-Btz07hSk.js
Normal file
File diff suppressed because one or more lines are too long
7
public/build/assets/maps-google-KamR_rNw.js
Normal file
7
public/build/assets/maps-google-KamR_rNw.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/maps-iraq-Blhf9V_8.js
Normal file
1
public/build/assets/maps-iraq-Blhf9V_8.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/maps-russia-C3XucoMP.js
Normal file
1
public/build/assets/maps-russia-C3XucoMP.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/maps-spain-CdBIHB66.js
Normal file
1
public/build/assets/maps-spain-CdBIHB66.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/maps-vector-C2WpvMU7.js
Normal file
1
public/build/assets/maps-vector-C2WpvMU7.js
Normal file
@@ -0,0 +1 @@
|
||||
import{j as a}from"./world-BH8KG5u4.js";import"./_commonjsHelpers-C4iS2aBk.js";class r{initWorldMapMarker(){new a({map:"world",selector:"#world-map-markers",zoomOnScroll:!1,zoomButtons:!0,markersSelectable:!0,markers:[{name:"Greenland",coords:[72,-42]},{name:"Canada",coords:[56.1304,-106.3468]},{name:"Brazil",coords:[-14.235,-51.9253]},{name:"Egypt",coords:[26.8206,30.8025]},{name:"Russia",coords:[61,105]},{name:"China",coords:[35.8617,104.1954]},{name:"United States",coords:[37.0902,-95.7129]},{name:"Norway",coords:[60.472024,8.468946]},{name:"Ukraine",coords:[48.379433,31.16558]}],markerStyle:{initial:{fill:"#5B8DEC"},selected:{fill:"#ed5565"}},labels:{markers:{render:i=>i.name}},regionStyle:{initial:{fill:"rgba(169,183,197, 0.2)",fillOpacity:1}}})}initCanadaVectorMap(){new a({map:"canada",selector:"#canada-vector-map",zoomOnScroll:!1,regionStyle:{initial:{fill:"#1e84c4"}}})}initRussiaVectorMap(){new a({map:"russia",selector:"#russia-vector-map",zoomOnScroll:!1,regionStyle:{initial:{fill:"#1bb394"}}})}initIraqVectorMap(){new a({map:"iraq",selector:"#iraq-vector-map",zoomOnScroll:!1,regionStyle:{initial:{fill:"#f8ac59"}}})}initSpainVectorMap(){new a({map:"spain",selector:"#spain-vector-map",zoomOnScroll:!1,regionStyle:{initial:{fill:"#23c6c8"}}})}initUsaVectorMap(){new a({map:"us_merc_en",selector:"#usa-vector-map",regionStyle:{initial:{fill:"#ffe381"}}})}init(){this.initWorldMapMarker(),this.initCanadaVectorMap(),this.initRussiaVectorMap(),this.initIraqVectorMap(),this.initSpainVectorMap()}}document.addEventListener("DOMContentLoaded",function(e){new r().init()});
|
||||
1
public/build/assets/mermaid-1KsrsKla.css
Normal file
1
public/build/assets/mermaid-1KsrsKla.css
Normal file
File diff suppressed because one or more lines are too long
1
public/build/assets/mermaid-B5wPN5RC.css
Normal file
1
public/build/assets/mermaid-B5wPN5RC.css
Normal file
File diff suppressed because one or more lines are too long
6
public/build/assets/quill-BzaoboQ1.css
Normal file
6
public/build/assets/quill-BzaoboQ1.css
Normal file
File diff suppressed because one or more lines are too long
6
public/build/assets/quill-D-Ncpkvi.css
Normal file
6
public/build/assets/quill-D-Ncpkvi.css
Normal file
File diff suppressed because one or more lines are too long
2
public/build/assets/world-BH8KG5u4.js
Normal file
2
public/build/assets/world-BH8KG5u4.js
Normal file
File diff suppressed because one or more lines are too long
BIN
public/images/bg-dashboard.jpg
Normal file
BIN
public/images/bg-dashboard.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
643
pupr_app.sql
Normal file
643
pupr_app.sql
Normal file
File diff suppressed because one or more lines are too long
@@ -1,9 +1,8 @@
|
||||
|
||||
import bootstrap from 'bootstrap/dist/js/bootstrap'
|
||||
import bootstrap from "bootstrap/dist/js/bootstrap";
|
||||
window.bootstrap = bootstrap;
|
||||
import 'iconify-icon';
|
||||
import 'simplebar/dist/simplebar'
|
||||
|
||||
import "iconify-icon";
|
||||
import "simplebar/dist/simplebar";
|
||||
|
||||
class Components {
|
||||
initBootstrapComponents() {
|
||||
[...document.querySelectorAll('[data-bs-toggle="popover"]')].map(
|
||||
|
||||
@@ -10,6 +10,7 @@ class BigData {
|
||||
this.dataNonVerification = await this.getDataNonVerfication();
|
||||
this.dataBusiness = await this.getDataBusiness();
|
||||
this.dataNonBusiness = await this.getDataNonBusiness();
|
||||
this.dataTataRuang = await this.getDataTataRuang();
|
||||
|
||||
// total potensi
|
||||
this.bigTargetPAD = new Big(this.totalTargetPAD ?? 0);
|
||||
@@ -26,12 +27,23 @@ class BigData {
|
||||
}
|
||||
}
|
||||
|
||||
// tata ruang
|
||||
this.bigTotalTataRuang = new Big(this.dataTataRuang);
|
||||
this.percentageResultTataRuang =
|
||||
this.bigTotalTataRuang <= 0 || this.bigTotalPotensi <= 0
|
||||
? 0
|
||||
: this.bigTotalTataRuang
|
||||
.div(this.bigTotalPotensi)
|
||||
.times(100)
|
||||
.toFixed(2);
|
||||
|
||||
// kekurangan potensi
|
||||
this.totalKekuranganPotensi = new Big(
|
||||
this.totalTargetPAD - this.bigTotalPotensi
|
||||
this.bigTargetPAD - this.bigTotalPotensi
|
||||
);
|
||||
|
||||
this.percentageKekuranganPotensi =
|
||||
this.totalKekuranganPotensi <= 0 || this.totalTargetPAD <= 0
|
||||
this.totalKekuranganPotensi <= 0 || this.bigTargetPAD <= 0
|
||||
? 0
|
||||
: this.totalKekuranganPotensi
|
||||
.div(this.bigTargetPAD)
|
||||
@@ -77,7 +89,7 @@ class BigData {
|
||||
.times(100)
|
||||
.toFixed(2);
|
||||
|
||||
if (!this.totalTargetPAD) {
|
||||
if (!this.bigTargetPAD) {
|
||||
console.error("Failed to load chart data");
|
||||
return;
|
||||
}
|
||||
@@ -154,7 +166,7 @@ class BigData {
|
||||
return data.data[0].value;
|
||||
} catch (error) {
|
||||
console.error("Error fetching chart data:", error);
|
||||
return null;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,7 +197,7 @@ class BigData {
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error fetching chart data:", error);
|
||||
return null;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,7 +228,7 @@ class BigData {
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error fetching chart data:", error);
|
||||
return null;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -247,7 +259,7 @@ class BigData {
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error fetching chart data:", error);
|
||||
return null;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,52 +290,55 @@ class BigData {
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error fetching chart data:", error);
|
||||
return null;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
async getDataTataRuang() {
|
||||
try {
|
||||
const response = await fetch(
|
||||
`${GlobalConfig.apiHost}/api/api-data-settings?search=tata_ruang`,
|
||||
{
|
||||
credentials: "include",
|
||||
headers: {
|
||||
Authorization: `Bearer ${
|
||||
document.querySelector("meta[name='api-token']")
|
||||
.content
|
||||
}`,
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
if (!response.ok) {
|
||||
console.error("Network response was not ok", response);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
return data.data[0].value;
|
||||
} catch (error) {
|
||||
console.error("Error fetching chart data:", error);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
initChartTargetPAD() {
|
||||
let totalPad = 0;
|
||||
fetch(
|
||||
`${GlobalConfig.apiHost}/api/api-data-settings?search=target_pad`,
|
||||
{
|
||||
credentials: "include",
|
||||
headers: {
|
||||
Authorization: `Bearer ${
|
||||
document.querySelector("meta[name='api-token']").content
|
||||
}`,
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
}
|
||||
)
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error("Network response was not ok");
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then((data) => {
|
||||
totalPad = data.data[0].value;
|
||||
document
|
||||
.querySelectorAll(".document-count.chart-target-pad")
|
||||
.forEach((element) => {
|
||||
element.innerText = ``;
|
||||
});
|
||||
document
|
||||
.querySelectorAll(".document-total.chart-target-pad")
|
||||
.forEach((element) => {
|
||||
element.innerText = `Rp.${addThousandSeparators(
|
||||
totalPad
|
||||
)}`;
|
||||
});
|
||||
document
|
||||
.querySelectorAll(".small-percentage.chart-target-pad")
|
||||
.forEach((element) => {
|
||||
element.innerText = `${100}%`;
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error fetching target_pad:", error);
|
||||
document
|
||||
.querySelectorAll(".document-count.chart-target-pad")
|
||||
.forEach((element) => {
|
||||
element.innerText = ``;
|
||||
});
|
||||
document
|
||||
.querySelectorAll(".document-total.chart-target-pad")
|
||||
.forEach((element) => {
|
||||
element.innerText = `Rp.${addThousandSeparators(
|
||||
this.bigTargetPAD.toString()
|
||||
)}`;
|
||||
});
|
||||
document
|
||||
.querySelectorAll(".small-percentage.chart-target-pad")
|
||||
.forEach((element) => {
|
||||
element.innerText = `${100}%`;
|
||||
});
|
||||
}
|
||||
initChartTotalPotensi() {
|
||||
@@ -503,17 +518,19 @@ class BigData {
|
||||
document
|
||||
.querySelectorAll(".document-count.chart-potensi-tata-ruang")
|
||||
.forEach((element) => {
|
||||
element.innerText = `${0}`;
|
||||
element.innerText = "";
|
||||
});
|
||||
document
|
||||
.querySelectorAll(".document-total.chart-potensi-tata-ruang")
|
||||
.forEach((element) => {
|
||||
element.innerText = `Rp.${addThousandSeparators("0.00")}`;
|
||||
element.innerText = `Rp.${addThousandSeparators(
|
||||
this.bigTotalTataRuang.toString()
|
||||
)}`;
|
||||
});
|
||||
document
|
||||
.querySelectorAll(".small-percentage.chart-potensi-tata-ruang")
|
||||
.forEach((element) => {
|
||||
element.innerText = `0.00%`;
|
||||
element.innerText = `${this.percentageResultTataRuang}%`;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
const GlobalConfig = {
|
||||
apiHost: "http://localhost:8000",
|
||||
};
|
||||
|
||||
export default GlobalConfig;
|
||||
export default GlobalConfig = window.GlobalConfig;
|
||||
|
||||
export function addThousandSeparators(value, fractionDigits = 2) {
|
||||
if (!value) return null; // Handle empty or null values
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Grid } from "gridjs/dist/gridjs.umd.js";
|
||||
import "gridjs/dist/gridjs.umd.js";
|
||||
import gridjs from "gridjs/dist/gridjs.umd.js";
|
||||
import GlobalConfig from "../global-config";
|
||||
|
||||
class PbgTasks {
|
||||
@@ -19,7 +20,17 @@ class PbgTasks {
|
||||
"Status",
|
||||
"Function Type",
|
||||
"Consultation Type",
|
||||
{ name: "Due Date", width: "7%" },
|
||||
{ name: "Due Date", width: "10%" },
|
||||
{
|
||||
name: "Action",
|
||||
formatter: function (cell) {
|
||||
return gridjs.html(`
|
||||
<div class="d-flex justify-items-end gap-10">
|
||||
<a href="/pbg-task/${cell}" class="btn btn-yellow">Detail</a
|
||||
</div>
|
||||
`);
|
||||
},
|
||||
},
|
||||
],
|
||||
search: {
|
||||
server: {
|
||||
@@ -57,6 +68,7 @@ class PbgTasks {
|
||||
item.function_type,
|
||||
item.consultation_type,
|
||||
item.due_date,
|
||||
item.id,
|
||||
]),
|
||||
total: (data) => data.meta.total,
|
||||
},
|
||||
|
||||
@@ -19,7 +19,6 @@ class SyncronizeTask {
|
||||
name: "Actions",
|
||||
width: "120px",
|
||||
formatter: function (cell) {
|
||||
console.log("cell data", cell);
|
||||
return gridjs.html(`
|
||||
<div class="d-flex justify-items-end gap-10">
|
||||
<a href="/settings/general/${cell}/edit" class="btn btn-yellow me-2">Update</a>
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
//
|
||||
// circle.scss
|
||||
//
|
||||
|
||||
:root {
|
||||
--circle-color: #c97a04; /* Default warna lingkaran */
|
||||
}
|
||||
|
||||
@@ -44,8 +44,6 @@
|
||||
@import "components/type";
|
||||
@import "components/tooltip";
|
||||
@import "components/widgets";
|
||||
|
||||
// custom components
|
||||
@import "components/circle";
|
||||
|
||||
// Plugin
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('layouts.partials/page-title', ['title' => 'Dashboards', 'subtitle' => 'DASHBOARD PIMPINAN'])
|
||||
@include('layouts.partials/page-title', ['title' => 'Dashboards', 'subtitle' => 'Dashboard Pimpinan'])
|
||||
|
||||
<style>
|
||||
.square{
|
||||
@@ -32,9 +32,29 @@
|
||||
left: 0;
|
||||
background: linear-gradient(to top left, transparent calc(50% - 2px), black, transparent calc(50% + 2px));
|
||||
}
|
||||
|
||||
#dashboard-fixed-wrapper {
|
||||
background-image:url('/images/bg-dashboard.jpg');background-size: cover;background-position: center;
|
||||
}
|
||||
|
||||
#dashboard-fixed-wrapper::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.7); /* Black overlay with 50% opacity */
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="dashboard-fixed-wrapper" class="row">
|
||||
<h2 style="margin-top:30px;margin-left:15px;color:#911701">
|
||||
<span style="float:right;font-size:14px;margin-right:25px;color:black">Terakhir di update - {{$latest_created}}</span>
|
||||
ANALISA BIG DATA PROSES PBG <br>
|
||||
MELALUI APLIKASI SIBEDAS PBG
|
||||
|
||||
</h2>
|
||||
<div id="dashboard-fixed-container" style="width:1110px;height:770px;position:relative;margin:auto;">
|
||||
@component('components.circle', [
|
||||
'document_title' => 'Kekurangan Potensi',
|
||||
@@ -83,7 +103,7 @@
|
||||
@component('components.circle', [
|
||||
'document_title' => 'Perkiraan Potensi PBG Dari Tata Ruang',
|
||||
'document_color' => '#bf04bc',
|
||||
'document_type' => 'Berkas',
|
||||
'document_type' => '',
|
||||
'document_id' => 'chart-potensi-tata-ruang',
|
||||
'visible_small_circle' => true,
|
||||
'style' => 'left:600px;'
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('layouts.partials/page-title', ['title' => 'Darkone', 'subtitle' => 'Dashboard'])
|
||||
@include('layouts.partials/page-title', ['title' => 'Darkone', 'subtitle' => 'Dashboard PBG'])
|
||||
|
||||
<div class="row">
|
||||
<!-- Card 1 -->
|
||||
@@ -11,8 +11,8 @@
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<p class="text-muted mb-0 text-truncate">Total Income</p>
|
||||
<h3 class="text-dark mt-2 mb-0">$78.8k</h3>
|
||||
<p class="text-muted mb-0 text-truncate">Target PAD</p>
|
||||
<h4 class="text-dark mt-2 mb-0">33.200.000.000</h4>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
@@ -33,8 +33,8 @@
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<p class="text-muted mb-0 text-truncate">New Users</p>
|
||||
<h3 class="text-dark mt-2 mb-0">2,150</h3>
|
||||
<p class="text-muted mb-0 text-truncate">Total Potensi Berkas</p>
|
||||
<h4 class="text-dark mt-2 mb-0">10.080.738.057</h4>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
@@ -55,8 +55,8 @@
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<p class="text-muted mb-0 text-truncate">Orders</p>
|
||||
<h3 class="text-dark mt-2 mb-0">1,784</h3>
|
||||
<p class="text-muted mb-0 text-truncate">Total Berkas Terverifikasi</p>
|
||||
<h4 class="text-dark mt-2 mb-0">1.555.064.633</h4>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
@@ -77,8 +77,8 @@
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<p class="text-muted mb-0 text-truncate">Conversion Rate</p>
|
||||
<h3 class="text-dark mt-2 mb-0">12.3%</h3>
|
||||
<p class="text-muted mb-0 text-truncate">Kekurangan Potensi</p>
|
||||
<h4 class="text-dark mt-2 mb-0">23.113.261.943</h4>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
@@ -100,7 +100,7 @@
|
||||
<div class="col-lg-4">
|
||||
<div class="card card-height-100">
|
||||
<div class="card-header d-flex align-items-center justify-content-between gap-2">
|
||||
<h4 class=" mb-0 flex-grow-1 mb-0">Revenue</h4>
|
||||
<h4 class=" mb-0 flex-grow-1 mb-0">Pemenuhan Target PAD</h4>
|
||||
<div>
|
||||
<button type="button" class="btn btn-sm btn-outline-light">ALL</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-light">1M</button>
|
||||
@@ -121,7 +121,7 @@
|
||||
<div class="col-lg-4">
|
||||
<div class="card card-height-100">
|
||||
<div class="card-header d-flex align-items-center justify-content-between gap-2">
|
||||
<h4 class="card-title flex-grow-1 mb-0">Sales By Category</h4>
|
||||
<h4 class="card-title flex-grow-1 mb-0">Berkas Belum Lengkap</h4>
|
||||
<div>
|
||||
<button type="button" class="btn btn-sm btn-outline-light">ALL</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-light">1M</button>
|
||||
@@ -139,35 +139,25 @@
|
||||
<thead class="bg-light bg-opacity-50 thead-sm">
|
||||
<tr>
|
||||
<th class="py-1">
|
||||
Category
|
||||
KETEGORI
|
||||
</th>
|
||||
<th class="py-1">Orders</th>
|
||||
<th class="py-1">Perc.</th>
|
||||
<th class="py-1">NILAI</th>
|
||||
<th class="py-1">PERSENTASE</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Grocery</td>
|
||||
<td>NON USAHA</td>
|
||||
<td>187,232</td>
|
||||
<td>
|
||||
48.63%
|
||||
<span class="badge badge-soft-success float-end">2.5% Up</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Electonics</td>
|
||||
<td>USAHA</td>
|
||||
<td>126,874</td>
|
||||
<td>
|
||||
36.08%
|
||||
<span class="badge badge-soft-success float-end">8.5% Up</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Other</td>
|
||||
<td>90,127</td>
|
||||
<td>
|
||||
23.41%
|
||||
<span class="badge badge-soft-danger float-end">10.98% Down</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -183,7 +173,7 @@
|
||||
<div class="card">
|
||||
<div
|
||||
class="d-flex card-header justify-content-between align-items-center border-bottom border-dashed">
|
||||
<h4 class="card-title mb-0">Sessions by Country</h4>
|
||||
<h4 class="card-title mb-0">SEBARAN DATA</h4>
|
||||
<div class="dropdown">
|
||||
<a href="#" class="dropdown-toggle btn btn-sm btn-outline-light"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
@@ -215,7 +205,7 @@
|
||||
<div class="col-xl-6">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title mb-0">New Accounts</h4>
|
||||
<h4 class="card-title mb-0">Baru Di Update</h4>
|
||||
<a href="#!" class="btn btn-sm btn-light">
|
||||
View All
|
||||
</a>
|
||||
@@ -226,11 +216,11 @@
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover mb-0 table-centered">
|
||||
<thead>
|
||||
<th class="py-1">ID</th>
|
||||
<th class="py-1">Date</th>
|
||||
<th class="py-1">User</th>
|
||||
<th class="py-1">Account</th>
|
||||
<th class="py-1">Username</th>
|
||||
<th class="py-1">No. Registrasi</th>
|
||||
<th class="py-1">Tanggal</th>
|
||||
<th class="py-1">Pemohon</th>
|
||||
<th class="py-1">Status</th>
|
||||
<th class="py-1">Pemilik</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
@@ -313,7 +303,7 @@
|
||||
<div class="card">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title mb-0">
|
||||
Recent Transactions
|
||||
Pending Lama
|
||||
</h4>
|
||||
|
||||
<a href="#!" class="btn btn-sm btn-light">
|
||||
@@ -326,19 +316,19 @@
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover mb-0 table-centered">
|
||||
<thead>
|
||||
<th class="py-1">ID</th>
|
||||
<th class="py-1">Date</th>
|
||||
<th class="py-1">Amount</th>
|
||||
<th class="py-1">No. Registrasi</th>
|
||||
<th class="py-1">Tanggal</th>
|
||||
<th class="py-1">Retribusi</th>
|
||||
<th class="py-1">Status</th>
|
||||
<th class="py-1">
|
||||
Description
|
||||
Catatan
|
||||
</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>#98521</td>
|
||||
<td>24 April, 2024</td>
|
||||
<td>$120.55</td>
|
||||
<td>9.000.120.55</td>
|
||||
<td>
|
||||
<span class="badge bg-success">Cr</span>
|
||||
</td>
|
||||
@@ -347,7 +337,7 @@
|
||||
<tr>
|
||||
<td>#20158</td>
|
||||
<td>24 April, 2024</td>
|
||||
<td>$9.68</td>
|
||||
<td>6.000.009.68</td>
|
||||
<td>
|
||||
<span class="badge bg-success">Cr</span>
|
||||
</td>
|
||||
@@ -356,7 +346,7 @@
|
||||
<tr>
|
||||
<td>#36589</td>
|
||||
<td>20 April, 2024</td>
|
||||
<td>$105.22</td>
|
||||
<td>700.105.22</td>
|
||||
<td>
|
||||
<span class="badge bg-danger">Dr</span>
|
||||
</td>
|
||||
@@ -365,7 +355,7 @@
|
||||
<tr>
|
||||
<td>#95362</td>
|
||||
<td>18 April, 2024</td>
|
||||
<td>$80.59</td>
|
||||
<td>3.236.580.59</td>
|
||||
<td>
|
||||
<span class="badge bg-success">Cr</span>
|
||||
</td>
|
||||
@@ -374,7 +364,7 @@
|
||||
<tr>
|
||||
<td>#75214</td>
|
||||
<td>18 April, 2024</td>
|
||||
<td>$750.95</td>
|
||||
<td>555.750.95</td>
|
||||
<td>
|
||||
<span class="badge bg-danger">Dr</span>
|
||||
</td>
|
||||
|
||||
@@ -29,13 +29,11 @@
|
||||
<div class="collapse" id="sidebarDashboard">
|
||||
<ul class="nav sub-navbar-nav">
|
||||
<li class="sub-nav-item">
|
||||
<a class="sub-nav-link" href="{{ route ('home' ) }}">Pimpinan</a>
|
||||
<a class="sub-nav-link" href="{{ route ('home' ) }}">Dashboard Pimpinan</a>
|
||||
|
||||
</li>
|
||||
<li class="sub-nav-item">
|
||||
<a class="sub-nav-link" href="{{ route ('home' ) }}">Dashboard 2</a>
|
||||
</li>
|
||||
<li class="sub-nav-item">
|
||||
<a class="sub-nav-link" href="{{ route ('home' ) }}">Dashboard 3</a>
|
||||
<a class="sub-nav-link" href="{{ route ('dashboards.pbg' ) }}">Dashboard PBG</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -2,4 +2,10 @@
|
||||
|
||||
@vite('resources/js/app.js')
|
||||
|
||||
@yield('scripts')
|
||||
@yield('scripts')
|
||||
|
||||
<script>
|
||||
window.GlobalConfig = {
|
||||
apiHost: "{{config('app.api_url')}}"
|
||||
};
|
||||
</script>
|
||||
@@ -17,16 +17,16 @@ class="authentication-bg"
|
||||
<div class="p-4">
|
||||
<div class="mx-auto mb-4 text-center">
|
||||
<div class="mx-auto text-center auth-logo">
|
||||
<a href="{{ route('home') }}" class="logo-dark">
|
||||
<img src="/images/logo-dark.png" height="32" alt="logo dark">
|
||||
<!-- <a href="{{ route('home') }}" class="logo-dark">
|
||||
<img src="/images/simbg-dputr.png" height="200" width="100%" alt="dputr logo">
|
||||
</a>
|
||||
|
||||
<a href="{{ route('home') }}" class="logo-light">
|
||||
<img src="/images/logo-light.png" height="28" alt="logo light">
|
||||
</a>
|
||||
<img src="/images/simbg-dputr.png" height="200" width="100%" alt="dputr light">
|
||||
</a> -->
|
||||
</div>
|
||||
|
||||
<img src="/images/404.svg" alt="auth" height="250" class="mt-5 mb-3" />
|
||||
<img src="/images/simbg-dputr.png" alt="auth" height="250" class="mt-5 mb-3" />
|
||||
|
||||
<h2 class="fs-22 lh-base">Page Not Found !</h2>
|
||||
<p class="text-muted mt-1 mb-4">The page you're trying to reach seems to have gone <br /> missing in the digital wilderness.</p>
|
||||
|
||||
257
resources/views/pbg_task/show.blade.php
Normal file
257
resources/views/pbg_task/show.blade.php
Normal file
@@ -0,0 +1,257 @@
|
||||
@extends('layouts.vertical', ['subtitle' => 'Detail'])
|
||||
|
||||
@section('css')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('layouts.partials/page-title', ['title' => 'Data', 'subtitle' => 'PBG'])
|
||||
|
||||
<div class="row">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<ul class="nav nav-tabs nav-justified">
|
||||
<li class="nav-item">
|
||||
<a href="#pbgTask" data-bs-toggle="tab" aria-expanded="true" class="nav-link active">
|
||||
<span class="d-none d-sm-block">PBG Task</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#pbgTaskRetributions" data-bs-toggle="tab" aria-expanded="false"
|
||||
class="nav-link">
|
||||
<span class="d-none d-sm-block">PBG Task Retributions</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#pbgTaskIntegration" data-bs-toggle="tab" aria-expanded="false" class="nav-link">
|
||||
<span class="d-none d-sm-block">PBG Task Index Integrations</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#pbgTaskPrasarana" data-bs-toggle="tab" aria-expanded="false" class="nav-link">
|
||||
<span class="d-none d-sm-block">PBG Task Prasarana</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="pbgTask">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<dt>Name</dt>
|
||||
<dd>{{$data->name}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Owner Name</dt>
|
||||
<dd>{{$data->owner_name}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Aplication Type Name</dt>
|
||||
<dd>{{$data->application_type_name}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Condition</dt>
|
||||
<dd>{{$data->condition}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Registration Number</dt>
|
||||
<dd>{{$data->registration_number}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Document Number</dt>
|
||||
<dd>{{$data->document_number}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Address</dt>
|
||||
<dd>{{$data->address}}</dd>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<dt>Status Name</dt>
|
||||
<dd>{{$data->status_name}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>SLF Status Name</dt>
|
||||
<dd>{{$data->slf_status_name}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Function Type</dt>
|
||||
<dd>{{$data->function_type}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Consultation Type</dt>
|
||||
<dd>{{$data->consultation_type}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Due Date</dt>
|
||||
<dd>{{$data->due_date}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Task Created At</dt>
|
||||
<dd>{{$data->task_created_at}}</dd>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="pbgTaskRetributions">
|
||||
@if ($data->pbg_task_retributions)
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<dt>Luas Bangunan</dt>
|
||||
<dd>{{$data->pbg_task_retributions->luas_bangunan}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Indeks Lokalitas</dt>
|
||||
<dd>{{$data->pbg_task_retributions->indeks_lokalitas}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Wilayah SHST</dt>
|
||||
<dd>{{$data->pbg_task_retributions->wilayah_shst}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Kegiatan Name</dt>
|
||||
<dd>{{$data->pbg_task_retributions->kegiatan_name}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Nilai SHST</dt>
|
||||
<dd>{{$data->pbg_task_retributions->nilai_shst}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Indeks Integrasi</dt>
|
||||
<dd>{{$data->pbg_task_retributions->indeks_terintegrasi}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Indeks Bg Terbangun</dt>
|
||||
<dd>{{$data->pbg_task_retributions->indeks_bg_terbangun}}</dd>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="mb-3">
|
||||
<dt>Nilai Retribusi Bangunan</dt>
|
||||
<dd>{{$data->pbg_task_retributions->nilai_retribusi_bangunan}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Nilai Prasarana</dt>
|
||||
<dd>{{$data->pbg_task_retributions->nilai_prasarana}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>PBG Dokumen</dt>
|
||||
<dd>{{$data->pbg_task_retributions->pbg_document}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Underpayment</dt>
|
||||
<dd>{{$data->pbg_task_retributions->underpayment}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>SKRD Amount</dt>
|
||||
<dd>{{$data->pbg_task_retributions->skrd_amount}}</dd>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
Data Not Available
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="tab-pane" id="pbgTaskIntegration">
|
||||
@if ($data->pbg_task_index_integrations)
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="mb-3">
|
||||
<dt>Indeks Fungsi Bangunan</dt>
|
||||
<dd>{{$data->pbg_task_index_integrations->indeks_fungsi_bangunan}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Indeks Parameter Kompleksitas</dt>
|
||||
<dd>{{$data->pbg_task_index_integrations->indeks_parameter_kompleksitas}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Indeks Parameter Permanensi</dt>
|
||||
<dd>{{$data->pbg_task_index_integrations->indeks_parameter_permanensi}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Indeks Paramter Ketinggian</dt>
|
||||
<dd>{{$data->pbg_task_index_integrations->indeks_parameter_ketinggian}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Faktor Kepemilikan</dt>
|
||||
<dd>{{$data->pbg_task_index_integrations->faktor_kepemilikan}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Indeks Terintegrasi</dt>
|
||||
<dd>{{$data->pbg_task_index_integrations->indeks_terintegrasi}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Total</dt>
|
||||
<dd>{{$data->pbg_task_index_integrations->total}}</dd>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
Data Not Available
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="tab-pane" id="pbgTaskPrasarana">
|
||||
<div class="row d-flex flex-warp gap-3 justify-content-center">
|
||||
@if ($data->pbg_task_retributions && $data->pbg_task_retributions->pbg_task_prasarana)
|
||||
@foreach ($data->pbg_task_retributions->pbg_task_prasarana as $prasarana)
|
||||
<div class="border p-3 rounded shadow-sm col-md-4">
|
||||
<div class="mb-3">
|
||||
<dt>Prasarana Type</dt>
|
||||
<dd>{{$prasarana->prasarana_type}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Building Type</dt>
|
||||
<dd>{{$prasarana->building_type}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Total</dt>
|
||||
<dd>{{$prasarana->total}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Quantity</dt>
|
||||
<dd>{{$prasarana->quantity}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Unit</dt>
|
||||
<dd>{{$prasarana->unit}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Index Prasarana</dt>
|
||||
<dd>{{$prasarana->index_prasarana}}</dd>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<dt>Created At</dt>
|
||||
<dd>{{$prasarana->created_at}}</dd>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@else
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
Data Not Available
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@section('scripts')
|
||||
@endsection
|
||||
@@ -52,12 +52,11 @@ Route::group(['middleware' => 'auth:sanctum'], function (){
|
||||
|
||||
// sync pbg google sheet
|
||||
Route::get('/sync-pbg-task-google-sheet', [PbgTaskController::class, 'syncPbgFromGoogleSheet'])->name('pbg-task.sync-google-sheet');
|
||||
Route::apiResource('/api-google-sheet', GoogleSheetController::class);
|
||||
Route::get('/sync-task', [SyncronizeController::class, 'syncPbgTask'])->name('api.task');
|
||||
Route::get('/get-user-token', [SyncronizeController::class, 'getUserToken'])->name('api.task.token');
|
||||
Route::get('/get-index-integration-retribution/{uuid}', [SyncronizeController::class, 'syncIndexIntegration'])->name('api.task.inntegration');
|
||||
Route::get('/sync-task-submit/{uuid}', [SyncronizeController::class, 'syncTaskDetailSubmit'])->name('api.task.submit');
|
||||
});
|
||||
|
||||
Route::apiResource('/api-google-sheet', GoogleSheetController::class);
|
||||
|
||||
|
||||
Route::get('/sync-task', [SyncronizeController::class, 'syncPbgTask'])->name('api.task');
|
||||
Route::get('/get-user-token', [SyncronizeController::class, 'getUserToken'])->name('api.task.token');
|
||||
Route::get('/get-index-integration-retribution/{uuid}', [SyncronizeController::class, 'syncIndexIntegration'])->name('api.task.inntegration');
|
||||
Route::get('/sync-task-submit/{uuid}', [SyncronizeController::class, 'syncTaskDetailSubmit'])->name('api.task.submit');
|
||||
@@ -20,6 +20,10 @@ Route::group(['middleware' => 'auth'], function(){
|
||||
Route::group(['prefix' => '/dashboards'], function(){
|
||||
Route::get('/bigdata', [BigDataController::class, 'index'])->name('home');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => '/dashboards'], function(){
|
||||
Route::get('/dashboard-pbg', [BigDataController::class, 'pbg'])->name('dashboards.pbg');
|
||||
});
|
||||
|
||||
// settings
|
||||
Route::group(['prefix' => '/settings'], function(){
|
||||
|
||||
1458
sibedas.sql
1458
sibedas.sql
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,26 @@
|
||||
import { defineConfig } from 'vite';
|
||||
import laravel from 'laravel-vite-plugin';
|
||||
import { defineConfig } from "vite";
|
||||
import laravel from "laravel-vite-plugin";
|
||||
import path from "path";
|
||||
|
||||
export default defineConfig({
|
||||
build: {
|
||||
outDir: "public/build",
|
||||
manifest: true, // Menghasilkan manifest.json untuk Laravel
|
||||
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
"@": path.resolve(__dirname, "resources/js"),
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
laravel({
|
||||
input: [
|
||||
//css
|
||||
"resources/scss/icons.scss",
|
||||
"resources/scss/style.scss",
|
||||
"resources/scss/components/_circle.scss",
|
||||
|
||||
"node_modules/quill/dist/quill.snow.css",
|
||||
"node_modules/quill/dist/quill.bubble.css",
|
||||
"node_modules/flatpickr/dist/flatpickr.min.css",
|
||||
@@ -16,7 +29,6 @@ export default defineConfig({
|
||||
"node_modules/flatpickr/dist/themes/dark.css",
|
||||
"node_modules/gridjs/dist/theme/mermaid.min.css",
|
||||
|
||||
|
||||
//js
|
||||
"resources/js/app.js",
|
||||
"resources/js/config.js",
|
||||
@@ -31,8 +43,16 @@ export default defineConfig({
|
||||
"resources/js/pages/maps-spain.js",
|
||||
"resources/js/pages/maps-russia.js",
|
||||
"resources/js/pages/maps-iraq.js",
|
||||
"resources/js/pages/maps-canada.js"
|
||||
"resources/js/pages/maps-canada.js",
|
||||
|
||||
//js-additional
|
||||
"resources/js/dashboards/bigdata.js",
|
||||
"resources/js/master/users/users.js",
|
||||
"resources/js/settings/syncronize/syncronize.js",
|
||||
"resources/js/data-settings/index.js",
|
||||
"resources/js/pbg-task/index.js",
|
||||
"resources/js/settings/general/general-settings.js",
|
||||
"resources/js/tables/common-table.js"
|
||||
],
|
||||
refresh: true,
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user