diff --git a/.env b/.env
index d80988b..e49cef4 100644
--- a/.env
+++ b/.env
@@ -68,6 +68,7 @@ AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}"
-NEXT_CLOUD_URL=https://mkt.tunggal-pharma.com/
+NEXT_CLOUD_URL=https://mkt.tunggal-pharma.com
NEXT_CLOUD_USERNAME=user_dev
NEXT_CLOUD_PASSWORD=userdev12345
+NEXT_CLOUD_PATHPREFIX=""
diff --git a/app/Helpers/NextCloudHelper.php b/app/Helpers/NextCloudHelper.php
index cc4391e..49b78ee 100644
--- a/app/Helpers/NextCloudHelper.php
+++ b/app/Helpers/NextCloudHelper.php
@@ -4,6 +4,7 @@ namespace App\Helpers;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
+use Illuminate\Support\Str;
class NextCloudHelper
{
@@ -19,17 +20,78 @@ class NextCloudHelper
public static function createFolder($baseUrl, $username, $password, $folderPath)
{
$client = new Client();
- $url = rtrim($baseUrl, '/') . "/remote.php/dav/files/{$username}/" . ltrim($folderPath, '/');
-
+ $folders = explode('/', ltrim($folderPath, '/')); // Split the folder path into an array
+ $currentPath = ''; // Initialize an empty string to build the path progressively
+
+ foreach ($folders as $folder) {
+ $currentPath .= '/' . $folder; // Add the current folder to the path
+
+ // Build the URL to create the folder
+ $url = rtrim($baseUrl, '/') . "/mktia/remote.php/dav/files/{$username}" . $currentPath;
+
+ try {
+ // Attempt to create the current folder
+ $response = $client->request('MKCOL', $url, [
+ 'auth' => [$username, $password],
+ 'verify' => false // Disable SSL verification (only for testing purposes)
+ ]);
+
+ // If folder creation is successful, proceed to the next folder
+ if ($response->getStatusCode() === 201) {
+ echo "Folder '$currentPath' created successfully.\n";
+ }
+ } catch (RequestException $e) {
+ // Handle errors, such as folder already existing
+ if ($e->getCode() === 409) {
+ echo "Folder '$currentPath' already exists.\n";
+ } else {
+ // For other errors
+ echo "Failed to create folder '$currentPath': " . $e->getMessage() . "\n";
+ }
+ }
+ }
+
+ return [
+ 'success' => true,
+ 'status' => 200,
+ 'message' => 'All folders processed.'
+ ];
+ }
+
+ public static function uploadFile($folderPath, $fileObject, $fileName)
+ {
+ $baseUrl = env('NEXT_CLOUD_URL');
+ $username = env('NEXT_CLOUD_USERNAME');
+ $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,
+ 'status' => $folderResponse['status'],
+ 'message' => 'Failed to create folder: ' . $folderResponse['message']
+ ];
+ }
+
+ $client = new Client();
+ $url = rtrim($baseUrl, '/') . "/mktia/remote.php/dav/files/{$username}/" . ltrim($folderPath, '/') . '/' . $fileName;
+
try {
- $response = $client->request('MKCOL', $url, [
- 'auth' => [$username, $password]
+ // If fileObject is a stream, we can use it directly
+ // If it's raw content, ensure it's being properly passed
+ $response = $client->request('PUT', $url, [
+ 'auth' => [$username, $password],
+ 'body' => $fileObject, // File content or stream
+ 'verify' => false // Disable SSL verification (only for testing purposes)
]);
return [
'success' => true,
'status' => $response->getStatusCode(),
- 'message' => 'Folder created successfully.'
+ 'message' => 'File uploaded successfully.'
];
} catch (RequestException $e) {
return [
@@ -39,8 +101,19 @@ class NextCloudHelper
];
}
}
-
-
+
+
+ public static function getFileUrl($filePath)
+ {
+ $baseUrl = env('NEXT_CLOUD_URL');
+ $username = env('NEXT_CLOUD_USERNAME');
+
+ // Build the user-specific WebDAV file URL
+ $relativePath = "/mktia/remote.php/dav/files/{$username}/" . ltrim($filePath, '/');
+
+ // Return the full accessible URL
+ return rtrim($baseUrl, '/') . '/' . $relativePath;
+ }
/**
* Create a user in Nextcloud.
diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php
new file mode 100644
index 0000000..5c5e62e
--- /dev/null
+++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php
@@ -0,0 +1,229 @@
+checkAuthorization(auth()->user(), ['forms.entertainment.view']);
+
+ $forms = FormEntertaimentPresentation::where('user_id', auth()->user()->id)->get();
+ return view('backend.pages.forms.entertainment.index', [
+ 'forms' => $forms
+ ]);
+ }
+
+ public function create()
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.entertainment.create']);
+
+ return view('backend.pages.forms.entertainment.create');
+ }
+
+ public function store(Request $request)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.entertainment.create']);
+
+ $request->validate([
+ 'tanggal' => 'required',
+ 'jenis' => 'required|in:entertainment,presentation,sponsorship',
+ 'keterangan' => 'required',
+ 'total' => 'required',
+ 'name' => 'required',
+ 'alamat' => 'required',
+ 'nik_or_npwp' => 'required',
+ 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
+ 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
+ 'bukti3' => 'nullable|file|mimes:pdf',
+ ]);
+
+ $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
+ $region = Region::where('id', $cabang->region_id)->first();
+ $kategori = Kategori::where('name', 'Entertainment & Presentation')->first();
+
+ $filePaths = [];
+ $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/entertainment';
+
+ if ($request->hasFile('bukti1')) {
+ $bukti1 = $request->file('bukti1');
+ $filename = Str::uuid() . '.' . $bukti1->extension();
+
+ $filePaths['bukti1'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti1->getContent(),
+ $filename
+ );
+
+ }
+ if ($request->hasFile('bukti2')) {
+ $bukti2 = $request->file('bukti2');
+ $filename = Str::uuid() . '.' . $bukti2->extension();
+
+ $filePaths['bukti2'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti2->getContent(),
+ $filename
+ );
+ }
+ if ($request->hasFile('bukti3')) {
+ $bukti3 = $request->file('bukti3');
+ $filename = Str::uuid() . '.' . $bukti3->extension();
+
+ $filePaths['bukti3'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti3->getContent(),
+ $filename
+ );
+ }
+
+ // Generate sequence number and expense number
+ $sequence_number = FormEntertaimentPresentation::withTrashed()->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-ETY-' . date('ym') . '%')->count() + 1;
+ $formatted_sequence_number = str_pad($sequence_number, 4, '0', STR_PAD_LEFT);
+ $expense_number = $region->code . '-' . $cabang->code . '-ETY-' . date('ym') . $formatted_sequence_number;
+
+ // Save the form data
+ FormEntertaimentPresentation::create([
+ 'expense_number' => $expense_number,
+ 'user_id' => auth()->user()->id,
+ 'tanggal' => $request->tanggal,
+ 'jenis' => $request->jenis,
+ 'keterangan' => $request->keterangan,
+ 'total' => $request->total,
+ 'name' => $request->name,
+ 'alamat' => $request->alamat,
+ 'nik_or_npwp' => $request->nik_or_npwp,
+ 'bukti1' => $filePaths['bukti1'] ?? null,
+ 'bukti2' => $filePaths['bukti2'] ?? null,
+ 'bukti3' => $filePaths['bukti3'] ?? null,
+ 'account_number' => $kategori->account_number,
+ 'status' => 'On Progress',
+ ]);
+
+ session()->flash('success', 'Form has been created.');
+ return redirect()->route('forms.entertainment');
+ }
+
+ public function edit($id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.entertainment.edit']);
+
+ $form = FormEntertaimentPresentation::findOrfail($id);
+ return view('backend.pages.forms.entertainment.edit', [
+ 'form' => $form
+ ]);
+ }
+
+ public function update(Request $request, $id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.entertainment.edit']);
+
+ $request->validate([
+ 'tanggal' => 'required',
+ 'jenis' => 'required|in:entertainment,presentation,sponsorship',
+ 'keterangan' => 'required',
+ 'total' => 'required',
+ 'name' => 'required',
+ 'alamat' => 'required',
+ 'nik_or_npwp' => 'required',
+ 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
+ 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
+ 'bukti3' => 'nullable|file|mimes:pdf',
+ ]);
+
+ $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
+ $region = Region::where('id', $cabang->region_id)->first();
+ $kategori = Kategori::where('name', 'Entertainment & Presentation')->first();
+
+ $filePaths = [];
+ $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/entertainment';
+
+ if ($request->hasFile('bukti1')) {
+ $bukti1 = $request->file('bukti1');
+ $filename = Str::uuid() . '.' . $bukti1->extension();
+
+ $filePaths['bukti1'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti1->getContent(),
+ $filename
+ );
+
+ }
+ if ($request->hasFile('bukti2')) {
+ $bukti2 = $request->file('bukti2');
+ $filename = Str::uuid() . '.' . $bukti2->extension();
+
+ $filePaths['bukti2'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti2->getContent(),
+ $filename
+ );
+ }
+ if ($request->hasFile('bukti3')) {
+ $bukti3 = $request->file('bukti3');
+ $filename = Str::uuid() . '.' . $bukti3->extension();
+
+ $filePaths['bukti3'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti3->getContent(),
+ $filename
+ );
+ }
+
+ // Save the form data
+ $form = FormEntertaimentPresentation::findOrfail($id);
+ $form->update([
+ 'tanggal' => $request->tanggal,
+ 'jenis' => $request->jenis,
+ 'keterangan' => $request->keterangan,
+ 'total' => $request->total,
+ 'name' => $request->name,
+ 'alamat' => $request->alamat,
+ 'nik_or_npwp' => $request->nik_or_npwp,
+ 'bukti1' => $filePaths['bukti1'] ?? null,
+ 'bukti2' => $filePaths['bukti2'] ?? null,
+ 'bukti3' => $filePaths['bukti3'] ?? null,
+ 'account_number' => $kategori->account_number,
+ 'status' => 'On Progress',
+ ]);
+
+ session()->flash('success', 'Form has been updated.');
+ return redirect()->route('forms.entertainment');
+ }
+
+ public function destroy($id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.entertainment.delete']);
+
+ $form = FormEntertaimentPresentation::findOrfail($id);
+ $form->delete();
+
+ session()->flash('success', 'Form has been deleted.');
+ return redirect()->route('forms.entertainment');
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php
new file mode 100644
index 0000000..90b1ee1
--- /dev/null
+++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php
@@ -0,0 +1,217 @@
+checkAuthorization(auth()->user(), ['forms.meeting.view']);
+
+ $forms = FormMeetingSeminar::where('user_id', auth()->user()->id)->get();
+ return view('backend.pages.forms.meeting.index', [
+ 'forms' => $forms
+ ]);
+ }
+
+ public function create()
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.meeting.create']);
+
+ return view('backend.pages.forms.meeting.create');
+ }
+
+ public function store(Request $request)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.meeting.create']);
+
+ $request->validate([
+ 'allowance' => 'required',
+ 'transport_ankot' => 'required',
+ 'hotel' => 'required',
+ 'total' => 'required',
+ 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
+ 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
+ 'bukti3' => 'nullable|file|mimes:pdf',
+ ]);
+
+ $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
+ $region = Region::where('id', $cabang->region_id)->first();
+ $kategori = Kategori::where('name', 'Meeting & Seminar')->first();
+
+ $filePaths = [];
+ $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/meeting';
+
+ if ($request->hasFile('bukti1')) {
+ $bukti1 = $request->file('bukti1');
+ $filename = Str::uuid() . '.' . $bukti1->extension();
+
+ $filePaths['bukti1'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti1->getContent(),
+ $filename
+ );
+
+ }
+ if ($request->hasFile('bukti2')) {
+ $bukti2 = $request->file('bukti2');
+ $filename = Str::uuid() . '.' . $bukti2->extension();
+
+ $filePaths['bukti2'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti2->getContent(),
+ $filename
+ );
+ }
+ if ($request->hasFile('bukti3')) {
+ $bukti3 = $request->file('bukti3');
+ $filename = Str::uuid() . '.' . $bukti3->extension();
+
+ $filePaths['bukti3'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti3->getContent(),
+ $filename
+ );
+ }
+
+ // Generate sequence number and expense number
+ $sequence_number = FormMeetingSeminar::withTrashed()->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-MTG-' . date('ym') . '%')->count() + 1;
+ $formatted_sequence_number = str_pad($sequence_number, 4, '0', STR_PAD_LEFT);
+ $expense_number = $region->code . '-' . $cabang->code . '-MTG-' . date('ym') . $formatted_sequence_number;
+
+ // Save the form data
+ FormMeetingSeminar::create([
+ 'expense_number' => $expense_number,
+ 'user_id' => auth()->user()->id,
+ 'allowance' => $request->allowance,
+ 'transport_ankot' => $request->transport_ankot,
+ 'hotel' => $request->hotel,
+ 'total' => $request->total,
+ 'bukti1' => $filePaths['bukti1'] ?? null,
+ 'bukti2' => $filePaths['bukti2'] ?? null,
+ 'bukti3' => $filePaths['bukti3'] ?? null,
+ 'account_number' => $kategori->account_number,
+ 'status' => 'On Progress',
+ ]);
+
+ session()->flash('success', 'Form has been created.');
+ return redirect()->route('forms.meeting');
+ }
+
+ public function edit($id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.meeting.edit']);
+
+ $form = FormMeetingSeminar::findOrfail($id);
+ return view('backend.pages.forms.meeting.edit', [
+ 'form' => $form
+ ]);
+ }
+
+ public function update(Request $request, $id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.meeting.edit']);
+
+ $request->validate([
+ 'allowance' => 'required',
+ 'transport_ankot' => 'required',
+ 'hotel' => 'required',
+ 'total' => 'required',
+ 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
+ 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
+ 'bukti3' => 'nullable|file|mimes:pdf',
+ ]);
+
+ $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
+ $region = Region::where('id', $cabang->region_id)->first();
+ $kategori = Kategori::where('name', 'Meeting & Seminar')->first();
+
+ $filePaths = [];
+ $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/meeting';
+
+ if ($request->hasFile('bukti1')) {
+ $bukti1 = $request->file('bukti1');
+ $filename = Str::uuid() . '.' . $bukti1->extension();
+
+ $filePaths['bukti1'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti1->getContent(),
+ $filename
+ );
+
+ }
+ if ($request->hasFile('bukti2')) {
+ $bukti2 = $request->file('bukti2');
+ $filename = Str::uuid() . '.' . $bukti2->extension();
+
+ $filePaths['bukti2'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti2->getContent(),
+ $filename
+ );
+ }
+ if ($request->hasFile('bukti3')) {
+ $bukti3 = $request->file('bukti3');
+ $filename = Str::uuid() . '.' . $bukti3->extension();
+
+ $filePaths['bukti3'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti3->getContent(),
+ $filename
+ );
+ }
+
+ // Save the form data
+ $form = FormMeetingSeminar::findOrfail($id);
+ $form->update([
+ 'allowance' => $request->allowance,
+ 'transport_ankot' => $request->transport_ankot,
+ 'hotel' => $request->hotel,
+ 'total' => $request->total,
+ 'bukti1' => $filePaths['bukti1'] ?? $form->bukti1,
+ 'bukti2' => $filePaths['bukti2'] ?? $form->bukti2,
+ 'bukti3' => $filePaths['bukti3'] ?? $form->bukti3,
+ 'account_number' => $kategori->account_number,
+ 'status' => 'On Progress',
+ ]);
+
+ session()->flash('success', 'Form has been updated.');
+ return redirect()->route('forms.meeting');
+ }
+
+ public function destroy($id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.meeting.delete']);
+
+ $form = FormMeetingSeminar::findOrfail($id);
+ $form->delete();
+
+ session()->flash('success', 'Form has been deleted.');
+ return redirect()->route('forms.meeting');
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php
index e28fa01..a352504 100644
--- a/app/Http/Controllers/Forms/FormUpCountryController.php
+++ b/app/Http/Controllers/Forms/FormUpCountryController.php
@@ -6,40 +6,235 @@ use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\FormUpCountry;
use App\Models\Rayon;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Storage;
+use App\Models\Region;
+use App\Models\Cabang;
+use App\Models\UserHasCabang;
+use App\Models\Kategori;
+use App\Helpers\NextCloudHelper;
+use Illuminate\Support\Str;
class FormUpCountryController extends Controller
{
public function index()
{
- return view('backend.pages.forms.upcountry.index');
- }
+ $this->checkAuthorization(auth()->user(), ['forms.country.view']);
+
+ $forms = FormUpCountry::with('rayon')->where('user_id', auth()->user()->id)->get();
+ return view('backend.pages.forms.upcountry.index', [
+ 'forms' => $forms
+ ]);
+ }
public function create()
{
+ $this->checkAuthorization(auth()->user(), ['forms.country.create']);
+
return view('backend.pages.forms.upcountry.create', [
'rayons' => Rayon::all()
]);
}
- public function store()
+ public function store(Request $request)
{
+ $this->checkAuthorization(auth()->user(), ['forms.country.create']);
+ $request->validate([
+ 'rayon_id' => 'required|exists:rayon,id',
+ 'tanggal' => 'required',
+ 'tujuan' => 'required',
+ 'jarak' => 'required',
+ 'allowance' => 'required',
+ 'transport_dalkot' => 'required',
+ 'transport_ankot' => 'required',
+ 'hotel' => 'required',
+ 'total' => 'required',
+ 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
+ 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
+ 'bukti3' => 'nullable|file|mimes:pdf',
+ ]);
+
+ $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
+ $region = Region::where('id', $cabang->region_id)->first();
+ $kategori = Kategori::where('name', 'Up Country')->first();
+
+ $filePaths = [];
+ $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/upcountry';
+
+ if ($request->hasFile('bukti1')) {
+ $bukti1 = $request->file('bukti1');
+ $filename = Str::uuid() . '.' . $bukti1->extension();
+
+ $filePaths['bukti1'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti1->getContent(),
+ $filename
+ );
+
+ }
+ if ($request->hasFile('bukti2')) {
+ $bukti2 = $request->file('bukti2');
+ $filename = Str::uuid() . '.' . $bukti2->extension();
+
+ $filePaths['bukti2'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti2->getContent(),
+ $filename
+ );
+ }
+ if ($request->hasFile('bukti3')) {
+ $bukti3 = $request->file('bukti3');
+ $filename = Str::uuid() . '.' . $bukti3->extension();
+
+ $filePaths['bukti3'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti3->getContent(),
+ $filename
+ );
+ }
+
+ // Generate sequence number and expense number
+ $sequence_number = FormUpCountry::withTrashed()->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-UPC-' . date('ym') . '%')->count() + 1;
+ $formatted_sequence_number = str_pad($sequence_number, 4, '0', STR_PAD_LEFT);
+ $expense_number = $region->code . '-' . $cabang->code . '-UPC-' . date('ym') . $formatted_sequence_number;
+
+ // Save the form data
+ FormUpCountry::create([
+ 'expense_number' => $expense_number,
+ 'user_id' => auth()->user()->id,
+ 'rayon_id' => $request->rayon_id,
+ 'tanggal' => $request->tanggal,
+ 'tujuan' => $request->tujuan,
+ 'jarak' => $request->jarak,
+ 'allowance' => $request->allowance,
+ 'transport_dalkot' => $request->transport_dalkot,
+ 'transport_ankot' => $request->transport_ankot,
+ 'hotel' => $request->hotel,
+ 'total' => $request->total,
+ 'bukti1' => $filePaths['bukti1'] ?? null,
+ 'bukti2' => $filePaths['bukti2'] ?? null,
+ 'bukti3' => $filePaths['bukti3'] ?? null,
+ 'account_number' => $kategori->account_number,
+ 'status' => 'On Progress',
+ ]);
+
+ session()->flash('success', 'Form has been created.');
+ return redirect()->route('forms.up-country');
}
- public function edit()
+ public function edit($id)
{
+ $this->checkAuthorization(auth()->user(), ['forms.country.edit']);
+
+ $form = FormUpCountry::with('rayon')->findOrfail($id);
return view('backend.pages.forms.upcountry.edit', [
- 'rayons' => Rayon::all()
+ 'rayons' => Rayon::all(),
+ 'form' => $form
]);
}
- public function update()
+ public function update(Request $request, $id)
{
+ $this->checkAuthorization(auth()->user(), ['forms.country.edit']);
+ $request->validate([
+ 'rayon_id' => 'required|exists:rayon,id',
+ 'tanggal' => 'required',
+ 'tujuan' => 'required',
+ 'jarak' => 'required',
+ 'allowance' => 'required',
+ 'transport_dalkot' => 'required',
+ 'transport_ankot' => 'required',
+ 'hotel' => 'required',
+ 'total' => 'required',
+ 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
+ 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
+ 'bukti3' => 'nullable|file|mimes:pdf',
+ ]);
+
+ $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
+ $region = Region::where('id', $cabang->region_id)->first();
+ $kategori = Kategori::where('name', 'Up Country')->first();
+
+ $filePaths = [];
+ $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/upcountry';
+
+ if ($request->hasFile('bukti1')) {
+ $bukti1 = $request->file('bukti1');
+ $filename = Str::uuid() . '.' . $bukti1->extension();
+
+ $filePaths['bukti1'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti1->getContent(),
+ $filename
+ );
+
+ }
+ if ($request->hasFile('bukti2')) {
+ $bukti2 = $request->file('bukti2');
+ $filename = Str::uuid() . '.' . $bukti2->extension();
+
+ $filePaths['bukti2'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti2->getContent(),
+ $filename
+ );
+ }
+ if ($request->hasFile('bukti3')) {
+ $bukti3 = $request->file('bukti3');
+ $filename = Str::uuid() . '.' . $bukti3->extension();
+
+ $filePaths['bukti3'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti3->getContent(),
+ $filename
+ );
+ }
+
+ // Save the form data
+ $form = FormUpCountry::findOrfail($id);
+ $form->update([
+ 'rayon_id' => $request->rayon_id,
+ 'tanggal' => $request->tanggal,
+ 'tujuan' => $request->tujuan,
+ 'jarak' => $request->jarak,
+ 'allowance' => $request->allowance,
+ 'transport_dalkot' => $request->transport_dalkot,
+ 'transport_ankot' => $request->transport_ankot,
+ 'hotel' => $request->hotel,
+ 'total' => $request->total,
+ 'bukti1' => $filePaths['bukti1'] ?? $form->bukti1,
+ 'bukti2' => $filePaths['bukti2'] ?? $form->bukti2,
+ 'bukti3' => $filePaths['bukti3'] ?? $form->bukti3,
+ 'account_number' => $kategori->account_number,
+ 'status' => 'On Progress',
+ ]);
+
+ session()->flash('success', 'Form has been updated.');
+ return redirect()->route('forms.up-country');
}
- public function destroy()
+ public function destroy($id)
{
+ $this->checkAuthorization(auth()->user(), ['forms.country.delete']);
+
+ $form = FormUpCountry::findOrfail($id);
+ $form->delete();
+ session()->flash('success', 'Form has been deleted.');
+ return redirect()->route('forms.up-country');
}
}
\ No newline at end of file
diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php
new file mode 100644
index 0000000..b35716e
--- /dev/null
+++ b/app/Http/Controllers/Forms/FormVehicleController.php
@@ -0,0 +1,229 @@
+checkAuthorization(auth()->user(), ['forms.vehicle.view']);
+
+ $forms = FormVehicleRunningCost::where('user_id', auth()->user()->id)->get();
+ return view('backend.pages.forms.vehicle.index', [
+ 'forms' => $forms
+ ]);
+ }
+
+ public function create()
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.vehicle.create']);
+
+ return view('backend.pages.forms.vehicle.create');
+ }
+
+ public function store(Request $request)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.vehicle.create']);
+
+ $request->validate([
+ 'tanggal' => 'required',
+ 'liter' => 'required',
+ 'harga' => 'required',
+ 'jarak' => 'required',
+ 'tipe_bensin' => 'required|in:pertalite,pertamax',
+ 'nopol' => 'required',
+ 'keterangan' => 'required',
+ 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
+ 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
+ 'bukti3' => 'nullable|file|mimes:pdf',
+ ]);
+
+ $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
+ $region = Region::where('id', $cabang->region_id)->first();
+ $kategori = Kategori::where('name', 'Vehicle Running Cost')->first();
+
+ $filePaths = [];
+ $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/vehicle';
+
+ if ($request->hasFile('bukti1')) {
+ $bukti1 = $request->file('bukti1');
+ $filename = Str::uuid() . '.' . $bukti1->extension();
+
+ $filePaths['bukti1'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti1->getContent(),
+ $filename
+ );
+
+ }
+ if ($request->hasFile('bukti2')) {
+ $bukti2 = $request->file('bukti2');
+ $filename = Str::uuid() . '.' . $bukti2->extension();
+
+ $filePaths['bukti2'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti2->getContent(),
+ $filename
+ );
+ }
+ if ($request->hasFile('bukti3')) {
+ $bukti3 = $request->file('bukti3');
+ $filename = Str::uuid() . '.' . $bukti3->extension();
+
+ $filePaths['bukti3'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti3->getContent(),
+ $filename
+ );
+ }
+
+ // Generate sequence number and expense number
+ $sequence_number = FormVehicleRunningCost::withTrashed()->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-VHC-' . date('ym') . '%')->count() + 1;
+ $formatted_sequence_number = str_pad($sequence_number, 4, '0', STR_PAD_LEFT);
+ $expense_number = $region->code . '-' . $cabang->code . '-VHC-' . date('ym') . $formatted_sequence_number;
+
+ // Save the form data
+ FormVehicleRunningCost::create([
+ 'expense_number' => $expense_number,
+ 'user_id' => auth()->user()->id,
+ 'tanggal' => $request->tanggal,
+ 'liter' => $request->liter,
+ 'harga' => $request->harga,
+ 'jarak' => $request->jarak,
+ 'tipe_bensin' => $request->tipe_bensin,
+ 'nopol' => $request->nopol,
+ 'keterangan' => $request->keterangan,
+ 'bukti1' => $filePaths['bukti1'] ?? null,
+ 'bukti2' => $filePaths['bukti2'] ?? null,
+ 'bukti3' => $filePaths['bukti3'] ?? null,
+ 'account_number' => $kategori->account_number,
+ 'status' => 'On Progress',
+ ]);
+
+ session()->flash('success', 'Form has been created.');
+ return redirect()->route('forms.vehicle');
+ }
+
+ public function edit($id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.vehicle.edit']);
+
+ $form = FormVehicleRunningCost::findOrfail($id);
+ return view('backend.pages.forms.vehicle.edit', [
+ 'form' => $form
+ ]);
+ }
+
+ public function update(Request $request, $id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.vehicle.edit']);
+
+ $request->validate([
+ 'tanggal' => 'required',
+ 'liter' => 'required',
+ 'harga' => 'required',
+ 'jarak' => 'required',
+ 'tipe_bensin' => 'required|in:pertalite,pertamax',
+ 'nopol' => 'required',
+ 'keterangan' => 'required',
+ 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
+ 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
+ 'bukti3' => 'nullable|file|mimes:pdf',
+ ]);
+
+ $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
+ $region = Region::where('id', $cabang->region_id)->first();
+ $kategori = Kategori::where('name', 'Vehicle Running Cost')->first();
+
+ $filePaths = [];
+ $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/vehicle';
+
+ if ($request->hasFile('bukti1')) {
+ $bukti1 = $request->file('bukti1');
+ $filename = Str::uuid() . '.' . $bukti1->extension();
+
+ $filePaths['bukti1'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti1->getContent(),
+ $filename
+ );
+
+ }
+ if ($request->hasFile('bukti2')) {
+ $bukti2 = $request->file('bukti2');
+ $filename = Str::uuid() . '.' . $bukti2->extension();
+
+ $filePaths['bukti2'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti2->getContent(),
+ $filename
+ );
+ }
+ if ($request->hasFile('bukti3')) {
+ $bukti3 = $request->file('bukti3');
+ $filename = Str::uuid() . '.' . $bukti3->extension();
+
+ $filePaths['bukti3'] = $folderPath . '/' . $filename;
+
+ NextCloudHelper::uploadFile(
+ $folderPath,
+ $bukti3->getContent(),
+ $filename
+ );
+ }
+
+ // Save the form data
+ $form = FormVehicleRunningCost::findOrfail($id);
+ $form->update([
+ 'tanggal' => $request->tanggal,
+ 'liter' => $request->liter,
+ 'harga' => $request->harga,
+ 'jarak' => $request->jarak,
+ 'tipe_bensin' => $request->tipe_bensin,
+ 'nopol' => $request->nopol,
+ 'keterangan' => $request->keterangan,
+ 'bukti1' => $filePaths['bukti1'] ?? $form->bukti1,
+ 'bukti2' => $filePaths['bukti2'] ?? $form->bukti2,
+ 'bukti3' => $filePaths['bukti3'] ?? $form->bukti3,
+ 'account_number' => $kategori->account_number,
+ 'status' => 'On Progress',
+ ]);
+
+ session()->flash('success', 'Form has been updated.');
+ return redirect()->route('forms.vehicle');
+ }
+
+ public function destroy($id)
+ {
+ $this->checkAuthorization(auth()->user(), ['forms.vehicle.delete']);
+
+ $form = FormVehicleRunningCost::findOrfail($id);
+ $form->delete();
+
+ session()->flash('success', 'Form has been deleted.');
+ return redirect()->route('forms.vehicle');
+ }
+}
\ No newline at end of file
diff --git a/app/Models/FormEntertaimentPresentation.php b/app/Models/FormEntertaimentPresentation.php
index 02293ea..6aab6aa 100644
--- a/app/Models/FormEntertaimentPresentation.php
+++ b/app/Models/FormEntertaimentPresentation.php
@@ -26,4 +26,9 @@ class FormEntertaimentPresentation extends Model
'account_number',
'status',
];
+
+ public function user()
+ {
+ return $this->belongsTo('App\Models\Admin');
+ }
}
diff --git a/app/Models/FormMeetingSeminar.php b/app/Models/FormMeetingSeminar.php
index c6b949d..574c311 100644
--- a/app/Models/FormMeetingSeminar.php
+++ b/app/Models/FormMeetingSeminar.php
@@ -23,4 +23,9 @@ class FormMeetingSeminar extends Model
'account_number',
'status',
];
+
+ public function user()
+ {
+ return $this->belongsTo(Admin::class, 'user_id');
+ }
}
diff --git a/app/Models/FormUpCountry.php b/app/Models/FormUpCountry.php
index 5cdfca3..6f2be10 100644
--- a/app/Models/FormUpCountry.php
+++ b/app/Models/FormUpCountry.php
@@ -28,4 +28,14 @@ class FormUpCountry extends Model
'account_number',
'status',
];
+
+ public function user()
+ {
+ return $this->belongsTo('App\Models\Admin');
+ }
+
+ public function rayon()
+ {
+ return $this->belongsTo('App\Models\Rayon');
+ }
}
diff --git a/app/Models/FormVehicleRunningCost.php b/app/Models/FormVehicleRunningCost.php
index 3f18764..b666677 100644
--- a/app/Models/FormVehicleRunningCost.php
+++ b/app/Models/FormVehicleRunningCost.php
@@ -26,4 +26,9 @@ class FormVehicleRunningCost extends Model
'account_number',
'status',
];
+
+ public function user()
+ {
+ return $this->belongsTo('App\Models\Admin', 'user_id');
+ }
}
diff --git a/app/Models/UserHasCabang.php b/app/Models/UserHasCabang.php
index 8a1ccdd..21a136e 100644
--- a/app/Models/UserHasCabang.php
+++ b/app/Models/UserHasCabang.php
@@ -14,4 +14,14 @@ class UserHasCabang extends Model
'user_id',
'cabang_id',
];
+
+ public function user()
+ {
+ return $this->belongsTo('App\Models\Admin');
+ }
+
+ public function cabang()
+ {
+ return $this->belongsTo('App\Models\Cabang');
+ }
}
diff --git a/composer.json b/composer.json
index 8a819be..c646c79 100644
--- a/composer.json
+++ b/composer.json
@@ -16,6 +16,7 @@
"laravolt/avatar": "^6.0",
"nino/laravel-nextcloud-fs": "^2.0",
"phpoffice/phpspreadsheet": "^3.5",
+ "singlequote/laravel-webdav": "^1.1",
"spatie/laravel-html": "^3.11",
"spatie/laravel-menu": "^4.2",
"spatie/laravel-permission": "^6.10",
diff --git a/composer.lock b/composer.lock
index 4b406ec..fd8a12c 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": "e20816a5ac8758dcf14572597c4d7627",
+ "content-hash": "83771e2a711327eac79ef3f7b30673da",
"packages": [
{
"name": "barryvdh/laravel-dompdf",
@@ -4797,6 +4797,65 @@
},
"time": "2024-09-06T07:37:46+00:00"
},
+ {
+ "name": "singlequote/laravel-webdav",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/singlequote/laravel-webdav.git",
+ "reference": "07bb4f177fc61b65d7dd0aaa37779a82ff100681"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/singlequote/laravel-webdav/zipball/07bb4f177fc61b65d7dd0aaa37779a82ff100681",
+ "reference": "07bb4f177fc61b65d7dd0aaa37779a82ff100681",
+ "shasum": ""
+ },
+ "require": {
+ "laravel/framework": ">=10",
+ "league/flysystem-webdav": "^3.15",
+ "php": "^8.1"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "aliases": {
+ "WebDav": "SingleQuote\\WebDav\\WebDavFacade"
+ },
+ "providers": [
+ "SingleQuote\\WebDav\\WebDavServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SingleQuote\\WebDav\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Wim Pruiksma",
+ "email": "wim@quotec.nl",
+ "homepage": "https://quotec.nl/"
+ }
+ ],
+ "homepage": "https://github.com/singlequote/laravel-webdav",
+ "keywords": [
+ "Flysystem",
+ "WebDAV",
+ "filesystem",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/singlequote/laravel-webdav/issues",
+ "source": "https://github.com/singlequote/laravel-webdav/tree/1.1.1"
+ },
+ "time": "2024-06-07T12:41:19+00:00"
+ },
{
"name": "spatie/laravel-html",
"version": "3.11.1",
diff --git a/config/filesystems.php b/config/filesystems.php
index 2ac1540..1de83d6 100644
--- a/config/filesystems.php
+++ b/config/filesystems.php
@@ -58,11 +58,14 @@ return [
],
'nextcloud' => [
- 'driver' => 'nextcloud',
+ 'driver' => 'webdav',
'baseUri' => env('NEXT_CLOUD_URL'),
'userName' => env('NEXT_CLOUD_USERNAME'),
'password' => env('NEXT_CLOUD_PASSWORD'),
- 'directory' => '',
+ 'pathPrefix' => env("NEXT_CLOUD_PATHPREFIX", ''),
+ 'options' => [
+ 'verify' => false,
+ ],
],
],
diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php
index 871b6cb..d706f7d 100644
--- a/database/seeds/DatabaseSeeder.php
+++ b/database/seeds/DatabaseSeeder.php
@@ -7,6 +7,7 @@ use Database\Seeds\RolePermissionSeeder;
use Database\Seeds\MenuSeeder;
use Database\Seeds\RayonSeeder;
use Database\Seeds\RolePermissionSeeder2;
+use Database\Seeds\RolePermissionSeeder3;
class DatabaseSeeder extends Seeder
{
@@ -17,11 +18,12 @@ class DatabaseSeeder extends Seeder
*/
public function run()
{
- $this->call(UserSeeder::class);
- $this->call(AdminSeeder::class);
- $this->call(RolePermissionSeeder::class);
- $this->call(MenuSeeder::class);
- $this->call(RayonSeeder::class);
- $this->call(RolePermissionSeeder2::class);
+ // $this->call(UserSeeder::class);
+ // $this->call(AdminSeeder::class);
+ // $this->call(RolePermissionSeeder::class);
+ // $this->call(MenuSeeder::class);
+ // $this->call(RayonSeeder::class);
+ // $this->call(RolePermissionSeeder2::class);
+ $this->call(RolePermissionSeeder3::class);
}
}
diff --git a/database/seeds/RolePermissionSeeder3.php b/database/seeds/RolePermissionSeeder3.php
new file mode 100644
index 0000000..06053a7
--- /dev/null
+++ b/database/seeds/RolePermissionSeeder3.php
@@ -0,0 +1,126 @@
+ 'forms.country',
+ 'permissions' => [
+ 'forms.country.view',
+ 'forms.country.create',
+ 'forms.country.edit',
+ 'forms.country.delete',
+ 'forms.country.approve',
+ ]
+ ],
+ [
+ 'group_name' => 'forms.vehicle',
+ 'permissions' => [
+ 'forms.vehicle.view',
+ 'forms.vehicle.create',
+ 'forms.vehicle.edit',
+ 'forms.vehicle.delete',
+ 'forms.vehicle.approve',
+ ]
+ ],
+ [
+ 'group_name' => 'forms.entertainment',
+ 'permissions' => [
+ 'forms.entertainment.view',
+ 'forms.entertainment.create',
+ 'forms.entertainment.edit',
+ 'forms.entertainment.delete',
+ 'forms.entertainment.approve',
+ ]
+ ],
+ [
+ 'group_name' => 'forms.meeting',
+ 'permissions' => [
+ 'forms.meeting.view',
+ 'forms.meeting.create',
+ 'forms.meeting.edit',
+ 'forms.meeting.delete',
+ 'forms.meeting.approve',
+ ]
+ ],
+ [
+ 'group_name' => 'forms.other',
+ 'permissions' => [
+ 'forms.other.view',
+ 'forms.other.create',
+ 'forms.other.edit',
+ 'forms.other.delete',
+ 'forms.other.approve',
+ ]
+ ]
+ ];
+
+ // 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/pages/forms/entertainment/create.blade.php b/resources/views/backend/pages/forms/entertainment/create.blade.php
new file mode 100644
index 0000000..72d11a1
--- /dev/null
+++ b/resources/views/backend/pages/forms/entertainment/create.blade.php
@@ -0,0 +1,89 @@
+@extends('layouts.app')
+
+@section('title')
+ Dashboard
+@endsection
+
+@section('admin-content')
+
+ @if (auth()->user()->can('forms.entertainment.create'))
+
+ Add New Expense Entertainment & Presentation
+
+ @endif
+
+ @if (auth()->user()->can('forms.meeting.create'))
+
+ Add New Expense Meeting Seminar
+
+ @endif
+ Tambahkan Expense Entertainment & Presentation
+ Edit Expense Entertainment & Presentation
+ Forms Entertainment & Presentation
+ List Data Forms Entertainment & Presentation
+
+
+
+
+
+
+
+ @php
+ use App\Helpers\NextCloudHelper;
+ @endphp
+ @foreach ($forms as $item)
+ #
+ Nama
+ Tanggal
+ Jenis
+ Keterangan
+ Total
+ Nama Penerima
+ NPWP / NIK
+ Bukti 1
+ Bukti 2
+ Bukti 3
+ Account Number
+ Status
+ Aksi
+
+
+ @endforeach
+
+ {{ $loop->iteration }}
+ {{ $item->user->name }}
+ {{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}
+ {{ $item->jenis }}
+ {{ $item->keterangan }}
+ {{ number_format($item->total, 0, ',', '.') }}
+ {{ $item->name }}
+ {{ $item->nik_or_npwp }}
+
+ @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 == 'Completed')
+ {{ $item->status }}
+ @else
+ {{ $item->status }}
+ @endif
+
+
+ @if (auth()->user()->can('forms.entertainment.edit'))
+
+
+
+ @endif
+
+ @if (auth()->user()->can('forms.entertainment.delete'))
+
+ @endif
+
+ Tambahkan Expense Meeting & Seminar Baru
+ Edit Expense Meeting & Seminar
+ Forms Meeting Seminar
+ List Data Forms Meeting Seminar Anda
+
+
+
+
+
+
+
+ @php
+ use App\Helpers\NextCloudHelper;
+ @endphp
+ @foreach ($forms as $item)
+ #
+ Nama
+ Tanggal
+ Allowance
+ Transport Ankot
+ Hotel
+ Total
+ Bukti 1
+ Bukti 2
+ Bukti 3
+ Account Number
+ Status
+ Aksi
+
+
+ @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 == 'Completed')
+ {{ $item->status }}
+ @else
+ {{ $item->status }}
+ @endif
+
+
+ @if (auth()->user()->can('forms.meeting.edit'))
+
+
+
+ @endif
+
+ @if (auth()->user()->can('forms.meeting.delete'))
+
+ @endif
+
+
- - Add New Expense Up Country - + @if (auth()->user()->can('forms.country.create')) + + Add New Expense Up Country + + @endif
+ @if (auth()->user()->can('forms.vehicle.create')) + + Add New Expense Vehicle Running Cost + + @endif +
+ +| # | +Nama | +Tanggal | +Liter | +Harga | +Jarak | +Tipe Bensin | +Nomor Polisi | +Bukti 1 | +Bukti 2 | +Bukti 3 | +Account Number | +Status | +Aksi | +
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ $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->harga, 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 == 'Completed') + {{ $item->status }} + @else + {{ $item->status }} + @endif + | ++ @if (auth()->user()->can('forms.vehicle.edit')) + + + + @endif + + @if (auth()->user()->can('forms.vehicle.delete')) + + @endif + | +