Compare commits
50 Commits
feat/sync-
...
feature/ch
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fefef609ac | ||
|
|
7f8a2e4936 | ||
|
|
38948b6633 | ||
|
|
aa9943ba45 | ||
|
|
9e55ea0dbb | ||
|
|
93f0ac5ef7 | ||
|
|
8bae33519f | ||
|
|
6865e353e6 | ||
|
|
bb4ab5c769 | ||
|
|
e743b82087 | ||
|
|
c3c7b8e3ec | ||
|
|
d49035ce8d | ||
|
|
ffd9d3514c | ||
|
|
675477c734 | ||
|
|
4350c466e3 | ||
|
|
5ab407d672 | ||
|
|
2aaa487746 | ||
|
|
080582f7ab | ||
|
|
91475aeead | ||
|
|
a7afbd69fb | ||
|
|
1ff5587050 | ||
|
|
9c8a1a3f3f | ||
|
|
5c4be7635b | ||
|
|
ba315b1dee | ||
|
|
33b7131c33 | ||
|
|
7a56735099 | ||
|
|
dd331b4a08 | ||
|
|
dcd93d66e2 | ||
|
|
5d50d6d6cc | ||
|
|
39717d184c | ||
|
|
54146c8c08 | ||
|
|
e8da7193ef | ||
|
|
006c008542 | ||
|
|
39bb8e6d5f | ||
|
|
7994a62cea | ||
|
|
3a09e2e68a | ||
|
|
116dc1c8c7 | ||
|
|
f10bc153b4 | ||
|
|
06a3bb8c8b | ||
|
|
6c936d4c14 | ||
|
|
d4d0a485cd | ||
|
|
864fb26471 | ||
|
|
fd97a34344 | ||
|
|
1dd971fb73 | ||
|
|
aff31e08ef | ||
|
|
2fb8aeceaa | ||
|
|
ecc243d1cc | ||
|
|
beac71d182 | ||
|
|
8c236c460d | ||
|
|
41ddbaef24 |
@@ -75,10 +75,10 @@ class AdvertisementController extends Controller
|
|||||||
{
|
{
|
||||||
$data = $request->validated();
|
$data = $request->validated();
|
||||||
|
|
||||||
// Cari village_code berdasarkan village_name
|
|
||||||
$village_code = DB::table('villages')->where('village_name', $data['village_name'])->value('village_code');
|
|
||||||
// Cari district_code berdasarkan district_name
|
// Cari district_code berdasarkan district_name
|
||||||
$district_code = DB::table('districts')->where('district_name', $data['district_name'])->value('district_code');
|
$district_code = DB::table('districts')->where('district_name', $data['district_name'])->value('district_code');
|
||||||
|
// Cari village_code berdasarkan village_name
|
||||||
|
$village_code = DB::table('villages')->where('village_name', $data['village_name'])->where('district_code', $district_code)->value('village_code');
|
||||||
|
|
||||||
// Tambahkan village_code dan district_code ke data
|
// Tambahkan village_code dan district_code ke data
|
||||||
$data['village_code'] = $village_code;
|
$data['village_code'] = $village_code;
|
||||||
@@ -142,10 +142,10 @@ class AdvertisementController extends Controller
|
|||||||
{
|
{
|
||||||
$data = $request->validated();
|
$data = $request->validated();
|
||||||
|
|
||||||
// Cari village_code berdasarkan village_name
|
|
||||||
$village_code = DB::table('villages')->where('village_name', $data['village_name'])->value('village_code');
|
|
||||||
// Cari district_code berdasarkan district_name
|
// Cari district_code berdasarkan district_name
|
||||||
$district_code = DB::table('districts')->where('district_name', $data['district_name'])->value('district_code');
|
$district_code = DB::table('districts')->where('district_name', $data['district_name'])->value('district_code');
|
||||||
|
// Cari village_code berdasarkan village_name
|
||||||
|
$village_code = DB::table('villages')->where('village_name', $data['village_name'])->where('district_code', $district_code)->value('village_code');
|
||||||
|
|
||||||
// Tambahkan village_code dan district_code ke data
|
// Tambahkan village_code dan district_code ke data
|
||||||
$data['village_code'] = $village_code;
|
$data['village_code'] = $village_code;
|
||||||
@@ -196,4 +196,17 @@ class AdvertisementController extends Controller
|
|||||||
|
|
||||||
return response()->json($results);
|
return response()->json($results);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function downloadExcelAdvertisement()
|
||||||
|
{
|
||||||
|
$filePath = public_path('templates/template_reklame.xlsx');
|
||||||
|
|
||||||
|
// Cek apakah file ada
|
||||||
|
if (!file_exists($filePath)) {
|
||||||
|
return response()-> json(['message' => 'File tidak ditemukan!'], Response::HTTP_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return file to download
|
||||||
|
return response()->download($filePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
241
app/Http/Controllers/Api/BigDataResumeController.php
Normal file
241
app/Http/Controllers/Api/BigDataResumeController.php
Normal file
@@ -0,0 +1,241 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\BigdataResume;
|
||||||
|
use App\Models\DataSetting;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class BigDataResumeController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$filterDate = $request->get("filterByDate");
|
||||||
|
|
||||||
|
// If filterByDate is "latest" or empty, get the most recent record
|
||||||
|
if (!$filterDate || $filterDate === "latest") {
|
||||||
|
$big_data_resume = BigdataResume::latest()->first();
|
||||||
|
} else {
|
||||||
|
// Filter by specific date
|
||||||
|
$big_data_resume = BigdataResume::whereDate('created_at', $filterDate)
|
||||||
|
->orderBy('id', 'desc')
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if (!$big_data_resume) {
|
||||||
|
return $this->response_empty_resume();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$data_settings = DataSetting::all();
|
||||||
|
if($data_settings->isEmpty()){
|
||||||
|
return response()->json(['message' => 'No data setting found']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$target_pad = floatval(optional($data_settings->where('key', 'TARGET_PAD')->first())->value);
|
||||||
|
$tata_ruang = floatval(optional($data_settings->where('key', 'TATA_RUANG')->first())->value);
|
||||||
|
$realisasi_terbit_pbg_sum = floatval(optional($data_settings->where('key', 'REALISASI_TERBIT_PBG_SUM')->first())->value);
|
||||||
|
$realisasi_terbit_pbg_count = floatval(optional($data_settings->where('key', 'REALISASI_TERBIT_PBG_COUNT')->first())->value);
|
||||||
|
$menuggu_klik_dpmptsp_sum = floatval(optional($data_settings->where('key', 'MENUNGGU_KLIK_DPMPTSP_SUM')->first())->value);
|
||||||
|
$menuggu_klik_dpmptsp_count = floatval(optional($data_settings->where('key', 'MENUNGGU_KLIK_DPMPTSP_COUNT')->first())->value);
|
||||||
|
$proses_dinas_teknis_sum = floatval(optional($data_settings->where('key', 'PROSES_DINAS_TEKNIS_SUM')->first())->value);
|
||||||
|
$proses_dinas_teknis_count = floatval(optional($data_settings->where('key', 'PROSES_DINAS_TEKNIS_COUNT')->first())->value);
|
||||||
|
|
||||||
|
$kekurangan_potensi = $target_pad - $big_data_resume->potention_sum;
|
||||||
|
|
||||||
|
// percentage kekurangan potensi
|
||||||
|
$kekurangan_potensi_percentage = $target_pad > 0 && $target_pad > 0
|
||||||
|
? round(($kekurangan_potensi / $target_pad) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage total potensi
|
||||||
|
$total_potensi_percentage = $big_data_resume->potention_sum > 0 && $target_pad > 0
|
||||||
|
? round(($big_data_resume->potention_sum / $target_pad) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage verified document
|
||||||
|
$verified_percentage = $big_data_resume->verified_sum > 0 && $big_data_resume->potention_sum > 0
|
||||||
|
? round(($big_data_resume->verified_sum / $big_data_resume->potention_sum) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage non-verified document
|
||||||
|
$non_verified_percentage = $big_data_resume->non_verified_sum > 0 && $big_data_resume->potention_sum > 0
|
||||||
|
? round(($big_data_resume->non_verified_sum / $big_data_resume->potention_sum) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage business document
|
||||||
|
$business_percentage = $big_data_resume->business_sum > 0 && $big_data_resume->non_verified_sum > 0
|
||||||
|
? round(($big_data_resume->business_sum / $big_data_resume->non_verified_sum) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage non-business document
|
||||||
|
$non_business_percentage = $big_data_resume->non_business_sum > 0 && $big_data_resume->potention_sum > 0
|
||||||
|
? round(($big_data_resume->non_business_sum / $big_data_resume->potention_sum) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage tata ruang
|
||||||
|
$tata_ruang_percentage = $tata_ruang > 0 && $big_data_resume->potention_sum > 0
|
||||||
|
? round(($tata_ruang / $big_data_resume->potention_sum) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage realisasi terbit pbg
|
||||||
|
$realisasi_terbit_percentage = $big_data_resume->verified_sum > 0 && $realisasi_terbit_pbg_sum > 0
|
||||||
|
? round(($realisasi_terbit_pbg_sum / $big_data_resume->verified_sum) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage menunggu klik dpmptsp
|
||||||
|
$menunggu_klik_dpmptsp_percentage = $big_data_resume->verified_sum > 0 && $menuggu_klik_dpmptsp_sum > 0
|
||||||
|
? round(($menuggu_klik_dpmptsp_sum / $big_data_resume->verified_sum) * 100, 2) : 0;
|
||||||
|
|
||||||
|
// percentage proses_dinas_teknis
|
||||||
|
$proses_dinas_teknis_percentage = $big_data_resume->verified_sum > 0 && $proses_dinas_teknis_sum > 0
|
||||||
|
? round(($proses_dinas_teknis_sum / $big_data_resume->verified_sum) * 100, 2) : 0;
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'target_pad' => [
|
||||||
|
'sum' => $target_pad,
|
||||||
|
'percentage' => 100,
|
||||||
|
],
|
||||||
|
'tata_ruang' => [
|
||||||
|
'sum' => $tata_ruang,
|
||||||
|
'percentage' => $tata_ruang_percentage,
|
||||||
|
],
|
||||||
|
'kekurangan_potensi' => [
|
||||||
|
'sum' => $kekurangan_potensi,
|
||||||
|
'percentage' => $kekurangan_potensi_percentage
|
||||||
|
],
|
||||||
|
'total_potensi' => [
|
||||||
|
'sum' => (float) $big_data_resume->potention_sum,
|
||||||
|
'count' => $big_data_resume->potention_count,
|
||||||
|
'percentage' => $total_potensi_percentage
|
||||||
|
],
|
||||||
|
'verified_document' => [
|
||||||
|
'sum' => (float) $big_data_resume->verified_sum,
|
||||||
|
'count' => $big_data_resume->verified_count,
|
||||||
|
'percentage' => $verified_percentage
|
||||||
|
],
|
||||||
|
'non_verified_document' => [
|
||||||
|
'sum' => (float) $big_data_resume->non_verified_sum,
|
||||||
|
'count' => $big_data_resume->non_verified_count,
|
||||||
|
'percentage' => $non_verified_percentage
|
||||||
|
],
|
||||||
|
'business_document' => [
|
||||||
|
'sum' => (float) $big_data_resume->business_sum,
|
||||||
|
'count' => $big_data_resume->business_count,
|
||||||
|
'percentage' => $business_percentage
|
||||||
|
],
|
||||||
|
'non_business_document' => [
|
||||||
|
'sum' => (float) $big_data_resume->non_business_sum,
|
||||||
|
'count' => $big_data_resume->non_business_count,
|
||||||
|
'percentage' => $non_business_percentage
|
||||||
|
],
|
||||||
|
'realisasi_terbit' => [
|
||||||
|
'sum' => $realisasi_terbit_pbg_sum,
|
||||||
|
'count' => $realisasi_terbit_pbg_count,
|
||||||
|
'percentage' => $realisasi_terbit_percentage
|
||||||
|
],
|
||||||
|
'menunggu_klik_dpmptsp' => [
|
||||||
|
'sum' => $menuggu_klik_dpmptsp_sum,
|
||||||
|
'count' => $menuggu_klik_dpmptsp_count,
|
||||||
|
'percentage' => $menunggu_klik_dpmptsp_percentage
|
||||||
|
],
|
||||||
|
'proses_dinas_teknis' => [
|
||||||
|
'sum' => $proses_dinas_teknis_sum,
|
||||||
|
'count' => $proses_dinas_teknis_count,
|
||||||
|
'percentage' => $proses_dinas_teknis_percentage
|
||||||
|
]
|
||||||
|
];
|
||||||
|
return response()->json($result);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
return response()->json(['message' => 'Error when fetching data'], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
private function response_empty_resume(){
|
||||||
|
$result = [
|
||||||
|
'target_pad' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'percentage' => 100,
|
||||||
|
],
|
||||||
|
'tata_ruang' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'percentage' => 0,
|
||||||
|
],
|
||||||
|
'kekurangan_potensi' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
],
|
||||||
|
'total_potensi' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'count' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
],
|
||||||
|
'verified_document' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'count' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
],
|
||||||
|
'non_verified_document' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'count' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
],
|
||||||
|
'business_document' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'count' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
],
|
||||||
|
'non_business_document' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'count' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
],
|
||||||
|
'realisasi_terbit' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'count' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
],
|
||||||
|
'menunggu_klik_dpmptsp' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'count' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
],
|
||||||
|
'proses_dinas_teknis' => [
|
||||||
|
'sum' => 0,
|
||||||
|
'count' => 0,
|
||||||
|
'percentage' => 0
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return response()->json($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
120
app/Http/Controllers/Api/BusinessOrIndustriesController.php
Normal file
120
app/Http/Controllers/Api/BusinessOrIndustriesController.php
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\BusinessIndustryRequest;
|
||||||
|
use App\Imports\BusinessIndustriesImport;
|
||||||
|
use App\Models\BusinessOrIndustry;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
use \Illuminate\Support\Facades\Validator;
|
||||||
|
class BusinessOrIndustriesController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$query = BusinessOrIndustry::query()->orderBy('id', 'desc');
|
||||||
|
|
||||||
|
if ($request->has("search") && !empty($request->get("search"))) {
|
||||||
|
$search = $request->get("search");
|
||||||
|
|
||||||
|
info($request); // Debugging log
|
||||||
|
|
||||||
|
$query->where(function ($q) use ($search) {
|
||||||
|
$q->where("nop", "LIKE", "%{$search}%")
|
||||||
|
->orWhere("nama_kecamatan", "LIKE", "%{$search}%")
|
||||||
|
->orWhere("nama_kelurahan", "LIKE", "%{$search}%");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($query->paginate());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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(BusinessIndustryRequest $request, string $id)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$data = BusinessOrIndustry::findOrFail($id);
|
||||||
|
$data->update($request->validated());
|
||||||
|
return response()->json(['message' => 'Data updated successfully.'], 200);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
\Log::error($e->getMessage());
|
||||||
|
return response()->json(['message' => 'Failed to update data'],500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$data = BusinessOrIndustry::findOrFail($id);
|
||||||
|
$data->delete();
|
||||||
|
return response()->json(['message' => 'Data deleted successfully.'], 200);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
\Log::error($e->getMessage());
|
||||||
|
return response()->json(['message' => 'Failed to delete data'],500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function upload(Request $request){
|
||||||
|
|
||||||
|
if ($request->hasFile('file')) {
|
||||||
|
$file = $request->file('file');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validasi file
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'file' => 'required|mimes:xlsx,xls|max:102400', // Max 100MB
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'File validation failed.',
|
||||||
|
'errors' => $validator->errors()
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Ambil file dari request
|
||||||
|
$file = $request->file('file');
|
||||||
|
|
||||||
|
// Menggunakan Laravel Excel untuk mengimpor file
|
||||||
|
Excel::import(new BusinessIndustriesImport, $file);
|
||||||
|
|
||||||
|
// Jika sukses, kembalikan respons sukses
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'File uploaded and imported successfully!'
|
||||||
|
], 200);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// Jika ada error, kembalikan error response
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Error during file import.',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
84
app/Http/Controllers/Api/ChatbotController.php
Normal file
84
app/Http/Controllers/Api/ChatbotController.php
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Services\OpenAIService;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class ChatbotController extends Controller
|
||||||
|
{
|
||||||
|
protected $openAIService;
|
||||||
|
|
||||||
|
public function __construct(OpenAIService $openAIService)
|
||||||
|
{
|
||||||
|
$this->openAIService = $openAIService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateText(Request $request)
|
||||||
|
{
|
||||||
|
info($request);
|
||||||
|
$request->validate([
|
||||||
|
'tab_active' => 'required|string',
|
||||||
|
'prompt' => 'required|string',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$tab_active = $request->input('tab_active');
|
||||||
|
$main_content = match ($tab_active) {
|
||||||
|
"count-retribusi" => "RETRIBUTION",
|
||||||
|
"document-validation" => "DOCUMENT VALIDATION",
|
||||||
|
"data-information" => "DATA SUMMARY",
|
||||||
|
default => "UNKNOWN",
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($main_content === "UNKNOWN") {
|
||||||
|
return response()->json(['response' => 'Invalid tab_active value.'], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
info($main_content);
|
||||||
|
|
||||||
|
// Klasifikasi apakah pertanyaan butuh database atau bisa dijawab langsung
|
||||||
|
$classifyResponse = $this->openAIService->generateClassifyMainContent($request->input('prompt'), $main_content);
|
||||||
|
|
||||||
|
if ($classifyResponse === "DATABASE") {
|
||||||
|
$queryResponse = $this->openAIService->generateQueryBasedMainContent($request->input('prompt'), $main_content);
|
||||||
|
if (is_array($queryResponse)) {
|
||||||
|
info('Query Response is an array: ', $queryResponse);
|
||||||
|
} else {
|
||||||
|
info('Query Response is a string: ' . $queryResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validasi query dua kali sebelum eksekusi
|
||||||
|
if (
|
||||||
|
$this->openAIService->validateSyntaxQuery($queryResponse) === "VALID" &&
|
||||||
|
$this->openAIService->validateSyntaxQuery($queryResponse) === "VALID"
|
||||||
|
) {
|
||||||
|
info($queryResponse);
|
||||||
|
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
||||||
|
$resultQuery = DB::select($queryResponse);
|
||||||
|
$formattedResultQuery = json_encode($resultQuery, JSON_PRETTY_PRINT);
|
||||||
|
$nlpResult = $this->openAIService->generateNLPFromQuery($request->input('prompt'), $formattedResultQuery);
|
||||||
|
$finalGeneratedText =$this->openAIService->generateFinalText($nlpResult);
|
||||||
|
return response()->json(['response' => $finalGeneratedText]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json(['response' => ''], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($classifyResponse === "GENERAL") {
|
||||||
|
$nlpResult = $this->openAIService->generateGeneralText($request->input('prompt'), $main_content);
|
||||||
|
$finalGeneratedText =$this->openAIService->generateFinalText($nlpResult);
|
||||||
|
return response()->json(['response' => $finalGeneratedText]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json(['response' => ''], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function classifyContent(string $prompt) {
|
||||||
|
$classifyResponse = $this->openAIService->generateClassifyContent($prompt);
|
||||||
|
return $classifyResponse;
|
||||||
|
}
|
||||||
|
}
|
||||||
130
app/Http/Controllers/Api/CustomersController.php
Normal file
130
app/Http/Controllers/Api/CustomersController.php
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\CustomersRequest;
|
||||||
|
use App\Http\Requests\ExcelUploadRequest;
|
||||||
|
use App\Http\Resources\CustomersResource;
|
||||||
|
use App\Imports\CustomersImport;
|
||||||
|
use App\Models\Customer;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
|
||||||
|
class CustomersController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$query = Customer::query()->orderBy('id', 'desc');
|
||||||
|
if ($request->has('search') &&!empty($request->get('search'))) {
|
||||||
|
$query = $query->where('nomor_pelanggan', 'LIKE', '%'.$request->get('search').'%')
|
||||||
|
->orWhere('nama', 'LIKE', '%'.$request->get('search').'%')
|
||||||
|
->orWhere('kota_palayanan', 'LIKE', '%'.$request->get('search').'%');
|
||||||
|
}
|
||||||
|
return CustomersResource::collection($query->paginate());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(CustomersRequest $request)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$customer = Customer::create($request->validated());
|
||||||
|
return response()->json(['message' => 'Successfully created', new CustomersResource($customer)]);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Failed to create customer',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(string $id)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$customer = Customer::find($id);
|
||||||
|
if($customer){
|
||||||
|
return new CustomersResource($customer);
|
||||||
|
} else {
|
||||||
|
return response()->json(['message' => 'Customer not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e){
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Failed to retrieve customer',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(CustomersRequest $request, string $id)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$customer = Customer::find($id);
|
||||||
|
if($customer){
|
||||||
|
$customer->update($request->validated());
|
||||||
|
return response()->json(['message' => 'Successfully updated', new CustomersResource($customer)]);
|
||||||
|
} else {
|
||||||
|
return response()->json(['message' => 'Customer not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Failed to update customer',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$customer = Customer::find($id);
|
||||||
|
if($customer){
|
||||||
|
$customer->delete();
|
||||||
|
return response()->json(['message' => 'Successfully deleted']);
|
||||||
|
}else {
|
||||||
|
return response()->json(['message' => 'Customer not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Failed to delete customer',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function upload(ExcelUploadRequest $request){
|
||||||
|
try{
|
||||||
|
if(!$request->hasFile('file')){
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'No file provided'
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
$file = $request->file('file');
|
||||||
|
Excel::import(new CustomersImport, $file);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'File uploaded successfully',
|
||||||
|
]);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
\Log::info($e->getMessage());
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'Failed to upload file',
|
||||||
|
'message' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
31
app/Http/Controllers/Api/LackOfPotentialController.php
Normal file
31
app/Http/Controllers/Api/LackOfPotentialController.php
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Advertisement;
|
||||||
|
use App\Models\Customer;
|
||||||
|
use App\Models\SpatialPlanning;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class LackOfPotentialController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
public function count_lack_of_potential(){
|
||||||
|
try{
|
||||||
|
$total_reklame = Advertisement::count();
|
||||||
|
$total_pdam = Customer::count();
|
||||||
|
$total_tata_ruang = SpatialPlanning::count();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'total_reklame' => $total_reklame,
|
||||||
|
'total_pdam' => $total_pdam,
|
||||||
|
'total_tata_ruang' => $total_tata_ruang
|
||||||
|
], 200);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Error: '.$e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,8 +3,11 @@
|
|||||||
namespace App\Http\Controllers\Api;
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\MenuRequest;
|
||||||
|
use App\Http\Resources\MenuResource;
|
||||||
use App\Models\Menu;
|
use App\Models\Menu;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class MenusController extends Controller
|
class MenusController extends Controller
|
||||||
{
|
{
|
||||||
@@ -13,7 +16,7 @@ class MenusController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$query = Menu::query();
|
$query = Menu::query()->orderBy('id', 'desc');
|
||||||
|
|
||||||
if($request->has("search") && !empty($request->get("search"))){
|
if($request->has("search") && !empty($request->get("search"))){
|
||||||
$query = $query->where("name", "like", "%".$request->get("search")."%");
|
$query = $query->where("name", "like", "%".$request->get("search")."%");
|
||||||
@@ -25,9 +28,15 @@ class MenusController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Store a newly created resource in storage.
|
* Store a newly created resource in storage.
|
||||||
*/
|
*/
|
||||||
public function store(Request $request)
|
public function store(MenuRequest $request)
|
||||||
{
|
{
|
||||||
//
|
try{
|
||||||
|
$menu = Menu::create($request->validated());
|
||||||
|
return response()->json(['message' => 'Menu created successfully', 'data' => new MenuResource($menu)]);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
Log::error($e);
|
||||||
|
return response()->json(['message' => 'Error when creating menu'], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,15 +44,37 @@ class MenusController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function show(string $id)
|
public function show(string $id)
|
||||||
{
|
{
|
||||||
//
|
try{
|
||||||
|
$menu = Menu::find($id);
|
||||||
|
if($menu){
|
||||||
|
return response()->json(['message' => 'Menu found', 'data' => new MenuResource($menu)]);
|
||||||
|
} else {
|
||||||
|
return response()->json(['message' => 'Menu not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e){
|
||||||
|
Log::error($e);
|
||||||
|
Log::error($e->getMessage());
|
||||||
|
return response()->json(['message' => 'Error when finding menu'], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the specified resource in storage.
|
* Update the specified resource in storage.
|
||||||
*/
|
*/
|
||||||
public function update(Request $request, string $id)
|
public function update(MenuRequest $request, string $id)
|
||||||
{
|
{
|
||||||
//
|
try{
|
||||||
|
$menu = Menu::findOrFail($id);
|
||||||
|
if($menu){
|
||||||
|
$menu->update($request->validated());
|
||||||
|
return response()->json(['message' => 'Menu updated successfully', 'data' => new MenuResource($menu)]);
|
||||||
|
} else {
|
||||||
|
return response()->json(['message' => 'Menu not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e){
|
||||||
|
Log::error($e);
|
||||||
|
return response()->json(['message' => 'Error when updating menu'], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,6 +82,28 @@ class MenusController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function destroy(string $id)
|
public function destroy(string $id)
|
||||||
{
|
{
|
||||||
//
|
try{
|
||||||
|
$menu = Menu::findOrFail($id);
|
||||||
|
if($menu){
|
||||||
|
$this->deleteChildren($menu);
|
||||||
|
$menu->roles()->detach();
|
||||||
|
$menu->delete();
|
||||||
|
return response()->json(['message' => 'Menu deleted successfully']);
|
||||||
|
} else {
|
||||||
|
return response()->json(['message' => 'Menu not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e){
|
||||||
|
Log::error($e);
|
||||||
|
return response()->json(['message' => 'Error when deleting menu'], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function deleteChildren($menu)
|
||||||
|
{
|
||||||
|
foreach ($menu->children as $child) {
|
||||||
|
$this->deleteChildren($child); // Recursively delete its children
|
||||||
|
$child->roles()->detach(); // Detach roles before deleting
|
||||||
|
$child->delete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,35 @@ class PbgTaskController extends Controller
|
|||||||
public function __construct(GoogleSheetService $googleSheetService){
|
public function __construct(GoogleSheetService $googleSheetService){
|
||||||
$this->googleSheetService = $googleSheetService;
|
$this->googleSheetService = $googleSheetService;
|
||||||
}
|
}
|
||||||
public function index()
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
//
|
info($request);
|
||||||
|
|
||||||
|
$isLastUpdated = filter_var($request->query('isLastUpdated', false), FILTER_VALIDATE_BOOLEAN);
|
||||||
|
|
||||||
|
$query = PbgTask::query();
|
||||||
|
|
||||||
|
if ($isLastUpdated) {
|
||||||
|
$query->orderBy('updated_at', 'desc');
|
||||||
|
} else {
|
||||||
|
$query->where('status', 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ambil maksimal 10 data
|
||||||
|
$pbg_task = $query->limit(10)->get();
|
||||||
|
$totalData = $pbg_task->count();
|
||||||
|
|
||||||
|
// Tambahkan nomor urut
|
||||||
|
$data = $pbg_task->map(function ($item, $index) {
|
||||||
|
return array_merge($item->toArray(), ['no' => $index + 1]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'data' => $data,
|
||||||
|
'meta' => [
|
||||||
|
'total' => $totalData
|
||||||
|
]
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers\Api;
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\RoleRequest;
|
||||||
use App\Models\Role;
|
use App\Models\Role;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -13,7 +14,7 @@ class RolesController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$query = Role::query();
|
$query = Role::query()->orderBy('id', 'desc');
|
||||||
|
|
||||||
if($request->has('search') && !empty($request->get('search'))){
|
if($request->has('search') && !empty($request->get('search'))){
|
||||||
$query = $query->where('name', 'like', '%'. $request->get('search') . '%');
|
$query = $query->where('name', 'like', '%'. $request->get('search') . '%');
|
||||||
@@ -25,9 +26,14 @@ class RolesController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Store a newly created resource in storage.
|
* Store a newly created resource in storage.
|
||||||
*/
|
*/
|
||||||
public function store(Request $request)
|
public function store(RoleRequest $request)
|
||||||
{
|
{
|
||||||
//
|
try{
|
||||||
|
$role = Role::create($request->validated());
|
||||||
|
return response()->json(['message' => 'Successfully created', 'data' => $role]);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
return response()->json(['message' => 'Error when creating role', 'error' => $e->getMessage()], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,15 +41,34 @@ class RolesController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function show(string $id)
|
public function show(string $id)
|
||||||
{
|
{
|
||||||
//
|
try{
|
||||||
|
$role = Role::find($id);
|
||||||
|
if($role){
|
||||||
|
return response()->json(['data' => $role]);
|
||||||
|
} else {
|
||||||
|
return response()->json(['message' => 'Role not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e){
|
||||||
|
return response()->json(['message' => 'Error when getting role', 'error' => $e->getMessage()], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the specified resource in storage.
|
* Update the specified resource in storage.
|
||||||
*/
|
*/
|
||||||
public function update(Request $request, string $id)
|
public function update(RoleRequest $request, string $id)
|
||||||
{
|
{
|
||||||
//
|
try{
|
||||||
|
$role = Role::find($id);
|
||||||
|
if($role){
|
||||||
|
$role->update($request->validated());
|
||||||
|
return response()->json(['message' => 'Successfully updated', 'data' => $role]);
|
||||||
|
} else {
|
||||||
|
return response()->json(['message' => 'Role not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e){
|
||||||
|
return response()->json(['message' => 'Error when updating role', 'error' => $e->getMessage()], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,6 +76,16 @@ class RolesController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function destroy(string $id)
|
public function destroy(string $id)
|
||||||
{
|
{
|
||||||
//
|
try{
|
||||||
|
$role = Role::find($id);
|
||||||
|
if($role){
|
||||||
|
$role->delete();
|
||||||
|
return response()->json(['message' => 'Successfully deleted']);
|
||||||
|
} else {
|
||||||
|
return response()->json(['message' => 'Role not found'], 404);
|
||||||
|
}
|
||||||
|
}catch(\Exception $e){
|
||||||
|
return response()->json(['message' => 'Error when deleting role', 'error' => $e->getMessage()], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
146
app/Http/Controllers/Api/SpatialPlanningController.php
Normal file
146
app/Http/Controllers/Api/SpatialPlanningController.php
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Models\SpatialPlanning;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\SpatialPlanningRequest;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Resources\SpatialPlanningResource;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
use App\Imports\SpatialPlanningImport;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
|
class SpatialPlanningController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
info($request);
|
||||||
|
$perPage = $request->input('per_page', 15);
|
||||||
|
$search = $request->input('search', '');
|
||||||
|
|
||||||
|
$query = SpatialPlanning::query();
|
||||||
|
if ($search) {
|
||||||
|
$query->where(function ($q) use ($search) {
|
||||||
|
$q->where('name', 'like', "%$search%")
|
||||||
|
->orWhere('kbli', 'like', "%$search%")
|
||||||
|
->orWhere('activities', 'like', "%$search%")
|
||||||
|
->orWhere('area', 'like', "%$search%")
|
||||||
|
->orWhere('location', 'like', "%$search%")
|
||||||
|
->orWhere('number', 'like', "%$search%");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$spatialPlannings = $query->paginate($perPage);
|
||||||
|
|
||||||
|
// Menambhakan nomor urut (No)
|
||||||
|
$start = ($spatialPlannings->currentPage()-1) * $perPage + 1;
|
||||||
|
|
||||||
|
// Tambahkan nomor urut ke dalam data
|
||||||
|
$data = $spatialPlannings->map(function ($item, $index) use ($start) {
|
||||||
|
return array_merge($item->toArray(), ['no' => $start + $index]);
|
||||||
|
});
|
||||||
|
|
||||||
|
info($data);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'data' => $data,
|
||||||
|
'meta' => [
|
||||||
|
'total' => $spatialPlannings->total(),
|
||||||
|
'per_page' => $spatialPlannings->perPage(),
|
||||||
|
'current_page' => $spatialPlannings->currentPage(),
|
||||||
|
'last_page'=>$spatialPlannings->lastPage(),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(SpatialPlanningRequest $request): SpatialPlanning
|
||||||
|
{
|
||||||
|
$data = $request->validated();
|
||||||
|
return SpatialPlanning::create($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* import spatial planning from excel
|
||||||
|
*/
|
||||||
|
public function importFromFile(Request $request)
|
||||||
|
{
|
||||||
|
info($request);
|
||||||
|
//validasi file
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'file' => 'required|mimes:xlsx, xls|max:10240'
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'message'=>'File vaildation failed.',
|
||||||
|
"errors"=>$validator->errors()
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$file = $request->file('file');
|
||||||
|
Excel::import(new SpatialPlanningImport, $file);
|
||||||
|
return response()->json([
|
||||||
|
'message'=>'File uploaded and imported successfully!'
|
||||||
|
], 200);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'message'=>'Error during file import.',
|
||||||
|
'error'=>$e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(SpatialPlanning $spatialPlanning): SpatialPlanning
|
||||||
|
{
|
||||||
|
return $spatialPlanning;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(SpatialPlanningRequest $request, SpatialPlanning $spatialPlanning): SpatialPlanning
|
||||||
|
{
|
||||||
|
info($request);
|
||||||
|
$data = $request->validated();
|
||||||
|
info($data);
|
||||||
|
|
||||||
|
$spatialPlanning->update($data);
|
||||||
|
|
||||||
|
return $spatialPlanning;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy(SpatialPlanning $spatialPlanning): Response
|
||||||
|
{
|
||||||
|
$spatialPlanning->delete();
|
||||||
|
|
||||||
|
return response()->noContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function downloadExcelSpatialPlanning()
|
||||||
|
{
|
||||||
|
$filePath = public_path('templates/template_spatial_planning.xlsx');
|
||||||
|
info(sprintf("File Path: %s | Exists: %s", $filePath, file_exists($filePath) ? 'Yes' : 'No'));
|
||||||
|
|
||||||
|
// Cek apakah file ada
|
||||||
|
if (!file_exists($filePath)) {
|
||||||
|
return response()-> json(['message' => 'File tidak ditemukan!'], Response::HTTP_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return file to download
|
||||||
|
return response()->download($filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
169
app/Http/Controllers/Api/TourismController.php
Normal file
169
app/Http/Controllers/Api/TourismController.php
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Models\Tourism;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\TourismRequest;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Resources\TourismResource;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
use App\Imports\TourismImport;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
|
class TourismController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$perPage = $request->input('per_page', 15);
|
||||||
|
$search = $request->input('search', '');
|
||||||
|
|
||||||
|
$query = Tourism::query();
|
||||||
|
if ($search) {
|
||||||
|
$query->where(function ($q) use ($search) {
|
||||||
|
$q->where('business_name', 'like', "%$search%")
|
||||||
|
->orWhere('project_name', 'like', "%$search%")
|
||||||
|
->orWhere('business_address', 'like', "%$search%");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$tourisms = $query->paginate($perPage);
|
||||||
|
|
||||||
|
$tourisms->getCollection()->transform(function ($tourisms) {
|
||||||
|
$village = DB::table('villages')->where('village_code', $tourisms->village_code)->first();
|
||||||
|
$tourisms->village_name = $village ? $village->village_name : null;
|
||||||
|
|
||||||
|
$district = DB::table('districts')->where('district_code', $tourisms->district_code)->first();
|
||||||
|
$tourisms->district_name = $village ? $village->village_name : null;
|
||||||
|
return $tourisms;
|
||||||
|
});
|
||||||
|
|
||||||
|
$start = ($tourisms->currentPage()-1) * $perPage + 1;
|
||||||
|
|
||||||
|
$data = $tourisms->map(function ($item, $index) use ($start) {
|
||||||
|
return array_merge($item->toArray(), ['no' => $start + $index]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'data' => $data,
|
||||||
|
'meta' => [
|
||||||
|
'total' => $tourisms->total(),
|
||||||
|
'per_page' => $tourisms->perPage(),
|
||||||
|
'current_page' => $tourisms->currentPage(),
|
||||||
|
'last_page'=>$tourisms->lastPage(),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(TourismRequest $request): Tourism
|
||||||
|
{
|
||||||
|
$data = $request->validated();
|
||||||
|
$district_code = DB::table('districts')->where('district_name', $data['district_name'])->value('district_code');
|
||||||
|
$village_code = DB::table('villages')->where('village_name', $data['village_name'])->where('district_code', $district_code)->value('village_code');
|
||||||
|
|
||||||
|
$data['district_code'] = $district_code;
|
||||||
|
$data['village_code'] = $village_code;
|
||||||
|
|
||||||
|
return Tourism::create($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Import advertisements from Excel
|
||||||
|
*/
|
||||||
|
public function importFromFile(Request $request)
|
||||||
|
{
|
||||||
|
//Validasi file
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'file' => 'required|mimes:xlsx, xls|max:10240'
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'message'=>'File validation failed.',
|
||||||
|
'errors'=>$validator->errors()
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$file = $request->file('file');
|
||||||
|
Excel::import(new TourismImport, $file);
|
||||||
|
return response()->json([
|
||||||
|
'message'=>'File uploaded and imported successfully!'
|
||||||
|
], 200);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'message'=>'Error during file import.',
|
||||||
|
'error'=>$e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAllLocation()
|
||||||
|
{
|
||||||
|
$locations = Tourism::whereNotNull('longitude')
|
||||||
|
->whereNotNull('latitude')
|
||||||
|
->select('project_name', 'longitude', 'latitude')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'data' => $locations
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(Tourism $tourism): Tourism
|
||||||
|
{
|
||||||
|
return $tourism;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(TourismRequest $request, Tourism $tourism): Tourism
|
||||||
|
{
|
||||||
|
$data = $request->validated();
|
||||||
|
|
||||||
|
// Cari district_code berdasarkan district_name
|
||||||
|
$district_code = DB::table('districts')->where('district_name', $data['district_name'])->value('district_code');
|
||||||
|
// Cari village_code berdasarkan village_name
|
||||||
|
$village_code = DB::table('villages')->where('village_name', $data['village_name'])->where('district_code', $district_code)->value('village_code');
|
||||||
|
// Tambahkan village_code dan district_code ke data
|
||||||
|
$data['village_code'] = $village_code;
|
||||||
|
$data['district_code'] = $district_code;
|
||||||
|
|
||||||
|
$tourism->update($data);
|
||||||
|
|
||||||
|
return $tourism;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy(Tourism $tourism): Response
|
||||||
|
{
|
||||||
|
$tourism->delete();
|
||||||
|
|
||||||
|
return response()->noContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function downloadExcelTourism()
|
||||||
|
{
|
||||||
|
$filePath = public_path('templates/template_pariwisata.xlsx');
|
||||||
|
info(sprintf("File Path: %s | Exists: %s", $filePath, file_exists($filePath) ? 'Yes' : 'No'));
|
||||||
|
|
||||||
|
// Cek apakah file ada
|
||||||
|
if (!file_exists($filePath)) {
|
||||||
|
return response()-> json(['message' => 'File tidak ditemukan!'], Response::HTTP_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return file to download
|
||||||
|
return response()->download($filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
206
app/Http/Controllers/Api/UmkmController.php
Normal file
206
app/Http/Controllers/Api/UmkmController.php
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Models\Umkm;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\UmkmRequest;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Resources\UmkmResource;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
use App\Imports\UmkmImport;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
|
class UmkmController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
info($request);
|
||||||
|
$perPage = $request->input('per_page', 15);
|
||||||
|
$search = $request->input('search', '');
|
||||||
|
|
||||||
|
$query = Umkm::query();
|
||||||
|
|
||||||
|
if ($search) {
|
||||||
|
$query->where(function ($q) use ($search) {
|
||||||
|
$q->where('business_name', 'like', "%$search%")
|
||||||
|
->orWhere('business_address', 'like', "%$search%")
|
||||||
|
->orWhere('business_desc', 'like', "%$search%")
|
||||||
|
->orWhere('business_id_number', 'like', "%$search%")
|
||||||
|
->orWhere('owner_id', 'like', "%$search%")
|
||||||
|
->orWhere('owner_name', 'like', "%$search%");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$umkm = $query->paginate($perPage);
|
||||||
|
|
||||||
|
$umkm->getCollection()->transform(function ($umkm) {
|
||||||
|
$village = DB::table('villages')->where('village_code', $umkm->village_code)->first();
|
||||||
|
$umkm->village_name = $village ? $village->village_name : null;
|
||||||
|
|
||||||
|
$district = DB::table('districts')->where('district_code', $umkm->district_code)->first();
|
||||||
|
$umkm->district_name = $district ? $district->district_name : null;
|
||||||
|
|
||||||
|
$business_scale = DB::table('business_scale')->where('id', $umkm->business_scale_id)->first();
|
||||||
|
$umkm->business_scale = $business_scale ? $business_scale->business_scale : null;
|
||||||
|
|
||||||
|
$permit_status = DB::table('permit_status')->where('id', $umkm->permit_status_id)->first();
|
||||||
|
$umkm->permit_status = $permit_status ? $permit_status->permit_status : null;
|
||||||
|
|
||||||
|
$business_form = DB::table('business_form')->where('id', $umkm->business_form_id)->first();
|
||||||
|
$umkm->business_form = $business_form ? $business_form->business_form : null;
|
||||||
|
return $umkm;
|
||||||
|
});
|
||||||
|
|
||||||
|
$start = ($umkm->currentPage()-1) * $perPage + 1;
|
||||||
|
|
||||||
|
$data = $umkm->map(function ($item, $index) use ($start) {
|
||||||
|
return array_merge($item->toArray(), ['no' => $start + $index]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'data' => $data,
|
||||||
|
'meta' => [
|
||||||
|
'total' => $umkm->total(),
|
||||||
|
'per_page' => $umkm->perPage(),
|
||||||
|
'current_page' => $umkm->currentPage(),
|
||||||
|
'last_page' => $umkm->lastPage(),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(UmkmRequest $request): Umkm
|
||||||
|
{
|
||||||
|
info($request);
|
||||||
|
$data = $request->validated();
|
||||||
|
|
||||||
|
// Cari kode berdasarkan nama
|
||||||
|
$district_code = DB::table('districts')->where('district_name', $data['district_name'])->value('district_code');
|
||||||
|
$village_code = DB::table('villages')->where('village_name', $data['village_name'])->where('district_code', $district_code)->value('village_code');
|
||||||
|
$business_scale_id = DB::table('business_scale')->where('id', $data['business_scale_id'])->value('id');
|
||||||
|
$permit_status_id = DB::table('permit_status')->where('id', $data['permit_status_id'])->value('id');
|
||||||
|
$business_form_id = DB::table('business_form')->where('id', $data['business_form_id'])->value('id');
|
||||||
|
|
||||||
|
info($business_scale_id);
|
||||||
|
|
||||||
|
// Update data dengan kode yang ditemukan
|
||||||
|
$data['village_code'] = $village_code;
|
||||||
|
$data['district_code'] = $district_code;
|
||||||
|
$data['land_area'] = (double) $request['land_area'];
|
||||||
|
$data['business_scale_id'] = (int) $business_scale_id;
|
||||||
|
$data['permit_status_id'] = (int) $permit_status_id;
|
||||||
|
$data['business_form_id'] = (int) $business_form_id;
|
||||||
|
|
||||||
|
info($data);
|
||||||
|
|
||||||
|
// Simpan ke database
|
||||||
|
return Umkm::create($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Import advertisements from Excel or CSV.
|
||||||
|
*/
|
||||||
|
public function importFromFile(Request $request)
|
||||||
|
{
|
||||||
|
// Validasi file
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'file' => 'required|mimes:xlsx, xls|max:10240',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'File validation failed.',
|
||||||
|
'errors' => $validator->errors()
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Ambil file dari request
|
||||||
|
$file = $request->file('file');
|
||||||
|
|
||||||
|
// Menggunakan Laravel Excel untuk mengimpor file
|
||||||
|
Excel::import(new UmkmImport, $file);
|
||||||
|
|
||||||
|
// Jika sukses, kembalikan response sukses
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'File uploaded and imported successfully!'
|
||||||
|
], 200);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Error during file import.',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(Umkm $umkm): Umkm
|
||||||
|
{
|
||||||
|
return $umkm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(UmkmRequest $request, Umkm $umkm): Umkm
|
||||||
|
{
|
||||||
|
info($request);
|
||||||
|
$data = $request->validated();
|
||||||
|
|
||||||
|
|
||||||
|
// Cari district_code berdasarkan district_name
|
||||||
|
$district_code = DB::table('districts')->where('district_name', $data['district_name'])->value('district_code');
|
||||||
|
// Cari village_code berdasarkan village_name
|
||||||
|
$village_code = DB::table('villages')->where('village_name', $data['village_name'])->where('district_code', $district_code)->value('village_code');
|
||||||
|
$business_scale_id = DB::table('business_scale')->where('id', $data['business_scale_id'])->value('id');
|
||||||
|
$permit_status_id = DB::table('permit_status')->where('id', $data['permit_status_id'])->value('id');
|
||||||
|
$business_form_id = DB::table('business_form')->where('id', $data['business_form_id'])->value('id');
|
||||||
|
|
||||||
|
|
||||||
|
// Tambahkan village_code dan district_code ke data
|
||||||
|
$data['village_code'] = $village_code;
|
||||||
|
$data['district_code'] = $district_code;
|
||||||
|
$data['land_area'] = (double) $request['land_area'];
|
||||||
|
$data['business_scale_id'] = (int) $business_scale_id;
|
||||||
|
$data['permit_status_id'] = (int) $permit_status_id;
|
||||||
|
$data['business_form_id'] = (int) $business_form_id;
|
||||||
|
|
||||||
|
// Log data setelah transformasi
|
||||||
|
info($data);
|
||||||
|
|
||||||
|
$umkm->update($data);
|
||||||
|
|
||||||
|
return $umkm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy(Umkm $umkm): Response
|
||||||
|
{
|
||||||
|
$umkm->delete();
|
||||||
|
|
||||||
|
return response()->noContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function downloadExcelUmkm()
|
||||||
|
{
|
||||||
|
$filePath = public_path('templates/template_umkm.xlsx');
|
||||||
|
|
||||||
|
// Cek apakah file ada
|
||||||
|
if (!file_exists($filePath)) {
|
||||||
|
return response()-> json(['message' => 'File tidak ditemukan!'], Response::HTTP_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return file to download
|
||||||
|
return response()->download($filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,9 +4,11 @@ namespace App\Http\Controllers\Api;
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\Auth\LoginRequest;
|
use App\Http\Requests\Auth\LoginRequest;
|
||||||
|
use App\Http\Requests\UsersRequest;
|
||||||
use App\Http\Resources\UserResource;
|
use App\Http\Resources\UserResource;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Traits\GlobalApiResponse;
|
use App\Traits\GlobalApiResponse;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -35,4 +37,50 @@ class UsersController extends Controller
|
|||||||
$request->user()->tokens()->delete();
|
$request->user()->tokens()->delete();
|
||||||
return response()->json(['message' => 'logged out successfully']);
|
return response()->json(['message' => 'logged out successfully']);
|
||||||
}
|
}
|
||||||
|
public function store(UsersRequest $request){
|
||||||
|
$validate_data = $request->validated();
|
||||||
|
|
||||||
|
DB::beginTransaction();
|
||||||
|
try{
|
||||||
|
$user = User::create([
|
||||||
|
'name' => $validate_data['name'],
|
||||||
|
'email' => $validate_data['email'],
|
||||||
|
'password' => Hash::make($validate_data['password']),
|
||||||
|
'firstname' => $validate_data['firstname'],
|
||||||
|
'lastname' => $validate_data['lastname'],
|
||||||
|
'position' => $validate_data['position'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$user->roles()->attach((int) $validate_data['role_id']);
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
return response()->json(['message' => 'Successfully created'],201);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
DB::rollBack();
|
||||||
|
return response()->json(['message' => $e->getMessage()],500);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public function update(UsersRequest $request, $id){
|
||||||
|
try{
|
||||||
|
$validate_data = $request->validated();
|
||||||
|
$user = User::findOrFail($id);
|
||||||
|
|
||||||
|
DB::beginTransaction();
|
||||||
|
$user->update([
|
||||||
|
'name' => $validate_data['name'],
|
||||||
|
'email' => $validate_data['email'],
|
||||||
|
'firstname' => $validate_data['firstname'],
|
||||||
|
'lastname' => $validate_data['lastname'],
|
||||||
|
'position' => $validate_data['position']
|
||||||
|
]);
|
||||||
|
|
||||||
|
$user->roles()->sync($request->role_id);
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
return response()->json(['message' => 'Successfully updated'], 200);
|
||||||
|
}catch(\Exception $e){
|
||||||
|
DB::rollBack();
|
||||||
|
return response()->json(['message' => $e->getMessage()],500);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
66
app/Http/Controllers/BusinessOrIndustriesController.php
Normal file
66
app/Http/Controllers/BusinessOrIndustriesController.php
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\BusinessOrIndustry;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class BusinessOrIndustriesController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view('business-industries.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view("business-industries.create");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit(string $id)
|
||||||
|
{
|
||||||
|
$data = BusinessOrIndustry::findOrFail($id);
|
||||||
|
return view('business-industries.edit', compact('data'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
17
app/Http/Controllers/Chatbot/ChatbotController.php
Normal file
17
app/Http/Controllers/Chatbot/ChatbotController.php
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Chatbot;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ChatbotController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Displya a listing of the resource
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view('chatbot.index');
|
||||||
|
}
|
||||||
|
}
|
||||||
26
app/Http/Controllers/CustomersController.php
Normal file
26
app/Http/Controllers/CustomersController.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Customer;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class CustomersController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view('customers.index');
|
||||||
|
}
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view('customers.create');
|
||||||
|
}
|
||||||
|
public function edit(string $id)
|
||||||
|
{
|
||||||
|
$data = Customer::findOrFail($id);
|
||||||
|
return view('customers.edit', compact('data'));
|
||||||
|
}
|
||||||
|
public function upload(){
|
||||||
|
return view('customers.upload');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,7 +15,8 @@ class BigDataController extends Controller
|
|||||||
return view('dashboards.bigdata', compact('latest_created'));
|
return view('dashboards.bigdata', compact('latest_created'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function pbg(){
|
public function pbg()
|
||||||
return view('index');
|
{
|
||||||
|
return view('dashboards.pbg');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Dashboards;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class LackOfPotentialController extends Controller
|
||||||
|
{
|
||||||
|
public function lack_of_potential(){
|
||||||
|
return view('dashboards.lack_of_potential');
|
||||||
|
}
|
||||||
|
}
|
||||||
125
app/Http/Controllers/Data/SpatialPlanningController.php
Normal file
125
app/Http/Controllers/Data/SpatialPlanningController.php
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Data;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\SpatialPlanning;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class SpatialPlanningController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view('data.spatialPlannings.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function bulkCreate()
|
||||||
|
{
|
||||||
|
return view('data.spatialPlannings.form-upload');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
$title = 'Rencana Tata Ruang';
|
||||||
|
$subtitle = "Create Data";
|
||||||
|
|
||||||
|
// Mengambil data untuk dropdown
|
||||||
|
$dropdownOptions = [];
|
||||||
|
|
||||||
|
$fields = $this->getFields();
|
||||||
|
$fieldTypes = $this->getFieldTypes();
|
||||||
|
|
||||||
|
$apiUrl = url('/api/spatial-plannings');
|
||||||
|
return view('data.spatialPlannings.form', compact('title', 'subtitle', 'fields', 'fieldTypes', 'apiUrl', 'dropdownOptions'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit(string $id)
|
||||||
|
{
|
||||||
|
$title = 'Rencana Tata Ruang';
|
||||||
|
$subtitle = 'Update Data';
|
||||||
|
|
||||||
|
$modelInstance = SpatialPlanning::find($id);
|
||||||
|
// Pastikan model ditemukan
|
||||||
|
if (!$modelInstance) {
|
||||||
|
return redirect()->route('spatialPlanning.index') ->with('error', 'Rencana tata ruang tidak ditemukan');
|
||||||
|
}
|
||||||
|
|
||||||
|
$dropdownOptions = [];
|
||||||
|
|
||||||
|
$fields = $this->getFields();
|
||||||
|
$fieldTypes = $this->getFieldTypes();
|
||||||
|
|
||||||
|
$apiUrl = url('/api/spatial-plannings');
|
||||||
|
return view('data.spatialPlannings.form', compact('title', 'subtitle', 'modelInstance', 'fields', 'fieldTypes', 'apiUrl', 'dropdownOptions'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFields()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"name"=> "Nama",
|
||||||
|
"kbli"=> "KBLI",
|
||||||
|
"activities"=> "Kegiatan",
|
||||||
|
"area"=> "Luas (m2)",
|
||||||
|
"location"=> "Lokasi",
|
||||||
|
"number"=> "Nomor",
|
||||||
|
"date"=> "Tanggal",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFieldTypes()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"name"=> "text",
|
||||||
|
"kbli"=> "text",
|
||||||
|
"activities"=> "text",
|
||||||
|
"area"=> "text",
|
||||||
|
"location"=> "text",
|
||||||
|
"number"=> "text",
|
||||||
|
"date"=> "date",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
145
app/Http/Controllers/Data/TourismController.php
Normal file
145
app/Http/Controllers/Data/TourismController.php
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Data;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Tourism;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class TourismController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view('data.tourisms.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* show the form for creating a new rsource.
|
||||||
|
*/
|
||||||
|
public function bulkCreate()
|
||||||
|
{
|
||||||
|
return view('data.tourisms.form-upload');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show th form for creating a new resource
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
$title = 'Pariwisata';
|
||||||
|
$subtitle = 'Create Data';
|
||||||
|
|
||||||
|
// Mengambil data untuk dropdown
|
||||||
|
$dropdownOptions = [
|
||||||
|
'village_name' => DB::table('villages')->orderBy('village_name')->pluck('village_name', 'village_code'),
|
||||||
|
'district_name' => DB::table('districts')->orderBy('district_name')->pluck('district_name', 'district_code')
|
||||||
|
];
|
||||||
|
|
||||||
|
$fields = $this->getFields();
|
||||||
|
$fieldTypes = $this->getFieldTypes();
|
||||||
|
|
||||||
|
$apiUrl = url('/api/tourisms');
|
||||||
|
|
||||||
|
return view('data.tourisms.form', compact('title', 'subtitle', 'fields', 'fieldTypes', 'apiUrl', 'dropdownOptions'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$title = 'Pariwisata';
|
||||||
|
$subtitle = 'Update Data';
|
||||||
|
|
||||||
|
$modelInstance = Tourism::find($id);
|
||||||
|
// Pastikan model ditemukan
|
||||||
|
if (!$modelInstance) {
|
||||||
|
return redirect()->route('tourisms.index') ->with('error', 'Pariwisata tidak ditemukan');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mengambil dan memetakan village_name dan district_name
|
||||||
|
$village = DB::table('villages')->where('village_code', $modelInstance->village_code)->first();
|
||||||
|
$modelInstance->village_name = $village ? $village->village_name : null;
|
||||||
|
|
||||||
|
$district = DB::table('districts')->where('district_code', $modelInstance->district_code)->first();
|
||||||
|
$modelInstance->district_name = $district ? $district->district_name : null;
|
||||||
|
|
||||||
|
$dropdownOptions = [
|
||||||
|
'village_name' => DB::table('villages')->orderBy('village_name')->pluck('village_name', 'village_code'),
|
||||||
|
'district_name' => DB::table('districts')->orderBy('district_name')->pluck('district_name', 'district_code')
|
||||||
|
];
|
||||||
|
|
||||||
|
$fields = $this->getFields();
|
||||||
|
$fieldTypes = $this->getFieldTypes();
|
||||||
|
|
||||||
|
$apiUrl = url('/api/tourisms');
|
||||||
|
|
||||||
|
return view('data.tourisms.form', compact('title', 'subtitle', 'modelInstance', 'fields', 'fieldTypes', 'apiUrl', 'dropdownOptions'));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFields()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"project_id" => "ID Proyek",
|
||||||
|
"project_type_id" => "Jenis Proyek",
|
||||||
|
"nib" => "NIB",
|
||||||
|
"business_name" => "Nama Perusahaan",
|
||||||
|
"oss_publication_date" => "Tanggal Terbit OSS",
|
||||||
|
"investment_status_description" => "Uraian Status Penanaman Modal",
|
||||||
|
"business_form" => "Uraian Jenis Perusahaan",
|
||||||
|
"project_risk" => "Risiko Proyek",
|
||||||
|
"project_name" => "Nama Proyek",
|
||||||
|
"business_scale" => "Uraian Skala Usaha",
|
||||||
|
"business_address" => "Alamat Usaha",
|
||||||
|
"district_name" => "Kecamatan",
|
||||||
|
"village_name" => "Desa",
|
||||||
|
"longitude" => "Longitude",
|
||||||
|
"latitude" => "Latitude",
|
||||||
|
"project_submission_date" => "Tanggal Pengajuan Project",
|
||||||
|
"kbli" => "KBLI",
|
||||||
|
"kbli_title" => "Judul KBLI",
|
||||||
|
"supervisory_sector" => "Sektor Pembina",
|
||||||
|
"user_name" => "Nama User",
|
||||||
|
"email" => "Email",
|
||||||
|
"contact" => "Kontak",
|
||||||
|
"land_area_in_m2" => "Luas Tanah (m2)",
|
||||||
|
"investment_amount" => "Jumlah Investasi",
|
||||||
|
"tki" => "TKI",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFieldTypes()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"project_id" => "text",
|
||||||
|
"project_type_id" => "text",
|
||||||
|
"nib" => "text",
|
||||||
|
"business_name" => "text",
|
||||||
|
"oss_publication_date" => "date",
|
||||||
|
"investment_status_description" => "text",
|
||||||
|
"business_form" => "text",
|
||||||
|
"project_risk" => "text",
|
||||||
|
"project_name" => "text",
|
||||||
|
"business_scale" => "text",
|
||||||
|
"business_address" => "text",
|
||||||
|
"district_name" => "combobox",
|
||||||
|
"village_name" => "combobox",
|
||||||
|
"longitude" => "text",
|
||||||
|
"latitude" => "text",
|
||||||
|
"project_submission_date" => "date",
|
||||||
|
"kbli" => "text",
|
||||||
|
"kbli_title" => "text",
|
||||||
|
"supervisory_sector" => "text",
|
||||||
|
"user_name" => "text",
|
||||||
|
"email" => "text",
|
||||||
|
"contact" => "text",
|
||||||
|
"land_area_in_m2" => "text",
|
||||||
|
"investment_amount" => "text",
|
||||||
|
"tki" => "text",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
149
app/Http/Controllers/Data/UmkmController.php
Normal file
149
app/Http/Controllers/Data/UmkmController.php
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Data;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Umkm;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class UmkmController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view('data.umkm.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function bulkCreate()
|
||||||
|
{
|
||||||
|
return view('data.umkm.form-upload');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
$title = 'UMKM';
|
||||||
|
$subtitle = 'Create Data';
|
||||||
|
|
||||||
|
// Mengambil data untuk dropdown
|
||||||
|
$dropdownOptions = [
|
||||||
|
'village_name' => DB::table('villages')->orderBy('village_name')->pluck('village_name', 'village_code'),
|
||||||
|
'district_name' => DB::table('districts')->orderBy('district_name')->pluck('district_name', 'district_code'),
|
||||||
|
'business_scale_id' => DB::table('business_scale')->orderBy('business_scale')->pluck('business_scale', 'id'),
|
||||||
|
'permit_status_id' => DB::table('permit_status')->orderBy('permit_status')->pluck('permit_status', 'id'),
|
||||||
|
'business_form_id' => DB::table('business_form')->orderBy('business_form')->pluck('business_form', 'id')
|
||||||
|
];
|
||||||
|
|
||||||
|
$fields = $this->getFields();
|
||||||
|
$fieldTypes = $this->getFieldTypes();
|
||||||
|
|
||||||
|
$apiUrl = url('/api/umkm');
|
||||||
|
|
||||||
|
return view('data.umkm.form', compact('title', 'subtitle', 'fields', 'fieldTypes', 'apiUrl', 'dropdownOptions'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$title = 'UMKM';
|
||||||
|
$subtitle = 'Update Data';
|
||||||
|
$modelInstance = Umkm::find($id);
|
||||||
|
// Pastikan model ditemukan
|
||||||
|
if (!$modelInstance) {
|
||||||
|
return redirect()->route('umkm.index')->with('error', 'Umkm not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mengambil dan memetakan village_name dan district_name
|
||||||
|
$village = DB::table('villages')->where('village_code', $modelInstance->village_code)->first();
|
||||||
|
$modelInstance->village_name = $village ? $village->village_name : null;
|
||||||
|
|
||||||
|
$district = DB::table('districts')->where('district_code', $modelInstance->district_code)->first();
|
||||||
|
$modelInstance->district_name = $district ? $district->district_name : null;
|
||||||
|
|
||||||
|
$business_scale = DB::table('business_scale')->where('id', $modelInstance->business_scale_id)->first();
|
||||||
|
$modelInstance->business_scale_id = $business_scale ? $business_scale->id : null;
|
||||||
|
|
||||||
|
$permit_status = DB::table('permit_status')->where('id', $modelInstance->permit_status_id)->first();
|
||||||
|
$modelInstance->permit_status_id = $permit_status ? $permit_status->id : null;
|
||||||
|
|
||||||
|
$business_form = DB::table('business_form')->where('id', $modelInstance->business_form_id)->first();
|
||||||
|
$modelInstance->business_form_id = $business_form ? $business_form->id : null;
|
||||||
|
|
||||||
|
// dd($modelInstance['business_form_id']);
|
||||||
|
// Mengambil data untuk dropdown
|
||||||
|
$dropdownOptions = [
|
||||||
|
'village_name' => DB::table('villages')->orderBy('village_name')->pluck('village_name', 'village_code'),
|
||||||
|
'district_name' => DB::table('districts')->orderBy('district_name')->pluck('district_name', 'district_code'),
|
||||||
|
'business_scale_id' => DB::table('business_scale')->orderBy('business_scale')->pluck('business_scale', 'id'),
|
||||||
|
'permit_status_id' => DB::table('permit_status')->orderBy('permit_status')->pluck('permit_status', 'id'),
|
||||||
|
'business_form_id' => DB::table('business_form')->orderBy('business_form')->pluck('business_form', 'id')
|
||||||
|
];
|
||||||
|
|
||||||
|
info("AdvertisementController@edit diakses dengan Model Instance: $modelInstance");
|
||||||
|
$fields = $this->getFields();
|
||||||
|
$fieldTypes = $this->getFieldTypes();
|
||||||
|
|
||||||
|
$apiUrl = url('/api/umkm');
|
||||||
|
|
||||||
|
// dd($modelInstance->business_form_id, $dropdownOptions['business_form']);
|
||||||
|
return view('data.umkm.form', compact('title', 'subtitle', 'modelInstance', 'fields', 'fieldTypes', 'apiUrl', 'dropdownOptions'));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFields()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"business_name" => "Nama Usaha",
|
||||||
|
"business_address" => "Alamat Usaha",
|
||||||
|
"business_desc" => "Deskripsi Usaha",
|
||||||
|
"business_contact" => "Kontak Usaha",
|
||||||
|
"business_id_number" => "NIB",
|
||||||
|
"business_scale_id" => "Skala Usaha",
|
||||||
|
"owner_id" => "NIK",
|
||||||
|
"owner_name" => "Nama Pemilik",
|
||||||
|
"owner_address" => "Alamat Pemilik",
|
||||||
|
"owner_contact" => "Kontak Pemilik",
|
||||||
|
"business_type" => "Jenis Usaha",
|
||||||
|
"district_name" => "Kecamatan",
|
||||||
|
"village_name" => "Desa",
|
||||||
|
"number_of_employee" => "Jumlah Karyawan",
|
||||||
|
"land_area" => "Luas Tanah",
|
||||||
|
"permit_status_id" => "Ijin Status",
|
||||||
|
"business_form_id" => "Bisnis Form",
|
||||||
|
"revenue" => "Omset"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFieldTypes()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"business_name" => "text",
|
||||||
|
"business_address" => "text",
|
||||||
|
"business_desc" => "textarea",
|
||||||
|
"business_contact" => "text",
|
||||||
|
"business_id_number" => "text",
|
||||||
|
"business_scale_id" => "select",
|
||||||
|
"owner_id" => "text",
|
||||||
|
"owner_name" => "text",
|
||||||
|
"owner_address" => "text",
|
||||||
|
"owner_contact" => "text",
|
||||||
|
"business_type" => "text",
|
||||||
|
"district_name" => "combobox",
|
||||||
|
"village_name" => "combobox",
|
||||||
|
"number_of_employee" => "text",
|
||||||
|
"land_area" => "text",
|
||||||
|
"permit_status_id" => "select",
|
||||||
|
"business_form_id" => "select",
|
||||||
|
"revenue" => "text"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
12
app/Http/Controllers/GoogleApisController.php
Normal file
12
app/Http/Controllers/GoogleApisController.php
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class GoogleApisController extends Controller
|
||||||
|
{
|
||||||
|
public function index(){
|
||||||
|
return view('maps.google-api');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers\Master;
|
namespace App\Http\Controllers\Master;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\UsersRequest;
|
||||||
use App\Models\Role;
|
use App\Models\Role;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -28,7 +29,7 @@ class UsersController extends Controller
|
|||||||
$roles = Role::all();
|
$roles = Role::all();
|
||||||
return view('master.users.create', compact('roles'));
|
return view('master.users.create', compact('roles'));
|
||||||
}
|
}
|
||||||
public function store(Request $request){
|
public function store(UsersRequest $request){
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'name' => ['required', 'string', 'max:255'],
|
'name' => ['required', 'string', 'max:255'],
|
||||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||||
@@ -39,6 +40,7 @@ class UsersController extends Controller
|
|||||||
'role_id' => 'required|exists:roles,id'
|
'role_id' => 'required|exists:roles,id'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
try{
|
try{
|
||||||
$user = User::create([
|
$user = User::create([
|
||||||
|
|||||||
21
app/Http/Controllers/Report/ReportTourismController.php
Normal file
21
app/Http/Controllers/Report/ReportTourismController.php
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Report;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\TourismBasedKBLI;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class ReportTourismController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listring of the resource
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$tourismBasedKBLI = TourismBasedKBLI::all();
|
||||||
|
info($tourismBasedKBLI);
|
||||||
|
return view('report.tourisms.index', compact('tourismBasedKBLI'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,4 +40,40 @@ class AdvertisementRequest extends FormRequest
|
|||||||
'contact' => 'required|string',
|
'contact' => 'required|string',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pesan error validasi
|
||||||
|
*/
|
||||||
|
public function messages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'no.required' => 'Nomor harus diisi.',
|
||||||
|
'business_name.required' => 'Nama usaha harus diisi.',
|
||||||
|
'business_name.string' => 'Nama usaha harus berupa teks.',
|
||||||
|
'npwpd.required' => 'NPWPD harus diisi.',
|
||||||
|
'npwpd.string' => 'NPWPD harus berupa teks.',
|
||||||
|
'advertisement_type.required' => 'Jenis reklame harus diisi.',
|
||||||
|
'advertisement_type.string' => 'Jenis reklame harus berupa teks.',
|
||||||
|
'advertisement_content.required' => 'Isi reklame harus diisi.',
|
||||||
|
'advertisement_content.string' => 'Isi reklame harus berupa teks.',
|
||||||
|
'business_address.required' => 'Alamat usaha harus diisi.',
|
||||||
|
'business_address.string' => 'Alamat usaha harus berupa teks.',
|
||||||
|
'advertisement_location.required' => 'Lokasi reklame harus diisi.',
|
||||||
|
'advertisement_location.string' => 'Lokasi reklame harus berupa teks.',
|
||||||
|
'village_name.required' => 'Nama desa harus diisi.',
|
||||||
|
'district_name.required' => 'Nama kecamatan harus diisi.',
|
||||||
|
'length.required' => 'Panjang harus diisi.',
|
||||||
|
'width.required' => 'Lebar harus diisi.',
|
||||||
|
'viewing_angle.required' => 'Sudut pandang harus diisi.',
|
||||||
|
'viewing_angle.string' => 'Sudut pandang harus berupa teks.',
|
||||||
|
'face.required' => 'Jumlah sisi harus diisi.',
|
||||||
|
'face.string' => 'Jumlah sisi harus berupa teks.',
|
||||||
|
'area.required' => 'Luas harus diisi.',
|
||||||
|
'area.string' => 'Luas harus berupa teks.',
|
||||||
|
'angle.required' => 'Sudut harus diisi.',
|
||||||
|
'angle.string' => 'Sudut harus berupa teks.',
|
||||||
|
'contact.required' => 'Kontak harus diisi.',
|
||||||
|
'contact.string' => 'Kontak harus berupa teks.',
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
39
app/Http/Requests/BusinessIndustryRequest.php
Normal file
39
app/Http/Requests/BusinessIndustryRequest.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class BusinessIndustryRequest 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
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'nama_kecamatan' => 'required|string|max:255',
|
||||||
|
'nama_kelurahan' => 'required|string|max:255',
|
||||||
|
'nop' => 'required|string|max:255|unique:business_or_industries,nop,' . $this->route('api_business_industry'),
|
||||||
|
'nama_wajib_pajak' => 'required|string|max:255',
|
||||||
|
'alamat_wajib_pajak' => 'nullable|string|max:255',
|
||||||
|
'alamat_objek_pajak' => 'required|string|max:255',
|
||||||
|
'luas_bumi' => 'required|numeric',
|
||||||
|
'luas_bangunan' => 'required|numeric',
|
||||||
|
'njop_bumi' => 'required|numeric',
|
||||||
|
'njop_bangunan' => 'required|numeric',
|
||||||
|
'ketetapan' => 'required|string|max:255',
|
||||||
|
'tahun_pajak' => 'required|integer|min:1900|max:' . date('Y'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
33
app/Http/Requests/CustomersRequest.php
Normal file
33
app/Http/Requests/CustomersRequest.php
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class CustomersRequest 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
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'nomor_pelanggan' => ['required', 'string'],
|
||||||
|
'kota_pelayanan' => ['required', 'string'],
|
||||||
|
'nama' => ['required', 'string'],
|
||||||
|
'alamat' => ['required', 'string'],
|
||||||
|
'latitude' => ['required', 'numeric', 'between:-90,90'],
|
||||||
|
'longitude' => ['required', 'numeric', 'between:-180,180'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,7 +21,7 @@ class DataSettingRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$id = $this->route('data_setting');
|
$id = $this->route('data_setting_id');
|
||||||
return [
|
return [
|
||||||
"key" => "required|unique:data_settings,key," . $id,
|
"key" => "required|unique:data_settings,key," . $id,
|
||||||
"value" => "required",
|
"value" => "required",
|
||||||
|
|||||||
28
app/Http/Requests/ExcelUploadRequest.php
Normal file
28
app/Http/Requests/ExcelUploadRequest.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class ExcelUploadRequest 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
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"file" => "required|file|mimes:xlsx,xls|max:102400"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Requests;
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
class MenuRequest extends FormRequest
|
class MenuRequest extends FormRequest
|
||||||
{
|
{
|
||||||
@@ -21,12 +22,14 @@ class MenuRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
|
$menuId = $this->route('menu_id'); // Get the menu ID if updating
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'name' => ['required','string','max:255'],
|
'name' => ['required', 'string', 'max:255', Rule::unique('menus', 'name')->ignore($menuId)],
|
||||||
'url' => ['nullable','string','max:255'],
|
'url' => ['nullable', 'string', 'max:255'],
|
||||||
'icon' => ['nullable','string','max:255'],
|
'icon' => ['nullable', 'string', 'max:255'],
|
||||||
'parent_id' => ['nullable','exists:menus,id'],
|
'parent_id' => ['nullable', 'exists:menus,id'],
|
||||||
'sort_order' => ['required','integer'],
|
'sort_order' => ['required', 'integer'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class RoleRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$roleId = $this->route('role');
|
$roleId = $this->route('role_id');
|
||||||
return [
|
return [
|
||||||
'name' => 'required|string|max:255|unique:roles,name,' . ($roleId ?? 'NULL') . ',id',
|
'name' => 'required|string|max:255|unique:roles,name,' . ($roleId ?? 'NULL') . ',id',
|
||||||
'description' => 'nullable|string',
|
'description' => 'nullable|string',
|
||||||
|
|||||||
52
app/Http/Requests/SpatialPlanningRequest.php
Normal file
52
app/Http/Requests/SpatialPlanningRequest.php
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class SpatialPlanningRequest 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
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'string',
|
||||||
|
'kbli' => 'string',
|
||||||
|
'activities' => 'string',
|
||||||
|
'area' => 'string',
|
||||||
|
'location' => 'string',
|
||||||
|
'number' => 'string',
|
||||||
|
'date' => 'date_format:Y-m-d',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation messages for the defined validation rules.
|
||||||
|
*
|
||||||
|
* @return array<string, string>
|
||||||
|
*/
|
||||||
|
public function messages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name.string' => 'Kolom Nama harus berupa teks.',
|
||||||
|
'kbli.string' => 'Kolom KBLI harus berupa teks.',
|
||||||
|
'activities.string' => 'Kolom Kegiatan harus berupa teks.',
|
||||||
|
'area.string' => 'Kolom Area harus berupa teks.',
|
||||||
|
'location.string' => 'Kolom Lokasi harus berupa teks.',
|
||||||
|
'number.string' => 'Kolom Nomor harus berupa teks.',
|
||||||
|
'date.date_format' => 'Format tanggal tidak valid, gunakan format Y-m-d H:i:s.',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
35
app/Http/Requests/SpatialPlanningsRequest.php
Normal file
35
app/Http/Requests/SpatialPlanningsRequest.php
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class SpatialPlanningsRequest 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
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => ['required','string','max:255'],
|
||||||
|
'kbli' => ['required','string','max:255'],
|
||||||
|
'kegiatan' => ['required','string'],
|
||||||
|
'luas' => ['required','numeric','regex:/^\d{1,16}(\.\d{1,2})?$/'],
|
||||||
|
'lokasi' => ['required','string'],
|
||||||
|
'nomor' => ['required','string','max:255',Rule::unique('spatial_plannings')->ignore($this->id)],
|
||||||
|
'sp_date' => ['required','date'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
133
app/Http/Requests/TourismRequest.php
Normal file
133
app/Http/Requests/TourismRequest.php
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class TourismRequest 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
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'project_id' => 'required|string',
|
||||||
|
'project_type_id' => 'required|string',
|
||||||
|
'nib' => 'required|string',
|
||||||
|
'business_name' => 'required|string',
|
||||||
|
'oss_publication_date' => 'required',
|
||||||
|
'investment_status_description' => 'required|string',
|
||||||
|
'business_form' => 'required|string',
|
||||||
|
'project_risk' => 'required|string',
|
||||||
|
'project_name' => 'required|string',
|
||||||
|
'business_scale' => 'required|string',
|
||||||
|
'business_address' => 'required|string',
|
||||||
|
'district_name' => 'required',
|
||||||
|
'village_name' => 'required',
|
||||||
|
'longitude' => 'required|string',
|
||||||
|
'latitude' => 'required|string',
|
||||||
|
'project_submission_date' => 'required',
|
||||||
|
'kbli' => 'required|string',
|
||||||
|
'kbli_title' => 'required|string',
|
||||||
|
'supervisory_sector' => 'required|string',
|
||||||
|
'user_name' => 'required|string',
|
||||||
|
'email' => 'required|string',
|
||||||
|
'contact' => 'required|string',
|
||||||
|
'land_area_in_m2' => 'required|string',
|
||||||
|
'investment_amount' => 'required|string',
|
||||||
|
'tki' => 'required|string',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation messages for the defined validation rules.
|
||||||
|
*
|
||||||
|
* @return array<string, string>
|
||||||
|
*/
|
||||||
|
public function messages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'project_id.required' => 'ID proyek harus diisi.',
|
||||||
|
'project_id.string' => 'ID proyek harus berupa teks.',
|
||||||
|
|
||||||
|
'project_type_id.required' => 'ID tipe proyek harus diisi.',
|
||||||
|
'project_type_id.string' => 'ID tipe proyek harus berupa teks.',
|
||||||
|
|
||||||
|
'nib.required' => 'NIB harus diisi.',
|
||||||
|
'nib.string' => 'NIB harus berupa teks.',
|
||||||
|
|
||||||
|
'business_name.required' => 'Nama usaha harus diisi.',
|
||||||
|
'business_name.string' => 'Nama usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'oss_publication_date.required' => 'Tanggal publikasi OSS harus diisi.',
|
||||||
|
|
||||||
|
'investment_status_description.required' => 'Deskripsi status investasi harus diisi.',
|
||||||
|
'investment_status_description.string' => 'Deskripsi status investasi harus berupa teks.',
|
||||||
|
|
||||||
|
'business_form.required' => 'Bentuk usaha harus diisi.',
|
||||||
|
'business_form.string' => 'Bentuk usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'project_risk.required' => 'Risiko proyek harus diisi.',
|
||||||
|
'project_risk.string' => 'Risiko proyek harus berupa teks.',
|
||||||
|
|
||||||
|
'project_name.required' => 'Nama proyek harus diisi.',
|
||||||
|
'project_name.string' => 'Nama proyek harus berupa teks.',
|
||||||
|
|
||||||
|
'business_scale.required' => 'Skala usaha harus diisi.',
|
||||||
|
'business_scale.string' => 'Skala usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'business_address.required' => 'Alamat usaha harus diisi.',
|
||||||
|
'business_address.string' => 'Alamat usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'district_name.required' => 'Nama kecamatan harus diisi.',
|
||||||
|
|
||||||
|
'village_name.required' => 'Nama desa harus diisi.',
|
||||||
|
|
||||||
|
'longitude.required' => 'Garis bujur harus diisi.',
|
||||||
|
'longitude.string' => 'Garis bujur harus berupa teks.',
|
||||||
|
|
||||||
|
'latitude.required' => 'Garis lintang harus diisi.',
|
||||||
|
'latitude.string' => 'Garis lintang harus berupa teks.',
|
||||||
|
|
||||||
|
'project_submission_date.required' => 'Tanggal pengajuan proyek harus diisi.',
|
||||||
|
|
||||||
|
'kbli.required' => 'Kode KBLI harus diisi.',
|
||||||
|
'kbli.string' => 'Kode KBLI harus berupa teks.',
|
||||||
|
|
||||||
|
'kbli_title.required' => 'Judul KBLI harus diisi.',
|
||||||
|
'kbli_title.string' => 'Judul KBLI harus berupa teks.',
|
||||||
|
|
||||||
|
'supervisory_sector.required' => 'Sektor pengawasan harus diisi.',
|
||||||
|
'supervisory_sector.string' => 'Sektor pengawasan harus berupa teks.',
|
||||||
|
|
||||||
|
'user_name.required' => 'Nama pengguna harus diisi.',
|
||||||
|
'user_name.string' => 'Nama pengguna harus berupa teks.',
|
||||||
|
|
||||||
|
'email.required' => 'Email harus diisi.',
|
||||||
|
'email.string' => 'Email harus berupa teks.',
|
||||||
|
|
||||||
|
'contact.required' => 'Kontak harus diisi.',
|
||||||
|
'contact.string' => 'Kontak harus berupa teks.',
|
||||||
|
|
||||||
|
'land_area_in_m2.required' => 'Luas lahan dalam m² harus diisi.',
|
||||||
|
'land_area_in_m2.string' => 'Luas lahan dalam m² harus berupa teks.',
|
||||||
|
|
||||||
|
'investment_amount.required' => 'Jumlah investasi harus diisi.',
|
||||||
|
'investment_amount.string' => 'Jumlah investasi harus berupa teks.',
|
||||||
|
|
||||||
|
'tki.required' => 'Jumlah tenaga kerja Indonesia harus diisi.',
|
||||||
|
'tki.string' => 'Jumlah tenaga kerja Indonesia harus berupa teks.',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
106
app/Http/Requests/UmkmRequest.php
Normal file
106
app/Http/Requests/UmkmRequest.php
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class UmkmRequest 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
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'business_name' => 'required|string',
|
||||||
|
'business_address' => 'required|string',
|
||||||
|
'business_desc' => 'required|string',
|
||||||
|
'business_contact' => 'required|string',
|
||||||
|
'business_id_number' => 'string',
|
||||||
|
'business_scale_id' => 'required',
|
||||||
|
'owner_id' => 'required|string',
|
||||||
|
'owner_name' => 'required|string',
|
||||||
|
'owner_address' => 'required|string',
|
||||||
|
'owner_contact' => 'required|string',
|
||||||
|
'business_type' => 'required|string',
|
||||||
|
'business_form_id' => 'required|string',
|
||||||
|
'revenue' => 'required|numeric|between:0,999999999999999999.99',
|
||||||
|
'village_name' => 'required|string',
|
||||||
|
'district_name' => 'required',
|
||||||
|
'number_of_employee' => 'required',
|
||||||
|
'permit_status_id' => 'required',
|
||||||
|
'land_area' => 'required|integer|between:0,99999999999',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation messages for the request.
|
||||||
|
*
|
||||||
|
* @return array<string, string>
|
||||||
|
*/
|
||||||
|
public function messages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'business_name.required' => 'Nama usaha wajib diisi.',
|
||||||
|
'business_name.string' => 'Nama usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'business_address.required' => 'Alamat usaha wajib diisi.',
|
||||||
|
'business_address.string' => 'Alamat usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'business_desc.required' => 'Deskripsi usaha wajib diisi.',
|
||||||
|
'business_desc.string' => 'Deskripsi usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'business_contact.required' => 'Kontak usaha wajib diisi.',
|
||||||
|
'business_contact.string' => 'Kontak usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'business_id_number.string' => 'Nomor ID usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'business_scale_id.required' => 'Skala usaha wajib diisi.',
|
||||||
|
|
||||||
|
'owner_id.required' => 'ID pemilik wajib diisi.',
|
||||||
|
'owner_id.string' => 'ID pemilik harus berupa teks.',
|
||||||
|
|
||||||
|
'owner_name.required' => 'Nama pemilik wajib diisi.',
|
||||||
|
'owner_name.string' => 'Nama pemilik harus berupa teks.',
|
||||||
|
|
||||||
|
'owner_address.required' => 'Alamat pemilik wajib diisi.',
|
||||||
|
'owner_address.string' => 'Alamat pemilik harus berupa teks.',
|
||||||
|
|
||||||
|
'owner_contact.required' => 'Kontak pemilik wajib diisi.',
|
||||||
|
'owner_contact.string' => 'Kontak pemilik harus berupa teks.',
|
||||||
|
|
||||||
|
'business_type.required' => 'Jenis usaha wajib diisi.',
|
||||||
|
'business_type.string' => 'Jenis usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'business_form.required' => 'Bentuk usaha wajib diisi.',
|
||||||
|
'business_form.string' => 'Bentuk usaha harus berupa teks.',
|
||||||
|
|
||||||
|
'revenue.required' => 'Omset wajib diisi.',
|
||||||
|
'revenue.numeric' => 'Omset harus berupa angka yang valid.',
|
||||||
|
'revenue.between' => 'Omset harus berada di antara 0 dan 9.999.999.999,99.',
|
||||||
|
|
||||||
|
'village_name.required' => 'Nama desa wajib diisi.',
|
||||||
|
'village_name.string' => 'Nama desa harus berupa teks.',
|
||||||
|
|
||||||
|
'district_name.required' => 'Nama distrik wajib diisi.',
|
||||||
|
|
||||||
|
'number_of_employee.required' => 'Jumlah karyawan wajib diisi.',
|
||||||
|
|
||||||
|
'permit_status_id.required' => 'Status izin wajib diisi.',
|
||||||
|
|
||||||
|
'land_area.required' => 'Luas lahan wajib diisi.',
|
||||||
|
'land_area.integer' => 'Luas lahan harus berupa angka bulat.',
|
||||||
|
'land_area.between' => 'Luas lahan harus berada di antara 0 dan 99.999.999.999.',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
43
app/Http/Requests/UsersRequest.php
Normal file
43
app/Http/Requests/UsersRequest.php
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class UsersRequest 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
|
||||||
|
{
|
||||||
|
$userId = $this->route('users'); // Get user ID from route (used in update)
|
||||||
|
|
||||||
|
return [
|
||||||
|
'name' => ['required', 'string', 'max:255'],
|
||||||
|
'email' => [
|
||||||
|
'required',
|
||||||
|
'string',
|
||||||
|
'email',
|
||||||
|
'max:255',
|
||||||
|
Rule::unique('users')->ignore($userId)
|
||||||
|
],
|
||||||
|
'password' => [$this->isMethod('post') ? 'required' : 'nullable', 'confirmed', 'max:255'],
|
||||||
|
'firstname' => ['required', 'string', 'max:255'],
|
||||||
|
'lastname' => ['required', 'string', 'max:255'],
|
||||||
|
'position' => ['required', 'string', 'max:255'],
|
||||||
|
'role_id' => ['required', 'exists:roles,id'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
19
app/Http/Resources/CustomersResource.php
Normal file
19
app/Http/Resources/CustomersResource.php
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class CustomersResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return parent::toArray($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
19
app/Http/Resources/MenuResource.php
Normal file
19
app/Http/Resources/MenuResource.php
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class MenuResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return parent::toArray($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
19
app/Http/Resources/SpatialPlanningResource.php
Normal file
19
app/Http/Resources/SpatialPlanningResource.php
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class SpatialPlanningResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return parent::toArray($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
19
app/Http/Resources/SpatialPlanningsResource.php
Normal file
19
app/Http/Resources/SpatialPlanningsResource.php
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class SpatialPlanningsResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return parent::toArray($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
19
app/Http/Resources/TourismResource.php
Normal file
19
app/Http/Resources/TourismResource.php
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class TourismResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return parent::toArray($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
19
app/Http/Resources/UmkmResource.php
Normal file
19
app/Http/Resources/UmkmResource.php
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class UmkmResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return parent::toArray($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,7 +47,7 @@ class AdvertisementImport implements ToCollection
|
|||||||
$districtCode = $districts[$districtName] ?? null;
|
$districtCode = $districts[$districtName] ?? null;
|
||||||
|
|
||||||
$listTrueVillage = DB::table('villages')
|
$listTrueVillage = DB::table('villages')
|
||||||
->where('district_code', $districtCode) // Perbaikan pada where()
|
->where('district_code', $districtCode)
|
||||||
->get()
|
->get()
|
||||||
->mapWithKeys(function ($item) {
|
->mapWithKeys(function ($item) {
|
||||||
return [strtolower(trim($item->village_name)) => [
|
return [strtolower(trim($item->village_name)) => [
|
||||||
|
|||||||
39
app/Imports/BusinessIndustriesImport.php
Normal file
39
app/Imports/BusinessIndustriesImport.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Imports;
|
||||||
|
|
||||||
|
use App\Models\BusinessOrIndustry;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToModel;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
|
class BusinessIndustriesImport implements ToCollection
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param array $row
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model|null
|
||||||
|
*/
|
||||||
|
public function collection(Collection $rows)
|
||||||
|
{
|
||||||
|
foreach ($rows->skip(1) as $row){
|
||||||
|
$clean_nop = preg_replace('/[^A-Za-z0-9]/', '', $row[2]);
|
||||||
|
if (!BusinessOrIndustry::where('nop', $clean_nop)->exists()) {
|
||||||
|
BusinessOrIndustry::create([
|
||||||
|
'nama_kecamatan' => $row[0],
|
||||||
|
'nama_kelurahan' => $row[1],
|
||||||
|
'nop' => $clean_nop, // Store cleaned 'nop'
|
||||||
|
'nama_wajib_pajak' => $row[3],
|
||||||
|
'alamat_wajib_pajak' => $row[4],
|
||||||
|
'alamat_objek_pajak' => $row[5],
|
||||||
|
'luas_bumi' => $row[6],
|
||||||
|
'luas_bangunan' => $row[7],
|
||||||
|
'njop_bumi' => $row[8],
|
||||||
|
'njop_bangunan' => $row[9],
|
||||||
|
'ketetapan' => $row[10],
|
||||||
|
'tahun_pajak' => $row[11],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
52
app/Imports/CustomersImport.php
Normal file
52
app/Imports/CustomersImport.php
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Imports;
|
||||||
|
|
||||||
|
use App\Models\Customer;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithLimit;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithChunkReading;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithBatchInserts;
|
||||||
|
|
||||||
|
class CustomersImport implements ToCollection, WithMultipleSheets
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Collection $collection
|
||||||
|
*/
|
||||||
|
public function collection(Collection $collection)
|
||||||
|
{
|
||||||
|
$batchData = [];
|
||||||
|
|
||||||
|
foreach ($collection->skip(1) as $row) {
|
||||||
|
if (!isset($row[0]) || empty($row[0])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$latitude = filter_var($row[4], FILTER_VALIDATE_FLOAT) ? bcadd($row[4], '0', 18) : null;
|
||||||
|
$longitude = filter_var($row[5], FILTER_VALIDATE_FLOAT) ? bcadd($row[5], '0', 18) : null;
|
||||||
|
|
||||||
|
$batchData[] = [
|
||||||
|
'nomor_pelanggan' => $row[0],
|
||||||
|
'kota_pelayanan' => $row[1],
|
||||||
|
'nama' => $row[2],
|
||||||
|
'alamat' => $row[3],
|
||||||
|
'latitude' => $latitude,
|
||||||
|
'longitude' => $longitude,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($batchData)) {
|
||||||
|
Customer::upsert($batchData, ['nomor_pelanggan'], ['kota_pelayanan', 'nama', 'alamat', 'latitude', 'longitude']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sheets(): array {
|
||||||
|
return [
|
||||||
|
0 => $this
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
63
app/Imports/SpatialPlanningImport.php
Normal file
63
app/Imports/SpatialPlanningImport.php
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Imports;
|
||||||
|
|
||||||
|
use App\Models\SpatialPlanning;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use DateTime;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class SpatialPlanningImport implements ToCollection
|
||||||
|
{
|
||||||
|
protected static $processed = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process each row in the file
|
||||||
|
*/
|
||||||
|
public function collection(Collection $rows)
|
||||||
|
{
|
||||||
|
if (self::$processed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self::$processed = true;
|
||||||
|
|
||||||
|
if ($rows->isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//cari header secara otomatis
|
||||||
|
$header = $rows->first();
|
||||||
|
$headerIndex = collect($header)->search(fn($value) => !empty($value));
|
||||||
|
|
||||||
|
// Pastikan header ditemukan
|
||||||
|
if ($headerIndex === false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($rows->skip(1) as $row) {
|
||||||
|
$dateValue = trim($row[7]);
|
||||||
|
info($dateValue);
|
||||||
|
$parsedDate = Carbon::createFromFormat('Y-m-d', $dateValue)->format('Y-m-d');
|
||||||
|
info($parsedDate);
|
||||||
|
|
||||||
|
$dataToInsert[] = [
|
||||||
|
'name'=>$row[1],
|
||||||
|
'kbli'=>$row[2],
|
||||||
|
'activities'=>$row[3],
|
||||||
|
'area'=>$row[4],
|
||||||
|
'location'=>$row[5],
|
||||||
|
'number'=>$row[6],
|
||||||
|
'date'=>$parsedDate,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($dataToInsert)) {
|
||||||
|
SpatialPlanning::insert($dataToInsert);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
113
app/Imports/TourismImport.php
Normal file
113
app/Imports/TourismImport.php
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Imports;
|
||||||
|
|
||||||
|
use App\Models\Tourism;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use DateTime;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class TourismImport implements ToCollection
|
||||||
|
{
|
||||||
|
protected static $processed = false;
|
||||||
|
/**
|
||||||
|
* Process each row in the file.
|
||||||
|
*/
|
||||||
|
public function collection(Collection $rows)
|
||||||
|
{
|
||||||
|
if (self::$processed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self::$processed = true;
|
||||||
|
|
||||||
|
if ($rows->isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ambil data districts dengan normalisasi nama
|
||||||
|
$districts = DB::table('districts')
|
||||||
|
->get()
|
||||||
|
->mapWithKeys(function ($item) {
|
||||||
|
return [strtolower(trim($item->district_name)) => $item->district_code];
|
||||||
|
})
|
||||||
|
->toArray();
|
||||||
|
// Cari header secara otomatis
|
||||||
|
$header = $rows->first();
|
||||||
|
$headerIndex = collect($header)->search(fn($value) => !empty($value));
|
||||||
|
|
||||||
|
// Pastikan header ditemukan
|
||||||
|
if ($headerIndex === false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($rows->skip(1) as $row) {
|
||||||
|
// Normalisasi nama kecamatan dan desa
|
||||||
|
$districtName = strtolower(trim(str_replace('Kecamatan', '', $row[12])));
|
||||||
|
$villageName = strtolower(trim($row[13]));
|
||||||
|
|
||||||
|
// Cari distric_code dari table districts
|
||||||
|
$districtCode = $districts[$districtName] ?? null;
|
||||||
|
|
||||||
|
$listTrueVillage = DB::table('villages')
|
||||||
|
->where('district_code', $districtCode)
|
||||||
|
->get()
|
||||||
|
->mapWithKeys(function ($item) {
|
||||||
|
return [strtolower(trim($item->village_name)) => [
|
||||||
|
'village_code' => $item->village_code,
|
||||||
|
'district_code' => $item->district_code
|
||||||
|
]];
|
||||||
|
})
|
||||||
|
->toArray();
|
||||||
|
|
||||||
|
// ambill village code yang village_name sama dengan $villageName
|
||||||
|
$villageCode = $listTrueVillage[$villageName]['village_code'] ?? '000000';
|
||||||
|
|
||||||
|
$excelSerialDate = $row[16];
|
||||||
|
if (is_numeric($excelSerialDate)) {
|
||||||
|
$projectSubmissionDate = Carbon::createFromFormat('Y-m-d', '1899-12-30')
|
||||||
|
->addDays($excelSerialDate)
|
||||||
|
->format('Y-m-d H:i:s');
|
||||||
|
} else {
|
||||||
|
$projectSubmissionDate = Carbon::createFromFormat('m/d/Y', $excelSerialDate)
|
||||||
|
->format('Y-m-d H:i:s');
|
||||||
|
}
|
||||||
|
|
||||||
|
$dataToInsert[] = [
|
||||||
|
'project_id' => $row[1],
|
||||||
|
'project_type_id' => $row[2],
|
||||||
|
'nib' => $row[3],
|
||||||
|
'business_name' => $row[4],
|
||||||
|
'oss_publication_date' => DateTime::createFromFormat('d/m/Y', $row[5]),
|
||||||
|
'investment_status_description' => $row[6],
|
||||||
|
'business_form' => $row[7],
|
||||||
|
'project_risk' => $row[8],
|
||||||
|
'project_name' => $row[9],
|
||||||
|
'business_scale' => $row[10],
|
||||||
|
'business_address' => $row[12],
|
||||||
|
'district_code' => $districtCode,
|
||||||
|
'village_code' => $villageCode,
|
||||||
|
'longitude' => $row[14],
|
||||||
|
'latitude' => (string) $row[15],
|
||||||
|
'project_submission_date' => $projectSubmissionDate,
|
||||||
|
'kbli'=> $row[17],
|
||||||
|
'kbli_title'=>$row[18],
|
||||||
|
'supervisory_sector'=>$row[19],
|
||||||
|
'user_name'=>$row[20],
|
||||||
|
'email'=>$row[21],
|
||||||
|
'contact'=>$row[22],
|
||||||
|
'land_area_in_m2'=>$row[23],
|
||||||
|
'investment_amount'=>$row[24],
|
||||||
|
'tki'=>$row[25]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($dataToInsert)) {
|
||||||
|
Tourism::insert($dataToInsert);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
98
app/Imports/UmkmImport.php
Normal file
98
app/Imports/UmkmImport.php
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Imports;
|
||||||
|
|
||||||
|
use App\Models\Umkm;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class UmkmImport implements ToCollection
|
||||||
|
{
|
||||||
|
|
||||||
|
protected static $processed = false;
|
||||||
|
/**
|
||||||
|
* Process each row in the file.
|
||||||
|
*/
|
||||||
|
public function collection(Collection $rows)
|
||||||
|
{
|
||||||
|
if (self::$processed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self::$processed = true;
|
||||||
|
|
||||||
|
if ($rows->isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ambil data districts dengan normalisasi nama
|
||||||
|
$districts = DB::table('districts')
|
||||||
|
->get()
|
||||||
|
->mapWithKeys(function ($item) {
|
||||||
|
return [strtolower(trim($item->district_name)) => $item->district_code];
|
||||||
|
})
|
||||||
|
->toArray();
|
||||||
|
// Cari header secara otomatis
|
||||||
|
$header = $rows->first();
|
||||||
|
$headerIndex = collect($header)->search(fn($value) => !empty($value));
|
||||||
|
|
||||||
|
// Pastikan header ditemukan
|
||||||
|
if ($headerIndex === false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
info($rows);
|
||||||
|
|
||||||
|
foreach ($rows->skip(1) as $row) {
|
||||||
|
// Normalisasi nama kecamatan dan desa
|
||||||
|
$districtName = strtolower(trim(str_replace('Kecamatan', '', $row[14])));
|
||||||
|
$villageName = strtolower(trim($row[13]));
|
||||||
|
|
||||||
|
// Cari distric_code dari table districts
|
||||||
|
$districtCode = $districts[$districtName] ?? null;
|
||||||
|
|
||||||
|
$listTrueVillage = DB::table('villages')
|
||||||
|
->where('district_code', $districtCode)
|
||||||
|
->get()
|
||||||
|
->mapWithKeys(function ($item) {
|
||||||
|
return [strtolower(trim($item->village_name)) => [
|
||||||
|
'village_code' => $item->village_code,
|
||||||
|
'district_code' => $item->district_code
|
||||||
|
]];
|
||||||
|
})
|
||||||
|
->toArray();
|
||||||
|
|
||||||
|
// ambil village code yang village_name sama dengan $villageName
|
||||||
|
$villageCode = $listTrueVillage[$villageName]['village_code'] ?? '0000';
|
||||||
|
|
||||||
|
$dataToInsert[] = [
|
||||||
|
'business_name' => $row[0],
|
||||||
|
'business_address' => $row[1],
|
||||||
|
'business_desc' => $row[2],
|
||||||
|
'business_contact' => $row[3],
|
||||||
|
'business_id_number' => $row[4],
|
||||||
|
'business_scale_id' => $row[5],
|
||||||
|
'owner_id' => $row[6],
|
||||||
|
'owner_name' => $row[7],
|
||||||
|
'owner_address' => $row[8],
|
||||||
|
'owner_contact' => $row[9],
|
||||||
|
'business_type' => $row[10],
|
||||||
|
'business_form_id' => $row[11],
|
||||||
|
'revenue' => $row[12],
|
||||||
|
'village_code' => $villageCode,
|
||||||
|
'district_code' => $districtCode,
|
||||||
|
'number_of_employee' => $row[15],
|
||||||
|
'land_area' => $row[16],
|
||||||
|
'permit_status_id' => $row[17],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
info($dataToInsert);
|
||||||
|
if (!empty($dataToInsert)) {
|
||||||
|
Umkm::insert($dataToInsert);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
app/Models/BusinessOrIndustry.php
Normal file
24
app/Models/BusinessOrIndustry.php
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class BusinessOrIndustry extends Model
|
||||||
|
{
|
||||||
|
protected $table = "business_or_industries";
|
||||||
|
protected $fillable = [
|
||||||
|
'nama_kecamatan',
|
||||||
|
'nama_kelurahan',
|
||||||
|
'nop',
|
||||||
|
'nama_wajib_pajak',
|
||||||
|
'alamat_wajib_pajak',
|
||||||
|
'alamat_objek_pajak',
|
||||||
|
'luas_bumi',
|
||||||
|
'luas_bangunan',
|
||||||
|
'njop_bumi',
|
||||||
|
'njop_bangunan',
|
||||||
|
'ketetapan',
|
||||||
|
'tahun_pajak',
|
||||||
|
];
|
||||||
|
}
|
||||||
20
app/Models/Customer.php
Normal file
20
app/Models/Customer.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Customer extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'customers';
|
||||||
|
protected $fillable = [
|
||||||
|
'nomor_pelanggan',
|
||||||
|
'kota_pelayanan',
|
||||||
|
'nama',
|
||||||
|
'alamat',
|
||||||
|
'latitude',
|
||||||
|
'longitude',
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
37
app/Models/SpatialPlanning.php
Normal file
37
app/Models/SpatialPlanning.php
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class SpatialPlanning
|
||||||
|
*
|
||||||
|
* @property $id
|
||||||
|
* @property $created_at
|
||||||
|
* @property $updated_at
|
||||||
|
* @property $name
|
||||||
|
* @property $kbli
|
||||||
|
* @property $activities
|
||||||
|
* @property $area
|
||||||
|
* @property $location
|
||||||
|
* @property $number
|
||||||
|
* @property $date
|
||||||
|
*
|
||||||
|
* @package App
|
||||||
|
* @mixin \Illuminate\Database\Eloquent\Builder
|
||||||
|
*/
|
||||||
|
class SpatialPlanning extends Model
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $perPage = 20;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that are mass assignable.
|
||||||
|
*
|
||||||
|
* @var array<int, string>
|
||||||
|
*/
|
||||||
|
protected $fillable = ['name', 'kbli', 'activities', 'area', 'location', 'number', 'date'];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
55
app/Models/Tourism.php
Normal file
55
app/Models/Tourism.php
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Tourism
|
||||||
|
*
|
||||||
|
* @property $id
|
||||||
|
* @property $created_at
|
||||||
|
* @property $updated_at
|
||||||
|
* @property $project_id
|
||||||
|
* @property $project_type_id
|
||||||
|
* @property $nib
|
||||||
|
* @property $business_name
|
||||||
|
* @property $oss_publication_date
|
||||||
|
* @property $investment_status_description
|
||||||
|
* @property $business_form
|
||||||
|
* @property $project_risk
|
||||||
|
* @property $project_name
|
||||||
|
* @property $business_scale
|
||||||
|
* @property $business_address
|
||||||
|
* @property $district_code
|
||||||
|
* @property $village_code
|
||||||
|
* @property $longitude
|
||||||
|
* @property $latitude
|
||||||
|
* @property $project_submission_date
|
||||||
|
* @property $kbli
|
||||||
|
* @property $kbli_title
|
||||||
|
* @property $supervisory_sector
|
||||||
|
* @property $user_name
|
||||||
|
* @property $email
|
||||||
|
* @property $contact
|
||||||
|
* @property $land_area_in_m2
|
||||||
|
* @property $investment_amount
|
||||||
|
* @property $tki
|
||||||
|
*
|
||||||
|
* @package App
|
||||||
|
* @mixin \Illuminate\Database\Eloquent\Builder
|
||||||
|
*/
|
||||||
|
class Tourism extends Model
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $perPage = 20;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that are mass assignable.
|
||||||
|
*
|
||||||
|
* @var array<int, string>
|
||||||
|
*/
|
||||||
|
protected $fillable = ['project_id', 'project_type_id', 'nib', 'business_name', 'oss_publication_date', 'investment_status_description', 'business_form', 'project_risk', 'project_name', 'business_scale', 'business_address', 'district_code', 'village_code', 'longitude', 'latitude', 'project_submission_date', 'kbli', 'kbli_title', 'supervisory_sector', 'user_name', 'email', 'contact', 'land_area_in_m2', 'investment_amount', 'tki'];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
14
app/Models/TourismBasedKBLI.php
Normal file
14
app/Models/TourismBasedKBLI.php
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class TourismBasedKBLI extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'v_tourisms_based_kbli';
|
||||||
|
protected $primaryKey = null;
|
||||||
|
|
||||||
|
public $timestamps = false;
|
||||||
|
protected $fillable = ['kbli_title', 'total_records'];
|
||||||
|
}
|
||||||
48
app/Models/Umkm.php
Normal file
48
app/Models/Umkm.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Umkm
|
||||||
|
*
|
||||||
|
* @property $id
|
||||||
|
* @property $created_at
|
||||||
|
* @property $updated_at
|
||||||
|
* @property $business_name
|
||||||
|
* @property $business_address
|
||||||
|
* @property $business_desc
|
||||||
|
* @property $business_contact
|
||||||
|
* @property $business_id_number
|
||||||
|
* @property $business_scale_id
|
||||||
|
* @property $owner_id
|
||||||
|
* @property $owner_name
|
||||||
|
* @property $owner_address
|
||||||
|
* @property $owner_contact
|
||||||
|
* @property $business_type
|
||||||
|
* @property $business_form_id
|
||||||
|
* @property $revenue
|
||||||
|
* @property $village_code
|
||||||
|
* @property $distric_code
|
||||||
|
* @property $number_of_employee
|
||||||
|
* @property $land_area
|
||||||
|
* @property $permit_status_id
|
||||||
|
*
|
||||||
|
* @package App
|
||||||
|
* @mixin \Illuminate\Database\Eloquent\Builder
|
||||||
|
*/
|
||||||
|
class Umkm extends Model
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $perPage = 20;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that are mass assignable.
|
||||||
|
*
|
||||||
|
* @var array<int, string>
|
||||||
|
*/
|
||||||
|
protected $fillable = ['business_name', 'business_address', 'business_desc', 'business_contact', 'business_id_number', 'business_scale_id', 'owner_id', 'owner_name', 'owner_address', 'owner_contact', 'business_type', 'business_form_id', 'revenue', 'village_code', 'district_code', 'number_of_employee', 'land_area', 'permit_status_id'];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
157
app/Services/OpenAIService.php
Normal file
157
app/Services/OpenAIService.php
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use OpenAI;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
|
class OpenAIService
|
||||||
|
{
|
||||||
|
protected $client;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->client = OpenAI::client(env('OPENAI_API_KEY'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateGeneralText($prompt, $mainContent)
|
||||||
|
{
|
||||||
|
$response = $this->client->chat()->create([
|
||||||
|
'model' => 'gpt-4o-mini',
|
||||||
|
'messages' => [
|
||||||
|
[
|
||||||
|
'role' => 'system',
|
||||||
|
'content' => "You are an expert assistant. Your task is to generate a concise response based on the provided prompt and main content.
|
||||||
|
|
||||||
|
Guidelines:
|
||||||
|
- Summarize the key points in exactly 5 bullet points.
|
||||||
|
- Ensure the response is clear and relevant to the prompt.
|
||||||
|
- Use simple and professional language."
|
||||||
|
],
|
||||||
|
['role' => 'user', 'content' => "Prompt: $prompt \nMain Content: $mainContent"],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
return trim($response['choices'][0]['message']['content'] ?? 'No response');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateClassifyMainContent($prompt, $mainContent)
|
||||||
|
{
|
||||||
|
$response = $this->client->chat()->create([
|
||||||
|
'model' => 'gpt-4o-mini',
|
||||||
|
'messages' => [
|
||||||
|
[
|
||||||
|
'role' => 'system',
|
||||||
|
'content' => "You are an expert assistant in classifying questions based on whether their answers must be retrieved from a database or can be explained generally.
|
||||||
|
Your task is to return one of the following two labels:
|
||||||
|
- \"DATABASE\" → If the question requires specific data that can only be obtained from a database.
|
||||||
|
- \"GENERAL\" → If the question can be answered without accessing a database.
|
||||||
|
|
||||||
|
Consider the following context: \"$mainContent\"
|
||||||
|
|
||||||
|
Respond with only one of the labels: \"DATABASE\" or \"GENERAL\"."
|
||||||
|
],
|
||||||
|
['role' => 'user', 'content' => $prompt],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
return trim($response['choices'][0]['message']['content'] ?? 'No response');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateQueryBasedMainContent($prompt, $mainContent)
|
||||||
|
{
|
||||||
|
// Load file JSON
|
||||||
|
$jsonPath = public_path('templates/contentTemplatePrompt.json'); // Sesuaikan path
|
||||||
|
$jsonData = json_decode(file_get_contents($jsonPath), true);
|
||||||
|
|
||||||
|
// Periksa apakah kategori ada dalam JSON
|
||||||
|
if (!isset($jsonData[$mainContent])) {
|
||||||
|
return "Template prompt tidak ditemukan.";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ambil template berdasarkan kategori
|
||||||
|
$promptTemplate = $jsonData[$mainContent]['prompt'];
|
||||||
|
|
||||||
|
$response = $this->client->chat()->create([
|
||||||
|
'model' => 'gpt-4o-mini',
|
||||||
|
'messages' => [
|
||||||
|
['role' => 'system', 'content' => $promptTemplate],
|
||||||
|
['role' => 'user', 'content' => $prompt],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
return trim($response['choices'][0]['message']['content'] ?? 'No response');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function validateSyntaxQuery($queryResponse)
|
||||||
|
{
|
||||||
|
$response = $this->client->chat()->create([
|
||||||
|
'model' => 'gpt-4o-mini',
|
||||||
|
'messages' => [
|
||||||
|
[
|
||||||
|
'role' => 'system',
|
||||||
|
'content' => "You are a MariaDB SQL expert. Your task is to validate the syntax of an SQL query to ensure it follows proper MariaDB syntax rules.
|
||||||
|
|
||||||
|
Guidelines:
|
||||||
|
- Check for any syntax errors, missing keywords, or incorrect clause usage.
|
||||||
|
- Ensure the query is well-structured and adheres to best practices.
|
||||||
|
- Verify that all SQL keywords are used correctly and in the right order.
|
||||||
|
- If the query is valid, respond with: \"VALID\".
|
||||||
|
- If the query has issues, respond with: \"INVALID\".
|
||||||
|
|
||||||
|
Always respond with either \"VALID\" or \"INVALID\"."
|
||||||
|
],
|
||||||
|
['role' => 'user', 'content' => $queryResponse],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
return trim($response['choices'][0]['message']['content'] ?? 'No response');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateNLPFromQuery($inputUser, $resultQuery) {
|
||||||
|
$response = $this->client->chat()->create([
|
||||||
|
'model' => 'gpt-4o-mini',
|
||||||
|
'messages' => [
|
||||||
|
[
|
||||||
|
'role' => 'system',
|
||||||
|
'content' => "You are an expert assistant. Your task is to analyze the database query results and transform them into a human-readable answer based on the user's question.
|
||||||
|
|
||||||
|
Guidelines:
|
||||||
|
- Understand the user's question and extract the key intent.
|
||||||
|
- Summarize or format the query results to directly answer the user's question.
|
||||||
|
- Ensure the response is clear, concise, and relevant.
|
||||||
|
- If the query result is empty or does not match the question, provide a polite response indicating that no data is available.
|
||||||
|
|
||||||
|
Always provide a well-structured response that makes sense based on the input question."
|
||||||
|
],
|
||||||
|
['role' => 'user', 'content' => "User's question: $inputUser \nDatabase result: $resultQuery"],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
return trim($response['choices'][0]['message']['content'] ?? 'No response');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateFinalText($nlpResult) {
|
||||||
|
$response = $this->client->chat()->create([
|
||||||
|
'model' => 'gpt-4o-mini',
|
||||||
|
'messages' => [
|
||||||
|
[
|
||||||
|
'role' => 'system',
|
||||||
|
'content' => "You are an expert text formatter. Your task is to take the given NLP result and format it into a structured, human-readable text suitable for rendering inside an HTML <div>.
|
||||||
|
|
||||||
|
Guidelines:
|
||||||
|
- Preserve the meaning and clarity of the content.
|
||||||
|
- Use proper line breaks for readability.
|
||||||
|
- If the text contains lists, convert them into bullet points.
|
||||||
|
- Emphasize important keywords using <strong> tags if necessary.
|
||||||
|
- Ensure the response remains clean and concise without extra explanations."
|
||||||
|
],
|
||||||
|
['role' => 'user', 'content' => "Here is the NLP result that needs formatting:\n\n$nlpResult"],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
return trim($response['choices'][0]['message']['content'] ?? 'No response');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -61,9 +61,15 @@ class ServiceSIMBG
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function syncIndexIntegration($uuid, $token)
|
public function syncIndexIntegration($uuids, $token)
|
||||||
{
|
{
|
||||||
try{
|
try{
|
||||||
|
if(empty($uuids)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$integrations = [];
|
||||||
|
foreach($uuids as $uuid){
|
||||||
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/indeks-terintegrasi/";
|
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/indeks-terintegrasi/";
|
||||||
|
|
||||||
$headers = [
|
$headers = [
|
||||||
@@ -84,9 +90,8 @@ class ServiceSIMBG
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$resultData = PbgTaskIndexIntegrations::updateOrCreate(
|
$integrations[] = [
|
||||||
['pbg_task_uid' => $uuid],
|
'pbg_task_uid' => $uuid,
|
||||||
[
|
|
||||||
'indeks_fungsi_bangunan' => $data['indeks_fungsi_bangunan'] ?? null,
|
'indeks_fungsi_bangunan' => $data['indeks_fungsi_bangunan'] ?? null,
|
||||||
'indeks_parameter_kompleksitas' => $data['indeks_parameter_kompleksitas'] ?? null,
|
'indeks_parameter_kompleksitas' => $data['indeks_parameter_kompleksitas'] ?? null,
|
||||||
'indeks_parameter_permanensi' => $data['indeks_parameter_permanensi'] ?? null,
|
'indeks_parameter_permanensi' => $data['indeks_parameter_permanensi'] ?? null,
|
||||||
@@ -94,8 +99,24 @@ class ServiceSIMBG
|
|||||||
'faktor_kepemilikan' => $data['faktor_kepemilikan'] ?? null,
|
'faktor_kepemilikan' => $data['faktor_kepemilikan'] ?? null,
|
||||||
'indeks_terintegrasi' => $data['indeks_terintegrasi'] ?? null,
|
'indeks_terintegrasi' => $data['indeks_terintegrasi'] ?? null,
|
||||||
'total' => $data['total'] ?? null,
|
'total' => $data['total'] ?? null,
|
||||||
]
|
];
|
||||||
);
|
}
|
||||||
|
|
||||||
|
PbgTaskIndexIntegrations::upsert($integrations, ['pbg_task_uid'], ['indeks_fungsi_bangunan',
|
||||||
|
'indeks_parameter_kompleksitas', 'indeks_parameter_permanensi', 'indeks_parameter_ketinggian', 'faktor_kepemilikan', 'indeks_terintegrasi', 'total']);
|
||||||
|
|
||||||
|
// $resultData = PbgTaskIndexIntegrations::updateOrCreate(
|
||||||
|
// ['pbg_task_uid' => $uuid],
|
||||||
|
// [
|
||||||
|
// 'indeks_fungsi_bangunan' => $data['indeks_fungsi_bangunan'] ?? null,
|
||||||
|
// 'indeks_parameter_kompleksitas' => $data['indeks_parameter_kompleksitas'] ?? null,
|
||||||
|
// 'indeks_parameter_permanensi' => $data['indeks_parameter_permanensi'] ?? null,
|
||||||
|
// 'indeks_parameter_ketinggian' => $data['indeks_parameter_ketinggian'] ?? null,
|
||||||
|
// 'faktor_kepemilikan' => $data['faktor_kepemilikan'] ?? null,
|
||||||
|
// 'indeks_terintegrasi' => $data['indeks_terintegrasi'] ?? null,
|
||||||
|
// 'total' => $data['total'] ?? null,
|
||||||
|
// ]
|
||||||
|
// );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}catch (Exception $e){
|
}catch (Exception $e){
|
||||||
@@ -190,7 +211,7 @@ class ServiceSIMBG
|
|||||||
'created_at' => now(),
|
'created_at' => now(),
|
||||||
];
|
];
|
||||||
|
|
||||||
$this->syncIndexIntegration($item['uid'], $token);
|
// $this->syncIndexIntegration($item['uid'], $token);
|
||||||
|
|
||||||
$this->syncTaskDetailSubmit($item['uid'], $token);
|
$this->syncTaskDetailSubmit($item['uid'], $token);
|
||||||
|
|
||||||
@@ -215,6 +236,9 @@ class ServiceSIMBG
|
|||||||
'slf_status', 'slf_status_name', 'function_type', 'consultation_type', 'due_date',
|
'slf_status', 'slf_status_name', 'function_type', 'consultation_type', 'due_date',
|
||||||
'land_certificate_phase', 'task_created_at', 'updated_at'
|
'land_certificate_phase', 'task_created_at', 'updated_at'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$uuids = array_column($tasksCollective, 'uuid');
|
||||||
|
$this->syncIndexIntegration($uuids, $token);
|
||||||
}
|
}
|
||||||
|
|
||||||
$importDatasource->update([
|
$importDatasource->update([
|
||||||
@@ -312,4 +336,3 @@ class ServiceSIMBG
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
26
app/View/Components/CustomCircle.php
Normal file
26
app/View/Components/CustomCircle.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\View\Components;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Contracts\View\View;
|
||||||
|
use Illuminate\View\Component;
|
||||||
|
|
||||||
|
class CustomCircle extends Component
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a new component instance.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the view / contents that represent the component.
|
||||||
|
*/
|
||||||
|
public function render(): View|Closure|string
|
||||||
|
{
|
||||||
|
return view('components.custom-circle');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,11 +15,11 @@
|
|||||||
"laravel/framework": "^11.31",
|
"laravel/framework": "^11.31",
|
||||||
"laravel/sanctum": "^4.0",
|
"laravel/sanctum": "^4.0",
|
||||||
"laravel/tinker": "^2.9",
|
"laravel/tinker": "^2.9",
|
||||||
"maatwebsite/excel": "^3.1"
|
"maatwebsite/excel": "^3.1",
|
||||||
|
"openai-php/client": "^0.10.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fakerphp/faker": "^1.23",
|
"fakerphp/faker": "^1.23",
|
||||||
"ibex/crud-generator": "^2.1",
|
|
||||||
"laravel/pail": "^1.1",
|
"laravel/pail": "^1.1",
|
||||||
"laravel/pint": "^1.13",
|
"laravel/pint": "^1.13",
|
||||||
"laravel/sail": "^1.26",
|
"laravel/sail": "^1.26",
|
||||||
|
|||||||
300
composer.lock
generated
300
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "52617d098d62b15c6ce8538cc8aea775",
|
"content-hash": "41bb51871a746904ab745e4095db8b46",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
@@ -3296,6 +3296,97 @@
|
|||||||
],
|
],
|
||||||
"time": "2024-11-21T10:39:51+00:00"
|
"time": "2024-11-21T10:39:51+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "openai-php/client",
|
||||||
|
"version": "v0.10.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/openai-php/client.git",
|
||||||
|
"reference": "4a565d145e0fb3ea1baba8fffe39d86c56b6dc2c"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/openai-php/client/zipball/4a565d145e0fb3ea1baba8fffe39d86c56b6dc2c",
|
||||||
|
"reference": "4a565d145e0fb3ea1baba8fffe39d86c56b6dc2c",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^8.1.0",
|
||||||
|
"php-http/discovery": "^1.20.0",
|
||||||
|
"php-http/multipart-stream-builder": "^1.4.2",
|
||||||
|
"psr/http-client": "^1.0.3",
|
||||||
|
"psr/http-client-implementation": "^1.0.1",
|
||||||
|
"psr/http-factory-implementation": "*",
|
||||||
|
"psr/http-message": "^1.1.0|^2.0.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"guzzlehttp/guzzle": "^7.9.2",
|
||||||
|
"guzzlehttp/psr7": "^2.7.0",
|
||||||
|
"laravel/pint": "^1.18.1",
|
||||||
|
"mockery/mockery": "^1.6.12",
|
||||||
|
"nunomaduro/collision": "^7.11.0|^8.5.0",
|
||||||
|
"pestphp/pest": "^2.36.0|^3.5.0",
|
||||||
|
"pestphp/pest-plugin-arch": "^2.7|^3.0",
|
||||||
|
"pestphp/pest-plugin-type-coverage": "^2.8.7|^3.1.0",
|
||||||
|
"phpstan/phpstan": "^1.12.7",
|
||||||
|
"symfony/var-dumper": "^6.4.11|^7.1.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/OpenAI.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"OpenAI\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nuno Maduro",
|
||||||
|
"email": "enunomaduro@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Sandro Gehri"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "OpenAI PHP is a supercharged PHP API client that allows you to interact with the Open AI API",
|
||||||
|
"keywords": [
|
||||||
|
"GPT-3",
|
||||||
|
"api",
|
||||||
|
"client",
|
||||||
|
"codex",
|
||||||
|
"dall-e",
|
||||||
|
"language",
|
||||||
|
"natural",
|
||||||
|
"openai",
|
||||||
|
"php",
|
||||||
|
"processing",
|
||||||
|
"sdk"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/openai-php/client/issues",
|
||||||
|
"source": "https://github.com/openai-php/client/tree/v0.10.3"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.paypal.com/paypalme/enunomaduro",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/gehrisandro",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/nunomaduro",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-11-12T20:51:16+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "paragonie/constant_time_encoding",
|
"name": "paragonie/constant_time_encoding",
|
||||||
"version": "v3.0.0",
|
"version": "v3.0.0",
|
||||||
@@ -3413,6 +3504,141 @@
|
|||||||
},
|
},
|
||||||
"time": "2020-10-15T08:29:30+00:00"
|
"time": "2020-10-15T08:29:30+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/discovery",
|
||||||
|
"version": "1.20.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/discovery.git",
|
||||||
|
"reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d",
|
||||||
|
"reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer-plugin-api": "^1.0|^2.0",
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"nyholm/psr7": "<1.0",
|
||||||
|
"zendframework/zend-diactoros": "*"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"php-http/async-client-implementation": "*",
|
||||||
|
"php-http/client-implementation": "*",
|
||||||
|
"psr/http-client-implementation": "*",
|
||||||
|
"psr/http-factory-implementation": "*",
|
||||||
|
"psr/http-message-implementation": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"composer/composer": "^1.0.2|^2.0",
|
||||||
|
"graham-campbell/phpspec-skip-example-extension": "^5.0",
|
||||||
|
"php-http/httplug": "^1.0 || ^2.0",
|
||||||
|
"php-http/message-factory": "^1.0",
|
||||||
|
"phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
|
||||||
|
"sebastian/comparator": "^3.0.5 || ^4.0.8",
|
||||||
|
"symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
|
||||||
|
},
|
||||||
|
"type": "composer-plugin",
|
||||||
|
"extra": {
|
||||||
|
"class": "Http\\Discovery\\Composer\\Plugin",
|
||||||
|
"plugin-optional": true
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Discovery\\": "src/"
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"src/Composer/Plugin.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
|
||||||
|
"homepage": "http://php-http.org",
|
||||||
|
"keywords": [
|
||||||
|
"adapter",
|
||||||
|
"client",
|
||||||
|
"discovery",
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr17",
|
||||||
|
"psr7"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/discovery/issues",
|
||||||
|
"source": "https://github.com/php-http/discovery/tree/1.20.0"
|
||||||
|
},
|
||||||
|
"time": "2024-10-02T11:20:13+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/multipart-stream-builder",
|
||||||
|
"version": "1.4.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/multipart-stream-builder.git",
|
||||||
|
"reference": "10086e6de6f53489cca5ecc45b6f468604d3460e"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/10086e6de6f53489cca5ecc45b6f468604d3460e",
|
||||||
|
"reference": "10086e6de6f53489cca5ecc45b6f468604d3460e",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0",
|
||||||
|
"php-http/discovery": "^1.15",
|
||||||
|
"psr/http-factory-implementation": "^1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"nyholm/psr7": "^1.0",
|
||||||
|
"php-http/message": "^1.5",
|
||||||
|
"php-http/message-factory": "^1.0.2",
|
||||||
|
"phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Message\\MultipartStream\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A builder class that help you create a multipart stream",
|
||||||
|
"homepage": "http://php-http.org",
|
||||||
|
"keywords": [
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"multipart stream",
|
||||||
|
"stream"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/multipart-stream-builder/issues",
|
||||||
|
"source": "https://github.com/php-http/multipart-stream-builder/tree/1.4.2"
|
||||||
|
},
|
||||||
|
"time": "2024-09-04T13:22:54+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "phpoffice/phpspreadsheet",
|
"name": "phpoffice/phpspreadsheet",
|
||||||
"version": "1.29.10",
|
"version": "1.29.10",
|
||||||
@@ -7155,74 +7381,6 @@
|
|||||||
},
|
},
|
||||||
"time": "2020-07-09T08:09:16+00:00"
|
"time": "2020-07-09T08:09:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "ibex/crud-generator",
|
|
||||||
"version": "v2.1.2",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/awais-vteams/laravel-crud-generator.git",
|
|
||||||
"reference": "3906f4a702c91bbe3a84d940c3021d1511834320"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/awais-vteams/laravel-crud-generator/zipball/3906f4a702c91bbe3a84d940c3021d1511834320",
|
|
||||||
"reference": "3906f4a702c91bbe3a84d940c3021d1511834320",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"laravel/framework": "^10.30|^11.0",
|
|
||||||
"php": "^8.2"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"laravel": {
|
|
||||||
"providers": [
|
|
||||||
"Ibex\\CrudGenerator\\CrudServiceProvider"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Ibex\\CrudGenerator\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "M Awais",
|
|
||||||
"email": "asargodha@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Laravel CRUD Generator",
|
|
||||||
"keywords": [
|
|
||||||
"alpine js",
|
|
||||||
"bootstrap css",
|
|
||||||
"crud",
|
|
||||||
"crud generator",
|
|
||||||
"laravel",
|
|
||||||
"laravel crud generator",
|
|
||||||
"laravel package",
|
|
||||||
"tailwind css"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/awais-vteams/laravel-crud-generator/issues",
|
|
||||||
"source": "https://github.com/awais-vteams/laravel-crud-generator/tree/v2.1.2"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://github.com/awais-vteams",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://ko-fi.com/mawais",
|
|
||||||
"type": "ko_fi"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2024-12-09T06:01:54+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "laravel/pail",
|
"name": "laravel/pail",
|
||||||
"version": "v1.2.2",
|
"version": "v1.2.2",
|
||||||
@@ -9316,12 +9474,12 @@
|
|||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": [],
|
"stability-flags": {},
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
"php": "^8.2"
|
"php": "^8.2"
|
||||||
},
|
},
|
||||||
"platform-dev": [],
|
"platform-dev": {},
|
||||||
"plugin-api-version": "2.6.0"
|
"plugin-api-version": "2.6.0"
|
||||||
}
|
}
|
||||||
|
|||||||
46
database/migrations/2025_02_12_083512_create_table_umkm.php
Normal file
46
database/migrations/2025_02_12_083512_create_table_umkm.php
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?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('umkm', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
|
||||||
|
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
|
||||||
|
$table->string('business_name');
|
||||||
|
$table->string('business_address');
|
||||||
|
$table->string('business_desc');
|
||||||
|
$table->string('business_contact');
|
||||||
|
$table->string('business_id_number')->nullable();
|
||||||
|
$table->integer('business_scale_id');
|
||||||
|
$table->string('owner_id');
|
||||||
|
$table->string('owner_name');
|
||||||
|
$table->string('owner_address');
|
||||||
|
$table->string('owner_contact');
|
||||||
|
$table->string('business_type');
|
||||||
|
$table->string('business_form');
|
||||||
|
$table->decimal('revenue');
|
||||||
|
$table->string('village_code');
|
||||||
|
$table->integer('distric_code');
|
||||||
|
$table->integer('number_of_employee');
|
||||||
|
$table->float('land_area')->nullable();
|
||||||
|
$table->integer('permit_status_id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('umkm');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?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('business_scale', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
|
||||||
|
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
|
||||||
|
$table->string('business_scale');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('business_scale');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?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('permit_status', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
|
||||||
|
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
|
||||||
|
$table->string('permit_status');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('permit_status');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -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::table('umkm', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('business_form');
|
||||||
|
$table->integer('business_form_id')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('umkm', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('business_form_id');
|
||||||
|
$table->string('business_form')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?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('business_form', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
|
||||||
|
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
|
||||||
|
$table->string('business_form');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('business_form');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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('umkm', function (Blueprint $table) {
|
||||||
|
$table->renameColumn('distric_code', 'district_code');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('umkm', function (Blueprint $table) {
|
||||||
|
$table->renameColumn('district_code', 'distric_code');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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('umkm', function (Blueprint $table) {
|
||||||
|
Schema::rename('umkm', 'umkms');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('umkm', function (Blueprint $table) {
|
||||||
|
Schema::rename('umkm', 'umkms');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?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('umkms', function (Blueprint $table) {
|
||||||
|
// Mengubah kolom 'revenue' menjadi decimal(20, 2)
|
||||||
|
$table->decimal('revenue', 20, 2)->change();
|
||||||
|
|
||||||
|
// Mengubah kolom 'land_area' menjadi decimal(20, 2)
|
||||||
|
$table->integer('land_area')->nullable()->change();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('umkm', function (Blueprint $table) {
|
||||||
|
// Mengembalikan kolom 'revenue' ke decimal default (jika ada)
|
||||||
|
$table->decimal('revenue')->change();
|
||||||
|
|
||||||
|
// Mengembalikan kolom 'land_area' ke tipe sebelumnya (float atau lainnya)
|
||||||
|
$table->float('land_area')->nullable()->change();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?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('tourism', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
|
||||||
|
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
|
||||||
|
$table->string('business_name');
|
||||||
|
$table->string('project_name');
|
||||||
|
$table->string('business_address');
|
||||||
|
$table->string('village_code');
|
||||||
|
$table->string('land_area');
|
||||||
|
$table->string('investment_amount');
|
||||||
|
$table->string('number_of_employee');
|
||||||
|
$table->string('business_type_id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('tourism');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?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('business_type', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
|
||||||
|
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
|
||||||
|
$table->string('business_type');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('business_type');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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('tourism', function (Blueprint $table) {
|
||||||
|
$table->string('district_code')->after('business_address');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('tourism', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('district_code');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?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::rename('tourism', 'tourisms');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::rename('tourisms', 'tourism');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?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('tourisms', function (Blueprint $table) {
|
||||||
|
$table->integer('project_id')->nullable()->after('id');
|
||||||
|
$table->string('jenis_proyek')->nullable()->after('project_id');
|
||||||
|
$table->string('nib')->nullable()->after('jenis_proyek');
|
||||||
|
$table->integer('business_scale_id')->nullable()->after('project_name');
|
||||||
|
$table->date('terbit_oss')->nullable()->after('business_name');
|
||||||
|
$table->string('status_penanaman_modal')->nullable()->after('terbit_oss');
|
||||||
|
$table->string('business_form')->nullable()->after('status_penanaman_modal');
|
||||||
|
$table->string('uraian_resiko_proyek')->nullable()->after('business_form');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('tourisms', function (Blueprint $table) {
|
||||||
|
$table->dropColumn(['project_id', 'jenis_proyek', 'nib', 'business_scale_id', 'terbit_oss',
|
||||||
|
'status_penanaman_modal', 'business_form', 'uraian_resiko_proyek']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?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('tourisms', function (Blueprint $table) {
|
||||||
|
$table->string('project_id')->change();
|
||||||
|
$table->integer('district_code')->change();
|
||||||
|
$table->integer('business_type_id')->change();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('tourisms', function (Blueprint $table) {
|
||||||
|
$table->integer('project_id')->change();
|
||||||
|
$table->string('district_code')->change();
|
||||||
|
$table->string('business_type_id')->change();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?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('business_or_industries', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('nama_kecamatan');
|
||||||
|
$table->string('nama_kelurahan');
|
||||||
|
$table->string('nop')->unique();
|
||||||
|
$table->string('nama_wajib_pajak');
|
||||||
|
$table->text('alamat_wajib_pajak')->nullable();
|
||||||
|
$table->text('alamat_objek_pajak');
|
||||||
|
$table->decimal('luas_bumi',20,2)->default(0);
|
||||||
|
$table->decimal('luas_bangunan',20,2)->default(0);
|
||||||
|
$table->decimal('njop_bumi',20,2)->default(0);
|
||||||
|
$table->decimal('njop_bangunan',20,2)->default(0);
|
||||||
|
$table->decimal('ketetapan',20,2)->default(0);
|
||||||
|
$table->integer('tahun_pajak');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('business_or_industries');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<?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::dropIfExists('tourisms');
|
||||||
|
Schema::create('tourisms', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
|
||||||
|
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
|
||||||
|
$table->string('project_id');
|
||||||
|
$table->string('project_type_id');
|
||||||
|
$table->string('nib');
|
||||||
|
$table->string('business_name');
|
||||||
|
$table->datetime('oss_publication_date');
|
||||||
|
$table->string('investment_status_description');
|
||||||
|
$table->string('business_form');
|
||||||
|
$table->string('project_risk');
|
||||||
|
$table->string('project_name');
|
||||||
|
$table->string('business_scale');
|
||||||
|
$table->string('business_address');
|
||||||
|
$table->integer('district_code');
|
||||||
|
$table->integer('village_code');
|
||||||
|
$table->string('longitude');
|
||||||
|
$table->string('latitude');
|
||||||
|
$table->datetime('project_submission_date');
|
||||||
|
$table->string('kbli');
|
||||||
|
$table->string('kbli_title');
|
||||||
|
$table->string('supervisory_sector');
|
||||||
|
$table->string('user_name');
|
||||||
|
$table->string('email');
|
||||||
|
$table->string('contact');
|
||||||
|
$table->string('land_area_in_m2');
|
||||||
|
$table->string('investment_amount');
|
||||||
|
$table->string('tki');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('tourisms');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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('tourisms', function (Blueprint $table) {
|
||||||
|
$table->string('village_code')->change();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('tourisms', function (Blueprint $table) {
|
||||||
|
$table->integer('village_code')->change();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?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('spatial_planning', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
|
||||||
|
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
|
||||||
|
$table->string('name')->nullable();
|
||||||
|
$table->string('kbli')->nullable();
|
||||||
|
$table->string('activities')->nullable();
|
||||||
|
$table->string('area')->nullable();
|
||||||
|
$table->string('location')->nullable();
|
||||||
|
$table->string('number')->nullable();
|
||||||
|
$table->dateTime('date')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('spatial_planning');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?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::rename('spatial_planning', 'spatial_plannings');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::rename('spatial_plannings', 'spatial_planning');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?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('customers', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('nomor_pelanggan')->unique();
|
||||||
|
$table->string('kota_pelayanan');
|
||||||
|
$table->string('nama');
|
||||||
|
$table->text('alamat');
|
||||||
|
$table->decimal('latitude', 22,18);
|
||||||
|
$table->decimal('longitude', 22,18);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('customers');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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_google_sheet', function (Blueprint $table) {
|
||||||
|
$table->string('formatted_registration_number')->nullable()->after('no_registrasi');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('pbg_task_google_sheet', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('formatted_registration_number');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
26
database/seeders/BusinessFormSeeder.php
Normal file
26
database/seeders/BusinessFormSeeder.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class BusinessFormSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
DB::table('business_form')->insert([
|
||||||
|
['business_form' => 'Perseorangan'],
|
||||||
|
['business_form' => 'Persekutuan'],
|
||||||
|
['business_form' => 'Koperasi'],
|
||||||
|
['business_form' => 'CV'],
|
||||||
|
['business_form' => 'PT'],
|
||||||
|
['business_form' => 'PTTB'],
|
||||||
|
['business_form' => 'Perseroan'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
22
database/seeders/BusinessScaleSeeder.php
Normal file
22
database/seeders/BusinessScaleSeeder.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class BusinessScaleSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
DB::table('business_scale')->insert([
|
||||||
|
['business_scale' => 'Micro'],
|
||||||
|
['business_scale' => 'Kecil'],
|
||||||
|
['business_scale' => 'Menengah'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
28
database/seeders/BusinessTypeSeeder.php
Normal file
28
database/seeders/BusinessTypeSeeder.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class BusinessTypeSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
DB::table('business_type')->insert([
|
||||||
|
['business_type' => 'Villas'],
|
||||||
|
['business_type' => 'Hotels'],
|
||||||
|
['business_type' => 'Restaurants / Food Stores'],
|
||||||
|
['business_type' => 'Cafes'],
|
||||||
|
['business_type' => 'Adventure / Outdoor Activities'],
|
||||||
|
['business_type' => 'Event Organizers'],
|
||||||
|
['business_type' => 'Travel & Tours'],
|
||||||
|
['business_type' => 'Miscellaneous'],
|
||||||
|
['business_type' => 'Others'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
22
database/seeders/PermitStatusSeeder.php
Normal file
22
database/seeders/PermitStatusSeeder.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class PermitStatusSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
DB::table('permit_status')->insert([
|
||||||
|
['permit_status' => 'Not Registered'],
|
||||||
|
['permit_status' => 'Registered'],
|
||||||
|
['permit_status' => 'Application Process'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,6 +67,13 @@ class UsersRoleMenuSeeder extends Seeder
|
|||||||
"icon" => "mingcute:task-line",
|
"icon" => "mingcute:task-line",
|
||||||
"parent_id" => null,
|
"parent_id" => null,
|
||||||
"sort_order" => 5,
|
"sort_order" => 5,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"name" => "Laporan",
|
||||||
|
"url" => "/laporan",
|
||||||
|
"icon" => "mingcute:task-line",
|
||||||
|
"parent_id" => null,
|
||||||
|
"sort_order" => 6,
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -84,6 +91,7 @@ class UsersRoleMenuSeeder extends Seeder
|
|||||||
$settings = Menu::where('name', 'Settings')->first();
|
$settings = Menu::where('name', 'Settings')->first();
|
||||||
$dataSettings = Menu::where('name', 'Data Settings')->first();
|
$dataSettings = Menu::where('name', 'Data Settings')->first();
|
||||||
$data = Menu::where('name', 'Data')->first();
|
$data = Menu::where('name', 'Data')->first();
|
||||||
|
$laporan = Menu::where('name', 'Laporan')->first();
|
||||||
|
|
||||||
// create children menu
|
// create children menu
|
||||||
$children_menus = [
|
$children_menus = [
|
||||||
@@ -101,6 +109,20 @@ class UsersRoleMenuSeeder extends Seeder
|
|||||||
"parent_id" => $dashboard->id,
|
"parent_id" => $dashboard->id,
|
||||||
"sort_order" => 2,
|
"sort_order" => 2,
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"name" => "Dashboard Potensi",
|
||||||
|
"url" => "dashboard.lack_of_potential",
|
||||||
|
"icon" => null,
|
||||||
|
"parent_id" => $dashboard->id,
|
||||||
|
"sort_order" => 3,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"name" => "PETA",
|
||||||
|
"url" => "dashboard.maps",
|
||||||
|
"icon" => null,
|
||||||
|
"parent_id" => $dashboard->id,
|
||||||
|
"sort_order" => 4,
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"name" => "Users",
|
"name" => "Users",
|
||||||
"url" => "users.index",
|
"url" => "users.index",
|
||||||
@@ -148,6 +170,48 @@ class UsersRoleMenuSeeder extends Seeder
|
|||||||
"url" => "advertisements.index",
|
"url" => "advertisements.index",
|
||||||
"icon" => null,
|
"icon" => null,
|
||||||
"parent_id" => $data->id,
|
"parent_id" => $data->id,
|
||||||
|
"sort_order" => 2,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"name" => "Usaha atau Industri",
|
||||||
|
"url" => "business-industries.index",
|
||||||
|
"icon" => null,
|
||||||
|
"parent_id" => $data->id,
|
||||||
|
"sort_order" => 3,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"name" => "UMKM",
|
||||||
|
"url" => "umkm.index",
|
||||||
|
"icon" => null,
|
||||||
|
"parent_id" => $data->id,
|
||||||
|
"sort_order" => 4,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"name" => "Pariwisata",
|
||||||
|
"url" => "tourisms.index",
|
||||||
|
"icon" => null,
|
||||||
|
"parent_id" => $data->id,
|
||||||
|
"sort_order" => 5,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"name" => "Tata Ruang",
|
||||||
|
"url" => "spatial-plannings.index",
|
||||||
|
"icon" => null,
|
||||||
|
"parent_id" => $data->id,
|
||||||
|
"sort_order" => 6,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"name" => "PDAM",
|
||||||
|
"url" => "customers",
|
||||||
|
"icon" => null,
|
||||||
|
"parent_id" => $data->id,
|
||||||
|
"sort_order" => 7,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"name" => "Lap Pariwisata",
|
||||||
|
"url" => "tourisms.index",
|
||||||
|
"icon" => null,
|
||||||
|
"parent_id" => $laporan->id,
|
||||||
"sort_order" => 1,
|
"sort_order" => 1,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
@@ -165,6 +229,14 @@ class UsersRoleMenuSeeder extends Seeder
|
|||||||
$setting_dashboard = Menu::where('name', 'Setting Dashboard')->first();
|
$setting_dashboard = Menu::where('name', 'Setting Dashboard')->first();
|
||||||
$setting_pbg = Menu::where('name', 'PBG')->first();
|
$setting_pbg = Menu::where('name', 'PBG')->first();
|
||||||
$reklame = Menu::where('name', 'Reklame')->first();
|
$reklame = Menu::where('name', 'Reklame')->first();
|
||||||
|
$businessIndustries = Menu::where('name', 'Usaha atau Industri')->first();
|
||||||
|
$pariwisata = Menu::where('name', 'Pariwisata')->first();
|
||||||
|
$laporan_pariwisata = Menu::where('name', 'Lap Pariwisata')->first();
|
||||||
|
$umkm = Menu::where('name', 'UMKM')->first();
|
||||||
|
$lack_of_potentials = Menu::where('name', 'Dashboard Potensi')->first();
|
||||||
|
$spatial_plannings = Menu::where('name', 'Tata Ruang')->first();
|
||||||
|
$pdam = Menu::where('name', 'PDAM')->first();
|
||||||
|
$peta = Menu::where('name', 'PETA')->first();
|
||||||
|
|
||||||
// Superadmin gets all menus
|
// Superadmin gets all menus
|
||||||
$superadmin->menus()->sync([
|
$superadmin->menus()->sync([
|
||||||
@@ -174,6 +246,7 @@ class UsersRoleMenuSeeder extends Seeder
|
|||||||
$settings->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
$settings->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
||||||
$dataSettings->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
$dataSettings->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
||||||
$data->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
$data->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
||||||
|
$laporan->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
||||||
// children
|
// children
|
||||||
$dashboard_pimpinan->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
$dashboard_pimpinan->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
$dashboard_pbg->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
$dashboard_pbg->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
@@ -184,6 +257,14 @@ class UsersRoleMenuSeeder extends Seeder
|
|||||||
$setting_dashboard->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
$setting_dashboard->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
$setting_pbg->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
$setting_pbg->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
$reklame->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
$reklame->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
|
$businessIndustries->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
|
$pariwisata->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
|
$laporan_pariwisata->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
|
$umkm->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
|
$lack_of_potentials->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
|
$spatial_plannings->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
|
$pdam->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
|
$peta->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Admin gets limited menus
|
// Admin gets limited menus
|
||||||
|
|||||||
5
database/view_query/business_type_counts.sql
Normal file
5
database/view_query/business_type_counts.sql
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
CREATE VIEW business_type_counts AS
|
||||||
|
SELECT b.business_type, COUNT(t.id) AS count
|
||||||
|
FROM tourisms t
|
||||||
|
JOIN business_type b ON t.business_type_id = b.id
|
||||||
|
GROUP BY b.business_type;
|
||||||
62
package-lock.json
generated
62
package-lock.json
generated
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "sibedas-pbg-web",
|
"name": "sibedas-pbg",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
"node-waves": "^0.7.6",
|
"node-waves": "^0.7.6",
|
||||||
"quill": "^1.3.7",
|
"quill": "^1.3.7",
|
||||||
"simplebar": "^5.3.9",
|
"simplebar": "^5.3.9",
|
||||||
|
"sweetalert2": "^11.16.0",
|
||||||
"wnumb": "^1.2.0"
|
"wnumb": "^1.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -60,22 +61,6 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-x64": {
|
|
||||||
"version": "0.21.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
|
|
||||||
"integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@iconify/types": {
|
"node_modules/@iconify/types": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
|
||||||
@@ -262,26 +247,6 @@
|
|||||||
"url": "https://opencollective.com/parcel"
|
"url": "https://opencollective.com/parcel"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@parcel/watcher-win32-x64": {
|
|
||||||
"version": "2.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz",
|
|
||||||
"integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/parcel"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pkgjs/parseargs": {
|
"node_modules/@pkgjs/parseargs": {
|
||||||
"version": "0.11.0",
|
"version": "0.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
||||||
@@ -328,19 +293,6 @@
|
|||||||
"linux"
|
"linux"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
|
||||||
"version": "4.28.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz",
|
|
||||||
"integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"node_modules/@types/estree": {
|
"node_modules/@types/estree": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
|
||||||
@@ -2521,6 +2473,16 @@
|
|||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/sweetalert2": {
|
||||||
|
"version": "11.16.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.16.0.tgz",
|
||||||
|
"integrity": "sha512-4CGgNMpQHcwV+Gov0j4u3lDc/5lyl04NBsa1vW0Se9cqsrQoUimD6/Z5UyZiRP4kMbwQGyb7wsp0x3ytybti6w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/limonte"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tailwindcss": {
|
"node_modules/tailwindcss": {
|
||||||
"version": "3.4.15",
|
"version": "3.4.15",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz",
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
"node-waves": "^0.7.6",
|
"node-waves": "^0.7.6",
|
||||||
"quill": "^1.3.7",
|
"quill": "^1.3.7",
|
||||||
"simplebar": "^5.3.9",
|
"simplebar": "^5.3.9",
|
||||||
|
"sweetalert2": "^11.16.0",
|
||||||
"wnumb": "^1.2.0"
|
"wnumb": "^1.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,408 +0,0 @@
|
|||||||
{
|
|
||||||
"__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"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"_dropzone-B5tMhgFp.js": {
|
|
||||||
"file": "assets/dropzone-B5tMhgFp.js",
|
|
||||||
"name": "dropzone"
|
|
||||||
},
|
|
||||||
"_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
|
|
||||||
},
|
|
||||||
"public/images/bg-dashboard.jpg": {
|
|
||||||
"file": "assets/bg-dashboard-CUwt8_jP.jpg",
|
|
||||||
"src": "public/images/bg-dashboard.jpg"
|
|
||||||
},
|
|
||||||
"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-Cyb9tZIY.js",
|
|
||||||
"name": "bigdata",
|
|
||||||
"src": "resources/js/dashboards/bigdata.js",
|
|
||||||
"isEntry": true,
|
|
||||||
"imports": [
|
|
||||||
"_global-config-9uDKFQ8j.js"
|
|
||||||
],
|
|
||||||
"css": [
|
|
||||||
"assets/flatpickr-CksuuEqD.css"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"resources/js/data-settings/create.js": {
|
|
||||||
"file": "assets/create-C1IbeTHP.js",
|
|
||||||
"name": "create",
|
|
||||||
"src": "resources/js/data-settings/create.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/js/data-settings/index.js": {
|
|
||||||
"file": "assets/index-BOfsbw53.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/data-settings/update.js": {
|
|
||||||
"file": "assets/update-nNw3P4hj.js",
|
|
||||||
"name": "update",
|
|
||||||
"src": "resources/js/data-settings/update.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/js/data/advertisements/data-advertisements.js": {
|
|
||||||
"file": "assets/data-advertisements-C_ZfB4RA.js",
|
|
||||||
"name": "data-advertisements",
|
|
||||||
"src": "resources/js/data/advertisements/data-advertisements.js",
|
|
||||||
"isEntry": true,
|
|
||||||
"imports": [
|
|
||||||
"_gridjs.umd-BiCNXlqL.js",
|
|
||||||
"_global-config-9uDKFQ8j.js",
|
|
||||||
"__commonjsHelpers-C4iS2aBk.js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"resources/js/data/advertisements/form-create-update.js": {
|
|
||||||
"file": "assets/form-create-update-CyN97GsU.js",
|
|
||||||
"name": "form-create-update",
|
|
||||||
"src": "resources/js/data/advertisements/form-create-update.js",
|
|
||||||
"isEntry": true,
|
|
||||||
"imports": [
|
|
||||||
"_global-config-9uDKFQ8j.js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"resources/js/data/advertisements/form-upload.js": {
|
|
||||||
"file": "assets/form-upload-Ci7Kyzc7.js",
|
|
||||||
"name": "form-upload",
|
|
||||||
"src": "resources/js/data/advertisements/form-upload.js",
|
|
||||||
"isEntry": true,
|
|
||||||
"imports": [
|
|
||||||
"_dropzone-B5tMhgFp.js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"resources/js/master/users/create.js": {
|
|
||||||
"file": "assets/create-RO4xgm-f.js",
|
|
||||||
"name": "create",
|
|
||||||
"src": "resources/js/master/users/create.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/js/master/users/update.js": {
|
|
||||||
"file": "assets/update-DhoG4v8r.js",
|
|
||||||
"name": "update",
|
|
||||||
"src": "resources/js/master/users/update.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/js/master/users/users.js": {
|
|
||||||
"file": "assets/users-jfWUOWyP.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/menus/create.js": {
|
|
||||||
"file": "assets/create-ChUgh-yc.js",
|
|
||||||
"name": "create",
|
|
||||||
"src": "resources/js/menus/create.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/js/menus/index.js": {
|
|
||||||
"file": "assets/index-C4xA1kYa.js",
|
|
||||||
"name": "index",
|
|
||||||
"src": "resources/js/menus/index.js",
|
|
||||||
"isEntry": true,
|
|
||||||
"imports": [
|
|
||||||
"_gridjs.umd-BiCNXlqL.js",
|
|
||||||
"_global-config-9uDKFQ8j.js",
|
|
||||||
"__commonjsHelpers-C4iS2aBk.js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"resources/js/menus/update.js": {
|
|
||||||
"file": "assets/update-8JQOGES4.js",
|
|
||||||
"name": "update",
|
|
||||||
"src": "resources/js/menus/update.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"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-DGbdX8GT.js",
|
|
||||||
"name": "form-fileupload",
|
|
||||||
"src": "resources/js/pages/form-fileupload.js",
|
|
||||||
"isEntry": true,
|
|
||||||
"imports": [
|
|
||||||
"_dropzone-B5tMhgFp.js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"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-CqcfkvSL.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/roles/create.js": {
|
|
||||||
"file": "assets/create-Dd-lHOwF.js",
|
|
||||||
"name": "create",
|
|
||||||
"src": "resources/js/roles/create.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/js/roles/index.js": {
|
|
||||||
"file": "assets/index-C_kI_q7O.js",
|
|
||||||
"name": "index",
|
|
||||||
"src": "resources/js/roles/index.js",
|
|
||||||
"isEntry": true,
|
|
||||||
"imports": [
|
|
||||||
"_gridjs.umd-BiCNXlqL.js",
|
|
||||||
"_global-config-9uDKFQ8j.js",
|
|
||||||
"__commonjsHelpers-C4iS2aBk.js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"resources/js/roles/role_menu.js": {
|
|
||||||
"file": "assets/role_menu-BuFAi1wM.js",
|
|
||||||
"name": "role_menu",
|
|
||||||
"src": "resources/js/roles/role_menu.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/js/roles/update.js": {
|
|
||||||
"file": "assets/update-CapXnAP8.js",
|
|
||||||
"name": "update",
|
|
||||||
"src": "resources/js/roles/update.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"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-DgPqpfJw.css",
|
|
||||||
"src": "resources/scss/components/_circle.scss",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/scss/dashboards/_bigdata.scss": {
|
|
||||||
"file": "assets/_bigdata-Syu0AGbZ.css",
|
|
||||||
"src": "resources/scss/dashboards/_bigdata.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-H92i7DXd.css",
|
|
||||||
"src": "resources/scss/style.scss",
|
|
||||||
"isEntry": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BIN
public/images/iconchatbot.jpeg
Normal file
BIN
public/images/iconchatbot.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 177 KiB |
11
public/templates/contentTemplatePrompt.json
Normal file
11
public/templates/contentTemplatePrompt.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"RETRIBUTION": {
|
||||||
|
"prompt": "You are a MariaDB SQL expert. Your task is to generate an efficient and optimized SQL query based on user input.\n\n The query should retrieve data from the view table `v_pbg_task_with_retributions`, specifically selecting the following columns:\n\n - nilai_retribusi_bangunan\n - land_certificate_phase\n - due_date\n - consultation_type\n - function_type\n - slf_status_name\n - slf_status\n - status_name\n - status\n - address\n - document_number\n - registration_number\n - application_type_name\n - application_type\n - owner_name\n - name\n\n Ensure the query is well-structured, uses best indexing practices, and avoids performance bottlenecks.\n\n Consider the following context: \"$mainContent\".\n\n Always return only the SQL query without any additional explanation."
|
||||||
|
},
|
||||||
|
"DOCUMENT VALIDATION": {
|
||||||
|
"prompt": "You are a MariaDB SQL expert. Your task is to generate an efficient and optimized SQL query based on user input.\n\n The query should retrieve data from the view table `pbg_task`, specifically selecting the following columns:\n\n - name\n - owner_name\n - application_type\n - application_type_name\n - registration_number\n - document_number\n - address\n - status_name\n - slf_status\n - slf_status_name\n - function_type\n - consultation_type\n - function_type\n - consultation_type\n - due_date\n - land_certificate_phase\n\n Ensure the query is well-structured, uses best indexing practices, and avoids performance bottlenecks.\n\n Consider the following context: \"$mainContent\".\n\n Always return only the SQL query without any additional explanation."
|
||||||
|
},
|
||||||
|
"DATA SUMMARY": {
|
||||||
|
"prompt": "You are a MariaDB SQL expert. Your task is to generate an efficient and optimized SQL query based on user input.\n\n The query should retrieve data from the view table `bigdata_resumes`, specifically selecting the following columns:\n\n - potention_count\n - potention_sum\n - non_verified_count\n - non_verified_sum\n - verified_sum\n - verified_count\n - business_count\n - business_sum\n - non_business_count\n - non_business_sum\n - spatial_count\n - spatial_sum\n - updated_at\n\n Ensure the query is well-structured, uses best indexing practices, and avoids performance bottlenecks.\n\n Consider the following context: \"$mainContent\".\n\n Always return only the SQL query without any additional explanation."
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/templates/template_pariwisata.xlsx
Normal file
BIN
public/templates/template_pariwisata.xlsx
Normal file
Binary file not shown.
BIN
public/templates/template_reklame.xlsx
Normal file
BIN
public/templates/template_reklame.xlsx
Normal file
Binary file not shown.
BIN
public/templates/template_spatial_planning.xlsx
Normal file
BIN
public/templates/template_spatial_planning.xlsx
Normal file
Binary file not shown.
BIN
public/templates/template_umkm.xlsx
Normal file
BIN
public/templates/template_umkm.xlsx
Normal file
Binary file not shown.
@@ -2,6 +2,30 @@ 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";
|
||||||
|
// import flatpickr from "flatpickr";
|
||||||
|
// import "flatpickr/dist/flatpickr.min.css";
|
||||||
|
|
||||||
|
// class InitDatePicker {
|
||||||
|
// constructor(selector = ".datepicker") {
|
||||||
|
// this.selector = selector;
|
||||||
|
// }
|
||||||
|
// init() {
|
||||||
|
// const elements = document.querySelectorAll(this.selector);
|
||||||
|
// if (elements.length === 0) return; // Skip if no elements found
|
||||||
|
|
||||||
|
// const today = new Date();
|
||||||
|
// const minYear = today.getFullYear() - 5;
|
||||||
|
|
||||||
|
// elements.forEach((element) => {
|
||||||
|
// flatpickr(element, {
|
||||||
|
// enableTime: false,
|
||||||
|
// dateFormat: "Y-m-d",
|
||||||
|
// minDate: `${minYear}-01-01`,
|
||||||
|
// maxDate: today,
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
class Components {
|
class Components {
|
||||||
initBootstrapComponents() {
|
initBootstrapComponents() {
|
||||||
@@ -107,6 +131,7 @@ class FormValidation {
|
|||||||
}
|
}
|
||||||
document.addEventListener("DOMContentLoaded", function (e) {
|
document.addEventListener("DOMContentLoaded", function (e) {
|
||||||
new Components().init(), new FormValidation().init();
|
new Components().init(), new FormValidation().init();
|
||||||
|
// new InitDatePicker().init();
|
||||||
});
|
});
|
||||||
class ThemeLayout {
|
class ThemeLayout {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|||||||
125
resources/js/business-industries/create.js
Normal file
125
resources/js/business-industries/create.js
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
import { Dropzone } from "dropzone";
|
||||||
|
import GlobalConfig from "../global-config";
|
||||||
|
Dropzone.autoDiscover = false;
|
||||||
|
|
||||||
|
var previewTemplate,
|
||||||
|
dropzone,
|
||||||
|
dropzonePreviewNode = document.querySelector("#dropzone-preview-list");
|
||||||
|
console.log(previewTemplate);
|
||||||
|
console.log(dropzone);
|
||||||
|
console.log(dropzonePreviewNode);
|
||||||
|
|
||||||
|
const toastNotification = document.getElementById("toastNotification");
|
||||||
|
const toast = new bootstrap.Toast(toastNotification);
|
||||||
|
|
||||||
|
(dropzonePreviewNode.id = ""),
|
||||||
|
dropzonePreviewNode &&
|
||||||
|
((previewTemplate = dropzonePreviewNode.parentNode.innerHTML),
|
||||||
|
dropzonePreviewNode.parentNode.removeChild(dropzonePreviewNode),
|
||||||
|
(dropzone = new Dropzone(".dropzone", {
|
||||||
|
url: `${GlobalConfig.apiHost}/api/api-business-industries/upload`,
|
||||||
|
method: "post",
|
||||||
|
acceptedFiles: ".xls,.xlsx", // Use acceptedFiles for better validation
|
||||||
|
previewTemplate: previewTemplate,
|
||||||
|
previewsContainer: "#dropzone-preview",
|
||||||
|
autoProcessQueue: false, // Disable auto post
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${document
|
||||||
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
},
|
||||||
|
init: function () {
|
||||||
|
// Listen for the success event
|
||||||
|
this.on("success", function (file, response) {
|
||||||
|
console.log("File successfully uploaded:", file);
|
||||||
|
console.log("API Response:", response);
|
||||||
|
|
||||||
|
// Show success toast
|
||||||
|
document.getElementById("toast-message").innerText =
|
||||||
|
response.message;
|
||||||
|
toast.show();
|
||||||
|
document.getElementById("submit-upload").innerHTML =
|
||||||
|
"Upload Files";
|
||||||
|
// Tunggu sebentar lalu reload halaman
|
||||||
|
setTimeout(() => {
|
||||||
|
window.location.href = "/data/business-industries";
|
||||||
|
}, 2000);
|
||||||
|
});
|
||||||
|
// Listen for the error event
|
||||||
|
this.on("error", function (file, errorMessage) {
|
||||||
|
console.error("Error uploading file:", file);
|
||||||
|
console.error("Error message:", errorMessage);
|
||||||
|
// Handle the error response
|
||||||
|
|
||||||
|
// Show error toast
|
||||||
|
document.getElementById("toast-message").innerText =
|
||||||
|
errorMessage.message;
|
||||||
|
toast.show();
|
||||||
|
document.getElementById("submit-upload").innerHTML =
|
||||||
|
"Upload Files";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
})));
|
||||||
|
|
||||||
|
// Add event listener to control the submission manually
|
||||||
|
document.querySelector("#submit-upload").addEventListener("click", function () {
|
||||||
|
console.log("Ini adalah value dropzone", dropzone.files[0]);
|
||||||
|
const formData = new FormData();
|
||||||
|
console.log("Dropzonefiles", dropzone.files);
|
||||||
|
|
||||||
|
this.innerHTML =
|
||||||
|
'<span class="spinner-border spinner-border-sm me-1" role="status" aria-hidden="true"></span>Loading...';
|
||||||
|
|
||||||
|
// Pastikan ada file dalam queue sebelum memprosesnya
|
||||||
|
if (dropzone.files.length > 0) {
|
||||||
|
formData.append("file", dropzone.files[0]);
|
||||||
|
console.log("ini adalah form data on submit", ...formData);
|
||||||
|
dropzone.processQueue(); // Ini akan manual memicu upload
|
||||||
|
} else {
|
||||||
|
// Show error toast when no file is selected
|
||||||
|
document.getElementById("toast-message").innerText =
|
||||||
|
"Please add a file first.";
|
||||||
|
toast.show();
|
||||||
|
|
||||||
|
document.getElementById("submit-upload").innerHTML = "Upload Files";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Optional: Listen for the 'addedfile' event to log or control file add behavior
|
||||||
|
dropzone.on("addedfile", function (file) {
|
||||||
|
console.log("File ditambahkan:", file);
|
||||||
|
console.log("Nama File:", file.name);
|
||||||
|
console.log("Tipe File:", file.type);
|
||||||
|
console.log("Ukuran File:", (file.size / 1024).toFixed(2) + " KB");
|
||||||
|
});
|
||||||
|
|
||||||
|
dropzone.on("complete", function (file) {
|
||||||
|
dropzone.removeFile(file);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Function to show toast
|
||||||
|
// function showToast(iconClass, iconColor, message) {
|
||||||
|
// const toastElement = document.getElementById("toastUploadAdvertisement");
|
||||||
|
// const toastBody = toastElement.querySelector(".toast-body");
|
||||||
|
// const toastHeader = toastElement.querySelector(".toast-header");
|
||||||
|
|
||||||
|
// // Remove existing icon (if any) before adding the new one
|
||||||
|
// const existingIcon = toastHeader.querySelector(".bx");
|
||||||
|
// if (existingIcon) {
|
||||||
|
// toastHeader.querySelector(".auth-logo").removeChild(existingIcon); // Remove the existing icon
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Add the new icon to the toast header
|
||||||
|
// const icon = document.createElement("i");
|
||||||
|
// icon.classList.add("bx", iconClass);
|
||||||
|
// icon.style.fontSize = "25px";
|
||||||
|
// icon.style.color = iconColor;
|
||||||
|
// toastHeader.querySelector(".auth-logo").appendChild(icon);
|
||||||
|
|
||||||
|
// // Set the toast message
|
||||||
|
// toastBody.textContent = message;
|
||||||
|
|
||||||
|
// // Show the toast
|
||||||
|
// const toast = new bootstrap.Toast(toastElement); // Inisialisasi Bootstrap Toast
|
||||||
|
// toast.show();
|
||||||
|
// }
|
||||||
167
resources/js/business-industries/index.js
Normal file
167
resources/js/business-industries/index.js
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
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";
|
||||||
|
import Swal from "sweetalert2";
|
||||||
|
|
||||||
|
class BusinessIndustries {
|
||||||
|
constructor() {
|
||||||
|
this.toastMessage = document.getElementById("toast-message");
|
||||||
|
this.toastElement = document.getElementById("toastNotification");
|
||||||
|
this.toast = new bootstrap.Toast(this.toastElement);
|
||||||
|
this.table = null;
|
||||||
|
|
||||||
|
// Initialize functions
|
||||||
|
this.initTableBusinessIndustries();
|
||||||
|
this.initEvents();
|
||||||
|
}
|
||||||
|
initEvents() {
|
||||||
|
document.body.addEventListener("click", async (event) => {
|
||||||
|
const deleteButton = event.target.closest(
|
||||||
|
".btn-delete-business-industry"
|
||||||
|
);
|
||||||
|
if (deleteButton) {
|
||||||
|
event.preventDefault();
|
||||||
|
await this.handleDelete(deleteButton);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
initTableBusinessIndustries() {
|
||||||
|
let tableContainer = document.getElementById(
|
||||||
|
"table-business-industries"
|
||||||
|
);
|
||||||
|
// Create a new Grid.js instance only if it doesn't exist
|
||||||
|
this.table = new Grid({
|
||||||
|
columns: [
|
||||||
|
{ name: "ID", width: "80px", hidden: false },
|
||||||
|
{ name: "Nama Kecamatan", width: "200px" },
|
||||||
|
{ name: "Nama Kelurahan", width: "200px" },
|
||||||
|
{ name: "NOP", width: "150px" },
|
||||||
|
{ name: "Nama Wajib Pajak", width: "250px" },
|
||||||
|
{ name: "Alamat Wajib Pajak", width: "300px" },
|
||||||
|
{ name: "Alamat Objek Pajak", width: "300px" },
|
||||||
|
{ name: "Luas Bumi", width: "150px" },
|
||||||
|
{ name: "Luas Bangunan", width: "150px" },
|
||||||
|
{ name: "NJOP Bumi", width: "150px" },
|
||||||
|
{ name: "NJOP Bangunan", width: "150px" },
|
||||||
|
{ name: "Ketetapan", width: "150px" },
|
||||||
|
{ name: "Tahun Pajak", width: "120px" },
|
||||||
|
{ name: "Created", width: "180px" },
|
||||||
|
{
|
||||||
|
name: "Action",
|
||||||
|
formatter: (cell) =>
|
||||||
|
gridjs.html(`
|
||||||
|
<div class="d-flex justify-content-center gap-2">
|
||||||
|
<a href="/data/business-industries/${cell}/edit" class="btn btn-yellow btn-sm d-inline-flex align-items-center justify-content-center">
|
||||||
|
<i class='bx bx-edit'></i>
|
||||||
|
</a>
|
||||||
|
<button data-id="${cell}" class="btn btn-sm btn-red btn-delete-business-industry d-inline-flex align-items-center justify-content-center">
|
||||||
|
<i class='bx bxs-trash' ></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
`),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
pagination: {
|
||||||
|
limit: 15,
|
||||||
|
server: {
|
||||||
|
url: (prev, page) =>
|
||||||
|
`${prev}${prev.includes("?") ? "&" : "?"}page=${
|
||||||
|
page + 1
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
sort: true,
|
||||||
|
search: {
|
||||||
|
server: {
|
||||||
|
url: (prev, keyword) => `${prev}?search=${keyword}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
server: {
|
||||||
|
url: `${GlobalConfig.apiHost}/api/api-business-industries`,
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${document
|
||||||
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
then: (data) =>
|
||||||
|
data.data.map((item) => [
|
||||||
|
item.id,
|
||||||
|
item.nama_kecamatan,
|
||||||
|
item.nama_kelurahan,
|
||||||
|
item.nop,
|
||||||
|
item.nama_wajib_pajak,
|
||||||
|
item.alamat_wajib_pajak,
|
||||||
|
item.alamat_objek_pajak,
|
||||||
|
item.luas_bumi,
|
||||||
|
item.luas_bangunan,
|
||||||
|
item.njop_bumi,
|
||||||
|
item.njop_bangunan,
|
||||||
|
item.ketetapan,
|
||||||
|
item.tahun_pajak,
|
||||||
|
item.created_at,
|
||||||
|
item.id, // ID for Actions column
|
||||||
|
]),
|
||||||
|
total: (data) => data.total,
|
||||||
|
},
|
||||||
|
}).render(tableContainer);
|
||||||
|
}
|
||||||
|
async handleDelete(deleteButton) {
|
||||||
|
const id = deleteButton.getAttribute("data-id");
|
||||||
|
|
||||||
|
const result = await Swal.fire({
|
||||||
|
title: "Are you sure?",
|
||||||
|
text: "You won't be able to revert this!",
|
||||||
|
icon: "warning",
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonColor: "#3085d6",
|
||||||
|
cancelButtonColor: "#d33",
|
||||||
|
confirmButtonText: "Yes, delete it!",
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
try {
|
||||||
|
let response = await fetch(
|
||||||
|
`${GlobalConfig.apiHost}/api/api-business-industries/${id}`,
|
||||||
|
{
|
||||||
|
method: "DELETE",
|
||||||
|
credentials: "include",
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${document
|
||||||
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (response.ok) {
|
||||||
|
let result = await response.json();
|
||||||
|
this.toastMessage.innerText =
|
||||||
|
result.message || "Deleted successfully!";
|
||||||
|
this.toast.show();
|
||||||
|
|
||||||
|
// Refresh Grid.js table
|
||||||
|
if (typeof this.table !== "undefined") {
|
||||||
|
this.table.updateConfig({}).forceRender();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let error = await response.json();
|
||||||
|
console.error("Delete failed:", error);
|
||||||
|
this.toastMessage.innerText =
|
||||||
|
error.message || "Delete failed!";
|
||||||
|
this.toast.show();
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error deleting item:", error);
|
||||||
|
this.toastMessage.innerText = "An error occurred!";
|
||||||
|
this.toast.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", function (e) {
|
||||||
|
new BusinessIndustries();
|
||||||
|
});
|
||||||
79
resources/js/business-industries/update.js
Normal file
79
resources/js/business-industries/update.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
class UpdateBusinessIndustries {
|
||||||
|
init() {
|
||||||
|
this.handleUpdateData();
|
||||||
|
}
|
||||||
|
|
||||||
|
handleUpdateData() {
|
||||||
|
const form = document.getElementById("formUpdateBusinessIndustries");
|
||||||
|
const submitButton = document.getElementById(
|
||||||
|
"btnUpdateBusinessIndustries"
|
||||||
|
);
|
||||||
|
const toastNotification = document.getElementById("toastNotification");
|
||||||
|
const toastBody = document.getElementById("toastBody"); // Add an element inside toast to display messages
|
||||||
|
const spinner = document.getElementById("spinner");
|
||||||
|
const toast = new bootstrap.Toast(toastNotification);
|
||||||
|
|
||||||
|
if (!submitButton) {
|
||||||
|
console.error("Error: Submit button not found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
submitButton.addEventListener("click", async function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
// Disable button and show spinner
|
||||||
|
submitButton.disabled = true;
|
||||||
|
spinner.classList.remove("d-none");
|
||||||
|
|
||||||
|
// Create FormData object
|
||||||
|
const formData = new FormData(form);
|
||||||
|
const formObject = {};
|
||||||
|
formData.forEach((value, key) => {
|
||||||
|
formObject[key] = value;
|
||||||
|
});
|
||||||
|
formData.append("_method", "PUT");
|
||||||
|
|
||||||
|
try {
|
||||||
|
let response = await fetch(form.action, {
|
||||||
|
method: "POST", // Laravel's update route uses PUT, so adjust accordingly
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${document
|
||||||
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(formObject),
|
||||||
|
});
|
||||||
|
|
||||||
|
let data = await response.json();
|
||||||
|
|
||||||
|
if (response.ok) {
|
||||||
|
// Show success toast
|
||||||
|
document.getElementById("toast-message").innerText =
|
||||||
|
data.message;
|
||||||
|
toast.show();
|
||||||
|
setTimeout(() => {
|
||||||
|
window.location.href = "/data/business-industries";
|
||||||
|
}, 2000);
|
||||||
|
} else {
|
||||||
|
// Show error toast with message from API
|
||||||
|
document.getElementById("toast-message").innerText =
|
||||||
|
data.message;
|
||||||
|
toast.show();
|
||||||
|
submitButton.disabled = false;
|
||||||
|
spinner.classList.add("d-none");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// Show error toast for network errors
|
||||||
|
document.getElementById("toast-message").innerText =
|
||||||
|
data.message;
|
||||||
|
toast.show();
|
||||||
|
submitButton.disabled = false;
|
||||||
|
spinner.classList.add("d-none");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", function (e) {
|
||||||
|
new UpdateBusinessIndustries().init();
|
||||||
|
});
|
||||||
176
resources/js/chatbot/index.js
Normal file
176
resources/js/chatbot/index.js
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
import GlobalConfig from "../global-config.js";
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
document.querySelectorAll(".nav-link").forEach(tab => {
|
||||||
|
tab.addEventListener("click", function () {
|
||||||
|
setTimeout(() => {
|
||||||
|
const tab_active = getActiveTabId();
|
||||||
|
console.log("Active Tab ID:", tab_active);
|
||||||
|
}, 100); // Timeout untuk memastikan class `active` sudah diperbarui
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const textarea = document.getElementById("user-message");
|
||||||
|
const sendButton = document.getElementById("send");
|
||||||
|
const conversationArea = document.querySelector(".row.flex-grow");
|
||||||
|
|
||||||
|
// Fungsi untuk mengirim pesan
|
||||||
|
async function sendMessage() {
|
||||||
|
const userText = textarea.value.trim();
|
||||||
|
if (userText !== "") {
|
||||||
|
// Kosongkan textarea setelah mengirim
|
||||||
|
textarea.value = "";
|
||||||
|
|
||||||
|
// Ambil tab aktif saat ini
|
||||||
|
const currentTab = getActiveTabId();
|
||||||
|
|
||||||
|
// Tambahkan pesan user ke UI
|
||||||
|
addMessage(userText, "user");
|
||||||
|
|
||||||
|
// Tambahkan pesan bot sementara dengan "Loading..."
|
||||||
|
const botMessageElement = addMessage('<div class="loader w-auto"></div>', "bot");
|
||||||
|
|
||||||
|
// Panggil API untuk mendapatkan response dari bot
|
||||||
|
const botResponse = await getBotResponse(currentTab, userText);
|
||||||
|
|
||||||
|
// Perbarui pesan bot dengan respons yang sebenarnya
|
||||||
|
botMessageElement.innerHTML = botResponse;;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Event listener untuk klik tombol
|
||||||
|
sendButton.addEventListener("click", sendMessage);
|
||||||
|
|
||||||
|
// Event listener untuk menekan Enter di textarea
|
||||||
|
textarea.addEventListener("keydown", function (event) {
|
||||||
|
if (event.key === "Enter" && !event.shiftKey) {
|
||||||
|
event.preventDefault(); // Mencegah newline di textarea
|
||||||
|
sendMessage(); // Panggil fungsi kirim pesan
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function addMessage(text, sender) {
|
||||||
|
const messageRow = document.createElement("div");
|
||||||
|
messageRow.classList.add("row", "flex-grow", "overflow-auto");
|
||||||
|
|
||||||
|
const messageCol = document.createElement("div");
|
||||||
|
messageCol.classList.add("w-auto", "d-inline-block"); // Menyesuaikan lebar konten
|
||||||
|
|
||||||
|
if (sender === "user") {
|
||||||
|
messageCol.classList.add("ms-auto", "max-w-50"); // Rata kanan, max 50% (setara col-6)
|
||||||
|
} else {
|
||||||
|
messageCol.classList.add("max-w-75"); // Max 75% (setara col-9)
|
||||||
|
|
||||||
|
// Tambahkan avatar hanya untuk bot
|
||||||
|
const avatarSpan = document.createElement("span");
|
||||||
|
avatarSpan.classList.add("d-flex", "align-items-center", "mb-1");
|
||||||
|
|
||||||
|
const avatarImg = document.createElement("img");
|
||||||
|
avatarImg.classList.add("rounded-circle");
|
||||||
|
avatarImg.width = 32;
|
||||||
|
avatarImg.src = "/images/iconchatbot.jpeg";
|
||||||
|
avatarImg.alt = "bot-avatar";
|
||||||
|
|
||||||
|
avatarSpan.appendChild(avatarImg);
|
||||||
|
messageCol.appendChild(avatarSpan);
|
||||||
|
}
|
||||||
|
|
||||||
|
const messageDiv = document.createElement("div");
|
||||||
|
messageDiv.classList.add("p-2", "rounded", "mb-2");
|
||||||
|
|
||||||
|
if (sender === "user") {
|
||||||
|
messageDiv.classList.add("user-response", "bg-primary", "text-white");
|
||||||
|
} else {
|
||||||
|
messageDiv.classList.add("bot-response", "bg-light");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Menyisipkan konten HTML langsung (bisa berupa teks atau loader)
|
||||||
|
messageDiv.innerHTML = text;
|
||||||
|
messageCol.appendChild(messageDiv);
|
||||||
|
messageRow.appendChild(messageCol);
|
||||||
|
|
||||||
|
// Tambahkan ke area percakapan
|
||||||
|
conversationArea.appendChild(messageRow);
|
||||||
|
|
||||||
|
// Scroll otomatis ke bawah
|
||||||
|
conversationArea.scrollTop = conversationArea.scrollHeight;
|
||||||
|
|
||||||
|
return messageDiv; // Mengembalikan elemen agar bisa diperbarui nanti
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// function addMessage(text, sender) {
|
||||||
|
// const messageRow = document.createElement("div");
|
||||||
|
// messageRow.classList.add("row", "flex-grow", "overflow-auto");
|
||||||
|
|
||||||
|
// const messageCol = document.createElement("div");
|
||||||
|
// messageCol.classList.add("col-9", "w-auto");
|
||||||
|
|
||||||
|
// if (sender === "user") {
|
||||||
|
// messageCol.classList.add("ms-auto"); // Geser ke kanan untuk user
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const messageDiv = document.createElement("div");
|
||||||
|
// messageDiv.classList.add("p-2", "rounded", "mb-2");
|
||||||
|
|
||||||
|
// if (sender === "user") {
|
||||||
|
// messageDiv.classList.add("user-response", "bg-primary", "text-white");
|
||||||
|
// } else {
|
||||||
|
// messageDiv.classList.add("bot-response", "bg-light");
|
||||||
|
|
||||||
|
// // Tambahkan avatar hanya untuk bot
|
||||||
|
// const avatarSpan = document.createElement("span");
|
||||||
|
// avatarSpan.classList.add("d-flex", "align-items-center", "mb-1");
|
||||||
|
|
||||||
|
// const avatarImg = document.createElement("img");
|
||||||
|
// avatarImg.classList.add("rounded-circle");
|
||||||
|
// avatarImg.width = 32;
|
||||||
|
// avatarImg.src = "/images/iconchatbot.jpeg";
|
||||||
|
// avatarImg.alt = "bot-avatar";
|
||||||
|
|
||||||
|
// avatarSpan.appendChild(avatarImg);
|
||||||
|
// messageCol.appendChild(avatarSpan);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Menyisipkan konten HTML langsung (bisa berupa teks atau loader)
|
||||||
|
// messageDiv.innerHTML = text;
|
||||||
|
// messageCol.appendChild(messageDiv);
|
||||||
|
// messageRow.appendChild(messageCol);
|
||||||
|
|
||||||
|
// // Tambahkan ke area percakapan
|
||||||
|
// conversationArea.appendChild(messageRow);
|
||||||
|
|
||||||
|
// // Scroll otomatis ke bawah
|
||||||
|
// conversationArea.scrollTop = conversationArea.scrollHeight;
|
||||||
|
|
||||||
|
// return messageDiv; // Mengembalikan elemen agar bisa diperbarui nanti
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Fungsi untuk memanggil API
|
||||||
|
async function getBotResponse(tab_active, userText) {
|
||||||
|
try {
|
||||||
|
const url = `${GlobalConfig.apiHost}/api/generate-text`;
|
||||||
|
const response = await fetch(url, {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({tab_active:tab_active, prompt: userText }),
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${document
|
||||||
|
.querySelector('meta[name="api-token"]')
|
||||||
|
.getAttribute("content")}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
return data.response || "Maaf, saya tidak mengerti.";
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching bot response:", error);
|
||||||
|
return "Terjadi kesalahan, coba lagi nanti.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function getActiveTabId() {
|
||||||
|
const activeTab = document.querySelector(".nav-link.active");
|
||||||
|
return activeTab ? activeTab.id : null;
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user