From 34575b2d96b228f55832629f79e40e63d037f3af Mon Sep 17 00:00:00 2001 From: pbao9 Date: Mon, 2 Feb 2026 10:06:42 +0700 Subject: [PATCH] udpate --- .../Controllers/admin/package/OsVersion.php | 46 +++++++-- app/Repositories/Os/OsCachedRepository.php | 35 ++++--- app/Repositories/Os/OsRepository.php | 50 +++++----- app/Repositories/Os/OsRepositoryInterface.php | 8 +- .../{Breabcrumb.php => AdminBreadcrumb.php} | 4 +- database/migrations/2024_02_02_395629_os.php | 6 +- .../pages/package/datacenter/add.blade.php | 2 +- .../pages/package/datacenter/edit.blade.php | 2 +- .../pages/package/datacenter/index.blade.php | 32 +++--- .../pages/package/datastore/add.blade.php | 2 +- .../pages/package/datastore/edit.blade.php | 2 +- .../pages/package/datastore/index.blade.php | 2 +- .../pages/package/folder/edit.blade.php | 2 +- .../pages/package/folder/index.blade.php | 2 +- .../pages/package/group/add.blade.php | 2 +- .../pages/package/group/edit.blade.php | 2 +- .../pages/package/group/index.blade.php | 2 +- .../pages/package/host/add.blade.php | 2 +- .../pages/package/host/edit.blade.php | 2 +- .../pages/package/host/index.blade.php | 2 +- .../pages/package/network/add.blade.php | 2 +- .../pages/package/network/edit.blade.php | 2 +- .../pages/package/network/index.blade.php | 2 +- .../pages/package/version/add.blade.php | 54 +++++++++- .../pages/package/version/edit.blade.php | 24 ++++- .../pages/package/version/index.blade.php | 99 ++++++------------- ...b.blade.php => admin-breadcrumb.blade.php} | 0 .../views/components/breadcrumb.blade.php | 19 ++++ routes/admin.php | 1 + 29 files changed, 253 insertions(+), 157 deletions(-) rename app/View/Components/{Breabcrumb.php => AdminBreadcrumb.php} (80%) rename resources/views/components/{breabcrumb.blade.php => admin-breadcrumb.blade.php} (100%) create mode 100644 resources/views/components/breadcrumb.blade.php diff --git a/app/Http/Controllers/admin/package/OsVersion.php b/app/Http/Controllers/admin/package/OsVersion.php index 8013224..fc29410 100644 --- a/app/Http/Controllers/admin/package/OsVersion.php +++ b/app/Http/Controllers/admin/package/OsVersion.php @@ -15,6 +15,7 @@ use App\Repositories\Os\OsRepositoryInterface; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; +use Yajra\DataTables\Facades\DataTables; class OsVersion extends Controller { @@ -39,10 +40,10 @@ class OsVersion extends Controller public function store(OsVersionRequest $request) { $validatedData = $request->validated(); - + // Remove unnecessary fields unset($validatedData['vcenter_id'], $validatedData['module_datacenter_id']); - + DB::beginTransaction(); try { $this->osRepository->create($validatedData); @@ -55,14 +56,11 @@ class OsVersion extends Controller } public function edit(int $id = 0) { - - $version = $this->osRepository->findWithRelationships($id, ['osGroup.host.datacenter.vCenter']); if (! $version) { return back()->withErrors('Can\'t find version os by ID #' . $id); } - $title = "Edit version OS"; return view('administrator.pages.package.version.edit', compact('title', 'version')); @@ -73,12 +71,12 @@ class OsVersion extends Controller if (! $version) { return back()->withErrors('Can\'t find version os by ID #' . $id); } - + $validatedData = $request->validated(); - + // Remove unnecessary fields unset($validatedData['vcenter_id'], $validatedData['module_datacenter_id']); - + DB::beginTransaction(); try { $this->osRepository->update($id, $validatedData); @@ -106,4 +104,36 @@ class OsVersion extends Controller return back()->with('success', 'Delete success'); } + + public function datatable(Request $request) + { + $query = $this->osRepository->filter( + [], + ['osGroup'], + [], + ['*'], + true + ); + + return DataTables::eloquent($query) + ->editColumn('os_group', function ($d) { + return $d->osGroup ? $d->osGroup->name . ' - ' . $d->osGroup->host->name : ''; + }) + ->editColumn('status', function ($d) { + return $d->getStatus(); + }) + ->addColumn('action', function ($d) { + return ' + Edit + '; + }) + ->filterColumn('host', function ($query, $keyword) { + $query->whereHas('host', function ($q) use ($keyword) { + $q->where('host', 'like', "%{$keyword}%"); + }); + }) + ->rawColumns(['action', 'status']) + ->make(true); + } } diff --git a/app/Repositories/Os/OsCachedRepository.php b/app/Repositories/Os/OsCachedRepository.php index 4d1d45a..031d37a 100644 --- a/app/Repositories/Os/OsCachedRepository.php +++ b/app/Repositories/Os/OsCachedRepository.php @@ -15,19 +15,32 @@ class OsCachedRepository extends BaseCachedRepository implements OsRepositoryInt { return $this->osRepository->getModel(); } - public function filter(array $data = [], array $relationships = [], array $withCount = [], array $select = ['*']) - { + public function filter( + array $data = [], + array $relationships = [], + array $withCount = [], + array $select = ['*'], + bool $returnQuery = false + ) { + if ( + $returnQuery || + !empty($data['paginate']) + ) { + return $this->osRepository + ->filter($data, $relationships, $withCount, $select, $returnQuery); + } + $cacheKey = $this->getCacheKey(md5(json_encode([ - 'filterItem' => [ - 'data' => $data, - 'relationships' => $relationships, - 'select' => $select, - 'withCount' => $withCount - ] + 'filter' => compact('data', 'relationships', 'withCount', 'select') ]))); - return Cache::remember($cacheKey, $this->cacheTime, function () use ($data, $relationships, $select, $withCount) { - return $this->osRepository->filter($data, $relationships, $withCount, $select); - }); + + return Cache::remember( + $cacheKey, + $this->cacheTime, + fn() => + $this->osRepository + ->filter($data, $relationships, $withCount, $select, $returnQuery) + ); } public function findWithRelationships(int $id = 0, array $relationships = [],array $withCount = [], array $withSum = []) { diff --git a/app/Repositories/Os/OsRepository.php b/app/Repositories/Os/OsRepository.php index 97e18af..f9fb884 100644 --- a/app/Repositories/Os/OsRepository.php +++ b/app/Repositories/Os/OsRepository.php @@ -11,34 +11,36 @@ class OsRepository extends BaseRepository implements OsRepositoryInterface { return Os::class; } - public function filter(array $data = [], array $relationships = [], array $withCount = [], array $select = ['*']) - { - $model = $this->model->with($relationships)->select($select); - - // Apply filters from $data - if (isset($data['os_id'])) { - $model = $model->where('os_group_id', $data['os_id']); + public function filter( + array $data = [], + array $relationships = [], + array $withCount = [], + array $select = ['*'], + bool $returnQuery = false + ) { + $query = $this->model + ->select($select) + ->with($relationships); + + if (!empty($data['module_host_id'])) { + $query->where('module_host_id', $data['module_host_id']); } - - if (isset($data['os_group_id'])) { - $model = $model->where('os_group_id', $data['os_group_id']); + + if (!empty($withCount)) { + $query->withCount($withCount); } - - if (isset($data['module_host_id'])) { - $model = $model->where('module_host_id', $data['module_host_id']); + + if ($returnQuery) { + return $query; } - - if (isset($data['status'])) { - $model = $model->where('status', $data['status']); + + if (!empty($data['paginate'])) { + return $query->paginate( + $data['per_page'] ?? 15 + ); } - - if (count($withCount) > 0) { - $model = $model->withCount($withCount); - } - if(isset($data['page'])) { - return $model->paginate(15); - } - return $model->get(); + + return $query->get(); } public function findWithRelationships(int $id = 0, array $relationships = [], array $withCount = [], array $withSum = []) { diff --git a/app/Repositories/Os/OsRepositoryInterface.php b/app/Repositories/Os/OsRepositoryInterface.php index d2faf81..f957fc5 100644 --- a/app/Repositories/Os/OsRepositoryInterface.php +++ b/app/Repositories/Os/OsRepositoryInterface.php @@ -5,7 +5,13 @@ namespace App\Repositories\Os; use App\Repositories\BaseRepositoryInterface; interface OsRepositoryInterface extends BaseRepositoryInterface { - public function filter(array $data = [],array $relationships = [],array $withCount = [],array $select = ['*']); + public function filter( + array $data = [], + array $relationships = [], + array $withCount = [], + array $select = ['*'], + bool $returnQuery = false + ); public function findWithRelationships(int $id = 0, array $relationships = [],array $withCount = [], array $withSum = []); } \ No newline at end of file diff --git a/app/View/Components/Breabcrumb.php b/app/View/Components/AdminBreadcrumb.php similarity index 80% rename from app/View/Components/Breabcrumb.php rename to app/View/Components/AdminBreadcrumb.php index da186b0..0853bff 100644 --- a/app/View/Components/Breabcrumb.php +++ b/app/View/Components/AdminBreadcrumb.php @@ -6,7 +6,7 @@ use Closure; use Illuminate\Contracts\View\View; use Illuminate\View\Component; -class Breabcrumb extends Component +class AdminBreadcrumb extends Component { /** * Create a new component instance. @@ -21,6 +21,6 @@ class Breabcrumb extends Component */ public function render(): View|Closure|string { - return view('components.breabcrumb'); + return view('components.admin-breadcrumb'); } } diff --git a/database/migrations/2024_02_02_395629_os.php b/database/migrations/2024_02_02_395629_os.php index fe36563..5cc5643 100644 --- a/database/migrations/2024_02_02_395629_os.php +++ b/database/migrations/2024_02_02_395629_os.php @@ -13,12 +13,10 @@ return new class extends Migration { public function up() { Schema::create('os', function (Blueprint $table) { - $table->id()->autoIncrement(); + $table->id(); $table->string('version', 100)->nullable(); - $table->string('os_id', 100)->nullable(); - $table->integer('os_group_id')->index()->default(0); + $table->foreignId('os_group_id')->constrained('os_group')->index(); $table->string('template_id')->nullable(); - $table->integer('module_host_id')->index()->default(0); $table->tinyInteger('status')->default(1); $table->timestamps(); }); diff --git a/resources/views/administrator/pages/package/datacenter/add.blade.php b/resources/views/administrator/pages/package/datacenter/add.blade.php index d65362f..9532b70 100644 --- a/resources/views/administrator/pages/package/datacenter/add.blade.php +++ b/resources/views/administrator/pages/package/datacenter/add.blade.php @@ -10,7 +10,7 @@ ['label' => 'Datacenter', 'active' => true], ]; @endphp - + @endsection @section("content") @if(auth()->guard('admins')->user()->can("add module vcenter")) diff --git a/resources/views/administrator/pages/package/datacenter/edit.blade.php b/resources/views/administrator/pages/package/datacenter/edit.blade.php index f0a67d9..9d69090 100644 --- a/resources/views/administrator/pages/package/datacenter/edit.blade.php +++ b/resources/views/administrator/pages/package/datacenter/edit.blade.php @@ -10,7 +10,7 @@ ['label' => 'Datacenter', 'active' => true], ]; @endphp - + @endsection @section("content") @if(auth()->guard('admins')->user()->can("add module vcenter")) diff --git a/resources/views/administrator/pages/package/datacenter/index.blade.php b/resources/views/administrator/pages/package/datacenter/index.blade.php index f841fd5..6ed5d75 100644 --- a/resources/views/administrator/pages/package/datacenter/index.blade.php +++ b/resources/views/administrator/pages/package/datacenter/index.blade.php @@ -11,29 +11,29 @@ ['label' => 'Datacenter', 'active' => true], ]; @endphp - + @endsection @section('content') - @if(auth()->guard('admins')->user()->can("manager package module")) + @if (auth()->guard('admins')->user()->can('manager package module'))
- @include("administrator.pages.block.Sync.Datacenter") -
-
- + -
- -
- @else -
-
Access Denied - You are not assigned to any Module Package - management department
- @endif + + + @else +
+
Access Denied - You are not assigned to any Module Package + management department
+
+ @endif @endsection @push('plugin-scripts') @@ -41,4 +41,4 @@ -@endpush \ No newline at end of file +@endpush diff --git a/resources/views/administrator/pages/package/datastore/add.blade.php b/resources/views/administrator/pages/package/datastore/add.blade.php index dded2fc..3042484 100644 --- a/resources/views/administrator/pages/package/datastore/add.blade.php +++ b/resources/views/administrator/pages/package/datastore/add.blade.php @@ -11,7 +11,7 @@ ['label' => 'Datastore', 'active' => true], ]; @endphp - + @endsection @section('content') @if (auth()->guard('admins')->user()->can('add module vcenter')) diff --git a/resources/views/administrator/pages/package/datastore/edit.blade.php b/resources/views/administrator/pages/package/datastore/edit.blade.php index efc7349..cc8c7e8 100644 --- a/resources/views/administrator/pages/package/datastore/edit.blade.php +++ b/resources/views/administrator/pages/package/datastore/edit.blade.php @@ -11,7 +11,7 @@ ['label' => 'Datastore', 'active' => true], ]; @endphp - + @endsection @section("content") @if(auth()->guard('admins')->user()->can("add module vcenter")) diff --git a/resources/views/administrator/pages/package/datastore/index.blade.php b/resources/views/administrator/pages/package/datastore/index.blade.php index bc06c3f..1034be1 100644 --- a/resources/views/administrator/pages/package/datastore/index.blade.php +++ b/resources/views/administrator/pages/package/datastore/index.blade.php @@ -12,7 +12,7 @@ ['label' => 'Datastore', 'active' => true], ]; @endphp - + @endsection @section('content') @if(auth()->guard('admins')->user()->can("manager package module")) diff --git a/resources/views/administrator/pages/package/folder/edit.blade.php b/resources/views/administrator/pages/package/folder/edit.blade.php index 624a34b..d98d83c 100644 --- a/resources/views/administrator/pages/package/folder/edit.blade.php +++ b/resources/views/administrator/pages/package/folder/edit.blade.php @@ -11,7 +11,7 @@ ['label' => 'Folder', 'active' => true], ]; @endphp - + @endsection @section("content") @if(auth()->guard('admins')->user()->can("add module vcenter")) diff --git a/resources/views/administrator/pages/package/folder/index.blade.php b/resources/views/administrator/pages/package/folder/index.blade.php index 355524d..d5c9ff5 100644 --- a/resources/views/administrator/pages/package/folder/index.blade.php +++ b/resources/views/administrator/pages/package/folder/index.blade.php @@ -11,7 +11,7 @@ ['label' => 'Folder', 'active' => true], ]; @endphp - + @endsection @section('content') @if(auth()->guard('admins')->user()->can("manager package module")) diff --git a/resources/views/administrator/pages/package/group/add.blade.php b/resources/views/administrator/pages/package/group/add.blade.php index 2b8de8c..3f90976 100644 --- a/resources/views/administrator/pages/package/group/add.blade.php +++ b/resources/views/administrator/pages/package/group/add.blade.php @@ -16,7 +16,7 @@ ['label' => 'Add New', 'active' => true], ]; @endphp - + @endsection @section('content') @if (auth()->guard('admins')->user()->can('add package module')) diff --git a/resources/views/administrator/pages/package/group/edit.blade.php b/resources/views/administrator/pages/package/group/edit.blade.php index b54a3d8..7ce17e1 100644 --- a/resources/views/administrator/pages/package/group/edit.blade.php +++ b/resources/views/administrator/pages/package/group/edit.blade.php @@ -15,7 +15,7 @@ ['label' => 'OS Group', 'active' => true], ]; @endphp - + @endsection @section('content') @if (auth()->guard('admins')->user()->can('add package module')) diff --git a/resources/views/administrator/pages/package/group/index.blade.php b/resources/views/administrator/pages/package/group/index.blade.php index 3a49cbb..c292a99 100644 --- a/resources/views/administrator/pages/package/group/index.blade.php +++ b/resources/views/administrator/pages/package/group/index.blade.php @@ -11,7 +11,7 @@ ['label' => 'OS Group', 'active' => true], ]; @endphp - + @endsection @section('content') @if (auth()->guard('admins')->user()->can('manager package module')) diff --git a/resources/views/administrator/pages/package/host/add.blade.php b/resources/views/administrator/pages/package/host/add.blade.php index 9af4e6f..cb7f276 100644 --- a/resources/views/administrator/pages/package/host/add.blade.php +++ b/resources/views/administrator/pages/package/host/add.blade.php @@ -11,7 +11,7 @@ ['label' => 'Host', 'active' => true], ]; @endphp - + @endsection @section("content") @if(auth()->guard('admins')->user()->can("add module vcenter")) diff --git a/resources/views/administrator/pages/package/host/edit.blade.php b/resources/views/administrator/pages/package/host/edit.blade.php index 94375d8..6c495a3 100644 --- a/resources/views/administrator/pages/package/host/edit.blade.php +++ b/resources/views/administrator/pages/package/host/edit.blade.php @@ -11,7 +11,7 @@ ['label' => 'Host', 'active' => true], ]; @endphp - + @endsection @section("content") @if(auth()->guard('admins')->user()->can("add module vcenter")) diff --git a/resources/views/administrator/pages/package/host/index.blade.php b/resources/views/administrator/pages/package/host/index.blade.php index d52732c..f1dc219 100644 --- a/resources/views/administrator/pages/package/host/index.blade.php +++ b/resources/views/administrator/pages/package/host/index.blade.php @@ -11,7 +11,7 @@ ['label' => 'Host', 'active' => true], ]; @endphp - + @endsection @section('content') @if(auth()->guard('admins')->user()->can("manager package module")) diff --git a/resources/views/administrator/pages/package/network/add.blade.php b/resources/views/administrator/pages/package/network/add.blade.php index 6c51636..087c03f 100644 --- a/resources/views/administrator/pages/package/network/add.blade.php +++ b/resources/views/administrator/pages/package/network/add.blade.php @@ -11,7 +11,7 @@ ['label' => 'Datacenter', 'active' => true], ]; @endphp - + @endsection @section("content") @if(auth()->guard('admins')->user()->can("add module vcenter")) diff --git a/resources/views/administrator/pages/package/network/edit.blade.php b/resources/views/administrator/pages/package/network/edit.blade.php index cdf0ae1..65936ea 100644 --- a/resources/views/administrator/pages/package/network/edit.blade.php +++ b/resources/views/administrator/pages/package/network/edit.blade.php @@ -11,7 +11,7 @@ ['label' => 'Datacenter', 'active' => true], ]; @endphp - + @endsection @section("content") @if(auth()->guard('admins')->user()->can("add module vcenter")) diff --git a/resources/views/administrator/pages/package/network/index.blade.php b/resources/views/administrator/pages/package/network/index.blade.php index 2ba7a5e..f5c24a6 100644 --- a/resources/views/administrator/pages/package/network/index.blade.php +++ b/resources/views/administrator/pages/package/network/index.blade.php @@ -11,7 +11,7 @@ ['label' => 'Datacenter', 'active' => true], ]; @endphp - + @endsection @section('content') @if(auth()->guard('admins')->user()->can("manager package module")) diff --git a/resources/views/administrator/pages/package/version/add.blade.php b/resources/views/administrator/pages/package/version/add.blade.php index b6184d7..8ffc7ab 100644 --- a/resources/views/administrator/pages/package/version/add.blade.php +++ b/resources/views/administrator/pages/package/version/add.blade.php @@ -1,4 +1,22 @@ -@extends('admin.main') +@extends('administrator.layout.master') +@push('plugin-styles') + +@endpush + +@php + use App\Enums\Status; +@endphp + +@section('breadcrumb') + @php + $breadcrumbItems = [ + ['label' => 'Modules'], + ['label' => 'Package vCenter'], + ['label' => 'Os Version', 'active' => true], + ]; + @endphp + +@endsection @section('content') @if (auth()->guard('admins')->user()->can('add package module'))
@@ -20,7 +38,6 @@ -
@@ -32,9 +49,12 @@
- + @foreach(Status::getOptions() as $value => $label) + + @endforeach
@@ -54,3 +74,27 @@
@endif @endsection + +@push('scripts') + +@endpush + +@push('plugin-scripts') + + + + +@endpush \ No newline at end of file diff --git a/resources/views/administrator/pages/package/version/edit.blade.php b/resources/views/administrator/pages/package/version/edit.blade.php index 8a836b2..f039608 100644 --- a/resources/views/administrator/pages/package/version/edit.blade.php +++ b/resources/views/administrator/pages/package/version/edit.blade.php @@ -1,4 +1,18 @@ -@extends('admin.main') +@extends('administrator.layout.master') +@push('plugin-styles') + +@endpush + +@section('breadcrumb') + @php + $breadcrumbItems = [ + ['label' => 'Modules'], + ['label' => 'Package vCenter'], + ['label' => 'Datacenter', 'active' => true], + ]; + @endphp + +@endsection @section('content') @if (auth()->guard('admins')->user()->can('add package module'))
@@ -54,3 +68,11 @@
@endif @endsection + + +@push('plugin-scripts') + + + + +@endpush diff --git a/resources/views/administrator/pages/package/version/index.blade.php b/resources/views/administrator/pages/package/version/index.blade.php index c4ccbc7..8f31efb 100644 --- a/resources/views/administrator/pages/package/version/index.blade.php +++ b/resources/views/administrator/pages/package/version/index.blade.php @@ -1,7 +1,20 @@ -@php use App\Http\Helpers\Helper; @endphp -@extends('admin.main') +@extends('administrator.layout.master') +@push('plugin-styles') + +@endpush + +@section('breadcrumb') + @php + $breadcrumbItems = [ + ['label' => 'Modules'], + ['label' => 'Package vCenter'], + ['label' => 'Datacenter', 'active' => true], + ]; + @endphp + +@endsection @section('content') - @if(auth()->guard('admins')->user()->can("manager package module")) + @if (auth()->guard('admins')->user()->can('manager package module'))
- - - - - - - - - - - - - - @if(count($versions)) - @foreach($versions->all() as $item) - - - - - - - - - - @endforeach - @endif - -
- - VersionGroup NameHost LocationStatus
- - - {{ $item->version }} - - @isset($item->osGroup->name) - {{$item->osGroup->name}} - @endisset - - @isset($item->osGroup->host->name) - {{$item->osGroup->host->name}} - @endisset - - {!! $item->getStatus() !!} - - - - - -
- @method('delete') - @csrf - -
-
-
- +
@else
@@ -84,3 +38,10 @@
@endif @endsection + +@push('plugin-scripts') + + + + +@endpush diff --git a/resources/views/components/breabcrumb.blade.php b/resources/views/components/admin-breadcrumb.blade.php similarity index 100% rename from resources/views/components/breabcrumb.blade.php rename to resources/views/components/admin-breadcrumb.blade.php diff --git a/resources/views/components/breadcrumb.blade.php b/resources/views/components/breadcrumb.blade.php new file mode 100644 index 0000000..9dffd8d --- /dev/null +++ b/resources/views/components/breadcrumb.blade.php @@ -0,0 +1,19 @@ +@props(['items' => []]) + + diff --git a/routes/admin.php b/routes/admin.php index 36549c1..48af6b8 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -305,6 +305,7 @@ Route::prefix('administrator')->group(function () { Route::get('edit/{id}', 'edit')->name('edit'); Route::put('edit/{id}', 'update')->name('update'); Route::delete('remove-os-version/{id}', 'destroy')->name('destroy'); + Route::get('datatable', 'datatable')->name('datatable'); }); Route::group([ 'prefix' => 'ipaddress',