Compare commits
27 Commits
feature/um
...
fix/merge-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9efb6c346e | ||
|
|
6ba62da5ca | ||
|
|
ba95c185de | ||
|
|
b4b34b503e | ||
|
|
1a15bc03f8 | ||
|
|
2bf4b8b327 | ||
|
|
cb90f69d1e | ||
|
|
6307417ae3 | ||
|
|
55dc0751d3 | ||
|
|
97ffd322a1 | ||
|
|
6fb59e58e9 | ||
|
|
7e99d547c8 | ||
|
|
65f82c9bfd | ||
|
|
44ebc20d3c | ||
|
|
b60bbd4290 | ||
|
|
29b705b59c | ||
|
|
95ab8eff7f | ||
|
|
bfc2f7f1f9 | ||
|
|
50f1757a64 | ||
|
|
d54edb7783 | ||
|
|
3309664bae | ||
|
|
4eac6ab83d | ||
|
|
604e0d8479 | ||
|
|
99e99fa2e6 | ||
|
|
ff324014f6 | ||
|
|
7d06e12de8 | ||
|
|
f38d518f96 |
@@ -4,6 +4,7 @@ APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_TIMEZONE=UTC
|
||||
APP_URL=http://localhost
|
||||
API_URL=http://localhost:8000
|
||||
|
||||
APP_LOCALE=en
|
||||
APP_FALLBACK_LOCALE=en
|
||||
@@ -65,6 +66,5 @@ AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
VITE_APP_NAME="${APP_NAME}"
|
||||
|
||||
SIMBG_HOST="xxxxxx"
|
||||
SIMBG_EMAIL="xxxxxx"
|
||||
SIMBG_PASSWORD="xxxxx"
|
||||
API_KEY_GOOGLE="xxxxx"
|
||||
SPREAD_SHEET_ID="xxxxx"
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\ServiceSIMBG;
|
||||
use App\Services\ServiceSIMBG;
|
||||
use Illuminate\Console\Command;
|
||||
use \Illuminate\Support\Facades\Log;
|
||||
|
||||
@@ -25,10 +25,16 @@ class ExecuteScraping extends Command
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
|
||||
private $service_simbg;
|
||||
|
||||
public function __construct(ServiceSIMBG $service_simbg){
|
||||
$this->service_simbg = $service_simbg;
|
||||
parent::__construct();
|
||||
}
|
||||
public function handle()
|
||||
{
|
||||
Log::info("running scheduler daily scraping");
|
||||
$service = new ServiceSIMBG();
|
||||
$service->syncTaskList();
|
||||
$this->service_simbg->syncTaskList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ class AdvertisementController extends Controller
|
||||
$advertisement->village_name = $village ? $village->village_name : null;
|
||||
|
||||
$district = DB::table('districts')->where('district_code', $advertisement->district_code)->first();
|
||||
$advertisement->district_name = $district ? $district->district_name : null;
|
||||
$advertisement->district_name = $district ? $district->district_name : null;
|
||||
return $advertisement;
|
||||
});
|
||||
|
||||
@@ -75,10 +75,10 @@ class AdvertisementController extends Controller
|
||||
{
|
||||
$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
|
||||
$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;
|
||||
@@ -142,10 +142,10 @@ class AdvertisementController extends Controller
|
||||
{
|
||||
$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
|
||||
$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;
|
||||
@@ -196,17 +196,4 @@ class AdvertisementController extends Controller
|
||||
|
||||
return response()->json($results);
|
||||
}
|
||||
|
||||
public function downloadExcelAdvertisement()
|
||||
{
|
||||
$filePath = storage_path('app/public/templateFile/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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,63 +11,162 @@ class DashboardController extends Controller
|
||||
{
|
||||
use GlobalApiResponse;
|
||||
|
||||
public function businnessDocument(Request $request){
|
||||
$businessData = DB::table('pbg_task')
|
||||
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
|
||||
->select(
|
||||
DB::raw('COUNT(DISTINCT pbg_task.id) as task_count'),
|
||||
DB::raw('SUM(pbg_task_retributions.nilai_retribusi_bangunan) as total_retribution')
|
||||
)
|
||||
->where(function ($query) {
|
||||
$query->where("pbg_task.function_type", "LIKE", "sebagai tempat usaha%");
|
||||
})
|
||||
->first();
|
||||
$taskCount = $businessData->task_count;
|
||||
$taskTotal = $businessData->total_retribution;
|
||||
$result = [
|
||||
public function businnessDocument(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
"year" => "required|integer"
|
||||
]);
|
||||
|
||||
$current_year = $request->get('year');
|
||||
|
||||
$startOfYear = "$current_year-01-01 00:00:00";
|
||||
$endOfYear = "$current_year-12-31 23:59:59";
|
||||
$query = once(function () use ($startOfYear, $endOfYear) {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid')
|
||||
->whereBetween("pt.task_created_at", [$startOfYear, $endOfYear])
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->orWhereNull('ptgs.status_verifikasi');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(pt.function_type)) = ?', [strtolower(trim('Sebagai Tempat Usaha'))]);
|
||||
})
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution')
|
||||
->first();
|
||||
});
|
||||
|
||||
$taskCount = $query->total_data ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
|
||||
return $this->resSuccess([
|
||||
"count" => $taskCount,
|
||||
"series" => [$taskCount],
|
||||
"total" => $taskTotal
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
]);
|
||||
}
|
||||
public function nonBusinnessDocument(Request $request){
|
||||
$businessData = DB::table('pbg_task')
|
||||
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
|
||||
->select(
|
||||
DB::raw('COUNT(DISTINCT pbg_task.id) as task_count'),
|
||||
DB::raw('SUM(pbg_task_retributions.nilai_retribusi_bangunan) as total_retribution')
|
||||
)
|
||||
$request->validate([
|
||||
"year" => "required|integer"
|
||||
]);
|
||||
|
||||
$current_year = $request->get('year');
|
||||
|
||||
$startOfYear = "$current_year-01-01 00:00:00";
|
||||
$endOfYear = "$current_year-12-31 23:59:59";
|
||||
|
||||
$query = once( function () use ($startOfYear, $endOfYear) {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Join ke pbg_task_retributions
|
||||
->whereBetween("pt.task_created_at", [$startOfYear, $endOfYear])
|
||||
->where(function ($query) {
|
||||
$query->where("pbg_task.function_type", "NOT LIKE", "sebagai tempat usaha%")
|
||||
->orWhereNull("pbg_task.function_type");
|
||||
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->orWhereNull('ptgs.status_verifikasi'); // Include NULL values
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(pt.function_type)) != ?', [strtolower(trim('Sebagai Tempat Usaha'))])
|
||||
->orWhereNull('pt.function_type'); // Include NULL values
|
||||
})
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
|
||||
->first();
|
||||
$taskCount = $businessData->task_count;
|
||||
$taskTotal = $businessData->total_retribution;
|
||||
$result = [
|
||||
});
|
||||
$taskCount = $query->total_data ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
return $this->resSuccess([
|
||||
"count" => $taskCount,
|
||||
"series" => [$taskCount],
|
||||
"total" => $taskTotal
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
]);
|
||||
}
|
||||
public function allTaskDocuments(){
|
||||
$query = DB::table('pbg_task')
|
||||
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
|
||||
public function allTaskDocuments(Request $request){
|
||||
$request->validate([
|
||||
"year" => "required|integer"
|
||||
]);
|
||||
|
||||
$current_year = $request->get('year');
|
||||
|
||||
$startOfYear = "$current_year-01-01 00:00:00";
|
||||
$endOfYear = "$current_year-12-31 23:59:59";
|
||||
$query = once( function () use ($startOfYear, $endOfYear) {
|
||||
return DB::table('pbg_task as pt')
|
||||
->leftJoin('pbg_task_retributions as ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid')
|
||||
->whereBetween("pt.task_created_at", [$startOfYear, $endOfYear])
|
||||
->select(
|
||||
DB::raw('COUNT(DISTINCT pbg_task.id) as task_count'),
|
||||
DB::raw('SUM(pbg_task_retributions.nilai_retribusi_bangunan) as total_retribution')
|
||||
DB::raw('COUNT(DISTINCT pt.id) as task_count'),
|
||||
DB::raw('SUM(ptr.nilai_retribusi_bangunan) as total_retribution')
|
||||
)
|
||||
->first();
|
||||
$taskCount = $query->task_count;
|
||||
$taskTotal = $query->total_retribution;
|
||||
$result = [
|
||||
});
|
||||
$taskCount = $query->task_count ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
return $this->resSuccess([
|
||||
"count" => $taskCount,
|
||||
"series" => [$taskCount],
|
||||
"total" => $taskTotal
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
]);
|
||||
}
|
||||
|
||||
public function verificationDocuments(Request $request){
|
||||
$request->validate([
|
||||
"year" => "required|integer"
|
||||
]);
|
||||
|
||||
$current_year = $request->get('year');
|
||||
|
||||
$startOfYear = "$current_year-01-01 00:00:00";
|
||||
$endOfYear = "$current_year-12-31 23:59:59";
|
||||
$query = once( function () use ($startOfYear, $endOfYear){
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid')
|
||||
->whereBetween("pt.task_created_at", [$startOfYear, $endOfYear])
|
||||
->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) = ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution')
|
||||
->first();
|
||||
});
|
||||
|
||||
$taskCount = $query->total_data ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
|
||||
return $this->resSuccess([
|
||||
"count"=> $taskCount,
|
||||
"total"=> $taskTotal
|
||||
]);
|
||||
}
|
||||
|
||||
public function nonVerificationDocuments(Request $request){
|
||||
$request->validate([
|
||||
"year" => "required|integer"
|
||||
]);
|
||||
|
||||
$current_year = $request->get('year');
|
||||
|
||||
$startOfYear = "$current_year-01-01 00:00:00";
|
||||
$endOfYear = "$current_year-12-31 23:59:59";
|
||||
|
||||
$query = once(function () use ($startOfYear, $endOfYear) {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Join tabel pbg_task_retributions
|
||||
->whereBetween("pt.task_created_at", [$startOfYear, $endOfYear])
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->orWhereNull('ptgs.status_verifikasi'); // Include NULL values
|
||||
})
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
|
||||
->first();
|
||||
});
|
||||
|
||||
$taskCount = $query->total_data ?? 0;
|
||||
$taskTotal = $query->total_retribution ?? 0;
|
||||
|
||||
return $this->resSuccess([
|
||||
"count"=> $taskCount,
|
||||
"total"=> $taskTotal
|
||||
]);
|
||||
}
|
||||
|
||||
public function pbgTaskDocuments(Request $request){
|
||||
|
||||
104
app/Http/Controllers/Api/DataSettingController.php
Normal file
104
app/Http/Controllers/Api/DataSettingController.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\DataSettingRequest;
|
||||
use App\Http\Resources\DataSettingResource;
|
||||
use App\Models\DataSetting;
|
||||
use App\Traits\GlobalApiResponse;
|
||||
use Exception;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class DataSettingController extends Controller
|
||||
{
|
||||
use GlobalApiResponse;
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$query = DataSetting::query()->orderBy('id', 'desc');
|
||||
if ($request->has("search") && !empty($request->get("search"))) {
|
||||
$query = $query->where("key", $request->get("search"));
|
||||
}
|
||||
|
||||
return DataSettingResource::collection($query->paginate());
|
||||
} catch (Exception $e) {
|
||||
return $this->resError($e->getMessage(), $e->getTrace());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(DataSettingRequest $request)
|
||||
{
|
||||
try {
|
||||
$data = DataSetting::create($request->validated());
|
||||
$result = [
|
||||
"success" => true,
|
||||
"message" => "Data Setting created successfully",
|
||||
"data" => new DataSettingResource($data)
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
} catch (Exception $e) {
|
||||
return $this->resError($e->getMessage(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
try {
|
||||
$setting = DataSetting::findOrFail($id);
|
||||
$result = [
|
||||
"setting" => true,
|
||||
"message" => "Data setting successfully",
|
||||
"data" => new DataSettingResource($setting)
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
} catch (Exception $e) {
|
||||
return $this->resError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(DataSettingRequest $request, string $id)
|
||||
{
|
||||
try {
|
||||
$data = DataSetting::findOrFail($id);
|
||||
$data->update($request->validated());
|
||||
$result = [
|
||||
"success" => true,
|
||||
"message" => "Data Setting updated successfully"
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
} catch (Exception $e) {
|
||||
return $this->resError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
try {
|
||||
$setting = DataSetting::findOrFail($id);
|
||||
$setting->delete();
|
||||
$result = [
|
||||
"success" => true,
|
||||
"message" => "Data Setting deleted successfully"
|
||||
];
|
||||
return $this->resSuccess($result);
|
||||
} catch (Exception $e) {
|
||||
return $this->resError($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
61
app/Http/Controllers/Api/GoogleSheetController.php
Normal file
61
app/Http/Controllers/Api/GoogleSheetController.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\GoogleSheetService;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class GoogleSheetController extends Controller
|
||||
{
|
||||
protected $googleSheetService;
|
||||
public function __construct(GoogleSheetService $googleSheetService){
|
||||
$this->googleSheetService = $googleSheetService;
|
||||
}
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$dataCollection = $this->googleSheetService->getSheetDataCollection();
|
||||
$result = [
|
||||
"last_row" => $this->googleSheetService->getLastRowByColumn("C"),
|
||||
"last_column" => $this->googleSheetService->getLastColumn(),
|
||||
"header" => $this->googleSheetService->getHeader(),
|
||||
"data_collection" => $dataCollection
|
||||
];
|
||||
return response()->json($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
56
app/Http/Controllers/Api/MenusController.php
Normal file
56
app/Http/Controllers/Api/MenusController.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Menu;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class MenusController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = Menu::query();
|
||||
|
||||
if($request->has("search") && !empty($request->get("search"))){
|
||||
$query = $query->where("name", "like", "%".$request->get("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(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
325
app/Http/Controllers/Api/PbgTaskController.php
Normal file
325
app/Http/Controllers/Api/PbgTaskController.php
Normal file
@@ -0,0 +1,325 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Enums\ImportDatasourceStatus;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\PbgTaskMultiStepRequest;
|
||||
use App\Http\Resources\PbgTaskResource;
|
||||
use App\Models\ImportDatasource;
|
||||
use App\Models\PbgTask;
|
||||
use App\Models\PbgTaskGoogleSheet;
|
||||
use App\Services\GoogleSheetService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PbgTaskController extends Controller
|
||||
{
|
||||
protected $googleSheetService;
|
||||
public function __construct(GoogleSheetService $googleSheetService){
|
||||
$this->googleSheetService = $googleSheetService;
|
||||
}
|
||||
public function index()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(PbgTaskMultiStepRequest $request)
|
||||
{
|
||||
try {
|
||||
$data = PbgTask::create([
|
||||
"uuid" => $request->input("step1Form.uuid"),
|
||||
"name" => $request->input("step1Form.name"),
|
||||
"owner_name" => $request->input("step1Form.owner_name"),
|
||||
"application_type" => $request->input("step1Form.application_type"),
|
||||
"application_type_name" => $request->input("step1Form.application_type_name"),
|
||||
"condition" => $request->input("step1Form.condition"),
|
||||
"registration_number" => $request->input("step1Form.registration_number"),
|
||||
"document_number" => $request->input("step1Form.document_number"),
|
||||
"address" => $request->input("step1Form.address"),
|
||||
"status" => $request->input("step1Form.status"),
|
||||
"status_name" => $request->input("step1Form.status_name"),
|
||||
"slf_status" => $request->input("step1Form.slf_status"),
|
||||
"slf_status_name" => $request->input("step1Form.slf_status_name"),
|
||||
"function_type" => $request->input("step1Form.function_type"),
|
||||
"consultation_type" => $request->input("step1Form.consultation_type"),
|
||||
"due_date" => $request->input("step1Form.due_date"),
|
||||
"land_certificate_phase" => $request->input("step1Form.land_certificate_phase"),
|
||||
"task_created_at" => $request->input("step1Form.task_created_at"),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
"success" => true,
|
||||
"message" => "Step 1 berhasil disimpan!",
|
||||
"data" => $data
|
||||
], 201);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json([
|
||||
"success" => false,
|
||||
"message" => "Gagal menyimpan data",
|
||||
"error" => $e->getMessage()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
try{
|
||||
$pbg_task = PbgTask::with(['pbg_task_retributions','pbg_task_index_integrations','pbg_task_retributions.pbg_task_prasarana'])->findOrFail($id);
|
||||
return response()->json([
|
||||
"success"=> true,
|
||||
"message"=> "Data ditemukan",
|
||||
"data"=> $pbg_task
|
||||
]);
|
||||
}catch(\Exception $e){
|
||||
return response()->json([
|
||||
"success"=> false,
|
||||
"message"=> $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
protected function validatePbgTask(Request $request){
|
||||
return $request->validate([
|
||||
"uuid" => $request->input("step1Form.uuid"),
|
||||
]);
|
||||
}
|
||||
|
||||
public function syncPbgFromGoogleSheet(){
|
||||
try{
|
||||
$totalRowCount = $this->googleSheetService->getLastRowByColumn("C");
|
||||
$sheetData = $this->googleSheetService->getSheetDataCollection($totalRowCount);
|
||||
$mapToUpsert = [];
|
||||
$count = 0;
|
||||
|
||||
$import_datasource = ImportDatasource::create([
|
||||
"message" => "initialization",
|
||||
"response_body" => null,
|
||||
"status" => ImportDatasourceStatus::Processing->value,
|
||||
]);
|
||||
|
||||
foreach($sheetData as $data){
|
||||
$mapToUpsert[] =
|
||||
[
|
||||
'no_registrasi' => $data['no__registrasi'] ?? null,
|
||||
'jenis_konsultasi' => $data['jenis_konsultasi'] ?? null,
|
||||
'fungsi_bg' => $data['fungsi_bg'] ?? null,
|
||||
'tgl_permohonan' => $this->convertToDate($data['tgl_permohonan']),
|
||||
'status_verifikasi' => $data['status_verifikasi'] ?? null,
|
||||
'status_permohonan' => $this->convertToDate($data['status_permohonan']),
|
||||
'alamat_pemilik' => $data['alamat_pemilik'] ?? null,
|
||||
'no_hp' => $data['no__hp'] ?? null,
|
||||
'email' => $data['e_mail'] ?? null,
|
||||
'tanggal_catatan' => $this->convertToDate($data['tanggal_catatan']),
|
||||
'catatan_kekurangan_dokumen' => $data['catatan_kekurangan_dokumen'] ?? null,
|
||||
'gambar' => $data['gambar'] ?? null,
|
||||
'krk_kkpr' => $data['krk_kkpr'] ?? null,
|
||||
'no_krk' => $data['no__krk'] ?? null,
|
||||
'lh' => $data['lh'] ?? null,
|
||||
'ska' => $data['ska'] ?? null,
|
||||
'keterangan' => $data['keterangan'] ?? null,
|
||||
'helpdesk' => $data['helpdesk'] ?? null,
|
||||
'pj' => $data['pj'] ?? null,
|
||||
'kepemilikan' => $data['kepemilikan'] ?? null,
|
||||
'potensi_taru' => $data['potensi_taru'] ?? null,
|
||||
'validasi_dinas' => $data['validasi_dinas'] ?? null,
|
||||
'kategori_retribusi' => $data['kategori_retribusi'] ?? null,
|
||||
'no_urut_ba_tpt' => $data['no__urut_ba_tpt__2024_0001_'] ?? null,
|
||||
'tanggal_ba_tpt' => $this->convertToDate($data['tanggal_ba_tpt']),
|
||||
'no_urut_ba_tpa' => $data['no__urut_ba_tpa'] ?? null,
|
||||
'tanggal_ba_tpa' => $this->convertToDate($data['tanggal_ba_tpa']),
|
||||
'no_urut_skrd' => $data['no__urut_skrd__2024_0001_'] ?? null,
|
||||
'tanggal_skrd' => $this->convertToDate($data['tanggal_skrd']),
|
||||
'ptsp' => $data['ptsp'] ?? null,
|
||||
'selesai_terbit' => $data['selesai_terbit'] ?? null,
|
||||
'tanggal_pembayaran' => $this->convertToDate($data['tanggal_pembayaran__yyyy_mm_dd_']),
|
||||
'format_sts' => $data['format_sts'] ?? null,
|
||||
'tahun_terbit' => (int) $data['tahun_terbit'] ?? null,
|
||||
'tahun_berjalan' => (int) $data['tahun_berjalan'] ?? null,
|
||||
'kelurahan' => $data['kelurahan'] ?? null,
|
||||
'kecamatan' => $data['kecamatan'] ?? null,
|
||||
'lb' => $this->convertToDecimal($data['lb']) ?? null,
|
||||
'tb' => $this->convertToDecimal($data['tb']) ?? null,
|
||||
'jlb' => (int) $data['jlb'] ?? null,
|
||||
'unit' => (int) $data['unit'] ?? null,
|
||||
'usulan_retribusi' => (int) $data['usulan_retribusi'] ?? null,
|
||||
'nilai_retribusi_keseluruhan_simbg' => $this->convertToDecimal($data['nilai_retribusi_keseluruhan__simbg_']) ?? null,
|
||||
'nilai_retribusi_keseluruhan_pad' => $this->convertToDecimal($data['nilai_retribusi_keseluruhan__pad_']) ?? null,
|
||||
'denda' => $this->convertToDecimal($data['denda']) ?? null,
|
||||
'latitude' => $data['latitude'] ?? null,
|
||||
'longitude' => $data['longitude'] ?? null,
|
||||
'nik_nib' => $data['nik_nib'] ?? null,
|
||||
'dok_tanah' => $data['dok__tanah'] ?? null,
|
||||
'temuan' => $data['temuan'] ?? null,
|
||||
];
|
||||
}
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
$batchSize = 1000;
|
||||
$chunks = array_chunk($mapToUpsert, $batchSize);
|
||||
|
||||
foreach($chunks as $chunk){
|
||||
PbgTaskGoogleSheet::upsert($chunk, ["no_registrasi"],[
|
||||
'jenis_konsultasi',
|
||||
'nama_pemilik',
|
||||
'lokasi_bg',
|
||||
'fungsi_bg',
|
||||
'nama_bangunan',
|
||||
'tgl_permohonan',
|
||||
'status_verifikasi',
|
||||
'status_permohonan',
|
||||
'alamat_pemilik',
|
||||
'no_hp',
|
||||
'email',
|
||||
'tanggal_catatan',
|
||||
'catatan_kekurangan_dokumen',
|
||||
'gambar',
|
||||
'krk_kkpr',
|
||||
'no_krk',
|
||||
'lh',
|
||||
'ska',
|
||||
'keterangan',
|
||||
'helpdesk',
|
||||
'pj',
|
||||
'kepemilikan',
|
||||
'potensi_taru',
|
||||
'validasi_dinas',
|
||||
'kategori_retribusi',
|
||||
'no_urut_ba_tpt',
|
||||
'tanggal_ba_tpt',
|
||||
'no_urut_ba_tpa',
|
||||
'tanggal_ba_tpa',
|
||||
'no_urut_skrd',
|
||||
'tanggal_skrd',
|
||||
'ptsp',
|
||||
'selesai_terbit',
|
||||
'tanggal_pembayaran',
|
||||
'format_sts',
|
||||
'tahun_terbit',
|
||||
'tahun_berjalan',
|
||||
'kelurahan',
|
||||
'kecamatan',
|
||||
'lb',
|
||||
'tb',
|
||||
'jlb',
|
||||
'unit',
|
||||
'usulan_retribusi',
|
||||
'nilai_retribusi_keseluruhan_simbg',
|
||||
'nilai_retribusi_keseluruhan_pad',
|
||||
'denda',
|
||||
'latitude',
|
||||
'longitude',
|
||||
'nik_nib',
|
||||
'dok_tanah',
|
||||
'temuan',
|
||||
]);
|
||||
}
|
||||
|
||||
$total_data = count($mapToUpsert);
|
||||
|
||||
$import_datasource->update([
|
||||
"message" => "Successfully imported {$total_data}",
|
||||
"status" => ImportDatasourceStatus::Success->value,
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
"success" => true,
|
||||
"message" => "Data berhasil disimpan ke database"
|
||||
], 200);
|
||||
}catch(\Exception $ex){
|
||||
DB::rollBack();
|
||||
$import_datasource->update([
|
||||
"message" => "Failed to importing",
|
||||
"response_body" => $ex->getMessage(),
|
||||
"status" => ImportDatasourceStatus::Failed->value,
|
||||
]);
|
||||
return response()->json([
|
||||
"success" => false,
|
||||
"message" => "Gagal menyimpan data",
|
||||
"error" => $ex->getMessage()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
protected function convertToDecimal(?string $value): ?float
|
||||
{
|
||||
if (empty($value)) {
|
||||
return null; // Return null if the input is empty
|
||||
}
|
||||
|
||||
// Remove all non-numeric characters except comma and dot
|
||||
$value = preg_replace('/[^0-9,\.]/', '', $value);
|
||||
|
||||
// If the number contains both dot (.) and comma (,)
|
||||
if (strpos($value, '.') !== false && strpos($value, ',') !== false) {
|
||||
$value = str_replace('.', '', $value); // Remove thousands separator
|
||||
$value = str_replace(',', '.', $value); // Convert decimal separator to dot
|
||||
}
|
||||
// If only a dot is present (assumed as thousands separator)
|
||||
elseif (strpos($value, '.') !== false) {
|
||||
$value = str_replace('.', '', $value); // Remove all dots (treat as thousands separators)
|
||||
}
|
||||
// If only a comma is present (assumed as decimal separator)
|
||||
elseif (strpos($value, ',') !== false) {
|
||||
$value = str_replace(',', '.', $value); // Convert comma to dot (decimal separator)
|
||||
}
|
||||
|
||||
// Ensure the value is numeric before returning
|
||||
return is_numeric($value) ? (float) number_format((float) $value, 2, '.', '') : null;
|
||||
}
|
||||
|
||||
protected function convertToInteger($value) {
|
||||
// Check if the value is an empty string, and return null if true
|
||||
if (trim($value) === "") {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Otherwise, cast to integer
|
||||
return (int) $value;
|
||||
}
|
||||
|
||||
protected function convertToDate($dateString)
|
||||
{
|
||||
try {
|
||||
// Check if the string is empty
|
||||
if (empty($dateString)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Try to parse the date string
|
||||
$date = Carbon::parse($dateString);
|
||||
|
||||
// Return the Carbon instance
|
||||
return $date->format('Y-m-d');
|
||||
} catch (\Exception $e) {
|
||||
// Return null if an error occurs during parsing
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,10 @@ class RequestAssignmentController extends Controller
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = PbgTask::query();
|
||||
$query = PbgTask::query()->orderBy('id', 'desc');
|
||||
if($request->has('search') && !empty($request->get("search"))){
|
||||
$query->where('name', 'LIKE', '%'.$request->get('search').'%');
|
||||
$query->where('name', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('registration_number', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
return RequestAssignmentResouce::collection($query->paginate());
|
||||
}
|
||||
|
||||
56
app/Http/Controllers/Api/RolesController.php
Normal file
56
app/Http/Controllers/Api/RolesController.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Role;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class RolesController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = Role::query();
|
||||
|
||||
if($request->has('search') && !empty($request->get('search'))){
|
||||
$query = $query->where('name', 'like', '%'. $request->get('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(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -1,117 +0,0 @@
|
||||
<?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)
|
||||
{
|
||||
info($request);
|
||||
$perPage = $request->input('per_page', 15);
|
||||
$search = $request->input('search', '');
|
||||
|
||||
$query = Tourism::query();
|
||||
$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 = $district ? $district->district_name : null;
|
||||
|
||||
$business_type = DB::table('business_type')->where('id', $tourisms->business_type_id)->first();
|
||||
$tourisms->business_type = $business_type ? $business_type->business_type : null;
|
||||
return $tourisms;
|
||||
});
|
||||
|
||||
return response()->json([
|
||||
'data' => TourismResource::collection($tourisms),
|
||||
'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
|
||||
{
|
||||
return Tourism::create($request->validated());
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 {
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
$tourism->update($request->validated());
|
||||
|
||||
return $tourism;
|
||||
}
|
||||
|
||||
public function destroy(Tourism $tourism): Response
|
||||
{
|
||||
$tourism->delete();
|
||||
|
||||
return response()->noContent();
|
||||
}
|
||||
}
|
||||
@@ -1,189 +0,0 @@
|
||||
<?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();
|
||||
|
||||
$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;
|
||||
});
|
||||
|
||||
return response()->json([
|
||||
'data' => UmkmResource::collection($umkm),
|
||||
'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'])->value('id');
|
||||
$permit_status_id = DB::table('permit_status')->where('id', $data['permit_status'])->value('id');
|
||||
$business_form_id = DB::table('business_form')->where('id', $data['business_form'])->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 = storage_path('app/public/templateFile/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);
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,19 @@
|
||||
namespace App\Http\Controllers\Dashboards;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ImportDatasource;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BigDataController extends Controller
|
||||
{
|
||||
public function index(){
|
||||
return view('dashboards.bigdata');
|
||||
$latest_import_datasource = ImportDatasource::latest()->first();
|
||||
$latest_created = $latest_import_datasource ?
|
||||
$latest_import_datasource->created_at->format("j F Y H:i:s") : null;
|
||||
return view('dashboards.bigdata', compact('latest_created'));
|
||||
}
|
||||
|
||||
public function pbg(){
|
||||
return view('index');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
<?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'),
|
||||
'business_type_id' => DB::table('business_type')->orderBy('business_type')->pluck('business_type', 'id'),
|
||||
];
|
||||
|
||||
$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 = 'Create 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;
|
||||
|
||||
$business_type = DB::table('business_type')->where('id', $modelInstance->business_type_id)->first();
|
||||
$modelInstance->business_scale_id = $business_type ? $business_type->id : 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'),
|
||||
'business_type_id' => DB::table('business_type')->orderBy('business_type')->pluck('business_type', 'id'),
|
||||
];
|
||||
|
||||
$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 [
|
||||
"business_name" => "Nama Usaha",
|
||||
"project_name" => "Nama Project",
|
||||
"business_address" => "Alamat Usaha",
|
||||
"district_name" => "Kecamatan",
|
||||
"village_name" => "Desa",
|
||||
"land_area" => "Luas Tanah",
|
||||
"investment_amount" => "Jumlah Investasi",
|
||||
"number_of_employee" => "TKI",
|
||||
"business_type_id" => "Jenis Usaha",
|
||||
];
|
||||
}
|
||||
|
||||
private function getFieldTypes()
|
||||
{
|
||||
return [
|
||||
"business_name" => "text",
|
||||
"project_name" => "text",
|
||||
"business_address" => "textarea",
|
||||
"district_name" => "combobox",
|
||||
"village_name" => "combobox",
|
||||
"land_area" => "text",
|
||||
"investment_amount" => "text",
|
||||
"number_of_employee" => "text",
|
||||
"business_type_id" => "select",
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,149 +0,0 @@
|
||||
<?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"
|
||||
];
|
||||
}
|
||||
}
|
||||
119
app/Http/Controllers/DataSettingController.php
Normal file
119
app/Http/Controllers/DataSettingController.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\DataSettingRequest;
|
||||
use App\Models\DataSetting;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Request;
|
||||
|
||||
class DataSettingController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view("data-settings.index");
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view("data-settings.create");
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(DataSettingRequest $request)
|
||||
{
|
||||
try{
|
||||
DB::beginTransaction();
|
||||
DataSetting::create($request->validated());
|
||||
DB::commit();
|
||||
return response()->json(['message' => 'Successfully created'],201);
|
||||
}catch(Exception $ex){
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'message' => 'Failed to create data setting',
|
||||
'error' => $ex->getMessage()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(DataSetting $dataSetting)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(string $id)
|
||||
{
|
||||
try{
|
||||
$data = DataSetting::findOrFail($id);
|
||||
if(empty($data)){
|
||||
return redirect()->route('data-settings.index')->with('error', 'Invalid id');
|
||||
}
|
||||
return view("data-settings.edit", compact("data"));
|
||||
}catch(Exception $ex){
|
||||
return redirect()->route("data-settings.index")->with("error", "Invalid id");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(DataSettingRequest $request,string $id)
|
||||
{
|
||||
try{
|
||||
DB::beginTransaction();
|
||||
$data = DataSetting::findOrFail($id);
|
||||
$data->update($request->validated());
|
||||
DB::commit();
|
||||
return response()->json(['message' => 'Successfully updated'], 200);
|
||||
}catch(Exception $ex){
|
||||
DB::rollBack();
|
||||
return response()->json(['message' => $ex->getMessage()],500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
try{
|
||||
DB::beginTransaction();
|
||||
DataSetting::findOrFail($id)->delete();
|
||||
DB::commit();
|
||||
return response()->json(['success' => true, 'message' => 'Item deleted successfully.'], 200);
|
||||
}catch(Exception $e){
|
||||
DB::rollBack();
|
||||
Log::error($e->getMessage());
|
||||
return response()->json(['success' => false, 'message' => 'Failed to delete item.'], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function getValueSetting(Request $request){
|
||||
try{
|
||||
$data = DataSetting::where('key', $request->key_name)->first();
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => "Successfully retrieved data",
|
||||
"data"=> $data
|
||||
]);
|
||||
}catch(Exception $e){
|
||||
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,10 @@
|
||||
namespace App\Http\Controllers\Master;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Role;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\Rules;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Models\User;
|
||||
@@ -22,7 +25,8 @@ class UsersController extends Controller
|
||||
return view('master.users.index', compact('users'));
|
||||
}
|
||||
public function create(){
|
||||
return view('master.users.create');
|
||||
$roles = Role::all();
|
||||
return view('master.users.create', compact('roles'));
|
||||
}
|
||||
public function store(Request $request){
|
||||
$request->validate([
|
||||
@@ -31,21 +35,29 @@ class UsersController extends Controller
|
||||
'password' => ['required', 'confirmed', 'max:255'],
|
||||
'firstname' => ['required', 'string', 'max:255'],
|
||||
'lastname' => ['required', 'string', 'max:255'],
|
||||
'position' => ['required', 'string', 'max:255']
|
||||
'position' => ['required', 'string', 'max:255'],
|
||||
'role_id' => 'required|exists:roles,id'
|
||||
]);
|
||||
|
||||
// dd($request);
|
||||
DB::beginTransaction();
|
||||
try{
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
'firstname' => $request->firstname,
|
||||
'lastname' => $request->lastname,
|
||||
'position' => $request->position
|
||||
]);
|
||||
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
'firstname' => $request->firstname,
|
||||
'lastname' => $request->lastname,
|
||||
'position' => $request->position
|
||||
]);
|
||||
$user->roles()->attach($request->role_id);
|
||||
|
||||
return redirect()->route('users.index')->with('success','Successfully registered');
|
||||
DB::commit();
|
||||
return response()->json(['message' => 'Successfully created'],201);
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
return response()->json(['message' => $e->getMessage()],500);
|
||||
};
|
||||
}
|
||||
public function show($id){
|
||||
$user = User::find($id);
|
||||
@@ -53,24 +65,40 @@ class UsersController extends Controller
|
||||
}
|
||||
public function edit($id){
|
||||
$user = User::find($id);
|
||||
return view('master.users.edit', compact('user'));
|
||||
$roles = Role::all();
|
||||
return view('master.users.edit', compact('user', 'roles'));
|
||||
}
|
||||
public function update(Request $request, $id){
|
||||
$user = User::find($id);
|
||||
$validate = $request->validate([
|
||||
$validatedData = $request->validate([
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
||||
'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users')->ignore($id)],
|
||||
'firstname' => ['required', 'string', 'max:255'],
|
||||
'lastname' => ['required', 'string', 'max:255'],
|
||||
'position' => ['required', 'string', 'max:255']
|
||||
'position' => ['required', 'string', 'max:255'],
|
||||
'role_id' => ['required', 'exists:roles,id'],
|
||||
]);
|
||||
$user->update($validate);
|
||||
return redirect()->route('master.users')->with('success', 'Successfully');
|
||||
try{
|
||||
DB::beginTransaction();
|
||||
$updateData = [
|
||||
'name' => $validatedData['name'],
|
||||
'email' => $validatedData['email'],
|
||||
'firstname' => $validatedData['firstname'],
|
||||
'lastname' => $validatedData['lastname'],
|
||||
'position' => $validatedData['position'],
|
||||
];
|
||||
$user->update($updateData);
|
||||
$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);
|
||||
}
|
||||
}
|
||||
public function destroy($id){
|
||||
$user = User::find($id);
|
||||
$user->delete();
|
||||
return redirect()->route('master.users')->with('success','Successfully deleted');
|
||||
return redirect()->route('users.index')->with('success','Successfully deleted');
|
||||
}
|
||||
}
|
||||
|
||||
132
app/Http/Controllers/MenusController.php
Normal file
132
app/Http/Controllers/MenusController.php
Normal file
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Menu;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class MenusController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('menus.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$parent_menus = Menu::whereNull('parent_id')->get();
|
||||
return view("menus.create", compact('parent_menus'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try{
|
||||
$request->validate([
|
||||
'name' => 'required|string|max:255',
|
||||
'url' => 'nullable|string|max:255',
|
||||
'icon' => 'nullable|string|max:255',
|
||||
'parent_id' => 'nullable|exists:menus,id', // Ensures it's either null or a valid menu ID
|
||||
'sort_order' => 'required|integer',
|
||||
]);
|
||||
DB::beginTransaction();
|
||||
Menu::create([
|
||||
'name' => $request->name,
|
||||
'url' => $request->url,
|
||||
'icon' => $request->icon,
|
||||
'parent_id' => $request->parent_id ?? null,
|
||||
'sort_order' => $request->sort_order,
|
||||
]);
|
||||
DB::commit();
|
||||
return response()->json(['message' => 'Successfully created'], 200);
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
\Log::error('Menu creation failed: ' . $e->getMessage()); // Log the error for debugging
|
||||
return response()->json(['message'=> $e->getMessage()],500);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(string $id)
|
||||
{
|
||||
$menu = Menu::findOrFail($id);
|
||||
$parent_menus = Menu::whereNull('parent_id')->where('id','!=',$id)->get();
|
||||
return view("menus.edit", compact('menu','parent_menus'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
try{
|
||||
$validateData = $request->validate([
|
||||
'name' => 'required',
|
||||
'url'=> 'required',
|
||||
'icon'=> 'nullable',
|
||||
'parent_id' => 'nullable',
|
||||
'sort_order' => 'required',
|
||||
]);
|
||||
|
||||
$menu = Menu::findOrFail($id);
|
||||
|
||||
DB::beginTransaction();
|
||||
$menu->update($validateData);
|
||||
DB::commit();
|
||||
return response()->json(['message' => 'Successfully updated'], 200);
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
\Log::error('Menu update failed: '. $e->getMessage()); // Log the error for debugging
|
||||
return response()->json(['message' => $e->getMessage()],500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
try{
|
||||
DB::beginTransaction();
|
||||
$menu = Menu::findOrFail($id);
|
||||
$this->deleteChildren($menu);
|
||||
$menu->roles()->detach();
|
||||
$menu->delete();
|
||||
DB::commit();
|
||||
return response()->json(['success' => true, 'message' => 'Successfully deleted']);
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
\Log::error('failed delete menu'. $e->getMessage());
|
||||
return response()->json(['success' => false, 'message' => 'Something went wrong! Please try again.']);
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Report;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\BusinessTypeCount;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ReportTourismController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listring of the resource
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$businessTypeCounts = BusinessTypeCount::all();
|
||||
info($businessTypeCounts);
|
||||
return view('report.tourisms.index', compact('businessTypeCounts'));
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\RequestAssignment;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\PbgTask;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PbgTaskController extends Controller
|
||||
@@ -12,7 +13,7 @@ class PbgTaskController extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('request-assignment.index');
|
||||
return view('pbg_task.index');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -20,7 +21,7 @@ class PbgTaskController extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
return view("pbg_task.create");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -28,7 +29,7 @@ class PbgTaskController extends Controller
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,7 +37,8 @@ class PbgTaskController extends Controller
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
$data = PbgTask::with(['pbg_task_retributions','pbg_task_index_integrations', 'pbg_task_retributions.pbg_task_prasarana'])->findOrFail($id);
|
||||
return view("pbg_task.show", compact("data"));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -44,7 +46,7 @@ class PbgTaskController extends Controller
|
||||
*/
|
||||
public function edit(string $id)
|
||||
{
|
||||
//
|
||||
return view("pbg_task.edit");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
152
app/Http/Controllers/RolesController.php
Normal file
152
app/Http/Controllers/RolesController.php
Normal file
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Menu;
|
||||
use App\Models\Role;
|
||||
use App\Models\RoleMenu;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class RolesController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view("roles.index");
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view("roles.create");
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try{
|
||||
$request->validate([
|
||||
"name" => "required|unique:roles,name",
|
||||
"description" => "nullable",
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
Role::create($request->all());
|
||||
DB::commit();
|
||||
return response()->json(['message' => 'Role created successfully'], 201);
|
||||
}
|
||||
catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
return response()->json(['message' => $e->getMessage()], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(string $id)
|
||||
{
|
||||
$role = Role::findOrFail($id);
|
||||
return view("roles.edit", compact('role'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
try{
|
||||
$role = Role::findOrFail($id);
|
||||
// Validate request data
|
||||
$validatedData = $request->validate([
|
||||
'name' => 'required|string|max:255|unique:roles,name,' . $id, // Ensure name is unique except for the current role
|
||||
'description' => 'nullable|string|max:500',
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
$role->update($validatedData);
|
||||
DB::commit();
|
||||
return response()->json(['message' => 'Role updated successfully'], 200);
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
return response()->json(['message' => $e->getMessage()], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
try{
|
||||
DB::beginTransaction();
|
||||
$deleted = Role::findOrFail($id)->delete();
|
||||
DB::commit();
|
||||
return response()->json(['success' => true, "message" => "Successfully deleted"]);
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
return response()->json(['success' => false, "message" => $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
|
||||
public function menu_permission(string $role_id){
|
||||
try{
|
||||
$role = Role::findOrFail($role_id);
|
||||
$menus = Menu::all();
|
||||
$role_menus = RoleMenu::where('role_id', $role_id)->get() ?? collect();
|
||||
return view('roles.role_menu', compact('role', 'menus', 'role_menus'));
|
||||
}catch(\Exception $e){
|
||||
return redirect()->back()->with("error", $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function update_menu_permission(Request $request, string $role_id){
|
||||
try{
|
||||
$validateData = $request->validate([
|
||||
"permissions" => "array",
|
||||
"permissions.*.allow_show" => "nullable|boolean",
|
||||
"permissions.*.allow_create" => "nullable|boolean",
|
||||
"permissions.*.allow_update" => "nullable|boolean",
|
||||
"permissions.*.allow_destroy" => "nullable|boolean"
|
||||
]);
|
||||
|
||||
$role = Role::find($role_id);
|
||||
|
||||
$permissionsArray = [];
|
||||
foreach ($validateData['permissions'] as $menu_id => $permission) {
|
||||
$permissionsArray[$menu_id] = [
|
||||
"allow_show" => (int) ($permission["allow_show"] ?? 0),
|
||||
"allow_create" => (int) ($permission["allow_create"] ?? 0),
|
||||
"allow_update" => (int) ($permission["allow_update"] ?? 0),
|
||||
"allow_destroy" => (int) ($permission["allow_destroy"] ?? 0),
|
||||
"updated_at" => now(),
|
||||
];
|
||||
}
|
||||
|
||||
// Sync will update existing records and insert new ones
|
||||
$role->menus()->sync($permissionsArray);
|
||||
|
||||
return redirect()->route("role-menu.permission", $role_id)->with('success','Menu Permission updated successfully');
|
||||
}catch(\Exception $e){
|
||||
Log::error("Error updating role_menu:", ["error" => $e->getMessage()]);
|
||||
return redirect()->route("role-menu.permission", $role_id)->with("error", $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,30 +15,4 @@ class RoutingController extends Controller
|
||||
return redirect('auth.signin');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a view based on first route param
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function root(Request $request, $first)
|
||||
{
|
||||
return view($first);
|
||||
}
|
||||
|
||||
/**
|
||||
* second level route
|
||||
*/
|
||||
public function secondLevel(Request $request, $first, $second)
|
||||
{
|
||||
return view($first . '.' . $second);
|
||||
}
|
||||
|
||||
/**
|
||||
* third level route
|
||||
*/
|
||||
public function thirdLevel(Request $request, $first, $second, $third)
|
||||
{
|
||||
return view($first . '.' . $second . '.' . $third);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,37 +3,43 @@
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\ServiceSIMBG;
|
||||
use App\Services\ServiceSIMBG;
|
||||
use Illuminate\Http\Request;
|
||||
use Exception;
|
||||
class SyncronizeController extends Controller
|
||||
{
|
||||
protected $service_simbg;
|
||||
public function __construct(ServiceSIMBG $service_simbg){
|
||||
$this->service_simbg = $service_simbg;
|
||||
}
|
||||
public function index(Request $request){
|
||||
return view('settings.syncronize.index');
|
||||
}
|
||||
|
||||
public function syncPbgTask(){
|
||||
$res = (new ServiceSIMBG())->syncTaskList();
|
||||
$res = $this->service_simbg->syncTaskList();
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function syncronizeTask(Request $request){
|
||||
$res = (new ServiceSIMBG())->syncTaskList();
|
||||
$res = $this->service_simbg->syncTaskList();
|
||||
return redirect()->back()->with('success', 'Processing completed successfully');
|
||||
}
|
||||
|
||||
public function getUserToken(){
|
||||
$res = (new ServiceSIMBG())->getToken();
|
||||
$res = $this->service_simbg->getToken();
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function syncIndexIntegration($uuid){
|
||||
$res = (new ServiceSIMBG())->syncIndexIntegration($uuid);
|
||||
public function syncIndexIntegration(Request $request, $uuid){
|
||||
$token = $request->get('token');
|
||||
$res = $this->service_simbg->syncIndexIntegration($uuid, $token);
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function syncTaskDetailSubmit($uuid){
|
||||
$res = (new ServiceSIMBG())->syncTaskDetailSubmit($uuid);
|
||||
public function syncTaskDetailSubmit(Request $request, $uuid){
|
||||
$token = $request->get('token');
|
||||
$res = $this->service_simbg->syncTaskDetailSubmit($uuid, $token);
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
31
app/Http/Requests/DataSettingRequest.php
Normal file
31
app/Http/Requests/DataSettingRequest.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class DataSettingRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
$id = $this->route('data_setting');
|
||||
return [
|
||||
"key" => "required|unique:data_settings,key," . $id,
|
||||
"value" => "required",
|
||||
"type" => "nullable",
|
||||
];
|
||||
}
|
||||
}
|
||||
62
app/Http/Requests/PbgTaskMultiStepRequest.php
Normal file
62
app/Http/Requests/PbgTaskMultiStepRequest.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class PbgTaskMultiStepRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// rules step 1
|
||||
"step1Form.uuid" => "required",
|
||||
"step1Form.name" => "nullable|string|max:255",
|
||||
"step1Form.owner_name" => "nullable|string|max:255",
|
||||
"step1Form.application_type" => "nullable|string|max:255",
|
||||
"step1Form.application_type_name" => "nullable|string|max:255",
|
||||
"step1Form.condition" => "nullable|string|max:255",
|
||||
"step1Form.registration_number" => "nullable|string|max:255",
|
||||
"step1Form.document_number" => "nullable|string|max:255",
|
||||
"step1Form.address" => "nullable|string|max:255",
|
||||
"step1Form.status" => "nullable|integer",
|
||||
"step1Form.status_name" => "nullable|string|max:255",
|
||||
"step1Form.slf_status" => "nullable|string|max:255",
|
||||
"step1Form.slf_status_name" => "nullable|string|max:255",
|
||||
"step1Form.function_type" => "nullable|string|max:255",
|
||||
"step1Form.consultation_type" => "nullable|string|max:255",
|
||||
"step1Form.due_date" => "nullable|date",
|
||||
"step1Form.land_certificate_phase" => "nullable|boolean",
|
||||
"step1Form.task_created_at" => "nullable|date",
|
||||
];
|
||||
}
|
||||
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
// message step 1
|
||||
"step1Form.uuid.required" => "UUID wajib diisi.",
|
||||
"step1Form.uuid.uuid" => "Format UUID tidak valid.",
|
||||
"step1Form.name.max" => "Nama tidak boleh lebih dari 255 karakter.",
|
||||
"step1Form.owner_name.max" => "Nama pemilik tidak boleh lebih dari 255 karakter.",
|
||||
"step1Form.registration_number.max" => "Nomor registrasi tidak boleh lebih dari 255 karakter.",
|
||||
"step1Form.document_number.max" => "Nomor dokumen tidak boleh lebih dari 255 karakter.",
|
||||
"step1Form.status.integer" => "Status harus berupa angka.",
|
||||
"step1Form.due_date.date" => "Tanggal jatuh tempo tidak valid.",
|
||||
"step1Form.land_certificate_phase.boolean" => "Fase sertifikat tanah harus berupa true/false.",
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
<?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 [
|
||||
'jenis_proyek' => 'string',
|
||||
'nib' => 'string',
|
||||
'business_name' => 'required|string',
|
||||
'status_penanaman_modal' => 'string',
|
||||
'business_form' => 'string',
|
||||
'uraian_resiko_proyek' => 'string',
|
||||
'project_name' => 'required|string',
|
||||
'business_address' => 'required|string',
|
||||
'district_code' => 'required|string',
|
||||
'village_code' => 'required|string',
|
||||
'land_area' => 'required|string',
|
||||
'investment_amount' => 'required|string',
|
||||
'number_of_employee' => 'required|string',
|
||||
'business_type_id' => 'required|string',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,106 +0,0 @@
|
||||
<?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.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.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.',
|
||||
];
|
||||
}
|
||||
}
|
||||
26
app/Http/Resources/DataSettingResource.php
Normal file
26
app/Http/Resources/DataSettingResource.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class DataSettingResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'key' => $this->key,
|
||||
'value' => $this->value,
|
||||
'type' => $this->type,
|
||||
'created_at' => $this->created_at->toDateTimeString(),
|
||||
'updated_at' => $this->updated_at->toDateTimeString(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ class UserResource extends JsonResource
|
||||
'position' => $this->position,
|
||||
'firstname' => $this->firstname,
|
||||
'lastname' => $this->lastname,
|
||||
'roles' => $this->roles->pluck('name'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ class AdvertisementImport implements ToCollection
|
||||
$districtCode = $districts[$districtName] ?? null;
|
||||
|
||||
$listTrueVillage = DB::table('villages')
|
||||
->where('district_code', $districtCode)
|
||||
->where('district_code', $districtCode) // Perbaikan pada where()
|
||||
->get()
|
||||
->mapWithKeys(function ($item) {
|
||||
return [strtolower(trim($item->village_name)) => [
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Imports;
|
||||
|
||||
use App\Models\Tourism;
|
||||
use Illuminate\Support\Collection;
|
||||
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use DateTime;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
info($rows);
|
||||
|
||||
foreach ($rows->skip(1) as $row) {
|
||||
// Normalisasi nama kecamatan dan desa
|
||||
$districtName = strtolower(trim(str_replace('Kecamatan', '', $row[13])));
|
||||
$villageName = strtolower(trim($row[14]));
|
||||
|
||||
// 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';
|
||||
|
||||
$dataToInsert[] = [
|
||||
'project_id' => $row[1],
|
||||
'jenis_proyek' => $row[2],
|
||||
'nib' => $row[3],
|
||||
'business_name' => $row[4],
|
||||
'terbit_oss' => DateTime::createFromFormat('d/m/Y', $row[5])->format('Y-m-d'),
|
||||
'status_penanaman_modal' => $row[6],
|
||||
'business_form' => $row[7],
|
||||
'uraian_resiko_proyek' => $row[8],
|
||||
'project_name' => $row[9],
|
||||
'business_type_id' => $row[10],
|
||||
'business_scale_id' => (int) $row[11],
|
||||
'business_address' => $row[12],
|
||||
'district_code' => $districtCode,
|
||||
'village_code' => $villageCode,
|
||||
'land_area' => $row[15],
|
||||
'investment_amount' => (string) $row[16],
|
||||
'number_of_employee' => (string) $row[17],
|
||||
];
|
||||
}
|
||||
|
||||
if(!empty($dataToInsert)) {
|
||||
Tourism::insert($dataToInsert);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,98 +0,0 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
}
|
||||
125
app/Models/BigdataResume.php
Normal file
125
app/Models/BigdataResume.php
Normal file
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class BigdataResume extends Model
|
||||
{
|
||||
protected $table = "bigdata_resumes";
|
||||
|
||||
protected $fillable = [
|
||||
'import_datasource_id',
|
||||
'potention_count',
|
||||
'potention_sum',
|
||||
'non_verified_count',
|
||||
'non_verified_sum',
|
||||
'verified_count',
|
||||
'verified_sum',
|
||||
'business_count',
|
||||
'business_sum',
|
||||
'non_business_count',
|
||||
'non_business_sum',
|
||||
];
|
||||
|
||||
public function importDatasource()
|
||||
{
|
||||
return $this->belongsTo(ImportDatasource::class, 'import_datasource_id');
|
||||
}
|
||||
|
||||
public static function generateResumeData($import_datasource_id){
|
||||
$query_verified = once( function () {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid')
|
||||
->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) = ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution')
|
||||
->first();
|
||||
});
|
||||
|
||||
$verified_count = $query_verified->total_data ?? 0;
|
||||
$verified_total = $query_verified->total_retribution ?? 0;
|
||||
|
||||
$query_business = once(function () {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid')
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->orWhereNull('ptgs.status_verifikasi');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(pt.function_type)) = ?', [strtolower(trim('Sebagai Tempat Usaha'))]);
|
||||
})
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution')
|
||||
->first();
|
||||
});
|
||||
|
||||
$business_count = $query_business->total_data ?? 0;
|
||||
$business_total = $query_business->total_retribution ?? 0;
|
||||
|
||||
$query_non_business = once( function () {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Join ke pbg_task_retributions
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->orWhereNull('ptgs.status_verifikasi'); // Include NULL values
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(pt.function_type)) != ?', [strtolower(trim('Sebagai Tempat Usaha'))])
|
||||
->orWhereNull('pt.function_type'); // Include NULL values
|
||||
})
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
|
||||
->first();
|
||||
});
|
||||
$non_business_count = $query_non_business->total_data ?? 0;
|
||||
$non_business_total = $query_non_business->total_retribution ?? 0;
|
||||
|
||||
$query_non_verified = once(function () {
|
||||
return DB::table('pbg_task AS pt')
|
||||
->leftJoin('pbg_task_google_sheet AS ptgs', 'pt.registration_number', '=', 'ptgs.no_registrasi')
|
||||
->leftJoin('pbg_task_retributions AS ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid') // Join tabel pbg_task_retributions
|
||||
->where(function ($query) {
|
||||
$query->whereRaw('LOWER(TRIM(ptgs.status_verifikasi)) != ?', [strtolower(trim('Selesai Verifikasi'))])
|
||||
->orWhereNull('ptgs.status_verifikasi'); // Include NULL values
|
||||
})
|
||||
->selectRaw('COUNT(pt.id) AS total_data,
|
||||
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
|
||||
->first();
|
||||
});
|
||||
|
||||
$non_verified_count = $query_non_verified->total_data ?? 0;
|
||||
$non_verified_total = $query_non_verified->total_retribution ?? 0;
|
||||
|
||||
$query_potention = once( function () {
|
||||
return DB::table('pbg_task as pt')
|
||||
->leftJoin('pbg_task_retributions as ptr', 'pt.uuid', '=', 'ptr.pbg_task_uid')
|
||||
->select(
|
||||
DB::raw('COUNT(DISTINCT pt.id) as task_count'),
|
||||
DB::raw('SUM(ptr.nilai_retribusi_bangunan) as total_retribution')
|
||||
)
|
||||
->first();
|
||||
});
|
||||
$potention_count = $query_potention->task_count ?? 0;
|
||||
$potention_total = $query_potention->total_retribution ?? 0;
|
||||
|
||||
return self::create([
|
||||
'import_datasource_id' => $import_datasource_id,
|
||||
'potention_count' => $potention_count ?? 0,
|
||||
'potention_sum' => $potention_total ?? 0.00,
|
||||
'non_verified_count' => $non_verified_count ?? 0,
|
||||
'non_verified_sum' => $non_verified_total ?? 0.00,
|
||||
'verified_count' => $verified_count ?? 0,
|
||||
'verified_sum' => $verified_total ?? 0.00,
|
||||
'business_count' => $business_count ?? 0,
|
||||
'business_sum' => $business_total ?? 0.00,
|
||||
'non_business_count' => $non_business_count ?? 0,
|
||||
'non_business_sum' => $non_business_total ?? 0.00,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class BusinessTypeCount extends Model
|
||||
{
|
||||
protected $table = 'business_type_counts';
|
||||
protected $primaryKey = null;
|
||||
|
||||
public $timestamps = false;
|
||||
protected $fillable = ['business_type', 'count'];
|
||||
}
|
||||
15
app/Models/DataSetting.php
Normal file
15
app/Models/DataSetting.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class DataSetting extends Model
|
||||
{
|
||||
protected $table = "data_settings";
|
||||
protected $fillable = [
|
||||
"key",
|
||||
"value",
|
||||
"type"
|
||||
];
|
||||
}
|
||||
25
app/Models/Menu.php
Normal file
25
app/Models/Menu.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Menu extends Model
|
||||
{
|
||||
protected $table = 'menus';
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'url',
|
||||
'icon',
|
||||
'parent_id',
|
||||
'sort_order'
|
||||
];
|
||||
|
||||
public function roles(){
|
||||
return $this->belongsToMany(Role::class, 'role_menu')->withTimestamps();
|
||||
}
|
||||
|
||||
public function children(){
|
||||
return $this->hasMany(Menu::class,'parent_id');
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,11 @@ class PbgTask extends Model
|
||||
'task_created_at'
|
||||
];
|
||||
|
||||
public function retributions(){
|
||||
public function pbg_task_retributions(){
|
||||
return $this->hasOne(PbgTaskRetributions::class, 'pbg_task_uid', 'uuid');
|
||||
}
|
||||
|
||||
public function pbg_task_index_integrations(){
|
||||
return $this->hasOne(PbgTaskIndexIntegrations::class, 'pbg_task_uid', 'uuid');
|
||||
}
|
||||
}
|
||||
|
||||
68
app/Models/PbgTaskGoogleSheet.php
Normal file
68
app/Models/PbgTaskGoogleSheet.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class PbgTaskGoogleSheet extends Model
|
||||
{
|
||||
protected $table = "pbg_task_google_sheet";
|
||||
|
||||
protected $fillable = [
|
||||
'jenis_konsultasi',
|
||||
'no_registrasi',
|
||||
'nama_pemilik',
|
||||
'lokasi_bg',
|
||||
'fungsi_bg',
|
||||
'nama_bangunan',
|
||||
'tgl_permohonan',
|
||||
'status_verifikasi',
|
||||
'status_permohonan',
|
||||
'alamat_pemilik',
|
||||
'no_hp',
|
||||
'email',
|
||||
'tanggal_catatan',
|
||||
'catatan_kekurangan_dokumen',
|
||||
'gambar',
|
||||
'krk_kkpr',
|
||||
'no_krk',
|
||||
'lh',
|
||||
'ska',
|
||||
'keterangan',
|
||||
'helpdesk',
|
||||
'pj',
|
||||
'kepemilikan',
|
||||
'potensi_taru',
|
||||
'validasi_dinas',
|
||||
'kategori_retribusi',
|
||||
'no_urut_ba_tpt',
|
||||
'tanggal_ba_tpt',
|
||||
'no_urut_ba_tpa',
|
||||
'tanggal_ba_tpa',
|
||||
'no_urut_skrd',
|
||||
'tanggal_skrd',
|
||||
'ptsp',
|
||||
'selesai_terbit',
|
||||
'tanggal_pembayaran',
|
||||
'format_sts',
|
||||
'tahun_terbit',
|
||||
'tahun_berjalan',
|
||||
'kelurahan',
|
||||
'kecamatan',
|
||||
'lb',
|
||||
'tb',
|
||||
'jlb',
|
||||
'unit',
|
||||
'usulan_retribusi',
|
||||
'nilai_retribusi_keseluruhan_simbg',
|
||||
'nilai_retribusi_keseluruhan_pad',
|
||||
'denda',
|
||||
'latitude',
|
||||
'longitude',
|
||||
'nik_nib',
|
||||
'dok_tanah',
|
||||
'temuan',
|
||||
];
|
||||
|
||||
|
||||
}
|
||||
@@ -21,4 +21,8 @@ class PbgTaskIndexIntegrations extends Model
|
||||
'indeks_terintegrasi',
|
||||
'total',
|
||||
];
|
||||
|
||||
public function pbg_task(){
|
||||
return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,5 +20,10 @@ class PbgTaskPrasarana extends Model
|
||||
'quantity',
|
||||
'unit',
|
||||
'index_prasarana',
|
||||
'pbg_task_retribution_id'
|
||||
];
|
||||
|
||||
public function pbg_task_retributions(){
|
||||
return $this->hasMany(PbgTaskRetributions::class, 'pbg_task_retribution_id', 'id');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,11 @@ class PbgTaskRetributions extends Model
|
||||
'pbg_task_uid'
|
||||
];
|
||||
|
||||
public function task(){
|
||||
public function pbg_task(){
|
||||
return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid');
|
||||
}
|
||||
|
||||
public function pbg_task_prasarana(){
|
||||
return $this->hasMany(PbgTaskPrasarana::class, 'pbg_task_retribution_id', 'id');
|
||||
}
|
||||
}
|
||||
|
||||
22
app/Models/Role.php
Normal file
22
app/Models/Role.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Role extends Model
|
||||
{
|
||||
protected $table = 'roles';
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'description'
|
||||
];
|
||||
|
||||
public function users(){
|
||||
return $this->belongsToMany(User::class,'user_role')->withTimestamps();
|
||||
}
|
||||
|
||||
public function menus(){
|
||||
return $this->belongsToMany(Menu::class,'role_menu')->withTimestamps();
|
||||
}
|
||||
}
|
||||
30
app/Models/RoleMenu.php
Normal file
30
app/Models/RoleMenu.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class RoleMenu extends Model
|
||||
{
|
||||
protected $table = 'role_menu';
|
||||
protected $primary = ['role_id', 'menu_id'];
|
||||
public $incrementing = false;
|
||||
protected $fillable = [
|
||||
'role_id',
|
||||
'menu_id',
|
||||
'allow_show',
|
||||
'allow_create',
|
||||
'allow_update',
|
||||
'allow_destroy',
|
||||
];
|
||||
|
||||
public $timestamps = true;
|
||||
|
||||
public function role(){
|
||||
return $this->belongsTo(Role::class, 'role_id');
|
||||
}
|
||||
|
||||
public function menu(){
|
||||
return $this->belongsTo(Menu::class,'menu_id');
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class Tourism
|
||||
*
|
||||
* @property $id
|
||||
* @property $project_id
|
||||
* @property $jenis_proyek
|
||||
* @property $nib
|
||||
* @property $created_at
|
||||
* @property $updated_at
|
||||
* @property $business_name
|
||||
* @property $terbit_oss
|
||||
* @property $status_penanaman_modal
|
||||
* @property $business_form
|
||||
* @property $uraian_resiko_proyek
|
||||
* @property $project_name
|
||||
* @property $business_scale_id
|
||||
* @property $business_address
|
||||
* @property $district_code
|
||||
* @property $village_code
|
||||
* @property $land_area
|
||||
* @property $investment_amount
|
||||
* @property $number_of_employee
|
||||
* @property $business_type_id
|
||||
*
|
||||
* @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', 'jenis_proyek', 'nib', 'business_name', 'terbit_oss', 'status_penanaman_modal', 'business_form', 'uraian_resiko_proyek', 'project_name', 'business_scale_id', 'business_address', 'district_code', 'village_code', 'land_area', 'investment_amount', 'number_of_employee', 'business_type_id'];
|
||||
|
||||
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
<?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'];
|
||||
|
||||
|
||||
}
|
||||
@@ -49,4 +49,8 @@ class User extends Authenticatable
|
||||
'password' => 'hashed',
|
||||
];
|
||||
}
|
||||
|
||||
public function roles(){
|
||||
return $this->belongsToMany(Role::class, 'user_role')->withTimestamps();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use App\Models\Menu;
|
||||
use App\View\Components\Circle;
|
||||
use Auth;
|
||||
use Illuminate\Support\Facades\Blade;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Carbon\Carbon;
|
||||
|
||||
@@ -23,5 +26,26 @@ class AppServiceProvider extends ServiceProvider
|
||||
public function boot(): void
|
||||
{
|
||||
Blade::component('circle', Circle::class);
|
||||
|
||||
View::composer('layouts.partials.sidebar', function ($view){
|
||||
$user = Auth::user();
|
||||
|
||||
if($user){
|
||||
$menus = Menu::whereHas('roles', function ($query) use ($user){
|
||||
$query->where('roles.id', $user->roles->pluck('id'));
|
||||
})
|
||||
->with(['children' => function ($query) {
|
||||
$query->whereHas('roles', function ($subQuery) {
|
||||
$subQuery->where('role_menu.allow_show', 1);
|
||||
});
|
||||
}])
|
||||
->orderBy('sort_order', 'asc')
|
||||
->get();
|
||||
}else{
|
||||
$menus = collect();
|
||||
}
|
||||
|
||||
$view->with('menus', $menus);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
131
app/Services/GoogleSheetService.php
Normal file
131
app/Services/GoogleSheetService.php
Normal file
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Google_Client;
|
||||
use Google_Service_Sheets;
|
||||
|
||||
class GoogleSheetService
|
||||
{
|
||||
/**
|
||||
* Create a new class instance.
|
||||
*/
|
||||
protected $client;
|
||||
protected $service;
|
||||
protected $spreadsheetID;
|
||||
public function __construct()
|
||||
{
|
||||
$this->client = new Google_Client();
|
||||
$this->client->setApplicationName("Sibedas Google Sheets API");
|
||||
$this->client->setScopes([Google_Service_Sheets::SPREADSHEETS_READONLY]);
|
||||
$this->client->setAuthConfig(storage_path("app/teak-banner-450003-s8-ea05661d9db0.json"));
|
||||
$this->client->setAccessType("offline");
|
||||
|
||||
$this->service = new Google_Service_Sheets($this->client);
|
||||
$this->spreadsheetID = env("SPREAD_SHEET_ID");
|
||||
|
||||
$this->service_sheets = new Google_Service_Sheets($this->client);
|
||||
}
|
||||
|
||||
public function getSheetData($range){
|
||||
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||
return $response->getValues();
|
||||
}
|
||||
|
||||
public function getLastRowByColumn($column = "A")
|
||||
{
|
||||
// Ambil spreadsheet
|
||||
$spreadsheet = $this->service->spreadsheets->get($this->spreadsheetID);
|
||||
$sheets = $spreadsheet->getSheets();
|
||||
|
||||
if (!empty($sheets)) {
|
||||
// Ambil nama sheet pertama dengan benar
|
||||
$firstSheetTitle = $sheets[0]->getProperties()->getTitle();
|
||||
|
||||
// ✅ Format range harus benar!
|
||||
$range = "{$firstSheetTitle}!{$column}:{$column}";
|
||||
|
||||
// Ambil data dari kolom yang diminta
|
||||
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||
$values = $response->getValues();
|
||||
|
||||
// Cek nilai terakhir yang tidak kosong
|
||||
$lastRow = 0;
|
||||
if (!empty($values)) {
|
||||
foreach ($values as $index => $row) {
|
||||
if (!empty($row[0])) { // Jika ada data, update lastRow
|
||||
$lastRow = $index + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $lastRow;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
public function getHeader()
|
||||
{
|
||||
$spreadsheet = $this->service->spreadsheets->get($this->spreadsheetID);
|
||||
$sheets = $spreadsheet->getSheets();
|
||||
|
||||
// Ambil nama sheet pertama
|
||||
$firstSheetTitle = $sheets[0]->getProperties()->getTitle();
|
||||
|
||||
// Ambil data dari baris pertama (header)
|
||||
$range = "{$firstSheetTitle}!1:1";
|
||||
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||
$values = $response->getValues();
|
||||
|
||||
// Kembalikan header (baris pertama)
|
||||
return !empty($values) ? $values[0] : [];
|
||||
}
|
||||
|
||||
public function getLastColumn()
|
||||
{
|
||||
$spreadsheet = $this->service->spreadsheets->get($this->spreadsheetID);
|
||||
$sheets = $spreadsheet->getSheets();
|
||||
|
||||
// Ambil nama sheet pertama
|
||||
$firstSheetTitle = $sheets[0]->getProperties()->getTitle();
|
||||
|
||||
// Ambil baris pertama untuk mendapatkan jumlah kolom yang terisi
|
||||
$range = "{$firstSheetTitle}!1:1";
|
||||
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||
$values = $response->getValues();
|
||||
|
||||
// Hitung jumlah kolom yang memiliki nilai
|
||||
return !empty($values) ? count(array_filter($values[0], fn($value) => $value !== "")) : 0;
|
||||
}
|
||||
|
||||
public function getSheetDataCollection($totalRow = 10){
|
||||
$spreadsheet = $this->service->spreadsheets->get($this->spreadsheetID);
|
||||
$sheets = $spreadsheet->getSheets();
|
||||
$firstSheetTitle = $sheets[0]->getProperties()->getTitle();
|
||||
|
||||
$header = $this->getHeader();
|
||||
$header = array_map(function($columnHeader) {
|
||||
// Trim spaces first, then replace non-alphanumeric characters with underscores
|
||||
$columnHeader = trim($columnHeader);
|
||||
return strtolower(preg_replace('/[^A-Za-z0-9_]/', '_', $columnHeader));
|
||||
}, $header);
|
||||
$range = "{$firstSheetTitle}!2:{$totalRow}";
|
||||
|
||||
$response = $this->service->spreadsheets_values->get($this->spreadsheetID, $range);
|
||||
$values = $response->getValues();
|
||||
|
||||
$mappedData = [];
|
||||
if (!empty($values)) {
|
||||
foreach ($values as $row) {
|
||||
$rowData = [];
|
||||
foreach ($header as $index => $columnHeader) {
|
||||
// Map header to the corresponding value from the row
|
||||
$rowData[$columnHeader] = isset($row[$index]) ? $row[$index] : null;
|
||||
}
|
||||
$mappedData[] = $rowData;
|
||||
}
|
||||
}
|
||||
|
||||
return $mappedData;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
namespace App\Services;
|
||||
use App\Traits\GlobalApiResponse;
|
||||
use GuzzleHttp\Client;
|
||||
use Exception;
|
||||
@@ -26,7 +26,7 @@ class ServiceClient
|
||||
);
|
||||
}
|
||||
|
||||
public function makeRequest($url, $method = 'GET', $body = null, $headers = [], $timeout = 300){
|
||||
public function makeRequest($url, $method = 'GET', $body = null, $headers = [], $timeout = 14400){
|
||||
try {
|
||||
|
||||
$headers = array_merge($this->headers, $headers);
|
||||
@@ -46,6 +46,7 @@ class ServiceClient
|
||||
$resultResponse = json_decode($response->getBody(), true);
|
||||
return $this->resSuccess($resultResponse);
|
||||
} catch (Exception $e) {
|
||||
\Log::error('error from client service'. $e->getMessage());
|
||||
return $this->resError($e->getMessage());
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
namespace App\Services;
|
||||
|
||||
use App\Enums\ImportDatasourceStatus;
|
||||
use App\Models\BigdataResume;
|
||||
use App\Models\GlobalSetting;
|
||||
use App\Models\ImportDatasource;
|
||||
use App\Models\PbgTaskIndexIntegrations;
|
||||
@@ -13,6 +14,7 @@ use App\Models\PbgTask;
|
||||
use App\Traits\GlobalApiResponse;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Carbon\Carbon;
|
||||
use App\Services\ServiceClient;
|
||||
|
||||
class ServiceSIMBG
|
||||
{
|
||||
@@ -21,26 +23,27 @@ class ServiceSIMBG
|
||||
private $password;
|
||||
private $simbg_host;
|
||||
private $fetch_per_page;
|
||||
private $service_client;
|
||||
/**
|
||||
* Create a new class instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->email = trim((string) GlobalSetting::where('key','SIMBG_EMAIL')->first()->value);
|
||||
$this->password = trim((string) GlobalSetting::where('key','SIMBG_PASSWORD')->first()->value);
|
||||
$this->simbg_host = trim((string)GlobalSetting::where('key','SIMBG_HOST')->first()->value);
|
||||
$this->fetch_per_page = trim((string)GlobalSetting::where('key','FETCH_PER_PAGE')->first()->value);
|
||||
$this->email = trim((string) GlobalSetting::where('key','SIMBG_EMAIL')->firstOrFail()->value);
|
||||
$this->password = trim((string) GlobalSetting::where('key','SIMBG_PASSWORD')->firstOrFail()->value);
|
||||
$this->simbg_host = trim((string)GlobalSetting::where('key','SIMBG_HOST')->firstOrFail()->value);
|
||||
$this->fetch_per_page = trim((string)GlobalSetting::where('key','FETCH_PER_PAGE')->firstOrFail()->value);
|
||||
$this->service_client = new ServiceClient($this->simbg_host);
|
||||
}
|
||||
|
||||
public function getToken(){
|
||||
$clientHelper = new ServiceClient($this->simbg_host);
|
||||
$url = "/api/user/v1/auth/login/";
|
||||
$body = [
|
||||
'email' => $this->email,
|
||||
'password' => $this->password,
|
||||
];
|
||||
|
||||
$res = $clientHelper->post($url, $body);
|
||||
$res = $this->service_client->post($url, $body);
|
||||
if(!$res->original['success']){
|
||||
Log::error("Token not retrieved ", ['response' => $res]);
|
||||
return null;
|
||||
@@ -50,14 +53,13 @@ class ServiceSIMBG
|
||||
|
||||
public function syncIndexIntegration($uuid, $token)
|
||||
{
|
||||
$clientHelper = new ServiceClient($this->simbg_host);
|
||||
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/indeks-terintegrasi/";
|
||||
|
||||
$headers = [
|
||||
'Authorization' => "Bearer " . $token,
|
||||
];
|
||||
|
||||
$res = $clientHelper->get($url, $headers);
|
||||
$res = $this->service_client->get($url, $headers);
|
||||
|
||||
if (empty($res->original['success']) || !$res->original['success']) {
|
||||
// Log error
|
||||
@@ -96,7 +98,6 @@ class ServiceSIMBG
|
||||
|
||||
public function syncTaskList()
|
||||
{
|
||||
$clientHelper = new ServiceClient($this->simbg_host);
|
||||
$initResToken = $this->getToken();
|
||||
|
||||
$importDatasource = ImportDatasource::create([
|
||||
@@ -115,7 +116,7 @@ class ServiceSIMBG
|
||||
$headers = ['Authorization' => "Bearer " . $apiToken];
|
||||
|
||||
$url = "/api/pbg/v1/list/?page=1&size={$this->fetch_per_page}&sort=ASC";
|
||||
$initialResponse = $clientHelper->get($url, $headers);
|
||||
$initialResponse = $this->service_client->get($url, $headers);
|
||||
|
||||
$totalPage = $initialResponse->original['data']['total_page'] ?? 0;
|
||||
if ($totalPage == 0) {
|
||||
@@ -131,6 +132,7 @@ class ServiceSIMBG
|
||||
for ($currentPage = 1; $currentPage <= $totalPage; $currentPage++) {
|
||||
$pageUrl = "/api/pbg/v1/list/?page={$currentPage}&size={$this->fetch_per_page}&sort=ASC";
|
||||
$getToken = $this->getToken();
|
||||
Log::info("response index integration", ['currentPage' => $currentPage]);
|
||||
if (empty($getToken->original['data']['token']['access'])) {
|
||||
$importDatasource->update([
|
||||
'status' => ImportDatasourceStatus::Failed->value,
|
||||
@@ -140,7 +142,7 @@ class ServiceSIMBG
|
||||
}
|
||||
$token = $getToken->original['data']['token']['access'];
|
||||
$headers = ['Authorization' => "Bearer " . $token];
|
||||
$response = $clientHelper->get($pageUrl, $headers);
|
||||
$response = $this->service_client->get($pageUrl, $headers);
|
||||
$tasks = $response->original['data']['data'] ?? [];
|
||||
|
||||
if (empty($tasks)) {
|
||||
@@ -180,8 +182,22 @@ class ServiceSIMBG
|
||||
'created_at' => now(),
|
||||
];
|
||||
|
||||
$this->syncIndexIntegration($item['uid'], $token);
|
||||
$this->syncTaskDetailSubmit($item['uid'], $token);
|
||||
$save_integration = $this->syncIndexIntegration($item['uid'], $token);
|
||||
if (!$save_integration) {
|
||||
$importDatasource->update([
|
||||
'status' => ImportDatasourceStatus::Failed->value,
|
||||
'message' => "Successfully processed: $savedCount, Failed: $failedCount"
|
||||
]);
|
||||
}
|
||||
|
||||
$save_detail = $this->syncTaskDetailSubmit($item['uid'], $token);
|
||||
if( !$save_detail ) {
|
||||
$importDatasource->update([
|
||||
'status' => ImportDatasourceStatus::Failed->value,
|
||||
'message' => "Successfully processed: $savedCount, Failed: $failedCount"
|
||||
]);
|
||||
}
|
||||
|
||||
$savedCount++;
|
||||
} catch (Exception $e) {
|
||||
$failedCount++;
|
||||
@@ -210,6 +226,8 @@ class ServiceSIMBG
|
||||
'message' => "Successfully processed: $savedCount, Failed: $failedCount"
|
||||
]);
|
||||
|
||||
BigdataResume::generateResumeData($importDatasource->id);
|
||||
|
||||
Log::info("syncTaskList completed", ['savedCount' => $savedCount, 'failedCount' => $failedCount]);
|
||||
|
||||
return $this->resSuccess(['savedCount' => $savedCount, 'failedCount' => $failedCount]);
|
||||
@@ -218,14 +236,12 @@ class ServiceSIMBG
|
||||
|
||||
public function syncTaskDetailSubmit($uuid, $token)
|
||||
{
|
||||
$clientHelper = new ServiceClient($this->simbg_host);
|
||||
|
||||
$url = "/api/pbg/v1/detail/" . $uuid . "/retribution/submit/";
|
||||
$headers = [
|
||||
'Authorization' => "Bearer " . $token,
|
||||
];
|
||||
|
||||
$res = $clientHelper->get($url, $headers);
|
||||
$res = $this->service_client->get($url, $headers);
|
||||
|
||||
if (empty($res->original['success']) || !$res->original['success']) {
|
||||
// Log error
|
||||
@@ -247,7 +263,7 @@ class ServiceSIMBG
|
||||
? Carbon::parse($data['updated_at'])->format('Y-m-d H:i:s')
|
||||
: null;
|
||||
|
||||
PbgTaskRetributions::updateOrCreate(
|
||||
$pbg_task_retributions = PbgTaskRetributions::updateOrCreate(
|
||||
['detail_id' => $data['id']],
|
||||
[
|
||||
'detail_uid' => $data['uid'] ?? null,
|
||||
@@ -271,10 +287,13 @@ class ServiceSIMBG
|
||||
]
|
||||
);
|
||||
|
||||
$pbg_task_retribution_id = $pbg_task_retributions->id;
|
||||
|
||||
$prasaranaData = $data['prasarana'] ?? [];
|
||||
if (!empty($prasaranaData)) {
|
||||
$insertData = array_map(fn($item) => [
|
||||
'pbg_task_uid' => $uuid,
|
||||
'pbg_task_retribution_id' => $pbg_task_retribution_id,
|
||||
'prasarana_id' => $item['id'] ?? null,
|
||||
'prasarana_type' => $item['prasarana_type'] ?? null,
|
||||
'building_type' => $item['building_type'] ?? null,
|
||||
@@ -285,7 +304,7 @@ class ServiceSIMBG
|
||||
], $prasaranaData);
|
||||
|
||||
// Use bulk insert or upsert for faster database operation
|
||||
PbgTaskPrasarana::upsert($insertData, ['pbg_task_uid', 'prasarana_id']);
|
||||
PbgTaskPrasarana::upsert($insertData, ['prasarana_id']);
|
||||
}
|
||||
|
||||
Log::info("retribution and prasarana successfully", ['uuid' => $uuid]);
|
||||
25
app/View/Components/ModalConfirmation.php
Normal file
25
app/View/Components/ModalConfirmation.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class ModalConfirmation 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.modal-confirmation');
|
||||
}
|
||||
}
|
||||
25
app/View/Components/ToastNotification.php
Normal file
25
app/View/Components/ToastNotification.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class ToastNotification 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.toast-notification');
|
||||
}
|
||||
}
|
||||
@@ -3,10 +3,14 @@
|
||||
"name": "laravel/laravel",
|
||||
"type": "project",
|
||||
"description": "The skeleton application for the Laravel framework.",
|
||||
"keywords": ["laravel", "framework"],
|
||||
"keywords": [
|
||||
"laravel",
|
||||
"framework"
|
||||
],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"google/apiclient": "^2.12",
|
||||
"guzzlehttp/guzzle": "^7.9",
|
||||
"laravel/framework": "^11.31",
|
||||
"laravel/sanctum": "^4.0",
|
||||
|
||||
1381
composer.lock
generated
Executable file → Normal file
1381
composer.lock
generated
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
@@ -123,4 +123,5 @@ return [
|
||||
'store' => env('APP_MAINTENANCE_STORE', 'database'),
|
||||
],
|
||||
|
||||
'api_url' => env('API_URL', 'http://localhost:8000')
|
||||
];
|
||||
|
||||
52
config/laravel-code-generator.php
Normal file
52
config/laravel-code-generator.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| CodeGenerator config overrides
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| It is a good idea to separate your configuration form the code-generator's
|
||||
| own configuration. This way you won't lose any settings/preference
|
||||
| you have when upgrading to a new version of the package.
|
||||
|
|
||||
| Additionally, you will always know any the configuration difference between
|
||||
| the default config than your own.
|
||||
|
|
||||
| To override the setting that is found in the 'config/default.php' file, you'll
|
||||
| need to create identical key here with a different value
|
||||
|
|
||||
| IMPORTANT: When overriding an option that is an array, the configurations
|
||||
| are merged together using php's array_merge() function. This means that
|
||||
| any option that you list here will take presence during a conflict in keys.
|
||||
|
|
||||
| EXAMPLE: The following addition to this file, will add another entry in
|
||||
| the common_definitions collection
|
||||
|
|
||||
| 'common_definitions' =>
|
||||
| [
|
||||
| [
|
||||
| 'match' => '*_at',
|
||||
| 'set' => [
|
||||
| 'css-class' => 'datetime-picker',
|
||||
| ],
|
||||
| ],
|
||||
| ],
|
||||
|
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| The default path of where the uploaded files live.
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You can use Laravel Storage filesystem. By default, the code-generator
|
||||
| uses the default file system.
|
||||
| For more info about Laravel's file system visit
|
||||
| https://laravel.com/docs/5.5/filesystem
|
||||
|
|
||||
*/
|
||||
'files_upload_path' => 'uploads',
|
||||
|
||||
];
|
||||
92138
database/inject-data-seeder/villages_202502082240.sql
Normal file
92138
database/inject-data-seeder/villages_202502082240.sql
Normal file
File diff suppressed because it is too large
Load Diff
@@ -11,11 +11,12 @@ return new class extends Migration
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('business_type', function (Blueprint $table) {
|
||||
Schema::create('data_settings', 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');
|
||||
$table->string('key')->unique();
|
||||
$table->string('value');
|
||||
$table->string('type')->nullable()->default('integer');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -24,6 +25,6 @@ return new class extends Migration
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('business_type');
|
||||
Schema::dropIfExists('data_settings');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('pbg_task_google_sheet', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('jenis_konsultasi')->nullable();
|
||||
$table->string('no_registrasi')->nullable()->unique();
|
||||
$table->string('nama_pemilik')->nullable();
|
||||
$table->text('lokasi_bg')->nullable();
|
||||
$table->string('fungsi_bg')->nullable();
|
||||
$table->string('nama_bangunan')->nullable();
|
||||
$table->date('tgl_permohonan')->nullable();
|
||||
$table->string('status_verifikasi')->nullable();
|
||||
$table->string('status_permohonan')->nullable();
|
||||
$table->text('alamat_pemilik')->nullable();
|
||||
$table->string('no_hp')->nullable();
|
||||
$table->string('email')->nullable();
|
||||
$table->date('tanggal_catatan')->nullable();
|
||||
$table->text('catatan_kekurangan_dokumen')->nullable();
|
||||
$table->string('gambar')->nullable();
|
||||
$table->string('krk_kkpr')->nullable();
|
||||
$table->string('no_krk')->nullable();
|
||||
$table->string('lh')->nullable();
|
||||
$table->string('ska')->nullable();
|
||||
$table->text('keterangan')->nullable();
|
||||
$table->string('helpdesk')->nullable();
|
||||
$table->string('pj')->nullable();
|
||||
$table->string('kepemilikan')->nullable();
|
||||
$table->string('potensi_taru')->nullable();
|
||||
$table->string('validasi_dinas')->nullable();
|
||||
$table->string('kategori_retribusi')->nullable();
|
||||
$table->string('no_urut_ba_tpt')->nullable();
|
||||
$table->date('tanggal_ba_tpt')->nullable();
|
||||
$table->string('no_urut_ba_tpa')->nullable();
|
||||
$table->date('tanggal_ba_tpa')->nullable();
|
||||
$table->string('no_urut_skrd')->nullable();
|
||||
$table->date('tanggal_skrd')->nullable();
|
||||
$table->string('ptsp')->nullable();
|
||||
$table->string('selesai_terbit')->nullable();
|
||||
$table->date('tanggal_pembayaran')->nullable();
|
||||
$table->string('format_sts')->nullable();
|
||||
$table->integer('tahun_terbit')->nullable();
|
||||
$table->integer('tahun_berjalan')->nullable();
|
||||
$table->string('kelurahan')->nullable();
|
||||
$table->string('kecamatan')->nullable();
|
||||
$table->decimal('lb', 20,2)->nullable();
|
||||
$table->decimal('tb', 20, 2)->nullable();
|
||||
$table->integer('jlb')->nullable();
|
||||
$table->integer('unit')->nullable();
|
||||
$table->integer('usulan_retribusi')->nullable();
|
||||
$table->decimal('nilai_retribusi_keseluruhan_simbg', 20, 2)->nullable();
|
||||
$table->decimal('nilai_retribusi_keseluruhan_pad', 20, 2)->nullable();
|
||||
$table->decimal('denda', 20, 2)->nullable();
|
||||
$table->string('latitude')->nullable();
|
||||
$table->string('longitude')->nullable();
|
||||
$table->string('nik_nib')->nullable();
|
||||
$table->string('dok_tanah')->nullable();
|
||||
$table->text('temuan')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('pbg_task_google_sheet');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task', function (Blueprint $table) {
|
||||
$constraintExists = DB::select("
|
||||
SELECT COUNT(*) as count
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'pbg_task'
|
||||
AND index_name = 'pbg_task_uuid_unique'
|
||||
");
|
||||
|
||||
if ($constraintExists[0]->count > 0) {
|
||||
$table->dropUnique('pbg_task_uuid_unique');
|
||||
}
|
||||
$table->string('uuid')->nullable()->unique()->change();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task', function (Blueprint $table) {
|
||||
$table->dropUnique('pbg_task_uuid_unique');
|
||||
$table->string('uuid')->nullable()->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task_index_integrations', function (Blueprint $table) {
|
||||
$constraintExists = DB::select("
|
||||
SELECT COUNT(*) as count
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'pbg_task_index_integrations'
|
||||
AND index_name = 'pbg_task_index_integrations_pbg_task_uid_unique'
|
||||
");
|
||||
|
||||
if ($constraintExists[0]->count > 0) {
|
||||
$table->dropUnique('pbg_task_index_integrations_pbg_task_uid_unique');
|
||||
}
|
||||
$table->string('pbg_task_uid')->unique()->change();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task_index_integrations', function (Blueprint $table) {
|
||||
$table->dropUnique('pbg_task_index_integrations_pbg_task_uid_unique');
|
||||
$table->string('pbg_task_uid')->unique()->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task_retributions', function (Blueprint $table) {
|
||||
$constraintExists = DB::select("
|
||||
SELECT COUNT(*) as count
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'pbg_task_retributions'
|
||||
AND index_name = 'pbg_task_retributions_detail_id_unique'
|
||||
");
|
||||
|
||||
if ($constraintExists[0]->count > 0) {
|
||||
$table->dropUnique('pbg_task_retributions_detail_id_unique');
|
||||
}
|
||||
$table->string('detail_id')->unique()->change();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task_retributions', function (Blueprint $table) {
|
||||
$table->dropUnique('pbg_task_retributions_detail_id_unique');
|
||||
$table->string('detail_id')->unique()->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
|
||||
$constraintExists = DB::select("
|
||||
SELECT COUNT(*) as count
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'pbg_task_prasarana'
|
||||
AND index_name = 'pbg_task_prasarana_prasarana_id_unique'
|
||||
");
|
||||
|
||||
if ($constraintExists[0]->count > 0) {
|
||||
$table->dropUnique('pbg_task_prasarana_prasarana_id_unique');
|
||||
}
|
||||
$table->integer('prasarana_id')->nullable()->unique()->change();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
|
||||
$table->dropUnique('pbg_task_prasarana_prasarana_id_unique');
|
||||
$table->integer('prasarana_id')->nullable()->unique()->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('pbg_task_retribution_id')->nullable(); // nullable in case some records do not match
|
||||
|
||||
// Step 2: Define the foreign key relation from `table3` to `table2`
|
||||
$table->foreign('pbg_task_retribution_id')->references('id')->on('pbg_task_retributions')->onDelete('cascade');
|
||||
});
|
||||
|
||||
\DB::table('pbg_task_prasarana')
|
||||
->join('pbg_task', 'pbg_task.uuid', '=', 'pbg_task_prasarana.pbg_task_uid') // Relating pbg_task_prasarana to pbg_task
|
||||
->join('pbg_task_retributions', 'pbg_task_retributions.pbg_task_uid', '=', 'pbg_task.uuid') // Relating pbg_task_retributions to pbg_task
|
||||
->whereNotNull('pbg_task_retributions.id') // Ensure the `pbg_task_retributions` id exists
|
||||
->update(['pbg_task_prasarana.pbg_task_retribution_id' => \DB::raw('pbg_task_retributions.id')]); // Set the foreign key
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
|
||||
$table->dropForeign(['pbg_task_retribution_id']);
|
||||
$table->dropColumn('pbg_task_retribution_id');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -11,8 +11,11 @@ return new class extends Migration
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('tourism', function (Blueprint $table) {
|
||||
$table->string('district_code')->after('business_address');
|
||||
Schema::create('roles', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name')->unique();
|
||||
$table->text('description')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -21,8 +24,6 @@ return new class extends Migration
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('tourism', function (Blueprint $table) {
|
||||
$table->dropColumn('district_code');
|
||||
});
|
||||
Schema::dropIfExists('roles');
|
||||
}
|
||||
};
|
||||
33
database/migrations/2025_02_10_104254_create_menus_table.php
Normal file
33
database/migrations/2025_02_10_104254_create_menus_table.php
Normal file
@@ -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('menus', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('url');
|
||||
$table->string('icon')->nullable();
|
||||
$table->unsignedBigInteger('parent_id')->nullable();
|
||||
$table->integer('sort_order')->default(0);
|
||||
$table->foreign('parent_id')->references('id')->on('menus')->onDelete('set null');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('menus');
|
||||
}
|
||||
};
|
||||
@@ -11,8 +11,11 @@ return new class extends Migration
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('umkm', function (Blueprint $table) {
|
||||
Schema::rename('umkm', 'umkms');
|
||||
Schema::create('user_role', function (Blueprint $table) {
|
||||
$table->foreignId('user_id')->constrained()->onDelete('cascade');
|
||||
$table->foreignId('role_id')->constrained()->onDelete('cascade');
|
||||
$table->primary(['user_id', 'role_id']);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -21,8 +24,6 @@ return new class extends Migration
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('umkm', function (Blueprint $table) {
|
||||
Schema::rename('umkm', 'umkms');
|
||||
});
|
||||
Schema::dropIfExists('user_role');
|
||||
}
|
||||
};
|
||||
@@ -11,8 +11,11 @@ return new class extends Migration
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('umkm', function (Blueprint $table) {
|
||||
$table->renameColumn('distric_code', 'district_code');
|
||||
Schema::create('role_menu', function (Blueprint $table) {
|
||||
$table->foreignId('role_id')->constrained()->cascadeOnDelete();
|
||||
$table->foreignId('menu_id')->constrained()->cascadeOnDelete();
|
||||
$table->primary(['role_id', 'menu_id']);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -21,8 +24,6 @@ return new class extends Migration
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('umkm', function (Blueprint $table) {
|
||||
$table->renameColumn('district_code', 'distric_code');
|
||||
});
|
||||
Schema::dropIfExists('role_menu');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
<?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('role_menu', function (Blueprint $table) {
|
||||
$table->boolean('allow_show')->default(true)->after('menu_id');
|
||||
$table->boolean('allow_create')->default(true)->after('allow_show');
|
||||
$table->boolean('allow_update')->default(true)->after('allow_create');
|
||||
$table->boolean('allow_destroy')->default(true)->after('allow_update');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('role_menu', function (Blueprint $table) {
|
||||
$table->dropColumn(['allow_show','allow_create', 'allow_update', 'allow_destroy']);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -1,46 +0,0 @@
|
||||
<?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');
|
||||
}
|
||||
};
|
||||
@@ -1,29 +0,0 @@
|
||||
<?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');
|
||||
}
|
||||
};
|
||||
@@ -1,29 +0,0 @@
|
||||
<?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');
|
||||
}
|
||||
};
|
||||
@@ -1,30 +0,0 @@
|
||||
<?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();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -1,29 +0,0 @@
|
||||
<?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,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('bigdata_resumes', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('import_datasource_id');
|
||||
$table->integer('potention_count')->default(0);
|
||||
$table->decimal('potention_sum', 20, 2)->default(0);
|
||||
$table->integer('non_verified_count')->default(0);
|
||||
$table->decimal('non_verified_sum', 20, 2)->default(0);
|
||||
$table->integer('verified_count')->default(0);
|
||||
$table->decimal('verified_sum', 20, 2)->default(0);
|
||||
$table->integer('business_count')->default(0);
|
||||
$table->decimal('business_sum', 20, 2)->default(0);
|
||||
$table->integer('non_business_count')->default(0);
|
||||
$table->decimal('non_business_sum', 20, 2)->default(0);
|
||||
$table->timestamps();
|
||||
$table->foreign('import_datasource_id')->references('id')->on('import_datasources')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('bigdata_resumes');
|
||||
}
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
<?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();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
<?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');
|
||||
}
|
||||
};
|
||||
@@ -1,24 +0,0 @@
|
||||
<?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');
|
||||
}
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
<?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']);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -1,32 +0,0 @@
|
||||
<?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();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -1,26 +0,0 @@
|
||||
<?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'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
<?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'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<?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'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
40
database/seeders/DataSettingSeeder.php
Normal file
40
database/seeders/DataSettingSeeder.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\DataSetting;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DataSettingSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$data_settings = [
|
||||
[
|
||||
"key" => "TARGET_PAD",
|
||||
"value" => "50000000000",
|
||||
"type" => "integer"
|
||||
],
|
||||
[
|
||||
"key" => "TATA_RUANG",
|
||||
"value" => "10000000000",
|
||||
"type" => "integer"
|
||||
]
|
||||
];
|
||||
|
||||
foreach ($data_settings as $setting) {
|
||||
DataSetting::updateOrCreate([
|
||||
"key" => $setting["key"],
|
||||
],[
|
||||
"value" => $setting["value"],
|
||||
"type" => $setting["type"],
|
||||
"created_at" => now(),
|
||||
"updated_at" => now(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
<?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'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
204
database/seeders/UsersRoleMenuSeeder.php
Normal file
204
database/seeders/UsersRoleMenuSeeder.php
Normal file
@@ -0,0 +1,204 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Menu;
|
||||
use App\Models\Role;
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class UsersRoleMenuSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$roles = [
|
||||
[
|
||||
"name" => "superadmin",
|
||||
"description" => "show all menus for super admins",
|
||||
],
|
||||
[
|
||||
"name" => "admin",
|
||||
"description" => "show only necessary menus for admins",
|
||||
],
|
||||
[
|
||||
"name" => "operator",
|
||||
"description" => "show only necessary menus for operators",
|
||||
]
|
||||
];
|
||||
|
||||
Role::upsert($roles, ['name']);
|
||||
|
||||
$parent_menus = [
|
||||
[
|
||||
"name" => "Dashboard",
|
||||
"url" => "/dashboard",
|
||||
"icon" => "mingcute:home-3-line",
|
||||
"parent_id" => null,
|
||||
"sort_order" => 1,
|
||||
],
|
||||
[
|
||||
"name" => "Master",
|
||||
"url" => "/master",
|
||||
"icon" => "mingcute:cylinder-line",
|
||||
"parent_id" => null,
|
||||
"sort_order" => 2,
|
||||
],
|
||||
[
|
||||
"name" => "Settings",
|
||||
"url" => "/settings",
|
||||
"icon" => "mingcute:settings-6-line",
|
||||
"parent_id" => null,
|
||||
"sort_order" => 3,
|
||||
],
|
||||
[
|
||||
"name" => "Data Settings",
|
||||
"url" => "/data-settings",
|
||||
"icon" => "mingcute:settings-1-line",
|
||||
"parent_id" => null,
|
||||
"sort_order" => 4,
|
||||
],
|
||||
[
|
||||
"name" => "Data",
|
||||
"url" => "/data",
|
||||
"icon" => "mingcute:task-line",
|
||||
"parent_id" => null,
|
||||
"sort_order" => 5,
|
||||
]
|
||||
];
|
||||
|
||||
foreach ($parent_menus as $parent_menu) {
|
||||
Menu::firstOrCreate(['name' => $parent_menu['name']], $parent_menu);
|
||||
}
|
||||
|
||||
// Attach Menus to Roles
|
||||
$superadmin = Role::where('name', 'superadmin')->first();
|
||||
$admin = Role::where('name', 'admin')->first();
|
||||
$operator = Role::where('name', 'operator')->first();
|
||||
|
||||
$dashboard = Menu::where('name', 'Dashboard')->first();
|
||||
$master = Menu::where('name', 'Master')->first();
|
||||
$settings = Menu::where('name', 'Settings')->first();
|
||||
$dataSettings = Menu::where('name', 'Data Settings')->first();
|
||||
$data = Menu::where('name', 'Data')->first();
|
||||
|
||||
// create children menu
|
||||
$children_menus = [
|
||||
[
|
||||
"name" => "Dashboard Pimpinan",
|
||||
"url" => "dashboard.home",
|
||||
"icon" => null,
|
||||
"parent_id" => $dashboard->id,
|
||||
"sort_order" => 1,
|
||||
],
|
||||
[
|
||||
"name" => "Dashboard PBG",
|
||||
"url" => "dashboard.pbg",
|
||||
"icon" => null,
|
||||
"parent_id" => $dashboard->id,
|
||||
"sort_order" => 2,
|
||||
],
|
||||
[
|
||||
"name" => "Users",
|
||||
"url" => "users.index",
|
||||
"icon" => null,
|
||||
"parent_id" => $master->id,
|
||||
"sort_order" => 1,
|
||||
],
|
||||
[
|
||||
"name" => "Syncronize",
|
||||
"url" => "settings.syncronize",
|
||||
"icon" => null,
|
||||
"parent_id" => $settings->id,
|
||||
"sort_order" => 1,
|
||||
],
|
||||
[
|
||||
"name" => "Menu",
|
||||
"url" => "menus.index",
|
||||
"icon" => null,
|
||||
"parent_id" => $settings->id,
|
||||
"sort_order" => 2,
|
||||
],
|
||||
[
|
||||
"name" => "Role",
|
||||
"url" => "roles.index",
|
||||
"icon" => null,
|
||||
"parent_id" => $settings->id,
|
||||
"sort_order" => 3,
|
||||
],
|
||||
[
|
||||
"name" => "Setting Dashboard",
|
||||
"url" => "data-settings.index",
|
||||
"icon" => null,
|
||||
"parent_id" => $dataSettings->id,
|
||||
"sort_order" => 1,
|
||||
],
|
||||
[
|
||||
"name" => "PBG",
|
||||
"url" => "pbg-task.index",
|
||||
"icon" => null,
|
||||
"parent_id" => $data->id,
|
||||
"sort_order" => 1,
|
||||
],
|
||||
[
|
||||
"name" => "Reklame",
|
||||
"url" => "advertisements.index",
|
||||
"icon" => null,
|
||||
"parent_id" => $data->id,
|
||||
"sort_order" => 1,
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($children_menus as $child_menu) {
|
||||
Menu::firstOrCreate(['name' => $child_menu['name']], $child_menu);
|
||||
}
|
||||
|
||||
$dashboard_pimpinan = Menu::where('name', 'Dashboard Pimpinan')->first();
|
||||
$dashboard_pbg = Menu::where('name', 'Dashboard PBG')->first();
|
||||
$users = Menu::where('name', 'Users')->first();
|
||||
$syncronize = Menu::where('name', 'Syncronize')->first();
|
||||
$setting_menu = Menu::where('name', 'Menu')->first();
|
||||
$setting_role = Menu::where('name', 'Role')->first();
|
||||
$setting_dashboard = Menu::where('name', 'Setting Dashboard')->first();
|
||||
$setting_pbg = Menu::where('name', 'PBG')->first();
|
||||
$reklame = Menu::where('name', 'Reklame')->first();
|
||||
|
||||
// Superadmin gets all menus
|
||||
$superadmin->menus()->sync([
|
||||
// parent
|
||||
$dashboard->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
||||
$master->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],
|
||||
$data->id => ["allow_show" => true, "allow_create" => false, "allow_update" => false, "allow_destroy" => false],
|
||||
// children
|
||||
$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],
|
||||
$users->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
$syncronize->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
$setting_menu->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
$setting_role->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],
|
||||
$reklame->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
]);
|
||||
|
||||
// Admin gets limited menus
|
||||
$admin->menus()->sync([
|
||||
$dashboard->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
$master->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
$settings->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
]);
|
||||
|
||||
// Operator gets only basic menus with full permissions
|
||||
$operator->menus()->sync([
|
||||
$dashboard->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
$data->id => ["allow_show" => true, "allow_create" => true, "allow_update" => true, "allow_destroy" => true],
|
||||
]);
|
||||
// Attach User to role super admin
|
||||
User::findOrFail(1)->roles()->sync([$superadmin->id]);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
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;
|
||||
5917
package-lock.json
generated
5917
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
66
package.json
66
package.json
@@ -1,35 +1,35 @@
|
||||
{
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"dev": "vite"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.20",
|
||||
"axios": "^1.7.4",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^1.0",
|
||||
"postcss": "^8.4.47",
|
||||
"sass": "^1.81.1",
|
||||
"tailwindcss": "^3.4.13",
|
||||
"vite": "^5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"apexcharts": "^3.44.2",
|
||||
"bootstrap": "^5.3.3",
|
||||
"countup.js": "^2.3.2",
|
||||
"dropzone": "^5.9.0",
|
||||
"flatpickr": "^4.6.13",
|
||||
"gmaps": "^0.4.25",
|
||||
"gridjs": "^5.1.0",
|
||||
"iconify-icon": "^2.1.0",
|
||||
"jsvectormap": "^1.5.1",
|
||||
"moment": "^2.29.4",
|
||||
"node-waves": "^0.7.6",
|
||||
"quill": "^1.3.7",
|
||||
"simplebar": "^5.3.9",
|
||||
"sweetalert2": "^11.16.0",
|
||||
"wnumb": "^1.2.0"
|
||||
}
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"dev": "vite"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.20",
|
||||
"axios": "^1.7.4",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^1.0",
|
||||
"postcss": "^8.4.47",
|
||||
"sass": "^1.81.1",
|
||||
"tailwindcss": "^3.4.13",
|
||||
"vite": "^5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"apexcharts": "^3.44.2",
|
||||
"big.js": "^6.2.2",
|
||||
"bootstrap": "^5.3.3",
|
||||
"countup.js": "^2.3.2",
|
||||
"dropzone": "^5.9.0",
|
||||
"flatpickr": "^4.6.13",
|
||||
"gmaps": "^0.4.25",
|
||||
"gridjs": "^5.1.0",
|
||||
"iconify-icon": "^2.1.0",
|
||||
"jsvectormap": "^1.5.1",
|
||||
"moment": "^2.29.4",
|
||||
"node-waves": "^0.7.6",
|
||||
"quill": "^1.3.7",
|
||||
"simplebar": "^5.3.9",
|
||||
"wnumb": "^1.2.0"
|
||||
}
|
||||
}
|
||||
|
||||
383
public/build/.vite/manifest.json
Normal file
383
public/build/.vite/manifest.json
Normal file
@@ -0,0 +1,383 @@
|
||||
{
|
||||
"__commonjsHelpers-C4iS2aBk.js": {
|
||||
"file": "assets/_commonjsHelpers-C4iS2aBk.js",
|
||||
"name": "_commonjsHelpers"
|
||||
},
|
||||
"_apexcharts.common-7mov3gaG.js": {
|
||||
"file": "assets/apexcharts.common-7mov3gaG.js",
|
||||
"name": "apexcharts.common",
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"_global-config-9uDKFQ8j.js": {
|
||||
"file": "assets/global-config-9uDKFQ8j.js",
|
||||
"name": "global-config"
|
||||
},
|
||||
"_gridjs.umd-BiCNXlqL.js": {
|
||||
"file": "assets/gridjs.umd-BiCNXlqL.js",
|
||||
"name": "gridjs.umd",
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"_world-BH8KG5u4.js": {
|
||||
"file": "assets/world-BH8KG5u4.js",
|
||||
"name": "world",
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"node_modules/flatpickr/dist/flatpickr.min.css": {
|
||||
"file": "assets/flatpickr-CksuuEqD.css",
|
||||
"src": "node_modules/flatpickr/dist/flatpickr.min.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/flatpickr/dist/themes/dark.css": {
|
||||
"file": "assets/dark-CLxH30By.css",
|
||||
"src": "node_modules/flatpickr/dist/themes/dark.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/gridjs/dist/theme/mermaid.css": {
|
||||
"file": "assets/mermaid-B5wPN5RC.css",
|
||||
"src": "node_modules/gridjs/dist/theme/mermaid.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/gridjs/dist/theme/mermaid.min.css": {
|
||||
"file": "assets/mermaid-1KsrsKla.css",
|
||||
"src": "node_modules/gridjs/dist/theme/mermaid.min.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/quill/dist/quill.bubble.css": {
|
||||
"file": "assets/quill-BzaoboQ1.css",
|
||||
"src": "node_modules/quill/dist/quill.bubble.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"node_modules/quill/dist/quill.snow.css": {
|
||||
"file": "assets/quill-D-Ncpkvi.css",
|
||||
"src": "node_modules/quill/dist/quill.snow.css",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/fonts/boxicons.eot": {
|
||||
"file": "assets/boxicons-0t2gX1vj.eot",
|
||||
"src": "resources/fonts/boxicons.eot"
|
||||
},
|
||||
"resources/fonts/boxicons.svg": {
|
||||
"file": "assets/boxicons-KSR1BgPC.svg",
|
||||
"src": "resources/fonts/boxicons.svg"
|
||||
},
|
||||
"resources/fonts/boxicons.ttf": {
|
||||
"file": "assets/boxicons-BEZXjQG5.ttf",
|
||||
"src": "resources/fonts/boxicons.ttf"
|
||||
},
|
||||
"resources/fonts/boxicons.woff": {
|
||||
"file": "assets/boxicons-CEgI8ccS.woff",
|
||||
"src": "resources/fonts/boxicons.woff"
|
||||
},
|
||||
"resources/fonts/boxicons.woff2": {
|
||||
"file": "assets/boxicons-C7pETWQJ.woff2",
|
||||
"src": "resources/fonts/boxicons.woff2"
|
||||
},
|
||||
"resources/js/app.js": {
|
||||
"file": "assets/app-Wz_4hh3O.js",
|
||||
"name": "app",
|
||||
"src": "resources/js/app.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/config.js": {
|
||||
"file": "assets/config-DqV4EBmE.js",
|
||||
"name": "config",
|
||||
"src": "resources/js/config.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/dashboards/bigdata.js": {
|
||||
"file": "assets/bigdata-DBp18hcY.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-Bm5aE3Il.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/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-uzXjZCws.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-qw4Wj-LG.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-mrxZaoHv.js",
|
||||
"name": "form-fileupload",
|
||||
"src": "resources/js/pages/form-fileupload.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/form-flatepicker.js": {
|
||||
"file": "assets/form-flatepicker-ChSlk6xC.js",
|
||||
"name": "form-flatepicker",
|
||||
"src": "resources/js/pages/form-flatepicker.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/form-quilljs.js": {
|
||||
"file": "assets/form-quilljs-pSObT4Ti.js",
|
||||
"name": "form-quilljs",
|
||||
"src": "resources/js/pages/form-quilljs.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/maps-canada.js": {
|
||||
"file": "assets/maps-canada-Btz07hSk.js",
|
||||
"name": "maps-canada",
|
||||
"src": "resources/js/pages/maps-canada.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/maps-google.js": {
|
||||
"file": "assets/maps-google-KamR_rNw.js",
|
||||
"name": "maps-google",
|
||||
"src": "resources/js/pages/maps-google.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/maps-iraq.js": {
|
||||
"file": "assets/maps-iraq-Blhf9V_8.js",
|
||||
"name": "maps-iraq",
|
||||
"src": "resources/js/pages/maps-iraq.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/maps-russia.js": {
|
||||
"file": "assets/maps-russia-C3XucoMP.js",
|
||||
"name": "maps-russia",
|
||||
"src": "resources/js/pages/maps-russia.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/maps-spain.js": {
|
||||
"file": "assets/maps-spain-CdBIHB66.js",
|
||||
"name": "maps-spain",
|
||||
"src": "resources/js/pages/maps-spain.js",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/js/pages/maps-vector.js": {
|
||||
"file": "assets/maps-vector-C2WpvMU7.js",
|
||||
"name": "maps-vector",
|
||||
"src": "resources/js/pages/maps-vector.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_world-BH8KG5u4.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pages/table-gridjs.js": {
|
||||
"file": "assets/table-gridjs-BQh80cFh.js",
|
||||
"name": "table-gridjs",
|
||||
"src": "resources/js/pages/table-gridjs.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/pbg-task/index.js": {
|
||||
"file": "assets/index-BW29TEbh.js",
|
||||
"name": "index",
|
||||
"src": "resources/js/pbg-task/index.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_gridjs.umd-BiCNXlqL.js",
|
||||
"_global-config-9uDKFQ8j.js",
|
||||
"__commonjsHelpers-C4iS2aBk.js"
|
||||
]
|
||||
},
|
||||
"resources/js/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-B9clkWIC.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-ByHaR-XI.css",
|
||||
"src": "resources/scss/components/_circle.scss",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/scss/icons.scss": {
|
||||
"file": "assets/icons-CHxf0fE3.css",
|
||||
"src": "resources/scss/icons.scss",
|
||||
"isEntry": true
|
||||
},
|
||||
"resources/scss/style.scss": {
|
||||
"file": "assets/style-DF7fxh2D.css",
|
||||
"src": "resources/scss/style.scss",
|
||||
"isEntry": true
|
||||
}
|
||||
}
|
||||
1
public/build/assets/_commonjsHelpers-C4iS2aBk.js
Normal file
1
public/build/assets/_commonjsHelpers-C4iS2aBk.js
Normal file
@@ -0,0 +1 @@
|
||||
var u=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function f(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function l(e){if(e.__esModule)return e;var r=e.default;if(typeof r=="function"){var t=function o(){return this instanceof o?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};t.prototype=r.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach(function(o){var n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:function(){return e[o]}})}),t}export{f as a,u as c,l as g};
|
||||
808
public/build/assets/apexcharts.common-7mov3gaG.js
Normal file
808
public/build/assets/apexcharts.common-7mov3gaG.js
Normal file
File diff suppressed because one or more lines are too long
18
public/build/assets/app-Wz_4hh3O.js
Normal file
18
public/build/assets/app-Wz_4hh3O.js
Normal file
File diff suppressed because one or more lines are too long
BIN
public/build/assets/boxicons-0t2gX1vj.eot
Normal file
BIN
public/build/assets/boxicons-0t2gX1vj.eot
Normal file
Binary file not shown.
BIN
public/build/assets/boxicons-BEZXjQG5.ttf
Normal file
BIN
public/build/assets/boxicons-BEZXjQG5.ttf
Normal file
Binary file not shown.
BIN
public/build/assets/boxicons-C7pETWQJ.woff2
Normal file
BIN
public/build/assets/boxicons-C7pETWQJ.woff2
Normal file
Binary file not shown.
BIN
public/build/assets/boxicons-CEgI8ccS.woff
Normal file
BIN
public/build/assets/boxicons-CEgI8ccS.woff
Normal file
Binary file not shown.
1653
public/build/assets/boxicons-KSR1BgPC.svg
Normal file
1653
public/build/assets/boxicons-KSR1BgPC.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 1.2 MiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user