From c0f79f9e9e4a226ecf9be1e88508dbe2d22babf5 Mon Sep 17 00:00:00 2001 From: misbahsurur Date: Tue, 10 Dec 2024 20:42:37 +0700 Subject: [PATCH] Item --- app/Http/Controllers/Admin/ItemController.php | 157 +++++++++++++++ app/Models/Factor.php | 5 + app/Models/Item.php | 18 ++ config/database.php | 2 +- database/factories/ItemFactory.php | 23 +++ .../2024_12_10_192842_create_items_table.php | 36 ++++ database/seeders/ItemSeeder.php | 19 ++ .../views/admin/addictions/create.blade.php | 2 +- .../views/admin/addictions/edit.blade.php | 2 +- resources/views/admin/items/create.blade.php | 100 ++++++++++ resources/views/admin/items/detail.blade.php | 90 +++++++++ resources/views/admin/items/edit.blade.php | 100 ++++++++++ resources/views/admin/items/index.blade.php | 180 ++++++++++++++++++ resources/views/layouts/sidebar.blade.php | 5 + routes/web.php | 5 +- 15 files changed, 740 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/Admin/ItemController.php create mode 100644 app/Models/Item.php create mode 100644 database/factories/ItemFactory.php create mode 100644 database/migrations/2024_12_10_192842_create_items_table.php create mode 100644 database/seeders/ItemSeeder.php create mode 100644 resources/views/admin/items/create.blade.php create mode 100644 resources/views/admin/items/detail.blade.php create mode 100644 resources/views/admin/items/edit.blade.php create mode 100644 resources/views/admin/items/index.blade.php diff --git a/app/Http/Controllers/Admin/ItemController.php b/app/Http/Controllers/Admin/ItemController.php new file mode 100644 index 0000000..592adce --- /dev/null +++ b/app/Http/Controllers/Admin/ItemController.php @@ -0,0 +1,157 @@ +middleware('role:admin'); + } + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + $items = Item::with('factor') + ->get() + ->groupBy('factor.name'); + + return view('admin.items.index', compact('items')); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $factors = Factor::where('status', 'active')->get(); + return view('admin.items.create', compact('factors')); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'factor_id' => 'required', + 'code' => 'required', + 'value' => 'required|numeric', + 'content' => 'required', + 'status' => 'required', + ]); + + if ($validator->fails()) { + return redirect()->back()->withErrors($validator)->withInput(); + } + + $item = Item::create([ + 'factor_id' => $request->factor_id, + 'code' => $request->code, + 'value' => $request->value, + 'content' => $request->content, + 'status' => $request->status, + ]); + + if ($item) { + return redirect()->route('admin.items.index')->with('success', 'Item created successfully.'); + } else { + return redirect()->back()->with('error', 'Failed to create item.'); + } + } + + /** + * Display the specified resource. + * + * @param \App\Models\Item $item + * @return \Illuminate\Http\Response + */ + public function show(Item $item) + { + $factors = Factor::where('status', 'active')->get(); + return view('admin.items.detail', compact('item', 'factors')); + } + + /** + * Show the form for editing the specified resource. + * + * @param \App\Models\Item $item + * @return \Illuminate\Http\Response + */ + public function edit(Item $item) + { + $factors = Factor::where('status', 'active')->get(); + return view('admin.items.edit', compact('item', 'factors')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\Item $item + * @return \Illuminate\Http\Response + */ + public function update(Request $request, Item $item) + { + $validator = Validator::make($request->all(), [ + 'factor_id' => 'required', + 'code' => 'required', + 'value' => 'required|numeric', + 'content' => 'required', + 'status' => 'required', + ]); + + if ($validator->fails()) { + return redirect()->back()->withErrors($validator)->withInput(); + } + + $item->update([ + 'factor_id' => $request->factor_id, + 'code' => $request->code, + 'value' => $request->value, + 'content' => $request->content, + 'status' => $request->status, + ]); + + if ($item) { + return redirect()->route('admin.items.index')->with('success', 'Item updated successfully.'); + } else { + return redirect()->back()->with('error', 'Failed to update item.'); + } + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\Item $item + * @return \Illuminate\Http\Response + */ + public function destroy(Item $item) + { + if (!$item->delete()) { + return response()->json([ + 'status' => false, + 'message' => 'Data has been used on another page' + ], 400); + } + return response()->json([ + 'status' => true, + 'message' => 'Success delete data' + ], 200); + } +} diff --git a/app/Models/Factor.php b/app/Models/Factor.php index 9c39d2c..7f2c399 100644 --- a/app/Models/Factor.php +++ b/app/Models/Factor.php @@ -10,4 +10,9 @@ class Factor extends Model use HasFactory; protected $guarded = []; + + public function items() + { + return $this->hasMany(Item::class, 'factor_id', 'id'); + } } diff --git a/app/Models/Item.php b/app/Models/Item.php new file mode 100644 index 0000000..1395ce1 --- /dev/null +++ b/app/Models/Item.php @@ -0,0 +1,18 @@ +belongsTo(Factor::class, 'factor_id', 'id'); + } +} diff --git a/config/database.php b/config/database.php index 137ad18..63c7fb8 100644 --- a/config/database.php +++ b/config/database.php @@ -56,7 +56,7 @@ 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, - 'strict' => true, + 'strict' => false, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), diff --git a/database/factories/ItemFactory.php b/database/factories/ItemFactory.php new file mode 100644 index 0000000..659d90d --- /dev/null +++ b/database/factories/ItemFactory.php @@ -0,0 +1,23 @@ + + */ +class ItemFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + // + ]; + } +} diff --git a/database/migrations/2024_12_10_192842_create_items_table.php b/database/migrations/2024_12_10_192842_create_items_table.php new file mode 100644 index 0000000..0058ca1 --- /dev/null +++ b/database/migrations/2024_12_10_192842_create_items_table.php @@ -0,0 +1,36 @@ +id(); + $table->foreignId('factor_id')->constrained()->onDelete('cascade'); + $table->string('code'); + $table->string('content'); + $table->decimal('value'); + $table->enum('status', ['active', 'inactive'])->default('active'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('items'); + } +}; diff --git a/database/seeders/ItemSeeder.php b/database/seeders/ItemSeeder.php new file mode 100644 index 0000000..da06d49 --- /dev/null +++ b/database/seeders/ItemSeeder.php @@ -0,0 +1,19 @@ + - + @error('description') {{ $message }} diff --git a/resources/views/admin/addictions/edit.blade.php b/resources/views/admin/addictions/edit.blade.php index 0924af0..e6b981c 100644 --- a/resources/views/admin/addictions/edit.blade.php +++ b/resources/views/admin/addictions/edit.blade.php @@ -52,7 +52,7 @@
- + @error('description') {{ $message }} diff --git a/resources/views/admin/items/create.blade.php b/resources/views/admin/items/create.blade.php new file mode 100644 index 0000000..93ce6ec --- /dev/null +++ b/resources/views/admin/items/create.blade.php @@ -0,0 +1,100 @@ +@extends('layouts.master') +@section('title', 'Create Item') +@section('content') +
+
+
+
+
+

Items

+ +
+ +
+ +
+
+
+
+
+
+
+

Create Item

+
+
+
+ @csrf + @method('POST') +
+
+
+ + +
+
+ + + @error('code') + + {{ $message }} + + @enderror +
+
+ + + @error('value') + + {{ $message }} + + @enderror +
+
+
+
+ + + @error('content') + + {{ $message }} + + @enderror +
+ +
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+
+
+@endsection diff --git a/resources/views/admin/items/detail.blade.php b/resources/views/admin/items/detail.blade.php new file mode 100644 index 0000000..425211b --- /dev/null +++ b/resources/views/admin/items/detail.blade.php @@ -0,0 +1,90 @@ +@extends('layouts.master') +@section('title', 'Detail Item') +@section('content') +
+
+
+
+
+

Items

+ +
+ +
+ +
+
+
+
+
+
+
+

Detail Item

+
+
+
+ @csrf + @method('PUT') +
+
+
+ + +
+
+ + + @error('code') + + {{ $message }} + + @enderror +
+
+ + + @error('value') + + {{ $message }} + + @enderror +
+
+
+
+ + + @error('content') + + {{ $message }} + + @enderror +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+@endsection diff --git a/resources/views/admin/items/edit.blade.php b/resources/views/admin/items/edit.blade.php new file mode 100644 index 0000000..43553b7 --- /dev/null +++ b/resources/views/admin/items/edit.blade.php @@ -0,0 +1,100 @@ +@extends('layouts.master') +@section('title', 'Edit Item') +@section('content') +
+
+
+
+
+

Items

+ +
+ +
+ +
+
+
+
+
+
+
+

Edit Item

+
+
+
+ @csrf + @method('PUT') +
+
+
+ + +
+
+ + + @error('code') + + {{ $message }} + + @enderror +
+
+ + + @error('value') + + {{ $message }} + + @enderror +
+
+
+
+ + + @error('content') + + {{ $message }} + + @enderror +
+ +
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+
+
+@endsection diff --git a/resources/views/admin/items/index.blade.php b/resources/views/admin/items/index.blade.php new file mode 100644 index 0000000..7c697c4 --- /dev/null +++ b/resources/views/admin/items/index.blade.php @@ -0,0 +1,180 @@ +@extends('layouts.master') +@section('title', 'Item Datas') +@section('styles') + + + + + + +@endsection +@section('content') +
+
+
+
+
+

Item

+ +
+ +
+ +
+
+
+
+
+
+
+

Item Data

+
+
+ Create Item + + + + + + + + + + + + + + @foreach ($items as $factorName => $groupedItems) + @foreach ($groupedItems as $index => $item) + + + + + + + + + + @endforeach + @endforeach + +
#FactorItemItem ContentValueStatus#
{{ $loop->iteration }}{{ $factorName }}{{ $item->code }}{{ $item->content }}{{ $item->value }} + @if ($item->status == 'active') + {{ ucwords($item->status) }} + @else + {{ ucwords($item->status) }} + @endif + + +
+
+
+
+
+
+
+@endsection +@section('scripts') + + + + + + + + + + + +@endsection diff --git a/resources/views/layouts/sidebar.blade.php b/resources/views/layouts/sidebar.blade.php index 86a2f42..5b48079 100644 --- a/resources/views/layouts/sidebar.blade.php +++ b/resources/views/layouts/sidebar.blade.php @@ -41,6 +41,11 @@ Factor +
  • + + Item + +
  • diff --git a/routes/web.php b/routes/web.php index e2eef53..1a4badb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -36,8 +36,11 @@ // Addcition Route::resource('likerts', App\Http\Controllers\Admin\LikertController::class); - // Addcition + // Factor Route::resource('factors', App\Http\Controllers\Admin\FactorController::class); + + // Item + Route::resource('items', App\Http\Controllers\Admin\ItemController::class); }); Route::middleware('role:user')->name('user.')->group(function () {