diff --git a/app/Http/Controllers/Admin/Master/UserController.php b/app/Http/Controllers/Admin/Master/UserController.php index 1ad3e29..1c311c7 100644 --- a/app/Http/Controllers/Admin/Master/UserController.php +++ b/app/Http/Controllers/Admin/Master/UserController.php @@ -23,7 +23,7 @@ public function index(): View { return view('pages.admin.master.user.index', [ 'pageTitle' => 'Pengguna', - 'users' => User::with(['biography', 'attachment']) + 'users' => User::with(['biography', 'attachments']) ->barbershop() ->latest() ->get(), @@ -52,7 +52,8 @@ public function store(UserRequest $request): RedirectResponse Biography::create(array_merge($validatedData, [ 'user_id' => $newUser->id, ]), $validatedData); - $this->uploadAttachment($validatedData['avatar'], 'users', User::class, $newUser->id); + $this->uploadAttachment($validatedData['avatar'], 'users', User::class, $newUser->id, 'avatar'); + $this->uploadAttachment($validatedData['ktp'], 'users', User::class, $newUser->id, 'ktp'); }); notify()->success('Data berhasil ditambahkan', 'Berhasil'); @@ -90,11 +91,15 @@ public function update(User $user, UserRequest $request): RedirectResponse 'base_salary', 'sop', 'avatar', + 'ktp', ]) ->toArray(); $user->biography()->update($biographyData); if (isset($validatedData['avatar'])) { - $this->uploadAttachment($validatedData['avatar'], 'users', User::class, $user->id); + $this->uploadAttachment($validatedData['avatar'], 'users', User::class, $user->id, 'avatar'); + } + if (isset($validatedData['ktp'])) { + $this->uploadAttachment($validatedData['ktp'], 'users', User::class, $user->id, 'ktp'); } }); diff --git a/app/Http/Requests/Admin/Master/UserRequest.php b/app/Http/Requests/Admin/Master/UserRequest.php index 0aa9a31..0bcac93 100644 --- a/app/Http/Requests/Admin/Master/UserRequest.php +++ b/app/Http/Requests/Admin/Master/UserRequest.php @@ -41,6 +41,9 @@ public function rules(): array 'avatar' => $isEdit ? ['nullable', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'] : ['required', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'], + 'ktp' => $isEdit + ? ['nullable', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'] + : ['required', 'image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'], 'gender' => ['required', Rule::in(['1', '2'])], ]; diff --git a/app/Models/Attachment.php b/app/Models/Attachment.php index 6152331..ebe3907 100644 --- a/app/Models/Attachment.php +++ b/app/Models/Attachment.php @@ -17,6 +17,7 @@ class Attachment extends Model 'name', 'extension', 'size', + 'type', ]; public function getFormattedAttachmentAttribute(): string diff --git a/app/Models/User.php b/app/Models/User.php index d8150cf..f3ff6a5 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -11,7 +11,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasOne; -use Illuminate\Database\Eloquent\Relations\MorphOne; +use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -99,8 +99,8 @@ public function cash(): HasMany return $this->hasMany(Cash::class); } - public function attachment(): MorphOne + public function attachments(): MorphMany { - return $this->morphOne(Attachment::class, 'attachmentable'); + return $this->morphMany(Attachment::class, 'attachmentable'); } } diff --git a/app/Traits/UploadAttachment.php b/app/Traits/UploadAttachment.php index dc5e37f..cab8243 100644 --- a/app/Traits/UploadAttachment.php +++ b/app/Traits/UploadAttachment.php @@ -10,9 +10,9 @@ trait UploadAttachment { - public function uploadAttachment(UploadedFile|string $file, string $path, string $classModel, string $featureId): void + public function uploadAttachment(UploadedFile|string $file, string $path, string $classModel, string $featureId, string $type): void { - DB::transaction(function () use ($file, $path, $classModel, $featureId) { + DB::transaction(function () use ($file, $path, $classModel, $featureId, $type) { if (is_string($file) && strpos($file, 'data:image') === 0) { $imageData = explode(',', $file)[1]; $image = base64_decode($imageData); @@ -23,36 +23,36 @@ public function uploadAttachment(UploadedFile|string $file, string $path, string $date = now()->format('Y-m-d'); Storage::disk('public')->put($path.'/'.$date.'/'.$fullFileName, $image); - Attachment::create([ - 'attachmentable_id' => $featureId, - 'attachmentable_type' => $classModel, - 'name' => $fileName, - 'extension' => $extension, - 'size' => strlen($image), - ]); + Attachment::updateOrCreate( + [ + 'attachmentable_id' => $featureId, + 'attachmentable_type' => $classModel, + 'type' => $type, + ], + [ + 'name' => $fileName, + 'extension' => $extension, + 'size' => strlen($image), + ] + ); } elseif ($file instanceof UploadedFile) { - $existingAttachment = Attachment::where('attachmentable_id', $featureId) - ->where('attachmentable_type', $classModel) - ->first(); - - if ($existingAttachment) { - $oldFilePath = $path.'/'.$existingAttachment->created_at->format('Y-m-d').'/'.$existingAttachment->name.'.'.$existingAttachment->extension; - Storage::disk('public')->delete($oldFilePath); - $existingAttachment->delete(); - } - $date = now()->format('Y-m-d'); $extension = $file->getClientOriginalExtension(); $fileName = Str::uuid(); $file->storeAs($path.'/'.$date, $fileName.'.'.$extension, 'public'); - Attachment::create([ - 'attachmentable_id' => $featureId, - 'attachmentable_type' => $classModel, - 'name' => $fileName, - 'extension' => $extension, - 'size' => $file->getSize(), - ]); + Attachment::updateOrCreate( + [ + 'attachmentable_id' => $featureId, + 'attachmentable_type' => $classModel, + 'type' => $type, + ], + [ + 'name' => $fileName, + 'extension' => $extension, + 'size' => $file->getSize(), + ] + ); } }); } diff --git a/database/migrations/2024_11_18_193153_create_attachments_table.php b/database/migrations/2024_11_18_193153_create_attachments_table.php index 35edb20..3ec5288 100644 --- a/database/migrations/2024_11_18_193153_create_attachments_table.php +++ b/database/migrations/2024_11_18_193153_create_attachments_table.php @@ -14,6 +14,7 @@ public function up(): void Schema::create('attachments', function (Blueprint $table) { $table->id(); $table->nullableMorphs('attachmentable'); + $table->string('type', 20); $table->string('name', 50); $table->string('extension', 10); $table->string('size', 10); diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index 5eee23e..45e8461 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -51,6 +51,7 @@ public function run(): void 'name' => $fileName, 'extension' => $file->getExtension(), 'size' => $file->getSize(), + 'type' => 'avatar', ]); $path = 'users/'.now()->format('Y-m-d'); diff --git a/public/assets/admin/js/custom/user.js b/public/assets/admin/js/custom/user.js index 27f0fbf..4588c23 100644 --- a/public/assets/admin/js/custom/user.js +++ b/public/assets/admin/js/custom/user.js @@ -16,7 +16,10 @@ $(document).ready(function () { gender: button.data("gender"), sop: button.data("sop"), avatar: button.data("avatar"), + ktp: button.data("ktp"), }; + + console.log(data); var genderBadge = ''; if (data.gender === 1) { genderBadge = 'Laki-laki'; @@ -34,5 +37,6 @@ $(document).ready(function () { $('#user-address').text(data.address); $('#user-gender').html(genderBadge); $('#user-sop').text(data.sop); + $('#user-ktp').attr('src', data.ktp); }); }); diff --git a/resources/views/pages/admin/master/user/create.blade.php b/resources/views/pages/admin/master/user/create.blade.php index f28bc38..5e1b752 100644 --- a/resources/views/pages/admin/master/user/create.blade.php +++ b/resources/views/pages/admin/master/user/create.blade.php @@ -148,6 +148,19 @@ class="form-control rupiah-format @error('base_salary') is-invalid @enderror" id @enderror