diff --git a/app/Http/Controllers/Settings/SettingsController.php b/app/Http/Controllers/Settings/SettingsController.php
index 1ba3af3..473db86 100644
--- a/app/Http/Controllers/Settings/SettingsController.php
+++ b/app/Http/Controllers/Settings/SettingsController.php
@@ -3,15 +3,110 @@
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
+use App\Http\Requests\GlobalSettingRequest;
+use App\Http\Requests\UpdateGlobalSettingRequest;
+use App\Models\GlobalSetting;
+use Exception;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
class SettingsController extends Controller
{
- public function index(){
+ /**
+ * Display a listing of the resource.
+ */
+ public function index()
+ {
return view('settings.general.index');
}
-
- public function create(){
+
+ /**
+ * Show the form for creating a new resource.
+ */
+ public function create()
+ {
return view('settings.general.create');
}
+
+ /**
+ * Store a newly created resource in storage.
+ */
+ public function store(GlobalSettingRequest $request)
+ {
+ try{
+ DB::beginTransaction();
+ GlobalSetting::create($request->validated());
+ DB::commit();
+ return redirect()->route('general.index')->with('success', 'Data saved successfully.');
+ }catch(Exception $e){
+ DB::rollBack();
+ return redirect()->back()
+ ->withInput()
+ ->with('error', 'Something went wrong while saving data. ' . $e->getMessage());
+ }
+ }
+
+ /**
+ * Display the specified resource.
+ */
+ public function show(string $id)
+ {
+ $data = GlobalSetting::find($id);
+ if(!$data){
+ return redirect()->route('general.index')->with('error', 'Invalid id');
+ }
+ return view('settings.general.show', compact('data'));
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ */
+ public function edit(string $id)
+ {
+ $data = GlobalSetting::find($id);
+ if(!$data){
+ return redirect()->route('general.index')->with('error', 'Invalid id');
+ }
+ return view('settings.general.edit', compact('data'));
+ }
+
+ /**
+ * Update the specified resource in storage.
+ */
+ public function update(UpdateGlobalSettingRequest $request, string $id)
+ {
+ try{
+ DB::beginTransaction();
+ $data = GlobalSetting::findOrFail($id);
+
+ $data->update($request->validated());
+ DB::commit();
+ return redirect()->route('general.index')->with('success', 'Data updated successfully.');
+ }catch(Exception $e){
+ DB::rollBack();
+ return redirect()->back()
+ ->withInput()
+ ->with('error', 'Something went wrong while updating data. '. $e->getMessage());
+ }
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ */
+ public function destroy(string $id)
+ {
+ try{
+ DB::beginTransaction();
+ $data = GlobalSetting::findOrFail($id);
+
+ $data->delete();
+ DB::commit();
+ return response()->json(['success' => true, 'message' => 'Item deleted successfully.']);
+ }catch(Exception $e){
+ DB::rollBack();
+ Log::error($e->getMessage());
+ return response()->json(['success' => false, 'message' => 'Failed to delete item.'], 500);
+ }
+ }
}
diff --git a/app/Http/Requests/UpdateGlobalSettingRequest.php b/app/Http/Requests/UpdateGlobalSettingRequest.php
new file mode 100644
index 0000000..8d053bb
--- /dev/null
+++ b/app/Http/Requests/UpdateGlobalSettingRequest.php
@@ -0,0 +1,33 @@
+|string>
+ */
+ public function rules(): array
+ {
+ $id = $this->route('general');
+
+ return [
+ 'key' => 'required|unique:global_settings,key,' . $id,
+ 'value' => 'required',
+ 'type' => 'nullable',
+ 'description' => 'nullable'
+ ];
+ }
+}
diff --git a/bootstrap/app.php b/bootstrap/app.php
index bd95a51..3bb9d6c 100755
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -22,7 +22,7 @@ return Application::configure(basePath: dirname(__DIR__))
}
});
$exceptions->render(function (HttpException $exception, Request $request){
- if($exception->getStatusCode() == 404 && $request->isNot('api/*')) {
+ if($exception->getStatusCode() == 404 && !$request->is('api/*')) {
return response()->view('pages.404',[],404);
}
});
diff --git a/resources/js/settings/general/general-settings.js b/resources/js/settings/general/general-settings.js
index 45573f1..d205482 100644
--- a/resources/js/settings/general/general-settings.js
+++ b/resources/js/settings/general/general-settings.js
@@ -1,36 +1,108 @@
import { Grid } from "gridjs/dist/gridjs.umd.js";
-import gridjs from 'gridjs/dist/gridjs.umd.js'
-import 'gridjs/dist/gridjs.umd.js'
+import gridjs from "gridjs/dist/gridjs.umd.js";
+import "gridjs/dist/gridjs.umd.js";
import GlobalConfig from "../../global-config.js";
class SyncronizeTask {
- init(){
- this.initTableGeneralSettings();
- }
- initTableGeneralSettings(){
- new Grid({
- columns: [
- "ID", "Key", "Value", "Description", "Created",
- ],
- pagination: {
- limit: 10,
- server: {
- url: (prev, page, limit) => `${prev}?page=${page}`
- }
- },
- sort: true,
- search: {
- server: {
- url: (prev, page, keyword) => `${prev}?page=${page}&search=${keyword}`
- }
- },
- server: {
- url: `${GlobalConfig.apiHost}/api/global-settings`,
- then: data => data.data.map((item) => [item.id, item.key, item.value, item.description, item.created_at])
- }
- }).render(document.getElementById("general-setting-table"));
- }
+ init() {
+ this.initTableGeneralSettings();
+ }
+ initTableGeneralSettings() {
+ const table = new Grid({
+ columns: [
+ "ID",
+ "Key",
+ "Value",
+ "Description",
+ "Created",
+ {
+ name: "Actions",
+ width: "120px",
+ formatter: function (cell) {
+ console.log("cell data", cell);
+ return gridjs.html(`
+
+ `);
+ },
+ },
+ ],
+ pagination: {
+ limit: 15,
+ server: {
+ url: (prev, page, limit) => `${prev}?page=${page}`,
+ },
+ },
+ sort: true,
+ search: {
+ server: {
+ url: (prev, page, keyword) =>
+ `${prev}?page=${page}&search=${keyword}`,
+ },
+ },
+ server: {
+ url: `${GlobalConfig.apiHost}/api/global-settings`,
+ headers: {
+ Authorization: `Bearer ${document
+ .querySelector('meta[name="csrf-token"]')
+ .getAttribute("content")}`,
+ "Content-Type": "application/json",
+ },
+ then: (data) =>
+ data.data.map((item) => [
+ item.id,
+ item.key,
+ item.value,
+ item.description,
+ item.created_at,
+ item.id,
+ ]),
+ },
+ });
+ table.render(document.getElementById("general-setting-table"));
+
+ document.addEventListener("click", this.handleDelete);
+ }
+ handleDelete(event) {
+ if (event.target.classList.contains("btn-delete-global-settings")) {
+ event.preventDefault();
+ const id = event.target.getAttribute("data-id");
+
+ if (confirm("Are you sure you want to delete this item?")) {
+ fetch(`/settings/general/${id}`, {
+ method: "DELETE",
+ headers: {
+ "X-CSRF-TOKEN": document
+ .querySelector('meta[name="csrf-token"]')
+ .getAttribute("content"),
+ "Content-Type": "application/json",
+ },
+ })
+ .then((response) => {
+ if (response.ok) {
+ alert("Item deleted successfully!");
+ window.location.reload();
+ } else {
+ return response.json().then((error) => {
+ throw new Error(
+ error.message || "Failed to delete item."
+ );
+ });
+ }
+ })
+ .catch((error) => {
+ console.error("Error deleting item:", error);
+ alert("Something went wrong. Please try again.");
+ });
+ }
+ }
+ }
}
-document.addEventListener('DOMContentLoaded', function (e) {
- new SyncronizeTask().init();
-});
\ No newline at end of file
+document.addEventListener("click", function (e) {
+ handleDelete(e); // Call the function on click event
+});
+document.addEventListener("DOMContentLoaded", function (e) {
+ new SyncronizeTask().init();
+});
diff --git a/resources/views/layouts/partials/sidebar.blade.php b/resources/views/layouts/partials/sidebar.blade.php
index e610a11..23d45f3 100644
--- a/resources/views/layouts/partials/sidebar.blade.php
+++ b/resources/views/layouts/partials/sidebar.blade.php
@@ -69,7 +69,7 @@
+
+
+
+
diff --git a/resources/views/master/users/index.blade.php b/resources/views/master/users/index.blade.php
index 0524d27..c5a58e0 100644
--- a/resources/views/master/users/index.blade.php
+++ b/resources/views/master/users/index.blade.php
@@ -1,4 +1,4 @@
-@extends('layouts.vertical', ['subtitle' => 'Master'])\
+@extends('layouts.vertical', ['subtitle' => 'Master'])
@section('css')
@vite(['node_modules/gridjs/dist/theme/mermaid.min.css'])
diff --git a/resources/views/request-assignment/index.blade.php b/resources/views/request-assignment/index.blade.php
index 4a6a027..8b3e623 100644
--- a/resources/views/request-assignment/index.blade.php
+++ b/resources/views/request-assignment/index.blade.php
@@ -1,3 +1,23 @@
-
-
+@extends('layouts.vertical', ['subtitle' => 'Request Assignments'])
+
+@section('css')
+@vite(['node_modules/gridjs/dist/theme/mermaid.min.css'])
+@endsection
+
+@section('content')
+
+@include('layouts.partials/page-title', ['title' => 'Request Assignment', 'subtitle' => 'Task'])
+
+
+
+
Request Assignment Page
+
+
+
+@endsection
+
+@section('scripts')
+@endsection
\ No newline at end of file
diff --git a/resources/views/settings/general/create.blade.php b/resources/views/settings/general/create.blade.php
index 99f413c..1584682 100644
--- a/resources/views/settings/general/create.blade.php
+++ b/resources/views/settings/general/create.blade.php
@@ -5,22 +5,46 @@
@include('layouts.partials/page-title', ['title' => 'Se', 'subtitle' => 'Syncronize'])
+ @if (session('error'))
+
+ {{ session('error') }}
+
+ @endif
+
+ @if ($errors->any())
+
+
+ @foreach ($errors->all() as $error)
+ - {{ $error }}
+ @endforeach
+
+
+ @endif
-
diff --git a/resources/views/settings/general/edit.blade.php b/resources/views/settings/general/edit.blade.php
new file mode 100644
index 0000000..8f16fb2
--- /dev/null
+++ b/resources/views/settings/general/edit.blade.php
@@ -0,0 +1,56 @@
+@extends('layouts.vertical', ['subtitle' => 'Create User'])
+
+@section('content')
+
+@include('layouts.partials/page-title', ['title' => 'Se', 'subtitle' => 'Syncronize'])
+
+
+ @if (session('error'))
+
+ {{ session('error') }}
+
+ @endif
+
+ @if ($errors->any())
+
+
+ @foreach ($errors->all() as $error)
+ - {{ $error }}
+ @endforeach
+
+
+ @endif
+
+
+
+@endsection
+
+@section('scripts')
+@vite(['resources/js/tables/common-table.js'])
+@endsection
\ No newline at end of file
diff --git a/resources/views/settings/general/index.blade.php b/resources/views/settings/general/index.blade.php
index f227e52..0917f4c 100644
--- a/resources/views/settings/general/index.blade.php
+++ b/resources/views/settings/general/index.blade.php
@@ -9,12 +9,12 @@
@include('layouts.partials/page-title', ['title' => 'Settings', 'subtitle' => 'Syncronize'])
@endsection
diff --git a/routes/api.php b/routes/api.php
index 1dacfcd..0ecdcf3 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -16,7 +16,7 @@ Route::get('/user', function (Request $request) {
})->middleware('auth:sanctum');
Route::group(['middleware' => 'auth:scantum'], function (){
-
+ Route::apiResource('global-settings', GlobalSettingsController::class);
});
Route::controller(DashboardController::class)->group(function(){
Route::get('/business-documents','businnessDocument');
@@ -36,7 +36,7 @@ Route::get('/sync-task-submit/{uuid}', [SyncronizeController::class, 'syncTaskDe
Route::apiResource('import-datasource',ImportDatasourceController::class);
// global setting
-Route::apiResource('global-settings', GlobalSettingsController::class);
+
// request assignment
Route::apiResource('request-assignments',RequestAssignmentController::class);
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
index a5972df..5a18bc9 100755
--- a/routes/web.php
+++ b/routes/web.php
@@ -3,6 +3,7 @@
use App\Http\Controllers\Dashboards\BigDataController;
use App\Http\Controllers\Home\HomeController;
use App\Http\Controllers\Master\UsersController;
+use App\Http\Controllers\RequestAssignment\PbgTaskController;
use App\Http\Controllers\Settings\SettingsController;
use App\Http\Controllers\Settings\SyncronizeController;
use Illuminate\Support\Facades\Route;
@@ -29,8 +30,9 @@ Route::group(['middleware' => 'auth'], function(){
// settings
Route::group(['prefix' => '/settings'], function(){
+ Route::resource('/general', SettingsController::class);
Route::get('/syncronize', [SyncronizeController::class, 'index'])->name('settings.syncronize');
- Route::get('/general', [SettingsController::class, 'index'])->name('settings.general');
+ // Route::get('/general', [SettingsController::class, 'index'])->name('settings.general');
Route::post('/syncronize', [SyncronizeController::class, 'syncronizeTask'])->name('settings.sync');
});
@@ -51,4 +53,12 @@ Route::group(['middleware' => 'auth'], function(){
Route::delete('/users/delete/{id}', [UsersController::class, 'delete'])->name('master.users.delete');
Route::delete('/users/show/{id}', [UsersController::class, 'show'])->name('master.users.show');
});
+
+ // request assignments
+
+ Route::group(['prefix' => '/request-assignments'], function(){
+ Route::controller(PbgTaskController::class)->group(function(){
+ Route::get('/index', 'index')->name('request-assignments.index');
+ });
+ });
});
\ No newline at end of file