diff --git a/app/Helpers/NextCloudHelper.php b/app/Helpers/NextCloudHelper.php index 49b78ee..5e7f007 100644 --- a/app/Helpers/NextCloudHelper.php +++ b/app/Helpers/NextCloudHelper.php @@ -5,6 +5,8 @@ namespace App\Helpers; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; use Illuminate\Support\Str; +use Illuminate\Support\Facades\Storage; +use Spatie\Image\Image; class NextCloudHelper { @@ -62,12 +64,11 @@ class NextCloudHelper { $baseUrl = env('NEXT_CLOUD_URL'); $username = env('NEXT_CLOUD_USERNAME'); - $password= env('NEXT_CLOUD_PASSWORD'); + $password = env('NEXT_CLOUD_PASSWORD'); // Ensure the folder exists (or create it) $folderResponse = self::createFolder($baseUrl, $username, $password, $folderPath); - // Check if folder creation was successful or if it already exists if (!$folderResponse['success']) { return [ 'success' => false, @@ -80,12 +81,37 @@ class NextCloudHelper $url = rtrim($baseUrl, '/') . "/mktia/remote.php/dav/files/{$username}/" . ltrim($folderPath, '/') . '/' . $fileName; try { - // If fileObject is a stream, we can use it directly - // If it's raw content, ensure it's being properly passed + // Check if the file is an image + if (Str::endsWith($fileName, ['.jpeg', '.png', '.jpg', '.gif', '.svg', '.heic', '.heif'])) { + // Save the uploaded file or raw content to a temporary path + $tempPath = tempnam(sys_get_temp_dir(), 'image_') . '.' . pathinfo($fileName, PATHINFO_EXTENSION); + + if (is_string($fileObject)) { + // If fileObject is raw content, write it to the temp file + file_put_contents($tempPath, $fileObject); + } elseif ($fileObject instanceof \Illuminate\Http\UploadedFile) { + // If fileObject is an UploadedFile, move it to the temp file + $fileObject->move(dirname($tempPath), basename($tempPath)); + } + + // Optimize the image + Image::load($tempPath) + ->optimize() + ->quality(50) + ->save(); + + // Replace fileObject with the optimized file content + $fileObject = file_get_contents($tempPath); + + // Remove the temporary file + unlink($tempPath); + } + + // Upload the file $response = $client->request('PUT', $url, [ 'auth' => [$username, $password], - 'body' => $fileObject, // File content or stream - 'verify' => false // Disable SSL verification (only for testing purposes) + 'body' => $fileObject, + 'verify' => false // Disable SSL verification (only for testing purposes) ]); return [ @@ -102,7 +128,6 @@ class NextCloudHelper } } - public static function getFileUrl($filePath) { $baseUrl = env('NEXT_CLOUD_URL'); @@ -114,7 +139,24 @@ class NextCloudHelper // Return the full accessible URL return rtrim($baseUrl, '/') . '/' . $relativePath; } - + + + public static function getNextcloudFile($filePath) + { + // Check if the file exists + if (Storage::disk('webdav')->exists($filePath)) { + // Get the file contents + $content = Storage::disk('webdav')->get($filePath); + + // Return the file as a response for download + return response($content) + ->header('Content-Type', 'application/pdf') + ->header('Content-Disposition', 'inline; filename="' . basename($filePath) . '"'); + } else { + return response()->json(['error' => 'File not found'], 404); + } + } + /** * Create a user in Nextcloud. * diff --git a/app/Helpers/WhatsappHelper.php b/app/Helpers/WhatsappHelper.php index 6a3fe68..ed06a60 100644 --- a/app/Helpers/WhatsappHelper.php +++ b/app/Helpers/WhatsappHelper.php @@ -59,4 +59,30 @@ class WhatsappHelper return $response->getBody()->getContents(); } + + public static function finalApprove($phones, $expense_number) + { + $client = new Client(); + + $data = []; + foreach ($phones as $phone) { + $data[] = [ + 'phone' => $phone, + 'message' => 'Pengajuan pengeluaran anda dengan nomor *' . $expense_number . '* telah ditutup karena telah selesai diproses. Silahkan buka website untuk melihat detailnya.', + 'source' => 'web' + ]; + } + + $response = $client->post(env('WABLAS_HOST') . '/api/v2/send-message', [ + 'headers' => [ + 'Authorization' => env('WABLAS_TOKEN'), + 'Content-Type' => 'application/json' + ], + 'json' => [ + 'data' => $data + ] + ]); + + return $response->getBody()->getContents(); + } } diff --git a/app/Http/Controllers/Backend/AdminsController.php b/app/Http/Controllers/Backend/AdminsController.php index c25a3c6..480560b 100644 --- a/app/Http/Controllers/Backend/AdminsController.php +++ b/app/Http/Controllers/Backend/AdminsController.php @@ -17,6 +17,8 @@ use App\Models\FormEntertaimentPresentation; use App\Models\FormVehicleRunningCost; use App\Models\FormOthers; use App\Models\FormMeetingSeminar; +use App\Models\UserHasCabang; +use App\Models\Cabang; class AdminsController extends Controller { @@ -24,6 +26,7 @@ class AdminsController extends Controller public function index(): Renderable { $this->checkAuthorization(auth()->user(), ['admin.view']); + session()->put('redirect_url', route('admin.admins.index')); $pageInfo = [ 'title' => 'User Access List', @@ -33,7 +36,7 @@ class AdminsController extends Controller return view('backend.pages.admins.index', [ 'admins' => Admin::all(), - 'pageInfo' => $pageInfo + 'pageInfo' => $pageInfo, ]); } @@ -49,7 +52,8 @@ class AdminsController extends Controller return view('backend.pages.admins.create', [ 'roles' => Role::all(), - 'pageInfo' => $pageInfo + 'pageInfo' => $pageInfo, + 'cabangs' => Cabang::all() ]); } @@ -65,6 +69,14 @@ class AdminsController extends Controller $admin->phone = $request->phone; $admin->save(); + // Assign the user to a cabang + if($request->cabang_id) { + UserHasCabang::create([ + 'user_id' => $admin->id, + 'cabang_id' => $request->cabang_id + ]); + } + if ($request->roles) { $admin->assignRole($request->roles); } @@ -81,7 +93,7 @@ class AdminsController extends Controller // } session()->flash('success', 'Admin has been created.'); - return redirect()->route('admin.admins.index'); + return redirect()->back(); } public function edit(int $id): Renderable @@ -99,7 +111,8 @@ class AdminsController extends Controller return view('backend.pages.admins.edit', [ 'admin' => $admin, 'roles' => Role::all(), - 'pageInfo' => $pageInfo + 'pageInfo' => $pageInfo, + 'cabangs' => Cabang::all() ]); } @@ -122,8 +135,14 @@ class AdminsController extends Controller $admin->assignRole($request->roles); } + // Update the user's cabang + if($request->cabang_id) { + $userHasCabang = UserHasCabang::where('user_id', $admin->id)->first(); + $userHasCabang ? $userHasCabang->update(['cabang_id' => $request->cabang_id]) : UserHasCabang::create(['user_id' => $admin->id, 'cabang_id' => $request->cabang_id]); + } + session()->flash('success', 'Admin has been updated.'); - return redirect()->route('admin.admins.index'); + return redirect()->back(); } public function expense($user_id) @@ -143,6 +162,8 @@ class AdminsController extends Controller 'form_meeting_seminar' => $formMeetingSeminar, ]; + session()->put('redirect_url', route('admin.admins.expense', $user_id)); + // Pass the forms and page information to the view return view('backend.pages.admins.expense', [ 'pageInfo' => [ @@ -160,6 +181,6 @@ class AdminsController extends Controller $admin = Admin::findOrFail($id); $admin->delete(); session()->flash('success', 'Admin has been deleted.'); - return redirect()->route('admin.admins.index'); + return redirect()->back(); } } \ No newline at end of file diff --git a/app/Http/Controllers/Backend/RolesController.php b/app/Http/Controllers/Backend/RolesController.php index 07affb2..914d67b 100644 --- a/app/Http/Controllers/Backend/RolesController.php +++ b/app/Http/Controllers/Backend/RolesController.php @@ -17,6 +17,8 @@ class RolesController extends Controller public function index(): Renderable { $this->checkAuthorization(auth()->user(), ['role.view']); + session()->put('redirect_url', route('admin.roles.index')); + $pageInfo = [ 'title' => 'List Roles', 'sub_title' => 'List All User Roles', @@ -59,7 +61,7 @@ class RolesController extends Controller } session()->flash('success', 'Role has been created.'); - return redirect()->route('admin.roles.index'); + return redirect()->back(); } public function edit(int $id): Renderable|RedirectResponse @@ -104,7 +106,7 @@ class RolesController extends Controller } session()->flash('success', 'Role has been updated.'); - return redirect()->route('admin.roles.index'); + return redirect()->back(); } public function destroy(int $id): RedirectResponse @@ -119,6 +121,6 @@ class RolesController extends Controller $role->delete(); session()->flash('success', 'Role has been deleted.'); - return redirect()->route('admin.roles.index'); + return redirect()->back(); } } \ No newline at end of file diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php index 48f43c8..6356a48 100644 --- a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php +++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php @@ -17,6 +17,7 @@ use Illuminate\Support\Str; use Illuminate\Support\Facades\Mail; use App\Mail\ExpenseApproved; use App\Mail\ExpenseRejected; +use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; class FormEntertainmentPresentationController extends Controller @@ -25,16 +26,28 @@ class FormEntertainmentPresentationController extends Controller { $this->checkAuthorization(auth()->user(), ['forms.entertainment.view']); + // get user role // get user role $role = auth()->user()->getRoleNames()[0]; - $forms = null; + $forms = FormEntertaimentPresentation::get(); - if($role == 'Marketing Information System' || $role == 'superadmin') { - $forms = FormEntertaimentPresentation::get(); - } else { - $forms = FormEntertaimentPresentation::where('user_id', auth()->user()->id)->get(); + if ($role == 'Admin Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + $forms = $forms->whereIn('user_id', $userIds); + } + } + else { + $forms = $forms->where('user_id', auth()->user()->id); } + session()->put('redirect_url', route('forms.entertainment')); return view('backend.pages.forms.entertainment.index', [ 'forms' => $forms ]); @@ -59,7 +72,7 @@ class FormEntertainmentPresentationController extends Controller 'name' => 'required', 'alamat' => 'required', 'nik_or_npwp' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -163,7 +176,7 @@ class FormEntertainmentPresentationController extends Controller 'name' => 'required', 'alamat' => 'required', 'nik_or_npwp' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -256,8 +269,8 @@ class FormEntertainmentPresentationController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; @@ -304,13 +317,48 @@ class FormEntertainmentPresentationController extends Controller 'status' => 'Closed' ]); + $heads = $form->user->getCabangAndRegionHead(); + $name = $form->user->name; + $expense_number = $form->expense_number; + $tanggal = $form->tanggal; + $total = $form->total; + + // Collect all recipients + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; + + if ($heads['cabang_head']) { + $recipients[] = $heads['cabang_head']['email']; + $phoneNumbers[] = $heads['cabang_head']['phone']; + } + + if ($heads['region_head']) { + $recipients[] = $heads['region_head']['email']; + $phoneNumbers[] = $heads['region_head']['phone']; + } + + // Remove duplicate email addresses, if any + $recipients = array_unique($recipients); + $phoneNumbers = array_unique($phoneNumbers); + + // Send bulk email + Mail::to($recipients)->send(new FinalApprove( + $name, + $expense_number, + $tanggal, + $total + )); + + // send whatsapp message + WhatsappHelper::finalApprove($phoneNumbers, $expense_number); + session()->flash('success', 'Form has been final approved.'); return redirect()->back(); } public function open($id) { - $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + $this->checkAuthorization(auth()->user(), ['final_approval.open']); $form = FormEntertaimentPresentation::findOrfail($id); $form->update([ @@ -339,8 +387,8 @@ class FormEntertainmentPresentationController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php index 363f486..0af0ff7 100644 --- a/app/Http/Controllers/Forms/FormMeetingSeminarController.php +++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php @@ -17,6 +17,7 @@ use Illuminate\Support\Str; use Illuminate\Support\Facades\Mail; use App\Mail\ExpenseApproved; use App\Mail\ExpenseRejected; +use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; class FormMeetingSeminarController extends Controller @@ -25,16 +26,28 @@ class FormMeetingSeminarController extends Controller { $this->checkAuthorization(auth()->user(), ['forms.meeting.view']); + // get user role // get user role $role = auth()->user()->getRoleNames()[0]; - $forms = null; + $forms = FormMeetingSeminar::get(); - if($role == 'Marketing Information System' || $role == 'superadmin') { - $forms = FormMeetingSeminar::get(); - } else { - $forms = FormMeetingSeminar::where('user_id', auth()->user()->id)->get(); + if ($role == 'Admin Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + $forms = $forms->whereIn('user_id', $userIds); + } + } + else { + $forms = $forms->where('user_id', auth()->user()->id); } + session()->put('redirect_url', route('forms.meeting')); return view('backend.pages.forms.meeting.index', [ 'forms' => $forms ]); @@ -55,7 +68,7 @@ class FormMeetingSeminarController extends Controller 'allowance' => 'required', 'transport_ankot' => 'required', 'hotel' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -152,7 +165,7 @@ class FormMeetingSeminarController extends Controller 'allowance' => 'required', 'transport_ankot' => 'required', 'hotel' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -242,8 +255,8 @@ class FormMeetingSeminarController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; @@ -290,13 +303,48 @@ class FormMeetingSeminarController extends Controller 'status' => 'Closed' ]); + $heads = $form->user->getCabangAndRegionHead(); + $name = $form->user->name; + $expense_number = $form->expense_number; + $tanggal = $form->tanggal; + $total = $form->total; + + // Collect all recipients + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; + + if ($heads['cabang_head']) { + $recipients[] = $heads['cabang_head']['email']; + $phoneNumbers[] = $heads['cabang_head']['phone']; + } + + if ($heads['region_head']) { + $recipients[] = $heads['region_head']['email']; + $phoneNumbers[] = $heads['region_head']['phone']; + } + + // Remove duplicate email addresses, if any + $recipients = array_unique($recipients); + $phoneNumbers = array_unique($phoneNumbers); + + // Send bulk email + Mail::to($recipients)->send(new FinalApprove( + $name, + $expense_number, + $tanggal, + $total + )); + + // send whatsapp message + WhatsappHelper::finalApprove($phoneNumbers, $expense_number); + session()->flash('success', 'Form has been final approved.'); return redirect()->back(); } public function open($id) { - $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + $this->checkAuthorization(auth()->user(), ['final_approval.open']); $form = FormMeetingSeminar::findOrfail($id); $form->update([ @@ -325,8 +373,8 @@ class FormMeetingSeminarController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php index ba4ec54..71bfc8e 100644 --- a/app/Http/Controllers/Forms/FormOtherController.php +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -17,6 +17,7 @@ use App\Helpers\NextCloudHelper; use Illuminate\Support\Facades\Mail; use App\Mail\ExpenseApproved; use App\Mail\ExpenseRejected; +use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; class FormOtherController extends Controller @@ -29,12 +30,27 @@ class FormOtherController extends Controller $role = auth()->user()->getRoleNames()[0]; $forms = null; - if($role == 'Marketing Information System' || $role == 'superadmin') { - $forms = FormOthers::get(); - } else { - $forms = FormOthers::where('user_id', auth()->user()->id)->get(); + // get user role + $role = auth()->user()->getRoleNames()[0]; + $forms = FormOthers::get(); + + if ($role == 'Admin Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + $forms = $forms->whereIn('user_id', $userIds); + } + } + else { + $forms = $forms->where('user_id', auth()->user()->id); } + session()->put('redirect_url', route('forms.other')); return view('backend.pages.forms.other.index', [ 'forms' => $forms ]); @@ -58,7 +74,7 @@ class FormOtherController extends Controller 'tanggal' => 'required|date', 'keterangan' => 'required', 'total' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -157,7 +173,7 @@ class FormOtherController extends Controller 'tanggal' => 'required|date', 'keterangan' => 'required', 'total' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -247,8 +263,8 @@ class FormOtherController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; @@ -295,13 +311,48 @@ class FormOtherController extends Controller 'status' => 'Closed' ]); + $heads = $form->user->getCabangAndRegionHead(); + $name = $form->user->name; + $expense_number = $form->expense_number; + $tanggal = $form->tanggal; + $total = $form->total; + + // Collect all recipients + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; + + if ($heads['cabang_head']) { + $recipients[] = $heads['cabang_head']['email']; + $phoneNumbers[] = $heads['cabang_head']['phone']; + } + + if ($heads['region_head']) { + $recipients[] = $heads['region_head']['email']; + $phoneNumbers[] = $heads['region_head']['phone']; + } + + // Remove duplicate email addresses, if any + $recipients = array_unique($recipients); + $phoneNumbers = array_unique($phoneNumbers); + + // Send bulk email + Mail::to($recipients)->send(new FinalApprove( + $name, + $expense_number, + $tanggal, + $total + )); + + // send whatsapp message + WhatsappHelper::finalApprove($phoneNumbers, $expense_number); + session()->flash('success', 'Form has been final approved.'); return redirect()->back(); } public function open($id) { - $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + $this->checkAuthorization(auth()->user(), ['final_approval.open']); $form = FormOthers::findOrfail($id); $form->update([ @@ -330,8 +381,8 @@ class FormOtherController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index 0697156..4ad9549 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -17,6 +17,7 @@ use Illuminate\Support\Str; use Illuminate\Support\Facades\Mail; use App\Mail\ExpenseApproved; use App\Mail\ExpenseRejected; +use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; class FormUpCountryController extends Controller @@ -27,14 +28,25 @@ class FormUpCountryController extends Controller // get user role $role = auth()->user()->getRoleNames()[0]; - $forms = null; + $forms = FormUpCountry::get(); - if($role == 'Marketing Information System' || $role == 'superadmin') { - $forms = FormUpCountry::with('rayon')->get(); - } else { - $forms = FormUpCountry::with('rayon')->where('user_id', auth()->user()->id)->get(); + if ($role == 'Admin Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + $forms = $forms->whereIn('user_id', $userIds); + } + } + else { + $forms = $forms->where('user_id', auth()->user()->id); } + session()->put('redirect_url', route('forms.up-country')); return view('backend.pages.forms.upcountry.index', [ 'forms' => $forms ]); @@ -61,7 +73,7 @@ class FormUpCountryController extends Controller 'allowance' => 'required', 'transport_dalkot' => 'required', 'transport_ankot' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -137,8 +149,6 @@ class FormUpCountryController extends Controller ]); session()->flash('success', 'Form has been created.'); - session()->flash('redirect_url', route('forms.up-country')); - return redirect()->back(); } @@ -171,7 +181,7 @@ class FormUpCountryController extends Controller 'transport_dalkot' => 'required', 'transport_ankot' => 'required', 'hotel' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -266,8 +276,8 @@ class FormUpCountryController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; @@ -314,8 +324,8 @@ class FormUpCountryController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; @@ -362,13 +372,48 @@ class FormUpCountryController extends Controller 'status' => 'Closed' ]); + $heads = $form->user->getCabangAndRegionHead(); + $name = $form->user->name; + $expense_number = $form->expense_number; + $tanggal = $form->tanggal; + $total = $form->total; + + // Collect all recipients + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; + + if ($heads['cabang_head']) { + $recipients[] = $heads['cabang_head']['email']; + $phoneNumbers[] = $heads['cabang_head']['phone']; + } + + if ($heads['region_head']) { + $recipients[] = $heads['region_head']['email']; + $phoneNumbers[] = $heads['region_head']['phone']; + } + + // Remove duplicate email addresses, if any + $recipients = array_unique($recipients); + $phoneNumbers = array_unique($phoneNumbers); + + // Send bulk email + Mail::to($recipients)->send(new FinalApprove( + $name, + $expense_number, + $tanggal, + $total + )); + + // send whatsapp message + WhatsappHelper::finalApprove($phoneNumbers, $expense_number); + session()->flash('success', 'Form has been final approved.'); return redirect()->back(); } public function open($id) { - $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + $this->checkAuthorization(auth()->user(), ['final_approval.open']); $form = FormUpCountry::findOrfail($id); $form->update([ diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php index cc2d535..30ccd09 100644 --- a/app/Http/Controllers/Forms/FormVehicleController.php +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -17,6 +17,7 @@ use Illuminate\Support\Str; use Illuminate\Support\Facades\Mail; use App\Mail\ExpenseApproved; use App\Mail\ExpenseRejected; +use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; class FormVehicleController extends Controller @@ -27,14 +28,25 @@ class FormVehicleController extends Controller // get user role $role = auth()->user()->getRoleNames()[0]; - $forms = null; + $forms = FormVehicleRunningCost::get(); - if($role == 'Marketing Information System' || $role == 'superadmin') { - $forms = FormVehicleRunningCost::get(); - } else { - $forms = FormVehicleRunningCost::where('user_id', auth()->user()->id)->get(); + if ($role == 'Admin Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + $forms = $forms->whereIn('user_id', $userIds); + } + } + else { + $forms = $forms->where('user_id', auth()->user()->id); } + session()->put('redirect_url', route('forms.vehicle')); return view('backend.pages.forms.vehicle.index', [ 'forms' => $forms ]); @@ -59,7 +71,7 @@ class FormVehicleController extends Controller 'tipe_bensin' => 'required|in:pertalite,pertamax', 'nopol' => 'required', 'keterangan' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -163,7 +175,7 @@ class FormVehicleController extends Controller 'tipe_bensin' => 'required|in:pertalite,pertamax', 'nopol' => 'required', 'keterangan' => 'required', - 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', ]); @@ -257,8 +269,8 @@ class FormVehicleController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; @@ -305,13 +317,48 @@ class FormVehicleController extends Controller 'status' => 'Closed' ]); + $heads = $form->user->getCabangAndRegionHead(); + $name = $form->user->name; + $expense_number = $form->expense_number; + $tanggal = $form->tanggal; + $total = $form->total; + + // Collect all recipients + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; + + if ($heads['cabang_head']) { + $recipients[] = $heads['cabang_head']['email']; + $phoneNumbers[] = $heads['cabang_head']['phone']; + } + + if ($heads['region_head']) { + $recipients[] = $heads['region_head']['email']; + $phoneNumbers[] = $heads['region_head']['phone']; + } + + // Remove duplicate email addresses, if any + $recipients = array_unique($recipients); + $phoneNumbers = array_unique($phoneNumbers); + + // Send bulk email + Mail::to($recipients)->send(new FinalApprove( + $name, + $expense_number, + $tanggal, + $total + )); + + // send whatsapp message + WhatsappHelper::finalApprove($phoneNumbers, $expense_number); + session()->flash('success', 'Form has been final approved.'); return redirect()->back(); } public function open($id) { - $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + $this->checkAuthorization(auth()->user(), ['final_approval.open']); $form = FormVehicleRunningCost::findOrfail($id); $form->update([ @@ -340,8 +387,8 @@ class FormVehicleController extends Controller $total = $form->total; // Collect all recipients - $recipients = [$form->user->email]; - $phoneNumbers = [$form->user->phone]; + $recipients = [$form->user->email, auth()->user()->email]; + $phoneNumbers = [$form->user->phone, auth()->user()->phone]; if ($heads['cabang_head']) { $recipients[] = $heads['cabang_head']['email']; diff --git a/app/Http/Controllers/Master/CategoryController.php b/app/Http/Controllers/Master/CategoryController.php index 8f16487..7d09f3e 100644 --- a/app/Http/Controllers/Master/CategoryController.php +++ b/app/Http/Controllers/Master/CategoryController.php @@ -11,6 +11,8 @@ class CategoryController extends Controller public function index() { $this->checkAuthorization(auth()->user(), ['category.view']); + session()->put('redirect_url', route('admin.category.index')); + return view('backend.pages.master.category.index', [ 'categories' => Kategori::all() ]); @@ -36,7 +38,7 @@ class CategoryController extends Controller ]); session()->flash('success', 'Category has been created.'); - return redirect()->route('admin.category.index'); + return redirect()->back(); } public function edit($id) @@ -61,7 +63,7 @@ class CategoryController extends Controller ]); session()->flash('success', 'Category has been updated.'); - return redirect()->route('admin.category.index'); + return redirect()->back(); } public function destroy($id) @@ -70,6 +72,6 @@ class CategoryController extends Controller Kategori::findOrfail($id)->delete(); session()->flash('success', 'Category has been deleted.'); - return redirect()->route('admin.category.index'); + return redirect()->back(); } } \ No newline at end of file diff --git a/app/Http/Controllers/Master/CostCentreController.php b/app/Http/Controllers/Master/CostCentreController.php index 93900e9..0e8eefa 100644 --- a/app/Http/Controllers/Master/CostCentreController.php +++ b/app/Http/Controllers/Master/CostCentreController.php @@ -11,6 +11,8 @@ class CostCentreController extends Controller public function index() { $this->checkAuthorization(auth()->user(), ['cost.view']); + session()->put('redirect_url', route('admin.cost.index')); + return view('backend.pages.master.cost.index', [ 'costs' => CostCentre::all() ]); @@ -36,7 +38,7 @@ class CostCentreController extends Controller ]); session()->flash('success', 'Cost Centre has been created.'); - return redirect()->route('admin.cost.index'); + return redirect()->back(); } public function edit($id) @@ -61,7 +63,7 @@ class CostCentreController extends Controller ]); session()->flash('success', 'Cost has been updated.'); - return redirect()->route('admin.cost.index'); + return redirect()->back(); } public function destroy($id) @@ -70,6 +72,6 @@ class CostCentreController extends Controller CostCentre::findOrfail($id)->delete(); session()->flash('success', 'Cost has been deleted.'); - return redirect()->route('admin.cost.index'); + return redirect()->back(); } } \ No newline at end of file diff --git a/app/Http/Controllers/Master/RayonController.php b/app/Http/Controllers/Master/RayonController.php index b4873bc..ebb1a5e 100644 --- a/app/Http/Controllers/Master/RayonController.php +++ b/app/Http/Controllers/Master/RayonController.php @@ -11,6 +11,8 @@ class RayonController extends Controller public function index() { $this->checkAuthorization(auth()->user(), ['rayon.view']); + session()->put('redirect_url', route('admin.rayon.index')); + return view('backend.pages.master.rayon.index', [ 'rayons' => Rayon::all() ]); @@ -36,7 +38,7 @@ class RayonController extends Controller ]); session()->flash('success', 'Rayon has been created.'); - return redirect()->route('admin.rayon.index'); + return redirect()->back(); } public function edit($id) @@ -61,7 +63,7 @@ class RayonController extends Controller ]); session()->flash('success', 'Rayon has been updated.'); - return redirect()->route('admin.rayon.index'); + return redirect()->back(); } public function destroy($id) @@ -70,6 +72,6 @@ class RayonController extends Controller Rayon::findOrfail($id)->delete(); session()->flash('success', 'Rayon has been deleted.'); - return redirect()->route('admin.rayon.index'); + return redirect()->back(); } } \ No newline at end of file diff --git a/app/Mail/FinalApprove.php b/app/Mail/FinalApprove.php new file mode 100644 index 0000000..fedb1c2 --- /dev/null +++ b/app/Mail/FinalApprove.php @@ -0,0 +1,61 @@ + $this->name, + 'expense_number' => $this->expense_number, + 'tanggal' => $this->tanggal, + 'total' => $this->total, + ], + ); + } + + /** + * Get the attachments for the message. + * + * @return array + */ + public function attachments(): array + { + return []; + } +} diff --git a/app/Models/Admin.php b/app/Models/Admin.php index 67a2d23..4530d43 100644 --- a/app/Models/Admin.php +++ b/app/Models/Admin.php @@ -104,4 +104,55 @@ class Admin extends Authenticatable 'region_head' => null, ]; } + + public function getMyCabangAndRegion() + { + // Fetch the UserHasCabang entry for this admin + $userHasCabang = $this->hasOne(UserHasCabang::class, 'user_id')->with('cabang')->first(); + + if ($userHasCabang && $userHasCabang->cabang) { + $cabang = $userHasCabang->cabang; + + // Fetch the region + $region = $cabang->region; + + return [ + 'cabang' => $cabang ? $cabang->name : '-', + 'region' => $region ? $region->name : '-', + ]; + } + + return [ + 'cabang' => '-', + 'region' => '-', + ]; + } + + public function getMyCabangAndRegionId() + { + // Fetch the UserHasCabang entry for this admin + $userHasCabang = $this->hasOne(UserHasCabang::class, 'user_id')->with('cabang')->first(); + + if ($userHasCabang && $userHasCabang->cabang) { + $cabang = $userHasCabang->cabang; + + // Fetch the region + $region = $cabang->region; + + return [ + 'cabang' => $cabang ? $cabang->id : '-', + 'region' => $region ? $region->id : '-', + ]; + } + + return [ + 'cabang' => '-', + 'region' => '-', + ]; + } + + public function cabang() + { + return $this->hasOne(UserHasCabang::class, 'user_id')->with('cabang'); + } } diff --git a/composer.json b/composer.json index c646c79..7f35a49 100644 --- a/composer.json +++ b/composer.json @@ -14,9 +14,11 @@ "laravel/tinker": "^2.9", "laravel/ui": "^4.6", "laravolt/avatar": "^6.0", + "league/flysystem-webdav": "^3.29", "nino/laravel-nextcloud-fs": "^2.0", "phpoffice/phpspreadsheet": "^3.5", "singlequote/laravel-webdav": "^1.1", + "spatie/image": "^3.7", "spatie/laravel-html": "^3.11", "spatie/laravel-menu": "^4.2", "spatie/laravel-permission": "^6.10", diff --git a/composer.lock b/composer.lock index fd8a12c..b58983c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "83771e2a711327eac79ef3f7b30673da", + "content-hash": "868009e8371e3394bb5e17f99038a6b8", "packages": [ { "name": "barryvdh/laravel-dompdf", @@ -4856,6 +4856,134 @@ }, "time": "2024-06-07T12:41:19+00:00" }, + { + "name": "spatie/image", + "version": "3.7.4", + "source": { + "type": "git", + "url": "https://github.com/spatie/image.git", + "reference": "d72d1ae07f91a3c1230e064acd4fd8c334ab237b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/image/zipball/d72d1ae07f91a3c1230e064acd4fd8c334ab237b", + "reference": "d72d1ae07f91a3c1230e064acd4fd8c334ab237b", + "shasum": "" + }, + "require": { + "ext-exif": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.2", + "spatie/image-optimizer": "^1.7.5", + "spatie/temporary-directory": "^2.2", + "symfony/process": "^6.4|^7.0" + }, + "require-dev": { + "ext-gd": "*", + "ext-imagick": "*", + "laravel/sail": "^1.34", + "pestphp/pest": "^2.28", + "phpstan/phpstan": "^1.10.50", + "spatie/pest-plugin-snapshots": "^2.1", + "spatie/pixelmatch-php": "^1.0", + "spatie/ray": "^1.40.1", + "symfony/var-dumper": "^6.4|7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Image\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Manipulate images with an expressive API", + "homepage": "https://github.com/spatie/image", + "keywords": [ + "image", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/image/tree/3.7.4" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-10-07T09:03:34+00:00" + }, + { + "name": "spatie/image-optimizer", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/image-optimizer.git", + "reference": "4fd22035e81d98fffced65a8c20d9ec4daa9671c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/4fd22035e81d98fffced65a8c20d9ec4daa9671c", + "reference": "4fd22035e81d98fffced65a8c20d9ec4daa9671c", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.3|^8.0", + "psr/log": "^1.0 | ^2.0 | ^3.0", + "symfony/process": "^4.2|^5.0|^6.0|^7.0" + }, + "require-dev": { + "pestphp/pest": "^1.21", + "phpunit/phpunit": "^8.5.21|^9.4.4", + "symfony/var-dumper": "^4.2|^5.0|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\ImageOptimizer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Easily optimize images using PHP", + "homepage": "https://github.com/spatie/image-optimizer", + "keywords": [ + "image-optimizer", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/image-optimizer/issues", + "source": "https://github.com/spatie/image-optimizer/tree/1.8.0" + }, + "time": "2024-11-04T08:24:54+00:00" + }, { "name": "spatie/laravel-html", "version": "3.11.1", @@ -5205,6 +5333,67 @@ ], "time": "2023-04-12T10:02:12+00:00" }, + { + "name": "spatie/temporary-directory", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/temporary-directory.git", + "reference": "76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a", + "reference": "76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\TemporaryDirectory\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Vanderbist", + "email": "alex@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Easily create, use and destroy temporary directories", + "homepage": "https://github.com/spatie/temporary-directory", + "keywords": [ + "php", + "spatie", + "temporary-directory" + ], + "support": { + "issues": "https://github.com/spatie/temporary-directory/issues", + "source": "https://github.com/spatie/temporary-directory/tree/2.2.1" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-12-25T11:46:58+00:00" + }, { "name": "spatie/url", "version": "2.4.0", diff --git a/config/filesystems.php b/config/filesystems.php index 1de83d6..37a9b06 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -68,6 +68,16 @@ return [ ], ], + 'webdav' => [ + 'driver' => 'webdav', + 'baseUri' => 'https://mkt.tunggal-pharma.com/mktia/remote.php/dav/files/user_dev/', + 'userName' => env('NEXT_CLOUD_USERNAME'), + 'password' => env('NEXT_CLOUD_PASSWORD'), + 'prefix' => '', + 'options' => [ + 'verify' => false, + ], + ], ], /* diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 8bb7a58..56a05e1 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -9,6 +9,7 @@ use Database\Seeds\RayonSeeder; use Database\Seeds\RolePermissionSeeder2; use Database\Seeds\RolePermissionSeeder3; use Database\Seeds\RolePermissionSeeder4; +use Database\Seeds\RolePermissionSeeder5; class DatabaseSeeder extends Seeder { @@ -26,6 +27,7 @@ class DatabaseSeeder extends Seeder // $this->call(RayonSeeder::class); // $this->call(RolePermissionSeeder2::class); // $this->call(RolePermissionSeeder3::class); - $this->call(RolePermissionSeeder4::class); + // $this->call(RolePermissionSeeder4::class); + $this->call(RolePermissionSeeder5::class); } } diff --git a/database/seeds/RolePermissionSeeder5.php b/database/seeds/RolePermissionSeeder5.php new file mode 100644 index 0000000..7459bb0 --- /dev/null +++ b/database/seeds/RolePermissionSeeder5.php @@ -0,0 +1,87 @@ + 'final_approval', + 'permissions' => [ + 'final_approval.open', + ] + ], + [ + 'group_name' => 'audit.trail', + 'permissions' => [ + 'audit.trail.view', + ] + ], + [ + 'group_name' => 'report', + 'permissions' => [ + 'report.view', + ] + ] + ]; + + // Do same for the admin guard for tutorial purposes. + $admin = Admin::where('username', 'superadmin')->first(); + $roleSuperAdmin = $this->maybeCreateSuperAdminRole($admin); + + // Create and Assign Permissions + for ($i = 0; $i < count($permissions); $i++) { + $permissionGroup = $permissions[$i]['group_name']; + for ($j = 0; $j < count($permissions[$i]['permissions']); $j++) { + $permissionExist = Permission::where('name', $permissions[$i]['permissions'][$j])->first(); + if (is_null($permissionExist)) { + $permission = Permission::create( + [ + 'name' => $permissions[$i]['permissions'][$j], + 'group_name' => $permissionGroup, + 'guard_name' => 'admin' + ] + ); + $roleSuperAdmin->givePermissionTo($permission); + $permission->assignRole($roleSuperAdmin); + } + } + } + + // Assign super admin role permission to superadmin user + if ($admin) { + $admin->assignRole($roleSuperAdmin); + } + } + + private function maybeCreateSuperAdminRole($admin): Role + { + if (is_null($admin)) { + $roleSuperAdmin = Role::create(['name' => 'superadmin', 'guard_name' => 'admin']); + } else { + $roleSuperAdmin = Role::where('name', 'superadmin')->where('guard_name', 'admin')->first(); + } + + if (is_null($roleSuperAdmin)) { + $roleSuperAdmin = Role::create(['name' => 'superadmin', 'guard_name' => 'admin']); + } + + return $roleSuperAdmin; + } +} diff --git a/resources/views/backend/layouts/partials/messages.blade.php b/resources/views/backend/layouts/partials/messages.blade.php index 4c582f8..fdca323 100644 --- a/resources/views/backend/layouts/partials/messages.blade.php +++ b/resources/views/backend/layouts/partials/messages.blade.php @@ -11,7 +11,6 @@ @endif - @if (Session::has('success')) @endsection diff --git a/resources/views/backend/pages/forms/meeting/index.blade.php b/resources/views/backend/pages/forms/meeting/index.blade.php index e4c5f49..798045a 100644 --- a/resources/views/backend/pages/forms/meeting/index.blade.php +++ b/resources/views/backend/pages/forms/meeting/index.blade.php @@ -77,155 +77,163 @@
@include('backend.layouts.partials.messages') - - - - - - - - - - - - - - - - @if (auth()->user()->can('approval.approve') || auth()->user()->can('final_approval.approve')) - - @endif - - - - - @php - use App\Helpers\NextCloudHelper; - @endphp - @foreach ($forms as $item) +
+
#NamaTanggalAllowanceTransport AnkotHotelTotalBukti 1Bukti 2Bukti 3Account NumberStatusApprovalAksi
+ - - - - - - - - - - - - + + + + + + + + + + + + @if (auth()->user()->can('approval.approve')) + + @endif + @if (auth()->user()->can('final_approval.approve')) + + @endif + + + + + @php + use App\Helpers\NextCloudHelper; + @endphp + @foreach ($forms as $item) + + + + + + + + - @elseif(auth()->user()->can('final_approval.approve')) + + + + @if (auth()->user()->can('approval.approve')) + + @endif + @if(auth()->user()->can('final_approval.approve')) + + @endif + - @endif - - - @endforeach - -
{{ $loop->iteration }}{{ $item->user->name }}{{ \Carbon\Carbon::parse($item->created_at)->locale('id')->isoFormat('D MMMM Y') }}{{ number_format($item->allowance, 0, ',', '.') }}{{ number_format($item->transport_ankot, 0, ',', '.') }}{{ number_format($item->hotel, 0, ',', '.') }}{{ number_format($item->total, 0, ',', '.') }} - @if ($item->bukti1) - - Download - - @else - - - @endif - - @if ($item->bukti2) - - Download - - @else - - - @endif - - @if ($item->bukti3) - - Download - - @else - - - @endif - {{ $item->account_number }} - @if ($item->status == 'On Progress') - {{ $item->status }} - @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') - {{ $item->status }} - @else - {{ $item->status }} - @endif - #NamaTanggalAllowanceTransport AnkotHotelTotalBukti 1Bukti 2Bukti 3Account NumberStatusApprovalFinal ApprovalAksi
{{ $loop->iteration }}{{ $item->user->name }}{{ \Carbon\Carbon::parse($item->created_at)->locale('id')->isoFormat('D MMMM Y') }}{{ number_format($item->allowance, 0, ',', '.') }}{{ number_format($item->transport_ankot, 0, ',', '.') }}{{ number_format($item->hotel, 0, ',', '.') }}{{ number_format($item->total, 0, ',', '.') }} - {{-- approve / reject button --}} - @if ($item->status == 'On Progress') -
- @csrf - @method('PUT') - -
- -
- @csrf - @method('PUT') - -
+ @if ($item->bukti1) + + Download + @else - @if ($item->approved_at) - {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} - @elseif($item->rejected_at) - {{ \Carbon\Carbon::parse($item->rejected_at)->locale('id')->isoFormat('D MMMM Y') }} - @else - - - @endif + - @endif
- {{-- approve / reject button --}} - @if ($item->status == 'Approved' && $item->approved_at && !$item->final_approved_at) -
- @csrf - @method('PUT') - -
+ @if ($item->bukti2) + + Download + @else - @if ($item->final_approved_at) -
+ - + @endif +
+ @if ($item->bukti3) + + Download + + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif + + {{-- approve / reject button --}} + @if ($item->status == 'On Progress') + @csrf @method('PUT') + + +
+ @csrf + @method('PUT') +
@else - - + @if ($item->approved_at) + {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} + @elseif($item->rejected_at) + {{ \Carbon\Carbon::parse($item->rejected_at)->locale('id')->isoFormat('D MMMM Y') }} + @else + - + @endif @endif +
+ {{-- approve / reject button --}} + @if ($item->status == 'Approved' && $item->approved_at && !$item->final_approved_at) +
+ @csrf + @method('PUT') + +
+ @else + @if ($item->final_approved_at && auth()->user()->can('final_approval.open')) +
+ @csrf + @method('PUT') + +
+ @elseif ($item->final_approved_at) + {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} + @else + - + @endif + @endif +
+ @if (auth()->user()->can('forms.meeting.edit')) + + + + @endif + + @if (auth()->user()->can('forms.meeting.delete')) +
+ @csrf + @method('DELETE') + +
@endif
- @if (auth()->user()->can('forms.meeting.edit')) - - - - @endif - - @if (auth()->user()->can('forms.meeting.delete')) -
- @csrf - @method('DELETE') - -
- @endif -
+ + @endforeach + + +
@@ -235,8 +243,16 @@ @section('scripts') @endsection diff --git a/resources/views/backend/pages/forms/other/index.blade.php b/resources/views/backend/pages/forms/other/index.blade.php index a85fac5..759fe3e 100644 --- a/resources/views/backend/pages/forms/other/index.blade.php +++ b/resources/views/backend/pages/forms/other/index.blade.php @@ -77,153 +77,161 @@
@include('backend.layouts.partials.messages') - - - - - - - - - - - - - - - @if (auth()->user()->can('approval.approve') || auth()->user()->can('final_approval.approve')) - - @endif - - - - - @php - use App\Helpers\NextCloudHelper; - @endphp - @foreach ($forms as $item) +
+
#NamaTanggalJenisKeteranganTotalBukti 1Bukti 2Bukti 3Account NumberStatusApprovalAksi
+ - - - - - - - - - - - + + + + + + + + + + + @if (auth()->user()->can('approval.approve')) + + @endif + @if (auth()->user()->can('final_approval.approve')) + + @endif + + + + + @php + use App\Helpers\NextCloudHelper; + @endphp + @foreach ($forms as $item) + + + + + + + - @elseif(auth()->user()->can('final_approval.approve')) + + + + @if (auth()->user()->can('approval.approve')) + + @endif + @if(auth()->user()->can('final_approval.approve')) + + @endif + - @endif - - - @endforeach - -
{{ $loop->iteration }}{{ $item->user->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}{{ $item->kategori->name }}{{ $item->keterangan }}{{ number_format($item->total, 0, ',', '.') }} - @if ($item->bukti1) - - Download - - @else - - - @endif - - @if ($item->bukti2) - - Download - - @else - - - @endif - - @if ($item->bukti3) - - Download - - @else - - - @endif - {{ $item->account_number }} - @if ($item->status == 'On Progress') - {{ $item->status }} - @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') - {{ $item->status }} - @else - {{ $item->status }} - @endif - #NamaTanggalJenisKeteranganTotalBukti 1Bukti 2Bukti 3Account NumberStatusApprovalFinal ApprovalAksi
{{ $loop->iteration }}{{ $item->user->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}{{ $item->kategori->name }}{{ $item->keterangan }}{{ number_format($item->total, 0, ',', '.') }} - {{-- approve / reject button --}} - @if ($item->status == 'On Progress') -
- @csrf - @method('PUT') - -
- -
- @csrf - @method('PUT') - -
+ @if ($item->bukti1) + + Download + @else - @if ($item->approved_at) - {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} - @elseif($item->rejected_at) - {{ \Carbon\Carbon::parse($item->rejected_at)->locale('id')->isoFormat('D MMMM Y') }} - @else - - - @endif + - @endif
- {{-- approve / reject button --}} - @if ($item->status == 'Approved' && $item->approved_at && !$item->final_approved_at) -
- @csrf - @method('PUT') - -
+ @if ($item->bukti2) + + Download + @else - @if ($item->final_approved_at) -
+ - + @endif +
+ @if ($item->bukti3) + + Download + + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif + + {{-- approve / reject button --}} + @if ($item->status == 'On Progress') + @csrf @method('PUT') + + +
+ @csrf + @method('PUT') +
@else - - + @if ($item->approved_at) + {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} + @elseif($item->rejected_at) + {{ \Carbon\Carbon::parse($item->rejected_at)->locale('id')->isoFormat('D MMMM Y') }} + @else + - + @endif @endif +
+ {{-- approve / reject button --}} + @if ($item->status == 'Approved' && $item->approved_at && !$item->final_approved_at) +
+ @csrf + @method('PUT') + +
+ @else + @if ($item->final_approved_at && auth()->user()->can('final_approval.open')) +
+ @csrf + @method('PUT') + +
+ @elseif ($item->final_approved_at) + {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} + @else + - + @endif + @endif +
+ @if (auth()->user()->can('forms.other.edit')) + + + + @endif + + @if (auth()->user()->can('forms.other.delete')) +
+ @csrf + @method('DELETE') + +
@endif
- @if (auth()->user()->can('forms.other.edit')) - - - - @endif - - @if (auth()->user()->can('forms.other.delete')) -
- @csrf - @method('DELETE') - -
- @endif -
+ + @endforeach + + +
@@ -233,8 +241,16 @@ @section('scripts') @endsection diff --git a/resources/views/backend/pages/forms/upcountry/edit.blade.php b/resources/views/backend/pages/forms/upcountry/edit.blade.php index 5e1279b..158f4ac 100644 --- a/resources/views/backend/pages/forms/upcountry/edit.blade.php +++ b/resources/views/backend/pages/forms/upcountry/edit.blade.php @@ -70,10 +70,6 @@ -
- - -
@@ -95,30 +91,4 @@
- - @endsection diff --git a/resources/views/backend/pages/forms/upcountry/index.blade.php b/resources/views/backend/pages/forms/upcountry/index.blade.php index 2b913f1..a080d90 100644 --- a/resources/views/backend/pages/forms/upcountry/index.blade.php +++ b/resources/views/backend/pages/forms/upcountry/index.blade.php @@ -77,155 +77,163 @@
@include('backend.layouts.partials.messages') - - - - - - - - - - - - - - - - @if (auth()->user()->can('approval.approve') || auth()->user()->can('final_approval.approve')) - - @endif - - - - - @php - use App\Helpers\NextCloudHelper; - @endphp - @foreach ($forms as $item) +
+
#NamaRayonTanggalTujuanJarakTotalBukti 1Bukti 2Bukti 3Account NumberStatusApprovalAksi
+ - - - - - - - - - - - - + + + + + + + + + + + + @if (auth()->user()->can('approval.approve')) + + @endif + @if (auth()->user()->can('final_approval.approve')) + + @endif + + + + + @php + use App\Helpers\NextCloudHelper; + @endphp + @foreach ($forms as $item) + + + + + + + + - @elseif(auth()->user()->can('final_approval.approve')) + + + + @if (auth()->user()->can('approval.approve')) + + @endif + @if(auth()->user()->can('final_approval.approve')) + + @endif + - @endif - - - @endforeach - -
{{ $loop->iteration }}{{ $item->user->name }}{{ $item->rayon->code }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}{{ $item->tujuan }}{{ $item->jarak }} km{{ number_format($item->total, 0, ',', '.') }} - @if ($item->bukti1) - - Download - - @else - - - @endif - - @if ($item->bukti2) - - Download - - @else - - - @endif - - @if ($item->bukti3) - - Download - - @else - - - @endif - {{ $item->account_number }} - @if ($item->status == 'On Progress') - {{ $item->status }} - @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') - {{ $item->status }} - @else - {{ $item->status }} - @endif - #NamaRayonTanggalTujuanJarakTotalBukti 1Bukti 2Bukti 3Account NumberStatusApprovalFinal ApprovalAksi
{{ $loop->iteration }}{{ $item->user->name }}{{ $item->rayon->code }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}{{ $item->tujuan }}{{ $item->jarak }} km{{ number_format($item->total, 0, ',', '.') }} - {{-- approve / reject button --}} - @if ($item->status == 'On Progress') -
- @csrf - @method('PUT') - -
- -
- @csrf - @method('PUT') - -
+ @if ($item->bukti1) + + Download + @else - @if ($item->approved_at) - {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} - @elseif($item->rejected_at) - {{ \Carbon\Carbon::parse($item->rejected_at)->locale('id')->isoFormat('D MMMM Y') }} - @else - - - @endif + - @endif
- {{-- approve / reject button --}} - @if ($item->status == 'Approved' && $item->approved_at && !$item->final_approved_at) -
- @csrf - @method('PUT') - -
+ @if ($item->bukti2) + + Download + @else - @if ($item->final_approved_at) -
+ - + @endif +
+ @if ($item->bukti3) + + Download + + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif + + {{-- approve / reject button --}} + @if ($item->status == 'On Progress') + @csrf @method('PUT') + + +
+ @csrf + @method('PUT') +
@else - - + @if ($item->approved_at) + {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} + @elseif($item->rejected_at) + {{ \Carbon\Carbon::parse($item->rejected_at)->locale('id')->isoFormat('D MMMM Y') }} + @else + - + @endif @endif +
+ {{-- approve / reject button --}} + @if ($item->status == 'Approved' && $item->approved_at && !$item->final_approved_at) +
+ @csrf + @method('PUT') + +
+ @else + @if ($item->final_approved_at && auth()->user()->can('final_approval.open')) +
+ @csrf + @method('PUT') + +
+ @elseif ($item->final_approved_at) + {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} + @else + - + @endif + @endif +
+ @if (auth()->user()->can('forms.country.edit')) + + + + @endif + + @if (auth()->user()->can('forms.country.delete')) +
+ @csrf + @method('DELETE') + +
@endif
- @if (auth()->user()->can('forms.country.edit')) - - - - @endif - - @if (auth()->user()->can('forms.country.delete')) -
- @csrf - @method('DELETE') - -
- @endif -
+ + @endforeach + + +
@@ -235,8 +243,16 @@ @section('scripts') @endsection diff --git a/resources/views/backend/pages/forms/vehicle/index.blade.php b/resources/views/backend/pages/forms/vehicle/index.blade.php index f1f5d80..bea8331 100644 --- a/resources/views/backend/pages/forms/vehicle/index.blade.php +++ b/resources/views/backend/pages/forms/vehicle/index.blade.php @@ -77,157 +77,165 @@
@include('backend.layouts.partials.messages') - - - - - - - - - - - - - - - - - @if (auth()->user()->can('approval.approve') || auth()->user()->can('final_approval.approve')) - - @endif - - - - - @php - use App\Helpers\NextCloudHelper; - @endphp - @foreach ($forms as $item) +
+
#NamaTanggalLiterTotalJarakTipe BensinNomor PolisiBukti 1Bukti 2Bukti 3Account NumberStatusApprovalAksi
+ - - - - - - - - - - - - - + + + + + + + + + + + + + @if (auth()->user()->can('approval.approve')) + + @endif + @if (auth()->user()->can('final_approval.approve')) + + @endif + + + + + @php + use App\Helpers\NextCloudHelper; + @endphp + @foreach ($forms as $item) + + + + + + + + + - @elseif(auth()->user()->can('final_approval.approve')) + + + + @if (auth()->user()->can('approval.approve')) + + @endif + @if(auth()->user()->can('final_approval.approve')) + + @endif + - @endif - - - @endforeach - -
{{ $loop->iteration }}{{ $item->user->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('dddd, D MMMM Y HH:mm:ss') }}{{ $item->liter }}{{ number_format($item->total, 0, ',', '.') }}{{ $item->jarak }}{{ $item->tipe_bensin }}{{ $item->nopol }} - @if ($item->bukti1) - - Download - - @else - - - @endif - - @if ($item->bukti2) - - Download - - @else - - - @endif - - @if ($item->bukti3) - - Download - - @else - - - @endif - {{ $item->account_number }} - @if ($item->status == 'On Progress') - {{ $item->status }} - @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') - {{ $item->status }} - @else - {{ $item->status }} - @endif - #NamaTanggalLiterTotalJarakTipe BensinNomor PolisiBukti 1Bukti 2Bukti 3Account NumberStatusApprovalFinal ApprovalAksi
{{ $loop->iteration }}{{ $item->user->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('dddd, D MMMM Y HH:mm:ss') }}{{ $item->liter }}{{ number_format($item->total, 0, ',', '.') }}{{ $item->jarak }}{{ $item->tipe_bensin }}{{ $item->nopol }} - {{-- approve / reject button --}} - @if ($item->status == 'On Progress') -
- @csrf - @method('PUT') - -
- -
- @csrf - @method('PUT') - -
+ @if ($item->bukti1) + + Download + @else - @if ($item->approved_at) - {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} - @elseif($item->rejected_at) - {{ \Carbon\Carbon::parse($item->rejected_at)->locale('id')->isoFormat('D MMMM Y') }} - @else - - - @endif + - @endif
- {{-- approve / reject button --}} - @if ($item->status == 'Approved' && $item->approved_at && !$item->final_approved_at) -
- @csrf - @method('PUT') - -
+ @if ($item->bukti2) + + Download + @else - @if ($item->final_approved_at) -
+ - + @endif +
+ @if ($item->bukti3) + + Download + + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif + + {{-- approve / reject button --}} + @if ($item->status == 'On Progress') + @csrf @method('PUT') + + +
+ @csrf + @method('PUT') +
@else - - + @if ($item->approved_at) + {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} + @elseif($item->rejected_at) + {{ \Carbon\Carbon::parse($item->rejected_at)->locale('id')->isoFormat('D MMMM Y') }} + @else + - + @endif @endif +
+ {{-- approve / reject button --}} + @if ($item->status == 'Approved' && $item->approved_at && !$item->final_approved_at) +
+ @csrf + @method('PUT') + +
+ @else + @if ($item->final_approved_at && auth()->user()->can('final_approval.open')) +
+ @csrf + @method('PUT') + +
+ @elseif ($item->final_approved_at) + {{ \Carbon\Carbon::parse($item->approved_at)->locale('id')->isoFormat('D MMMM Y') }} + @else + - + @endif + @endif +
+ @if (auth()->user()->can('forms.vehicle.edit')) + + + + @endif + + @if (auth()->user()->can('forms.vehicle.delete')) +
+ @csrf + @method('DELETE') + +
@endif
- @if (auth()->user()->can('forms.vehicle.edit')) - - - - @endif - - @if (auth()->user()->can('forms.vehicle.delete')) -
- @csrf - @method('DELETE') - -
- @endif -
+ + @endforeach + + +
@@ -237,8 +245,16 @@ @section('scripts') -@endsection +@endsection \ No newline at end of file diff --git a/resources/views/backend/pages/master/category/index.blade.php b/resources/views/backend/pages/master/category/index.blade.php index 549e40b..c1559e4 100644 --- a/resources/views/backend/pages/master/category/index.blade.php +++ b/resources/views/backend/pages/master/category/index.blade.php @@ -83,10 +83,16 @@ @section('scripts') @endsection diff --git a/resources/views/backend/pages/master/cost/index.blade.php b/resources/views/backend/pages/master/cost/index.blade.php index 6f56b00..8efb131 100644 --- a/resources/views/backend/pages/master/cost/index.blade.php +++ b/resources/views/backend/pages/master/cost/index.blade.php @@ -83,10 +83,16 @@ @section('scripts') @endsection diff --git a/resources/views/backend/pages/master/rayon/index.blade.php b/resources/views/backend/pages/master/rayon/index.blade.php index 6282af8..396b561 100644 --- a/resources/views/backend/pages/master/rayon/index.blade.php +++ b/resources/views/backend/pages/master/rayon/index.blade.php @@ -83,10 +83,16 @@ @section('scripts') @endsection diff --git a/resources/views/backend/pages/roles/index.blade.php b/resources/views/backend/pages/roles/index.blade.php index a1df828..70f44ac 100644 --- a/resources/views/backend/pages/roles/index.blade.php +++ b/resources/views/backend/pages/roles/index.blade.php @@ -100,10 +100,16 @@ @section('scripts') @endsection diff --git a/resources/views/backend/pages/users/index.blade.php b/resources/views/backend/pages/users/index.blade.php index ed2b44c..454ee96 100644 --- a/resources/views/backend/pages/users/index.blade.php +++ b/resources/views/backend/pages/users/index.blade.php @@ -55,6 +55,8 @@ Name Email Roles + Region + Cabang Action @@ -98,24 +100,18 @@ @endsection - @section('scripts') - - - - - - - - + @endsection \ No newline at end of file diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index a0eb504..b43eaf0 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -68,14 +68,16 @@
- -
+ @include('layouts.partials.sidebar') diff --git a/resources/views/layouts/partials/scripts.blade.php b/resources/views/layouts/partials/scripts.blade.php index a619aeb..00d1064 100644 --- a/resources/views/layouts/partials/scripts.blade.php +++ b/resources/views/layouts/partials/scripts.blade.php @@ -9,8 +9,12 @@ - - + +{{-- Datatables --}} + + + + diff --git a/resources/views/layouts/partials/styles.blade.php b/resources/views/layouts/partials/styles.blade.php index 1747e69..4493b0a 100644 --- a/resources/views/layouts/partials/styles.blade.php +++ b/resources/views/layouts/partials/styles.blade.php @@ -5,7 +5,13 @@ - + + {{-- datatables --}} + + + + + @@ -67,3 +73,15 @@ + + diff --git a/resources/views/mail/approved.blade.php b/resources/views/mail/approved.blade.php index 0b937d9..4ac914e 100644 --- a/resources/views/mail/approved.blade.php +++ b/resources/views/mail/approved.blade.php @@ -302,9 +302,6 @@  
- - - Expense Approved diff --git a/resources/views/mail/closed.blade.php b/resources/views/mail/closed.blade.php new file mode 100644 index 0000000..a8c9e97 --- /dev/null +++ b/resources/views/mail/closed.blade.php @@ -0,0 +1,362 @@ + + + + + + Expense Closed + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/views/mail/rejected.blade.php b/resources/views/mail/rejected.blade.php index 9e12216..2707d37 100644 --- a/resources/views/mail/rejected.blade.php +++ b/resources/views/mail/rejected.blade.php @@ -302,9 +302,6 @@  
- - - Expense Rejected