From 4e225157ef9b54f92aca585353f32cfd488b6655 Mon Sep 17 00:00:00 2001 From: ajikamaludin Date: Fri, 27 Jan 2023 22:15:14 +0700 Subject: [PATCH] add setting destination email --- app/Http/Controllers/SettingController.php | 27 ++++++++ app/Jobs/DocumentReminder.php | 4 +- app/Models/Setting.php | 5 ++ database/seeders/DatabaseSeeder.php | 7 ++ resources/js/Layouts/AuthenticatedLayout.jsx | 1 + resources/js/Pages/Setting/Index.jsx | 68 ++++++++++++++++++++ routes/web.php | 7 +- 7 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/SettingController.php create mode 100644 resources/js/Pages/Setting/Index.jsx diff --git a/app/Http/Controllers/SettingController.php b/app/Http/Controllers/SettingController.php new file mode 100644 index 0000000..4bf85f0 --- /dev/null +++ b/app/Http/Controllers/SettingController.php @@ -0,0 +1,27 @@ + Setting::all(), + ]); + } + + public function update(Request $request) + { + $request->validate([ + 'email' => 'required|email', + ]); + + Setting::where('key', 'DESTINATION_MAIL')->update([ + 'value' => $request->email, + ]); + } +} diff --git a/app/Jobs/DocumentReminder.php b/app/Jobs/DocumentReminder.php index 358fa5a..6929353 100644 --- a/app/Jobs/DocumentReminder.php +++ b/app/Jobs/DocumentReminder.php @@ -3,6 +3,7 @@ namespace App\Jobs; use App\Mail\DocumentNotification; +use App\Models\Setting; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; @@ -32,6 +33,7 @@ class DocumentReminder implements ShouldQueue */ public function handle() { - Mail::to('aji19kamaludin@gmail.com')->send(new DocumentNotification()); + $email = Setting::where('key', 'DESTINATION_MAIL')->first(); + Mail::to($email->value)->send(new DocumentNotification()); } } diff --git a/app/Models/Setting.php b/app/Models/Setting.php index 0fe60af..f6d06a3 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -8,4 +8,9 @@ use Illuminate\Database\Eloquent\Model; class Setting extends Model { use HasFactory; + + protected $fillable = [ + 'key', + 'value' + ]; } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 5605739..2fa9e9e 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -6,6 +6,7 @@ namespace Database\Seeders; use App\Models\Department; use App\Models\Permission; +use App\Models\Setting; use App\Models\TypeDoc; use App\Models\User; use Illuminate\Database\Seeder; @@ -56,6 +57,7 @@ class DatabaseSeeder extends Seeder ['name' => 'update-user', 'label' => 'Edit User'], ['name' => 'create-user', 'label' => 'Buat User'], ['name' => 'delete-user', 'label' => 'Hapus User'], + ['name' => 'view-setting', 'label' => 'Setting'], ]; foreach ($permissions as $permission) { @@ -71,5 +73,10 @@ class DatabaseSeeder extends Seeder 'password' => bcrypt('password'), 'is_admin' => 1, // admin user ]); + + Setting::create([ + 'key' => 'DESTINATION_MAIL', + 'value' => 'aji19kamaludin@gmail.com' + ]); } } diff --git a/resources/js/Layouts/AuthenticatedLayout.jsx b/resources/js/Layouts/AuthenticatedLayout.jsx index f2dca7c..1da3492 100644 --- a/resources/js/Layouts/AuthenticatedLayout.jsx +++ b/resources/js/Layouts/AuthenticatedLayout.jsx @@ -17,6 +17,7 @@ const rs = [ {name:"User", route: "users.index", show: true, permission: 'view-user'}, {name:"Role", route: "roles.index", show: true, permission: 'view-role'}, ]}, + {name: "Setting", route: "setting.index", show: true, permission: 'view-setting'}, ] export default function Authenticated({ auth, children, flash, notify }) { diff --git a/resources/js/Pages/Setting/Index.jsx b/resources/js/Pages/Setting/Index.jsx new file mode 100644 index 0000000..80dba88 --- /dev/null +++ b/resources/js/Pages/Setting/Index.jsx @@ -0,0 +1,68 @@ +import React from 'react'; +import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'; +import { Head, useForm } from '@inertiajs/react'; +import { toast } from 'react-toastify'; + +export default function Dashboard(props) { + const { settings } = props + const setting = settings.find(s => s.key === 'DESTINATION_MAIL' ) + const { data, setData, post, processing, errors } = useForm({ + email: setting.value, + }) + + const handleOnChange = (event) => { + setData(event.target.name, event.target.type === 'checkbox' ? event.target.checked : event.target.value); + } + + const handleSubmit = () => { + post(route('setting.update'), { + onSuccess: () => + Promise.all([ + toast.success('The Data has been saved'), + ]), + }) + } + + return ( + + + +
+
+
+
+ + + +
+
+ Simpan +
+
+
+
+
+ ); +} diff --git a/routes/web.php b/routes/web.php index b6befe2..e6bd9f2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,6 +5,7 @@ use App\Http\Controllers\DocumentController; use App\Http\Controllers\GeneralController; use App\Http\Controllers\NotificationController; use App\Http\Controllers\RoleController; +use App\Http\Controllers\SettingController; use App\Http\Controllers\TypeController; use Illuminate\Foundation\Application; use Illuminate\Support\Facades\Route; @@ -50,16 +51,16 @@ Route::middleware(['auth'])->group(function () { Route::delete('/categories/{category}', [CategoryController::class, 'destroy'])->name('categories.destroy'); Route::get('/docs', [DocumentController::class, 'index'])->name('docs.index'); - Route::get('/docs/export', [DocumentController::class, 'export'])->name('docs.export'); Route::get('/docs/create', [DocumentController::class, 'create'])->name('docs.create'); Route::post('/docs', [DocumentController::class, 'store'])->name('docs.store'); Route::delete('/docs/{doc}', [DocumentController::class, 'destroy'])->name('docs.destroy'); Route::get('/docs/{doc}', [DocumentController::class, 'edit'])->name('docs.edit'); Route::post('/docs/{doc}', [DocumentController::class, 'update'])->name('docs.update'); - Route::get('/docs/{doc}/show', [DocumentController::class, 'show'])->name('docs.show'); - Route::post('/docs/{doc}/share', [DocumentController::class, 'share'])->name('docs.share'); Route::get('/notification/{notification}', [NotificationController::class, 'redirect'])->name('notification.redirect'); + + Route::get('/setting', [SettingController::class, 'index'])->name('setting.index'); + Route::post('/setting', [SettingController::class, 'update'])->name('setting.update'); }); require __DIR__.'/auth.php';