diff --git a/app/Exports/JenisKartuExport.php b/app/Exports/JenisKartuExport.php new file mode 100644 index 0000000..36d5d78 --- /dev/null +++ b/app/Exports/JenisKartuExport.php @@ -0,0 +1,67 @@ +id, + $row->code, + $row->name, + $row->biaya, + $row->authorized_status ? 'Yes' : 'No', + $row->created_at->format('Y-m-d H:i:s'), + $row->updated_at ? $row->updated_at->format('Y-m-d H:i:s') : '', + ]; + } + + /** + * @param Worksheet $sheet + * @return array + */ + public function styles(Worksheet $sheet) + { + return [ + // Style the first row as bold text + 1 => ['font' => ['bold' => true]], + ]; + } +} diff --git a/app/Http/Controllers/JenisKartuController.php b/app/Http/Controllers/JenisKartuController.php new file mode 100644 index 0000000..4e33cdd --- /dev/null +++ b/app/Http/Controllers/JenisKartuController.php @@ -0,0 +1,207 @@ +validated(); + + if ($validate) { + try { + // Add created_by field + $validate['created_by'] = auth()->id(); + + // Save to database + JenisKartu::create($validate); + + return redirect() + ->route('jenis-kartu.index') + ->with('success', 'Jenis Kartu created successfully'); + } catch (Exception $e) { + return redirect() + ->route('jenis-kartu.create') + ->with('error', 'Failed to create Jenis Kartu'); + } + } + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('webstatement::jenis-kartu.create'); + } + + /** + * Show the specified resource. + */ + public function show($id) + { + $jenisKartu = JenisKartu::find($id); + return view('webstatement::jenis-kartu.show', compact('jenisKartu')); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + $jenisKartu = JenisKartu::find($id); + return view('webstatement::jenis-kartu.create', compact('jenisKartu')); + } + + /** + * Update the specified resource in storage. + */ + public function update(JenisKartuRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Add updated_by field + $validate['updated_by'] = auth()->id(); + + // Update in database + $jenisKartu = JenisKartu::find($id); + $jenisKartu->update($validate); + + return redirect() + ->route('jenis-kartu.index') + ->with('success', 'Jenis Kartu updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('jenis-kartu.edit', $id) + ->with('error', 'Failed to update Jenis Kartu'); + } + } + } + + /** + * Remove the specified resource from storage. + */ + public function destroy($id) + { + try { + // Add deleted_by field + $jenisKartu = JenisKartu::find($id); + $jenisKartu->deleted_by = auth()->id(); + $jenisKartu->save(); + + // Delete from database + $jenisKartu->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Kartu deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete Jenis Kartu']); + } + } + + /** + * Provide data for datatables. + */ + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('jenis-kartu.view')) { + //abort(403, 'Sorry! You are not allowed to view jenis kartu.'); + } + + // Retrieve data from the database + $query = JenisKartu::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%"); + $q->orWhere('biaya', '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($filteredRecords / ($request->get('size') ?: 1)); + + // Calculate the current page number + $currentPage = $request->get('page') ?: 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, + ]); + } + + /** + * Delete multiple records. + */ + public function deleteMultiple(Request $request) + { + $ids = $request->input('ids'); + JenisKartu::whereIn('id', $ids)->delete(); + return response()->json(['message' => 'Jenis Kartu deleted successfully']); + } + + /** + * Export data to Excel. + */ + public function export() + { + return Excel::download(new JenisKartuExport, 'jenis-kartu.xlsx'); + } + } diff --git a/app/Http/Requests/JenisKartuRequest.php b/app/Http/Requests/JenisKartuRequest.php new file mode 100644 index 0000000..ab9ea0f --- /dev/null +++ b/app/Http/Requests/JenisKartuRequest.php @@ -0,0 +1,41 @@ + 'required|string|max:50', + 'name' => 'required|string|max:255', + 'biaya' => 'required|numeric', + 'authorized_status' => 'nullable|boolean', + ]; + + // Add unique validation for code field on create + if ($this->isMethod('post')) { + $rules['code'] .= '|unique:jenis_kartu,code'; + } + + // Add unique validation for code field on update, excluding the current record + if ($this->isMethod('put') || $this->isMethod('patch')) { + $rules['code'] .= '|unique:jenis_kartu,code,' . $this->id; + } + + return $rules; + } +} diff --git a/app/Models/Base.php b/app/Models/Base.php new file mode 100644 index 0000000..e64fd63 --- /dev/null +++ b/app/Models/Base.php @@ -0,0 +1,51 @@ +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('User Management : '); + } + } diff --git a/app/Models/JenisKartu.php b/app/Models/JenisKartu.php new file mode 100644 index 0000000..d37382c --- /dev/null +++ b/app/Models/JenisKartu.php @@ -0,0 +1,22 @@ +id(); + $table->string('code')->unique(); + $table->string('name'); + $table->decimal('biaya', 10, 2)->nullable(); + $table->timestamps(); + $table->softDeletes(); + $table->timestamp('crreated_at')->nullable(); + $table->string('authorized_status', 1)->default('0'); + $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_kartu'); + } +}; diff --git a/database/seeders/JenisKartuSeeder.php b/database/seeders/JenisKartuSeeder.php new file mode 100644 index 0000000..866227e --- /dev/null +++ b/database/seeders/JenisKartuSeeder.php @@ -0,0 +1,56 @@ + 'CLASSIC', + 'name' => 'Kartu Classic', + 'biaya' => 3000, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'code' => 'CLAS', + 'name' => 'Kartu Classic (Singkatan)', + 'biaya' => 3000, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'code' => 'SILVER', + 'name' => 'Kartu Silver', + 'biaya' => 5000, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'code' => 'SILV', + 'name' => 'Kartu Silver (Singkatan)', + 'biaya' => 5000, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'code' => 'GOLD', + 'name' => 'Kartu Gold', + 'biaya' => 10000, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]; + + JenisKartu::insert($jenisKartu); + } + +} diff --git a/database/seeders/WebstatementDatabaseSeeder.php b/database/seeders/WebstatementDatabaseSeeder.php index 81cf7b6..de346f6 100644 --- a/database/seeders/WebstatementDatabaseSeeder.php +++ b/database/seeders/WebstatementDatabaseSeeder.php @@ -11,6 +11,8 @@ class WebstatementDatabaseSeeder extends Seeder */ public function run(): void { - // $this->call([]); + $this->call([ + JenisKartuSeeder::class + ]); } } diff --git a/module.json b/module.json index b57f975..d8f6836 100644 --- a/module.json +++ b/module.json @@ -10,40 +10,48 @@ ], "files": [], "menu": { - "main": [{ - "title": "Staging Data", - "path": "", - "icon": "ki-filled ki-questionnaire-tablet text-lg text-primary", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - },{ - "title": "Nasabah", - "path": "customer", - "icon": "ki-filled ki-people text-lg text-primary", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - },{ - "title": "Email Blast", - "path": "emailblast", - "icon": "ki-filled ki-sms text-lg text-primary", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - }], - "master": [{ - "title": "Pesan Sponsor", - "path": "migrasi", - "icon": "ki-filled ki-category text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": [] - }], + "main": [ + { + "title": "Nasabah", + "path": "customer", + "icon": "ki-filled ki-people text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, + { + "title": "Email Blast", + "path": "emailblast", + "icon": "ki-filled ki-sms text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + } + ], + "master": [ + { + "title": "Jenis Kartu", + "path": "jenis-kartu", + "icon": "ki-filled ki-category text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator" + ] + }, + { + "title": "Pesan Sponsor", + "path": "migrasi", + "icon": "ki-filled ki-category text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + } + ], "system": [] } } diff --git a/resources/views/jenis-kartu/create.blade.php b/resources/views/jenis-kartu/create.blade.php new file mode 100644 index 0000000..606c986 --- /dev/null +++ b/resources/views/jenis-kartu/create.blade.php @@ -0,0 +1,74 @@ +@extends('layouts.main') + +@section('breadcrumbs') + @if(isset($jenisKartu->id)) + {{ Breadcrumbs::render(request()->route()->getName(),$jenisKartu) }} + @else + {{ Breadcrumbs::render(request()->route()->getName()) }} + + @endif +@endsection + +@section('content') +
| + + | ++ Code + + | ++ Nama + + | ++ Biaya + + | +Action | +
|---|