Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6307417ae3 | |||
| 55dc0751d3 | |||
| 97ffd322a1 | |||
| 6fb59e58e9 | |||
| 7e99d547c8 | |||
| 65f82c9bfd | |||
| 44ebc20d3c | |||
| b60bbd4290 | |||
| 29b705b59c | |||
| 95ab8eff7f | |||
| bfc2f7f1f9 | |||
| 50f1757a64 | |||
| d54edb7783 | |||
| 3309664bae | |||
| 4eac6ab83d | |||
| 604e0d8479 | |||
| 99e99fa2e6 | |||
| ff324014f6 | |||
| 7d06e12de8 | |||
| f38d518f96 |
+3
-3
@@ -4,6 +4,7 @@ APP_KEY=
|
|||||||
APP_DEBUG=true
|
APP_DEBUG=true
|
||||||
APP_TIMEZONE=UTC
|
APP_TIMEZONE=UTC
|
||||||
APP_URL=http://localhost
|
APP_URL=http://localhost
|
||||||
|
API_URL=http://localhost:8000
|
||||||
|
|
||||||
APP_LOCALE=en
|
APP_LOCALE=en
|
||||||
APP_FALLBACK_LOCALE=en
|
APP_FALLBACK_LOCALE=en
|
||||||
@@ -65,6 +66,5 @@ AWS_USE_PATH_STYLE_ENDPOINT=false
|
|||||||
|
|
||||||
VITE_APP_NAME="${APP_NAME}"
|
VITE_APP_NAME="${APP_NAME}"
|
||||||
|
|
||||||
SIMBG_HOST="xxxxxx"
|
API_KEY_GOOGLE="xxxxx"
|
||||||
SIMBG_EMAIL="xxxxxx"
|
SPREAD_SHEET_ID="xxxxx"
|
||||||
SIMBG_PASSWORD="xxxxx"
|
|
||||||
@@ -12,62 +12,114 @@ class DashboardController extends Controller
|
|||||||
use GlobalApiResponse;
|
use GlobalApiResponse;
|
||||||
|
|
||||||
public function businnessDocument(Request $request){
|
public function businnessDocument(Request $request){
|
||||||
$businessData = DB::table('pbg_task')
|
$query = once(function () {
|
||||||
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
|
return DB::table('pbg_task AS pt')
|
||||||
->select(
|
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||||
DB::raw('COUNT(DISTINCT pbg_task.id) as task_count'),
|
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid')
|
||||||
DB::raw('SUM(pbg_task_retributions.nilai_retribusi_bangunan) as total_retribution')
|
->where(function ($query) {
|
||||||
)
|
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||||
->where(function ($query) {
|
->orWhereNull('ptgs.status_verifikasi');
|
||||||
$query->where("pbg_task.function_type", "LIKE", "sebagai tempat usaha%");
|
})
|
||||||
})
|
->where(function ($query) {
|
||||||
->first();
|
$query->whereRaw('LOWER(TRIM(pt.function_type)) = ?', [strtolower(trim('Sebagai Tempat Usaha'))]);
|
||||||
$taskCount = $businessData->task_count;
|
})
|
||||||
$taskTotal = $businessData->total_retribution;
|
->selectRaw('COUNT(pt.id) AS total_data,
|
||||||
$result = [
|
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution')
|
||||||
|
->first();
|
||||||
|
});
|
||||||
|
|
||||||
|
$taskCount = $query->total_data ?? 0;
|
||||||
|
$taskTotal = $query->total_retribution ?? 0;
|
||||||
|
|
||||||
|
return $this->resSuccess([
|
||||||
"count" => $taskCount,
|
"count" => $taskCount,
|
||||||
"series" => [$taskCount],
|
|
||||||
"total" => $taskTotal
|
"total" => $taskTotal
|
||||||
];
|
]);
|
||||||
return $this->resSuccess($result);
|
|
||||||
}
|
}
|
||||||
public function nonBusinnessDocument(Request $request){
|
public function nonBusinnessDocument(Request $request){
|
||||||
$businessData = DB::table('pbg_task')
|
|
||||||
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
|
$query = once( function () {
|
||||||
->select(
|
return DB::table('pbg_task AS pt')
|
||||||
DB::raw('COUNT(DISTINCT pbg_task.id) as task_count'),
|
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||||
DB::raw('SUM(pbg_task_retributions.nilai_retribusi_bangunan) as total_retribution')
|
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Join ke pbg_task_retributions
|
||||||
)
|
|
||||||
->where(function ($query) {
|
->where(function ($query) {
|
||||||
$query->where("pbg_task.function_type", "NOT LIKE", "sebagai tempat usaha%")
|
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||||
->orWhereNull("pbg_task.function_type");
|
->orWhereNull('ptgs.status_verifikasi'); // Include NULL values
|
||||||
})
|
})
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->whereRaw('LOWER(TRIM(pt.function_type)) != ?', [strtolower(trim('Sebagai Tempat Usaha'))])
|
||||||
|
->orWhereNull('pt.function_type'); // Include NULL values
|
||||||
|
})
|
||||||
|
->selectRaw('COUNT(pt.id) AS total_data,
|
||||||
|
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
|
||||||
->first();
|
->first();
|
||||||
$taskCount = $businessData->task_count;
|
});
|
||||||
$taskTotal = $businessData->total_retribution;
|
$taskCount = $query->total_data ?? 0;
|
||||||
$result = [
|
$taskTotal = $query->total_retribution ?? 0;
|
||||||
|
return $this->resSuccess([
|
||||||
"count" => $taskCount,
|
"count" => $taskCount,
|
||||||
"series" => [$taskCount],
|
|
||||||
"total" => $taskTotal
|
"total" => $taskTotal
|
||||||
];
|
]);
|
||||||
return $this->resSuccess($result);
|
|
||||||
}
|
}
|
||||||
public function allTaskDocuments(){
|
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')
|
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
|
||||||
->select(
|
->select(
|
||||||
DB::raw('COUNT(DISTINCT pbg_task.id) as task_count'),
|
DB::raw('COUNT(DISTINCT pbg_task.id) as task_count'),
|
||||||
DB::raw('SUM(pbg_task_retributions.nilai_retribusi_bangunan) as total_retribution')
|
DB::raw('SUM(pbg_task_retributions.nilai_retribusi_bangunan) as total_retribution')
|
||||||
)
|
)
|
||||||
->first();
|
->first();
|
||||||
$taskCount = $query->task_count;
|
});
|
||||||
$taskTotal = $query->total_retribution;
|
$taskCount = $query->task_count ?? 0;
|
||||||
$result = [
|
$taskTotal = $query->total_retribution ?? 0;
|
||||||
|
return $this->resSuccess([
|
||||||
"count" => $taskCount,
|
"count" => $taskCount,
|
||||||
"series" => [$taskCount],
|
|
||||||
"total" => $taskTotal
|
"total" => $taskTotal
|
||||||
];
|
]);
|
||||||
return $this->resSuccess($result);
|
}
|
||||||
|
|
||||||
|
public function verificationDocuments(){
|
||||||
|
$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 ?? 0;
|
||||||
|
$taskTotal = $query->total_retribution ?? 0;
|
||||||
|
|
||||||
|
return $this->resSuccess([
|
||||||
|
"count"=> $taskCount,
|
||||||
|
"total"=> $taskTotal
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function nonVerificationDocuments(){
|
||||||
|
$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) {
|
||||||
|
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||||
|
->orWhereNull('ptgs.status_verifikasi'); // Include NULL values
|
||||||
|
})
|
||||||
|
->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 ?? 0;
|
||||||
|
$taskTotal = $query->total_retribution ?? 0;
|
||||||
|
|
||||||
|
return $this->resSuccess([
|
||||||
|
"count"=> $taskCount,
|
||||||
|
"total"=> $taskTotal
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function pbgTaskDocuments(Request $request){
|
public function pbgTaskDocuments(Request $request){
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\DataSettingRequest;
|
||||||
|
use App\Http\Resources\DataSettingResource;
|
||||||
|
use App\Models\DataSetting;
|
||||||
|
use App\Traits\GlobalApiResponse;
|
||||||
|
use Exception;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class DataSettingController extends Controller
|
||||||
|
{
|
||||||
|
use GlobalApiResponse;
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$query = DataSetting::query()->orderBy('id', 'desc');
|
||||||
|
if ($request->has("search") && !empty($request->get("search"))) {
|
||||||
|
$query = $query->where("key", $request->get("search"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return DataSettingResource::collection($query->paginate());
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return $this->resError($e->getMessage(), $e->getTrace());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(DataSettingRequest $request)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$data = DataSetting::create($request->validated());
|
||||||
|
$result = [
|
||||||
|
"success" => true,
|
||||||
|
"message" => "Data Setting created successfully",
|
||||||
|
"data" => new DataSettingResource($data)
|
||||||
|
];
|
||||||
|
return $this->resSuccess($result);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return $this->resError($e->getMessage(), $e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(string $id)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$setting = DataSetting::findOrFail($id);
|
||||||
|
$result = [
|
||||||
|
"setting" => true,
|
||||||
|
"message" => "Data setting successfully",
|
||||||
|
"data" => new DataSettingResource($setting)
|
||||||
|
];
|
||||||
|
return $this->resSuccess($result);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return $this->resError($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(DataSettingRequest $request, string $id)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$data = DataSetting::findOrFail($id);
|
||||||
|
$data->update($request->validated());
|
||||||
|
$result = [
|
||||||
|
"success" => true,
|
||||||
|
"message" => "Data Setting updated successfully"
|
||||||
|
];
|
||||||
|
return $this->resSuccess($result);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return $this->resError($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$setting = DataSetting::findOrFail($id);
|
||||||
|
$setting->delete();
|
||||||
|
$result = [
|
||||||
|
"success" => true,
|
||||||
|
"message" => "Data Setting deleted successfully"
|
||||||
|
];
|
||||||
|
return $this->resSuccess($result);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return $this->resError($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Services\GoogleSheetService;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class GoogleSheetController extends Controller
|
||||||
|
{
|
||||||
|
protected $googleSheetService;
|
||||||
|
public function __construct(GoogleSheetService $googleSheetService){
|
||||||
|
$this->googleSheetService = $googleSheetService;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$dataCollection = $this->googleSheetService->getSheetDataCollection();
|
||||||
|
$result = [
|
||||||
|
"last_row" => $this->googleSheetService->getLastRowByColumn("C"),
|
||||||
|
"last_column" => $this->googleSheetService->getLastColumn(),
|
||||||
|
"header" => $this->googleSheetService->getHeader(),
|
||||||
|
"data_collection" => $dataCollection
|
||||||
|
];
|
||||||
|
return response()->json($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,325 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
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;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class PbgTaskController extends Controller
|
||||||
|
{
|
||||||
|
protected $googleSheetService;
|
||||||
|
public function __construct(GoogleSheetService $googleSheetService){
|
||||||
|
$this->googleSheetService = $googleSheetService;
|
||||||
|
}
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(PbgTaskMultiStepRequest $request)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$data = PbgTask::create([
|
||||||
|
"uuid" => $request->input("step1Form.uuid"),
|
||||||
|
"name" => $request->input("step1Form.name"),
|
||||||
|
"owner_name" => $request->input("step1Form.owner_name"),
|
||||||
|
"application_type" => $request->input("step1Form.application_type"),
|
||||||
|
"application_type_name" => $request->input("step1Form.application_type_name"),
|
||||||
|
"condition" => $request->input("step1Form.condition"),
|
||||||
|
"registration_number" => $request->input("step1Form.registration_number"),
|
||||||
|
"document_number" => $request->input("step1Form.document_number"),
|
||||||
|
"address" => $request->input("step1Form.address"),
|
||||||
|
"status" => $request->input("step1Form.status"),
|
||||||
|
"status_name" => $request->input("step1Form.status_name"),
|
||||||
|
"slf_status" => $request->input("step1Form.slf_status"),
|
||||||
|
"slf_status_name" => $request->input("step1Form.slf_status_name"),
|
||||||
|
"function_type" => $request->input("step1Form.function_type"),
|
||||||
|
"consultation_type" => $request->input("step1Form.consultation_type"),
|
||||||
|
"due_date" => $request->input("step1Form.due_date"),
|
||||||
|
"land_certificate_phase" => $request->input("step1Form.land_certificate_phase"),
|
||||||
|
"task_created_at" => $request->input("step1Form.task_created_at"),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
"success" => true,
|
||||||
|
"message" => "Step 1 berhasil disimpan!",
|
||||||
|
"data" => $data
|
||||||
|
], 201);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
"success" => false,
|
||||||
|
"message" => "Gagal menyimpan data",
|
||||||
|
"error" => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
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(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function validatePbgTask(Request $request){
|
||||||
|
return $request->validate([
|
||||||
|
"uuid" => $request->input("step1Form.uuid"),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function syncPbgFromGoogleSheet(){
|
||||||
|
try{
|
||||||
|
$totalRowCount = $this->googleSheetService->getLastRowByColumn("C");
|
||||||
|
$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[] =
|
||||||
|
[
|
||||||
|
'no_registrasi' => $data['no__registrasi'] ?? null,
|
||||||
|
'jenis_konsultasi' => $data['jenis_konsultasi'] ?? null,
|
||||||
|
'fungsi_bg' => $data['fungsi_bg'] ?? null,
|
||||||
|
'tgl_permohonan' => $this->convertToDate($data['tgl_permohonan']),
|
||||||
|
'status_verifikasi' => $data['status_verifikasi'] ?? null,
|
||||||
|
'status_permohonan' => $this->convertToDate($data['status_permohonan']),
|
||||||
|
'alamat_pemilik' => $data['alamat_pemilik'] ?? null,
|
||||||
|
'no_hp' => $data['no__hp'] ?? null,
|
||||||
|
'email' => $data['e_mail'] ?? null,
|
||||||
|
'tanggal_catatan' => $this->convertToDate($data['tanggal_catatan']),
|
||||||
|
'catatan_kekurangan_dokumen' => $data['catatan_kekurangan_dokumen'] ?? null,
|
||||||
|
'gambar' => $data['gambar'] ?? null,
|
||||||
|
'krk_kkpr' => $data['krk_kkpr'] ?? null,
|
||||||
|
'no_krk' => $data['no__krk'] ?? null,
|
||||||
|
'lh' => $data['lh'] ?? null,
|
||||||
|
'ska' => $data['ska'] ?? null,
|
||||||
|
'keterangan' => $data['keterangan'] ?? null,
|
||||||
|
'helpdesk' => $data['helpdesk'] ?? null,
|
||||||
|
'pj' => $data['pj'] ?? null,
|
||||||
|
'kepemilikan' => $data['kepemilikan'] ?? null,
|
||||||
|
'potensi_taru' => $data['potensi_taru'] ?? null,
|
||||||
|
'validasi_dinas' => $data['validasi_dinas'] ?? null,
|
||||||
|
'kategori_retribusi' => $data['kategori_retribusi'] ?? null,
|
||||||
|
'no_urut_ba_tpt' => $data['no__urut_ba_tpt__2024_0001_'] ?? null,
|
||||||
|
'tanggal_ba_tpt' => $this->convertToDate($data['tanggal_ba_tpt']),
|
||||||
|
'no_urut_ba_tpa' => $data['no__urut_ba_tpa'] ?? null,
|
||||||
|
'tanggal_ba_tpa' => $this->convertToDate($data['tanggal_ba_tpa']),
|
||||||
|
'no_urut_skrd' => $data['no__urut_skrd__2024_0001_'] ?? null,
|
||||||
|
'tanggal_skrd' => $this->convertToDate($data['tanggal_skrd']),
|
||||||
|
'ptsp' => $data['ptsp'] ?? null,
|
||||||
|
'selesai_terbit' => $data['selesai_terbit'] ?? null,
|
||||||
|
'tanggal_pembayaran' => $this->convertToDate($data['tanggal_pembayaran__yyyy_mm_dd_']),
|
||||||
|
'format_sts' => $data['format_sts'] ?? null,
|
||||||
|
'tahun_terbit' => (int) $data['tahun_terbit'] ?? null,
|
||||||
|
'tahun_berjalan' => (int) $data['tahun_berjalan'] ?? null,
|
||||||
|
'kelurahan' => $data['kelurahan'] ?? null,
|
||||||
|
'kecamatan' => $data['kecamatan'] ?? null,
|
||||||
|
'lb' => $this->convertToDecimal($data['lb']) ?? null,
|
||||||
|
'tb' => $this->convertToDecimal($data['tb']) ?? null,
|
||||||
|
'jlb' => (int) $data['jlb'] ?? null,
|
||||||
|
'unit' => (int) $data['unit'] ?? null,
|
||||||
|
'usulan_retribusi' => (int) $data['usulan_retribusi'] ?? null,
|
||||||
|
'nilai_retribusi_keseluruhan_simbg' => $this->convertToDecimal($data['nilai_retribusi_keseluruhan__simbg_']) ?? null,
|
||||||
|
'nilai_retribusi_keseluruhan_pad' => $this->convertToDecimal($data['nilai_retribusi_keseluruhan__pad_']) ?? null,
|
||||||
|
'denda' => $this->convertToDecimal($data['denda']) ?? null,
|
||||||
|
'latitude' => $data['latitude'] ?? null,
|
||||||
|
'longitude' => $data['longitude'] ?? null,
|
||||||
|
'nik_nib' => $data['nik_nib'] ?? null,
|
||||||
|
'dok_tanah' => $data['dok__tanah'] ?? null,
|
||||||
|
'temuan' => $data['temuan'] ?? null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
DB::beginTransaction();
|
||||||
|
|
||||||
|
$batchSize = 1000;
|
||||||
|
$chunks = array_chunk($mapToUpsert, $batchSize);
|
||||||
|
|
||||||
|
foreach($chunks as $chunk){
|
||||||
|
PbgTaskGoogleSheet::upsert($chunk, ["no_registrasi"],[
|
||||||
|
'jenis_konsultasi',
|
||||||
|
'nama_pemilik',
|
||||||
|
'lokasi_bg',
|
||||||
|
'fungsi_bg',
|
||||||
|
'nama_bangunan',
|
||||||
|
'tgl_permohonan',
|
||||||
|
'status_verifikasi',
|
||||||
|
'status_permohonan',
|
||||||
|
'alamat_pemilik',
|
||||||
|
'no_hp',
|
||||||
|
'email',
|
||||||
|
'tanggal_catatan',
|
||||||
|
'catatan_kekurangan_dokumen',
|
||||||
|
'gambar',
|
||||||
|
'krk_kkpr',
|
||||||
|
'no_krk',
|
||||||
|
'lh',
|
||||||
|
'ska',
|
||||||
|
'keterangan',
|
||||||
|
'helpdesk',
|
||||||
|
'pj',
|
||||||
|
'kepemilikan',
|
||||||
|
'potensi_taru',
|
||||||
|
'validasi_dinas',
|
||||||
|
'kategori_retribusi',
|
||||||
|
'no_urut_ba_tpt',
|
||||||
|
'tanggal_ba_tpt',
|
||||||
|
'no_urut_ba_tpa',
|
||||||
|
'tanggal_ba_tpa',
|
||||||
|
'no_urut_skrd',
|
||||||
|
'tanggal_skrd',
|
||||||
|
'ptsp',
|
||||||
|
'selesai_terbit',
|
||||||
|
'tanggal_pembayaran',
|
||||||
|
'format_sts',
|
||||||
|
'tahun_terbit',
|
||||||
|
'tahun_berjalan',
|
||||||
|
'kelurahan',
|
||||||
|
'kecamatan',
|
||||||
|
'lb',
|
||||||
|
'tb',
|
||||||
|
'jlb',
|
||||||
|
'unit',
|
||||||
|
'usulan_retribusi',
|
||||||
|
'nilai_retribusi_keseluruhan_simbg',
|
||||||
|
'nilai_retribusi_keseluruhan_pad',
|
||||||
|
'denda',
|
||||||
|
'latitude',
|
||||||
|
'longitude',
|
||||||
|
'nik_nib',
|
||||||
|
'dok_tanah',
|
||||||
|
'temuan',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$total_data = count($mapToUpsert);
|
||||||
|
|
||||||
|
$import_datasource->update([
|
||||||
|
"message" => "Successfully imported {$total_data}",
|
||||||
|
"status" => ImportDatasourceStatus::Success->value,
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
"success" => true,
|
||||||
|
"message" => "Data berhasil disimpan ke database"
|
||||||
|
], 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",
|
||||||
|
"error" => $ex->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function convertToDecimal(?string $value): ?float
|
||||||
|
{
|
||||||
|
if (empty($value)) {
|
||||||
|
return null; // Return null if the input is empty
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove all non-numeric characters except comma and dot
|
||||||
|
$value = preg_replace('/[^0-9,\.]/', '', $value);
|
||||||
|
|
||||||
|
// If the number contains both dot (.) and comma (,)
|
||||||
|
if (strpos($value, '.') !== false && strpos($value, ',') !== false) {
|
||||||
|
$value = str_replace('.', '', $value); // Remove thousands separator
|
||||||
|
$value = str_replace(',', '.', $value); // Convert decimal separator to dot
|
||||||
|
}
|
||||||
|
// If only a dot is present (assumed as thousands separator)
|
||||||
|
elseif (strpos($value, '.') !== false) {
|
||||||
|
$value = str_replace('.', '', $value); // Remove all dots (treat as thousands separators)
|
||||||
|
}
|
||||||
|
// If only a comma is present (assumed as decimal separator)
|
||||||
|
elseif (strpos($value, ',') !== false) {
|
||||||
|
$value = str_replace(',', '.', $value); // Convert comma to dot (decimal separator)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the value is numeric before returning
|
||||||
|
return is_numeric($value) ? (float) number_format((float) $value, 2, '.', '') : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function convertToInteger($value) {
|
||||||
|
// Check if the value is an empty string, and return null if true
|
||||||
|
if (trim($value) === "") {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, cast to integer
|
||||||
|
return (int) $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function convertToDate($dateString)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
// Check if the string is empty
|
||||||
|
if (empty($dateString)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to parse the date string
|
||||||
|
$date = Carbon::parse($dateString);
|
||||||
|
|
||||||
|
// Return the Carbon instance
|
||||||
|
return $date->format('Y-m-d');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// Return null if an error occurs during parsing
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,9 +14,10 @@ class RequestAssignmentController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$query = PbgTask::query();
|
$query = PbgTask::query()->orderBy('id', 'desc');
|
||||||
if($request->has('search') && !empty($request->get("search"))){
|
if($request->has('search') && !empty($request->get("search"))){
|
||||||
$query->where('name', 'LIKE', '%'.$request->get('search').'%');
|
$query->where('name', 'LIKE', '%'.$request->get('search').'%')
|
||||||
|
->orWhere('registration_number', 'LIKE', '%'.$request->get('search').'%');
|
||||||
}
|
}
|
||||||
return RequestAssignmentResouce::collection($query->paginate());
|
return RequestAssignmentResouce::collection($query->paginate());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,19 @@
|
|||||||
namespace App\Http\Controllers\Dashboards;
|
namespace App\Http\Controllers\Dashboards;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\ImportDatasource;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class BigDataController extends Controller
|
class BigDataController extends Controller
|
||||||
{
|
{
|
||||||
public function index(){
|
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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests\DataSettingRequest;
|
||||||
|
use App\Models\DataSetting;
|
||||||
|
use Exception;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Facades\Request;
|
||||||
|
|
||||||
|
class DataSettingController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view("data-settings.index");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view("data-settings.create");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(DataSettingRequest $request)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
DB::beginTransaction();
|
||||||
|
DataSetting::create($request->validated());
|
||||||
|
DB::commit();
|
||||||
|
return redirect()->route("data-settings.index")->with("success","Successfully created");
|
||||||
|
}catch(Exception $ex){
|
||||||
|
DB::rollBack();
|
||||||
|
return redirect()->back()
|
||||||
|
->withInput()
|
||||||
|
->with('error', 'Something went wrong while saving data. ' . $ex->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(DataSetting $dataSetting)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit(string $id)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$data = DataSetting::findOrFail($id);
|
||||||
|
if(empty($data)){
|
||||||
|
return redirect()->route('data-settings.index')->with('error', 'Invalid id');
|
||||||
|
}
|
||||||
|
return view("data-settings.edit", compact("data"));
|
||||||
|
}catch(Exception $ex){
|
||||||
|
return redirect()->route("data-settings.index")->with("error", "Invalid id");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(DataSettingRequest $request,string $id)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
DB::beginTransaction();
|
||||||
|
$data = DataSetting::findOrFail($id);
|
||||||
|
$data->update($request->validated());
|
||||||
|
DB::commit();
|
||||||
|
return redirect()->route("data-settings.index")->with("success","Successfully updated");
|
||||||
|
}catch(Exception $ex){
|
||||||
|
DB::rollBack();
|
||||||
|
return redirect()->back()
|
||||||
|
->withInput()
|
||||||
|
->with('error', 'Something went wrong while saving data. ' . $ex->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
DB::beginTransaction();
|
||||||
|
DataSetting::findOrFail($id)->delete();
|
||||||
|
DB::commit();
|
||||||
|
return response()->json(['success' => true, 'message' => 'Item deleted successfully.']);
|
||||||
|
}catch(Exception $e){
|
||||||
|
DB::rollBack();
|
||||||
|
Log::error($e->getMessage());
|
||||||
|
return response()->json(['success' => false, 'message' => 'Failed to delete item.'], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getValueSetting(Request $request){
|
||||||
|
try{
|
||||||
|
$data = DataSetting::where('key', $request->key_name)->first();
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => "Successfully retrieved data",
|
||||||
|
"data"=> $data
|
||||||
|
]);
|
||||||
|
}catch(Exception $e){
|
||||||
|
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers\RequestAssignment;
|
namespace App\Http\Controllers\RequestAssignment;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\PbgTask;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class PbgTaskController extends Controller
|
class PbgTaskController extends Controller
|
||||||
@@ -12,7 +13,7 @@ class PbgTaskController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
return view('request-assignment.index');
|
return view('pbg_task.index');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -20,7 +21,7 @@ class PbgTaskController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function create()
|
public function create()
|
||||||
{
|
{
|
||||||
//
|
return view("pbg_task.create");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,7 +29,7 @@ class PbgTaskController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
//
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,7 +37,8 @@ class PbgTaskController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function show(string $id)
|
public function show(string $id)
|
||||||
{
|
{
|
||||||
//
|
$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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,7 +46,7 @@ class PbgTaskController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function edit(string $id)
|
public function edit(string $id)
|
||||||
{
|
{
|
||||||
//
|
return view("pbg_task.edit");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -15,30 +15,4 @@ class RoutingController extends Controller
|
|||||||
return redirect('auth.signin');
|
return redirect('auth.signin');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Display a view based on first route param
|
|
||||||
*
|
|
||||||
* @return \Illuminate\Http\Response
|
|
||||||
*/
|
|
||||||
public function root(Request $request, $first)
|
|
||||||
{
|
|
||||||
return view($first);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* second level route
|
|
||||||
*/
|
|
||||||
public function secondLevel(Request $request, $first, $second)
|
|
||||||
{
|
|
||||||
return view($first . '.' . $second);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* third level route
|
|
||||||
*/
|
|
||||||
public function thirdLevel(Request $request, $first, $second, $third)
|
|
||||||
{
|
|
||||||
return view($first . '.' . $second . '.' . $third);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,32 +8,38 @@ use Illuminate\Http\Request;
|
|||||||
use Exception;
|
use Exception;
|
||||||
class SyncronizeController extends Controller
|
class SyncronizeController extends Controller
|
||||||
{
|
{
|
||||||
|
protected $service_simbg;
|
||||||
|
public function __construct(ServiceSIMBG $service_simbg){
|
||||||
|
$this->service_simbg = $service_simbg;
|
||||||
|
}
|
||||||
public function index(Request $request){
|
public function index(Request $request){
|
||||||
return view('settings.syncronize.index');
|
return view('settings.syncronize.index');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function syncPbgTask(){
|
public function syncPbgTask(){
|
||||||
$res = (new ServiceSIMBG())->syncTaskList();
|
$res = $this->service_simbg->syncTaskList();
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function syncronizeTask(Request $request){
|
public function syncronizeTask(Request $request){
|
||||||
$res = (new ServiceSIMBG())->syncTaskList();
|
$res = $this->service_simbg->syncTaskList();
|
||||||
return redirect()->back()->with('success', 'Processing completed successfully');
|
return redirect()->back()->with('success', 'Processing completed successfully');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserToken(){
|
public function getUserToken(){
|
||||||
$res = (new ServiceSIMBG())->getToken();
|
$res = $this->service_simbg->getToken();
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function syncIndexIntegration($uuid){
|
public function syncIndexIntegration(Request $request, $uuid){
|
||||||
$res = (new ServiceSIMBG())->syncIndexIntegration($uuid);
|
$token = $request->get('token');
|
||||||
|
$res = $this->service_simbg->syncIndexIntegration($uuid, $token);
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function syncTaskDetailSubmit($uuid){
|
public function syncTaskDetailSubmit(Request $request, $uuid){
|
||||||
$res = (new ServiceSIMBG())->syncTaskDetailSubmit($uuid);
|
$token = $request->get('token');
|
||||||
|
$res = $this->service_simbg->syncTaskDetailSubmit($uuid, $token);
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class DataSettingRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
$id = $this->route('data_setting');
|
||||||
|
return [
|
||||||
|
"key" => "required|unique:data_settings,key," . $id,
|
||||||
|
"value" => "required",
|
||||||
|
"type" => "nullable",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class PbgTaskMultiStepRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
// rules step 1
|
||||||
|
"step1Form.uuid" => "required",
|
||||||
|
"step1Form.name" => "nullable|string|max:255",
|
||||||
|
"step1Form.owner_name" => "nullable|string|max:255",
|
||||||
|
"step1Form.application_type" => "nullable|string|max:255",
|
||||||
|
"step1Form.application_type_name" => "nullable|string|max:255",
|
||||||
|
"step1Form.condition" => "nullable|string|max:255",
|
||||||
|
"step1Form.registration_number" => "nullable|string|max:255",
|
||||||
|
"step1Form.document_number" => "nullable|string|max:255",
|
||||||
|
"step1Form.address" => "nullable|string|max:255",
|
||||||
|
"step1Form.status" => "nullable|integer",
|
||||||
|
"step1Form.status_name" => "nullable|string|max:255",
|
||||||
|
"step1Form.slf_status" => "nullable|string|max:255",
|
||||||
|
"step1Form.slf_status_name" => "nullable|string|max:255",
|
||||||
|
"step1Form.function_type" => "nullable|string|max:255",
|
||||||
|
"step1Form.consultation_type" => "nullable|string|max:255",
|
||||||
|
"step1Form.due_date" => "nullable|date",
|
||||||
|
"step1Form.land_certificate_phase" => "nullable|boolean",
|
||||||
|
"step1Form.task_created_at" => "nullable|date",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function messages()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
// message step 1
|
||||||
|
"step1Form.uuid.required" => "UUID wajib diisi.",
|
||||||
|
"step1Form.uuid.uuid" => "Format UUID tidak valid.",
|
||||||
|
"step1Form.name.max" => "Nama tidak boleh lebih dari 255 karakter.",
|
||||||
|
"step1Form.owner_name.max" => "Nama pemilik tidak boleh lebih dari 255 karakter.",
|
||||||
|
"step1Form.registration_number.max" => "Nomor registrasi tidak boleh lebih dari 255 karakter.",
|
||||||
|
"step1Form.document_number.max" => "Nomor dokumen tidak boleh lebih dari 255 karakter.",
|
||||||
|
"step1Form.status.integer" => "Status harus berupa angka.",
|
||||||
|
"step1Form.due_date.date" => "Tanggal jatuh tempo tidak valid.",
|
||||||
|
"step1Form.land_certificate_phase.boolean" => "Fase sertifikat tanah harus berupa true/false.",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class DataSettingResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'key' => $this->key,
|
||||||
|
'value' => $this->value,
|
||||||
|
'type' => $this->type,
|
||||||
|
'created_at' => $this->created_at->toDateTimeString(),
|
||||||
|
'updated_at' => $this->updated_at->toDateTimeString(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class DataSetting extends Model
|
||||||
|
{
|
||||||
|
protected $table = "data_settings";
|
||||||
|
protected $fillable = [
|
||||||
|
"key",
|
||||||
|
"value",
|
||||||
|
"type"
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -30,7 +30,11 @@ class PbgTask extends Model
|
|||||||
'task_created_at'
|
'task_created_at'
|
||||||
];
|
];
|
||||||
|
|
||||||
public function retributions(){
|
public function pbg_task_retributions(){
|
||||||
return $this->hasOne(PbgTaskRetributions::class, 'pbg_task_uid', 'uuid');
|
return $this->hasOne(PbgTaskRetributions::class, 'pbg_task_uid', 'uuid');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function pbg_task_index_integrations(){
|
||||||
|
return $this->hasOne(PbgTaskIndexIntegrations::class, 'pbg_task_uid', 'uuid');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class PbgTaskGoogleSheet extends Model
|
||||||
|
{
|
||||||
|
protected $table = "pbg_task_google_sheet";
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'jenis_konsultasi',
|
||||||
|
'no_registrasi',
|
||||||
|
'nama_pemilik',
|
||||||
|
'lokasi_bg',
|
||||||
|
'fungsi_bg',
|
||||||
|
'nama_bangunan',
|
||||||
|
'tgl_permohonan',
|
||||||
|
'status_verifikasi',
|
||||||
|
'status_permohonan',
|
||||||
|
'alamat_pemilik',
|
||||||
|
'no_hp',
|
||||||
|
'email',
|
||||||
|
'tanggal_catatan',
|
||||||
|
'catatan_kekurangan_dokumen',
|
||||||
|
'gambar',
|
||||||
|
'krk_kkpr',
|
||||||
|
'no_krk',
|
||||||
|
'lh',
|
||||||
|
'ska',
|
||||||
|
'keterangan',
|
||||||
|
'helpdesk',
|
||||||
|
'pj',
|
||||||
|
'kepemilikan',
|
||||||
|
'potensi_taru',
|
||||||
|
'validasi_dinas',
|
||||||
|
'kategori_retribusi',
|
||||||
|
'no_urut_ba_tpt',
|
||||||
|
'tanggal_ba_tpt',
|
||||||
|
'no_urut_ba_tpa',
|
||||||
|
'tanggal_ba_tpa',
|
||||||
|
'no_urut_skrd',
|
||||||
|
'tanggal_skrd',
|
||||||
|
'ptsp',
|
||||||
|
'selesai_terbit',
|
||||||
|
'tanggal_pembayaran',
|
||||||
|
'format_sts',
|
||||||
|
'tahun_terbit',
|
||||||
|
'tahun_berjalan',
|
||||||
|
'kelurahan',
|
||||||
|
'kecamatan',
|
||||||
|
'lb',
|
||||||
|
'tb',
|
||||||
|
'jlb',
|
||||||
|
'unit',
|
||||||
|
'usulan_retribusi',
|
||||||
|
'nilai_retribusi_keseluruhan_simbg',
|
||||||
|
'nilai_retribusi_keseluruhan_pad',
|
||||||
|
'denda',
|
||||||
|
'latitude',
|
||||||
|
'longitude',
|
||||||
|
'nik_nib',
|
||||||
|
'dok_tanah',
|
||||||
|
'temuan',
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -21,4 +21,8 @@ class PbgTaskIndexIntegrations extends Model
|
|||||||
'indeks_terintegrasi',
|
'indeks_terintegrasi',
|
||||||
'total',
|
'total',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function pbg_task(){
|
||||||
|
return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,5 +20,10 @@ class PbgTaskPrasarana extends Model
|
|||||||
'quantity',
|
'quantity',
|
||||||
'unit',
|
'unit',
|
||||||
'index_prasarana',
|
'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'
|
'pbg_task_uid'
|
||||||
];
|
];
|
||||||
|
|
||||||
public function task(){
|
public function pbg_task(){
|
||||||
return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid');
|
return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function pbg_task_prasarana(){
|
||||||
|
return $this->hasMany(PbgTaskPrasarana::class, 'pbg_task_retribution_id', 'id');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class ServiceClient
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function makeRequest($url, $method = 'GET', $body = null, $headers = [], $timeout = 300){
|
public function makeRequest($url, $method = 'GET', $body = null, $headers = [], $timeout = 14400){
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$headers = array_merge($this->headers, $headers);
|
$headers = array_merge($this->headers, $headers);
|
||||||
|
|||||||
+16
-13
@@ -21,26 +21,27 @@ class ServiceSIMBG
|
|||||||
private $password;
|
private $password;
|
||||||
private $simbg_host;
|
private $simbg_host;
|
||||||
private $fetch_per_page;
|
private $fetch_per_page;
|
||||||
|
private $service_client;
|
||||||
/**
|
/**
|
||||||
* Create a new class instance.
|
* 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->email = trim((string) GlobalSetting::where('key','SIMBG_EMAIL')->first()->value);
|
||||||
$this->password = trim((string) GlobalSetting::where('key','SIMBG_PASSWORD')->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->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->fetch_per_page = trim((string)GlobalSetting::where('key','FETCH_PER_PAGE')->first()->value);
|
||||||
|
$this->service_client = new ServiceClient($this->simbg_host);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getToken(){
|
public function getToken(){
|
||||||
$clientHelper = new ServiceClient($this->simbg_host);
|
|
||||||
$url = "/api/user/v1/auth/login/";
|
$url = "/api/user/v1/auth/login/";
|
||||||
$body = [
|
$body = [
|
||||||
'email' => $this->email,
|
'email' => $this->email,
|
||||||
'password' => $this->password,
|
'password' => $this->password,
|
||||||
];
|
];
|
||||||
|
|
||||||
$res = $clientHelper->post($url, $body);
|
$res = $this->service_client->post($url, $body);
|
||||||
if(!$res->original['success']){
|
if(!$res->original['success']){
|
||||||
Log::error("Token not retrieved ", ['response' => $res]);
|
Log::error("Token not retrieved ", ['response' => $res]);
|
||||||
return null;
|
return null;
|
||||||
@@ -50,14 +51,15 @@ class ServiceSIMBG
|
|||||||
|
|
||||||
public function syncIndexIntegration($uuid, $token)
|
public function syncIndexIntegration($uuid, $token)
|
||||||
{
|
{
|
||||||
$clientHelper = new ServiceClient($this->simbg_host);
|
|
||||||
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/indeks-terintegrasi/";
|
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/indeks-terintegrasi/";
|
||||||
|
|
||||||
$headers = [
|
$headers = [
|
||||||
'Authorization' => "Bearer " . $token,
|
'Authorization' => "Bearer " . $token,
|
||||||
];
|
];
|
||||||
|
|
||||||
$res = $clientHelper->get($url, $headers);
|
$res = $this->service_client->get($url, $headers);
|
||||||
|
|
||||||
|
Log::info("response index integration", ['res' => $res]);
|
||||||
|
|
||||||
if (empty($res->original['success']) || !$res->original['success']) {
|
if (empty($res->original['success']) || !$res->original['success']) {
|
||||||
// Log error
|
// Log error
|
||||||
@@ -96,7 +98,6 @@ class ServiceSIMBG
|
|||||||
|
|
||||||
public function syncTaskList()
|
public function syncTaskList()
|
||||||
{
|
{
|
||||||
$clientHelper = new ServiceClient($this->simbg_host);
|
|
||||||
$initResToken = $this->getToken();
|
$initResToken = $this->getToken();
|
||||||
|
|
||||||
$importDatasource = ImportDatasource::create([
|
$importDatasource = ImportDatasource::create([
|
||||||
@@ -115,7 +116,7 @@ class ServiceSIMBG
|
|||||||
$headers = ['Authorization' => "Bearer " . $apiToken];
|
$headers = ['Authorization' => "Bearer " . $apiToken];
|
||||||
|
|
||||||
$url = "/api/pbg/v1/list/?page=1&size={$this->fetch_per_page}&sort=ASC";
|
$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;
|
$totalPage = $initialResponse->original['data']['total_page'] ?? 0;
|
||||||
if ($totalPage == 0) {
|
if ($totalPage == 0) {
|
||||||
@@ -131,6 +132,7 @@ class ServiceSIMBG
|
|||||||
for ($currentPage = 1; $currentPage <= $totalPage; $currentPage++) {
|
for ($currentPage = 1; $currentPage <= $totalPage; $currentPage++) {
|
||||||
$pageUrl = "/api/pbg/v1/list/?page={$currentPage}&size={$this->fetch_per_page}&sort=ASC";
|
$pageUrl = "/api/pbg/v1/list/?page={$currentPage}&size={$this->fetch_per_page}&sort=ASC";
|
||||||
$getToken = $this->getToken();
|
$getToken = $this->getToken();
|
||||||
|
Log::info("response index integration", ['currentPage' => $currentPage]);
|
||||||
if (empty($getToken->original['data']['token']['access'])) {
|
if (empty($getToken->original['data']['token']['access'])) {
|
||||||
$importDatasource->update([
|
$importDatasource->update([
|
||||||
'status' => ImportDatasourceStatus::Failed->value,
|
'status' => ImportDatasourceStatus::Failed->value,
|
||||||
@@ -140,7 +142,7 @@ class ServiceSIMBG
|
|||||||
}
|
}
|
||||||
$token = $getToken->original['data']['token']['access'];
|
$token = $getToken->original['data']['token']['access'];
|
||||||
$headers = ['Authorization' => "Bearer " . $token];
|
$headers = ['Authorization' => "Bearer " . $token];
|
||||||
$response = $clientHelper->get($pageUrl, $headers);
|
$response = $this->service_client->get($pageUrl, $headers);
|
||||||
$tasks = $response->original['data']['data'] ?? [];
|
$tasks = $response->original['data']['data'] ?? [];
|
||||||
|
|
||||||
if (empty($tasks)) {
|
if (empty($tasks)) {
|
||||||
@@ -218,14 +220,12 @@ class ServiceSIMBG
|
|||||||
|
|
||||||
public function syncTaskDetailSubmit($uuid, $token)
|
public function syncTaskDetailSubmit($uuid, $token)
|
||||||
{
|
{
|
||||||
$clientHelper = new ServiceClient($this->simbg_host);
|
|
||||||
|
|
||||||
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/submit/";
|
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/submit/";
|
||||||
$headers = [
|
$headers = [
|
||||||
'Authorization' => "Bearer " . $token,
|
'Authorization' => "Bearer " . $token,
|
||||||
];
|
];
|
||||||
|
|
||||||
$res = $clientHelper->get($url, $headers);
|
$res = $this->service_client->get($url, $headers);
|
||||||
|
|
||||||
if (empty($res->original['success']) || !$res->original['success']) {
|
if (empty($res->original['success']) || !$res->original['success']) {
|
||||||
// Log error
|
// Log error
|
||||||
@@ -247,7 +247,7 @@ class ServiceSIMBG
|
|||||||
? Carbon::parse($data['updated_at'])->format('Y-m-d H:i:s')
|
? Carbon::parse($data['updated_at'])->format('Y-m-d H:i:s')
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
PbgTaskRetributions::updateOrCreate(
|
$pbg_task_retributions = PbgTaskRetributions::updateOrCreate(
|
||||||
['detail_id' => $data['id']],
|
['detail_id' => $data['id']],
|
||||||
[
|
[
|
||||||
'detail_uid' => $data['uid'] ?? null,
|
'detail_uid' => $data['uid'] ?? null,
|
||||||
@@ -271,10 +271,13 @@ class ServiceSIMBG
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$pbg_task_retribution_id = $pbg_task_retributions->id;
|
||||||
|
|
||||||
$prasaranaData = $data['prasarana'] ?? [];
|
$prasaranaData = $data['prasarana'] ?? [];
|
||||||
if (!empty($prasaranaData)) {
|
if (!empty($prasaranaData)) {
|
||||||
$insertData = array_map(fn($item) => [
|
$insertData = array_map(fn($item) => [
|
||||||
'pbg_task_uid' => $uuid,
|
'pbg_task_uid' => $uuid,
|
||||||
|
'pbg_task_retribution_id' => $pbg_task_retribution_id,
|
||||||
'prasarana_id' => $item['id'] ?? null,
|
'prasarana_id' => $item['id'] ?? null,
|
||||||
'prasarana_type' => $item['prasarana_type'] ?? null,
|
'prasarana_type' => $item['prasarana_type'] ?? null,
|
||||||
'building_type' => $item['building_type'] ?? null,
|
'building_type' => $item['building_type'] ?? null,
|
||||||
@@ -285,7 +288,7 @@ class ServiceSIMBG
|
|||||||
], $prasaranaData);
|
], $prasaranaData);
|
||||||
|
|
||||||
// Use bulk insert or upsert for faster database operation
|
// 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]);
|
Log::info("retribution and prasarana successfully", ['uuid' => $uuid]);
|
||||||
|
|||||||
@@ -0,0 +1,131 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use Google_Client;
|
||||||
|
use Google_Service_Sheets;
|
||||||
|
|
||||||
|
class GoogleSheetService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a new class instance.
|
||||||
|
*/
|
||||||
|
protected $client;
|
||||||
|
protected $service;
|
||||||
|
protected $spreadsheetID;
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->client = new Google_Client();
|
||||||
|
$this->client->setApplicationName("Sibedas Google Sheets API");
|
||||||
|
$this->client->setScopes([Google_Service_Sheets::SPREADSHEETS_READONLY]);
|
||||||
|
$this->client->setAuthConfig(storage_path("app/teak-banner-450003-s8-ea05661d9db0.json"));
|
||||||
|
$this->client->setAccessType("offline");
|
||||||
|
|
||||||
|
$this->service = new Google_Service_Sheets($this->client);
|
||||||
|
$this->spreadsheetID = env("SPREAD_SHEET_ID");
|
||||||
|
|
||||||
|
$this->service_sheets = new Google_Service_Sheets($this->client);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSheetData($range){
|
||||||
|
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||||
|
return $response->getValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLastRowByColumn($column = "A")
|
||||||
|
{
|
||||||
|
// Ambil spreadsheet
|
||||||
|
$spreadsheet = $this->service->spreadsheets->get($this->spreadsheetID);
|
||||||
|
$sheets = $spreadsheet->getSheets();
|
||||||
|
|
||||||
|
if (!empty($sheets)) {
|
||||||
|
// Ambil nama sheet pertama dengan benar
|
||||||
|
$firstSheetTitle = $sheets[0]->getProperties()->getTitle();
|
||||||
|
|
||||||
|
// ✅ Format range harus benar!
|
||||||
|
$range = "{$firstSheetTitle}!{$column}:{$column}";
|
||||||
|
|
||||||
|
// Ambil data dari kolom yang diminta
|
||||||
|
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||||
|
$values = $response->getValues();
|
||||||
|
|
||||||
|
// Cek nilai terakhir yang tidak kosong
|
||||||
|
$lastRow = 0;
|
||||||
|
if (!empty($values)) {
|
||||||
|
foreach ($values as $index => $row) {
|
||||||
|
if (!empty($row[0])) { // Jika ada data, update lastRow
|
||||||
|
$lastRow = $index + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $lastRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
public function getHeader()
|
||||||
|
{
|
||||||
|
$spreadsheet = $this->service->spreadsheets->get($this->spreadsheetID);
|
||||||
|
$sheets = $spreadsheet->getSheets();
|
||||||
|
|
||||||
|
// Ambil nama sheet pertama
|
||||||
|
$firstSheetTitle = $sheets[0]->getProperties()->getTitle();
|
||||||
|
|
||||||
|
// Ambil data dari baris pertama (header)
|
||||||
|
$range = "{$firstSheetTitle}!1:1";
|
||||||
|
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||||
|
$values = $response->getValues();
|
||||||
|
|
||||||
|
// Kembalikan header (baris pertama)
|
||||||
|
return !empty($values) ? $values[0] : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLastColumn()
|
||||||
|
{
|
||||||
|
$spreadsheet = $this->service->spreadsheets->get($this->spreadsheetID);
|
||||||
|
$sheets = $spreadsheet->getSheets();
|
||||||
|
|
||||||
|
// Ambil nama sheet pertama
|
||||||
|
$firstSheetTitle = $sheets[0]->getProperties()->getTitle();
|
||||||
|
|
||||||
|
// Ambil baris pertama untuk mendapatkan jumlah kolom yang terisi
|
||||||
|
$range = "{$firstSheetTitle}!1:1";
|
||||||
|
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||||
|
$values = $response->getValues();
|
||||||
|
|
||||||
|
// Hitung jumlah kolom yang memiliki nilai
|
||||||
|
return !empty($values) ? count(array_filter($values[0], fn($value) => $value !== "")) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSheetDataCollection($totalRow = 10){
|
||||||
|
$spreadsheet = $this->service->spreadsheets->get($this->spreadsheetID);
|
||||||
|
$sheets = $spreadsheet->getSheets();
|
||||||
|
$firstSheetTitle = $sheets[0]->getProperties()->getTitle();
|
||||||
|
|
||||||
|
$header = $this->getHeader();
|
||||||
|
$header = array_map(function($columnHeader) {
|
||||||
|
// Trim spaces first, then replace non-alphanumeric characters with underscores
|
||||||
|
$columnHeader = trim($columnHeader);
|
||||||
|
return strtolower(preg_replace('/[^A-Za-z0-9_]/', '_', $columnHeader));
|
||||||
|
}, $header);
|
||||||
|
$range = "{$firstSheetTitle}!2:{$totalRow}";
|
||||||
|
|
||||||
|
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||||
|
$values = $response->getValues();
|
||||||
|
|
||||||
|
$mappedData = [];
|
||||||
|
if (!empty($values)) {
|
||||||
|
foreach ($values as $row) {
|
||||||
|
$rowData = [];
|
||||||
|
foreach ($header as $index => $columnHeader) {
|
||||||
|
// Map header to the corresponding value from the row
|
||||||
|
$rowData[$columnHeader] = isset($row[$index]) ? $row[$index] : null;
|
||||||
|
}
|
||||||
|
$mappedData[] = $rowData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mappedData;
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
-1
@@ -7,6 +7,7 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.2",
|
"php": "^8.2",
|
||||||
|
"google/apiclient": "^2.12",
|
||||||
"guzzlehttp/guzzle": "^7.9",
|
"guzzlehttp/guzzle": "^7.9",
|
||||||
"laravel/framework": "^11.31",
|
"laravel/framework": "^11.31",
|
||||||
"laravel/sanctum": "^4.0",
|
"laravel/sanctum": "^4.0",
|
||||||
@@ -69,5 +70,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"prefer-stable": true
|
"prefer-stable": true,
|
||||||
|
"repositories": {
|
||||||
|
"grocery-crud": {
|
||||||
|
"type": "composer",
|
||||||
|
"url": "https://composer.grocerycrud.com/"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+1055
-306
File diff suppressed because it is too large
Load Diff
@@ -123,4 +123,5 @@ return [
|
|||||||
'store' => env('APP_MAINTENANCE_STORE', 'database'),
|
'store' => env('APP_MAINTENANCE_STORE', 'database'),
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'api_url' => env('API_URL', 'http://localhost:8000')
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| CodeGenerator config overrides
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| It is a good idea to separate your configuration form the code-generator's
|
||||||
|
| own configuration. This way you won't lose any settings/preference
|
||||||
|
| you have when upgrading to a new version of the package.
|
||||||
|
|
|
||||||
|
| Additionally, you will always know any the configuration difference between
|
||||||
|
| the default config than your own.
|
||||||
|
|
|
||||||
|
| To override the setting that is found in the 'config/default.php' file, you'll
|
||||||
|
| need to create identical key here with a different value
|
||||||
|
|
|
||||||
|
| IMPORTANT: When overriding an option that is an array, the configurations
|
||||||
|
| are merged together using php's array_merge() function. This means that
|
||||||
|
| any option that you list here will take presence during a conflict in keys.
|
||||||
|
|
|
||||||
|
| EXAMPLE: The following addition to this file, will add another entry in
|
||||||
|
| the common_definitions collection
|
||||||
|
|
|
||||||
|
| 'common_definitions' =>
|
||||||
|
| [
|
||||||
|
| [
|
||||||
|
| 'match' => '*_at',
|
||||||
|
| 'set' => [
|
||||||
|
| 'css-class' => 'datetime-picker',
|
||||||
|
| ],
|
||||||
|
| ],
|
||||||
|
| ],
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| The default path of where the uploaded files live.
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| You can use Laravel Storage filesystem. By default, the code-generator
|
||||||
|
| uses the default file system.
|
||||||
|
| For more info about Laravel's file system visit
|
||||||
|
| https://laravel.com/docs/5.5/filesystem
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'files_upload_path' => 'uploads',
|
||||||
|
|
||||||
|
];
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?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::create('data_settings', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('key')->unique();
|
||||||
|
$table->string('value');
|
||||||
|
$table->string('type')->nullable()->default('integer');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('data_settings');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<?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::create('pbg_task_google_sheet', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('jenis_konsultasi')->nullable();
|
||||||
|
$table->string('no_registrasi')->nullable()->unique();
|
||||||
|
$table->string('nama_pemilik')->nullable();
|
||||||
|
$table->text('lokasi_bg')->nullable();
|
||||||
|
$table->string('fungsi_bg')->nullable();
|
||||||
|
$table->string('nama_bangunan')->nullable();
|
||||||
|
$table->date('tgl_permohonan')->nullable();
|
||||||
|
$table->string('status_verifikasi')->nullable();
|
||||||
|
$table->string('status_permohonan')->nullable();
|
||||||
|
$table->text('alamat_pemilik')->nullable();
|
||||||
|
$table->string('no_hp')->nullable();
|
||||||
|
$table->string('email')->nullable();
|
||||||
|
$table->date('tanggal_catatan')->nullable();
|
||||||
|
$table->text('catatan_kekurangan_dokumen')->nullable();
|
||||||
|
$table->string('gambar')->nullable();
|
||||||
|
$table->string('krk_kkpr')->nullable();
|
||||||
|
$table->string('no_krk')->nullable();
|
||||||
|
$table->string('lh')->nullable();
|
||||||
|
$table->string('ska')->nullable();
|
||||||
|
$table->text('keterangan')->nullable();
|
||||||
|
$table->string('helpdesk')->nullable();
|
||||||
|
$table->string('pj')->nullable();
|
||||||
|
$table->string('kepemilikan')->nullable();
|
||||||
|
$table->string('potensi_taru')->nullable();
|
||||||
|
$table->string('validasi_dinas')->nullable();
|
||||||
|
$table->string('kategori_retribusi')->nullable();
|
||||||
|
$table->string('no_urut_ba_tpt')->nullable();
|
||||||
|
$table->date('tanggal_ba_tpt')->nullable();
|
||||||
|
$table->string('no_urut_ba_tpa')->nullable();
|
||||||
|
$table->date('tanggal_ba_tpa')->nullable();
|
||||||
|
$table->string('no_urut_skrd')->nullable();
|
||||||
|
$table->date('tanggal_skrd')->nullable();
|
||||||
|
$table->string('ptsp')->nullable();
|
||||||
|
$table->string('selesai_terbit')->nullable();
|
||||||
|
$table->date('tanggal_pembayaran')->nullable();
|
||||||
|
$table->string('format_sts')->nullable();
|
||||||
|
$table->integer('tahun_terbit')->nullable();
|
||||||
|
$table->integer('tahun_berjalan')->nullable();
|
||||||
|
$table->string('kelurahan')->nullable();
|
||||||
|
$table->string('kecamatan')->nullable();
|
||||||
|
$table->decimal('lb', 20,2)->nullable();
|
||||||
|
$table->decimal('tb', 20, 2)->nullable();
|
||||||
|
$table->integer('jlb')->nullable();
|
||||||
|
$table->integer('unit')->nullable();
|
||||||
|
$table->integer('usulan_retribusi')->nullable();
|
||||||
|
$table->decimal('nilai_retribusi_keseluruhan_simbg', 20, 2)->nullable();
|
||||||
|
$table->decimal('nilai_retribusi_keseluruhan_pad', 20, 2)->nullable();
|
||||||
|
$table->decimal('denda', 20, 2)->nullable();
|
||||||
|
$table->string('latitude')->nullable();
|
||||||
|
$table->string('longitude')->nullable();
|
||||||
|
$table->string('nik_nib')->nullable();
|
||||||
|
$table->string('dok_tanah')->nullable();
|
||||||
|
$table->text('temuan')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('pbg_task_google_sheet');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -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', 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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('pbg_task', function (Blueprint $table) {
|
||||||
|
$table->dropUnique('pbg_task_uuid_unique');
|
||||||
|
$table->string('uuid')->nullable()->change();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
+40
@@ -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_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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -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_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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
+38
@@ -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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use App\Models\DataSetting;
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
class DataSettingSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
$data_settings = [
|
||||||
|
[
|
||||||
|
"key" => "TARGET_PAD",
|
||||||
|
"value" => "50000000000",
|
||||||
|
"type" => "integer"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"key" => "TATA_RUANG",
|
||||||
|
"value" => "10000000000",
|
||||||
|
"type" => "integer"
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($data_settings as $setting) {
|
||||||
|
DataSetting::updateOrCreate([
|
||||||
|
"key" => $setting["key"],
|
||||||
|
],[
|
||||||
|
"value" => $setting["value"],
|
||||||
|
"type" => $setting["type"],
|
||||||
|
"created_at" => now(),
|
||||||
|
"updated_at" => now(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+2960
-2946
File diff suppressed because it is too large
Load Diff
+33
-32
@@ -1,34 +1,35 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"dev": "vite"
|
"dev": "vite"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"axios": "^1.7.4",
|
"axios": "^1.7.4",
|
||||||
"concurrently": "^9.0.1",
|
"concurrently": "^9.0.1",
|
||||||
"laravel-vite-plugin": "^1.0",
|
"laravel-vite-plugin": "^1.0",
|
||||||
"postcss": "^8.4.47",
|
"postcss": "^8.4.47",
|
||||||
"sass": "^1.81.1",
|
"sass": "^1.81.1",
|
||||||
"tailwindcss": "^3.4.13",
|
"tailwindcss": "^3.4.13",
|
||||||
"vite": "^5.0"
|
"vite": "^5.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"apexcharts": "^3.44.2",
|
"apexcharts": "^3.44.2",
|
||||||
"bootstrap": "^5.3.3",
|
"big.js": "^6.2.2",
|
||||||
"countup.js": "^2.3.2",
|
"bootstrap": "^5.3.3",
|
||||||
"dropzone": "^5.9.0",
|
"countup.js": "^2.3.2",
|
||||||
"flatpickr": "^4.6.13",
|
"dropzone": "^5.9.0",
|
||||||
"gmaps": "^0.4.25",
|
"flatpickr": "^4.6.13",
|
||||||
"gridjs": "^5.1.0",
|
"gmaps": "^0.4.25",
|
||||||
"iconify-icon": "^2.1.0",
|
"gridjs": "^5.1.0",
|
||||||
"jsvectormap": "^1.5.1",
|
"iconify-icon": "^2.1.0",
|
||||||
"moment": "^2.29.4",
|
"jsvectormap": "^1.5.1",
|
||||||
"node-waves": "^0.7.6",
|
"moment": "^2.29.4",
|
||||||
"quill": "^1.3.7",
|
"node-waves": "^0.7.6",
|
||||||
"simplebar": "^5.3.9",
|
"quill": "^1.3.7",
|
||||||
"wnumb": "^1.2.0"
|
"simplebar": "^5.3.9",
|
||||||
}
|
"wnumb": "^1.2.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 1.2 MiB |
File diff suppressed because one or more lines are too long
@@ -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))})();
|
||||||
File diff suppressed because one or more lines are too long
@@ -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()});
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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()});
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
@@ -4,6 +4,8 @@ use Illuminate\Http\Request;
|
|||||||
|
|
||||||
define('LARAVEL_START', microtime(true));
|
define('LARAVEL_START', microtime(true));
|
||||||
|
|
||||||
|
ini_set('max_execution_time',14400);
|
||||||
|
|
||||||
// Determine if the application is in maintenance mode...
|
// Determine if the application is in maintenance mode...
|
||||||
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
|
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
|
||||||
require $maintenance;
|
require $maintenance;
|
||||||
|
|||||||
+643
File diff suppressed because one or more lines are too long
+4
-5
@@ -1,9 +1,8 @@
|
|||||||
|
import bootstrap from "bootstrap/dist/js/bootstrap";
|
||||||
import bootstrap from 'bootstrap/dist/js/bootstrap'
|
|
||||||
window.bootstrap = bootstrap;
|
window.bootstrap = bootstrap;
|
||||||
import 'iconify-icon';
|
import "iconify-icon";
|
||||||
import 'simplebar/dist/simplebar'
|
import "simplebar/dist/simplebar";
|
||||||
|
|
||||||
class Components {
|
class Components {
|
||||||
initBootstrapComponents() {
|
initBootstrapComponents() {
|
||||||
[...document.querySelectorAll('[data-bs-toggle="popover"]')].map(
|
[...document.querySelectorAll('[data-bs-toggle="popover"]')].map(
|
||||||
|
|||||||
+518
-386
@@ -1,13 +1,95 @@
|
|||||||
import ApexCharts from "apexcharts";
|
import Big from "big.js";
|
||||||
|
|
||||||
import GlobalConfig, { addThousandSeparators } from "../global-config.js";
|
import GlobalConfig, { addThousandSeparators } from "../global-config.js";
|
||||||
|
|
||||||
class BigData {
|
class BigData {
|
||||||
async init() {
|
async init() {
|
||||||
try{
|
try {
|
||||||
this.resultDataTotal = await this.getTotalAllTask();
|
this.totalTargetPAD = await this.getTargetPAD();
|
||||||
|
this.resultDataTotal = await this.getDataTotalPotensi();
|
||||||
|
this.dataVerification = await this.getDataVerfication();
|
||||||
|
this.dataNonVerification = await this.getDataNonVerfication();
|
||||||
|
this.dataBusiness = await this.getDataBusiness();
|
||||||
|
this.dataNonBusiness = await this.getDataNonBusiness();
|
||||||
|
this.dataTataRuang = await this.getDataTataRuang();
|
||||||
|
|
||||||
if (!this.resultDataTotal) {
|
// total potensi
|
||||||
|
this.bigTargetPAD = new Big(this.totalTargetPAD ?? 0);
|
||||||
|
this.bigTotalPotensi = new Big(this.resultDataTotal.totalData ?? 0);
|
||||||
|
|
||||||
|
this.resultPercentage = 0;
|
||||||
|
if (this.bigTotalPotensi > 0 && this.bigTargetPAD > 0) {
|
||||||
|
this.resultPercentage = this.bigTotalPotensi
|
||||||
|
.div(this.bigTargetPAD)
|
||||||
|
.times(100)
|
||||||
|
.toFixed(2);
|
||||||
|
if (this.resultPercentage > 100) {
|
||||||
|
this.resultPercentage = 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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.bigTargetPAD - this.bigTotalPotensi
|
||||||
|
);
|
||||||
|
|
||||||
|
this.percentageKekuranganPotensi =
|
||||||
|
this.totalKekuranganPotensi <= 0 || this.bigTargetPAD <= 0
|
||||||
|
? 0
|
||||||
|
: this.totalKekuranganPotensi
|
||||||
|
.div(this.bigTargetPAD)
|
||||||
|
.times(100)
|
||||||
|
.toFixed(2);
|
||||||
|
|
||||||
|
// non-verification documents
|
||||||
|
this.bigTotalNonVerification = new Big(
|
||||||
|
this.dataNonVerification.total
|
||||||
|
);
|
||||||
|
this.percentageResultNonVerification = this.bigTotalNonVerification
|
||||||
|
.div(this.bigTotalPotensi)
|
||||||
|
.times(100)
|
||||||
|
.toFixed(2);
|
||||||
|
|
||||||
|
// verification documents
|
||||||
|
this.bigTotalVerification = new Big(this.dataVerification.total);
|
||||||
|
this.percetageResultVerification =
|
||||||
|
this.bigTotalVerification <= 0 || this.bigTotalPotensi <= 0
|
||||||
|
? 0
|
||||||
|
: this.bigTotalVerification
|
||||||
|
.div(this.bigTargetPAD)
|
||||||
|
.times(100)
|
||||||
|
.toFixed(2);
|
||||||
|
|
||||||
|
// business documents
|
||||||
|
this.bigTotalBusiness = new Big(this.dataBusiness.total);
|
||||||
|
this.percentageResultBusiness =
|
||||||
|
this.bigTotalNonVerification <= 0
|
||||||
|
? 0
|
||||||
|
: this.bigTotalBusiness
|
||||||
|
.div(this.bigTotalNonVerification)
|
||||||
|
.times(100)
|
||||||
|
.toFixed(2);
|
||||||
|
|
||||||
|
// non-business documents
|
||||||
|
this.bigTotalNonBusiness = new Big(this.dataNonBusiness.total);
|
||||||
|
this.percentageResultNonBusiness =
|
||||||
|
this.bigTotalNonBusiness <= 0
|
||||||
|
? 0
|
||||||
|
: this.bigTotalNonBusiness
|
||||||
|
.div(this.bigTotalNonVerification)
|
||||||
|
.times(100)
|
||||||
|
.toFixed(2);
|
||||||
|
|
||||||
|
if (!this.bigTargetPAD) {
|
||||||
console.error("Failed to load chart data");
|
console.error("Failed to load chart data");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -15,424 +97,474 @@ class BigData {
|
|||||||
this.initChartTargetPAD();
|
this.initChartTargetPAD();
|
||||||
this.initChartUsaha();
|
this.initChartUsaha();
|
||||||
this.initChartNonUsaha();
|
this.initChartNonUsaha();
|
||||||
this.initChartStatus1();
|
this.initChartTotalPotensi();
|
||||||
this.initChartStatus2();
|
this.initChartVerificationDocuments();
|
||||||
this.initChartStatus3();
|
this.initChartNonVerificationDocuments();
|
||||||
this.initChartStatus4();
|
this.initChartKekuranganPotensi();
|
||||||
this.initChartStatus5();
|
this.initChartRealisasiTerbitPBG();
|
||||||
this.initChartStatus6();
|
this.initChartMenungguKlikDPMPTSP();
|
||||||
this.initChartStatus7();
|
this.initChartProsesDinasTeknis();
|
||||||
this.initChartStatus20();
|
this.initChartPotensiTataRuang();
|
||||||
this.initChartStatus24();
|
} catch (e) {
|
||||||
}catch(e){
|
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getTotalAllTask() {
|
async getDataTotalPotensi() {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`${GlobalConfig.apiHost}/api/all-task-documents`, {
|
const response = await fetch(
|
||||||
credentials: "include",
|
`${GlobalConfig.apiHost}/api/all-task-documents`,
|
||||||
headers: {
|
{
|
||||||
Authorization: `Bearer ${document.querySelector("meta[name='api-token']").content}`,
|
credentials: "include",
|
||||||
"Content-Type": "application/json",
|
headers: {
|
||||||
},
|
Authorization: `Bearer ${
|
||||||
});
|
document.querySelector("meta[name='api-token']")
|
||||||
|
.content
|
||||||
|
}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
console.error("Network response was not ok", response);
|
console.error("Network response was not ok", response);
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
return {
|
return {
|
||||||
seriesData: data.data.series,
|
seriesData: data.data.series,
|
||||||
countData: data.data.count,
|
countData: data.data.count,
|
||||||
totalData: data.data.total
|
totalData: data.data.total,
|
||||||
};
|
};
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error fetching chart data:", error);
|
console.error("Error fetching chart data:", error);
|
||||||
return null; // Mengembalikan null jika terjadi error
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getTargetPAD() {
|
||||||
|
try {
|
||||||
|
const response = await 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",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getDataVerfication() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(
|
||||||
|
`${GlobalConfig.apiHost}/api/verification-documents`,
|
||||||
|
{
|
||||||
|
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 {
|
||||||
|
count: data.data.count,
|
||||||
|
total: data.data.total,
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching chart data:", error);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getDataNonVerfication() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(
|
||||||
|
`${GlobalConfig.apiHost}/api/non-verification-documents`,
|
||||||
|
{
|
||||||
|
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 {
|
||||||
|
count: data.data.count,
|
||||||
|
total: data.data.total,
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching chart data:", error);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getDataBusiness() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(
|
||||||
|
`${GlobalConfig.apiHost}/api/business-documents`,
|
||||||
|
{
|
||||||
|
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 {
|
||||||
|
count: data.data.count,
|
||||||
|
total: data.data.total,
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching chart data:", error);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getDataNonBusiness() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(
|
||||||
|
`${GlobalConfig.apiHost}/api/non-business-documents`,
|
||||||
|
{
|
||||||
|
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 {
|
||||||
|
count: data.data.count,
|
||||||
|
total: data.data.total,
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching chart data:", error);
|
||||||
|
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() {
|
initChartTargetPAD() {
|
||||||
const total = this.resultDataTotal.totalData;
|
document
|
||||||
const count = this.resultDataTotal.countData;
|
.querySelectorAll(".document-count.chart-target-pad")
|
||||||
document.querySelectorAll('.document-count.chart-all-task').forEach((element) => {
|
.forEach((element) => {
|
||||||
element.innerText = `${count}`;
|
element.innerText = ``;
|
||||||
});
|
});
|
||||||
document.querySelectorAll('.document-total.chart-all-task').forEach((element) => {
|
document
|
||||||
element.innerText = `Rp.${addThousandSeparators(total)}`;
|
.querySelectorAll(".document-total.chart-target-pad")
|
||||||
});
|
.forEach((element) => {
|
||||||
document.querySelectorAll('.small-percentage.chart-all-task').forEach((element) => {
|
element.innerText = `Rp.${addThousandSeparators(
|
||||||
element.innerText = `${100}%`;
|
this.bigTargetPAD.toString()
|
||||||
});
|
)}`;
|
||||||
|
});
|
||||||
|
document
|
||||||
|
.querySelectorAll(".small-percentage.chart-target-pad")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${100}%`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
initChartTotalPotensi() {
|
||||||
|
const countAll = this.resultDataTotal.countData ?? 0;
|
||||||
|
|
||||||
|
document
|
||||||
|
.querySelectorAll(".document-count.chart-total-potensi")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${countAll}`;
|
||||||
|
});
|
||||||
|
document
|
||||||
|
.querySelectorAll(".document-total.chart-total-potensi")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `Rp.${addThousandSeparators(
|
||||||
|
this.bigTotalPotensi.toString()
|
||||||
|
)}`;
|
||||||
|
});
|
||||||
|
document
|
||||||
|
.querySelectorAll(".small-percentage.chart-total-potensi")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${this.resultPercentage}%`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
initChartVerificationDocuments() {
|
||||||
|
document
|
||||||
|
.querySelectorAll(".document-count.chart-berkas-terverifikasi")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${this.dataVerification.count}`;
|
||||||
|
});
|
||||||
|
document
|
||||||
|
.querySelectorAll(".document-total.chart-berkas-terverifikasi")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `Rp.${addThousandSeparators(
|
||||||
|
this.bigTotalVerification.toString()
|
||||||
|
)}`;
|
||||||
|
});
|
||||||
|
document
|
||||||
|
.querySelectorAll(".small-percentage.chart-berkas-terverifikasi")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${this.percetageResultVerification}%`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
initChartNonVerificationDocuments() {
|
||||||
|
document
|
||||||
|
.querySelectorAll(
|
||||||
|
".document-count.chart-berkas-belum-terverifikasi"
|
||||||
|
)
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${this.dataNonVerification.count}`;
|
||||||
|
});
|
||||||
|
document
|
||||||
|
.querySelectorAll(
|
||||||
|
".document-total.chart-berkas-belum-terverifikasi"
|
||||||
|
)
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `Rp.${addThousandSeparators(
|
||||||
|
this.bigTotalNonVerification.toString()
|
||||||
|
)}`;
|
||||||
|
});
|
||||||
|
document
|
||||||
|
.querySelectorAll(
|
||||||
|
".small-percentage.chart-berkas-belum-terverifikasi"
|
||||||
|
)
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${this.percentageResultNonVerification}%`;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
initChartUsaha() {
|
initChartUsaha() {
|
||||||
fetch(`${GlobalConfig.apiHost}/api/business-documents`,{
|
document
|
||||||
credentials: "include",
|
.querySelectorAll(".document-count.chart-business")
|
||||||
headers: {
|
.forEach((element) => {
|
||||||
Authorization: `Bearer ${document.querySelector("meta[name='api-token']").content}`,
|
element.innerText = `${this.dataBusiness.count}`;
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then((response) => {
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error("Network response was not ok");
|
|
||||||
}
|
|
||||||
return response.json();
|
|
||||||
})
|
|
||||||
.then((data) => {
|
|
||||||
// Pastikan this.resultDataTotal sudah ada
|
|
||||||
if (!this.resultDataTotal) {
|
|
||||||
console.error("Error: resultDataTotal is undefined");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const totalAll = this.resultDataTotal.totalData ?? 0;
|
|
||||||
const countAll = this.resultDataTotal.countData ?? 0;
|
|
||||||
const countUsaha = data?.data?.count ?? 0;
|
|
||||||
const totalUsaha = data?.data?.total ?? 0;
|
|
||||||
|
|
||||||
// Perbaikan perhitungan persentase
|
|
||||||
let resultPercentage = 0;
|
|
||||||
if (countUsaha > 0) {
|
|
||||||
resultPercentage = (countUsaha / countAll) * 100;
|
|
||||||
if (resultPercentage > 100) {
|
|
||||||
resultPercentage = 100; // Batasi maksimum 100%
|
|
||||||
}
|
|
||||||
}
|
|
||||||
document.querySelectorAll('.document-count.chart-business').forEach((element) => {
|
|
||||||
element.innerText = `${countUsaha}`;
|
|
||||||
});
|
});
|
||||||
document.querySelectorAll('.document-total.chart-business').forEach((element) => {
|
document
|
||||||
element.innerText = `Rp.${addThousandSeparators(totalUsaha)}`;
|
.querySelectorAll(".document-total.chart-business")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `Rp.${addThousandSeparators(
|
||||||
|
this.bigTotalBusiness.toString()
|
||||||
|
)}`;
|
||||||
});
|
});
|
||||||
document.querySelectorAll('.small-percentage.chart-business').forEach((element) => {
|
document
|
||||||
element.innerText = `${resultPercentage.toFixed(2)}%`;
|
.querySelectorAll(".small-percentage.chart-business")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${this.percentageResultBusiness}%`;
|
||||||
});
|
});
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
initChartNonUsaha() {
|
initChartNonUsaha() {
|
||||||
fetch(`${GlobalConfig.apiHost}/api/non-business-documents`, {
|
document
|
||||||
credentials: "include",
|
.querySelectorAll(".document-count.chart-non-business")
|
||||||
headers: {
|
.forEach((element) => {
|
||||||
Authorization: `Bearer ${document.querySelector("meta[name='api-token']").content}`,
|
element.innerText = `${this.dataNonBusiness.count}`;
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then((response) => {
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error("Network response was not ok");
|
|
||||||
}
|
|
||||||
return response.json();
|
|
||||||
})
|
|
||||||
.then((data) => {
|
|
||||||
// Pastikan this.resultDataTotal sudah ada
|
|
||||||
if (!this.resultDataTotal) {
|
|
||||||
console.error("Error: resultDataTotal is undefined");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const totalAll = this.resultDataTotal.totalData ?? 0;
|
|
||||||
const countAll = this.resultDataTotal.countData ?? 0;
|
|
||||||
const countUsaha = data?.data?.count ?? 0;
|
|
||||||
const totalUsaha = data?.data?.total ?? 0;
|
|
||||||
|
|
||||||
// Perbaikan perhitungan persentase
|
|
||||||
let resultPercentage = 0;
|
|
||||||
if (countUsaha > 0) {
|
|
||||||
resultPercentage = (countUsaha / countAll) * 100;
|
|
||||||
if (resultPercentage > 100) {
|
|
||||||
resultPercentage = 100; // Batasi maksimum 100%
|
|
||||||
}
|
|
||||||
}
|
|
||||||
document.querySelectorAll('.document-count.chart-non-business').forEach((element) => {
|
|
||||||
element.innerText = `${data.data.count}`;
|
|
||||||
});
|
});
|
||||||
document.querySelectorAll('.document-total.chart-non-business').forEach((element) => {
|
document
|
||||||
element.innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
.querySelectorAll(".document-total.chart-non-business")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `Rp.${addThousandSeparators(
|
||||||
|
this.bigTotalNonBusiness.toString()
|
||||||
|
)}`;
|
||||||
});
|
});
|
||||||
document.querySelectorAll('.small-percentage.chart-non-business').forEach((element) => {
|
document
|
||||||
element.innerText = `${resultPercentage.toFixed(2)}%`;
|
.querySelectorAll(".small-percentage.chart-non-business")
|
||||||
|
.forEach((element) => {
|
||||||
|
element.innerText = `${this.percentageResultNonBusiness}%`;
|
||||||
});
|
});
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
initChartStatus1(){
|
initChartKekuranganPotensi() {
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=1`, {
|
document
|
||||||
credentials: "include",
|
.querySelectorAll(".document-count.chart-kekurangan-potensi")
|
||||||
headers: {
|
.forEach((element) => {
|
||||||
Authorization: `Bearer ${document.querySelector("meta[name='api-token']").content}`,
|
element.innerText = ``;
|
||||||
"Content-Type": "application/json",
|
});
|
||||||
}
|
document
|
||||||
})
|
.querySelectorAll(".document-total.chart-kekurangan-potensi")
|
||||||
.then((response) => {
|
.forEach((element) => {
|
||||||
if (!response.ok) {
|
element.innerText = `Rp.${addThousandSeparators(
|
||||||
throw new Error("Network response was not ok");
|
this.totalKekuranganPotensi.toString()
|
||||||
}
|
)}`;
|
||||||
return response.json();
|
});
|
||||||
})
|
document
|
||||||
.then((data) => {
|
.querySelectorAll(".small-percentage.chart-kekurangan-potensi")
|
||||||
const seriesData = data.data.series;
|
.forEach((element) => {
|
||||||
// document.getElementById(
|
element.innerText = `${this.percentageKekuranganPotensi}%`;
|
||||||
// "countStatus1"
|
});
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus1"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
initChartStatus2(){
|
initChartRealisasiTerbitPBG() {
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=2`, {
|
document
|
||||||
credentials: "include",
|
.querySelectorAll(".document-count.chart-realisasi-tebit-pbg")
|
||||||
headers: {
|
.forEach((element) => {
|
||||||
Authorization: `Bearer ${document.querySelector("meta[name='api-token']").content}`,
|
element.innerText = `0`;
|
||||||
"Content-Type": "application/json",
|
});
|
||||||
}
|
document
|
||||||
})
|
.querySelectorAll(".document-total.chart-realisasi-tebit-pbg")
|
||||||
.then((response) => {
|
.forEach((element) => {
|
||||||
if (!response.ok) {
|
element.innerText = `Rp.${addThousandSeparators("0.00")}`;
|
||||||
throw new Error("Network response was not ok");
|
});
|
||||||
}
|
document
|
||||||
return response.json();
|
.querySelectorAll(".small-percentage.chart-realisasi-tebit-pbg")
|
||||||
})
|
.forEach((element) => {
|
||||||
.then((data) => {
|
element.innerText = `0.00%`;
|
||||||
const seriesData = data.data.series;
|
});
|
||||||
// document.getElementById(
|
|
||||||
// "countStatus2"
|
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus2"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
initChartStatus3(){
|
initChartMenungguKlikDPMPTSP() {
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=3`, {
|
document
|
||||||
credentials: "include",
|
.querySelectorAll(".document-count.chart-menunggu-klik-dpmptsp")
|
||||||
headers: {
|
.forEach((element) => {
|
||||||
Authorization: `Bearer ${document.querySelector("meta[name='api-token']").content}`,
|
element.innerText = `${0}`;
|
||||||
"Content-Type": "application/json",
|
});
|
||||||
}
|
document
|
||||||
})
|
.querySelectorAll(".document-total.chart-menunggu-klik-dpmptsp")
|
||||||
.then((response) => {
|
.forEach((element) => {
|
||||||
if (!response.ok) {
|
element.innerText = `Rp.${addThousandSeparators("0.00")}`;
|
||||||
throw new Error("Network response was not ok");
|
});
|
||||||
}
|
document
|
||||||
return response.json();
|
.querySelectorAll(".small-percentage.chart-menunggu-klik-dpmptsp")
|
||||||
})
|
.forEach((element) => {
|
||||||
.then((data) => {
|
element.innerText = `0.00%`;
|
||||||
const seriesData = data.data.series;
|
});
|
||||||
// document.getElementById(
|
|
||||||
// "countStatus3"
|
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus3"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
initChartStatus4(){
|
initChartProsesDinasTeknis() {
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=4`, {
|
document
|
||||||
credentials: "include",
|
.querySelectorAll(".document-count.chart-proses-dinas-teknis")
|
||||||
headers: {
|
.forEach((element) => {
|
||||||
Authorization: `Bearer ${document.querySelector("meta[name='api-token']").content}`,
|
element.innerText = `${0}`;
|
||||||
"Content-Type": "application/json",
|
});
|
||||||
}
|
document
|
||||||
})
|
.querySelectorAll(".document-total.chart-proses-dinas-teknis")
|
||||||
.then((response) => {
|
.forEach((element) => {
|
||||||
if (!response.ok) {
|
element.innerText = `Rp.${addThousandSeparators("0.00")}`;
|
||||||
throw new Error("Network response was not ok");
|
});
|
||||||
}
|
document
|
||||||
return response.json();
|
.querySelectorAll(".small-percentage.chart-proses-dinas-teknis")
|
||||||
})
|
.forEach((element) => {
|
||||||
.then((data) => {
|
element.innerText = `0.00%`;
|
||||||
const seriesData = data.data.series;
|
});
|
||||||
// document.getElementById(
|
|
||||||
// "countStatus4"
|
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus4"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
initChartStatus5(){
|
initChartPotensiTataRuang() {
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=5`, {
|
document
|
||||||
credentials: "include",
|
.querySelectorAll(".document-count.chart-potensi-tata-ruang")
|
||||||
headers: {
|
.forEach((element) => {
|
||||||
Authorization: `Bearer ${document.querySelector("meta[name='api-token']").content}`,
|
element.innerText = "";
|
||||||
"Content-Type": "application/json",
|
});
|
||||||
}
|
document
|
||||||
})
|
.querySelectorAll(".document-total.chart-potensi-tata-ruang")
|
||||||
.then((response) => {
|
.forEach((element) => {
|
||||||
if (!response.ok) {
|
element.innerText = `Rp.${addThousandSeparators(
|
||||||
throw new Error("Network response was not ok");
|
this.bigTotalTataRuang.toString()
|
||||||
}
|
)}`;
|
||||||
return response.json();
|
});
|
||||||
})
|
document
|
||||||
.then((data) => {
|
.querySelectorAll(".small-percentage.chart-potensi-tata-ruang")
|
||||||
const seriesData = data.data.series;
|
.forEach((element) => {
|
||||||
// document.getElementById(
|
element.innerText = `${this.percentageResultTataRuang}%`;
|
||||||
// "countStatus5"
|
});
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus5"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
initChartStatus6(){
|
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=6`, {
|
|
||||||
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) => {
|
|
||||||
const seriesData = data.data.series;
|
|
||||||
// document.getElementById(
|
|
||||||
// "countStatus6"
|
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus6"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
initChartStatus7(){
|
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=7`, {
|
|
||||||
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) => {
|
|
||||||
const seriesData = data.data.series;
|
|
||||||
// document.getElementById(
|
|
||||||
// "countStatus7"
|
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus7"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
initChartStatus20(){
|
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=20`, {
|
|
||||||
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) => {
|
|
||||||
const seriesData = data.data.series;
|
|
||||||
// document.getElementById(
|
|
||||||
// "countStatus20"
|
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus20"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
initChartStatus24(){
|
|
||||||
fetch(`${GlobalConfig.apiHost}/api/pbg-task-documents?status=24`, {
|
|
||||||
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) => {
|
|
||||||
const seriesData = data.data.series;
|
|
||||||
// document.getElementById(
|
|
||||||
// "countStatus24"
|
|
||||||
// ).innerText = `${data.data.count} Berkas`;
|
|
||||||
// document.getElementById(
|
|
||||||
// "totalStatus24"
|
|
||||||
// ).innerText = `Rp.${addThousandSeparators(data.data.total)}`;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("error fetching chart dara : ", error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ArrowConnectorCircles {
|
|
||||||
init(){
|
|
||||||
// Memanggil fungsi saat halaman dimuat dan ketika layar diubah ukurannya
|
|
||||||
document.addEventListener("resize", this.updateLine());
|
|
||||||
document.addEventListener("load", this.updateLine());
|
|
||||||
}
|
|
||||||
|
|
||||||
updateLine() {
|
|
||||||
const circle1 = document.getElementById("chart-all-task-1").getBoundingClientRect();
|
|
||||||
const circle2 = document.getElementById("chart-all-task-2").getBoundingClientRect();
|
|
||||||
const line = document.getElementById("connector-line");
|
|
||||||
|
|
||||||
console.log(circle1);
|
|
||||||
console.log(circle2);
|
|
||||||
|
|
||||||
line.setAttribute("x1", circle1.left + circle1.width / 2);
|
|
||||||
line.setAttribute("y1", circle1.top + circle1.height / 2);
|
|
||||||
line.setAttribute("x2", circle2.left + circle2.width / 2);
|
|
||||||
line.setAttribute("y2", circle2.top + circle2.height / 2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", async function (e) {
|
document.addEventListener("DOMContentLoaded", async function (e) {
|
||||||
await new BigData().init();
|
await new BigData().init();
|
||||||
// new ArrowConnectorCircles().init();
|
});
|
||||||
|
|
||||||
|
function resizeDashboard() {
|
||||||
|
//Target Width
|
||||||
|
let targetElement = document.getElementById("dashboard-fixed-wrapper");
|
||||||
|
let targetWidth = targetElement.offsetWidth;
|
||||||
|
//console.log("TARGET ",targetWidth);
|
||||||
|
|
||||||
|
//Real Object Width
|
||||||
|
let dashboardElement = document.getElementById("dashboard-fixed-container");
|
||||||
|
let dashboardWidth = 1110; //dashboardElement.offsetWidth;
|
||||||
|
//console.log("CURRENT ",dashboardWidth);
|
||||||
|
|
||||||
|
if (targetWidth > dashboardWidth) {
|
||||||
|
targetWidth = dashboardWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
dashboardElement.style.transformOrigin = "left top";
|
||||||
|
dashboardElement.style.transition = "transform 0.2s ease-in-out";
|
||||||
|
dashboardElement.style.transform =
|
||||||
|
"scale(" + (targetWidth / dashboardWidth).toFixed(2) + ")";
|
||||||
|
//console.log("SCALE ", (targetWidth/dashboardWidth).toFixed(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener("load", function () {
|
||||||
|
resizeDashboard();
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener("resize", function () {
|
||||||
|
resizeDashboard();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
import { Grid } from "gridjs/dist/gridjs.umd.js";
|
||||||
|
import gridjs from "gridjs/dist/gridjs.umd.js";
|
||||||
|
import "gridjs/dist/gridjs.umd.js";
|
||||||
|
import GlobalConfig from "../global-config.js";
|
||||||
|
|
||||||
|
class DataSettings {
|
||||||
|
init() {
|
||||||
|
this.getFetchApiData();
|
||||||
|
}
|
||||||
|
|
||||||
|
getFetchApiData() {
|
||||||
|
const table = new Grid({
|
||||||
|
columns: [
|
||||||
|
"ID",
|
||||||
|
"Key",
|
||||||
|
"Value",
|
||||||
|
"Created",
|
||||||
|
{
|
||||||
|
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="/data-settings/${cell}/edit" class="btn btn-yellow me-2">Update</a>
|
||||||
|
<button class="btn btn-red btn-delete btn-delete-data-settings" data-id="${cell}">Delete</button>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
search: {
|
||||||
|
server: {
|
||||||
|
url: (prev, keyword) => `${prev}?search=${keyword}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pagination: {
|
||||||
|
limit: 15,
|
||||||
|
server: {
|
||||||
|
url: (prev, page) =>
|
||||||
|
`${prev}${prev.includes("?") ? "&" : "?"}page=${
|
||||||
|
page + 1
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
sort: true,
|
||||||
|
server: {
|
||||||
|
url: `${GlobalConfig.apiHost}/api/api-data-settings`,
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${document
|
||||||
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
then: (data) =>
|
||||||
|
data.data.map((item) => [
|
||||||
|
item.id,
|
||||||
|
item.key,
|
||||||
|
item.value,
|
||||||
|
item.created_at,
|
||||||
|
item.id,
|
||||||
|
]),
|
||||||
|
total: (data) => data.meta.total,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
table.render(document.getElementById("table-data-settings"));
|
||||||
|
|
||||||
|
document.addEventListener("click", this.handleDelete);
|
||||||
|
}
|
||||||
|
handleDelete(event) {
|
||||||
|
if (event.target.classList.contains("btn-delete-data-settings")) {
|
||||||
|
event.preventDefault();
|
||||||
|
const id = event.target.getAttribute("data-id");
|
||||||
|
|
||||||
|
if (confirm("Are you sure you want to delete this item?")) {
|
||||||
|
fetch(`/data-settings/${id}`, {
|
||||||
|
method: "DELETE",
|
||||||
|
headers: {
|
||||||
|
"X-CSRF-TOKEN": document
|
||||||
|
.querySelector('meta[name="csrf-token"]')
|
||||||
|
.getAttribute("content"),
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
if (response.ok) {
|
||||||
|
alert("Item deleted successfully!");
|
||||||
|
window.location.reload();
|
||||||
|
} else {
|
||||||
|
return response.json().then((error) => {
|
||||||
|
throw new Error(
|
||||||
|
error.message || "Failed to delete item."
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.error("Error deleting item:", error);
|
||||||
|
alert("Something went wrong. Please try again.");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", function (e) {
|
||||||
|
new DataSettings().init();
|
||||||
|
});
|
||||||
@@ -1,12 +1,24 @@
|
|||||||
const GlobalConfig = {
|
export default GlobalConfig = window.GlobalConfig;
|
||||||
apiHost: 'http://localhost:8000'
|
|
||||||
};
|
|
||||||
|
|
||||||
export default GlobalConfig;
|
export function addThousandSeparators(value, fractionDigits = 2) {
|
||||||
|
if (!value) return null; // Handle empty or null values
|
||||||
|
|
||||||
export function addThousandSeparators(number, fractionDigits = 2) {
|
// Remove any non-numeric characters except commas and dots
|
||||||
return new Intl.NumberFormat('en-US', {
|
value = value.replace(/[^0-9,.]/g, "");
|
||||||
minimumFractionDigits: fractionDigits,
|
|
||||||
maximumFractionDigits: fractionDigits,
|
// If the value contains multiple dots, assume dots are thousand separators
|
||||||
}).format(number);
|
if ((value.match(/\./g) || []).length > 1) {
|
||||||
}
|
value = value.replace(/\./g, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert to a proper decimal number
|
||||||
|
let number = parseFloat(value.replace(",", "."));
|
||||||
|
|
||||||
|
if (isNaN(number)) return null; // Return null if conversion fails
|
||||||
|
|
||||||
|
// Format the number with thousand separators
|
||||||
|
return new Intl.NumberFormat("en-US", {
|
||||||
|
minimumFractionDigits: fractionDigits,
|
||||||
|
maximumFractionDigits: fractionDigits,
|
||||||
|
}).format(number);
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,132 @@
|
|||||||
|
import GlobalConfig from "../global-config.js";
|
||||||
|
|
||||||
|
class MultiFormCreatePBG {
|
||||||
|
constructor() {
|
||||||
|
this.currentStep = 1;
|
||||||
|
this.totalSteps = 4;
|
||||||
|
this.formData = {}; // Menyimpan data dari semua langkah
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
document
|
||||||
|
.getElementById("nextStep")
|
||||||
|
.addEventListener("click", () => this.nextStep());
|
||||||
|
|
||||||
|
document
|
||||||
|
.getElementById("prevStep")
|
||||||
|
.addEventListener("click", () => this.prevStep());
|
||||||
|
}
|
||||||
|
|
||||||
|
nextStep() {
|
||||||
|
if (!this.validateStep()) return;
|
||||||
|
|
||||||
|
this.saveStepData();
|
||||||
|
|
||||||
|
if (this.currentStep < this.totalSteps) {
|
||||||
|
document
|
||||||
|
.getElementById(`step${this.currentStep}`)
|
||||||
|
.classList.add("d-none");
|
||||||
|
|
||||||
|
this.currentStep++;
|
||||||
|
document
|
||||||
|
.getElementById(`step${this.currentStep}`)
|
||||||
|
.classList.remove("d-none");
|
||||||
|
|
||||||
|
document.getElementById(
|
||||||
|
"stepTitle"
|
||||||
|
).innerText = `Step ${this.currentStep}`;
|
||||||
|
document.getElementById("prevStep").disabled = false;
|
||||||
|
document.getElementById("nextStep").innerText =
|
||||||
|
this.currentStep === this.totalSteps ? "Submit" : "Next →";
|
||||||
|
} else {
|
||||||
|
this.submitForm(); // Submit ke API jika sudah step terakhir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
prevStep() {
|
||||||
|
if (this.currentStep > 1) {
|
||||||
|
document
|
||||||
|
.getElementById(`step${this.currentStep}`)
|
||||||
|
.classList.add("d-none");
|
||||||
|
|
||||||
|
this.currentStep--;
|
||||||
|
document
|
||||||
|
.getElementById(`step${this.currentStep}`)
|
||||||
|
.classList.remove("d-none");
|
||||||
|
|
||||||
|
document.getElementById(
|
||||||
|
"stepTitle"
|
||||||
|
).innerText = `Step ${this.currentStep}`;
|
||||||
|
document.getElementById("prevStep").disabled =
|
||||||
|
this.currentStep === 1;
|
||||||
|
document.getElementById("nextStep").innerText = "Next →";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
saveStepData() {
|
||||||
|
const stepForm = document.querySelector(`#step${this.currentStep}Form`);
|
||||||
|
const formDataObj = new FormData(stepForm);
|
||||||
|
|
||||||
|
if (!this.formData) {
|
||||||
|
this.formData = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
const stepKey = `step${this.currentStep}Form`;
|
||||||
|
this.formData[stepKey] = {};
|
||||||
|
|
||||||
|
for (const [key, value] of formDataObj.entries()) {
|
||||||
|
this.formData[stepKey][key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("form data", this.formData);
|
||||||
|
}
|
||||||
|
|
||||||
|
validateStep() {
|
||||||
|
const stepForm = document.querySelector(`#step${this.currentStep}Form`);
|
||||||
|
const inputs = stepForm.querySelectorAll(
|
||||||
|
"input[required], select[required]"
|
||||||
|
);
|
||||||
|
let isValid = true;
|
||||||
|
|
||||||
|
inputs.forEach((input) => {
|
||||||
|
if (!input.value) {
|
||||||
|
input.classList.add("is-invalid");
|
||||||
|
isValid = false;
|
||||||
|
} else {
|
||||||
|
input.classList.remove("is-invalid");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return isValid;
|
||||||
|
}
|
||||||
|
|
||||||
|
async submitForm() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(
|
||||||
|
`${GlobalConfig.apiHost}/api/api-pbg-task`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${
|
||||||
|
document.querySelector("meta[name='api-token']")
|
||||||
|
.content
|
||||||
|
}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(this.formData),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
alert(result.message);
|
||||||
|
window.location.href = "/pbg-task";
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error submitting form:", error);
|
||||||
|
alert("Terjadi kesalahan saat mengirim data.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
new MultiFormCreatePBG().init();
|
||||||
|
});
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
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 {
|
||||||
|
init() {
|
||||||
|
this.initTableRequestAssignment();
|
||||||
|
}
|
||||||
|
|
||||||
|
initTableRequestAssignment() {
|
||||||
|
new Grid({
|
||||||
|
columns: [
|
||||||
|
"ID",
|
||||||
|
{ name: "Name", width: "15%" },
|
||||||
|
{ name: "Condition", width: "7%" },
|
||||||
|
"Registration Number",
|
||||||
|
"Document Number",
|
||||||
|
{ name: "Address", width: "30%" },
|
||||||
|
"Status",
|
||||||
|
"Function Type",
|
||||||
|
"Consultation Type",
|
||||||
|
{ 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: {
|
||||||
|
url: (prev, keyword) => `${prev}?search=${keyword}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pagination: {
|
||||||
|
limit: 15,
|
||||||
|
server: {
|
||||||
|
url: (prev, page) =>
|
||||||
|
`${prev}${prev.includes("?") ? "&" : "?"}page=${
|
||||||
|
page + 1
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
sort: true,
|
||||||
|
server: {
|
||||||
|
url: `${GlobalConfig.apiHost}/api/request-assignments`,
|
||||||
|
credentials: "include",
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${document
|
||||||
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
then: (data) =>
|
||||||
|
data.data.map((item) => [
|
||||||
|
item.id,
|
||||||
|
item.name,
|
||||||
|
item.condition,
|
||||||
|
item.registration_number,
|
||||||
|
item.document_number,
|
||||||
|
item.address,
|
||||||
|
item.status_name,
|
||||||
|
item.function_type,
|
||||||
|
item.consultation_type,
|
||||||
|
item.due_date,
|
||||||
|
item.id,
|
||||||
|
]),
|
||||||
|
total: (data) => data.meta.total,
|
||||||
|
},
|
||||||
|
}).render(document.getElementById("table-pbg-tasks"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", function (e) {
|
||||||
|
new PbgTasks().init();
|
||||||
|
});
|
||||||
@@ -19,7 +19,6 @@ class SyncronizeTask {
|
|||||||
name: "Actions",
|
name: "Actions",
|
||||||
width: "120px",
|
width: "120px",
|
||||||
formatter: function (cell) {
|
formatter: function (cell) {
|
||||||
console.log("cell data", cell);
|
|
||||||
return gridjs.html(`
|
return gridjs.html(`
|
||||||
<div class="d-flex justify-items-end gap-10">
|
<div class="d-flex justify-items-end gap-10">
|
||||||
<a href="/settings/general/${cell}/edit" class="btn btn-yellow me-2">Update</a>
|
<a href="/settings/general/${cell}/edit" class="btn btn-yellow me-2">Update</a>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ class SyncronizeTask {
|
|||||||
init() {
|
init() {
|
||||||
this.initTableImportDatasources();
|
this.initTableImportDatasources();
|
||||||
this.handleSubmitSync();
|
this.handleSubmitSync();
|
||||||
|
this.handleSubmitSnycGoogleSheet();
|
||||||
}
|
}
|
||||||
initTableImportDatasources() {
|
initTableImportDatasources() {
|
||||||
new Grid({
|
new Grid({
|
||||||
@@ -48,68 +49,112 @@ class SyncronizeTask {
|
|||||||
}
|
}
|
||||||
handleSubmitSync() {
|
handleSubmitSync() {
|
||||||
const button = document.getElementById("btn-sync-submit");
|
const button = document.getElementById("btn-sync-submit");
|
||||||
|
|
||||||
// Check if the button should be enabled or disabled based on the status
|
// Check if the button should be enabled or disabled based on the status
|
||||||
fetch(`${GlobalConfig.apiHost}/api/import-datasource/check-datasource`, {
|
fetch(
|
||||||
method: "GET",
|
`${GlobalConfig.apiHost}/api/import-datasource/check-datasource`,
|
||||||
headers: {
|
{
|
||||||
Authorization: `Bearer ${document
|
method: "GET",
|
||||||
.querySelector('meta[name="api-token"]')
|
headers: {
|
||||||
.getAttribute("content")}`,
|
Authorization: `Bearer ${document
|
||||||
"Content-Type": "application/json",
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
})
|
)
|
||||||
.then(response => {
|
.then((response) => {
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error("Network response was not ok");
|
throw new Error("Network response was not ok");
|
||||||
}
|
}
|
||||||
return response.json();
|
return response.json();
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then((data) => {
|
||||||
console.log("data check button sync", data.can_execute);
|
console.log("data check button sync", data.can_execute);
|
||||||
button.disabled = !data.can_execute;
|
button.disabled = !data.can_execute;
|
||||||
|
|
||||||
// If the button is enabled, add click event to trigger sync
|
// If the button is enabled, add click event to trigger sync
|
||||||
if (!button.disabled) {
|
if (!button.disabled) {
|
||||||
button.addEventListener("click", function(e) {
|
button.addEventListener("click", function (e) {
|
||||||
button.disabled = true; // Disable button to prevent multiple clicks
|
button.disabled = true; // Disable button to prevent multiple clicks
|
||||||
button.textContent = "Syncing..."; // Change button text to show syncing
|
button.textContent = "Syncing..."; // Change button text to show syncing
|
||||||
|
|
||||||
// Trigger the scraping API call
|
// Trigger the scraping API call
|
||||||
fetch(`${GlobalConfig.apiHost}/api/scraping`, {
|
fetch(`${GlobalConfig.apiHost}/api/scraping`, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${document
|
Authorization: `Bearer ${document
|
||||||
.querySelector('meta[name="api-token"]')
|
.querySelector('meta[name="api-token"]')
|
||||||
.getAttribute("content")}`,
|
.getAttribute("content")}`,
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
.then(response => {
|
.then((response) => {
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error("Network response was not ok");
|
throw new Error(
|
||||||
}
|
"Network response was not ok"
|
||||||
return response.json();
|
);
|
||||||
})
|
}
|
||||||
.then(data => {
|
return response.json();
|
||||||
console.log("data sync button", data);
|
})
|
||||||
alert("Synchronization executed successfully");
|
.then((data) => {
|
||||||
window.location.reload();
|
console.log("data sync button", data);
|
||||||
})
|
alert("Synchronization executed successfully");
|
||||||
.catch(err => {
|
window.location.reload();
|
||||||
console.error("Fetch error:", err);
|
})
|
||||||
alert("An error occurred during synchronization");
|
.catch((err) => {
|
||||||
})
|
console.error("Fetch error:", err);
|
||||||
.finally(() => {
|
alert(
|
||||||
button.disabled = false; // Re-enable the button after the request is complete
|
"An error occurred during synchronization"
|
||||||
button.textContent = "Sync Data"; // Reset button text
|
);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
button.disabled = false; // Re-enable the button after the request is complete
|
||||||
|
button.textContent = "Sync Data"; // Reset button text
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error("Fetch error:", err);
|
||||||
|
alert("An error occurred while checking the datasource");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
handleSubmitSnycGoogleSheet() {
|
||||||
|
const button = document.getElementById("btn-sync-submit-google-sheet");
|
||||||
|
button.addEventListener("click", function (e) {
|
||||||
|
button.disabled = true; // Disable button to prevent multiple clicks
|
||||||
|
button.textContent = "Syncing..."; // Change button text to show syncing
|
||||||
|
|
||||||
|
// Trigger the scraping API call
|
||||||
|
fetch(`${GlobalConfig.apiHost}/api/sync-pbg-task-google-sheet`, {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${document
|
||||||
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error("Network response was not ok");
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then((data) => {
|
||||||
|
console.log("data sync button", data);
|
||||||
|
alert("Synchronization executed successfully");
|
||||||
|
window.location.reload();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error("Fetch error:", err);
|
||||||
|
alert("An error occurred during synchronization");
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
button.disabled = false; // Re-enable the button after the request is complete
|
||||||
|
button.textContent = "Sync Google Sheet"; // Reset button text
|
||||||
});
|
});
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.error("Fetch error:", err);
|
|
||||||
alert("An error occurred while checking the datasource");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace [% namespace %];
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||||
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||||
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||||
|
use Illuminate\Routing\Controller as BaseController;
|
||||||
|
|
||||||
|
class Controller extends BaseController
|
||||||
|
{
|
||||||
|
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||||
|
|
||||||
|
[% response_methods %]
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
return new [% api_resource_class %]($[% model_name_singular_variable %], [% model_was_deleted %]);
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
return $this->successResponse(
|
||||||
|
[% model_was_deleted %],
|
||||||
|
$this->transform($[% model_name_singular_variable %])
|
||||||
|
);
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
return new [% api_resource_collection_class %]($[% model_name_plural_variable %], [% models_were_retrieved %]);
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
$[% data_variable %] = $[% model_name_plural_variable %]->transform(function ($[% model_name_singular_variable %]) {
|
||||||
|
return $this->transform($[% model_name_singular_variable %]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return $this->successResponse(
|
||||||
|
[% models_were_retrieved %],
|
||||||
|
$[% data_variable %],
|
||||||
|
[
|
||||||
|
'links' => [
|
||||||
|
'first' => $[% model_name_plural_variable %]->url(1),
|
||||||
|
'last' => $[% model_name_plural_variable %]->url($[% model_name_plural_variable %]->lastPage()),
|
||||||
|
'prev' => $[% model_name_plural_variable %]->previousPageUrl(),
|
||||||
|
'next' => $[% model_name_plural_variable %]->nextPageUrl(),
|
||||||
|
],
|
||||||
|
'meta' =>
|
||||||
|
[
|
||||||
|
'current_page' => $[% model_name_plural_variable %]->currentPage(),
|
||||||
|
'from' => $[% model_name_plural_variable %]->firstItem(),
|
||||||
|
'last_page' => $[% model_name_plural_variable %]->lastPage(),
|
||||||
|
'path' => $[% model_name_plural_variable %]->resolveCurrentPath(),
|
||||||
|
'per_page' => $[% model_name_plural_variable %]->perPage(),
|
||||||
|
'to' => $[% model_name_plural_variable %]->lastItem(),
|
||||||
|
'total' => $[% model_name_plural_variable %]->total(),
|
||||||
|
],
|
||||||
|
]
|
||||||
|
);
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
return new [% api_resource_class %]($[% model_name_singular_variable %], [% model_was_retrieved %]);
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
return $this->successResponse(
|
||||||
|
[% model_was_retrieved %],
|
||||||
|
$this->transform($[% model_name_singular_variable %])
|
||||||
|
);
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
return new [% api_resource_class %]($[% model_name_singular_variable %], [% model_was_added %]);
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
return $this->successResponse(
|
||||||
|
[% model_was_added %],
|
||||||
|
$this->transform($[% model_name_singular_variable %])
|
||||||
|
);
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
return new [% api_resource_class %]($[% model_name_singular_variable %], [% model_was_updated %]);
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
return $this->successResponse(
|
||||||
|
[% model_was_updated %],
|
||||||
|
$this->transform($[% model_name_singular_variable %])
|
||||||
|
);
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* Get an error response
|
||||||
|
*
|
||||||
|
* @param mix $message
|
||||||
|
*
|
||||||
|
* @return Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
protected function errorResponse($message)
|
||||||
|
{
|
||||||
|
return response()->json([
|
||||||
|
'errors' => (array) $message,
|
||||||
|
'success' => false,
|
||||||
|
], 422);
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a new validator instance with the defined rules.
|
||||||
|
*
|
||||||
|
* @param [% request_fullname %] $request
|
||||||
|
*
|
||||||
|
* @return Illuminate\Support\Facades\Validator
|
||||||
|
*/
|
||||||
|
protected function getValidator(Request $request)
|
||||||
|
{
|
||||||
|
$rules = [
|
||||||
|
[% validation_rules %]
|
||||||
|
];
|
||||||
|
[% file_validation_snippet %]
|
||||||
|
return Validator::make($request->all(), $rules);
|
||||||
|
}
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* Get a success response
|
||||||
|
*
|
||||||
|
* @param mix $message
|
||||||
|
* @param mix $data
|
||||||
|
* @param array $meta
|
||||||
|
*
|
||||||
|
* @return Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
protected function successResponse($message, $data, array $meta = [])
|
||||||
|
{
|
||||||
|
return response()->json(
|
||||||
|
array_merge([
|
||||||
|
'data' => $data,
|
||||||
|
'message' => $message,
|
||||||
|
'success' => true,
|
||||||
|
], $meta), 200);
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Transform the giving [% model_name %] to public friendly array
|
||||||
|
*
|
||||||
|
* @param [% use_full_model_name %] $[% model_name_singular_variable %]
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function [% transform_method_name %]([% model_name_class %] $[% model_name_singular_variable %])
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[% model_api_array %]
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
$validator = $this->getValidator($request);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->errorResponse($validator->errors()->all());
|
||||||
|
}
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace [% namespace %];
|
||||||
|
|
||||||
|
[% use_command_placeholder %]
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class [% controller_name %] [% controller_extends %]
|
||||||
|
{
|
||||||
|
[% constructor %]
|
||||||
|
/**
|
||||||
|
* Display a listing of the assets.
|
||||||
|
*
|
||||||
|
* @return Illuminate\View\View
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$[% model_name_plural_variable %] = [% model_name_class %]::[% with_relations_for_index %]paginate([% models_per_page %]);
|
||||||
|
|
||||||
|
[% index_return_success %]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a new [% model_name %] in the storage.
|
||||||
|
*
|
||||||
|
* @param [% request_fullname %] [% request_variable %]
|
||||||
|
*
|
||||||
|
* @return Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function store([% type_hinted_request_name %])
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
[% validator_request %]
|
||||||
|
$[% data_variable %] = [% call_get_data %];
|
||||||
|
[% on_store_setter %]
|
||||||
|
$[% model_name_singular_variable %] = [% model_name_class %]::create($[% data_variable %]);
|
||||||
|
|
||||||
|
[% store_return_success %]
|
||||||
|
} catch (Exception $exception) {
|
||||||
|
return $this->errorResponse([% unexpected_error %]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified [% model_name %].
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
*
|
||||||
|
* @return Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function show($id)
|
||||||
|
{
|
||||||
|
$[% model_name_singular_variable %] = [% model_name_class %]::[% with_relations_for_show %]findOrFail($id);
|
||||||
|
|
||||||
|
[% show_return_success %]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified [% model_name %] in the storage.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @param [% request_fullname %] [% request_variable %]
|
||||||
|
*
|
||||||
|
* @return Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function update($id, [% type_hinted_request_name %])
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
[% validator_request %]
|
||||||
|
$[% data_variable %] = [% call_get_data %];
|
||||||
|
[% on_update_setter %]
|
||||||
|
$[% model_name_singular_variable %] = [% model_name_class %]::findOrFail($id);
|
||||||
|
$[% model_name_singular_variable %]->update($[% data_variable %]);
|
||||||
|
|
||||||
|
[% update_return_success %]
|
||||||
|
} catch (Exception $exception) {
|
||||||
|
return $this->errorResponse([% unexpected_error %]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified [% model_name %] from the storage.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
*
|
||||||
|
* @return Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function destroy($id)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$[% model_name_singular_variable %] = [% model_name_class %]::findOrFail($id);
|
||||||
|
$[% model_name_singular_variable %]->delete();
|
||||||
|
|
||||||
|
[% destroy_return_success %]
|
||||||
|
} catch (Exception $exception) {
|
||||||
|
return $this->errorResponse([% unexpected_error %]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[% get_validator_method %]
|
||||||
|
[% get_data_method %]
|
||||||
|
[% upload_method %]
|
||||||
|
[% transform_method %]
|
||||||
|
[% response_methods %]
|
||||||
|
}
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace [% namespace %];
|
||||||
|
|
||||||
|
[% use_command_placeholder %]
|
||||||
|
|
||||||
|
class [% controller_name %] [% controller_extends %]
|
||||||
|
{
|
||||||
|
[% constructor %]
|
||||||
|
/**
|
||||||
|
* Display the documentation which corresponds to the giving version.
|
||||||
|
*
|
||||||
|
* @return Illuminate\View\View
|
||||||
|
*/
|
||||||
|
public function index($version)
|
||||||
|
{
|
||||||
|
$viewName = sprintf('[% view_access_fullname %]index', $this->getVersion($version));
|
||||||
|
|
||||||
|
return view($viewName);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace [% namespace %];
|
||||||
|
|
||||||
|
[% use_command_placeholder %]
|
||||||
|
|
||||||
|
class [% controller_name %] [% controller_extends %]
|
||||||
|
{
|
||||||
|
[% constructor %]
|
||||||
|
/**
|
||||||
|
* Display the documentation's view.
|
||||||
|
*
|
||||||
|
* @return Illuminate\View\View
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view('[% view_access_fullname %]index');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
<span class="label label-danger" title="[% this_parameter_must_be_present_in_the_request %]">[% required_title %]</span>
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
<tr>
|
||||||
|
<td>Authorization</td>
|
||||||
|
<td>[% string_title %]</td>
|
||||||
|
<td>
|
||||||
|
<span class="label label-primary" title="[% this_parameter_is_an_http_header %]">[% header_title %]</span>
|
||||||
|
</td>
|
||||||
|
<td>[% access_token_with_bearer %]</td>
|
||||||
|
@if(isset($showValidation) && $showValidation)
|
||||||
|
<td></td>
|
||||||
|
@endif
|
||||||
|
</tr>
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
<h4 class="text-danger"><strong>401 - Unauthorized</strong></h4>
|
||||||
|
<p class="text-muted">[% the_user_does_not_have_permission_to_access_the_requested_resource %]</p>
|
||||||
|
<table class="table table-stripped">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>success</td>
|
||||||
|
<td>[% boolean_title %]</td>
|
||||||
|
<td>[% indicate_whether_the_request_was_successful_or_not %]</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>error</td>
|
||||||
|
<td>[% array_of_strings %]</td>
|
||||||
|
<td>[% the_error_message %]</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
<h4 class="text-danger"><strong>202 - Accepted</strong></h4>
|
||||||
|
<p class="text-muted">[% the_requested_model_does_not_exists %]</p>
|
||||||
|
<table class="table table-stripped">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>success</td>
|
||||||
|
<td>[% boolean_title %]</td>
|
||||||
|
<td>[% indicate_whether_the_request_was_successful_or_not %]</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>error</td>
|
||||||
|
<td>[% array_of_strings %]</td>
|
||||||
|
<td>[% the_error_message %]</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user