diff --git a/.env b/.env index d80988b..0750f1e 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/remote.php/dav/files/user_dev/ NEXT_CLOUD_USERNAME=user_dev NEXT_CLOUD_PASSWORD=userdev12345 +NEXT_CLOUD_PATHPREFIX="" diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index e28fa01..8dc04e0 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -6,40 +6,189 @@ 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; 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/'; + + // check if folder not exists + // if (!Storage::disk('nextcloud')->exists(trim($folderPath, '/'))) { + // Storage::disk('nextcloud')->makeDirectory(trim($folderPath, '/')); + // } + + // Store files to Nextcloud and collect their paths + if ($request->hasFile('bukti1')) { + $filePaths['bukti1'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti1'), $request->file('bukti1')->getClientOriginalName()); + } + if ($request->hasFile('bukti2')) { + $filePaths['bukti2'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti2'), $request->file('bukti2')->getClientOriginalName()); + } + if ($request->hasFile('bukti3')) { + $filePaths['bukti3'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti3'), $request->file('bukti3')->getClientOriginalName()); + } + + // 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/'; + + // check if folder not exists + // if (!Storage::disk('nextcloud')->exists(trim($folderPath, '/'))) { + // Storage::disk('nextcloud')->makeDirectory(trim($folderPath, '/')); + // } + + // Store files to Nextcloud and collect their paths + if ($request->hasFile('bukti1')) { + $filePaths['bukti1'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti1'), $request->file('bukti1')->getClientOriginalName()); + } + if ($request->hasFile('bukti2')) { + $filePaths['bukti2'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti2'), $request->file('bukti2')->getClientOriginalName()); + } + if ($request->hasFile('bukti3')) { + $filePaths['bukti3'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti3'), $request->file('bukti3')->getClientOriginalName()); + } + + // 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..95812bf --- /dev/null +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -0,0 +1,183 @@ +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/'; + + // check if folder not exists + // if (!Storage::disk('nextcloud')->exists(trim($folderPath, '/'))) { + // Storage::disk('nextcloud')->makeDirectory(trim($folderPath, '/')); + // } + + // Store files to Nextcloud and collect their paths + if ($request->hasFile('bukti1')) { + $filePaths['bukti1'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti1'), $request->file('bukti1')->getClientOriginalName()); + } + if ($request->hasFile('bukti2')) { + $filePaths['bukti2'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti2'), $request->file('bukti2')->getClientOriginalName()); + } + if ($request->hasFile('bukti3')) { + $filePaths['bukti3'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti3'), $request->file('bukti3')->getClientOriginalName()); + } + + // 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/'; + + // check if folder not exists + // if (!Storage::disk('nextcloud')->exists(trim($folderPath, '/'))) { + // Storage::disk('nextcloud')->makeDirectory(trim($folderPath, '/')); + // } + + // Store files to Nextcloud and collect their paths + if ($request->hasFile('bukti1')) { + $filePaths['bukti1'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti1'), $request->file('bukti1')->getClientOriginalName()); + } + if ($request->hasFile('bukti2')) { + $filePaths['bukti2'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti2'), $request->file('bukti2')->getClientOriginalName()); + } + if ($request->hasFile('bukti3')) { + $filePaths['bukti3'] = Storage::disk('nextcloud')->putFileAs($folderPath, $request->file('bukti3'), $request->file('bukti3')->getClientOriginalName()); + } + + // 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/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/upcountry/create.blade.php b/resources/views/backend/pages/forms/upcountry/create.blade.php index 3205b90..a362425 100644 --- a/resources/views/backend/pages/forms/upcountry/create.blade.php +++ b/resources/views/backend/pages/forms/upcountry/create.blade.php @@ -24,12 +24,14 @@
-
+ + @csrf + @include('backend.layouts.partials.messages')
- @foreach ($rayons as $rayon) @@ -38,50 +40,50 @@
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
@@ -92,4 +94,30 @@
+ + @endsection diff --git a/resources/views/backend/pages/forms/upcountry/edit.blade.php b/resources/views/backend/pages/forms/upcountry/edit.blade.php index 546f645..5e1279b 100644 --- a/resources/views/backend/pages/forms/upcountry/edit.blade.php +++ b/resources/views/backend/pages/forms/upcountry/edit.blade.php @@ -24,72 +24,101 @@
- + + @csrf + @method('PUT') + @include('backend.layouts.partials.messages')
- @foreach ($rayons as $rayon) - + @endforeach
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
+ + @endsection diff --git a/resources/views/backend/pages/forms/upcountry/index.blade.php b/resources/views/backend/pages/forms/upcountry/index.blade.php index 515614b..2f8a739 100644 --- a/resources/views/backend/pages/forms/upcountry/index.blade.php +++ b/resources/views/backend/pages/forms/upcountry/index.blade.php @@ -26,9 +26,11 @@

List Data Forms Up Country Anda

- - Add New Expense Up Country - + @if (auth()->user()->can('forms.country.create')) + + Add New Expense Up Country + + @endif

@@ -45,41 +47,58 @@ Tujuan Jarak Allowance - Transport Dalkot - Transport Ankot - Hotel + Total Bukti 1 Bukti 2 Bukti 3 Account Number + Status Aksi - - 1 - John Doe - Rayon 1 - 2021-09-01 - Surabaya - 100 - 100000 - 10000 - 5000 - 50000 - file1.jpg - file2.jpg - file3.jpg - 1234567890 - - - - - - - - - + @foreach ($forms as $item) + + {{ $loop->iteration }} + {{ $item->user->name }} + {{ $item->rayon->code }} + {{ $item->tanggal }} + {{ $item->tujuan }} + {{ $item->jarak }} km + {{ number_format($item->allowance, 0, ',', '.') }} + {{ number_format($item->total, 0, ',', '.') }} + {{ $item->bukti1 }} + {{ $item->bukti2 }} + {{ $item->bukti3 }} + {{ $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.country.edit')) + + + + @endif + + @if (auth()->user()->can('forms.country.delete')) +
+ @csrf + @method('DELETE') + +
+ @endif + + + @endforeach
diff --git a/resources/views/backend/pages/forms/vehicle/create.blade.php b/resources/views/backend/pages/forms/vehicle/create.blade.php new file mode 100644 index 0000000..481f18e --- /dev/null +++ b/resources/views/backend/pages/forms/vehicle/create.blade.php @@ -0,0 +1,89 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Tambahkan Expense Vehicle Running Cost Baru

+
+
+ +
+
+
+
+
+
+
+
+
+ @csrf + @include('backend.layouts.partials.messages') +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+@endsection diff --git a/resources/views/backend/pages/forms/vehicle/edit.blade.php b/resources/views/backend/pages/forms/vehicle/edit.blade.php new file mode 100644 index 0000000..9f1a6f5 --- /dev/null +++ b/resources/views/backend/pages/forms/vehicle/edit.blade.php @@ -0,0 +1,88 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Edit Expense Vehicle Running Cost

+
+
+ +
+
+
+
+
+
+
+
+
+ @csrf + @method('PUT') + @include('backend.layouts.partials.messages') +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+@endsection diff --git a/resources/views/backend/pages/forms/vehicle/index.blade.php b/resources/views/backend/pages/forms/vehicle/index.blade.php new file mode 100644 index 0000000..1fd3170 --- /dev/null +++ b/resources/views/backend/pages/forms/vehicle/index.blade.php @@ -0,0 +1,109 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Forms Vehicle Running Cost

+
+
+ +
+
+
+
+
+
+
+
+

List Data Forms Vehicle Running Cost Anda

+

+ @if (auth()->user()->can('forms.vehicle.create')) + + Add New Expense Vehicle Running Cost + + @endif +

+
+
+ @include('backend.layouts.partials.messages') + + + + + + + + + + + + + + + + + + + + + @foreach ($forms as $item) + + + + + + + + + + + + + + + + + @endforeach + +
#NamaTanggalLiterHargaJarakTipe BensinNomor PolisiBukti 1Bukti 2Bukti 3Account NumberStatusAksi
{{ $loop->iteration }}{{ $item->user->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('dddd, D MMMM Y HH:mm:ss') }}{{ $item->liter }}{{ $item->harga }}{{ $item->jarak }}{{ $item->tipe_bensin }}{{ $item->nopol }}{{ $item->bukti1 }}{{ $item->bukti2 }}{{ $item->bukti3 }}{{ $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')) +
+ @csrf + @method('DELETE') + +
+ @endif +
+
+
+
+
+
+@endsection diff --git a/resources/views/backend/pages/roles/index.blade.php b/resources/views/backend/pages/roles/index.blade.php index a22eaa6..a1df828 100644 --- a/resources/views/backend/pages/roles/index.blade.php +++ b/resources/views/backend/pages/roles/index.blade.php @@ -25,7 +25,7 @@
-
+

{{ $pageInfo['sub_title'] }}

diff --git a/resources/views/backend/pages/users/index.blade.php b/resources/views/backend/pages/users/index.blade.php index 5d30068..ed2b44c 100644 --- a/resources/views/backend/pages/users/index.blade.php +++ b/resources/views/backend/pages/users/index.blade.php @@ -38,7 +38,7 @@
-
+

Users List

diff --git a/routes/web.php b/routes/web.php index 453304b..8f5f568 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,6 +12,8 @@ use App\Http\Controllers\Forms\FormUpCountryController; use App\Http\Controllers\Master\RayonController; use App\Http\Controllers\Master\CostCentreController; use App\Http\Controllers\Master\CategoryController; +use App\Http\Controllers\Forms\FormVehicleController; +use Illuminate\Support\Facades\Storage; Auth::routes(); @@ -70,9 +72,30 @@ Route::middleware(['auth:admin', 'menu'])->group(function () { Route::get('/up-country/edit/{id}', [FormUpCountryController::class, 'edit'])->name('forms.up-country.edit'); Route::put('/up-country/update/{id}', [FormUpCountryController::class, 'update'])->name('forms.up-country.update'); Route::delete('/up-country/destroy/{id}', [FormUpCountryController::class, 'destroy'])->name('forms.up-country.destroy'); + + // Vehicle Running Cost + Route::get('/vehicle-running-cost', [FormVehicleController::class, 'index'])->name('forms.vehicle'); + Route::get('/vehicle-running-cost/create', [FormVehicleController::class, 'create'])->name('forms.vehicle.create'); + Route::post('/vehicle-running-cost/store', [FormVehicleController::class, 'store'])->name('forms.vehicle.store'); + Route::get('/vehicle-running-cost/edit/{id}', [FormVehicleController::class, 'edit'])->name('forms.vehicle.edit'); + Route::put('/vehicle-running-cost/update/{id}', [FormVehicleController::class, 'update'])->name('forms.vehicle.update'); + Route::delete('/vehicle-running-cost/destroy/{id}', [FormVehicleController::class, 'destroy'])->name('forms.vehicle.destroy'); }); //Menu Role Route::get('/auth/menu-tree/{id}', [MenuRoleController::class, 'index'])->name('auth.menurole.index'); Route::post('/auth/menu-tree/submit', [MenuRoleController::class, 'saveMenu'])->name('auth.menurole.submit'); -}); \ No newline at end of file +}); + +Route::get('/test-nextcloud', function () { + $disk = Storage::disk('nextcloud'); + $folderPath = 'test-directory'; + + // Check if directory exists + if (!$disk->exists($folderPath)) { + $disk->makeDirectory($folderPath); + return "Directory created: $folderPath"; + } + + return "Directory already exists: $folderPath"; +});