From 26acb5468c6867192907ae58fb5ed3ce18461091 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 7 Aug 2024 10:09:43 +0700 Subject: [PATCH 0001/1161] Initial Commit --- app/Http/Controllers/.gitkeep | 0 app/Http/Controllers/LpjController.php | 67 +++++++++++++ app/Providers/.gitkeep | 0 app/Providers/EventServiceProvider.php | 32 ++++++ app/Providers/LpjServiceProvider.php | 120 +++++++++++++++++++++++ app/Providers/RouteServiceProvider.php | 49 +++++++++ composer.json | 30 ++++++ config/.gitkeep | 0 config/config.php | 5 + database/factories/.gitkeep | 0 database/migrations/.gitkeep | 0 database/seeders/.gitkeep | 0 database/seeders/LpjDatabaseSeeder.php | 16 +++ module.json | 17 ++++ package.json | 15 +++ resources/assets/.gitkeep | 0 resources/assets/js/app.js | 0 resources/assets/sass/app.scss | 0 resources/views/.gitkeep | 0 resources/views/index.blade.php | 7 ++ resources/views/layouts/master.blade.php | 29 ++++++ routes/.gitkeep | 0 routes/api.php | 19 ++++ routes/web.php | 19 ++++ tests/Feature/.gitkeep | 0 tests/Unit/.gitkeep | 0 vite.config.js | 26 +++++ 27 files changed, 451 insertions(+) create mode 100644 app/Http/Controllers/.gitkeep create mode 100644 app/Http/Controllers/LpjController.php create mode 100644 app/Providers/.gitkeep create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/Providers/LpjServiceProvider.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 composer.json create mode 100644 config/.gitkeep create mode 100644 config/config.php create mode 100644 database/factories/.gitkeep create mode 100644 database/migrations/.gitkeep create mode 100644 database/seeders/.gitkeep create mode 100644 database/seeders/LpjDatabaseSeeder.php create mode 100644 module.json create mode 100644 package.json create mode 100644 resources/assets/.gitkeep create mode 100644 resources/assets/js/app.js create mode 100644 resources/assets/sass/app.scss create mode 100644 resources/views/.gitkeep create mode 100644 resources/views/index.blade.php create mode 100644 resources/views/layouts/master.blade.php create mode 100644 routes/.gitkeep create mode 100644 routes/api.php create mode 100644 routes/web.php create mode 100644 tests/Feature/.gitkeep create mode 100644 tests/Unit/.gitkeep create mode 100644 vite.config.js diff --git a/app/Http/Controllers/.gitkeep b/app/Http/Controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/Http/Controllers/LpjController.php b/app/Http/Controllers/LpjController.php new file mode 100644 index 0000000..e67aeff --- /dev/null +++ b/app/Http/Controllers/LpjController.php @@ -0,0 +1,67 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + * + * @return void + */ + protected function configureEmailVerification(): void + { + + } +} diff --git a/app/Providers/LpjServiceProvider.php b/app/Providers/LpjServiceProvider.php new file mode 100644 index 0000000..1437380 --- /dev/null +++ b/app/Providers/LpjServiceProvider.php @@ -0,0 +1,120 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations')); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->moduleNameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->moduleNameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->moduleName, 'lang'), $this->moduleNameLower); + $this->loadJsonTranslationsFrom(module_path($this->moduleName, 'lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $this->publishes([module_path($this->moduleName, 'config/config.php') => config_path($this->moduleNameLower.'.php')], 'config'); + $this->mergeConfigFrom(module_path($this->moduleName, 'config/config.php'), $this->moduleNameLower); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->moduleNameLower); + $sourcePath = module_path($this->moduleName, 'resources/views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->moduleNameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower); + + $componentNamespace = str_replace('/', '\\', config('modules.namespace').'\\'.$this->moduleName.'\\'.ltrim(config('modules.paths.generator.component-class.path'), config('modules.paths.app_folder', ''))); + Blade::componentNamespace($componentNamespace, $this->moduleNameLower); + } + + /** + * Get the services provided by the provider. + * + * @return array + */ + public function provides(): array + { + return []; + } + + /** + * @return array + */ + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->moduleNameLower)) { + $paths[] = $path.'/modules/'.$this->moduleNameLower; + } + } + + return $paths; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..f15ea30 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,49 @@ +mapApiRoutes(); + + $this->mapWebRoutes(); + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path('Lpj', '/routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api')->prefix('api')->name('api.')->group(module_path('Lpj', '/routes/api.php')); + } +} diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..4e34e0f --- /dev/null +++ b/composer.json @@ -0,0 +1,30 @@ +{ + "name": "daengdei/lpj-module", + "description": "", + "authors": [ + { + "name": "Daeng Deni Mardaeni", + "email": "ddeni05@gmail.com" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": { + + } + } + }, + "autoload": { + "psr-4": { + "Modules\\Lpj\\": "app/", + "Modules\\Lpj\\Database\\Factories\\": "database/factories/", + "Modules\\Lpj\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\Lpj\\Tests\\": "tests/" + } + } +} diff --git a/config/.gitkeep b/config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/config/config.php b/config/config.php new file mode 100644 index 0000000..a4b4610 --- /dev/null +++ b/config/config.php @@ -0,0 +1,5 @@ + 'Lpj', +]; diff --git a/database/factories/.gitkeep b/database/factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/migrations/.gitkeep b/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/seeders/.gitkeep b/database/seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/seeders/LpjDatabaseSeeder.php b/database/seeders/LpjDatabaseSeeder.php new file mode 100644 index 0000000..eceb570 --- /dev/null +++ b/database/seeders/LpjDatabaseSeeder.php @@ -0,0 +1,16 @@ +call([]); + } +} diff --git a/module.json b/module.json new file mode 100644 index 0000000..bf90fea --- /dev/null +++ b/module.json @@ -0,0 +1,17 @@ +{ + "name": "Lpj", + "alias": "lpj", + "database": "", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\Lpj\\Providers\\LpjServiceProvider" + ], + "files": [], + "menu": { + "main": [], + "master": [], + "system": [] + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d6fbfc8 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } +} diff --git a/resources/assets/.gitkeep b/resources/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js new file mode 100644 index 0000000..e69de29 diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/.gitkeep b/resources/views/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php new file mode 100644 index 0000000..94ab522 --- /dev/null +++ b/resources/views/index.blade.php @@ -0,0 +1,7 @@ +@extends('lpj::layouts.master') + +@section('content') +

Hello World

+ +

Module: {!! config('lpj.name') !!}

+@endsection diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php new file mode 100644 index 0000000..1056eb8 --- /dev/null +++ b/resources/views/layouts/master.blade.php @@ -0,0 +1,29 @@ + + + + + + + + + + Lpj Module - {{ config('app.name', 'Laravel') }} + + + + + + + + + + {{-- Vite CSS --}} + {{-- {{ module_vite('build-lpj', 'resources/assets/sass/app.scss') }} --}} + + + + @yield('content') + + {{-- Vite JS --}} + {{-- {{ module_vite('build-lpj', 'resources/assets/js/app.js') }} --}} + diff --git a/routes/.gitkeep b/routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..d9920ab --- /dev/null +++ b/routes/api.php @@ -0,0 +1,19 @@ +prefix('v1')->group(function () { + Route::apiResource('lpj', LpjController::class)->names('lpj'); +}); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..2a2283b --- /dev/null +++ b/routes/web.php @@ -0,0 +1,19 @@ +names('lpj'); +}); diff --git a/tests/Feature/.gitkeep b/tests/Feature/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/Unit/.gitkeep b/tests/Unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..37ef3ba --- /dev/null +++ b/vite.config.js @@ -0,0 +1,26 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; + +export default defineConfig({ + build: { + outDir: '../../public/build-lpj', + emptyOutDir: true, + manifest: true, + }, + plugins: [ + laravel({ + publicDirectory: '../../public', + buildDirectory: 'build-lpj', + input: [ + __dirname + '/resources/assets/sass/app.scss', + __dirname + '/resources/assets/js/app.js' + ], + refresh: true, + }), + ], +}); + +//export const paths = [ +// 'Modules/Lpj/resources/assets/sass/app.scss', +// 'Modules/Lpj/resources/assets/js/app.js', +//]; \ No newline at end of file From c2a0cfbdeda4db9937ac0fb2597e8b97f1edd912 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 7 Aug 2024 11:15:06 +0700 Subject: [PATCH 0002/1161] Update Menu --- module.json | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index bf90fea..da80ead 100644 --- a/module.json +++ b/module.json @@ -10,8 +10,115 @@ ], "files": [], "menu": { - "main": [], - "master": [], + "main": [ + { + "title": "Permohonan", + "path": "", + "icon": "ki-filled ki-questionnaire-tablet text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, + { + "title": "Pembatalan", + "path": "", + "icon": "ki-filled ki-file-deleted text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, + { + "title": "Data Debitur", + "path": "", + "icon": "ki-filled ki-people text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [], + "sub": [ + { + "title": "Debitur", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, + { + "title": "Pemilik Jaminan", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, + { + "title": "Jaminan", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, + { + "title": "Dokumen Jaminan", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + } + ] + }, + { + "title": "Laporan", + "path": "", + "icon": "ki-filled ki-some-files text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + } + ], + "master": [ + { + "title": "Basic Data", + "path": "", + "icon": "ki-filled ki-category text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [], + "sub": [ + { + "title": "Jenis Fasilitas Kredit", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, + { + "title": "Jenis Jaminan", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, + { + "title": "Jenis Legalitas Jaminan", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + } + ] + } + ], "system": [] } } From d7aa4b21e306270f08869666563108676d6e2ee9 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 7 Aug 2024 11:21:19 +0700 Subject: [PATCH 0003/1161] fix module name --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 4e34e0f..389666c 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "daengdei/lpj-module", + "name": "daengdeni/lpj-module", "description": "", "authors": [ { From c695a6a8dcbd969bdc38f9e4c2631fc63ae28843 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 7 Aug 2024 11:37:06 +0700 Subject: [PATCH 0004/1161] add type laravel-module --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index 389666c..fa32ddf 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,6 @@ { "name": "daengdeni/lpj-module", + "type": "laravel-module", "description": "", "authors": [ { From bc78cf3ea99e71beb27cac7eaddd0d59f33b514f Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sun, 11 Aug 2024 13:28:00 +0700 Subject: [PATCH 0005/1161] Feature #1 : Jenis Fasilitas Kredit --- app/Exports/JenisFasilitasKreditExport.php | 42 +++++ .../JenisFasilitasKreditController.php | 134 ++++++++++++++++ app/Http/Controllers/LpjController.php | 67 -------- .../Requests/JenisFasilitasKreditRequest.php | 35 ++++ app/Models/Base.php | 50 ++++++ app/Models/JenisFasilitasKredit.php | 11 ++ app/Providers/LpjServiceProvider.php | 4 + ...51_create_jenis_fasilitas_kredit_table.php | 33 ++++ module.json | 14 +- resources/views/index.blade.php | 7 - .../jenis_fasilitas_kredit/create.blade.php | 58 +++++++ .../jenis_fasilitas_kredit/index.blade.php | 149 ++++++++++++++++++ resources/views/layouts/master.blade.php | 29 ---- routes/api.php | 4 - routes/breadcrumbs.php | 24 +++ routes/web.php | 36 +++-- 16 files changed, 569 insertions(+), 128 deletions(-) create mode 100644 app/Exports/JenisFasilitasKreditExport.php create mode 100644 app/Http/Controllers/JenisFasilitasKreditController.php delete mode 100644 app/Http/Controllers/LpjController.php create mode 100644 app/Http/Requests/JenisFasilitasKreditRequest.php create mode 100644 app/Models/Base.php create mode 100644 app/Models/JenisFasilitasKredit.php create mode 100644 database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php delete mode 100644 resources/views/index.blade.php create mode 100644 resources/views/jenis_fasilitas_kredit/create.blade.php create mode 100644 resources/views/jenis_fasilitas_kredit/index.blade.php delete mode 100644 resources/views/layouts/master.blade.php create mode 100644 routes/breadcrumbs.php diff --git a/app/Exports/JenisFasilitasKreditExport.php b/app/Exports/JenisFasilitasKreditExport.php new file mode 100644 index 0000000..fb396b4 --- /dev/null +++ b/app/Exports/JenisFasilitasKreditExport.php @@ -0,0 +1,42 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + public function headings(): array{ + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats(): array{ + return [ + 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, + 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + ]; + } +} diff --git a/app/Http/Controllers/JenisFasilitasKreditController.php b/app/Http/Controllers/JenisFasilitasKreditController.php new file mode 100644 index 0000000..cd26750 --- /dev/null +++ b/app/Http/Controllers/JenisFasilitasKreditController.php @@ -0,0 +1,134 @@ +validated(); + + if($validate){ + try{ + // Save to database + JenisFasilitasKredit::create($validate); + return redirect()->route('basicdata.jenis-fasilitas-kredit.index')->with('success', 'Jenis Fasilitas Kredit created successfully'); + } catch (\Exception $e){ + return redirect()->route('basicdata.jenis-fasilitas-kredit.create')->with('error', 'Failed to create province'); + } + } + } + + public function edit($id){ + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + return view('lpj::jenis_fasilitas_kredit.create', compact('jenisFasilitasKredit')); + } + + public function update(JenisFasilitasKreditRequest $request, $id){ + $validate = $request->validated(); + + if($validate){ + try{ + // Update in database + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + $jenisFasilitasKredit->update($validate); + return redirect()->route('basicdata.jenis-fasilitas-kredit.index')->with('success', 'Jenis Fasilitas Kredit updated successfully'); + } catch (\Exception $e){ + return redirect()->route('basicdata.jenis-fasilitas-kredit.edit', $id)->with('error', 'Failed to update province'); + } + } + } + + public function destroy($id){ + try{ + // Delete from database + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + $jenisFasilitasKredit->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Fasilitas Kredit deleted successfully']); + } catch (\Exception $e){ + echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + } + } + + public function dataForDatatables(Request $request){ + if (is_null($this->user) || !$this->user->can('jenis_fasilitas_kredit.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisFasilitasKredit::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords/$request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new JenisFasilitasKreditExport, 'jenis_fasilitas_kredit.xlsx'); + } +} diff --git a/app/Http/Controllers/LpjController.php b/app/Http/Controllers/LpjController.php deleted file mode 100644 index e67aeff..0000000 --- a/app/Http/Controllers/LpjController.php +++ /dev/null @@ -1,67 +0,0 @@ - 'required|max:255', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_fasilitas_kredit,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_fasilitas_kredit,code'; + } + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/Base.php b/app/Models/Base.php new file mode 100644 index 0000000..644d6f0 --- /dev/null +++ b/app/Models/Base.php @@ -0,0 +1,50 @@ +connection = $module->database; + } + + /** + * Retrieves the activity log options for the User Management. + * + * @return LogOptions The activity log options. + */ + public function getActivitylogOptions() + : LogOptions + { + return LogOptions::defaults()->logAll()->useLogName('LPJ : '); + } + } diff --git a/app/Models/JenisFasilitasKredit.php b/app/Models/JenisFasilitasKredit.php new file mode 100644 index 0000000..1e157d1 --- /dev/null +++ b/app/Models/JenisFasilitasKredit.php @@ -0,0 +1,11 @@ +registerConfig(); $this->registerViews(); $this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations')); + + if (class_exists('Breadcrumbs')) { + require __DIR__ . '/../../routes/breadcrumbs.php'; + } } /** diff --git a/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php b/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php new file mode 100644 index 0000000..82b50ee --- /dev/null +++ b/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('code'); + $table->string('name'); + $table->timestamps(); + $table->softDeletes(); + $table->uuid('created_by')->nullable(); + $table->uuid('updated_by')->nullable(); + $table->uuid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jenis_fasilitas_kredit'); + } +}; diff --git a/module.json b/module.json index da80ead..191081a 100644 --- a/module.json +++ b/module.json @@ -18,7 +18,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": [] + "roles": ["Administrator"] }, { "title": "Pembatalan", @@ -27,7 +27,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": [] + "roles": ["Administrator"] }, { "title": "Data Debitur", @@ -36,7 +36,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": [], + "roles": ["Administrator"], "sub": [ { "title": "Debitur", @@ -79,22 +79,22 @@ "classes": "", "attributes": [], "permission": "", - "roles": [] + "roles": ["Administrator"] } ], "master": [ { "title": "Basic Data", - "path": "", + "path": "basicdata", "icon": "ki-filled ki-category text-lg", "classes": "", "attributes": [], "permission": "", - "roles": [], + "roles": ["Administrator"], "sub": [ { "title": "Jenis Fasilitas Kredit", - "path": "", + "path": "basicdata.jenis-fasilitas-kredit", "classes": "", "attributes": [], "permission": "", diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php deleted file mode 100644 index 94ab522..0000000 --- a/resources/views/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -@extends('lpj::layouts.master') - -@section('content') -

Hello World

- -

Module: {!! config('lpj.name') !!}

-@endsection diff --git a/resources/views/jenis_fasilitas_kredit/create.blade.php b/resources/views/jenis_fasilitas_kredit/create.blade.php new file mode 100644 index 0000000..19a6270 --- /dev/null +++ b/resources/views/jenis_fasilitas_kredit/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($jenisFasilitasKredit->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisFasilitasKredit->id) ? 'Edit' : 'Tambah' }} Jenis Fasilitas Kredit +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/jenis_fasilitas_kredit/index.blade.php b/resources/views/jenis_fasilitas_kredit/index.blade.php new file mode 100644 index 0000000..8c75875 --- /dev/null +++ b/resources/views/jenis_fasilitas_kredit/index.blade.php @@ -0,0 +1,149 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.jenis-fasilitas-kredit') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Jenis Fasilitas Kredit +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Jenis Fasilitas Kredit + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php deleted file mode 100644 index 1056eb8..0000000 --- a/resources/views/layouts/master.blade.php +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - Lpj Module - {{ config('app.name', 'Laravel') }} - - - - - - - - - - {{-- Vite CSS --}} - {{-- {{ module_vite('build-lpj', 'resources/assets/sass/app.scss') }} --}} - - - - @yield('content') - - {{-- Vite JS --}} - {{-- {{ module_vite('build-lpj', 'resources/assets/js/app.js') }} --}} - diff --git a/routes/api.php b/routes/api.php index d9920ab..0fa8999 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,7 +13,3 @@ use Modules\Lpj\Http\Controllers\LpjController; * is assigned the "api" middleware group. Enjoy building your API! * */ - -Route::middleware(['auth:sanctum'])->prefix('v1')->group(function () { - Route::apiResource('lpj', LpjController::class)->names('lpj'); -}); diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php new file mode 100644 index 0000000..6164054 --- /dev/null +++ b/routes/breadcrumbs.php @@ -0,0 +1,24 @@ +push('Basic Data'); + }); + + Breadcrumbs::for('basicdata.jenis-fasilitas-kredit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Fasilitas Kredit', route('basicdata.jenis-fasilitas-kredit.index')); + }); + + Breadcrumbs::for('basicdata.jenis-fasilitas-kredit.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-fasilitas-kredit'); + $trail->push('Tambah Jenis Fasilitas Kredit', route('basicdata.jenis-fasilitas-kredit.create')); + }); + + Breadcrumbs::for('basicdata.jenis-fasilitas-kredit.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-fasilitas-kredit'); + $trail->push('Edit Jenis Fasilitas Kredit'); + }); + diff --git a/routes/web.php b/routes/web.php index 2a2283b..fb02eff 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,19 +1,27 @@ names('lpj'); -}); + Route::middleware(['auth'])->group(function () { + Route::name('basicdata.')->prefix('basic-data')->group(function () { + Route::name('jenis-fasilitas-kredit.')->prefix('jenis-fasilitas-kredit')->group(function () { + Route::get('restore/{id}', [JenisFasilitasKreditController::class, 'restore'])->name('restore'); + Route::get('datatables', [JenisFasilitasKreditController::class, 'dataForDatatables'])->name('datatables'); + Route::get('export', [JenisFasilitasKreditController::class, 'export'])->name('export'); + }); + Route::resource('jenis-fasilitas-kredit', JenisFasilitasKreditController::class); + }); + }); From 58239883eca46c4df03cca6a3bf218b3ccb9855b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sun, 11 Aug 2024 14:22:51 +0700 Subject: [PATCH 0006/1161] Feature #2 : Jenis Legalitas jaminan --- app/Exports/JenisFasilitasKreditExport.php | 76 +++++---- app/Exports/JenisLegalitasJaminanExport.php | 49 ++++++ .../JenisLegalitasJaminanController.php | 149 ++++++++++++++++++ .../Requests/JenisLegalitasJaminanRequest.php | 33 ++++ app/Models/JenisLegalitasJaminan.php | 13 ++ ...8_create_jenis_legalitas_jaminan_table.php | 33 ++++ module.json | 2 +- .../jenis_fasilitas_kredit/index.blade.php | 2 +- .../jenis_legalitas_jaminan/create.blade.php | 58 +++++++ .../jenis_legalitas_jaminan/index.blade.php | 149 ++++++++++++++++++ routes/breadcrumbs.php | 15 ++ routes/web.php | 15 +- 12 files changed, 554 insertions(+), 40 deletions(-) create mode 100644 app/Exports/JenisLegalitasJaminanExport.php create mode 100644 app/Http/Controllers/JenisLegalitasJaminanController.php create mode 100644 app/Http/Requests/JenisLegalitasJaminanRequest.php create mode 100644 app/Models/JenisLegalitasJaminan.php create mode 100644 database/migrations/2024_08_11_000118_create_jenis_legalitas_jaminan_table.php create mode 100644 resources/views/jenis_legalitas_jaminan/create.blade.php create mode 100644 resources/views/jenis_legalitas_jaminan/index.blade.php diff --git a/app/Exports/JenisFasilitasKreditExport.php b/app/Exports/JenisFasilitasKreditExport.php index fb396b4..1a61a90 100644 --- a/app/Exports/JenisFasilitasKreditExport.php +++ b/app/Exports/JenisFasilitasKreditExport.php @@ -1,42 +1,48 @@ id, - $row->code, - $row->name, - $row->created_at - ]; - } - public function headings(): array{ - return [ - 'ID', - 'Code', - 'Name', - 'Created At' - ]; - } + public function map($row) + : array + { + return [ + $row->id, + $row->code, + $row->name, + $row->created_at + ]; + } - public function columnFormats(): array{ - return [ - 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, - 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME - ]; + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, + 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + ]; + } } -} diff --git a/app/Exports/JenisLegalitasJaminanExport.php b/app/Exports/JenisLegalitasJaminanExport.php new file mode 100644 index 0000000..011ad9d --- /dev/null +++ b/app/Exports/JenisLegalitasJaminanExport.php @@ -0,0 +1,49 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/JenisLegalitasJaminanController.php b/app/Http/Controllers/JenisLegalitasJaminanController.php new file mode 100644 index 0000000..51e548f --- /dev/null +++ b/app/Http/Controllers/JenisLegalitasJaminanController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + JenisLegalitasJaminan::create($validate); + return redirect() + ->route('basicdata.jenis-legalitas-jaminan.index') + ->with('success', 'Jenis Legalitas Jaminan created successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.jenis-legalitas-jaminan.create') + ->with('error', 'Failed to create province'); + } + } + } + + public function create() + { + return view('lpj::jenis_legalitas_jaminan.create'); + } + + public function edit($id) + { + $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); + return view('lpj::jenis_legalitas_jaminan.create', compact('jenisLegalitasJaminan')); + } + + public function update(JenisLegalitasJaminanRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); + $jenisLegalitasJaminan->update($validate); + return redirect() + ->route('basicdata.jenis-legalitas-jaminan.index') + ->with('success', 'Jenis Legalitas Jaminan updated successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.jenis-legalitas-jaminan.edit', $id) + ->with('error', 'Failed to update province'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); + $jenisLegalitasJaminan->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Legalitas Jaminan deleted successfully']); + } catch (\Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('jenis_legalitas_jaminan.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisLegalitasJaminan::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new JenisLegalitasJaminanExport, 'jenis_legalitas_jaminan.xlsx'); + } + } diff --git a/app/Http/Requests/JenisLegalitasJaminanRequest.php b/app/Http/Requests/JenisLegalitasJaminanRequest.php new file mode 100644 index 0000000..e109b27 --- /dev/null +++ b/app/Http/Requests/JenisLegalitasJaminanRequest.php @@ -0,0 +1,33 @@ + 'required|max:255', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code'; + } + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } +} diff --git a/app/Models/JenisLegalitasJaminan.php b/app/Models/JenisLegalitasJaminan.php new file mode 100644 index 0000000..6b6ed66 --- /dev/null +++ b/app/Models/JenisLegalitasJaminan.php @@ -0,0 +1,13 @@ +id(); + $table->string('code'); + $table->string('name'); + $table->timestamps(); + $table->softDeletes(); + $table->uuid('created_by')->nullable(); + $table->uuid('updated_by')->nullable(); + $table->uuid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jenis_legalitas_jaminan'); + } +}; diff --git a/module.json b/module.json index 191081a..53fb9f5 100644 --- a/module.json +++ b/module.json @@ -110,7 +110,7 @@ }, { "title": "Jenis Legalitas Jaminan", - "path": "", + "path": "basicdata.jenis-legalitas-jaminan", "classes": "", "attributes": [], "permission": "", diff --git a/resources/views/jenis_fasilitas_kredit/index.blade.php b/resources/views/jenis_fasilitas_kredit/index.blade.php index 8c75875..35069ce 100644 --- a/resources/views/jenis_fasilitas_kredit/index.blade.php +++ b/resources/views/jenis_fasilitas_kredit/index.blade.php @@ -140,7 +140,7 @@ // Custom search functionality searchInput.addEventListener('input', function () { const searchValue = this.value.trim(); - if (searchValue.length > 3) { + if (searchValue.length > 2) { dataTable.search(searchValue, true); } }); diff --git a/resources/views/jenis_legalitas_jaminan/create.blade.php b/resources/views/jenis_legalitas_jaminan/create.blade.php new file mode 100644 index 0000000..e7ae9d9 --- /dev/null +++ b/resources/views/jenis_legalitas_jaminan/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($jenisLegalitasJaminan->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/jenis_legalitas_jaminan/index.blade.php b/resources/views/jenis_legalitas_jaminan/index.blade.php new file mode 100644 index 0000000..e30d512 --- /dev/null +++ b/resources/views/jenis_legalitas_jaminan/index.blade.php @@ -0,0 +1,149 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.jenis-legalitas-jaminan') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Jenis Legalitas Jaminan +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Jenis Legalitas Jaminan + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 6164054..b906483 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -22,3 +22,18 @@ $trail->push('Edit Jenis Fasilitas Kredit'); }); + Breadcrumbs::for('basicdata.jenis-legalitas-jaminan', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Legalitas Jaminan', route('basicdata.jenis-legalitas-jaminan.index')); + }); + + Breadcrumbs::for('basicdata.jenis-legalitas-jaminan.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-legalitas-jaminan'); + $trail->push('Tambah Jenis Legalitas Jaminan', route('basicdata.jenis-legalitas-jaminan.create')); + }); + + Breadcrumbs::for('basicdata.jenis-legalitas-jaminan.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-legalitas-jaminan'); + $trail->push('Edit Jenis Legalitas Jaminan'); + }); + diff --git a/routes/web.php b/routes/web.php index fb02eff..9a3e72c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,8 +1,8 @@ prefix('basic-data')->group(function () { Route::name('jenis-fasilitas-kredit.')->prefix('jenis-fasilitas-kredit')->group(function () { Route::get('restore/{id}', [JenisFasilitasKreditController::class, 'restore'])->name('restore'); - Route::get('datatables', [JenisFasilitasKreditController::class, 'dataForDatatables'])->name('datatables'); + Route::get('datatables', [JenisFasilitasKreditController::class, 'dataForDatatables']) + ->name('datatables'); Route::get('export', [JenisFasilitasKreditController::class, 'export'])->name('export'); }); Route::resource('jenis-fasilitas-kredit', JenisFasilitasKreditController::class); + + Route::name('jenis-legalitas-jaminan.')->prefix('jenis-legalitas-jaminan')->group(function () { + Route::get('restore/{id}', [JenisLegalitasJaminanController::class, 'restore'])->name('restore'); + Route::get('datatables', [JenisLegalitasJaminanController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [JenisLegalitasJaminanController::class, 'export'])->name('export'); + }); + Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class); }); }); From 76eb0197e5215bbff627e55c95aeb2b9d4107be5 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sun, 11 Aug 2024 14:28:51 +0700 Subject: [PATCH 0007/1161] Feature #3 : Jenis Jaminan --- app/Exports/JenisJaminanExport.php | 48 ++++++ .../Controllers/JenisJaminanController.php | 149 ++++++++++++++++++ app/Http/Requests/JenisJaminanRequest.php | 33 ++++ app/Models/JenisJaminan.php | 13 ++ ...8_11_000110_create_jenis_jaminan_table.php | 33 ++++ module.json | 2 +- .../jenis_fasilitas_kredit/index.blade.php | 4 +- .../views/jenis_jaminan/create.blade.php | 58 +++++++ resources/views/jenis_jaminan/index.blade.php | 148 +++++++++++++++++ .../jenis_legalitas_jaminan/index.blade.php | 4 +- routes/breadcrumbs.php | 15 ++ routes/web.php | 9 ++ 12 files changed, 509 insertions(+), 7 deletions(-) create mode 100644 app/Exports/JenisJaminanExport.php create mode 100644 app/Http/Controllers/JenisJaminanController.php create mode 100644 app/Http/Requests/JenisJaminanRequest.php create mode 100644 app/Models/JenisJaminan.php create mode 100644 database/migrations/2024_08_11_000110_create_jenis_jaminan_table.php create mode 100644 resources/views/jenis_jaminan/create.blade.php create mode 100644 resources/views/jenis_jaminan/index.blade.php diff --git a/app/Exports/JenisJaminanExport.php b/app/Exports/JenisJaminanExport.php new file mode 100644 index 0000000..cfbc234 --- /dev/null +++ b/app/Exports/JenisJaminanExport.php @@ -0,0 +1,48 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, + 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/JenisJaminanController.php b/app/Http/Controllers/JenisJaminanController.php new file mode 100644 index 0000000..2a6764d --- /dev/null +++ b/app/Http/Controllers/JenisJaminanController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + JenisJaminan::create($validate); + return redirect() + ->route('basicdata.jenis-jaminan.index') + ->with('success', 'Jenis Jaminan created successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.jenis-jaminan.create') + ->with('error', 'Failed to create province'); + } + } + } + + public function create() + { + return view('lpj::jenis_jaminan.create'); + } + + public function edit($id) + { + $jenisJaminan = JenisJaminan::find($id); + return view('lpj::jenis_jaminan.create', compact('jenisJaminan')); + } + + public function update(JenisJaminanRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $jenisJaminan = JenisJaminan::find($id); + $jenisJaminan->update($validate); + return redirect() + ->route('basicdata.jenis-jaminan.index') + ->with('success', 'Jenis Jaminan updated successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.jenis-jaminan.edit', $id) + ->with('error', 'Failed to update province'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $jenisJaminan = JenisJaminan::find($id); + $jenisJaminan->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Jaminan deleted successfully']); + } catch (\Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('jenis_jaminan.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisJaminan::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new JenisJaminanExport, 'jenis_jaminan.xlsx'); + } + } diff --git a/app/Http/Requests/JenisJaminanRequest.php b/app/Http/Requests/JenisJaminanRequest.php new file mode 100644 index 0000000..d008cf9 --- /dev/null +++ b/app/Http/Requests/JenisJaminanRequest.php @@ -0,0 +1,33 @@ + 'required|max:255', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_jaminan,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_jaminan,code'; + } + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } +} diff --git a/app/Models/JenisJaminan.php b/app/Models/JenisJaminan.php new file mode 100644 index 0000000..2f1ba23 --- /dev/null +++ b/app/Models/JenisJaminan.php @@ -0,0 +1,13 @@ +id(); + $table->string('code'); + $table->string('name'); + $table->timestamps(); + $table->softDeletes(); + $table->uuid('created_by')->nullable(); + $table->uuid('updated_by')->nullable(); + $table->uuid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jenis_jaminan'); + } +}; diff --git a/module.json b/module.json index 53fb9f5..bc47128 100644 --- a/module.json +++ b/module.json @@ -102,7 +102,7 @@ }, { "title": "Jenis Jaminan", - "path": "", + "path": "basicdata.jenis-jaminan", "classes": "", "attributes": [], "permission": "", diff --git a/resources/views/jenis_fasilitas_kredit/index.blade.php b/resources/views/jenis_fasilitas_kredit/index.blade.php index 35069ce..0db8ad7 100644 --- a/resources/views/jenis_fasilitas_kredit/index.blade.php +++ b/resources/views/jenis_fasilitas_kredit/index.blade.php @@ -140,9 +140,7 @@ // Custom search functionality searchInput.addEventListener('input', function () { const searchValue = this.value.trim(); - if (searchValue.length > 2) { - dataTable.search(searchValue, true); - } + dataTable.search(searchValue, true); }); @endpush diff --git a/resources/views/jenis_jaminan/create.blade.php b/resources/views/jenis_jaminan/create.blade.php new file mode 100644 index 0000000..610c159 --- /dev/null +++ b/resources/views/jenis_jaminan/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($jenisJaminan->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Jaminan +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/jenis_jaminan/index.blade.php b/resources/views/jenis_jaminan/index.blade.php new file mode 100644 index 0000000..7332a90 --- /dev/null +++ b/resources/views/jenis_jaminan/index.blade.php @@ -0,0 +1,148 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.jenis-jaminan') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Jenis Jaminan +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Jenis Jaminan + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/resources/views/jenis_legalitas_jaminan/index.blade.php b/resources/views/jenis_legalitas_jaminan/index.blade.php index e30d512..84f4a20 100644 --- a/resources/views/jenis_legalitas_jaminan/index.blade.php +++ b/resources/views/jenis_legalitas_jaminan/index.blade.php @@ -140,9 +140,7 @@ // Custom search functionality searchInput.addEventListener('input', function () { const searchValue = this.value.trim(); - if (searchValue.length > 2) { - dataTable.search(searchValue, true); - } + dataTable.search(searchValue, true); }); @endpush diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index b906483..1e3d059 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -37,3 +37,18 @@ $trail->push('Edit Jenis Legalitas Jaminan'); }); + Breadcrumbs::for('basicdata.jenis-jaminan', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Jaminan', route('basicdata.jenis-jaminan.index')); + }); + + Breadcrumbs::for('basicdata.jenis-jaminan.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-jaminan'); + $trail->push('Tambah Jenis Jaminan', route('basicdata.jenis-jaminan.create')); + }); + + Breadcrumbs::for('basicdata.jenis-jaminan.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-jaminan'); + $trail->push('Edit Jenis Jaminan'); + }); + diff --git a/routes/web.php b/routes/web.php index 9a3e72c..b39e3a2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use Illuminate\Support\Facades\Route; use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; + use Modules\Lpj\Http\Controllers\JenisJaminanController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; /* @@ -32,5 +33,13 @@ Route::get('export', [JenisLegalitasJaminanController::class, 'export'])->name('export'); }); Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class); + + Route::name('jenis-jaminan.')->prefix('jenis-jaminan')->group(function () { + Route::get('restore/{id}', [JenisJaminanController::class, 'restore'])->name('restore'); + Route::get('datatables', [JenisJaminanController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [JenisJaminanController::class, 'export'])->name('export'); + }); + Route::resource('jenis-jaminan', JenisJaminanController::class); }); }); From f6fee790addcf83492b1c13e5dda45af6b3ba814 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sun, 11 Aug 2024 14:59:22 +0700 Subject: [PATCH 0008/1161] Feature #4 : Jenis Aset --- app/Exports/JenisAsetExport.php | 48 ++++++ app/Http/Controllers/JenisAsetController.php | 149 ++++++++++++++++++ app/Http/Requests/JenisAsetRequest.php | 33 ++++ app/Models/JenisAset.php | 13 ++ ...4_08_11_074816_create_jenis_aset_table.php | 33 ++++ module.json | 28 +++- resources/views/jenis_aset/create.blade.php | 58 +++++++ resources/views/jenis_aset/index.blade.php | 148 +++++++++++++++++ routes/breadcrumbs.php | 15 ++ routes/web.php | 9 ++ 10 files changed, 529 insertions(+), 5 deletions(-) create mode 100644 app/Exports/JenisAsetExport.php create mode 100644 app/Http/Controllers/JenisAsetController.php create mode 100644 app/Http/Requests/JenisAsetRequest.php create mode 100644 app/Models/JenisAset.php create mode 100644 database/migrations/2024_08_11_074816_create_jenis_aset_table.php create mode 100644 resources/views/jenis_aset/create.blade.php create mode 100644 resources/views/jenis_aset/index.blade.php diff --git a/app/Exports/JenisAsetExport.php b/app/Exports/JenisAsetExport.php new file mode 100644 index 0000000..158d4f0 --- /dev/null +++ b/app/Exports/JenisAsetExport.php @@ -0,0 +1,48 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, + 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/JenisAsetController.php b/app/Http/Controllers/JenisAsetController.php new file mode 100644 index 0000000..7ad1409 --- /dev/null +++ b/app/Http/Controllers/JenisAsetController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + JenisAset::create($validate); + return redirect() + ->route('basicdata.jenis-aset.index') + ->with('success', 'Jenis Aset created successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.jenis-aset.create') + ->with('error', 'Failed to create province'); + } + } + } + + public function create() + { + return view('lpj::jenis_aset.create'); + } + + public function edit($id) + { + $jenisAset = JenisAset::find($id); + return view('lpj::jenis_aset.create', compact('jenisAset')); + } + + public function update(JenisAsetRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $jenisAset = JenisAset::find($id); + $jenisAset->update($validate); + return redirect() + ->route('basicdata.jenis-aset.index') + ->with('success', 'Jenis Aset updated successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.jenis-aset.edit', $id) + ->with('error', 'Failed to update province'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $jenisAset = JenisAset::find($id); + $jenisAset->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Aset deleted successfully']); + } catch (\Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('jenis_aset.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisAset::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new JenisAsetExport, 'jenis_aset.xlsx'); + } + } diff --git a/app/Http/Requests/JenisAsetRequest.php b/app/Http/Requests/JenisAsetRequest.php new file mode 100644 index 0000000..05c6864 --- /dev/null +++ b/app/Http/Requests/JenisAsetRequest.php @@ -0,0 +1,33 @@ + 'required|max:255', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_aset,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_aset,code'; + } + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } +} diff --git a/app/Models/JenisAset.php b/app/Models/JenisAset.php new file mode 100644 index 0000000..f9f79c7 --- /dev/null +++ b/app/Models/JenisAset.php @@ -0,0 +1,13 @@ +id(); + $table->string('code'); + $table->string('name'); + $table->timestamps(); + $table->softDeletes(); + $table->uuid('created_by')->nullable(); + $table->uuid('updated_by')->nullable(); + $table->uuid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jenis_aset'); + } +}; diff --git a/module.json b/module.json index bc47128..2488a9c 100644 --- a/module.json +++ b/module.json @@ -18,7 +18,9 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["Administrator"] + "roles": [ + "Administrator" + ] }, { "title": "Pembatalan", @@ -27,7 +29,9 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["Administrator"] + "roles": [ + "Administrator" + ] }, { "title": "Data Debitur", @@ -36,7 +40,9 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["Administrator"], + "roles": [ + "Administrator" + ], "sub": [ { "title": "Debitur", @@ -79,7 +85,9 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["Administrator"] + "roles": [ + "Administrator" + ] } ], "master": [ @@ -90,7 +98,9 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["Administrator"], + "roles": [ + "Administrator" + ], "sub": [ { "title": "Jenis Fasilitas Kredit", @@ -115,6 +125,14 @@ "attributes": [], "permission": "", "roles": [] + }, + { + "title": "Jenis Aset", + "path": "basicdata.jenis-aset", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] } ] } diff --git a/resources/views/jenis_aset/create.blade.php b/resources/views/jenis_aset/create.blade.php new file mode 100644 index 0000000..e7ed045 --- /dev/null +++ b/resources/views/jenis_aset/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($jenisAset->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisAset->id) ? 'Edit' : 'Tambah' }} Jenis Aset +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/jenis_aset/index.blade.php b/resources/views/jenis_aset/index.blade.php new file mode 100644 index 0000000..a8b7437 --- /dev/null +++ b/resources/views/jenis_aset/index.blade.php @@ -0,0 +1,148 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.jenis-aset') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Jenis Aset +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Jenis Aset + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 1e3d059..ace16b9 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -52,3 +52,18 @@ $trail->push('Edit Jenis Jaminan'); }); + Breadcrumbs::for('basicdata.jenis-aset', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Aset', route('basicdata.jenis-aset.index')); + }); + + Breadcrumbs::for('basicdata.jenis-aset.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-aset'); + $trail->push('Tambah Jenis Aset', route('basicdata.jenis-aset.create')); + }); + + Breadcrumbs::for('basicdata.jenis-aset.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-aset'); + $trail->push('Edit Jenis Aset'); + }); + diff --git a/routes/web.php b/routes/web.php index b39e3a2..9b9676f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ name('export'); }); Route::resource('jenis-jaminan', JenisJaminanController::class); + + Route::name('jenis-aset.')->prefix('jenis-aset')->group(function () { + Route::get('restore/{id}', [JenisAsetController::class, 'restore'])->name('restore'); + Route::get('datatables', [JenisAsetController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [JenisAsetController::class, 'export'])->name('export'); + }); + Route::resource('jenis-aset', JenisAsetController::class); }); }); From e422a1a2adb756062e9e473a55eb1382e50d354a Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 12 Aug 2024 10:58:17 +0700 Subject: [PATCH 0009/1161] Feature #5 : Currency --- app/Exports/CurrencyExport.php | 54 ++++++ app/Http/Controllers/CurrencyController.php | 149 +++++++++++++++++ app/Http/Requests/CurrencyRequest.php | 41 +++++ app/Models/Currency.php | 14 ++ ...4_08_12_024448_create_currencies_table.php | 39 +++++ module.json | 21 +++ resources/views/currency/create.blade.php | 69 ++++++++ resources/views/currency/index.blade.php | 155 ++++++++++++++++++ routes/breadcrumbs.php | 16 ++ routes/web.php | 20 +++ 10 files changed, 578 insertions(+) create mode 100644 app/Exports/CurrencyExport.php create mode 100644 app/Http/Controllers/CurrencyController.php create mode 100644 app/Http/Requests/CurrencyRequest.php create mode 100644 app/Models/Currency.php create mode 100644 database/migrations/2024_08_12_024448_create_currencies_table.php create mode 100644 resources/views/currency/create.blade.php create mode 100644 resources/views/currency/index.blade.php diff --git a/app/Exports/CurrencyExport.php b/app/Exports/CurrencyExport.php new file mode 100644 index 0000000..8b9f6d3 --- /dev/null +++ b/app/Exports/CurrencyExport.php @@ -0,0 +1,54 @@ +id, + $row->code, + $row->name, + $row->decimal_places, + $row->updated_at, + $row->deleted_at, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Decimal Places', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, + 'B' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, + 'E' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php new file mode 100644 index 0000000..1fe138a --- /dev/null +++ b/app/Http/Controllers/CurrencyController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + Currency::create($validate); + return redirect() + ->route('basicdata.currency.index') + ->with('success', 'Currency created successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.currency.create') + ->with('error', 'Failed to create province'); + } + } + } + + public function create() + { + return view('lpj::currency.create'); + } + + public function edit($id) + { + $currency = Currency::find($id); + return view('lpj::currency.create', compact('currency')); + } + + public function update(CurrencyRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $currency = Currency::find($id); + $currency->update($validate); + return redirect() + ->route('basicdata.currency.index') + ->with('success', 'Currency updated successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.currency.edit', $id) + ->with('error', 'Failed to update province'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $currency = Currency::find($id); + $currency->delete(); + + echo json_encode(['success' => true, 'message' => 'Currency deleted successfully']); + } catch (\Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('currency.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = Currency::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new CurrencyExport, 'currency.xlsx'); + } + } diff --git a/app/Http/Requests/CurrencyRequest.php b/app/Http/Requests/CurrencyRequest.php new file mode 100644 index 0000000..fded635 --- /dev/null +++ b/app/Http/Requests/CurrencyRequest.php @@ -0,0 +1,41 @@ + 'required|string|max:255', + 'decimal_places' => 'nullable|integer|between:0,3', + 'status' => 'nullable|boolean', + 'authorized_at' => 'nullable|datetime', + 'authorized_status' => 'nullable|string|max:1', + 'authorized_by' => 'nullable|exists:users,id', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|string|max:3|unique:currencies,code,' . $this->id; + } else { + $rules['code'] = 'required|string|max:3|unique:currencies,code'; + } + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/Currency.php b/app/Models/Currency.php new file mode 100644 index 0000000..6fafc3f --- /dev/null +++ b/app/Models/Currency.php @@ -0,0 +1,14 @@ +id(); + $table->string('code',3)->unique(); + $table->string('name'); + $table->integer('decimal_places')->default(2); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('currencies'); + } +}; diff --git a/module.json b/module.json index 2488a9c..e48362b 100644 --- a/module.json +++ b/module.json @@ -103,6 +103,27 @@ ], "sub": [ { + "title": "Cabang", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, { + "title": "Mata Uang", + "path": "basicdata.currency", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, { + "title": "Debitur", + "path": "", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + },{ "title": "Jenis Fasilitas Kredit", "path": "basicdata.jenis-fasilitas-kredit", "classes": "", diff --git a/resources/views/currency/create.blade.php b/resources/views/currency/create.blade.php new file mode 100644 index 0000000..6c02d64 --- /dev/null +++ b/resources/views/currency/create.blade.php @@ -0,0 +1,69 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($currency->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($currency->id) ? 'Edit' : 'Tambah' }} Currency +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('decimal_places') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/currency/index.blade.php b/resources/views/currency/index.blade.php new file mode 100644 index 0000000..976c828 --- /dev/null +++ b/resources/views/currency/index.blade.php @@ -0,0 +1,155 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.currency') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Mata Uang +

+ +
+
+
+ + + + + + + + + + +
+ + + Code + + + Mata Uang + + + Decimal Places + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index ace16b9..f9c1e10 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -67,3 +67,19 @@ $trail->push('Edit Jenis Aset'); }); + + Breadcrumbs::for('basicdata.currency', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Mata Uang', route('basicdata.currency.index')); + }); + + Breadcrumbs::for('basicdata.currency.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.currency'); + $trail->push('Tambah Mata Uang', route('basicdata.currency.create')); + }); + + Breadcrumbs::for('basicdata.currency.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.currency'); + $trail->push('Edit Mata Uang'); + }); + diff --git a/routes/web.php b/routes/web.php index 9b9676f..44f2266 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ name('export'); }); Route::resource('jenis-aset', JenisAsetController::class); + + Route::name('currency.')->prefix('mata-uang')->group(function () { + Route::get('restore/{id}', [CurrencyController::class, 'restore'])->name('restore'); + Route::get('datatables', [CurrencyController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [CurrencyController::class, 'export'])->name('export'); + }); + + Route::resource('mata-uang', CurrencyController::class, [ + 'names' => [ + 'index' => 'currency.index', + 'show' => 'currency.show', + 'create' => 'currency.create', + 'store' => 'currency.store', + 'edit' => 'currency.edit', + 'update' => 'currency.update', + 'destroy' => 'currency.destroy', + ] + ]); }); }); From a589711f7d2ca55fd3869ae94c65a235c55e2691 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 12 Aug 2024 11:23:51 +0700 Subject: [PATCH 0010/1161] Feature #6 : Branch --- app/Exports/BranchExport.php | 48 ++++++ app/Http/Controllers/BranchController.php | 149 ++++++++++++++++++ app/Http/Requests/BranchRequest.php | 38 +++++ app/Models/Branch.php | 13 ++ ...024_08_12_023807_create_branches_table.php | 38 +++++ module.json | 2 +- resources/views/branch/create.blade.php | 58 +++++++ resources/views/branch/index.blade.php | 148 +++++++++++++++++ routes/breadcrumbs.php | 15 ++ routes/web.php | 20 +++ 10 files changed, 528 insertions(+), 1 deletion(-) create mode 100644 app/Exports/BranchExport.php create mode 100644 app/Http/Controllers/BranchController.php create mode 100644 app/Http/Requests/BranchRequest.php create mode 100644 app/Models/Branch.php create mode 100644 database/migrations/2024_08_12_023807_create_branches_table.php create mode 100644 resources/views/branch/create.blade.php create mode 100644 resources/views/branch/index.blade.php diff --git a/app/Exports/BranchExport.php b/app/Exports/BranchExport.php new file mode 100644 index 0000000..9ec3dd8 --- /dev/null +++ b/app/Exports/BranchExport.php @@ -0,0 +1,48 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, + 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/BranchController.php b/app/Http/Controllers/BranchController.php new file mode 100644 index 0000000..91ff521 --- /dev/null +++ b/app/Http/Controllers/BranchController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + Branch::create($validate); + return redirect() + ->route('basicdata.branch.index') + ->with('success', 'Branch created successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.branch.create') + ->with('error', 'Failed to create province'); + } + } + } + + public function create() + { + return view('lpj::branch.create'); + } + + public function edit($id) + { + $branch = Branch::find($id); + return view('lpj::branch.create', compact('branch')); + } + + public function update(BranchRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $branch = Branch::find($id); + $branch->update($validate); + return redirect() + ->route('basicdata.branch.index') + ->with('success', 'Branch updated successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.branch.edit', $id) + ->with('error', 'Failed to update province'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $branch = Branch::find($id); + $branch->delete(); + + echo json_encode(['success' => true, 'message' => 'Branch deleted successfully']); + } catch (\Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('branch.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = Branch::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new BranchExport, 'branch.xlsx'); + } + } diff --git a/app/Http/Requests/BranchRequest.php b/app/Http/Requests/BranchRequest.php new file mode 100644 index 0000000..353657c --- /dev/null +++ b/app/Http/Requests/BranchRequest.php @@ -0,0 +1,38 @@ + 'required|string|max:255', + 'status' => 'nullable|boolean', + 'authorized_at' => 'nullable|datetime', + 'authorized_status' => 'nullable|string|max:1', + 'authorized_by' => 'nullable|exists:users,id', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|string|max:3|unique:branches,code,' . $this->id; + } else { + $rules['code'] = 'required|string|max:3|unique:branches,code'; + } + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } +} diff --git a/app/Models/Branch.php b/app/Models/Branch.php new file mode 100644 index 0000000..405d749 --- /dev/null +++ b/app/Models/Branch.php @@ -0,0 +1,13 @@ +id(); + $table->string('code', 9)->unique(); + $table->string('name'); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('branches'); + } +}; diff --git a/module.json b/module.json index e48362b..192773a 100644 --- a/module.json +++ b/module.json @@ -104,7 +104,7 @@ "sub": [ { "title": "Cabang", - "path": "", + "path": "basicdata.branch", "classes": "", "attributes": [], "permission": "", diff --git a/resources/views/branch/create.blade.php b/resources/views/branch/create.blade.php new file mode 100644 index 0000000..ede7b71 --- /dev/null +++ b/resources/views/branch/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($branch->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($branch->id) ? 'Edit' : 'Tambah' }} Branch +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/branch/index.blade.php b/resources/views/branch/index.blade.php new file mode 100644 index 0000000..d000d8a --- /dev/null +++ b/resources/views/branch/index.blade.php @@ -0,0 +1,148 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.branch') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Cabang +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Cabang + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index f9c1e10..f6fffdc 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -83,3 +83,18 @@ $trail->push('Edit Mata Uang'); }); + Breadcrumbs::for('basicdata.branch', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Cabang', route('basicdata.branch.index')); + }); + + Breadcrumbs::for('basicdata.branch.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.branch'); + $trail->push('Tambah Cabang', route('basicdata.branch.create')); + }); + + Breadcrumbs::for('basicdata.branch.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.branch'); + $trail->push('Edit Cabang'); + }); + diff --git a/routes/web.php b/routes/web.php index 44f2266..b8f160d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ 'currency.destroy', ] ]); + + Route::name('branch.')->prefix('cabang')->group(function () { + Route::get('restore/{id}', [BranchController::class, 'restore'])->name('restore'); + Route::get('datatables', [BranchController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [BranchController::class, 'export'])->name('export'); + }); + + Route::resource('cabang', BranchController::class, [ + 'names' => [ + 'index' => 'branch.index', + 'show' => 'branch.show', + 'create' => 'branch.create', + 'store' => 'branch.store', + 'edit' => 'branch.edit', + 'update' => 'branch.update', + 'destroy' => 'branch.destroy', + ] + ]); }); }); From c31399e6a249c12de96d2d8d38e5b8a85431c9dc Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 13 Aug 2024 10:42:50 +0700 Subject: [PATCH 0011/1161] Fix Typo --- app/Http/Controllers/BranchController.php | 6 +++--- app/Http/Controllers/CurrencyController.php | 6 +++--- app/Http/Controllers/JenisAsetController.php | 6 +++--- app/Http/Controllers/JenisFasilitasKreditController.php | 6 +++--- app/Http/Controllers/JenisJaminanController.php | 6 +++--- app/Http/Controllers/JenisLegalitasJaminanController.php | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/BranchController.php b/app/Http/Controllers/BranchController.php index 91ff521..f990d9f 100644 --- a/app/Http/Controllers/BranchController.php +++ b/app/Http/Controllers/BranchController.php @@ -32,7 +32,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.branch.create') - ->with('error', 'Failed to create province'); + ->with('error', 'Failed to create branch'); } } } @@ -63,7 +63,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.branch.edit', $id) - ->with('error', 'Failed to update province'); + ->with('error', 'Failed to update branch'); } } } @@ -77,7 +77,7 @@ echo json_encode(['success' => true, 'message' => 'Branch deleted successfully']); } catch (\Exception $e) { - echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + echo json_encode(['success' => false, 'message' => 'Failed to delete branch']); } } diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php index 1fe138a..147da7e 100644 --- a/app/Http/Controllers/CurrencyController.php +++ b/app/Http/Controllers/CurrencyController.php @@ -32,7 +32,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.currency.create') - ->with('error', 'Failed to create province'); + ->with('error', 'Failed to create currency'); } } } @@ -63,7 +63,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.currency.edit', $id) - ->with('error', 'Failed to update province'); + ->with('error', 'Failed to update currency'); } } } @@ -77,7 +77,7 @@ echo json_encode(['success' => true, 'message' => 'Currency deleted successfully']); } catch (\Exception $e) { - echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + echo json_encode(['success' => false, 'message' => 'Failed to delete currency']); } } diff --git a/app/Http/Controllers/JenisAsetController.php b/app/Http/Controllers/JenisAsetController.php index 7ad1409..54160fc 100644 --- a/app/Http/Controllers/JenisAsetController.php +++ b/app/Http/Controllers/JenisAsetController.php @@ -32,7 +32,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.jenis-aset.create') - ->with('error', 'Failed to create province'); + ->with('error', 'Failed to create jenis aset'); } } } @@ -63,7 +63,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.jenis-aset.edit', $id) - ->with('error', 'Failed to update province'); + ->with('error', 'Failed to update jenis aset'); } } } @@ -77,7 +77,7 @@ echo json_encode(['success' => true, 'message' => 'Jenis Aset deleted successfully']); } catch (\Exception $e) { - echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + echo json_encode(['success' => false, 'message' => 'Failed to delete jenis aset']); } } diff --git a/app/Http/Controllers/JenisFasilitasKreditController.php b/app/Http/Controllers/JenisFasilitasKreditController.php index cd26750..facd7bc 100644 --- a/app/Http/Controllers/JenisFasilitasKreditController.php +++ b/app/Http/Controllers/JenisFasilitasKreditController.php @@ -30,7 +30,7 @@ class JenisFasilitasKreditController extends Controller JenisFasilitasKredit::create($validate); return redirect()->route('basicdata.jenis-fasilitas-kredit.index')->with('success', 'Jenis Fasilitas Kredit created successfully'); } catch (\Exception $e){ - return redirect()->route('basicdata.jenis-fasilitas-kredit.create')->with('error', 'Failed to create province'); + return redirect()->route('basicdata.jenis-fasilitas-kredit.create')->with('error', 'Failed to create jenis fasilitas kredit'); } } } @@ -50,7 +50,7 @@ class JenisFasilitasKreditController extends Controller $jenisFasilitasKredit->update($validate); return redirect()->route('basicdata.jenis-fasilitas-kredit.index')->with('success', 'Jenis Fasilitas Kredit updated successfully'); } catch (\Exception $e){ - return redirect()->route('basicdata.jenis-fasilitas-kredit.edit', $id)->with('error', 'Failed to update province'); + return redirect()->route('basicdata.jenis-fasilitas-kredit.edit', $id)->with('error', 'Failed to update jenis fasilitas kredit'); } } } @@ -63,7 +63,7 @@ class JenisFasilitasKreditController extends Controller echo json_encode(['success' => true, 'message' => 'Jenis Fasilitas Kredit deleted successfully']); } catch (\Exception $e){ - echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + echo json_encode(['success' => false, 'message' => 'Failed to delete jenis fasilitas kredit']); } } diff --git a/app/Http/Controllers/JenisJaminanController.php b/app/Http/Controllers/JenisJaminanController.php index 2a6764d..11a48a3 100644 --- a/app/Http/Controllers/JenisJaminanController.php +++ b/app/Http/Controllers/JenisJaminanController.php @@ -32,7 +32,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.jenis-jaminan.create') - ->with('error', 'Failed to create province'); + ->with('error', 'Failed to create jenis jaminan'); } } } @@ -63,7 +63,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.jenis-jaminan.edit', $id) - ->with('error', 'Failed to update province'); + ->with('error', 'Failed to update jenis jaminan'); } } } @@ -77,7 +77,7 @@ echo json_encode(['success' => true, 'message' => 'Jenis Jaminan deleted successfully']); } catch (\Exception $e) { - echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + echo json_encode(['success' => false, 'message' => 'Failed to delete jenis jaminan']); } } diff --git a/app/Http/Controllers/JenisLegalitasJaminanController.php b/app/Http/Controllers/JenisLegalitasJaminanController.php index 51e548f..8a93c1b 100644 --- a/app/Http/Controllers/JenisLegalitasJaminanController.php +++ b/app/Http/Controllers/JenisLegalitasJaminanController.php @@ -32,7 +32,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.jenis-legalitas-jaminan.create') - ->with('error', 'Failed to create province'); + ->with('error', 'Failed to create jenis legalitas jaminan'); } } } @@ -63,7 +63,7 @@ } catch (\Exception $e) { return redirect() ->route('basicdata.jenis-legalitas-jaminan.edit', $id) - ->with('error', 'Failed to update province'); + ->with('error', 'Failed to update jenis legalitas jaminan'); } } } @@ -77,7 +77,7 @@ echo json_encode(['success' => true, 'message' => 'Jenis Legalitas Jaminan deleted successfully']); } catch (\Exception $e) { - echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + echo json_encode(['success' => false, 'message' => 'Failed to delete jenis legalitas jaminan']); } } From 5c4285c77eb3677699268ab81ccaa2f869c5a169 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 13 Aug 2024 11:50:40 +0700 Subject: [PATCH 0012/1161] Feature #7 : Module Debitur --- app/Exports/DebitureExport.php | 81 ++++++ app/Http/Controllers/DebitureController.php | 169 ++++++++++++ app/Http/Requests/DebitureRequest.php | 50 ++++ app/Models/Debiture.php | 60 +++++ ...24_08_12_022026_create_debitures_table.php | 54 ++++ module.json | 60 ++--- resources/views/debitur/create.blade.php | 242 ++++++++++++++++++ resources/views/debitur/index.blade.php | 201 +++++++++++++++ routes/breadcrumbs.php | 14 + routes/web.php | 10 + 10 files changed, 897 insertions(+), 44 deletions(-) create mode 100644 app/Exports/DebitureExport.php create mode 100644 app/Http/Controllers/DebitureController.php create mode 100644 app/Http/Requests/DebitureRequest.php create mode 100644 app/Models/Debiture.php create mode 100644 database/migrations/2024_08_12_022026_create_debitures_table.php create mode 100644 resources/views/debitur/create.blade.php create mode 100644 resources/views/debitur/index.blade.php diff --git a/app/Exports/DebitureExport.php b/app/Exports/DebitureExport.php new file mode 100644 index 0000000..37cbc8c --- /dev/null +++ b/app/Exports/DebitureExport.php @@ -0,0 +1,81 @@ +get(); + } + + public function map($row) + : array + { + return [ + $row->id, + $row->branch->name . + $row->cif, + $row->nomor_rekening, + $row->name, + $row->npwp, + $row->nomor_id, + $row->email, + $row->phone, + $row->province->name, + $row->city->name, + $row->district->name, + $row->village->name, + $row->postal_code, + $row->address, + $row->registered_at, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Branch', + 'CIF', + 'Nomor Rekening', + 'Name', + 'NPWP', + 'Nomor ID', + 'Email', + 'Phone', + 'Province', + 'City', + 'District', + 'Village', + 'Postal Code', + 'Address', + 'Registered At', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'C' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_NUMBER, + 'F' => NumberFormat::FORMAT_NUMBER, + 'G' => NumberFormat::FORMAT_NUMBER, + 'P' => NumberFormat::FORMAT_DATE_DATETIME, + 'Q' => NumberFormat::FORMAT_DATE_DATETIME + + ]; + } + } diff --git a/app/Http/Controllers/DebitureController.php b/app/Http/Controllers/DebitureController.php new file mode 100644 index 0000000..e1c5432 --- /dev/null +++ b/app/Http/Controllers/DebitureController.php @@ -0,0 +1,169 @@ +validated(); + + if ($validate) { + try { + // Save to database + Debiture::create($validate); + return redirect() + ->route('debitur.index') + ->with('success', 'Debitur created successfully'); + } catch (Exception $e) { + return redirect() + ->route('debitur.create') + ->with('error', 'Failed to create debitur'); + } + } + } + + public function create() + { + $branches = Branch::all(); + $provinces = Province::all(); + return view('lpj::debitur.create', compact('branches', 'provinces')); + } + + public function edit($id) + { + $debitur = Debiture::find($id); + $branches = Branch::all(); + $provinces = Province::all(); + $cities = City::where('province_code', $debitur->province_code)->get(); + $districts = District::where('city_code', $debitur->city_code)->get(); + $villages = Village::where('district_code', $debitur->district_code)->get(); + return view('lpj::debitur.create', compact('debitur', 'branches', 'provinces', 'cities', 'districts', 'villages')); + } + + public function update(DebitureRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $debitur = Debiture::find($id); + $debitur->update($validate); + return redirect() + ->route('debitur.index') + ->with('success', 'Debitur updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('debitur.edit', $id) + ->with('error', 'Failed to update debitur'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $debitur = Debiture::find($id); + $debitur->delete(); + + echo json_encode(['success' => true, 'message' => 'Debitur deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete debitur']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = Debiture::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('cif', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + $q->orWhereRelation('branch', 'name', 'LIKE', "%$search%"); + $q->orWhere('address', 'LIKE', "%$search%"); + $q->orWhere('npwp', 'LIKE', "%$search%"); + $q->orWhere('nomor_id', 'LIKE', "%$search%"); + $q->orWhere('email', 'LIKE', "%$search%"); + $q->orWhere('phone', 'LIKE', "%$search%"); + $q->orWhere('nomor_rekening', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->with('branch')->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new DebitureExport, 'debitur.xlsx'); + } + } diff --git a/app/Http/Requests/DebitureRequest.php b/app/Http/Requests/DebitureRequest.php new file mode 100644 index 0000000..1a71510 --- /dev/null +++ b/app/Http/Requests/DebitureRequest.php @@ -0,0 +1,50 @@ + 'required|exists:branches,id', + 'province_code' => 'nullable|exists:provinces,code', + 'city_code' => 'nullable|exists:cities,code', + 'district_code' => 'nullable|exists:districts,code', + 'village_code' => 'nullable|exists:villages,code', + 'nomor_rekening' => 'nullable|string|max:50', + 'name' => 'required', + 'registered_at' => 'nullable|date', + 'npwp' => 'nullable|string|max:16', + 'nomor_id' => 'nullable|string|max:16', + 'email' => 'nullable|email', + 'phone' => 'nullable|string|max:15', + 'address' => 'nullable|string', + 'postal_code' => 'nullable|string|max:10', + 'status' => 'nullable|boolean' + ]; + + if ($this->method() == 'PUT') { + $rules['cif'] = 'required|unique:debitures,cif,' . $this->id; + } else { + $rules['cif'] = 'required|unique:debitures,cif'; + } + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/Debiture.php b/app/Models/Debiture.php new file mode 100644 index 0000000..39b13d9 --- /dev/null +++ b/app/Models/Debiture.php @@ -0,0 +1,60 @@ +belongsTo(Branch::class, 'branch_id', 'id'); + } + + public function province() + { + return $this->belongsTo(Province::class, 'province_code', 'code'); + } + + public function city() + { + return $this->belongsTo(City::class, 'city_code', 'code'); + } + + public function district() + { + return $this->belongsTo(District::class, 'district_code', 'code'); + } + + public function village() + { + return $this->belongsTo(Village::class, 'village_code', 'code'); + } + + } diff --git a/database/migrations/2024_08_12_022026_create_debitures_table.php b/database/migrations/2024_08_12_022026_create_debitures_table.php new file mode 100644 index 0000000..31537aa --- /dev/null +++ b/database/migrations/2024_08_12_022026_create_debitures_table.php @@ -0,0 +1,54 @@ +id(); + $table->foreignIdFor(Branch::class)->constrained()->onDelete('cascade'); + $table->string('cif', 10)->unique(); + $table->string('name'); + $table->date('registered_at')->nullable(); + $table->string('npwp', 16)->nullable(); + $table->string('nomor_id', 16)->nullable(); + $table->string('email', 100)->nullable(); + $table->string('phone', 15)->nullable(); + $table->string('nomor_rekening', 50)->nullable(); + $table->string('province_code')->index(); + $table->string('city_code')->index(); + $table->string('district_code')->index(); + $table->string('village_code')->index(); + $table->string('postal_code', 5)->nullable(); + $table->text('address')->nullable(); + + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::dropIfExists('debitures'); + } + }; diff --git a/module.json b/module.json index 192773a..1e2c068 100644 --- a/module.json +++ b/module.json @@ -35,47 +35,24 @@ }, { "title": "Data Debitur", - "path": "", + "path": "debitur", "icon": "ki-filled ki-people text-lg", "classes": "", "attributes": [], "permission": "", "roles": [ "Administrator" - ], - "sub": [ - { - "title": "Debitur", - "path": "", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - }, - { - "title": "Pemilik Jaminan", - "path": "", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - }, - { - "title": "Jaminan", - "path": "", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - }, - { - "title": "Dokumen Jaminan", - "path": "", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - } + ] + }, + { + "title": "Authorization", + "path": "", + "icon": "ki-filled ki-some-files text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "Administrator" ] }, { @@ -109,21 +86,16 @@ "attributes": [], "permission": "", "roles": [] - }, { + }, + { "title": "Mata Uang", "path": "basicdata.currency", "classes": "", "attributes": [], "permission": "", "roles": [] - }, { - "title": "Debitur", - "path": "", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - },{ + }, + { "title": "Jenis Fasilitas Kredit", "path": "basicdata.jenis-fasilitas-kredit", "classes": "", diff --git a/resources/views/debitur/create.blade.php b/resources/views/debitur/create.blade.php new file mode 100644 index 0000000..915ad9e --- /dev/null +++ b/resources/views/debitur/create.blade.php @@ -0,0 +1,242 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($debitur->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($debitur->id) ? 'Edit' : 'Tambah' }} Debitur +

+
+ Back +
+
+
+
+ +
+ + @error('branch_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('cif') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('nomor_rekening') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('nomor_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('npwp') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('email') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('phone') + {{ $message }} + @enderror +
+
+
+ +
+
+
+ + @error('province_code') + {{ $message }} + @enderror +
+
+ + @error('city_code') + {{ $message }} + @enderror +
+
+
+
+ + @error('district_code') + {{ $message }} + @enderror +
+
+ + @error('district_code') + {{ $message }} + @enderror +
+
+ + @error('postal_code') + {{ $message }} + @enderror +
+
+
+ + @error('address') + {{ $message }} + @enderror +
+
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/debitur/index.blade.php b/resources/views/debitur/index.blade.php new file mode 100644 index 0000000..8b0b357 --- /dev/null +++ b/resources/views/debitur/index.blade.php @@ -0,0 +1,201 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('debitur') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Debitur +

+ +
+
+
+ + + + + + + + + + + + + + + + +
+ + + Cif + + + Nomor Rekening + + + Debitur + + + Cabang + + + Nomor ID + + + NPWP + + + Email + + + Phone + + + Alamat + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index f6fffdc..bdfac0a 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -98,3 +98,17 @@ $trail->push('Edit Cabang'); }); + Breadcrumbs::for('debitur', function (BreadcrumbTrail $trail) { + $trail->push('Debitur', route('debitur.index')); + }); + + Breadcrumbs::for('debitur.create', function (BreadcrumbTrail $trail) { + $trail->parent('debitur'); + $trail->push('Tambah Debitur', route('debitur.create')); + }); + + Breadcrumbs::for('debitur.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.branch'); + $trail->push('Edit Debitur'); + }); + diff --git a/routes/web.php b/routes/web.php index b8f160d..d504278 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,7 @@ use Illuminate\Support\Facades\Route; use Modules\Lpj\Http\Controllers\BranchController; use Modules\Lpj\Http\Controllers\CurrencyController; + use Modules\Lpj\Http\Controllers\DebitureController; use Modules\Lpj\Http\Controllers\JenisAsetController; use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\JenisJaminanController; @@ -91,4 +92,13 @@ ] ]); }); + + Route::name('debitur.')->prefix('debitur')->group(function () { + Route::get('restore/{id}', [DebitureController::class, 'restore'])->name('restore'); + Route::get('datatables', [DebitureController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [DebitureController::class, 'export'])->name('export'); + }); + + Route::resource('debitur', DebitureController::class); }); From e950b73b44387be2750cb073c52eafc5a1e49277 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 13 Aug 2024 11:54:42 +0700 Subject: [PATCH 0013/1161] Optimize code --- app/Exports/BranchExport.php | 5 +- app/Exports/CurrencyExport.php | 8 +- app/Exports/JenisAsetExport.php | 5 +- app/Exports/JenisFasilitasKreditExport.php | 5 +- app/Exports/JenisJaminanExport.php | 5 +- app/Http/Controllers/BranchController.php | 7 +- app/Http/Controllers/CurrencyController.php | 7 +- app/Http/Controllers/JenisAsetController.php | 7 +- .../JenisFasilitasKreditController.php | 272 +++++++++--------- .../Controllers/JenisJaminanController.php | 7 +- .../JenisLegalitasJaminanController.php | 7 +- app/Http/Requests/BranchRequest.php | 60 ++-- app/Http/Requests/JenisAsetRequest.php | 50 ++-- app/Http/Requests/JenisJaminanRequest.php | 50 ++-- .../Requests/JenisLegalitasJaminanRequest.php | 50 ++-- app/Models/Base.php | 17 +- app/Models/Branch.php | 21 +- app/Models/Currency.php | 24 +- app/Models/JenisAset.php | 16 +- app/Models/JenisFasilitasKredit.php | 12 +- app/Models/JenisJaminan.php | 16 +- app/Models/JenisLegalitasJaminan.php | 16 +- app/Providers/EventServiceProvider.php | 50 ++-- app/Providers/LpjServiceProvider.php | 233 +++++++-------- app/Providers/RouteServiceProvider.php | 82 +++--- config/config.php | 6 +- ...51_create_jenis_fasilitas_kredit_table.php | 64 +++-- ...8_11_000110_create_jenis_jaminan_table.php | 64 +++-- ...8_create_jenis_legalitas_jaminan_table.php | 64 +++-- ...4_08_11_074816_create_jenis_aset_table.php | 64 +++-- ...024_08_12_023807_create_branches_table.php | 67 ++--- ...4_08_12_024448_create_currencies_table.php | 69 ++--- database/seeders/LpjDatabaseSeeder.php | 21 +- package.json | 26 +- resources/views/branch/create.blade.php | 88 +++--- resources/views/currency/create.blade.php | 110 +++---- resources/views/jenis_aset/create.blade.php | 88 +++--- .../jenis_fasilitas_kredit/create.blade.php | 88 +++--- .../views/jenis_jaminan/create.blade.php | 88 +++--- .../jenis_legalitas_jaminan/create.blade.php | 88 +++--- routes/api.php | 24 +- vite.config.js | 4 +- 42 files changed, 1064 insertions(+), 991 deletions(-) diff --git a/app/Exports/BranchExport.php b/app/Exports/BranchExport.php index 9ec3dd8..1de8ebf 100644 --- a/app/Exports/BranchExport.php +++ b/app/Exports/BranchExport.php @@ -7,6 +7,7 @@ use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithMapping; use Modules\Lpj\Models\Branch; + use PhpOffice\PhpSpreadsheet\Style\NumberFormat; class BranchExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping { @@ -41,8 +42,8 @@ : array { return [ - 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, - 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME ]; } } diff --git a/app/Exports/CurrencyExport.php b/app/Exports/CurrencyExport.php index 8b9f6d3..27a73cb 100644 --- a/app/Exports/CurrencyExport.php +++ b/app/Exports/CurrencyExport.php @@ -7,7 +7,7 @@ use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithMapping; use Modules\Lpj\Models\Currency; - use Modules\Lpj\Models\JenisJaminan; + use PhpOffice\PhpSpreadsheet\Style\NumberFormat; class CurrencyExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping { @@ -46,9 +46,9 @@ : array { return [ - 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, - 'B' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, - 'E' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + 'A' => NumberFormat::FORMAT_NUMBER, + 'B' => NumberFormat::FORMAT_NUMBER, + 'E' => NumberFormat::FORMAT_DATE_DATETIME ]; } } diff --git a/app/Exports/JenisAsetExport.php b/app/Exports/JenisAsetExport.php index 158d4f0..449b73e 100644 --- a/app/Exports/JenisAsetExport.php +++ b/app/Exports/JenisAsetExport.php @@ -7,6 +7,7 @@ use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithMapping; use Modules\Lpj\Models\JenisAset; + use PhpOffice\PhpSpreadsheet\Style\NumberFormat; class JenisAsetExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping { @@ -41,8 +42,8 @@ : array { return [ - 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, - 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME ]; } } diff --git a/app/Exports/JenisFasilitasKreditExport.php b/app/Exports/JenisFasilitasKreditExport.php index 1a61a90..7341e64 100644 --- a/app/Exports/JenisFasilitasKreditExport.php +++ b/app/Exports/JenisFasilitasKreditExport.php @@ -7,6 +7,7 @@ use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithMapping; use Modules\Lpj\Models\JenisFasilitasKredit; + use PhpOffice\PhpSpreadsheet\Style\NumberFormat; class JenisFasilitasKreditExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping { @@ -41,8 +42,8 @@ : array { return [ - 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, - 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME ]; } } diff --git a/app/Exports/JenisJaminanExport.php b/app/Exports/JenisJaminanExport.php index cfbc234..9d313d0 100644 --- a/app/Exports/JenisJaminanExport.php +++ b/app/Exports/JenisJaminanExport.php @@ -7,6 +7,7 @@ use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithMapping; use Modules\Lpj\Models\JenisJaminan; + use PhpOffice\PhpSpreadsheet\Style\NumberFormat; class JenisJaminanExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping { @@ -41,8 +42,8 @@ : array { return [ - 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, - 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME ]; } } diff --git a/app/Http/Controllers/BranchController.php b/app/Http/Controllers/BranchController.php index f990d9f..a7c20ee 100644 --- a/app/Http/Controllers/BranchController.php +++ b/app/Http/Controllers/BranchController.php @@ -3,6 +3,7 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; + use Exception; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; use Modules\Lpj\Exports\BranchExport; @@ -29,7 +30,7 @@ return redirect() ->route('basicdata.branch.index') ->with('success', 'Branch created successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.branch.create') ->with('error', 'Failed to create branch'); @@ -60,7 +61,7 @@ return redirect() ->route('basicdata.branch.index') ->with('success', 'Branch updated successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.branch.edit', $id) ->with('error', 'Failed to update branch'); @@ -76,7 +77,7 @@ $branch->delete(); echo json_encode(['success' => true, 'message' => 'Branch deleted successfully']); - } catch (\Exception $e) { + } catch (Exception $e) { echo json_encode(['success' => false, 'message' => 'Failed to delete branch']); } } diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php index 147da7e..042e7af 100644 --- a/app/Http/Controllers/CurrencyController.php +++ b/app/Http/Controllers/CurrencyController.php @@ -3,6 +3,7 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; + use Exception; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; use Modules\Lpj\Exports\CurrencyExport; @@ -29,7 +30,7 @@ return redirect() ->route('basicdata.currency.index') ->with('success', 'Currency created successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.currency.create') ->with('error', 'Failed to create currency'); @@ -60,7 +61,7 @@ return redirect() ->route('basicdata.currency.index') ->with('success', 'Currency updated successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.currency.edit', $id) ->with('error', 'Failed to update currency'); @@ -76,7 +77,7 @@ $currency->delete(); echo json_encode(['success' => true, 'message' => 'Currency deleted successfully']); - } catch (\Exception $e) { + } catch (Exception $e) { echo json_encode(['success' => false, 'message' => 'Failed to delete currency']); } } diff --git a/app/Http/Controllers/JenisAsetController.php b/app/Http/Controllers/JenisAsetController.php index 54160fc..d325645 100644 --- a/app/Http/Controllers/JenisAsetController.php +++ b/app/Http/Controllers/JenisAsetController.php @@ -3,6 +3,7 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; + use Exception; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; use Modules\Lpj\Exports\JenisAsetExport; @@ -29,7 +30,7 @@ return redirect() ->route('basicdata.jenis-aset.index') ->with('success', 'Jenis Aset created successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.jenis-aset.create') ->with('error', 'Failed to create jenis aset'); @@ -60,7 +61,7 @@ return redirect() ->route('basicdata.jenis-aset.index') ->with('success', 'Jenis Aset updated successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.jenis-aset.edit', $id) ->with('error', 'Failed to update jenis aset'); @@ -76,7 +77,7 @@ $jenisAset->delete(); echo json_encode(['success' => true, 'message' => 'Jenis Aset deleted successfully']); - } catch (\Exception $e) { + } catch (Exception $e) { echo json_encode(['success' => false, 'message' => 'Failed to delete jenis aset']); } } diff --git a/app/Http/Controllers/JenisFasilitasKreditController.php b/app/Http/Controllers/JenisFasilitasKreditController.php index facd7bc..59b481d 100644 --- a/app/Http/Controllers/JenisFasilitasKreditController.php +++ b/app/Http/Controllers/JenisFasilitasKreditController.php @@ -1,134 +1,150 @@ validated(); - - if($validate){ - try{ - // Save to database - JenisFasilitasKredit::create($validate); - return redirect()->route('basicdata.jenis-fasilitas-kredit.index')->with('success', 'Jenis Fasilitas Kredit created successfully'); - } catch (\Exception $e){ - return redirect()->route('basicdata.jenis-fasilitas-kredit.create')->with('error', 'Failed to create jenis fasilitas kredit'); - } - } - } - - public function edit($id){ - $jenisFasilitasKredit = JenisFasilitasKredit::find($id); - return view('lpj::jenis_fasilitas_kredit.create', compact('jenisFasilitasKredit')); - } - - public function update(JenisFasilitasKreditRequest $request, $id){ - $validate = $request->validated(); - - if($validate){ - try{ - // Update in database - $jenisFasilitasKredit = JenisFasilitasKredit::find($id); - $jenisFasilitasKredit->update($validate); - return redirect()->route('basicdata.jenis-fasilitas-kredit.index')->with('success', 'Jenis Fasilitas Kredit updated successfully'); - } catch (\Exception $e){ - return redirect()->route('basicdata.jenis-fasilitas-kredit.edit', $id)->with('error', 'Failed to update jenis fasilitas kredit'); - } - } - } - - public function destroy($id){ - try{ - // Delete from database - $jenisFasilitasKredit = JenisFasilitasKredit::find($id); - $jenisFasilitasKredit->delete(); - - echo json_encode(['success' => true, 'message' => 'Jenis Fasilitas Kredit deleted successfully']); - } catch (\Exception $e){ - echo json_encode(['success' => false, 'message' => 'Failed to delete jenis fasilitas kredit']); - } - } - - public function dataForDatatables(Request $request){ - if (is_null($this->user) || !$this->user->can('jenis_fasilitas_kredit.view')) { - //abort(403, 'Sorry! You are not allowed to view users.'); - } - - // Retrieve data from the database - $query = JenisFasilitasKredit::query(); - - // Apply search filter if provided - if ($request->has('search') && !empty($request->get('search'))) { - $search = $request->get('search'); - $query->where(function ($q) use ($search) { - $q->where('code', 'LIKE', "%$search%"); - $q->orWhere('name', 'LIKE', "%$search%"); - }); - } - - // Apply sorting if provided - if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { - $order = $request->get('sortOrder'); - $column = $request->get('sortField'); - $query->orderBy($column, $order); - } - - // Get the total count of records - $totalRecords = $query->count(); - - // Apply pagination if provided - if ($request->has('page') && $request->has('size')) { - $page = $request->get('page'); - $size = $request->get('size'); - $offset = ($page - 1) * $size; // Calculate the offset - - $query->skip($offset)->take($size); - } - - // Get the filtered count of records - $filteredRecords = $query->count(); - - // Get the data for the current page - $data = $query->get(); - - // Calculate the page count - $pageCount = ceil($totalRecords/$request->get('size')); - - // Calculate the current page number - $currentPage = 0 + 1; - - // Return the response data as a JSON object - return response()->json([ - 'draw' => $request->get('draw'), - 'recordsTotal' => $totalRecords, - 'recordsFiltered' => $filteredRecords, - 'pageCount' => $pageCount, - 'page' => $currentPage, - 'totalCount' => $totalRecords, - 'data' => $data, - ]); - } - - public function export() + class JenisFasilitasKreditController extends Controller { - return Excel::download(new JenisFasilitasKreditExport, 'jenis_fasilitas_kredit.xlsx'); + public $user; + + public function index() + { + return view('lpj::jenis_fasilitas_kredit.index'); + } + + public function store(JenisFasilitasKreditRequest $request) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Save to database + JenisFasilitasKredit::create($validate); + return redirect() + ->route('basicdata.jenis-fasilitas-kredit.index') + ->with('success', 'Jenis Fasilitas Kredit created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.jenis-fasilitas-kredit.create') + ->with('error', 'Failed to create jenis fasilitas kredit'); + } + } + } + + public function create() + { + return view('lpj::jenis_fasilitas_kredit.create'); + } + + public function edit($id) + { + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + return view('lpj::jenis_fasilitas_kredit.create', compact('jenisFasilitasKredit')); + } + + public function update(JenisFasilitasKreditRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + $jenisFasilitasKredit->update($validate); + return redirect() + ->route('basicdata.jenis-fasilitas-kredit.index') + ->with('success', 'Jenis Fasilitas Kredit updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.jenis-fasilitas-kredit.edit', $id) + ->with('error', 'Failed to update jenis fasilitas kredit'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + $jenisFasilitasKredit->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Fasilitas Kredit deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete jenis fasilitas kredit']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('jenis_fasilitas_kredit.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisFasilitasKredit::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new JenisFasilitasKreditExport, 'jenis_fasilitas_kredit.xlsx'); + } } -} diff --git a/app/Http/Controllers/JenisJaminanController.php b/app/Http/Controllers/JenisJaminanController.php index 11a48a3..f9736d2 100644 --- a/app/Http/Controllers/JenisJaminanController.php +++ b/app/Http/Controllers/JenisJaminanController.php @@ -3,6 +3,7 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; + use Exception; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; use Modules\Lpj\Exports\JenisJaminanExport; @@ -29,7 +30,7 @@ return redirect() ->route('basicdata.jenis-jaminan.index') ->with('success', 'Jenis Jaminan created successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.jenis-jaminan.create') ->with('error', 'Failed to create jenis jaminan'); @@ -60,7 +61,7 @@ return redirect() ->route('basicdata.jenis-jaminan.index') ->with('success', 'Jenis Jaminan updated successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.jenis-jaminan.edit', $id) ->with('error', 'Failed to update jenis jaminan'); @@ -76,7 +77,7 @@ $jenisJaminan->delete(); echo json_encode(['success' => true, 'message' => 'Jenis Jaminan deleted successfully']); - } catch (\Exception $e) { + } catch (Exception $e) { echo json_encode(['success' => false, 'message' => 'Failed to delete jenis jaminan']); } } diff --git a/app/Http/Controllers/JenisLegalitasJaminanController.php b/app/Http/Controllers/JenisLegalitasJaminanController.php index 8a93c1b..9c6f4e9 100644 --- a/app/Http/Controllers/JenisLegalitasJaminanController.php +++ b/app/Http/Controllers/JenisLegalitasJaminanController.php @@ -3,6 +3,7 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; + use Exception; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; use Modules\Lpj\Exports\JenisLegalitasJaminanExport; @@ -29,7 +30,7 @@ return redirect() ->route('basicdata.jenis-legalitas-jaminan.index') ->with('success', 'Jenis Legalitas Jaminan created successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.jenis-legalitas-jaminan.create') ->with('error', 'Failed to create jenis legalitas jaminan'); @@ -60,7 +61,7 @@ return redirect() ->route('basicdata.jenis-legalitas-jaminan.index') ->with('success', 'Jenis Legalitas Jaminan updated successfully'); - } catch (\Exception $e) { + } catch (Exception $e) { return redirect() ->route('basicdata.jenis-legalitas-jaminan.edit', $id) ->with('error', 'Failed to update jenis legalitas jaminan'); @@ -76,7 +77,7 @@ $jenisLegalitasJaminan->delete(); echo json_encode(['success' => true, 'message' => 'Jenis Legalitas Jaminan deleted successfully']); - } catch (\Exception $e) { + } catch (Exception $e) { echo json_encode(['success' => false, 'message' => 'Failed to delete jenis legalitas jaminan']); } } diff --git a/app/Http/Requests/BranchRequest.php b/app/Http/Requests/BranchRequest.php index 353657c..ddc2978 100644 --- a/app/Http/Requests/BranchRequest.php +++ b/app/Http/Requests/BranchRequest.php @@ -1,38 +1,40 @@ 'required|string|max:255', - 'status' => 'nullable|boolean', - 'authorized_at' => 'nullable|datetime', - 'authorized_status' => 'nullable|string|max:1', - 'authorized_by' => 'nullable|exists:users,id', - ]; + /** + * Get the validation rules that apply to the request. + */ + public function rules() + : array + { + $rules = [ + 'name' => 'required|string|max:255', + 'status' => 'nullable|boolean', + 'authorized_at' => 'nullable|datetime', + 'authorized_status' => 'nullable|string|max:1', + 'authorized_by' => 'nullable|exists:users,id', + ]; - if ($this->method() == 'PUT') { - $rules['code'] = 'required|string|max:3|unique:branches,code,' . $this->id; - } else { - $rules['code'] = 'required|string|max:3|unique:branches,code'; + if ($this->method() == 'PUT') { + $rules['code'] = 'required|string|max:3|unique:branches,code,' . $this->id; + } else { + $rules['code'] = 'required|string|max:3|unique:branches,code'; + } + + return $rules; } - return $rules; + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } } - - /** - * Determine if the user is authorized to make this request. - */ - public function authorize(): bool - { - return true; - } -} diff --git a/app/Http/Requests/JenisAsetRequest.php b/app/Http/Requests/JenisAsetRequest.php index 05c6864..2675da2 100644 --- a/app/Http/Requests/JenisAsetRequest.php +++ b/app/Http/Requests/JenisAsetRequest.php @@ -1,33 +1,35 @@ 'required|max:255', - ]; + /** + * Get the validation rules that apply to the request. + */ + public function rules() + : array + { + $rules = [ + 'name' => 'required|max:255', + ]; - if ($this->method() == 'PUT') { - $rules['code'] = 'required|max:50|unique:jenis_aset,code,' . $this->id; - } else { - $rules['code'] = 'required|max:50|unique:jenis_aset,code'; + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_aset,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_aset,code'; + } + return $rules; } - return $rules; - } - /** - * Determine if the user is authorized to make this request. - */ - public function authorize(): bool - { - return true; + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } } -} diff --git a/app/Http/Requests/JenisJaminanRequest.php b/app/Http/Requests/JenisJaminanRequest.php index d008cf9..4e2da8f 100644 --- a/app/Http/Requests/JenisJaminanRequest.php +++ b/app/Http/Requests/JenisJaminanRequest.php @@ -1,33 +1,35 @@ 'required|max:255', - ]; + /** + * Get the validation rules that apply to the request. + */ + public function rules() + : array + { + $rules = [ + 'name' => 'required|max:255', + ]; - if ($this->method() == 'PUT') { - $rules['code'] = 'required|max:50|unique:jenis_jaminan,code,' . $this->id; - } else { - $rules['code'] = 'required|max:50|unique:jenis_jaminan,code'; + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_jaminan,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_jaminan,code'; + } + return $rules; } - return $rules; - } - /** - * Determine if the user is authorized to make this request. - */ - public function authorize(): bool - { - return true; + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } } -} diff --git a/app/Http/Requests/JenisLegalitasJaminanRequest.php b/app/Http/Requests/JenisLegalitasJaminanRequest.php index e109b27..b319443 100644 --- a/app/Http/Requests/JenisLegalitasJaminanRequest.php +++ b/app/Http/Requests/JenisLegalitasJaminanRequest.php @@ -1,33 +1,35 @@ 'required|max:255', - ]; + /** + * Get the validation rules that apply to the request. + */ + public function rules() + : array + { + $rules = [ + 'name' => 'required|max:255', + ]; - if ($this->method() == 'PUT') { - $rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code,' . $this->id; - } else { - $rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code'; + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code'; + } + return $rules; } - return $rules; - } - /** - * Determine if the user is authorized to make this request. - */ - public function authorize(): bool - { - return true; + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } } -} diff --git a/app/Models/Base.php b/app/Models/Base.php index 644d6f0..eb7b4d8 100644 --- a/app/Models/Base.php +++ b/app/Models/Base.php @@ -1,14 +1,15 @@ connection = $module->database; diff --git a/app/Models/Branch.php b/app/Models/Branch.php index 405d749..836cca5 100644 --- a/app/Models/Branch.php +++ b/app/Models/Branch.php @@ -1,13 +1,16 @@ hasMany(Debiture::class, 'branch_id', 'id'); + } + } diff --git a/app/Models/Currency.php b/app/Models/Currency.php index 6fafc3f..454c834 100644 --- a/app/Models/Currency.php +++ b/app/Models/Currency.php @@ -1,14 +1,20 @@ > - */ - protected $listen = []; - - /** - * Indicates if events should be discovered. - * - * @var bool - */ - protected static $shouldDiscoverEvents = true; - - /** - * Configure the proper event listeners for email verification. - * - * @return void - */ - protected function configureEmailVerification(): void + class EventServiceProvider extends ServiceProvider { + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + /** + * The event handler mappings for the application. + * + * @var array> + */ + protected $listen = []; + /** + * Configure the proper event listeners for email verification. + * + * @return void + */ + protected function configureEmailVerification() + : void + { + + } } -} diff --git a/app/Providers/LpjServiceProvider.php b/app/Providers/LpjServiceProvider.php index c000e93..474ae18 100644 --- a/app/Providers/LpjServiceProvider.php +++ b/app/Providers/LpjServiceProvider.php @@ -1,124 +1,133 @@ registerCommands(); - $this->registerCommandSchedules(); - $this->registerTranslations(); - $this->registerConfig(); - $this->registerViews(); - $this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations')); + protected string $moduleName = 'Lpj'; - if (class_exists('Breadcrumbs')) { - require __DIR__ . '/../../routes/breadcrumbs.php'; - } - } + protected string $moduleNameLower = 'lpj'; - /** - * Register the service provider. - */ - public function register(): void - { - $this->app->register(EventServiceProvider::class); - $this->app->register(RouteServiceProvider::class); - } + /** + * Boot the application events. + */ + public function boot() + : void + { + $this->registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations')); - /** - * Register commands in the format of Command::class - */ - protected function registerCommands(): void - { - // $this->commands([]); - } - - /** - * Register command Schedules. - */ - protected function registerCommandSchedules(): void - { - // $this->app->booted(function () { - // $schedule = $this->app->make(Schedule::class); - // $schedule->command('inspire')->hourly(); - // }); - } - - /** - * Register translations. - */ - public function registerTranslations(): void - { - $langPath = resource_path('lang/modules/'.$this->moduleNameLower); - - if (is_dir($langPath)) { - $this->loadTranslationsFrom($langPath, $this->moduleNameLower); - $this->loadJsonTranslationsFrom($langPath); - } else { - $this->loadTranslationsFrom(module_path($this->moduleName, 'lang'), $this->moduleNameLower); - $this->loadJsonTranslationsFrom(module_path($this->moduleName, 'lang')); - } - } - - /** - * Register config. - */ - protected function registerConfig(): void - { - $this->publishes([module_path($this->moduleName, 'config/config.php') => config_path($this->moduleNameLower.'.php')], 'config'); - $this->mergeConfigFrom(module_path($this->moduleName, 'config/config.php'), $this->moduleNameLower); - } - - /** - * Register views. - */ - public function registerViews(): void - { - $viewPath = resource_path('views/modules/'.$this->moduleNameLower); - $sourcePath = module_path($this->moduleName, 'resources/views'); - - $this->publishes([$sourcePath => $viewPath], ['views', $this->moduleNameLower.'-module-views']); - - $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower); - - $componentNamespace = str_replace('/', '\\', config('modules.namespace').'\\'.$this->moduleName.'\\'.ltrim(config('modules.paths.generator.component-class.path'), config('modules.paths.app_folder', ''))); - Blade::componentNamespace($componentNamespace, $this->moduleNameLower); - } - - /** - * Get the services provided by the provider. - * - * @return array - */ - public function provides(): array - { - return []; - } - - /** - * @return array - */ - private function getPublishableViewPaths(): array - { - $paths = []; - foreach (config('view.paths') as $path) { - if (is_dir($path.'/modules/'.$this->moduleNameLower)) { - $paths[] = $path.'/modules/'.$this->moduleNameLower; + if (class_exists('Breadcrumbs')) { + require __DIR__ . '/../../routes/breadcrumbs.php'; } } - return $paths; + /** + * Register commands in the format of Command::class + */ + protected function registerCommands() + : void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules() + : void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations() + : void + { + $langPath = resource_path('lang/modules/' . $this->moduleNameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->moduleNameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->moduleName, 'lang'), $this->moduleNameLower); + $this->loadJsonTranslationsFrom(module_path($this->moduleName, 'lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig() + : void + { + $this->publishes([module_path($this->moduleName, 'config/config.php') => config_path($this->moduleNameLower . '.php')], 'config'); + $this->mergeConfigFrom(module_path($this->moduleName, 'config/config.php'), $this->moduleNameLower); + } + + /** + * Register views. + */ + public function registerViews() + : void + { + $viewPath = resource_path('views/modules/' . $this->moduleNameLower); + $sourcePath = module_path($this->moduleName, 'resources/views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->moduleNameLower . '-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower); + + $componentNamespace = str_replace('/', '\\', config('modules.namespace') . '\\' . $this->moduleName . '\\' . ltrim(config('modules.paths.generator.component-class.path'), config('modules.paths.app_folder', ''))); + Blade::componentNamespace($componentNamespace, $this->moduleNameLower); + } + + /** + * @return array + */ + private function getPublishableViewPaths() + : array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path . '/modules/' . $this->moduleNameLower)) { + $paths[] = $path . '/modules/' . $this->moduleNameLower; + } + } + + return $paths; + } + + /** + * Register the service provider. + */ + public function register() + : void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + } + + /** + * Get the services provided by the provider. + * + * @return array + */ + public function provides() + : array + { + return []; + } } -} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index f15ea30..62b9944 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -1,49 +1,53 @@ mapApiRoutes(); + /** + * Define the routes for the application. + */ + public function map() + : void + { + $this->mapApiRoutes(); - $this->mapWebRoutes(); - } + $this->mapWebRoutes(); + } - /** - * Define the "web" routes for the application. - * - * These routes all receive session state, CSRF protection, etc. - */ - protected function mapWebRoutes(): void - { - Route::middleware('web')->group(module_path('Lpj', '/routes/web.php')); - } + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes() + : void + { + Route::middleware('api')->prefix('api')->name('api.')->group(module_path('Lpj', '/routes/api.php')); + } - /** - * Define the "api" routes for the application. - * - * These routes are typically stateless. - */ - protected function mapApiRoutes(): void - { - Route::middleware('api')->prefix('api')->name('api.')->group(module_path('Lpj', '/routes/api.php')); + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes() + : void + { + Route::middleware('web')->group(module_path('Lpj', '/routes/web.php')); + } } -} diff --git a/config/config.php b/config/config.php index a4b4610..a08a121 100644 --- a/config/config.php +++ b/config/config.php @@ -1,5 +1,5 @@ 'Lpj', -]; + return [ + 'name' => 'Lpj', + ]; diff --git a/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php b/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php index 82b50ee..f91353e 100644 --- a/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php +++ b/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php @@ -1,33 +1,39 @@ id(); - $table->string('code'); - $table->string('name'); - $table->timestamps(); - $table->softDeletes(); - $table->uuid('created_by')->nullable(); - $table->uuid('updated_by')->nullable(); - $table->uuid('deleted_by')->nullable(); - }); - } + return new class extends Migration { + /** + * Run the migrations. + */ + public function up() + : void + { + Schema::create('jenis_fasilitas_kredit', function (Blueprint $table) { + $table->id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jenis_fasilitas_kredit'); - } -}; + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::dropIfExists('jenis_fasilitas_kredit'); + } + }; diff --git a/database/migrations/2024_08_11_000110_create_jenis_jaminan_table.php b/database/migrations/2024_08_11_000110_create_jenis_jaminan_table.php index 74eadf8..be31b79 100644 --- a/database/migrations/2024_08_11_000110_create_jenis_jaminan_table.php +++ b/database/migrations/2024_08_11_000110_create_jenis_jaminan_table.php @@ -1,33 +1,39 @@ id(); - $table->string('code'); - $table->string('name'); - $table->timestamps(); - $table->softDeletes(); - $table->uuid('created_by')->nullable(); - $table->uuid('updated_by')->nullable(); - $table->uuid('deleted_by')->nullable(); - }); - } + return new class extends Migration { + /** + * Run the migrations. + */ + public function up() + : void + { + Schema::create('jenis_jaminan', function (Blueprint $table) { + $table->id(); + $table->string('code')->unique()->index()(); + $table->string('name'); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jenis_jaminan'); - } -}; + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::dropIfExists('jenis_jaminan'); + } + }; diff --git a/database/migrations/2024_08_11_000118_create_jenis_legalitas_jaminan_table.php b/database/migrations/2024_08_11_000118_create_jenis_legalitas_jaminan_table.php index a0cbe0e..35c7da9 100644 --- a/database/migrations/2024_08_11_000118_create_jenis_legalitas_jaminan_table.php +++ b/database/migrations/2024_08_11_000118_create_jenis_legalitas_jaminan_table.php @@ -1,33 +1,39 @@ id(); - $table->string('code'); - $table->string('name'); - $table->timestamps(); - $table->softDeletes(); - $table->uuid('created_by')->nullable(); - $table->uuid('updated_by')->nullable(); - $table->uuid('deleted_by')->nullable(); - }); - } + return new class extends Migration { + /** + * Run the migrations. + */ + public function up() + : void + { + Schema::create('jenis_legalitas_jaminan', function (Blueprint $table) { + $table->id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jenis_legalitas_jaminan'); - } -}; + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::dropIfExists('jenis_legalitas_jaminan'); + } + }; diff --git a/database/migrations/2024_08_11_074816_create_jenis_aset_table.php b/database/migrations/2024_08_11_074816_create_jenis_aset_table.php index d172958..e3f3a47 100644 --- a/database/migrations/2024_08_11_074816_create_jenis_aset_table.php +++ b/database/migrations/2024_08_11_074816_create_jenis_aset_table.php @@ -1,33 +1,39 @@ id(); - $table->string('code'); - $table->string('name'); - $table->timestamps(); - $table->softDeletes(); - $table->uuid('created_by')->nullable(); - $table->uuid('updated_by')->nullable(); - $table->uuid('deleted_by')->nullable(); - }); - } + return new class extends Migration { + /** + * Run the migrations. + */ + public function up() + : void + { + Schema::create('jenis_aset', function (Blueprint $table) { + $table->id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jenis_aset'); - } -}; + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::dropIfExists('jenis_aset'); + } + }; diff --git a/database/migrations/2024_08_12_023807_create_branches_table.php b/database/migrations/2024_08_12_023807_create_branches_table.php index 058080b..bf4e9a8 100644 --- a/database/migrations/2024_08_12_023807_create_branches_table.php +++ b/database/migrations/2024_08_12_023807_create_branches_table.php @@ -1,38 +1,39 @@ id(); - $table->string('code', 9)->unique(); - $table->string('name'); - $table->boolean('status')->default(true)->nullable(); - $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); - $table->char('authorized_status', 1)->nullable(); - $table->softDeletes(); + return new class extends Migration { + /** + * Run the migrations. + */ + public function up() + : void + { + Schema::create('branches', function (Blueprint $table) { + $table->id(); + $table->string('code', 9)->unique(); + $table->string('name'); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); - $table->unsignedBigInteger('created_by')->nullable(); - $table->unsignedBigInteger('updated_by')->nullable(); - $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); - }); - } + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('branches'); - } -}; + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::dropIfExists('branches'); + } + }; diff --git a/database/migrations/2024_08_12_024448_create_currencies_table.php b/database/migrations/2024_08_12_024448_create_currencies_table.php index 24ad961..ec92b59 100644 --- a/database/migrations/2024_08_12_024448_create_currencies_table.php +++ b/database/migrations/2024_08_12_024448_create_currencies_table.php @@ -1,39 +1,40 @@ id(); - $table->string('code',3)->unique(); - $table->string('name'); - $table->integer('decimal_places')->default(2); - $table->boolean('status')->default(true)->nullable(); - $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); - $table->char('authorized_status', 1)->nullable(); - $table->softDeletes(); + return new class extends Migration { + /** + * Run the migrations. + */ + public function up() + : void + { + Schema::create('currencies', function (Blueprint $table) { + $table->id(); + $table->string('code', 3)->unique(); + $table->string('name'); + $table->integer('decimal_places')->default(2); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); - $table->unsignedBigInteger('created_by')->nullable(); - $table->unsignedBigInteger('updated_by')->nullable(); - $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); - }); - } + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('currencies'); - } -}; + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::dropIfExists('currencies'); + } + }; diff --git a/database/seeders/LpjDatabaseSeeder.php b/database/seeders/LpjDatabaseSeeder.php index eceb570..242ef68 100644 --- a/database/seeders/LpjDatabaseSeeder.php +++ b/database/seeders/LpjDatabaseSeeder.php @@ -1,16 +1,17 @@ call([]); + /** + * Run the database seeds. + */ + public function run() + : void + { + // $this->call([]); + } } -} diff --git a/package.json b/package.json index d6fbfc8..946ad99 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,15 @@ { - "private": true, - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build" - }, - "devDependencies": { - "axios": "^1.1.2", - "laravel-vite-plugin": "^0.7.5", - "sass": "^1.69.5", - "postcss": "^8.3.7", - "vite": "^4.0.0" - } + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } } diff --git a/resources/views/branch/create.blade.php b/resources/views/branch/create.blade.php index ede7b71..b95a38e 100644 --- a/resources/views/branch/create.blade.php +++ b/resources/views/branch/create.blade.php @@ -9,50 +9,50 @@ @if(isset($branch->id))
- @method('PUT') - @else - - @endif - @csrf -
-
-

- {{ isset($branch->id) ? 'Edit' : 'Tambah' }} Branch -

-
- Back -
-
-
-
- -
- - @error('code') - {{ $message }} - @enderror + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($branch->id) ? 'Edit' : 'Tambah' }} Branch +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
-
-
- -
- - @error('name') - {{ $message }} - @enderror -
-
-
- -
-
-
- +
@endsection diff --git a/resources/views/currency/create.blade.php b/resources/views/currency/create.blade.php index 6c02d64..53016ec 100644 --- a/resources/views/currency/create.blade.php +++ b/resources/views/currency/create.blade.php @@ -9,61 +9,61 @@ @if(isset($currency->id))
- @method('PUT') - @else - - @endif - @csrf -
-
-

- {{ isset($currency->id) ? 'Edit' : 'Tambah' }} Currency -

-
- Back -
-
-
-
- -
- - @error('code') - {{ $message }} - @enderror + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($currency->id) ? 'Edit' : 'Tambah' }} Currency +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('decimal_places') + {{ $message }} + @enderror +
+
+
+ +
+
-
-
- -
- - @error('name') - {{ $message }} - @enderror -
-
-
- -
- - @error('decimal_places') - {{ $message }} - @enderror -
-
-
- -
-
-
- +
@endsection diff --git a/resources/views/jenis_aset/create.blade.php b/resources/views/jenis_aset/create.blade.php index e7ed045..70f679a 100644 --- a/resources/views/jenis_aset/create.blade.php +++ b/resources/views/jenis_aset/create.blade.php @@ -9,50 +9,50 @@ @if(isset($jenisAset->id))
- @method('PUT') - @else - - @endif - @csrf -
-
-

- {{ isset($jenisAset->id) ? 'Edit' : 'Tambah' }} Jenis Aset -

-
- Back -
-
-
-
- -
- - @error('code') - {{ $message }} - @enderror + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisAset->id) ? 'Edit' : 'Tambah' }} Jenis Aset +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
-
-
- -
- - @error('name') - {{ $message }} - @enderror -
-
-
- -
-
-
- +
@endsection diff --git a/resources/views/jenis_fasilitas_kredit/create.blade.php b/resources/views/jenis_fasilitas_kredit/create.blade.php index 19a6270..c5fa3fa 100644 --- a/resources/views/jenis_fasilitas_kredit/create.blade.php +++ b/resources/views/jenis_fasilitas_kredit/create.blade.php @@ -9,50 +9,50 @@ @if(isset($jenisFasilitasKredit->id))
- @method('PUT') - @else - - @endif - @csrf -
-
-

- {{ isset($jenisFasilitasKredit->id) ? 'Edit' : 'Tambah' }} Jenis Fasilitas Kredit -

-
- Back -
-
-
-
- -
- - @error('code') - {{ $message }} - @enderror + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisFasilitasKredit->id) ? 'Edit' : 'Tambah' }} Jenis Fasilitas Kredit +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
-
-
- -
- - @error('name') - {{ $message }} - @enderror -
-
-
- -
-
-
- +
@endsection diff --git a/resources/views/jenis_jaminan/create.blade.php b/resources/views/jenis_jaminan/create.blade.php index 610c159..256a16a 100644 --- a/resources/views/jenis_jaminan/create.blade.php +++ b/resources/views/jenis_jaminan/create.blade.php @@ -9,50 +9,50 @@ @if(isset($jenisJaminan->id))
- @method('PUT') - @else - - @endif - @csrf -
-
-

- {{ isset($jenisJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Jaminan -

-
- Back -
-
-
-
- -
- - @error('code') - {{ $message }} - @enderror + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Jaminan +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
-
-
- -
- - @error('name') - {{ $message }} - @enderror -
-
-
- -
-
-
- +
@endsection diff --git a/resources/views/jenis_legalitas_jaminan/create.blade.php b/resources/views/jenis_legalitas_jaminan/create.blade.php index e7ae9d9..8be82a0 100644 --- a/resources/views/jenis_legalitas_jaminan/create.blade.php +++ b/resources/views/jenis_legalitas_jaminan/create.blade.php @@ -9,50 +9,50 @@ @if(isset($jenisLegalitasJaminan->id))
- @method('PUT') - @else - - @endif - @csrf -
-
-

- {{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan -

-
- Back -
-
-
-
- -
- - @error('code') - {{ $message }} - @enderror + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
-
-
- -
- - @error('name') - {{ $message }} - @enderror -
-
-
- -
-
-
- +
@endsection diff --git a/routes/api.php b/routes/api.php index 0fa8999..737f4b3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,15 +1,11 @@ Date: Tue, 13 Aug 2024 14:19:49 +0700 Subject: [PATCH 0014/1161] Fearture #8 : Tujuan Penilaian --- app/Exports/TujuanPenilaianExport.php | 49 ++++++ .../Controllers/TujuanPenilaianController.php | 150 ++++++++++++++++++ app/Http/Requests/TujuanPenilaianRequest.php | 35 ++++ app/Models/TujuanPenilaian.php | 9 ++ ...8_11_000110_create_jenis_jaminan_table.php | 2 +- ...3_071212_create_tujuan_penilaian_table.php | 38 +++++ module.json | 8 + .../views/tujuan_penilaian/create.blade.php | 58 +++++++ .../views/tujuan_penilaian/index.blade.php | 148 +++++++++++++++++ routes/breadcrumbs.php | 15 ++ routes/web.php | 9 ++ 11 files changed, 520 insertions(+), 1 deletion(-) create mode 100644 app/Exports/TujuanPenilaianExport.php create mode 100644 app/Http/Controllers/TujuanPenilaianController.php create mode 100644 app/Http/Requests/TujuanPenilaianRequest.php create mode 100644 app/Models/TujuanPenilaian.php create mode 100644 database/migrations/2024_08_13_071212_create_tujuan_penilaian_table.php create mode 100644 resources/views/tujuan_penilaian/create.blade.php create mode 100644 resources/views/tujuan_penilaian/index.blade.php diff --git a/app/Exports/TujuanPenilaianExport.php b/app/Exports/TujuanPenilaianExport.php new file mode 100644 index 0000000..b7cef2c --- /dev/null +++ b/app/Exports/TujuanPenilaianExport.php @@ -0,0 +1,49 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/TujuanPenilaianController.php b/app/Http/Controllers/TujuanPenilaianController.php new file mode 100644 index 0000000..4225125 --- /dev/null +++ b/app/Http/Controllers/TujuanPenilaianController.php @@ -0,0 +1,150 @@ +validated(); + + if ($validate) { + try { + // Save to database + TujuanPenilaian::create($validate); + return redirect() + ->route('basicdata.tujuan-penilaian.index') + ->with('success', 'Jenis Jaminan created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.tujuan-penilaian.create') + ->with('error', 'Failed to create jenis jaminan'); + } + } + } + + public function create() + { + return view('lpj::tujuan_penilaian.create'); + } + + public function edit($id) + { + $tujuanPenilaian = TujuanPenilaian::find($id); + return view('lpj::tujuan_penilaian.create', compact('tujuanPenilaian')); + } + + public function update(TujuanPenilaianRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $tujuanPenilaian = TujuanPenilaian::find($id); + $tujuanPenilaian->update($validate); + return redirect() + ->route('basicdata.tujuan-penilaian.index') + ->with('success', 'Jenis Jaminan updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.tujuan-penilaian.edit', $id) + ->with('error', 'Failed to update jenis jaminan'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $tujuanPenilaian = TujuanPenilaian::find($id); + $tujuanPenilaian->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Jaminan deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete jenis jaminan']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('tujuan_penilaian.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = TujuanPenilaian::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new TujuanPenilaianExport, 'tujuan_penilaian.xlsx'); + } + } diff --git a/app/Http/Requests/TujuanPenilaianRequest.php b/app/Http/Requests/TujuanPenilaianRequest.php new file mode 100644 index 0000000..5a70d00 --- /dev/null +++ b/app/Http/Requests/TujuanPenilaianRequest.php @@ -0,0 +1,35 @@ + 'required|max:255', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:tujuan_penilaian,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:tujuan_penilaian,code'; + } + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/TujuanPenilaian.php b/app/Models/TujuanPenilaian.php new file mode 100644 index 0000000..7ec7b1c --- /dev/null +++ b/app/Models/TujuanPenilaian.php @@ -0,0 +1,9 @@ +id(); - $table->string('code')->unique()->index()(); + $table->string('code')->unique()->index(); $table->string('name'); $table->boolean('status')->default(true)->nullable(); $table->timestamps(); diff --git a/database/migrations/2024_08_13_071212_create_tujuan_penilaian_table.php b/database/migrations/2024_08_13_071212_create_tujuan_penilaian_table.php new file mode 100644 index 0000000..a1cb7af --- /dev/null +++ b/database/migrations/2024_08_13_071212_create_tujuan_penilaian_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('tujuan_penilaian'); + } +}; diff --git a/module.json b/module.json index 1e2c068..16d83e4 100644 --- a/module.json +++ b/module.json @@ -126,6 +126,14 @@ "attributes": [], "permission": "", "roles": [] + }, + { + "title": "Tujuan Penilaian", + "path": "basicdata.tujuan-penilaian", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] } ] } diff --git a/resources/views/tujuan_penilaian/create.blade.php b/resources/views/tujuan_penilaian/create.blade.php new file mode 100644 index 0000000..57f7b5e --- /dev/null +++ b/resources/views/tujuan_penilaian/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($tujuanPenilaian->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($tujuanPenilaian->id) ? 'Edit' : 'Tambah' }} Tujuan Penilaian +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/tujuan_penilaian/index.blade.php b/resources/views/tujuan_penilaian/index.blade.php new file mode 100644 index 0000000..2548b0f --- /dev/null +++ b/resources/views/tujuan_penilaian/index.blade.php @@ -0,0 +1,148 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.tujuan-penilaian') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Tujuan Penilaian +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Tujuan Penilaian + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index bdfac0a..b9cb703 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -52,6 +52,21 @@ $trail->push('Edit Jenis Jaminan'); }); + Breadcrumbs::for('basicdata.tujuan-penilaian', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Tujuan Penilaian', route('basicdata.tujuan-penilaian.index')); + }); + + Breadcrumbs::for('basicdata.tujuan-penilaian.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.tujuan-penilaian'); + $trail->push('Tambah Tujuan Penilaian', route('basicdata.tujuan-penilaian.create')); + }); + + Breadcrumbs::for('basicdata.tujuan-penilaian.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.tujuan-penilaian'); + $trail->push('Edit Tujuan Penilaian'); + }); + Breadcrumbs::for('basicdata.jenis-aset', function (BreadcrumbTrail $trail) { $trail->parent('basicdata'); $trail->push('Jenis Aset', route('basicdata.jenis-aset.index')); diff --git a/routes/web.php b/routes/web.php index d504278..107f8cc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,6 +8,7 @@ use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\JenisJaminanController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; + use Modules\Lpj\Http\Controllers\TujuanPenilaianController; /* |-------------------------------------------------------------------------- @@ -46,6 +47,14 @@ }); Route::resource('jenis-jaminan', JenisJaminanController::class); + Route::name('tujuan-penilaian.')->prefix('tujuan-penilaian')->group(function () { + Route::get('restore/{id}', [TujuanPenilaianController::class, 'restore'])->name('restore'); + Route::get('datatables', [TujuanPenilaianController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [TujuanPenilaianController::class, 'export'])->name('export'); + }); + Route::resource('tujuan-penilaian', TujuanPenilaianController::class); + Route::name('jenis-aset.')->prefix('jenis-aset')->group(function () { Route::get('restore/{id}', [JenisAsetController::class, 'restore'])->name('restore'); Route::get('datatables', [JenisAsetController::class, 'dataForDatatables']) From acd1aa09f7ca5c64d9bda91bc339ffab7fdfe1a9 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 13 Aug 2024 15:09:26 +0700 Subject: [PATCH 0015/1161] Feature #9 : Nilai Plafond --- app/Exports/NilaiPlafondExport.php | 50 ++++++ .../Controllers/NilaiPlafondController.php | 150 ++++++++++++++++++ app/Http/Requests/NilaiPlafondRequest.php | 35 ++++ app/Models/NilaiPlafond.php | 10 ++ ...8_13_075620_create_nilai_plafond_table.php | 38 +++++ module.json | 8 + .../views/nilai_plafond/create.blade.php | 58 +++++++ resources/views/nilai_plafond/index.blade.php | 148 +++++++++++++++++ routes/breadcrumbs.php | 16 ++ routes/web.php | 11 ++ 10 files changed, 524 insertions(+) create mode 100644 app/Exports/NilaiPlafondExport.php create mode 100644 app/Http/Controllers/NilaiPlafondController.php create mode 100644 app/Http/Requests/NilaiPlafondRequest.php create mode 100644 app/Models/NilaiPlafond.php create mode 100644 database/migrations/2024_08_13_075620_create_nilai_plafond_table.php create mode 100644 resources/views/nilai_plafond/create.blade.php create mode 100644 resources/views/nilai_plafond/index.blade.php diff --git a/app/Exports/NilaiPlafondExport.php b/app/Exports/NilaiPlafondExport.php new file mode 100644 index 0000000..a937c50 --- /dev/null +++ b/app/Exports/NilaiPlafondExport.php @@ -0,0 +1,50 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/NilaiPlafondController.php b/app/Http/Controllers/NilaiPlafondController.php new file mode 100644 index 0000000..6a2f41f --- /dev/null +++ b/app/Http/Controllers/NilaiPlafondController.php @@ -0,0 +1,150 @@ +validated(); + + if ($validate) { + try { + // Save to database + NilaiPlafond::create($validate); + return redirect() + ->route('basicdata.nilai-plafond.index') + ->with('success', 'Jenis Aset created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.nilai-plafond.create') + ->with('error', 'Failed to create nilai plafond'); + } + } + } + + public function create() + { + return view('lpj::nilai_plafond.create'); + } + + public function edit($id) + { + $nilaiPlafond = NilaiPlafond::find($id); + return view('lpj::nilai_plafond.create', compact('nilaiPlafond')); + } + + public function update(NilaiPlafondRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $nilaiPlafond = NilaiPlafond::find($id); + $nilaiPlafond->update($validate); + return redirect() + ->route('basicdata.nilai-plafond.index') + ->with('success', 'Jenis Aset updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.nilai-plafond.edit', $id) + ->with('error', 'Failed to update nilai plafond'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $nilaiPlafond = NilaiPlafond::find($id); + $nilaiPlafond->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Aset deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete nilai plafond']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('nilai_plafond.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = NilaiPlafond::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new NilaiPlafondExport, 'nilai_plafond.xlsx'); + } + } diff --git a/app/Http/Requests/NilaiPlafondRequest.php b/app/Http/Requests/NilaiPlafondRequest.php new file mode 100644 index 0000000..3890ed7 --- /dev/null +++ b/app/Http/Requests/NilaiPlafondRequest.php @@ -0,0 +1,35 @@ + 'required|max:255', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:nilai_plafond,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:nilai_plafond,code'; + } + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/NilaiPlafond.php b/app/Models/NilaiPlafond.php new file mode 100644 index 0000000..3b0bcaf --- /dev/null +++ b/app/Models/NilaiPlafond.php @@ -0,0 +1,10 @@ +id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('nilai_plafond'); + } +}; diff --git a/module.json b/module.json index 16d83e4..12bf09c 100644 --- a/module.json +++ b/module.json @@ -134,6 +134,14 @@ "attributes": [], "permission": "", "roles": [] + }, + { + "title": "Nilai Plafond", + "path": "basicdata.nilai-plafond", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] } ] } diff --git a/resources/views/nilai_plafond/create.blade.php b/resources/views/nilai_plafond/create.blade.php new file mode 100644 index 0000000..3a8aaf5 --- /dev/null +++ b/resources/views/nilai_plafond/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($nilaiPlafond->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($nilaiPlafond->id) ? 'Edit' : 'Tambah' }} Nilai Plafond +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/nilai_plafond/index.blade.php b/resources/views/nilai_plafond/index.blade.php new file mode 100644 index 0000000..32607e2 --- /dev/null +++ b/resources/views/nilai_plafond/index.blade.php @@ -0,0 +1,148 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.nilai-plafond') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Nilai Plafond +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Nilai Plafond + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index b9cb703..9fff01a 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -113,6 +113,22 @@ $trail->push('Edit Cabang'); }); + Breadcrumbs::for('basicdata.nilai-plafond', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Nilai Plafond', route('basicdata.nilai-plafond.index')); + }); + + Breadcrumbs::for('basicdata.nilai-plafond.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.nilai-plafond'); + $trail->push('Tambah Nilai Plafond', route('basicdata.nilai-plafond.create')); + }); + + Breadcrumbs::for('basicdata.nilai-plafond.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.nilai-plafond'); + $trail->push('Edit Nilai Plafond'); + }); + + Breadcrumbs::for('debitur', function (BreadcrumbTrail $trail) { $trail->push('Debitur', route('debitur.index')); }); diff --git a/routes/web.php b/routes/web.php index 107f8cc..8b46e67 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,6 +8,7 @@ use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\JenisJaminanController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; + use Modules\Lpj\Http\Controllers\NilaiPlafondController; use Modules\Lpj\Http\Controllers\TujuanPenilaianController; /* @@ -100,8 +101,18 @@ 'destroy' => 'branch.destroy', ] ]); + + Route::name('nilai-plafond.')->prefix('nilai-plafond')->group(function () { + Route::get('restore/{id}', [NilaiPlafondController::class, 'restore'])->name('restore'); + Route::get('datatables', [NilaiPlafondController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [NilaiPlafondController::class, 'export'])->name('export'); + }); + Route::resource('nilai-plafond', NilaiPlafondController::class); }); + + Route::name('debitur.')->prefix('debitur')->group(function () { Route::get('restore/{id}', [DebitureController::class, 'restore'])->name('restore'); Route::get('datatables', [DebitureController::class, 'dataForDatatables']) From 6ea250470dbebb6ed24064bf913a3f27a93fbdde Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 14 Aug 2024 16:49:56 +0700 Subject: [PATCH 0016/1161] Feature #10 : Hubungan Pemilik Jaminan --- app/Exports/HubunganPemilikJaminanExport.php | 47 ++++++ .../HubunganPemilikJaminanController.php | 149 ++++++++++++++++++ .../HubunganPemilikJaminanRequest.php | 30 ++++ app/Models/HubunganPemilikJaminan.php | 9 ++ ..._create_hubungan_pemilik_jaminan_table.php | 36 +++++ module.json | 9 ++ .../hubungan_pemilik_jaminan/create.blade.php | 47 ++++++ .../hubungan_pemilik_jaminan/index.blade.php | 140 ++++++++++++++++ routes/breadcrumbs.php | 14 ++ routes/web.php | 8 + 10 files changed, 489 insertions(+) create mode 100644 app/Exports/HubunganPemilikJaminanExport.php create mode 100644 app/Http/Controllers/HubunganPemilikJaminanController.php create mode 100644 app/Http/Requests/HubunganPemilikJaminanRequest.php create mode 100644 app/Models/HubunganPemilikJaminan.php create mode 100644 database/migrations/2024_08_14_081711_create_hubungan_pemilik_jaminan_table.php create mode 100644 resources/views/hubungan_pemilik_jaminan/create.blade.php create mode 100644 resources/views/hubungan_pemilik_jaminan/index.blade.php diff --git a/app/Exports/HubunganPemilikJaminanExport.php b/app/Exports/HubunganPemilikJaminanExport.php new file mode 100644 index 0000000..3f637f8 --- /dev/null +++ b/app/Exports/HubunganPemilikJaminanExport.php @@ -0,0 +1,47 @@ +id, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Hubungan Pemilik Jaminan', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'C' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/HubunganPemilikJaminanController.php b/app/Http/Controllers/HubunganPemilikJaminanController.php new file mode 100644 index 0000000..9c4bbe5 --- /dev/null +++ b/app/Http/Controllers/HubunganPemilikJaminanController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + HubunganPemilikJaminan::create($validate); + return redirect() + ->route('basicdata.hubungan-pemilik-jaminan.index') + ->with('success', 'Hubungan Pemilik Jaminan created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.hubungan-pemilik-jaminan.create') + ->with('error', 'Failed to create hubungan pemilik jaminan'); + } + } + } + + public function create() + { + return view('lpj::hubungan_pemilik_jaminan.create'); + } + + public function edit($id) + { + $hubunganPemilikJaminan = HubunganPemilikJaminan::find($id); + return view('lpj::hubungan_pemilik_jaminan.create', compact('hubunganPemilikJaminan')); + } + + public function update(HubunganPemilikJaminanRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $hubunganPemilikJaminan = HubunganPemilikJaminan::find($id); + $hubunganPemilikJaminan->update($validate); + return redirect() + ->route('basicdata.hubungan-pemilik-jaminan.index') + ->with('success', 'Hubungan Pemilik Jaminan updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.hubungan-pemilik-jaminan.edit', $id) + ->with('error', 'Failed to update hubungan pemilik jaminan'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $hubunganPemilikJaminan = HubunganPemilikJaminan::find($id); + $hubunganPemilikJaminan->delete(); + + echo json_encode(['success' => true, 'message' => 'Hubungan Pemilik Jaminan deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete hubungan pemilik jaminan']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('hubungan_pemilik_jaminan.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = HubunganPemilikJaminan::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->Where('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new HubunganPemilikJaminanExport, 'hubungan_pemilik_jaminan.xlsx'); + } + } diff --git a/app/Http/Requests/HubunganPemilikJaminanRequest.php b/app/Http/Requests/HubunganPemilikJaminanRequest.php new file mode 100644 index 0000000..76ace18 --- /dev/null +++ b/app/Http/Requests/HubunganPemilikJaminanRequest.php @@ -0,0 +1,30 @@ + 'required|max:255', + ]; + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/HubunganPemilikJaminan.php b/app/Models/HubunganPemilikJaminan.php new file mode 100644 index 0000000..241f0a2 --- /dev/null +++ b/app/Models/HubunganPemilikJaminan.php @@ -0,0 +1,9 @@ +id(); + $table->string('name'); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('hubungan_pemilik_jaminan'); + } +}; diff --git a/module.json b/module.json index 12bf09c..0272ed6 100644 --- a/module.json +++ b/module.json @@ -142,6 +142,15 @@ "attributes": [], "permission": "", "roles": [] + }, + { + "title": "Hubungan Pemilik Jaminan", + "path": "basicdata.hubungan-pemilik-jaminan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, } ] } diff --git a/resources/views/hubungan_pemilik_jaminan/create.blade.php b/resources/views/hubungan_pemilik_jaminan/create.blade.php new file mode 100644 index 0000000..7371af2 --- /dev/null +++ b/resources/views/hubungan_pemilik_jaminan/create.blade.php @@ -0,0 +1,47 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($hubunganPemilikJaminan->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($hubunganPemilikJaminan->id) ? 'Edit' : 'Tambah' }} Hubungan Pemilik Jaminan +

+
+ Back +
+
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/hubungan_pemilik_jaminan/index.blade.php b/resources/views/hubungan_pemilik_jaminan/index.blade.php new file mode 100644 index 0000000..81ba643 --- /dev/null +++ b/resources/views/hubungan_pemilik_jaminan/index.blade.php @@ -0,0 +1,140 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.hubungan-pemilik-jaminan') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Hubungan Pemilik Jaminan +

+ +
+
+
+ + + + + + + + +
+ + + Hubungan Pemilik Jaminan + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 9fff01a..c657872 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -128,6 +128,20 @@ $trail->push('Edit Nilai Plafond'); }); + Breadcrumbs::for('basicdata.hubungan-pemilik-jaminan', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Hubungan Pemilik Jaminan', route('basicdata.hubungan-pemilik-jaminan.index')); + }); + + Breadcrumbs::for('basicdata.hubungan-pemilik-jaminan.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.hubungan-pemilik-jaminan'); + $trail->push('Tambah Hubungan Pemilik Jaminan', route('basicdata.hubungan-pemilik-jaminan.create')); + }); + + Breadcrumbs::for('basicdata.hubungan-pemilik-jaminan.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.hubungan-pemilik-jaminan'); + $trail->push('Edit Hubungan Pemilik Jaminan'); + }); Breadcrumbs::for('debitur', function (BreadcrumbTrail $trail) { $trail->push('Debitur', route('debitur.index')); diff --git a/routes/web.php b/routes/web.php index 8b46e67..8201053 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,6 +4,7 @@ use Modules\Lpj\Http\Controllers\BranchController; use Modules\Lpj\Http\Controllers\CurrencyController; use Modules\Lpj\Http\Controllers\DebitureController; + use Modules\Lpj\Http\Controllers\HubunganPemilikJaminanController; use Modules\Lpj\Http\Controllers\JenisAsetController; use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\JenisJaminanController; @@ -111,6 +112,13 @@ Route::resource('nilai-plafond', NilaiPlafondController::class); }); + Route::name('hubungan-pemilik-jaminan.')->prefix('hubungan-pemilik-jaminan')->group(function () { + Route::get('restore/{id}', [HubunganPemilikJaminanController::class, 'restore'])->name('restore'); + Route::get('datatables', [HubunganPemilikJaminanController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [HubunganPemilikJaminanController::class, 'export'])->name('export'); + }); + Route::resource('hubungan-pemilik-jaminan', HubunganPemilikJaminanController::class); Route::name('debitur.')->prefix('debitur')->group(function () { From feff1d0316ec9bd2fa58c82f85947ad2e9b2d41e Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 14 Aug 2024 16:50:25 +0700 Subject: [PATCH 0017/1161] Feature #11 : Hubungan Penghuni Jaminan --- app/Exports/HubunganPenghuniJaminanExport.php | 47 ++++++ .../HubunganPenghuniJaminanController.php | 149 ++++++++++++++++++ .../HubunganPenghuniJaminanRequest.php | 30 ++++ app/Models/HubunganPenghuniJaminan.php | 9 ++ ...create_hubungan_penghuni_jaminan_table.php | 36 +++++ module.json | 7 + .../create.blade.php | 47 ++++++ .../hubungan_penghuni_jaminan/index.blade.php | 140 ++++++++++++++++ routes/breadcrumbs.php | 16 ++ routes/web.php | 10 +- 10 files changed, 490 insertions(+), 1 deletion(-) create mode 100644 app/Exports/HubunganPenghuniJaminanExport.php create mode 100644 app/Http/Controllers/HubunganPenghuniJaminanController.php create mode 100644 app/Http/Requests/HubunganPenghuniJaminanRequest.php create mode 100644 app/Models/HubunganPenghuniJaminan.php create mode 100644 database/migrations/2024_08_14_081718_create_hubungan_penghuni_jaminan_table.php create mode 100644 resources/views/hubungan_penghuni_jaminan/create.blade.php create mode 100644 resources/views/hubungan_penghuni_jaminan/index.blade.php diff --git a/app/Exports/HubunganPenghuniJaminanExport.php b/app/Exports/HubunganPenghuniJaminanExport.php new file mode 100644 index 0000000..318b616 --- /dev/null +++ b/app/Exports/HubunganPenghuniJaminanExport.php @@ -0,0 +1,47 @@ +id, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Hubungan Penghuni Jaminan', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'C' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/HubunganPenghuniJaminanController.php b/app/Http/Controllers/HubunganPenghuniJaminanController.php new file mode 100644 index 0000000..c30df77 --- /dev/null +++ b/app/Http/Controllers/HubunganPenghuniJaminanController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + HubunganPenghuniJaminan::create($validate); + return redirect() + ->route('basicdata.hubungan-penghuni-jaminan.index') + ->with('success', 'Hubungan Penghuni Jaminan created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.hubungan-penghuni-jaminan.create') + ->with('error', 'Failed to create hubungan penghuni jaminan'); + } + } + } + + public function create() + { + return view('lpj::hubungan_penghuni_jaminan.create'); + } + + public function edit($id) + { + $hubunganPenghuniJaminan = HubunganPenghuniJaminan::find($id); + return view('lpj::hubungan_penghuni_jaminan.create', compact('hubunganPenghuniJaminan')); + } + + public function update(HubunganPenghuniJaminanRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $hubunganPenghuniJaminan = HubunganPenghuniJaminan::find($id); + $hubunganPenghuniJaminan->update($validate); + return redirect() + ->route('basicdata.hubungan-penghuni-jaminan.index') + ->with('success', 'Hubungan Penghuni Jaminan updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.hubungan-penghuni-jaminan.edit', $id) + ->with('error', 'Failed to update hubungan penghuni jaminan'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $hubunganPenghuniJaminan = HubunganPenghuniJaminan::find($id); + $hubunganPenghuniJaminan->delete(); + + echo json_encode(['success' => true, 'message' => 'Hubungan Penghuni Jaminan deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete hubungan penghuni jaminan']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('hubungan_penghuni_jaminan.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = HubunganPenghuniJaminan::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new HubunganPenghuniJaminanExport, 'hubungan_penghuni_jaminan.xlsx'); + } + } diff --git a/app/Http/Requests/HubunganPenghuniJaminanRequest.php b/app/Http/Requests/HubunganPenghuniJaminanRequest.php new file mode 100644 index 0000000..a3ab4cf --- /dev/null +++ b/app/Http/Requests/HubunganPenghuniJaminanRequest.php @@ -0,0 +1,30 @@ + 'required|max:255', + ]; + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/HubunganPenghuniJaminan.php b/app/Models/HubunganPenghuniJaminan.php new file mode 100644 index 0000000..f8a7fe6 --- /dev/null +++ b/app/Models/HubunganPenghuniJaminan.php @@ -0,0 +1,9 @@ +id(); + $table->string('name'); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('hubungan_penghuni_jaminan'); + } +}; diff --git a/module.json b/module.json index 0272ed6..1d744fa 100644 --- a/module.json +++ b/module.json @@ -151,6 +151,13 @@ "permission": "", "roles": [] }, + { + "title": "Hubungan Penghuni Jaminan", + "path": "basicdata.hubungan-penghuni-jaminan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] } ] } diff --git a/resources/views/hubungan_penghuni_jaminan/create.blade.php b/resources/views/hubungan_penghuni_jaminan/create.blade.php new file mode 100644 index 0000000..aa8b959 --- /dev/null +++ b/resources/views/hubungan_penghuni_jaminan/create.blade.php @@ -0,0 +1,47 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($hubunganPenghuniJaminan->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($hubunganPenghuniJaminan->id) ? 'Edit' : 'Tambah' }} Hubungan Penghuni Jaminan +

+
+ Back +
+
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/hubungan_penghuni_jaminan/index.blade.php b/resources/views/hubungan_penghuni_jaminan/index.blade.php new file mode 100644 index 0000000..49c3e29 --- /dev/null +++ b/resources/views/hubungan_penghuni_jaminan/index.blade.php @@ -0,0 +1,140 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.hubungan-penghuni-jaminan') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Hubungan Penghuni Jaminan +

+ +
+
+
+ + + + + + + + +
+ + + Hubungan Penghuni Jaminan + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index c657872..fe59b5f 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -143,6 +143,22 @@ $trail->push('Edit Hubungan Pemilik Jaminan'); }); + Breadcrumbs::for('basicdata.hubungan-penghuni-jaminan', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Hubungan Penghuni Jaminan', route('basicdata.hubungan-penghuni-jaminan.index')); + }); + + Breadcrumbs::for('basicdata.hubungan-penghuni-jaminan.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.hubungan-penghuni-jaminan'); + $trail->push('Tambah Hubungan Penghuni Jaminan', route('basicdata.hubungan-penghuni-jaminan.create')); + }); + + Breadcrumbs::for('basicdata.hubungan-penghuni-jaminan.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.hubungan-penghuni-jaminan'); + $trail->push('Edit Hubungan Penghuni Jaminan'); + }); + + Breadcrumbs::for('debitur', function (BreadcrumbTrail $trail) { $trail->push('Debitur', route('debitur.index')); }); diff --git a/routes/web.php b/routes/web.php index 8201053..c07e89f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,6 +5,7 @@ use Modules\Lpj\Http\Controllers\CurrencyController; use Modules\Lpj\Http\Controllers\DebitureController; use Modules\Lpj\Http\Controllers\HubunganPemilikJaminanController; + use Modules\Lpj\Http\Controllers\HubunganPenghuniJaminanController; use Modules\Lpj\Http\Controllers\JenisAsetController; use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\JenisJaminanController; @@ -110,7 +111,6 @@ Route::get('export', [NilaiPlafondController::class, 'export'])->name('export'); }); Route::resource('nilai-plafond', NilaiPlafondController::class); - }); Route::name('hubungan-pemilik-jaminan.')->prefix('hubungan-pemilik-jaminan')->group(function () { Route::get('restore/{id}', [HubunganPemilikJaminanController::class, 'restore'])->name('restore'); @@ -120,6 +120,14 @@ }); Route::resource('hubungan-pemilik-jaminan', HubunganPemilikJaminanController::class); + Route::name('hubungan-penghuni-jaminan.')->prefix('hubungan-penghuni-jaminan')->group(function () { + Route::get('restore/{id}', [HubunganPenghuniJaminanController::class, 'restore'])->name('restore'); + Route::get('datatables', [HubunganPenghuniJaminanController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [HubunganPenghuniJaminanController::class, 'export'])->name('export'); + }); + Route::resource('hubungan-penghuni-jaminan', HubunganPenghuniJaminanController::class); + }); Route::name('debitur.')->prefix('debitur')->group(function () { Route::get('restore/{id}', [DebitureController::class, 'restore'])->name('restore'); From 1b37ae1f99447457a1a54b64ebbe4ce371b516bb Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 14 Aug 2024 16:51:14 +0700 Subject: [PATCH 0018/1161] Change Style Button Back/Kembali --- resources/views/branch/create.blade.php | 2 +- resources/views/currency/create.blade.php | 2 +- resources/views/debitur/create.blade.php | 2 +- resources/views/jenis_aset/create.blade.php | 2 +- resources/views/jenis_fasilitas_kredit/create.blade.php | 2 +- resources/views/jenis_jaminan/create.blade.php | 2 +- resources/views/jenis_legalitas_jaminan/create.blade.php | 2 +- resources/views/nilai_plafond/create.blade.php | 2 +- resources/views/tujuan_penilaian/create.blade.php | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/resources/views/branch/create.blade.php b/resources/views/branch/create.blade.php index b95a38e..45dcaf7 100644 --- a/resources/views/branch/create.blade.php +++ b/resources/views/branch/create.blade.php @@ -20,7 +20,7 @@ {{ isset($branch->id) ? 'Edit' : 'Tambah' }} Branch
- Back + Back
diff --git a/resources/views/currency/create.blade.php b/resources/views/currency/create.blade.php index 53016ec..f0a77a7 100644 --- a/resources/views/currency/create.blade.php +++ b/resources/views/currency/create.blade.php @@ -20,7 +20,7 @@ {{ isset($currency->id) ? 'Edit' : 'Tambah' }} Currency
- Back + Back
diff --git a/resources/views/debitur/create.blade.php b/resources/views/debitur/create.blade.php index 915ad9e..8867136 100644 --- a/resources/views/debitur/create.blade.php +++ b/resources/views/debitur/create.blade.php @@ -20,7 +20,7 @@ {{ isset($debitur->id) ? 'Edit' : 'Tambah' }} Debitur
- Back + Back
diff --git a/resources/views/jenis_aset/create.blade.php b/resources/views/jenis_aset/create.blade.php index 70f679a..29ce6f4 100644 --- a/resources/views/jenis_aset/create.blade.php +++ b/resources/views/jenis_aset/create.blade.php @@ -20,7 +20,7 @@ {{ isset($jenisAset->id) ? 'Edit' : 'Tambah' }} Jenis Aset
- Back + Back
diff --git a/resources/views/jenis_fasilitas_kredit/create.blade.php b/resources/views/jenis_fasilitas_kredit/create.blade.php index c5fa3fa..6358c8b 100644 --- a/resources/views/jenis_fasilitas_kredit/create.blade.php +++ b/resources/views/jenis_fasilitas_kredit/create.blade.php @@ -20,7 +20,7 @@ {{ isset($jenisFasilitasKredit->id) ? 'Edit' : 'Tambah' }} Jenis Fasilitas Kredit
- Back + Back
diff --git a/resources/views/jenis_jaminan/create.blade.php b/resources/views/jenis_jaminan/create.blade.php index 256a16a..e627502 100644 --- a/resources/views/jenis_jaminan/create.blade.php +++ b/resources/views/jenis_jaminan/create.blade.php @@ -20,7 +20,7 @@ {{ isset($jenisJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Jaminan
- Back + Back
diff --git a/resources/views/jenis_legalitas_jaminan/create.blade.php b/resources/views/jenis_legalitas_jaminan/create.blade.php index 8be82a0..5c89c8f 100644 --- a/resources/views/jenis_legalitas_jaminan/create.blade.php +++ b/resources/views/jenis_legalitas_jaminan/create.blade.php @@ -20,7 +20,7 @@ {{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan
- Back + Back
diff --git a/resources/views/nilai_plafond/create.blade.php b/resources/views/nilai_plafond/create.blade.php index 3a8aaf5..86507f5 100644 --- a/resources/views/nilai_plafond/create.blade.php +++ b/resources/views/nilai_plafond/create.blade.php @@ -20,7 +20,7 @@ {{ isset($nilaiPlafond->id) ? 'Edit' : 'Tambah' }} Nilai Plafond
- Back + Back
diff --git a/resources/views/tujuan_penilaian/create.blade.php b/resources/views/tujuan_penilaian/create.blade.php index 57f7b5e..af070ee 100644 --- a/resources/views/tujuan_penilaian/create.blade.php +++ b/resources/views/tujuan_penilaian/create.blade.php @@ -20,7 +20,7 @@ {{ isset($tujuanPenilaian->id) ? 'Edit' : 'Tambah' }} Tujuan Penilaian
- Back + Back
From 9b30aa033ea8834b7914e4faa21d1febc339b2b9 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 14 Aug 2024 17:19:00 +0700 Subject: [PATCH 0019/1161] Feature #12 : Jenis Dokumen --- app/Exports/JenisDokumenExport.php | 51 ++++++ .../Controllers/JenisDokumenController.php | 151 +++++++++++++++++ app/Http/Requests/JenisDokumenRequest.php | 32 ++++ app/Models/JenisDokumen.php | 10 ++ ...8_13_081120_create_jenis_dokumen_table.php | 39 +++++ module.json | 8 + .../views/jenis_dokumen/create.blade.php | 69 ++++++++ resources/views/jenis_dokumen/index.blade.php | 158 ++++++++++++++++++ routes/breadcrumbs.php | 15 ++ routes/web.php | 9 + 10 files changed, 542 insertions(+) create mode 100644 app/Exports/JenisDokumenExport.php create mode 100644 app/Http/Controllers/JenisDokumenController.php create mode 100644 app/Http/Requests/JenisDokumenRequest.php create mode 100644 app/Models/JenisDokumen.php create mode 100644 database/migrations/2024_08_13_081120_create_jenis_dokumen_table.php create mode 100644 resources/views/jenis_dokumen/create.blade.php create mode 100644 resources/views/jenis_dokumen/index.blade.php diff --git a/app/Exports/JenisDokumenExport.php b/app/Exports/JenisDokumenExport.php new file mode 100644 index 0000000..a4dc479 --- /dev/null +++ b/app/Exports/JenisDokumenExport.php @@ -0,0 +1,51 @@ +id, + $row->name, + $row->max_size, + $row->description, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Name', + 'Max Size', + 'Description', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'E' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/JenisDokumenController.php b/app/Http/Controllers/JenisDokumenController.php new file mode 100644 index 0000000..dd60228 --- /dev/null +++ b/app/Http/Controllers/JenisDokumenController.php @@ -0,0 +1,151 @@ +validated(); + + if ($validate) { + try { + // Save to database + JenisDokumen::create($validate); + return redirect() + ->route('basicdata.jenis-dokumen.index') + ->with('success', 'Jenis Dokumen created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.jenis-dokumen.create') + ->with('error', 'Failed to create jenis dokumen'); + } + } + } + + public function create() + { + return view('lpj::jenis_dokumen.create'); + } + + public function edit($id) + { + $jenisDokumen = JenisDokumen::find($id); + return view('lpj::jenis_dokumen.create', compact('jenisDokumen')); + } + + public function update(JenisDokumenRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $jenisDokumen = JenisDokumen::find($id); + $jenisDokumen->update($validate); + return redirect() + ->route('basicdata.jenis-dokumen.index') + ->with('success', 'Jenis Dokumen updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.jenis-dokumen.edit', $id) + ->with('error', 'Failed to update jenis dokumen'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $jenisDokumen = JenisDokumen::find($id); + $jenisDokumen->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Dokumen deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete jenis dokumen']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('jenis_dokumen.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisDokumen::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('max_size', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + $q->orWhere('description', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new JenisDokumenExport, 'jenis_dokumen.xlsx'); + } + } diff --git a/app/Http/Requests/JenisDokumenRequest.php b/app/Http/Requests/JenisDokumenRequest.php new file mode 100644 index 0000000..eed7aa5 --- /dev/null +++ b/app/Http/Requests/JenisDokumenRequest.php @@ -0,0 +1,32 @@ + 'required|max:255', + 'max_size' => 'nullable|numeric', + 'description' => 'nullable|max:255' + ]; + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/JenisDokumen.php b/app/Models/JenisDokumen.php new file mode 100644 index 0000000..6a16c7d --- /dev/null +++ b/app/Models/JenisDokumen.php @@ -0,0 +1,10 @@ +id(); + $table->string('name'); + $table->string('max_size')->nullable(); + $table->string('description')->nullable(); + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jenis_dokumen'); + } +}; diff --git a/module.json b/module.json index 1d744fa..50c4cd3 100644 --- a/module.json +++ b/module.json @@ -127,6 +127,14 @@ "permission": "", "roles": [] }, + { + "title": "Jenis Dokumen", + "path": "basicdata.jenis-dokumen", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, { "title": "Tujuan Penilaian", "path": "basicdata.tujuan-penilaian", diff --git a/resources/views/jenis_dokumen/create.blade.php b/resources/views/jenis_dokumen/create.blade.php new file mode 100644 index 0000000..1fd52f2 --- /dev/null +++ b/resources/views/jenis_dokumen/create.blade.php @@ -0,0 +1,69 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($jenisDokumen->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisDokumen->id) ? 'Edit' : 'Tambah' }} Jenis Dokumen +

+
+ Back +
+
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('max_size') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('description') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/jenis_dokumen/index.blade.php b/resources/views/jenis_dokumen/index.blade.php new file mode 100644 index 0000000..4388c2f --- /dev/null +++ b/resources/views/jenis_dokumen/index.blade.php @@ -0,0 +1,158 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.jenis-dokumen') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Jenis Dokumen +

+ +
+
+
+ + + + + + + + + + +
+ + + Jenis Dokumen + + + Max Size + + + Description + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index fe59b5f..5ac8a28 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -82,6 +82,21 @@ $trail->push('Edit Jenis Aset'); }); + Breadcrumbs::for('basicdata.jenis-dokumen', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Dokumen', route('basicdata.jenis-dokumen.index')); + }); + + Breadcrumbs::for('basicdata.jenis-dokumen.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-dokumen'); + $trail->push('Tambah Jenis Dokumen', route('basicdata.jenis-dokumen.create')); + }); + + Breadcrumbs::for('basicdata.jenis-dokumen.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-dokumen'); + $trail->push('Edit Jenis Dokumen'); + }); + Breadcrumbs::for('basicdata.currency', function (BreadcrumbTrail $trail) { $trail->parent('basicdata'); diff --git a/routes/web.php b/routes/web.php index c07e89f..8095371 100644 --- a/routes/web.php +++ b/routes/web.php @@ -7,6 +7,7 @@ use Modules\Lpj\Http\Controllers\HubunganPemilikJaminanController; use Modules\Lpj\Http\Controllers\HubunganPenghuniJaminanController; use Modules\Lpj\Http\Controllers\JenisAsetController; + use Modules\Lpj\Http\Controllers\JenisDokumenController; use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\JenisJaminanController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; @@ -66,6 +67,14 @@ }); Route::resource('jenis-aset', JenisAsetController::class); + Route::name('jenis-dokumen.')->prefix('jenis-dokumen')->group(function () { + Route::get('restore/{id}', [JenisDokumenController::class, 'restore'])->name('restore'); + Route::get('datatables', [JenisDokumenController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [JenisDokumenController::class, 'export'])->name('export'); + }); + Route::resource('jenis-dokumen', JenisDokumenController::class); + Route::name('currency.')->prefix('mata-uang')->group(function () { Route::get('restore/{id}', [CurrencyController::class, 'restore'])->name('restore'); Route::get('datatables', [CurrencyController::class, 'dataForDatatables']) From 5c380f5eb64700a879010ef9965a93dcf063745c Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 14 Aug 2024 17:40:48 +0700 Subject: [PATCH 0020/1161] Feature #13 : Arah Mata Angin --- app/Exports/ArahMataAnginExport.php | 47 ++++++ .../Controllers/ArahMataAnginController.php | 149 ++++++++++++++++++ app/Http/Requests/ArahMataAnginRequest.php | 30 ++++ app/Models/ArahMataAngin.php | 9 ++ ...14_102150_create_arah_mata_angin_table.php | 36 +++++ module.json | 8 + .../views/arah_mata_angin/create.blade.php | 47 ++++++ .../views/arah_mata_angin/index.blade.php | 140 ++++++++++++++++ routes/breadcrumbs.php | 14 ++ routes/web.php | 9 ++ 10 files changed, 489 insertions(+) create mode 100644 app/Exports/ArahMataAnginExport.php create mode 100644 app/Http/Controllers/ArahMataAnginController.php create mode 100644 app/Http/Requests/ArahMataAnginRequest.php create mode 100644 app/Models/ArahMataAngin.php create mode 100644 database/migrations/2024_08_14_102150_create_arah_mata_angin_table.php create mode 100644 resources/views/arah_mata_angin/create.blade.php create mode 100644 resources/views/arah_mata_angin/index.blade.php diff --git a/app/Exports/ArahMataAnginExport.php b/app/Exports/ArahMataAnginExport.php new file mode 100644 index 0000000..0571661 --- /dev/null +++ b/app/Exports/ArahMataAnginExport.php @@ -0,0 +1,47 @@ +id, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Arah Mata Angin', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'C' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/ArahMataAnginController.php b/app/Http/Controllers/ArahMataAnginController.php new file mode 100644 index 0000000..16050a6 --- /dev/null +++ b/app/Http/Controllers/ArahMataAnginController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + ArahMataAngin::create($validate); + return redirect() + ->route('basicdata.arah-mata-angin.index') + ->with('success', 'Arah Mata Angin created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.arah-mata-angin.create') + ->with('error', 'Failed to create arah mata angin'); + } + } + } + + public function create() + { + return view('lpj::arah_mata_angin.create'); + } + + public function edit($id) + { + $arahMataAngin = ArahMataAngin::find($id); + return view('lpj::arah_mata_angin.create', compact('arahMataAngin')); + } + + public function update(ArahMataAnginRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $arahMataAngin = ArahMataAngin::find($id); + $arahMataAngin->update($validate); + return redirect() + ->route('basicdata.arah-mata-angin.index') + ->with('success', 'Arah Mata Angin updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.arah-mata-angin.edit', $id) + ->with('error', 'Failed to update arah mata angin'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $arahMataAngin = ArahMataAngin::find($id); + $arahMataAngin->delete(); + + echo json_encode(['success' => true, 'message' => 'Arah Mata Angin deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete arah mata angin']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('arah_mata_angin.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = ArahMataAngin::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->Where('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new ArahMataAnginExport, 'arah_mata_angin.xlsx'); + } + } diff --git a/app/Http/Requests/ArahMataAnginRequest.php b/app/Http/Requests/ArahMataAnginRequest.php new file mode 100644 index 0000000..f797cb4 --- /dev/null +++ b/app/Http/Requests/ArahMataAnginRequest.php @@ -0,0 +1,30 @@ + 'required|max:255', + ]; + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/ArahMataAngin.php b/app/Models/ArahMataAngin.php new file mode 100644 index 0000000..ade345b --- /dev/null +++ b/app/Models/ArahMataAngin.php @@ -0,0 +1,9 @@ +id(); + $table->string('name'); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('arah_mata_angin'); + } +}; diff --git a/module.json b/module.json index 50c4cd3..edcf3c5 100644 --- a/module.json +++ b/module.json @@ -166,6 +166,14 @@ "attributes": [], "permission": "", "roles": [] + }, + { + "title": "Arah Mata Angin", + "path": "basicdata.arah-mata-angin", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] } ] } diff --git a/resources/views/arah_mata_angin/create.blade.php b/resources/views/arah_mata_angin/create.blade.php new file mode 100644 index 0000000..604546d --- /dev/null +++ b/resources/views/arah_mata_angin/create.blade.php @@ -0,0 +1,47 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($arahMataAngin->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($arahMataAngin->id) ? 'Edit' : 'Tambah' }} Arah Mata Angin +

+
+ Back +
+
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/arah_mata_angin/index.blade.php b/resources/views/arah_mata_angin/index.blade.php new file mode 100644 index 0000000..0ad9787 --- /dev/null +++ b/resources/views/arah_mata_angin/index.blade.php @@ -0,0 +1,140 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.arah-mata-angin') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Arah Mata Angin +

+ +
+
+
+ + + + + + + + +
+ + + Arah Mata Angin + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 5ac8a28..6eea2fc 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -173,6 +173,20 @@ $trail->push('Edit Hubungan Penghuni Jaminan'); }); + Breadcrumbs::for('basicdata.arah-mata-angin', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Arah Mata Angin', route('basicdata.arah-mata-angin.index')); + }); + + Breadcrumbs::for('basicdata.arah-mata-angin.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.arah-mata-angin'); + $trail->push('Tambah Arah Mata Angin', route('basicdata.arah-mata-angin.create')); + }); + + Breadcrumbs::for('basicdata.arah-mata-angin.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.hubungan-penghuni-jaminan'); + $trail->push('Edit Arah Mata Angin'); + }); Breadcrumbs::for('debitur', function (BreadcrumbTrail $trail) { $trail->push('Debitur', route('debitur.index')); diff --git a/routes/web.php b/routes/web.php index 8095371..b620dba 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ name('export'); }); Route::resource('hubungan-penghuni-jaminan', HubunganPenghuniJaminanController::class); + + Route::name('arah-mata-angin.')->prefix('arah-mata-angin')->group(function () { + Route::get('restore/{id}', [ArahMataAnginController::class, 'restore'])->name('restore'); + Route::get('datatables', [ArahMataAnginController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [ArahMataAnginController::class, 'export'])->name('export'); + }); + Route::resource('arah-mata-angin', ArahMataAnginController::class); }); Route::name('debitur.')->prefix('debitur')->group(function () { From 9c05779fbd4755922603942cae067b6d5eb53d71 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 21 Aug 2024 13:42:55 +0700 Subject: [PATCH 0021/1161] Feature #14 : Dokumen Jaminan --- app/Http/Controllers/DebitureController.php | 181 ++++++++++++- app/Http/Requests/DebitureRequest.php | 5 +- app/Http/Requests/DokumenJaminanRequest.php | 42 +++ app/Models/Debiture.php | 1 - app/Models/DokumenJaminan.php | 69 +++++ ...24_08_12_022026_create_debitures_table.php | 8 +- ...20_090400_create_dokumen_jaminan_table.php | 54 ++++ .../debitur/components/debitur.blade.php | 206 +++++++++++++++ .../debitur/components/dokumen.blade.php | 243 ++++++++++++++++++ .../debitur/components/jaminan.blade.php | 162 ++++++++++++ .../debitur/components/pemilik.blade.php | 0 resources/views/debitur/create.blade.php | 243 +----------------- resources/views/debitur/edit.blade.php | 29 +++ resources/views/debitur/jaminan.blade.php | 24 ++ routes/breadcrumbs.php | 19 +- routes/web.php | 13 +- 16 files changed, 1052 insertions(+), 247 deletions(-) create mode 100644 app/Http/Requests/DokumenJaminanRequest.php create mode 100644 app/Models/DokumenJaminan.php create mode 100644 database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php create mode 100644 resources/views/debitur/components/debitur.blade.php create mode 100644 resources/views/debitur/components/dokumen.blade.php create mode 100644 resources/views/debitur/components/jaminan.blade.php create mode 100644 resources/views/debitur/components/pemilik.blade.php create mode 100644 resources/views/debitur/edit.blade.php create mode 100644 resources/views/debitur/jaminan.blade.php diff --git a/app/Http/Controllers/DebitureController.php b/app/Http/Controllers/DebitureController.php index e1c5432..03b8b49 100644 --- a/app/Http/Controllers/DebitureController.php +++ b/app/Http/Controllers/DebitureController.php @@ -12,8 +12,13 @@ use Modules\Location\Models\Village; use Modules\Lpj\Exports\DebitureExport; use Modules\Lpj\Http\Requests\DebitureRequest; + use Modules\Lpj\Http\Requests\DokumenJaminanRequest; use Modules\Lpj\Models\Branch; use Modules\Lpj\Models\Debiture; + use Modules\Lpj\Models\DokumenJaminan; + use Modules\Lpj\Models\JenisJaminan; + use Modules\Lpj\Models\JenisLegalitasJaminan; + use Modules\Lpj\Models\PemilikJaminan; class DebitureController extends Controller { @@ -52,13 +57,162 @@ public function edit($id) { - $debitur = Debiture::find($id); - $branches = Branch::all(); + $debitur = Debiture::find($id); + $branches = Branch::all(); $provinces = Province::all(); - $cities = City::where('province_code', $debitur->province_code)->get(); + $cities = City::where('province_code', $debitur->province_code)->get(); $districts = District::where('city_code', $debitur->city_code)->get(); - $villages = Village::where('district_code', $debitur->district_code)->get(); - return view('lpj::debitur.create', compact('debitur', 'branches', 'provinces', 'cities', 'districts', 'villages')); + $villages = Village::where('district_code', $debitur->district_code)->get(); + return view( + 'lpj::debitur.edit', + compact('debitur', 'branches', 'provinces', 'cities', 'districts', 'villages'), + ); + } + + public function jaminan($id) + { + $debitur = Debiture::find($id); + $documents = DokumenJaminan::with('pemilik')->where('debiture_id', $id)->get(); + + return view( + 'lpj::debitur.edit', + compact('debitur', 'documents'), + ); + } + + public function createJaminan($id) + { + $debitur = Debiture::find($id); + $provinces = Province::all(); + $jenisJaminan = JenisJaminan::all(); + $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); + + return view( + 'lpj::debitur.jaminan', + compact('debitur', 'provinces', 'jenisJaminan', 'jenisLegalitasJaminan'), + ); + } + + public function storeJaminan(DokumenJaminanRequest $request, $id) + { + $debitur = Debiture::find($id); + + $validate = $request->validated(); + if ($validate) { + try { + $validate['debiture_id'] = $id; + + if ($validate['pemilik_jaminan_id'] == 0) { + $pemilik_jaminan = [ + 'npwp' => $debitur->npwp, + 'email' => $debitur->email, + 'phone' => $debitur->phone, + 'province_code' => $debitur->province_code, + 'city_code' => $debitur->city_code, + 'district_code' => $debitur->district_code, + 'village_code' => $debitur->village_code, + 'postal_code' => $debitur->postal_code, + 'address' => $debitur->address, + ]; + + $pemilikJaminan = PemilikJaminan::updateOrCreate([ + 'debiture_id' => $id, + 'name' => $debitur->name, + ], $pemilik_jaminan); + } + + if ($request->hasFile('dokumen_jaminan')) { + $file = $request->file('dokumen_jaminan'); + $file_name = $file->getClientOriginalName(); + $file->storeAs('public/jaminan/' . $debitur->id, $file_name); + $validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name; + } + + $validate['pemilik_jaminan_id'] = $pemilikJaminan->id; + DokumenJaminan::create($validate); + + + return redirect()->route('debitur.jaminan', $id); + } catch (Exception $e) { + print_r($e->getMessage()); + exit; + } + } + } + + public function updateJaminan(DokumenJaminanRequest $request, $id, $jaminan) + { + $debitur = Debiture::find($id); + + $validate = $request->validated(); + if ($validate) { + try { + $validate['debiture_id'] = $id; + + if ($validate['pemilik_jaminan_id'] == 0) { + $pemilik_jaminan = [ + 'npwp' => $debitur->npwp, + 'email' => $debitur->email, + 'phone' => $debitur->phone, + 'province_code' => $debitur->province_code, + 'city_code' => $debitur->city_code, + 'district_code' => $debitur->district_code, + 'village_code' => $debitur->village_code, + 'postal_code' => $debitur->postal_code, + 'address' => $debitur->address, + ]; + + $pemilikJaminan = PemilikJaminan::updateOrCreate([ + 'debiture_id' => $id, + 'name' => $debitur->name, + ], $pemilik_jaminan); + } + + if ($request->hasFile('dokumen_jaminan')) { + $file = $request->file('dokumen_jaminan'); + $file_name = $file->getClientOriginalName(); + $file->storeAs('public/jaminan/' . $debitur->id, $file_name); + $validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name; + } + + $document = DokumenJaminan::find($jaminan); + $document->update($validate); + + + return redirect()->route('debitur.jaminan', $id); + } catch (Exception $e) { + print_r($e->getMessage()); + exit; + } + } + } + + public function editJaminan($id, $jaminan) + { + $document = DokumenJaminan::find($jaminan); + $debitur = Debiture::find($document->debiture_id); + $provinces = Province::all(); + $cities = City::where('province_code', $document->province_code)->get(); + $districts = District::where('city_code', $document->city_code)->get(); + $villages = Village::where('district_code', $document->district_code)->get(); + $jenisJaminan = JenisJaminan::all(); + $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); + $pemilikJaminan = PemilikJaminan::all(); + + return view( + 'lpj::debitur.jaminan', + compact( + 'debitur', + 'provinces', + 'jenisJaminan', + 'jenisLegalitasJaminan', + 'document', + 'cities', + 'districts', + 'villages', + 'pemilikJaminan', + ), + ); } public function update(DebitureRequest $request, $id) @@ -94,6 +248,17 @@ } } + public function destroyJaminan($id, $jaminan_id) + { + try { + $jaminan = DokumenJaminan::find($jaminan_id); + $jaminan->delete(); + echo json_encode(['success' => true, 'message' => 'Dokumen Jaminan deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete Dokumen Jaminan']); + } + } + public function dataForDatatables(Request $request) { if (is_null($this->user) || !$this->user->can('debitur.view')) { @@ -166,4 +331,10 @@ { return Excel::download(new DebitureExport, 'debitur.xlsx'); } + + public function download($id) + { + $document = DokumenJaminan::find($id); + return response()->download(storage_path('app/public/' . $document->dokumen_jaminan)); + } } diff --git a/app/Http/Requests/DebitureRequest.php b/app/Http/Requests/DebitureRequest.php index 1a71510..ff87263 100644 --- a/app/Http/Requests/DebitureRequest.php +++ b/app/Http/Requests/DebitureRequest.php @@ -22,7 +22,6 @@ 'name' => 'required', 'registered_at' => 'nullable|date', 'npwp' => 'nullable|string|max:16', - 'nomor_id' => 'nullable|string|max:16', 'email' => 'nullable|email', 'phone' => 'nullable|string|max:15', 'address' => 'nullable|string', @@ -31,9 +30,9 @@ ]; if ($this->method() == 'PUT') { - $rules['cif'] = 'required|unique:debitures,cif,' . $this->id; + $rules['cif'] = 'nullable|unique:debitures,cif,' . $this->id; } else { - $rules['cif'] = 'required|unique:debitures,cif'; + $rules['cif'] = 'nullable|unique:debitures,cif'; } return $rules; diff --git a/app/Http/Requests/DokumenJaminanRequest.php b/app/Http/Requests/DokumenJaminanRequest.php new file mode 100644 index 0000000..0fa33d6 --- /dev/null +++ b/app/Http/Requests/DokumenJaminanRequest.php @@ -0,0 +1,42 @@ + 'required', + 'jenis_jaminan_id' => 'required', + 'jenis_legalitas_jaminan_id' => 'required', + 'dokumen_jaminan' => 'nullable|file|mimes:pdf', + 'keterangan' => 'nullable|string|max:255', + 'province_code' => 'nullable|exists:provinces,code', + 'city_code' => 'nullable|exists:cities,code', + 'district_code' => 'nullable|exists:districts,code', + 'village_code' => 'nullable|exists:villages,code', + 'name' => 'required', + 'address' => 'nullable|string', + 'postal_code' => 'nullable|string|max:10', + 'status' => 'nullable|boolean', + ]; + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/Debiture.php b/app/Models/Debiture.php index 39b13d9..df5b9d2 100644 --- a/app/Models/Debiture.php +++ b/app/Models/Debiture.php @@ -16,7 +16,6 @@ 'name', 'registered_at', 'npwp', - 'nomor_id', 'email', 'phone', 'nomor_rekening', diff --git a/app/Models/DokumenJaminan.php b/app/Models/DokumenJaminan.php new file mode 100644 index 0000000..8c5b944 --- /dev/null +++ b/app/Models/DokumenJaminan.php @@ -0,0 +1,69 @@ +belongsTo(Province::class, 'province_code', 'code'); + } + + public function city() + { + return $this->belongsTo(City::class, 'city_code', 'code'); + } + + public function district() + { + return $this->belongsTo(District::class, 'district_code', 'code'); + } + + public function village() + { + return $this->belongsTo(Village::class, 'village_code', 'code'); + } + + public function debiture(){ + return $this->belongsTo(Debiture::class, 'debiture_id', 'id'); + } + + public function pemilik(){ + return $this->belongsTo(PemilikJaminan::class, 'pemilik_jaminan_id', 'id'); + } + + public function jenisJaminan(){ + return $this->belongsTo(JenisJaminan::class, 'jenis_jaminan_id', 'id'); + } + + public function jenisLegalitasJaminan(){ + return $this->belongsTo(JenisLegalitasJaminan::class, 'jenis_legalitas_jaminan_id', 'id'); + } + } diff --git a/database/migrations/2024_08_12_022026_create_debitures_table.php b/database/migrations/2024_08_12_022026_create_debitures_table.php index 31537aa..583c859 100644 --- a/database/migrations/2024_08_12_022026_create_debitures_table.php +++ b/database/migrations/2024_08_12_022026_create_debitures_table.php @@ -23,10 +23,10 @@ $table->string('email', 100)->nullable(); $table->string('phone', 15)->nullable(); $table->string('nomor_rekening', 50)->nullable(); - $table->string('province_code')->index(); - $table->string('city_code')->index(); - $table->string('district_code')->index(); - $table->string('village_code')->index(); + $table->string('province_code')->nullable()->index(); + $table->string('city_code')->nullable()->index(); + $table->string('district_code')->nullable()->index(); + $table->string('village_code')->nullable()->index(); $table->string('postal_code', 5)->nullable(); $table->text('address')->nullable(); diff --git a/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php b/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php new file mode 100644 index 0000000..a6db5c4 --- /dev/null +++ b/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php @@ -0,0 +1,54 @@ +id(); + $table->string('name'); + $table->foreignIdFor(Debiture::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(JenisJaminan::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(PemilikJaminan::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(JenisLegalitasJaminan::class)->constrained()->onDelete('cascade'); + $table->string('province_code')->nullable()->index(); + $table->string('city_code')->nullable()->index(); + $table->string('district_code')->nullable()->index(); + $table->string('village_code')->nullable()->index(); + $table->string('postal_code', 5)->nullable(); + $table->text('address')->nullable(); + $table->string('dokumen_jaminan')->nullable(); + $table->string('keterangan')->nullable(); + + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('dokumen_jaminan'); + } +}; diff --git a/resources/views/debitur/components/debitur.blade.php b/resources/views/debitur/components/debitur.blade.php new file mode 100644 index 0000000..0e22694 --- /dev/null +++ b/resources/views/debitur/components/debitur.blade.php @@ -0,0 +1,206 @@ +
+ @if(isset($debitur->id)) + @method('PUT') + @endif + @csrf +
+ +
+ + @error('branch_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('cif') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('nomor_rekening') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('npwp') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('email') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('phone') + {{ $message }} + @enderror +
+
+
+ +
+
+
+ + @error('province_code') + {{ $message }} + @enderror +
+
+ + @error('city_code') + {{ $message }} + @enderror +
+
+
+
+ + @error('district_code') + {{ $message }} + @enderror +
+
+ + @error('district_code') + {{ $message }} + @enderror +
+
+ + @error('postal_code') + {{ $message }} + @enderror +
+
+
+ + @error('address') + {{ $message }} + @enderror +
+
+
+
+ +
+
diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php new file mode 100644 index 0000000..cda5aa5 --- /dev/null +++ b/resources/views/debitur/components/dokumen.blade.php @@ -0,0 +1,243 @@ +
+ @if(isset($document->id)) + @method('PUT') + @endif + @csrf + +
+ +
+ +

{{ $debitur->name }} | {{ $debitur->address.', '.$debitur->village->name.', '.$debitur->city->name.', '.$debitur->province->name.', '.$debitur->postal_code }}

+
+
+
+ +
+
+ + + Tambah Pemilik Jaminan + +
+ @error('pemilik_jaminan_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('jenis_jaminan_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('jenis_legalitas_jaminan_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @if(isset($document->dokumen_jaminan)) + {{ basename($document->dokumen_jaminan) }} + @endif + @error('dokumen_jaminan') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('keterangan') + {{ $message }} + @enderror +
+
+ +
+ +
+
+
+ + @error('province_code') + {{ $message }} + @enderror +
+
+ + @error('city_code') + {{ $message }} + @enderror +
+
+
+
+ + @error('district_code') + {{ $message }} + @enderror +
+
+ + @error('district_code') + {{ $message }} + @enderror +
+
+ + @error('postal_code') + {{ $message }} + @enderror +
+
+
+ + @error('address') + {{ $message }} + @enderror +
+
+
+
+ +
+
diff --git a/resources/views/debitur/components/jaminan.blade.php b/resources/views/debitur/components/jaminan.blade.php new file mode 100644 index 0000000..d5009fc --- /dev/null +++ b/resources/views/debitur/components/jaminan.blade.php @@ -0,0 +1,162 @@ +
+ @foreach($documents as $document) +
+
+
+
+ + + + + + +
+ + +
+
+
+ + {{ $document->name }} + + + {{ $document->jenisJaminan->name }} | {{ $document->jenisLegalitasJaminan->name }} + +
+
+ +
+
+
+ + pemilik jaminan + +

+ {{ $document->pemilik->name }} +

+
+
+
+ @if($document->dokumen_jaminan) + +
+
+ @endif +
+ + keterangan + +

+ {{ $document->keterangan }} +

+
+
+
+
+ + alamat + +

+ {{ $document->address.', '.$document->village->name.', '.$document->city->name.', '.$document->province->name.', '.$document->postal_code }} +

+
+
+
+ @endforeach + + +
+
+
+
+ + + + + + +
+ + +
+
+
+
+ + Data Jaminan + + + Tambah Pemilik dan Dokumen Jaminan + +
+
+
+
+
+ + +@push('scripts') + + +@endpush diff --git a/resources/views/debitur/components/pemilik.blade.php b/resources/views/debitur/components/pemilik.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/debitur/create.blade.php b/resources/views/debitur/create.blade.php index 8867136..9b66b49 100644 --- a/resources/views/debitur/create.blade.php +++ b/resources/views/debitur/create.blade.php @@ -6,237 +6,20 @@ @section('content')
- @if(isset($debitur->id)) -
- - @method('PUT') - @else - - @endif - @csrf -
-
-

- {{ isset($debitur->id) ? 'Edit' : 'Tambah' }} Debitur -

-
- Back -
-
-
-
- -
- - @error('branch_id') - {{ $message }} - @enderror -
-
-
- -
- - @error('cif') - {{ $message }} - @enderror -
-
-
- -
- - @error('nomor_rekening') - {{ $message }} - @enderror -
-
-
- -
- - @error('name') - {{ $message }} - @enderror -
-
-
- -
- - @error('nomor_id') - {{ $message }} - @enderror -
-
-
- -
- - @error('npwp') - {{ $message }} - @enderror -
-
-
- -
- - @error('email') - {{ $message }} - @enderror -
-
-
- -
- - @error('phone') - {{ $message }} - @enderror -
-
-
- -
-
-
- - @error('province_code') - {{ $message }} - @enderror -
-
- - @error('city_code') - {{ $message }} - @enderror -
-
-
-
- - @error('district_code') - {{ $message }} - @enderror -
-
- - @error('district_code') - {{ $message }} - @enderror -
-
- - @error('postal_code') - {{ $message }} - @enderror -
-
-
- - @error('address') - {{ $message }} - @enderror -
-
-
-
- -
-
-
-
@endsection diff --git a/resources/views/debitur/edit.blade.php b/resources/views/debitur/edit.blade.php new file mode 100644 index 0000000..754548f --- /dev/null +++ b/resources/views/debitur/edit.blade.php @@ -0,0 +1,29 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ +
+ +
+ @if(request()->routeIs('debitur.edit', $debitur)) + @include('lpj::debitur.components.debitur') + @else + @include('lpj::debitur.components.jaminan') + @endif +
+
+
+@endsection diff --git a/resources/views/debitur/jaminan.blade.php b/resources/views/debitur/jaminan.blade.php new file mode 100644 index 0000000..d7938f3 --- /dev/null +++ b/resources/views/debitur/jaminan.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ +
+
+

+ {{ isset($document->id) ? 'Edit' : 'Tambah' }} Data Jaminan +

+
+ Back +
+
+
+ @include('lpj::debitur.components.dokumen') +
+
+
+@endsection diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 6eea2fc..b99a5f2 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -198,7 +198,22 @@ }); Breadcrumbs::for('debitur.edit', function (BreadcrumbTrail $trail) { - $trail->parent('basicdata.branch'); - $trail->push('Edit Debitur'); + $trail->parent('debitur'); + $trail->push('Data Debitur'); + }); + + Breadcrumbs::for('debitur.jaminan', function (BreadcrumbTrail $trail) { + $trail->parent('debitur'); + $trail->push('Data Jaminan Debitur'); + }); + + Breadcrumbs::for('debitur.jaminan.create', function (BreadcrumbTrail $trail) { + $trail->parent('debitur.jaminan'); + $trail->push('Tambah Data Jaminan Debitur'); + }); + + Breadcrumbs::for('debitur.jaminan.edit', function (BreadcrumbTrail $trail) { + $trail->parent('debitur.jaminan'); + $trail->push('Edit Data Jaminan Debitur'); }); diff --git a/routes/web.php b/routes/web.php index b620dba..14ece25 100644 --- a/routes/web.php +++ b/routes/web.php @@ -92,7 +92,7 @@ 'edit' => 'currency.edit', 'update' => 'currency.update', 'destroy' => 'currency.destroy', - ] + ], ]); Route::name('branch.')->prefix('cabang')->group(function () { @@ -111,7 +111,7 @@ 'edit' => 'branch.edit', 'update' => 'branch.update', 'destroy' => 'branch.destroy', - ] + ], ]); Route::name('nilai-plafond.')->prefix('nilai-plafond')->group(function () { @@ -148,10 +148,19 @@ }); Route::name('debitur.')->prefix('debitur')->group(function () { + Route::get('download/{id}', [DebitureController::class, 'download'])->name('download'); Route::get('restore/{id}', [DebitureController::class, 'restore'])->name('restore'); Route::get('datatables', [DebitureController::class, 'dataForDatatables']) ->name('datatables'); Route::get('export', [DebitureController::class, 'export'])->name('export'); + + + Route::get('{id}/jaminan', [DebitureController::class, 'jaminan'])->name('jaminan'); + Route::get('{id}/jaminan/create', [DebitureController::class, 'createJaminan'])->name('jaminan.create'); + Route::get('{id}/jaminan/{jaminan}/edit', [DebitureController::class,'editJaminan'])->name('jaminan.edit'); + Route::put('{id}/jaminan/{jaminan}', [DebitureController::class, 'updateJaminan'])->name('jaminan.update'); + Route::post('{id}/jaminan/store', [DebitureController::class,'storeJaminan'])->name('jaminan.store'); + Route::delete('{id}/jaminan/{jaminan}', [DebitureController::class, 'destroyJaminan'])->name('jaminan.destroy'); }); Route::resource('debitur', DebitureController::class); From 0bdade3456217fc4c18e18e775929d3d22a6e004 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 22 Aug 2024 11:48:27 +0700 Subject: [PATCH 0022/1161] Update Dokumen Jaminan - Move to Dokumen Jaminan Controller, for easy maintenance - grouping router --- app/Http/Controllers/DebitureController.php | 157 --------------- .../Controllers/DokumenJaminanController.php | 181 ++++++++++++++++++ ...20_090400_create_dokumen_jaminan_table.php | 8 +- .../debitur/components/dokumen.blade.php | 47 ++--- resources/views/debitur/edit.blade.php | 2 +- resources/views/debitur/jaminan.blade.php | 2 +- routes/breadcrumbs.php | 6 +- routes/web.php | 15 +- 8 files changed, 224 insertions(+), 194 deletions(-) create mode 100644 app/Http/Controllers/DokumenJaminanController.php diff --git a/app/Http/Controllers/DebitureController.php b/app/Http/Controllers/DebitureController.php index 03b8b49..7929578 100644 --- a/app/Http/Controllers/DebitureController.php +++ b/app/Http/Controllers/DebitureController.php @@ -69,152 +69,6 @@ ); } - public function jaminan($id) - { - $debitur = Debiture::find($id); - $documents = DokumenJaminan::with('pemilik')->where('debiture_id', $id)->get(); - - return view( - 'lpj::debitur.edit', - compact('debitur', 'documents'), - ); - } - - public function createJaminan($id) - { - $debitur = Debiture::find($id); - $provinces = Province::all(); - $jenisJaminan = JenisJaminan::all(); - $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); - - return view( - 'lpj::debitur.jaminan', - compact('debitur', 'provinces', 'jenisJaminan', 'jenisLegalitasJaminan'), - ); - } - - public function storeJaminan(DokumenJaminanRequest $request, $id) - { - $debitur = Debiture::find($id); - - $validate = $request->validated(); - if ($validate) { - try { - $validate['debiture_id'] = $id; - - if ($validate['pemilik_jaminan_id'] == 0) { - $pemilik_jaminan = [ - 'npwp' => $debitur->npwp, - 'email' => $debitur->email, - 'phone' => $debitur->phone, - 'province_code' => $debitur->province_code, - 'city_code' => $debitur->city_code, - 'district_code' => $debitur->district_code, - 'village_code' => $debitur->village_code, - 'postal_code' => $debitur->postal_code, - 'address' => $debitur->address, - ]; - - $pemilikJaminan = PemilikJaminan::updateOrCreate([ - 'debiture_id' => $id, - 'name' => $debitur->name, - ], $pemilik_jaminan); - } - - if ($request->hasFile('dokumen_jaminan')) { - $file = $request->file('dokumen_jaminan'); - $file_name = $file->getClientOriginalName(); - $file->storeAs('public/jaminan/' . $debitur->id, $file_name); - $validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name; - } - - $validate['pemilik_jaminan_id'] = $pemilikJaminan->id; - DokumenJaminan::create($validate); - - - return redirect()->route('debitur.jaminan', $id); - } catch (Exception $e) { - print_r($e->getMessage()); - exit; - } - } - } - - public function updateJaminan(DokumenJaminanRequest $request, $id, $jaminan) - { - $debitur = Debiture::find($id); - - $validate = $request->validated(); - if ($validate) { - try { - $validate['debiture_id'] = $id; - - if ($validate['pemilik_jaminan_id'] == 0) { - $pemilik_jaminan = [ - 'npwp' => $debitur->npwp, - 'email' => $debitur->email, - 'phone' => $debitur->phone, - 'province_code' => $debitur->province_code, - 'city_code' => $debitur->city_code, - 'district_code' => $debitur->district_code, - 'village_code' => $debitur->village_code, - 'postal_code' => $debitur->postal_code, - 'address' => $debitur->address, - ]; - - $pemilikJaminan = PemilikJaminan::updateOrCreate([ - 'debiture_id' => $id, - 'name' => $debitur->name, - ], $pemilik_jaminan); - } - - if ($request->hasFile('dokumen_jaminan')) { - $file = $request->file('dokumen_jaminan'); - $file_name = $file->getClientOriginalName(); - $file->storeAs('public/jaminan/' . $debitur->id, $file_name); - $validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name; - } - - $document = DokumenJaminan::find($jaminan); - $document->update($validate); - - - return redirect()->route('debitur.jaminan', $id); - } catch (Exception $e) { - print_r($e->getMessage()); - exit; - } - } - } - - public function editJaminan($id, $jaminan) - { - $document = DokumenJaminan::find($jaminan); - $debitur = Debiture::find($document->debiture_id); - $provinces = Province::all(); - $cities = City::where('province_code', $document->province_code)->get(); - $districts = District::where('city_code', $document->city_code)->get(); - $villages = Village::where('district_code', $document->district_code)->get(); - $jenisJaminan = JenisJaminan::all(); - $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); - $pemilikJaminan = PemilikJaminan::all(); - - return view( - 'lpj::debitur.jaminan', - compact( - 'debitur', - 'provinces', - 'jenisJaminan', - 'jenisLegalitasJaminan', - 'document', - 'cities', - 'districts', - 'villages', - 'pemilikJaminan', - ), - ); - } - public function update(DebitureRequest $request, $id) { $validate = $request->validated(); @@ -248,17 +102,6 @@ } } - public function destroyJaminan($id, $jaminan_id) - { - try { - $jaminan = DokumenJaminan::find($jaminan_id); - $jaminan->delete(); - echo json_encode(['success' => true, 'message' => 'Dokumen Jaminan deleted successfully']); - } catch (Exception $e) { - echo json_encode(['success' => false, 'message' => 'Failed to delete Dokumen Jaminan']); - } - } - public function dataForDatatables(Request $request) { if (is_null($this->user) || !$this->user->can('debitur.view')) { diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php new file mode 100644 index 0000000..ddceb55 --- /dev/null +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -0,0 +1,181 @@ +where('debiture_id', $id)->get(); + + return view( + 'lpj::debitur.edit', + compact('debitur', 'documents'), + ); + } + + public function store(DokumenJaminanRequest $request, $id) + { + $debitur = Debiture::find($id); + + $validate = $request->validated(); + if ($validate) { + try { + $validate['debiture_id'] = $id; + + if ($validate['pemilik_jaminan_id'] == 0) { + $pemilik_jaminan = [ + 'hubungan_pemilik_jaminan_id' => 1, + 'npwp' => $debitur->npwp, + 'email' => $debitur->email, + 'phone' => $debitur->phone, + 'province_code' => $debitur->province_code, + 'city_code' => $debitur->city_code, + 'district_code' => $debitur->district_code, + 'village_code' => $debitur->village_code, + 'postal_code' => $debitur->postal_code, + 'address' => $debitur->address, + ]; + + $pemilikJaminan = PemilikJaminan::updateOrCreate([ + 'debiture_id' => $id, + 'name' => $debitur->name, + ], $pemilik_jaminan); + } + + if ($request->hasFile('dokumen_jaminan')) { + $file = $request->file('dokumen_jaminan'); + $file_name = $file->getClientOriginalName(); + $file->storeAs('public/jaminan/' . $debitur->id, $file_name); + $validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name; + } + + $validate['pemilik_jaminan_id'] = $pemilikJaminan->id; + DokumenJaminan::create($validate); + + + return redirect()->route('debitur.jaminan.index', $id); + } catch (Exception $e) { + print_r($e->getMessage()); + exit; + } + } + } + + public function create($id) + { + $debitur = Debiture::find($id); + $provinces = Province::all(); + $jenisJaminan = JenisJaminan::all(); + $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); + + return view( + 'lpj::debitur.jaminan', + compact('debitur', 'provinces', 'jenisJaminan', 'jenisLegalitasJaminan'), + ); + } + + public function update(DokumenJaminanRequest $request, $id, $jaminan) + { + $debitur = Debiture::find($id); + + $validate = $request->validated(); + if ($validate) { + try { + $validate['debiture_id'] = $id; + + if ($validate['pemilik_jaminan_id'] == 0) { + $pemilik_jaminan = [ + 'hubungan_pemilik_jaminan_id' => 1, + 'npwp' => $debitur->npwp, + 'email' => $debitur->email, + 'phone' => $debitur->phone, + 'province_code' => $debitur->province_code, + 'city_code' => $debitur->city_code, + 'district_code' => $debitur->district_code, + 'village_code' => $debitur->village_code, + 'postal_code' => $debitur->postal_code, + 'address' => $debitur->address, + ]; + + $pemilikJaminan = PemilikJaminan::updateOrCreate([ + 'debiture_id' => $id, + 'name' => $debitur->name, + ], $pemilik_jaminan); + } + + if ($request->hasFile('dokumen_jaminan')) { + $file = $request->file('dokumen_jaminan'); + $file_name = $file->getClientOriginalName(); + $file->storeAs('public/jaminan/' . $debitur->id, $file_name); + $validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name; + } + + $document = DokumenJaminan::find($jaminan); + $document->update($validate); + + + return redirect()->route('debitur.jaminan.index', $id); + } catch (Exception $e) { + print_r($e->getMessage()); + exit; + } + } + } + + public function edit($id, $jaminan) + { + $document = DokumenJaminan::find($jaminan); + $debitur = Debiture::find($document->debiture_id); + $provinces = Province::all(); + $cities = City::where('province_code', $document->province_code)->get(); + $districts = District::where('city_code', $document->city_code)->get(); + $villages = Village::where('district_code', $document->district_code)->get(); + $jenisJaminan = JenisJaminan::all(); + $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); + $pemilikJaminan = PemilikJaminan::all(); + + return view( + 'lpj::debitur.jaminan', + compact( + 'debitur', + 'provinces', + 'jenisJaminan', + 'jenisLegalitasJaminan', + 'document', + 'cities', + 'districts', + 'villages', + 'pemilikJaminan', + ), + ); + } + + public function destroy($id, $jaminan_id) + { + try { + $jaminan = DokumenJaminan::find($jaminan_id); + $jaminan->delete(); + echo json_encode(['success' => true, 'message' => 'Dokumen Jaminan deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete Dokumen Jaminan']); + } + } + } diff --git a/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php b/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php index a6db5c4..bc20527 100644 --- a/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php +++ b/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php @@ -18,10 +18,10 @@ use Illuminate\Support\Facades\Schema; Schema::create('dokumen_jaminan', function (Blueprint $table) { $table->id(); $table->string('name'); - $table->foreignIdFor(Debiture::class)->constrained()->onDelete('cascade'); - $table->foreignIdFor(JenisJaminan::class)->constrained()->onDelete('cascade'); - $table->foreignIdFor(PemilikJaminan::class)->constrained()->onDelete('cascade'); - $table->foreignIdFor(JenisLegalitasJaminan::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(Debiture::class)->constrained('debitures')->onDelete('cascade'); + $table->foreignIdFor(JenisJaminan::class)->constrained('jenis_jaminan')->onDelete('cascade'); + $table->foreignIdFor(PemilikJaminan::class)->constrained('pemilik_jaminan')->onDelete('cascade'); + $table->foreignIdFor(JenisLegalitasJaminan::class)->constrained('jenis_legalitas_jaminan')->onDelete('cascade'); $table->string('province_code')->nullable()->index(); $table->string('city_code')->nullable()->index(); $table->string('district_code')->nullable()->index(); diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php index cda5aa5..ac632a0 100644 --- a/resources/views/debitur/components/dokumen.blade.php +++ b/resources/views/debitur/components/dokumen.blade.php @@ -22,17 +22,19 @@ Tambah Pemilik Jaminan @@ -88,17 +90,17 @@ @enderror
-
- -
- - @error('name') - {{ $message }} - @enderror -
+
+ +
+ + @error('name') + {{ $message }} + @enderror
+