feat: send information via email when accept or reject account

This commit is contained in:
myuqinurrohman 2025-04-10 09:03:53 +07:00
parent 63d01d90a2
commit 8cd1eb9c00
7 changed files with 217 additions and 10 deletions

View File

@ -5,6 +5,7 @@
use App\Exports\CompanyExport;
use App\Http\Controllers\Controller;
use App\Http\Requests\CompanyRequest;
use App\Mail\AccountVerification;
use App\Models\Company;
use App\Models\LoginHistory;
use App\Models\Role;
@ -12,6 +13,7 @@
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Maatwebsite\Excel\Facades\Excel;
class CompanyController extends Controller
@ -227,6 +229,8 @@ public function processAcceptAction(Request $request, $id, $type, $category){
$user->update([
'status' => '1'
]);
Mail::to($user->email)->send(new AccountVerification($user, 'accepted'));
}else if($category === 'edit-request' && $user->company->edit_status === '1'){
$user->company->update([
'edit_status' => '2'
@ -237,8 +241,6 @@ public function processAcceptAction(Request $request, $id, $type, $category){
return response()->json([
'message' => 'Berhasil menyetujui'.($category === 'edit-request' ? ' permohonan edit' : '').' perusahaan.'
]);
// return redirect()->back()->with('success-status', 'Berhasil menyetujui'.($category === 'edit-request' ? 'permohonan edit' : '').'perusahaan.');
}
public function processRejectAction(Request $request, $id, $type, $category){
@ -264,6 +266,8 @@ public function processRejectAction(Request $request, $id, $type, $category){
$user->company->update([
'rejection_reason' => $validatedData['rejection_reason']
]);
Mail::to($user->email)->send(new AccountVerification($user, 'rejected', $validatedData['rejection_reason']));
}else if($category === 'edit-request' && $user->company->edit_status === '1'){
$user->company->update([
'edit_status' => '3',

View File

@ -7,11 +7,13 @@
use App\Http\Requests\ChangePasswordRequest;
use App\Http\Requests\ResetPasswordRequest;
use App\Http\Requests\UserRequest;
use App\Mail\AccountVerification;
use App\Models\LoginHistory;
use App\Models\Role;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
@ -223,6 +225,8 @@ public function statusAction(Request $request, $id, $action){
'status' => '1'
]);
Mail::to($user->email)->send(new AccountVerification($user, 'accepted'));
return response()->json(['message' => 'Berhasil menyetujui pengguna.']);
}else if($action == 'reject'){
@ -240,14 +244,13 @@ public function statusAction(Request $request, $id, $action){
'rejection_reason' => $validatedData['rejection_reason']
]);
Mail::to($user->email)->send(new AccountVerification($user, 'rejected', strip_tags($validatedData['rejection_reason'])));
return redirect()->back()->with('success-status', 'Berhasil menolak pengguna.');
}
}
// return redirect()->route('dashboard.users.index')->with('success-status', 'Berhasil menyetujui pengguna.');
}
public function setting(){

View File

@ -0,0 +1,59 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class AccountVerification extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*/
public $status;
public $reason;
public $user;
public function __construct($user, $status, $rejectionReason = null)
{
$this->user = $user;
$this->status = $status; // 'accepted' atau 'rejected'
$this->reason = $rejectionReason;
}
/**
* Get the message envelope.
*/
public function envelope(): Envelope
{
return new Envelope(
subject: $this->status === 'accepted' ? 'Akun Simedkom Anda Disetujui' : 'Akun Simedkom Anda Ditolak'
);
}
/**
* Get the message content definition.
*/
public function content(): Content
{
return new Content(
markdown: 'emails.account.verification',
);
}
/**
* Get the attachments for the message.
*
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
*/
public function attachments(): array
{
return [];
}
}

View File

@ -113,6 +113,55 @@
<span class="profile-ud-value">{{$user->company->profile ?? '-'}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status</span>
<span class="profile-ud-value">
@switch($user->status)
@case(0)
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@break
@case(1)
<span class="profile-ud-value"><span class="badge bg-success">Diterima</span></span>
@break
@case(2)
<span class="profile-ud-value">
<span class="badge bg-danger">
<a href="javascript:void(0);" onclick="showDetail({{ json_encode(strip_tags($user->rejection_reason)) }})" class="text-light text-decoration-underline">Ditolak</a>
</span>
</span>
@break
@default
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endswitch
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status Edit</span>
<span class="profile-ud-value">
@switch($user->company->edit_status)
@case(0)
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Ada</span></span>
@break
@case(1)
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@break
@case(2)
<span class="profile-ud-value"><span class="badge bg-primary">Diterima</span></span>
@break
@case(3)
<span class="badge bg-danger">
<a href="javascript:void(0);" onclick="showDetail({{ json_encode(strip_tags($user->company->edit_rejection_reason)) }})" class="text-light text-decoration-underline">Ditolak</a>
</span>
@break
@default
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endswitch
</span>
</div>
</div>
</div><!-- .profile-ud-list -->
</div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}}

View File

@ -100,6 +100,57 @@
<span class="profile-ud-value">{{$user->company->profile ?? '-'}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status</span>
<span class="profile-ud-value">
@switch($user->status)
@case(0)
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@break
@case(1)
<span class="profile-ud-value"><span class="badge bg-success">Diterima</span></span>
@break
@case(2)
<span class="profile-ud-value">
<span class="badge bg-danger">
<a href="javascript:void(0);" onclick="showDetail({{ json_encode(strip_tags($user->rejection_reason)) }})" class="text-light text-decoration-underline">Ditolak</a>
</span>
</span>
@break
@default
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endswitch
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status Edit</span>
<span class="profile-ud-value">
@switch($user->company->edit_status)
@case(0)
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Ada</span></span>
@break
@case(1)
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@break
@case(2)
<span class="profile-ud-value"><span class="badge bg-primary">Diterima</span></span>
@break
@case(3)
<span class="profile-ud-value">
<span class="badge bg-danger">
<a href="javascript:void(0);" onclick="showDetail({{ json_encode(strip_tags($user->company->edit_rejection_reason)) }})" class="text-light text-decoration-underline">Ditolak</a>
</span>
</span>
@break
@default
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endswitch
</span>
</div>
</div>
</div><!-- .profile-ud-list -->
</div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}}

View File

@ -0,0 +1,41 @@
@component('mail::message')
# 👋 Halo, {{ $user->name ?? 'Pengguna' }}
@switch($status)
@case('accepted')
## ✅ Akun Anda Telah Disetujui!
Selamat! Akun Anda telah **berhasil diverifikasi** oleh tim kami. Sekarang Anda sudah bisa mengakses seluruh fitur yang tersedia di platform kami.
@component('mail::button', ['url' => route('login')])
Masuk Sekarang
@endcomponent
@break
@case('rejected')
## ❌ Akun Anda Ditolak
Mohon maaf, akun Anda belum dapat kami setujui saat ini.
@if ($reason)
### 📝 Alasan Penolakan:
> {{ $reason }}
@endif
Silakan periksa kembali data dan dokumen yang Anda unggah, lalu ajukan ulang jika diperlukan.
@component('mail::button', ['url' => route('auth.register')])
Ajukan Ulang
@endcomponent
@break
@endswitch
Terima kasih telah mendaftar di {{ config('app.name') }}.
Jika ada pertanyaan, jangan ragu untuk menghubungi kami.
Salam hangat,
{{ config('app.name') }}
@endcomponent

View File

@ -33,11 +33,11 @@
<div class="col-6 col-lg-2 col-sm-4 xs-mb-30px order-sm-4 order-lg-3">
<span class="fs-17 fw-500 d-block text-white mb-5px">Tautan</span>
<ul>
<li><a href="javscript: void(0);">Beranda</a></li>
<li><a href="javscript: void(0);">Berita</a></li>
<li><a href="javscript: void(0);">Pengumuman</a></li>
<li><a href="javscript: void(0);">Tentang Kami</a></li>
<li><a href="javscript: void(0);">Kontak</a></li>
<li><a href="javascript: void(0);">Beranda</a></li>
<li><a href="javascript: void(0);">Berita</a></li>
<li><a href="javascript: void(0);">Pengumuman</a></li>
<li><a href="javascript: void(0);">Tentang Kami</a></li>
<li><a href="javascript: void(0);">Kontak</a></li>
</ul>
</div>
<!-- end footer column -->