Item
This commit is contained in:
parent
2de620a3e3
commit
c0f79f9e9e
|
@ -0,0 +1,157 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Factor;
|
||||
use App\Models\Item;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class ItemController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->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);
|
||||
}
|
||||
}
|
|
@ -10,4 +10,9 @@ class Factor extends Model
|
|||
use HasFactory;
|
||||
|
||||
protected $guarded = [];
|
||||
|
||||
public function items()
|
||||
{
|
||||
return $this->hasMany(Item::class, 'factor_id', 'id');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Item extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $guarded = [];
|
||||
|
||||
public function factor()
|
||||
{
|
||||
return $this->belongsTo(Factor::class, 'factor_id', 'id');
|
||||
}
|
||||
}
|
|
@ -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'),
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
/**
|
||||
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Item>
|
||||
*/
|
||||
class ItemFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('items', function (Blueprint $table) {
|
||||
$table->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');
|
||||
}
|
||||
};
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class ItemSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
|
@ -52,7 +52,7 @@
|
|||
|
||||
<div class="mb-3">
|
||||
<label>Description</label>
|
||||
<textarea name="description" id="description" rows="5" class="form-control @error('password') is-invalid @enderror" placeholder="Enter description">{{ old('description') }}</textarea>
|
||||
<textarea name="description" id="description" rows="5" class="form-control @error('description') is-invalid @enderror" placeholder="Enter description">{{ old('description') }}</textarea>
|
||||
@error('description')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
|
||||
<div class="mb-3">
|
||||
<label>Description</label>
|
||||
<textarea name="description" id="description" rows="5" class="form-control @error('password') is-invalid @enderror" placeholder="Enter description">{{ old('description', $addiction->description) }}</textarea>
|
||||
<textarea name="description" id="description" rows="5" class="form-control @error('description') is-invalid @enderror" placeholder="Enter description">{{ old('description', $addiction->description) }}</textarea>
|
||||
@error('description')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
@extends('layouts.master')
|
||||
@section('title', 'Create Item')
|
||||
@section('content')
|
||||
<div class="page-content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="page-title-box d-flex align-items-center justify-content-between">
|
||||
<h4 class="mb-sm-0">Items</h4>
|
||||
|
||||
<div class="page-title-right">
|
||||
<ol class="breadcrumb m-0">
|
||||
<li class="breadcrumb-item"><a href="javascript: void(0);">Master</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.items.index') }}">Items</a></li>
|
||||
<li class="breadcrumb-item active">Create Item</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="card-title">Create Item</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form class="custom-validation" action="{{ route('admin.items.store') }}" method="POST" enctype="multipart/form-data">
|
||||
@csrf
|
||||
@method('POST')
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<div class="mb-3">
|
||||
<label>Factor</label>
|
||||
<select name="factor_id" id="factor_id" class="form-select" required>
|
||||
<option value="" hidden>Select Factor</option>
|
||||
@foreach ($factors as $factor)
|
||||
<option value="{{ $factor->id }}">{{ $factor->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label>Item</label>
|
||||
<input type="text" name="code" id="code" class="form-control @error('code') is-invalid @enderror" required placeholder="Enter item" value="{{ old('code') }}" />
|
||||
@error('code')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label>Value</label>
|
||||
<input type="number" step="0.01" min="0" name="value" id="value" class="form-control @error('value') is-invalid @enderror" required placeholder="Enter vakue" value="{{ old('vakue') }}" />
|
||||
@error('value')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<div class="mb-3">
|
||||
<label>Item Content</label>
|
||||
<textarea name="content" id="content" rows="5" class="form-control @error('content') is-invalid @enderror" placeholder="Enter content" required>{{ old('content') }}</textarea>
|
||||
@error('content')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label>Status</label>
|
||||
<select name="status" id="statusItem" class="form-select" required>
|
||||
<option value="active">Active</option>
|
||||
<option value="inactive">Inactive</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-0 text-end">
|
||||
<div>
|
||||
<button type="reset" class="btn btn-secondary waves-effect me-1">
|
||||
Cancel
|
||||
</button>
|
||||
<button type="submit" class="btn btn-primary waves-effect waves-light">
|
||||
Submit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -0,0 +1,90 @@
|
|||
@extends('layouts.master')
|
||||
@section('title', 'Detail Item')
|
||||
@section('content')
|
||||
<div class="page-content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="page-title-box d-flex align-items-center justify-content-between">
|
||||
<h4 class="mb-sm-0">Items</h4>
|
||||
|
||||
<div class="page-title-right">
|
||||
<ol class="breadcrumb m-0">
|
||||
<li class="breadcrumb-item"><a href="javascript: void(0);">Master</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.items.index') }}">Items</a></li>
|
||||
<li class="breadcrumb-item active">Detail Item</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="card-title">Detail Item</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form class="custom-validation" action="{{ route('admin.items.update', $item->id) }}" method="POST" enctype="multipart/form-data">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<div class="mb-3">
|
||||
<label>Factor</label>
|
||||
<select name="factor_id" id="factor_id" class="form-select" disabled>
|
||||
<option value="" hidden>Select Factor</option>
|
||||
@foreach ($factors as $factor)
|
||||
<option value="{{ $factor->id }}" {{ $item->factor_id == $factor->id ? 'selected' : '' }}>{{ $factor->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label>Item</label>
|
||||
<input type="text" name="code" id="code" class="form-control @error('code') is-invalid @enderror" disabled placeholder="Enter item" value="{{ old('code', $item->code) }}" />
|
||||
@error('code')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label>Value</label>
|
||||
<input type="number" step="0.01" min="0" name="value" id="value" class="form-control @error('value') is-invalid @enderror" disabled placeholder="Enter vakue" value="{{ old('vakue', $item->value) }}" />
|
||||
@error('value')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<div class="mb-3">
|
||||
<label>Item Content</label>
|
||||
<textarea name="content" id="content" rows="5" class="form-control @error('content') is-invalid @enderror" placeholder="Enter content" disabled>{{ old('content', $item->content) }}</textarea>
|
||||
@error('content')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label>Status</label>
|
||||
<select name="status" id="statusItem" class="form-select" disabled>
|
||||
<option value="active" {{ $item->status == 'active' ? 'selected' : '' }}>Active</option>
|
||||
<option value="inactive" {{ $item->status == 'inactive' ? 'selected' : '' }}>Inactive</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -0,0 +1,100 @@
|
|||
@extends('layouts.master')
|
||||
@section('title', 'Edit Item')
|
||||
@section('content')
|
||||
<div class="page-content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="page-title-box d-flex align-items-center justify-content-between">
|
||||
<h4 class="mb-sm-0">Items</h4>
|
||||
|
||||
<div class="page-title-right">
|
||||
<ol class="breadcrumb m-0">
|
||||
<li class="breadcrumb-item"><a href="javascript: void(0);">Master</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.items.index') }}">Items</a></li>
|
||||
<li class="breadcrumb-item active">Edit Item</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="card-title">Edit Item</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form class="custom-validation" action="{{ route('admin.items.update', $item->id) }}" method="POST" enctype="multipart/form-data">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<div class="mb-3">
|
||||
<label>Factor</label>
|
||||
<select name="factor_id" id="factor_id" class="form-select" required>
|
||||
<option value="" hidden>Select Factor</option>
|
||||
@foreach ($factors as $factor)
|
||||
<option value="{{ $factor->id }}" {{ $item->factor_id == $factor->id ? 'selected' : '' }}>{{ $factor->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label>Item</label>
|
||||
<input type="text" name="code" id="code" class="form-control @error('code') is-invalid @enderror" required placeholder="Enter item" value="{{ old('code', $item->code) }}" />
|
||||
@error('code')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label>Value</label>
|
||||
<input type="number" step="0.01" min="0" name="value" id="value" class="form-control @error('value') is-invalid @enderror" required placeholder="Enter vakue" value="{{ old('vakue', $item->value) }}" />
|
||||
@error('value')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-6">
|
||||
<div class="mb-3">
|
||||
<label>Item Content</label>
|
||||
<textarea name="content" id="content" rows="5" class="form-control @error('content') is-invalid @enderror" placeholder="Enter content" required>{{ old('content', $item->content) }}</textarea>
|
||||
@error('content')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label>Status</label>
|
||||
<select name="status" id="statusItem" class="form-select" required>
|
||||
<option value="active" {{ $item->status == 'active' ? 'selected' : '' }}>Active</option>
|
||||
<option value="inactive" {{ $item->status == 'inactive' ? 'selected' : '' }}>Inactive</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-0 text-end">
|
||||
<div>
|
||||
<button type="reset" class="btn btn-secondary waves-effect me-1">
|
||||
Cancel
|
||||
</button>
|
||||
<button type="submit" class="btn btn-primary waves-effect waves-light">
|
||||
Submit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -0,0 +1,180 @@
|
|||
@extends('layouts.master')
|
||||
@section('title', 'Item Datas')
|
||||
@section('styles')
|
||||
<!-- DataTables -->
|
||||
<link href="{{ asset('assets/libs/datatables.net-bs5/css/dataTables.bootstrap5.min.css') }}" rel="stylesheet" type="text/css" />
|
||||
|
||||
<!-- Responsive datatable examples -->
|
||||
<link href="{{ asset('assets/libs/datatables.net-responsive-bs5/css/responsive.bootstrap5.min.css') }}" rel="stylesheet" type="text/css" />
|
||||
<link href="{{ asset('assets/libs/datatables.net-rowgroup-bs5/css/rowGroup.bootstrap5.min.css') }}" rel="stylesheet" type="text/css" />
|
||||
@endsection
|
||||
@section('content')
|
||||
<div class="page-content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="page-title-box d-flex align-items-center justify-content-between">
|
||||
<h4 class="mb-sm-0">Item</h4>
|
||||
|
||||
<div class="page-title-right">
|
||||
<ol class="breadcrumb m-0">
|
||||
<li class="breadcrumb-item"><a href="javascript: void(0);">Master</a></li>
|
||||
<li class="breadcrumb-item active">Item</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="card-title">Item Data</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<a href="{{ route('admin.items.create') }}" class="btn btn-primary mb-3">Create Item</a>
|
||||
<table id="datatable" class="table table-hover align-middle table-bordered dt-responsive nowrap" style="border-collapse: collapse; border-spacing: 0; width: 100%;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="10px" class="text-center">#</th>
|
||||
<th>Factor</th>
|
||||
<th>Item</th>
|
||||
<th>Item Content</th>
|
||||
<th>Value</th>
|
||||
<th class="text-center">Status</th>
|
||||
<th width="10px" class="text-center">#</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($items as $factorName => $groupedItems)
|
||||
@foreach ($groupedItems as $index => $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td><strong>{{ $factorName }}</strong></td>
|
||||
<td>{{ $item->code }}</td>
|
||||
<td>{{ $item->content }}</td>
|
||||
<td>{{ $item->value }}</td>
|
||||
<td class="text-center">
|
||||
@if ($item->status == 'active')
|
||||
<span class="badge badge-success">{{ ucwords($item->status) }}</span>
|
||||
@else
|
||||
<span class="badge badge-danger">{{ ucwords($item->status) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<div class="dropdown d-inline-block">
|
||||
<button class="btn btn-flat-secondary btn-sm dropdown" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fas fa-ellipsis-h align-middle"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item" href="{{ route('admin.items.edit', $item->id) }}"><i class="mdi mdi-square-edit-outline align-bottom me-2 text-muted"></i> Edit</a></li>
|
||||
<li><a class="dropdown-item" href="{{ route('admin.items.show', $item->id) }}"><i class="mdi mdi-eye-outline align-bottom me-2 text-muted"></i> Detail</a></li>
|
||||
<li>
|
||||
<a href="javascript:void(0);" class="dropdown-item delete" data-id="{{ $item->id }}">
|
||||
<i class="mdi mdi-delete-outline align-bottom me-2 text-muted"></i> Delete
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- end col -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@section('scripts')
|
||||
<!-- Required datatable js -->
|
||||
<script src="{{ asset('assets/libs/datatables.net/js/jquery.dataTables.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/datatables.net-bs5/js/dataTables.bootstrap5.min.js') }}"></script>
|
||||
|
||||
<!-- Responsive examples -->
|
||||
<script src="{{ asset('assets/libs/datatables.net-responsive/js/dataTables.responsive.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/datatables.net-responsive-bs5/js/responsive.bootstrap5.min.js') }}"></script>
|
||||
|
||||
<script src="{{ asset('assets/libs/datatables.net-rowgroup/js/dataTables.rowGroup.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/datatables.net-rowgroup-bs5/js/rowGroup.bootstrap5.min.js') }}"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
$(document).ready(function () {
|
||||
$('#datatable').DataTable({
|
||||
rowGroup: {
|
||||
dataSrc: 1,
|
||||
},
|
||||
columnDefs: [
|
||||
{ targets: 1, visible: false }
|
||||
],
|
||||
responsive: true,
|
||||
order: [[1, 'asc']],
|
||||
});
|
||||
});
|
||||
|
||||
$('.delete').click(function (e) {
|
||||
var id = $(this).data('id');
|
||||
e.preventDefault();
|
||||
n.fire({
|
||||
title:"Are you sure?",
|
||||
text:"You won't be able to revert this!",
|
||||
icon:"warning",
|
||||
showCancelButton:!0,
|
||||
confirmButtonColor:"#3085d6",
|
||||
cancelButtonColor:"#d33",
|
||||
confirmButtonText:"Yes, delete it!"
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
var data = {
|
||||
_token: "{{ csrf_token() }}",
|
||||
_method:'delete'
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
url: `{{ url('admin/items')}}/${id}`,
|
||||
dataType: 'json',
|
||||
data: data,
|
||||
type: 'POST',
|
||||
}).done(function(response) {
|
||||
if (response.status) {
|
||||
n.fire({
|
||||
title: "Success!",
|
||||
text: response.message,
|
||||
icon: "success",
|
||||
confirmButtonClass: "btn btn-primary w-xs mt-2",
|
||||
buttonsStyling: !1
|
||||
})
|
||||
setTimeout(
|
||||
function() {
|
||||
window.location.reload(true);
|
||||
}, 1000
|
||||
);
|
||||
} else {
|
||||
n.fire({
|
||||
title: "Error!",
|
||||
text: response.message,
|
||||
icon: "error",
|
||||
confirmButtonClass: "btn btn-primary w-xs mt-2",
|
||||
buttonsStyling: !1
|
||||
})
|
||||
}
|
||||
}).fail(function(response) {
|
||||
var response = response.responseJSON;
|
||||
n.fire({
|
||||
title: "Error!",
|
||||
text: response.message,
|
||||
icon: "error",
|
||||
confirmButtonClass: "btn btn-primary w-xs mt-2",
|
||||
buttonsStyling: !1
|
||||
})
|
||||
})
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
|
@ -41,6 +41,11 @@
|
|||
<i class="mdi mdi-checkbox-blank-circle align-middle"></i> Factor
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ route('admin.items.index') }}" class="@if (Request::is('admin/items*')) active @endif">
|
||||
<i class="mdi mdi-checkbox-blank-circle align-middle"></i> Item
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
@ -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 () {
|
||||
|
|
Loading…
Reference in New Issue