diff --git a/Screenshot 2026-04-06 at 17.32.39.png b/Screenshot 2026-04-06 at 17.32.39.png new file mode 100644 index 0000000..b61cb77 Binary files /dev/null and b/Screenshot 2026-04-06 at 17.32.39.png differ diff --git a/app/Http/Controllers/AutoController.php b/app/Http/Controllers/AutoController.php index 87eca38..37a3bf0 100644 --- a/app/Http/Controllers/AutoController.php +++ b/app/Http/Controllers/AutoController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Http\Controllers\QrController; +use setasign\Fpdi\Fpdi; class AutoController extends Controller { @@ -106,7 +107,7 @@ class AutoController extends Controller 'tech_passport' => $request->tech_passport, 'tech_given_date' => $request->tech_given_date, 'tech_given_whom' => $request->tech_given_whom, - 'cost' => $request->cost ?? 0, + 'cost' => (int)str_replace(',', '', $request->cost ?? 0), 'note' => $request->note, 'created_at' => $request->created_at ?? now(), 'updated_at' => now(), @@ -157,7 +158,7 @@ class AutoController extends Controller 'tech_passport' => $request->tech_passport, 'tech_given_date' => $request->tech_given_date, 'tech_given_whom' => $request->tech_given_whom, - 'cost' => $request->cost ?? 0, + 'cost' => (int)str_replace(',', '', $request->cost ?? 0), 'note' => $request->note, 'created_at' => $request->created_at, 'updated_at' => now(), @@ -214,7 +215,14 @@ class AutoController extends Controller $members = DB::table('order_members as om') ->leftJoin('users as u', 'u.id', '=', 'om.user_id') ->select('om.*', 'u.name', 'u.avatar', 'u.phone', 'u.role') - ->where('om.order_id', $order->id ?? 0)->where('om.order_type', 'auto_')->get(); + ->where('om.order_id', $order->id ?? 0)->where('om.order_type', 'auto_')->get() + ->map(function ($member) { + $member->started = DB::table('order_members')->where('user_id', $member->user_id)->count(); + $member->finished = 0; // Defaulting for now + $member->approved = 0; + $member->rejected = 0; + return $member; + }); $appraisers = DB::table('users')->whereRaw('LOWER(role) = ?', ['appraiser'])->where('status', 'active')->get(); return view('auto.show-team', compact('order', 'members', 'appraisers')); } @@ -240,4 +248,56 @@ class AutoController extends Controller { return redirect()->route('auto.index'); } + + public function generatePdf($id) + { + $order = DB::table('auto_orders as o') + ->selectRaw('o.*, p.uz as purpose, c.uz as category, CONCAT_WS(\' \', o.owner_last_name, o.owner_first_name, o.owner_patronymic) as "ownerName"') + ->leftJoin('purposes as p', 'p.id', '=', 'o.purpose_id') + ->leftJoin('concerns as c', 'c.id', '=', 'o.car_category') + ->where('o.id', $id) + ->first(); + + if (!$order) { + abort(404); + } + + $pdf = new Fpdi(); + $pdf->AddPage(); + + // Add Title + $pdf->SetFont('Arial', 'B', 16); + $pdf->Cell(0, 10, 'BAXOLASH XULOSASI (AVTO)', 0, 1, 'C'); + $pdf->Ln(10); + + // Add Details + $pdf->SetFont('Arial', '', 12); + + $fields = [ + 'Tartib raqami' => $order->number, + 'Sana' => date('d.m.Y', strtotime($order->created_at)), + 'Maqsadi' => $order->purpose, + 'Kategoriya' => $order->category, + 'Markasi' => $order->car_mark, + 'Davlat raqami' => $order->car_number, + 'Egasi' => $order->ownerName, + 'Ishlab chiqarilgan yili' => $order->made_date, + 'Baholangan summa' => number_format($order->object_price ?: 0, 0, '.', ' ') . ' UZS', + ]; + + foreach ($fields as $label => $value) { + $pdf->SetFont('Arial', 'B', 12); + $pdf->Cell(60, 10, $label . ':', 0, 0); + $pdf->SetFont('Arial', '', 12); + $pdf->Cell(0, 10, $value ?: '-', 0, 1); + } + + $pdf->Ln(20); + $pdf->SetFont('Arial', 'I', 10); + $pdf->Cell(0, 10, 'Ushbu hujjat tizim tomonidan avtomatik generatsiya qilindi.', 0, 1, 'C'); + + return response($pdf->Output('S'), 200) + ->header('Content-Type', 'application/pdf') + ->header('Content-Disposition', 'attachment; filename="Conclusion_'.$order->number.'.pdf"'); + } } diff --git a/app/Http/Controllers/ConclusionController.php b/app/Http/Controllers/ConclusionController.php index 6d357ba..2721e7b 100644 --- a/app/Http/Controllers/ConclusionController.php +++ b/app/Http/Controllers/ConclusionController.php @@ -82,7 +82,8 @@ class ConclusionController extends Controller $qrPath = storage_path('app/public/attachments/' . $dbType . $orderId . '/qr.png'); if (!file_exists($qrPath)) { Storage::makeDirectory('public/attachments/' . $dbType . $orderId); - $qrContent = url(($orderType === 'AUTO' ? 'auto' : 'estate') . '/show/' . $orderId); + $cleanType = strtolower($orderType); + $qrContent = route('qr.verify', ['type' => $cleanType, 'id' => $orderId]); $qrImage = QrCode::format('png')->size(150)->generate($qrContent); file_put_contents($qrPath, $qrImage); } @@ -123,6 +124,11 @@ class ConclusionController extends Controller 'created_at' => now(), 'updated_at' => now(), ]); + + DB::table($table)->where('id', $orderId)->update([ + 'status' => \App\Enums\OrderStatusEnum::FINISHED->name, + 'updated_at' => now(), + ]); } $route = $orderType === 'AUTO' ? 'auto.show' : 'estate.show'; diff --git a/app/Http/Controllers/EstateController.php b/app/Http/Controllers/EstateController.php index a241c2c..1f1b57c 100644 --- a/app/Http/Controllers/EstateController.php +++ b/app/Http/Controllers/EstateController.php @@ -89,7 +89,7 @@ class EstateController extends Controller 'tech_passport' => $request->tech_passport, 'tech_given_date' => $request->tech_given_date, 'tech_given_whom' => $request->tech_given_whom, - 'cost' => $request->cost ?? 0, + 'cost' => (int)str_replace(',', '', $request->cost ?? 0), 'note' => $request->note, 'created_at' => $request->created_at ?? now(), 'updated_at' => now(), @@ -142,7 +142,7 @@ class EstateController extends Controller 'tech_passport' => $request->tech_passport, 'tech_given_date' => $request->tech_given_date, 'tech_given_whom' => $request->tech_given_whom, - 'cost' => $request->cost ?? 0, + 'cost' => (int)str_replace(',', '', $request->cost ?? 0), 'note' => $request->note, 'created_at' => $request->created_at, 'updated_at' => now(), @@ -196,7 +196,14 @@ class EstateController extends Controller $members = DB::table('order_members as om') ->leftJoin('users as u', 'u.id', '=', 'om.user_id') ->select('om.*', 'u.name', 'u.avatar', 'u.phone', 'u.role') - ->where('om.order_id', $order->id ?? 0)->where('om.order_type', 'estate_')->get(); + ->where('om.order_id', $order->id ?? 0)->where('om.order_type', 'estate_')->get() + ->map(function ($member) { + $member->started = DB::table('order_members')->where('user_id', $member->user_id)->count(); + $member->finished = 0; + $member->approved = 0; + $member->rejected = 0; + return $member; + }); $appraisers = DB::table('users')->whereRaw('LOWER(role) = ?', ['appraiser'])->where('status', 'active')->get(); return view('estate.show-team', compact('order', 'members', 'appraisers')); } diff --git a/app/Http/Controllers/QrController.php b/app/Http/Controllers/QrController.php index b3b0426..41f14aa 100644 --- a/app/Http/Controllers/QrController.php +++ b/app/Http/Controllers/QrController.php @@ -13,6 +13,38 @@ class QrController extends Controller return view('qr.show', compact('content')); } + public function verify($type, $id) + { + $table = $type === 'auto' ? 'auto_orders' : 'estate_orders'; + $order = \Illuminate\Support\Facades\DB::table($table)->where('id', $id)->first(); + + if (!$order) { + abort(404); + } + + // Add display relations and formatting + $order->customer = $order->ordered_customer; + $order->purposeOne = \Illuminate\Support\Facades\DB::table('purposes')->where('id', $order->purpose_id)->first(); + + if ($type === 'auto') { + $order->concernOne = \Illuminate\Support\Facades\DB::table('concerns')->where('id', $order->car_category)->first(); + $order->ownerName = trim($order->owner_last_name . ' ' . $order->owner_first_name . ' ' . $order->owner_patronymic); + $order->name = $order->car_mark; + } else { + $order->regions = \Illuminate\Support\Facades\DB::table('regions')->where('id', $order->region)->first(); + $order->districts = \Illuminate\Support\Facades\DB::table('districts')->where('id', $order->district)->first(); + $order->owner = trim($order->owner_last_name . ' ' . $order->owner_first_name . ' ' . $order->owner_patronymic); + $order->name = $order->name_of_object; + } + + $conclusion = \Illuminate\Support\Facades\DB::table('files') + ->where('order_id', $id) + ->where('order_type', 'conclusion_') + ->first(); + + return view('qr.' . $type, compact('order', 'conclusion')); + } + public function reGenerate($id, $type) { self::generateQr($id, $type); @@ -22,8 +54,9 @@ class QrController extends Controller public static function generateQr($id, $type) { // type is 'auto_' or 'estate_' - $url = url(($type === 'auto_' ? 'auto' : 'estate') . '/show/' . $id); - $dir = 'public/attachments/' . $type . $id; + $cleanType = str_replace('_', '', $type); + $url = route('qr.verify', ['type' => $cleanType, 'id' => $id]); + $dir = 'public/attachments/' . $type . $id; Storage::makeDirectory($dir); $qr = QrCode::format('png')->size(200)->generate($url); Storage::put($dir . '/qr.png', $qr); diff --git a/dummy.pdf b/dummy.pdf new file mode 100644 index 0000000..b60e8c8 --- /dev/null +++ b/dummy.pdf @@ -0,0 +1,18 @@ +%PDF-1.4 +1 0 obj <> endobj +2 0 obj <> endobj +3 0 obj <> endobj +4 0 obj <> stream +BT /F1 24 Tf 100 700 Td (Hello World) Tj ET +endstream endobj +xref +0 5 +0000000000 65535 f +0000000009 00000 n +0000000056 00000 n +0000000111 00000 n +0000000212 00000 n +trailer <> +startxref +284 +%%EOF diff --git a/resources/views/auto/edit.blade.php b/resources/views/auto/edit.blade.php index 94f3437..d82e89b 100755 --- a/resources/views/auto/edit.blade.php +++ b/resources/views/auto/edit.blade.php @@ -17,7 +17,7 @@ validate> @csrf @method('put') - +
@@ -67,7 +67,7 @@ id="choices-purpose-input" tabindex="3"> @foreach($purposeCases as $purposeItem) @endforeach @@ -290,7 +290,7 @@ id="choose-order-car-category" name="car_category" tabindex="10"> @foreach ($concerns as $concern) @endforeach @@ -500,11 +500,11 @@ @lang('translation.select-diller') + @error('file') @lang($message,['attribute'=>trans('translation.file')]) diff --git a/resources/views/estate/show.blade.php b/resources/views/estate/show.blade.php index d8551a2..3e4e365 100755 --- a/resources/views/estate/show.blade.php +++ b/resources/views/estate/show.blade.php @@ -117,7 +117,7 @@ {{ __('translation.conclusions') }}
- @if(in_array($order->status,[\App\Enums\OrderStatusEnum::STARTED->name,\App\Enums\OrderStatusEnum::REJECTED->name]) && $isAppraisers) + @if(in_array($order->status,[\App\Enums\OrderStatusEnum::STARTED->name,\App\Enums\OrderStatusEnum::REJECTED->name]) && ($isAppraisers || in_array(Auth::user()?->role, ['admin', \App\Enums\RoleEnum::MANAGER->name]))) diff --git a/routes/web.php b/routes/web.php index af9c682..fc85d77 100755 --- a/routes/web.php +++ b/routes/web.php @@ -42,86 +42,88 @@ Route::get('index/{locale}', [HomeController::class, 'lang']); Route::get('/', [HomeController::class, 'index'])->name('root'); Route::get('index', [HomeController::class, 'index'])->name('index'); - -//Update User Details -Route::post('/update-profile/{id}', [ProfileController::class, 'updateProfile'])->name('updateProfile'); -Route::post('/update-password/{id}', [ProfileController::class, 'updatePassword'])->name('updatePassword'); -Route::get('qr/show/{content}', [QrController::class, 'show'])->name('qr.show'); -Route::get('qr/re-generate/{id}/{type}', [QrController::class, 'reGenerate'])->name('qr.generate'); -Route::get('conclusion/test-water-mark', [ConclusionController::class, 'testWaterMark'])->name('wm.show'); - -Route::post('/member/remove', [OrderMembersController::class, 'remove'])->name('member.remove'); -Route::post('/members/invite', [OrderMembersController::class, 'invite'])->name('members.invite'); - -Route::get('/estate', [EstateController::class, 'index'])->name('estate.index'); -Route::get('/estate/create', [EstateController::class, 'create'])->name('estate.create'); -Route::post('/estate/store', [EstateController::class, 'store'])->name('estate.store'); -Route::get('/estate/edit/{id}', [EstateController::class, 'edit'])->name('estate.edit'); -Route::put('/estate/update/{id}', [EstateController::class, 'update'])->name('estate.update'); -Route::get('/estate/show/{order}', [EstateController::class, 'show'])->name('estate.show'); -Route::get('/estate/show-activities/{order}', [EstateController::class, 'showActivities'])->name('estate.show-activities'); -Route::get('/estate/show-team/{order}', [EstateController::class, 'showTeam'])->name('estate.show-team'); -Route::get('/estate/show-documents/{order}', [EstateController::class, 'showDocuments'])->name('estate.show-documents'); -Route::put('/estate/order-clone/{id}', [EstateController::class, 'orderClone'])->name('estate.clone'); - -Route::get('/auto', [AutoController::class, 'index'])->name('auto.index'); -Route::get('/auto/create', [AutoController::class, 'create'])->name('auto.create'); -Route::post('/auto/store', [AutoController::class, 'store'])->name('auto.store'); -Route::get('/auto/edit/{id}', [AutoController::class, 'edit'])->name('auto.edit'); -Route::put('/auto/update/{id}', [AutoController::class, 'update'])->name('auto.update'); -Route::get('/auto/show/{order}', [AutoController::class, 'show'])->name('auto.show'); -Route::get('/auto/show-activities/{order}', [AutoController::class, 'showActivities'])->name('auto.show-activities'); -Route::get('/auto/show-team/{order}', [AutoController::class, 'showTeam'])->name('auto.show-team'); -Route::get('/auto/show-documents/{order}', [AutoController::class, 'showDocuments'])->name('auto.show-documents'); -Route::put('/auto/order-clone/{id}', [AutoController::class, 'orderClone'])->name('auto.clone'); - -Route::get('/conclusion/add/{id}/{type}', [ConclusionController::class, 'create'])->name('conclusion.add'); -Route::post('/conclusion/store', [ConclusionController::class, 'store'])->name('conclusion.store'); -Route::put('/conclusion/reject', [ConclusionController::class, 'reject'])->name('conclusion.reject'); - - -Route::get('/tools', [ToolsController::class, 'index'])->name('tools.index'); -Route::get('/user', [UserController::class, 'index'])->name('user.index'); -Route::post('/user/store', [UserController::class, 'create'])->name('user.store'); -Route::get('/user/show/{id}', [UserController::class, 'show'])->name('user.show'); -Route::put('/user/update', [UserController::class, 'update'])->name('user.update'); -Route::post('/user/favourite/{id}', [UserController::class, 'favourite'])->name('user.favourite'); -Route::put('/user/password/change', [UserController::class, 'updatePassword'])->name('password.change'); - -Route::get('/user/info/edit', [UserInfoController::class, 'edit'])->name('profile.info.edit'); -Route::put('/user/info/store', [UserInfoController::class, 'update'])->name('profile.info.update'); - -Route::get('/profile/edit', [UserController::class, 'edit'])->name('profile.edit'); -Route::put('/profile/update', [UserController::class, 'update'])->name('profile.update'); -Route::get('/profile/show-activities', [ProfileController::class, 'showActivities'])->name('profile.show-activities'); -Route::get('/profile/show-projects', [ProfileController::class, 'showProjects'])->name('profile.show-projects'); -Route::get('/profile/show-documents', [ProfileController::class, 'showDocuments'])->name('profile.show-documents'); - -Route::get('/user/profile', [ProfileController::class, 'profile'], 'profile')->name('profile'); -Route::put('/user/activate/{id}', [UserController::class, 'activate'])->name('user.activate'); -Route::put('/user/block/{id}', [UserController::class, 'block'])->name('user.block'); -Route::get('/user/appraisers', [UserController::class, 'appraisers'])->name('user.appraisers'); -Route::get('/appraisers/bonus', [UserController::class, 'appraisersBonus'])->name('appraisers.bonus'); -Route::delete('/diller/{id}', [UserController::class, 'destroy'])->name('diller.destroy'); - -Route::get('/diller', DillerController::class)->name('diller.index'); -Route::get('/role', [RoleController::class, 'index'])->name('role.index'); -Route::put('/role/permit', [RoleController::class, 'permit'])->name('role.permit'); -Route::get('/notification/type', NotificationTypeController::class)->name('notification.type.index'); -Route::get('/notification/template', [NotificationTemplateController::class, 'index'])->name('notification.template.index'); -//Route::post('/store/my/file', [FileStoreController::class, 'storeMyFile'])->name('store.my.file'); -Route::post('/attach/file', [FileStoreController::class, 'attachFiles'])->name('attach.files'); -Route::post('/attach/profile-file', [FileStoreController::class, 'attachProfileFiles'])->name('profile.files'); +Route::get('v/{type}/{id}', [QrController::class, 'verify'])->name('qr.verify'); Route::get('/download/{file}', [FileStoreController::class, 'downloadFile'])->name('download'); -Route::delete('file/delete/{file}', [FileStoreController::class, 'delete'])->name('file.delete'); -Route::put('debit/credit', [BonusController::class, 'storeCredit'])->name('credit.store'); -Route::resource('/debit', DebitController::class); -Route::resource('bonus', BonusController::class); -Route::resource('certificates', CertificateController::class); -Route::resource('purposes', PurposeController::class); -Route::resource('regions', RegionController::class); -Route::get('/regions/districts/{id}', [RegionController::class, 'districts'])->name('regions.districts'); -Route::resource('districts', DistrictController::class); -Route::resource('concerns', ConcernController::class); + +Route::group(['middleware' => ['auth']], function () { + //Update User Details + Route::post('/update-profile/{id}', [ProfileController::class, 'updateProfile'])->name('updateProfile'); + Route::post('/update-password/{id}', [ProfileController::class, 'updatePassword'])->name('updatePassword'); + Route::get('qr/show/{content}', [QrController::class, 'show'])->name('qr.show'); + Route::get('qr/re-generate/{id}/{type}', [QrController::class, 'reGenerate'])->name('qr.generate'); + Route::get('conclusion/test-water-mark', [ConclusionController::class, 'testWaterMark'])->name('wm.show'); + + Route::post('/member/remove', [OrderMembersController::class, 'remove'])->name('member.remove'); + Route::post('/members/invite', [OrderMembersController::class, 'invite'])->name('members.invite'); + + Route::get('/estate', [EstateController::class, 'index'])->name('estate.index'); + Route::get('/estate/create', [EstateController::class, 'create'])->name('estate.create'); + Route::post('/estate/store', [EstateController::class, 'store'])->name('estate.store'); + Route::get('/estate/edit/{id}', [EstateController::class, 'edit'])->name('estate.edit'); + Route::put('/estate/update/{id}', [EstateController::class, 'update'])->name('estate.update'); + Route::get('/estate/show/{order}', [EstateController::class, 'show'])->name('estate.show'); + Route::get('/estate/show-activities/{order}', [EstateController::class, 'showActivities'])->name('estate.show-activities'); + Route::get('/estate/show-team/{order}', [EstateController::class, 'showTeam'])->name('estate.show-team'); + Route::get('/estate/show-documents/{order}', [EstateController::class, 'showDocuments'])->name('estate.show-documents'); + Route::put('/estate/order-clone/{id}', [EstateController::class, 'orderClone'])->name('estate.clone'); + + Route::get('/auto', [AutoController::class, 'index'])->name('auto.index'); + Route::get('/auto/create', [AutoController::class, 'create'])->name('auto.create'); + Route::post('/auto/store', [AutoController::class, 'store'])->name('auto.store'); + Route::get('/auto/edit/{id}', [AutoController::class, 'edit'])->name('auto.edit'); + Route::put('/auto/update/{id}', [AutoController::class, 'update'])->name('auto.update'); + Route::get('/auto/show/{order}', [AutoController::class, 'show'])->name('auto.show'); + Route::get('/auto/show-activities/{order}', [AutoController::class, 'showActivities'])->name('auto.show-activities'); + Route::get('/auto/show-team/{order}', [AutoController::class, 'showTeam'])->name('auto.show-team'); + Route::get('/auto/show-documents/{order}', [AutoController::class, 'showDocuments'])->name('auto.show-documents'); + Route::get('/auto/generate-pdf/{order}', [AutoController::class, 'generatePdf'])->name('auto.generate_pdf'); + Route::put('/auto/order-clone/{id}', [AutoController::class, 'orderClone'])->name('auto.clone'); + + Route::get('/conclusion/add/{id}/{type}', [ConclusionController::class, 'create'])->name('conclusion.add'); + Route::post('/conclusion/store', [ConclusionController::class, 'store'])->name('conclusion.store'); + Route::put('/conclusion/reject', [ConclusionController::class, 'reject'])->name('conclusion.reject'); + + Route::get('/tools', [ToolsController::class, 'index'])->name('tools.index'); + Route::get('/user', [UserController::class, 'index'])->name('user.index'); + Route::post('/user/store', [UserController::class, 'create'])->name('user.store'); + Route::get('/user/show/{id}', [UserController::class, 'show'])->name('user.show'); + Route::put('/user/update', [UserController::class, 'update'])->name('user.update'); + Route::post('/user/favourite/{id}', [UserController::class, 'favourite'])->name('user.favourite'); + Route::put('/user/password/change', [UserController::class, 'updatePassword'])->name('password.change'); + + Route::get('/user/info/edit', [UserInfoController::class, 'edit'])->name('profile.info.edit'); + Route::put('/user/info/store', [UserInfoController::class, 'update'])->name('profile.info.update'); + + Route::get('/profile/edit', [UserController::class, 'edit'])->name('profile.edit'); + Route::put('/profile/update', [UserController::class, 'update'])->name('profile.update'); + Route::get('/profile/show-activities', [ProfileController::class, 'showActivities'])->name('profile.show-activities'); + Route::get('/profile/show-projects', [ProfileController::class, 'showProjects'])->name('profile.show-projects'); + Route::get('/profile/show-documents', [ProfileController::class, 'showDocuments'])->name('profile.show-documents'); + + Route::get('/user/profile', [ProfileController::class, 'profile'])->name('profile'); + Route::put('/user/activate/{id}', [UserController::class, 'activate'])->name('user.activate'); + Route::put('/user/block/{id}', [UserController::class, 'block'])->name('user.block'); + Route::get('/user/appraisers', [UserController::class, 'appraisers'])->name('user.appraisers'); + Route::get('/appraisers/bonus', [UserController::class, 'appraisersBonus'])->name('appraisers.bonus'); + Route::delete('/diller/{id}', [UserController::class, 'destroy'])->name('diller.destroy'); + + Route::get('/diller', DillerController::class)->name('diller.index'); + Route::get('/role', [RoleController::class, 'index'])->name('role.index'); + Route::put('/role/permit', [RoleController::class, 'permit'])->name('role.permit'); + Route::get('/notification/type', NotificationTypeController::class)->name('notification.type.index'); + Route::get('/notification/template', [NotificationTemplateController::class, 'index'])->name('notification.template.index'); + Route::post('/attach/file', [FileStoreController::class, 'attachFiles'])->name('attach.files'); + Route::post('/attach/profile-file', [FileStoreController::class, 'attachProfileFiles'])->name('profile.files'); + Route::delete('file/delete/{file}', [FileStoreController::class, 'delete'])->name('file.delete'); + Route::put('debit/credit', [BonusController::class, 'storeCredit'])->name('credit.store'); + Route::resource('/debit', DebitController::class); + Route::resource('bonus', BonusController::class); + Route::resource('certificates', CertificateController::class); + Route::resource('purposes', PurposeController::class); + Route::resource('regions', RegionController::class); + Route::get('/regions/districts/{id}', [RegionController::class, 'districts'])->name('regions.districts'); + Route::resource('districts', DistrictController::class); + Route::resource('concerns', ConcernController::class); +}); Route::get('{any}', [HomeController::class, 'pages'])->name('pages'); diff --git a/storage/app/public/attachments/AUTO7884/qr.png b/storage/app/public/attachments/AUTO7884/qr.png new file mode 100644 index 0000000..31c0972 Binary files /dev/null and b/storage/app/public/attachments/AUTO7884/qr.png differ diff --git a/storage/app/public/attachments/auto_7883/qr.png b/storage/app/public/attachments/auto_7883/qr.png new file mode 100644 index 0000000..22e1783 Binary files /dev/null and b/storage/app/public/attachments/auto_7883/qr.png differ diff --git a/storage/app/public/attachments/auto_7884/qr.png b/storage/app/public/attachments/auto_7884/qr.png new file mode 100644 index 0000000..02457e5 Binary files /dev/null and b/storage/app/public/attachments/auto_7884/qr.png differ diff --git a/storage/app/public/attachments/auto_7885/qr.png b/storage/app/public/attachments/auto_7885/qr.png new file mode 100644 index 0000000..b3b4910 Binary files /dev/null and b/storage/app/public/attachments/auto_7885/qr.png differ diff --git a/storage/app/public/attachments/auto_7886/qr.png b/storage/app/public/attachments/auto_7886/qr.png new file mode 100644 index 0000000..4d7b2b6 Binary files /dev/null and b/storage/app/public/attachments/auto_7886/qr.png differ diff --git a/storage/app/public/attachments/auto_7887/qr.png b/storage/app/public/attachments/auto_7887/qr.png new file mode 100644 index 0000000..8ba736a Binary files /dev/null and b/storage/app/public/attachments/auto_7887/qr.png differ diff --git a/storage/app/public/attachments/auto_7889/qr.png b/storage/app/public/attachments/auto_7889/qr.png new file mode 100644 index 0000000..b48fa9c Binary files /dev/null and b/storage/app/public/attachments/auto_7889/qr.png differ diff --git a/storage/app/public/files/AUTO5035/cb5bc352-94f5-4d27-a41f-fa9c5fe5d510.jpg b/storage/app/public/files/AUTO5035/cb5bc352-94f5-4d27-a41f-fa9c5fe5d510.jpg new file mode 100644 index 0000000..d7ec622 Binary files /dev/null and b/storage/app/public/files/AUTO5035/cb5bc352-94f5-4d27-a41f-fa9c5fe5d510.jpg differ diff --git a/storage/app/public/files/AUTO7884/20c2dd7d-611a-4e79-98f9-395eaa54c7ab.jpg b/storage/app/public/files/AUTO7884/20c2dd7d-611a-4e79-98f9-395eaa54c7ab.jpg new file mode 100644 index 0000000..d7ec622 Binary files /dev/null and b/storage/app/public/files/AUTO7884/20c2dd7d-611a-4e79-98f9-395eaa54c7ab.jpg differ diff --git a/storage/app/public/files/AUTO7884/35bdf303-89fb-4213-b554-11b8268194a6.jpg b/storage/app/public/files/AUTO7884/35bdf303-89fb-4213-b554-11b8268194a6.jpg new file mode 100644 index 0000000..d7ec622 Binary files /dev/null and b/storage/app/public/files/AUTO7884/35bdf303-89fb-4213-b554-11b8268194a6.jpg differ diff --git a/storage/app/public/files/AUTO7884/86855630-507f-4952-b06a-23cbdb782a19.jpg b/storage/app/public/files/AUTO7884/86855630-507f-4952-b06a-23cbdb782a19.jpg new file mode 100644 index 0000000..d7ec622 Binary files /dev/null and b/storage/app/public/files/AUTO7884/86855630-507f-4952-b06a-23cbdb782a19.jpg differ diff --git a/storage/app/public/files/AUTO7885/07327a94-6b70-4d7b-9da3-9e7ed7358192.jpg b/storage/app/public/files/AUTO7885/07327a94-6b70-4d7b-9da3-9e7ed7358192.jpg new file mode 100644 index 0000000..d7ec622 Binary files /dev/null and b/storage/app/public/files/AUTO7885/07327a94-6b70-4d7b-9da3-9e7ed7358192.jpg differ diff --git a/storage/app/public/files/AUTO7887/4c6d2c5e-6858-46f8-944d-6fda2a608129.jpg b/storage/app/public/files/AUTO7887/4c6d2c5e-6858-46f8-944d-6fda2a608129.jpg new file mode 100644 index 0000000..9de4b0b Binary files /dev/null and b/storage/app/public/files/AUTO7887/4c6d2c5e-6858-46f8-944d-6fda2a608129.jpg differ diff --git a/storage/app/public/files/AUTO7887/63ab60e5-e2e2-4183-ad5d-cbeddaac0783.jpg b/storage/app/public/files/AUTO7887/63ab60e5-e2e2-4183-ad5d-cbeddaac0783.jpg new file mode 100644 index 0000000..1418609 Binary files /dev/null and b/storage/app/public/files/AUTO7887/63ab60e5-e2e2-4183-ad5d-cbeddaac0783.jpg differ diff --git a/storage/app/public/files/AUTO7889/971ec2f7-ebb9-4cab-b79f-88d1ef92eb51.jpg b/storage/app/public/files/AUTO7889/971ec2f7-ebb9-4cab-b79f-88d1ef92eb51.jpg new file mode 100644 index 0000000..9965dc3 Binary files /dev/null and b/storage/app/public/files/AUTO7889/971ec2f7-ebb9-4cab-b79f-88d1ef92eb51.jpg differ diff --git a/storage/app/public/test_qr.png b/storage/app/public/test_qr.png new file mode 100644 index 0000000..fe22313 Binary files /dev/null and b/storage/app/public/test_qr.png differ