uppercese category qoshildi
BIN
Screenshot 2026-04-06 at 17.32.39.png
Normal file
|
After Width: | Height: | Size: 374 KiB |
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use App\Http\Controllers\QrController;
|
use App\Http\Controllers\QrController;
|
||||||
|
use setasign\Fpdi\Fpdi;
|
||||||
|
|
||||||
class AutoController extends Controller
|
class AutoController extends Controller
|
||||||
{
|
{
|
||||||
@@ -106,7 +107,7 @@ class AutoController extends Controller
|
|||||||
'tech_passport' => $request->tech_passport,
|
'tech_passport' => $request->tech_passport,
|
||||||
'tech_given_date' => $request->tech_given_date,
|
'tech_given_date' => $request->tech_given_date,
|
||||||
'tech_given_whom' => $request->tech_given_whom,
|
'tech_given_whom' => $request->tech_given_whom,
|
||||||
'cost' => $request->cost ?? 0,
|
'cost' => (int)str_replace(',', '', $request->cost ?? 0),
|
||||||
'note' => $request->note,
|
'note' => $request->note,
|
||||||
'created_at' => $request->created_at ?? now(),
|
'created_at' => $request->created_at ?? now(),
|
||||||
'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
@@ -157,7 +158,7 @@ class AutoController extends Controller
|
|||||||
'tech_passport' => $request->tech_passport,
|
'tech_passport' => $request->tech_passport,
|
||||||
'tech_given_date' => $request->tech_given_date,
|
'tech_given_date' => $request->tech_given_date,
|
||||||
'tech_given_whom' => $request->tech_given_whom,
|
'tech_given_whom' => $request->tech_given_whom,
|
||||||
'cost' => $request->cost ?? 0,
|
'cost' => (int)str_replace(',', '', $request->cost ?? 0),
|
||||||
'note' => $request->note,
|
'note' => $request->note,
|
||||||
'created_at' => $request->created_at,
|
'created_at' => $request->created_at,
|
||||||
'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
@@ -214,7 +215,14 @@ class AutoController extends Controller
|
|||||||
$members = DB::table('order_members as om')
|
$members = DB::table('order_members as om')
|
||||||
->leftJoin('users as u', 'u.id', '=', 'om.user_id')
|
->leftJoin('users as u', 'u.id', '=', 'om.user_id')
|
||||||
->select('om.*', 'u.name', 'u.avatar', 'u.phone', 'u.role')
|
->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();
|
$appraisers = DB::table('users')->whereRaw('LOWER(role) = ?', ['appraiser'])->where('status', 'active')->get();
|
||||||
return view('auto.show-team', compact('order', 'members', 'appraisers'));
|
return view('auto.show-team', compact('order', 'members', 'appraisers'));
|
||||||
}
|
}
|
||||||
@@ -240,4 +248,56 @@ class AutoController extends Controller
|
|||||||
{
|
{
|
||||||
return redirect()->route('auto.index');
|
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"');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,8 @@ class ConclusionController extends Controller
|
|||||||
$qrPath = storage_path('app/public/attachments/' . $dbType . $orderId . '/qr.png');
|
$qrPath = storage_path('app/public/attachments/' . $dbType . $orderId . '/qr.png');
|
||||||
if (!file_exists($qrPath)) {
|
if (!file_exists($qrPath)) {
|
||||||
Storage::makeDirectory('public/attachments/' . $dbType . $orderId);
|
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);
|
$qrImage = QrCode::format('png')->size(150)->generate($qrContent);
|
||||||
file_put_contents($qrPath, $qrImage);
|
file_put_contents($qrPath, $qrImage);
|
||||||
}
|
}
|
||||||
@@ -123,6 +124,11 @@ class ConclusionController extends Controller
|
|||||||
'created_at' => now(),
|
'created_at' => now(),
|
||||||
'updated_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';
|
$route = $orderType === 'AUTO' ? 'auto.show' : 'estate.show';
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ class EstateController extends Controller
|
|||||||
'tech_passport' => $request->tech_passport,
|
'tech_passport' => $request->tech_passport,
|
||||||
'tech_given_date' => $request->tech_given_date,
|
'tech_given_date' => $request->tech_given_date,
|
||||||
'tech_given_whom' => $request->tech_given_whom,
|
'tech_given_whom' => $request->tech_given_whom,
|
||||||
'cost' => $request->cost ?? 0,
|
'cost' => (int)str_replace(',', '', $request->cost ?? 0),
|
||||||
'note' => $request->note,
|
'note' => $request->note,
|
||||||
'created_at' => $request->created_at ?? now(),
|
'created_at' => $request->created_at ?? now(),
|
||||||
'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
@@ -142,7 +142,7 @@ class EstateController extends Controller
|
|||||||
'tech_passport' => $request->tech_passport,
|
'tech_passport' => $request->tech_passport,
|
||||||
'tech_given_date' => $request->tech_given_date,
|
'tech_given_date' => $request->tech_given_date,
|
||||||
'tech_given_whom' => $request->tech_given_whom,
|
'tech_given_whom' => $request->tech_given_whom,
|
||||||
'cost' => $request->cost ?? 0,
|
'cost' => (int)str_replace(',', '', $request->cost ?? 0),
|
||||||
'note' => $request->note,
|
'note' => $request->note,
|
||||||
'created_at' => $request->created_at,
|
'created_at' => $request->created_at,
|
||||||
'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
@@ -196,7 +196,14 @@ class EstateController extends Controller
|
|||||||
$members = DB::table('order_members as om')
|
$members = DB::table('order_members as om')
|
||||||
->leftJoin('users as u', 'u.id', '=', 'om.user_id')
|
->leftJoin('users as u', 'u.id', '=', 'om.user_id')
|
||||||
->select('om.*', 'u.name', 'u.avatar', 'u.phone', 'u.role')
|
->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();
|
$appraisers = DB::table('users')->whereRaw('LOWER(role) = ?', ['appraiser'])->where('status', 'active')->get();
|
||||||
return view('estate.show-team', compact('order', 'members', 'appraisers'));
|
return view('estate.show-team', compact('order', 'members', 'appraisers'));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,38 @@ class QrController extends Controller
|
|||||||
return view('qr.show', compact('content'));
|
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)
|
public function reGenerate($id, $type)
|
||||||
{
|
{
|
||||||
self::generateQr($id, $type);
|
self::generateQr($id, $type);
|
||||||
@@ -22,7 +54,8 @@ class QrController extends Controller
|
|||||||
public static function generateQr($id, $type)
|
public static function generateQr($id, $type)
|
||||||
{
|
{
|
||||||
// type is 'auto_' or 'estate_'
|
// type is 'auto_' or 'estate_'
|
||||||
$url = url(($type === 'auto_' ? 'auto' : 'estate') . '/show/' . $id);
|
$cleanType = str_replace('_', '', $type);
|
||||||
|
$url = route('qr.verify', ['type' => $cleanType, 'id' => $id]);
|
||||||
$dir = 'public/attachments/' . $type . $id;
|
$dir = 'public/attachments/' . $type . $id;
|
||||||
Storage::makeDirectory($dir);
|
Storage::makeDirectory($dir);
|
||||||
$qr = QrCode::format('png')->size(200)->generate($url);
|
$qr = QrCode::format('png')->size(200)->generate($url);
|
||||||
|
|||||||
18
dummy.pdf
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
1 0 obj <</Type /Catalog /Pages 2 0 R>> endobj
|
||||||
|
2 0 obj <</Type /Pages /Kids [3 0 R] /Count 1>> endobj
|
||||||
|
3 0 obj <</Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R>> endobj
|
||||||
|
4 0 obj <</Length 22>> 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 <</Size 5 /Root 1 0 R>>
|
||||||
|
startxref
|
||||||
|
284
|
||||||
|
%%EOF
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
validate>
|
validate>
|
||||||
@csrf
|
@csrf
|
||||||
@method('put')
|
@method('put')
|
||||||
<input type="hidden" name="status" value="{{ App\Enums\OrderStatusEnum::DRAFT->name }}">
|
<input type="hidden" name="status" value="{{ $order->status }}">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
id="choices-purpose-input" tabindex="3">
|
id="choices-purpose-input" tabindex="3">
|
||||||
@foreach($purposeCases as $purposeItem)
|
@foreach($purposeCases as $purposeItem)
|
||||||
<option value="{{ $purposeItem->id }}"
|
<option value="{{ $purposeItem->id }}"
|
||||||
@if(old('purpose_id') == $purposeItem->id)selected @endif>
|
@if((old('purpose_id') ?? $order->purpose_id) == $purposeItem->id)selected @endif>
|
||||||
{{ $purposeItem->{str_replace('_', '-', app()->getLocale())} }}
|
{{ $purposeItem->{str_replace('_', '-', app()->getLocale())} }}
|
||||||
</option>
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
@@ -290,7 +290,7 @@
|
|||||||
id="choose-order-car-category" name="car_category" tabindex="10">
|
id="choose-order-car-category" name="car_category" tabindex="10">
|
||||||
@foreach ($concerns as $concern)
|
@foreach ($concerns as $concern)
|
||||||
<option value="{{ $concern->id }}"
|
<option value="{{ $concern->id }}"
|
||||||
{{ $concern->car_category == $concern->id ? 'selected' : '' }}>
|
{{ (old('car_category') ?? $order->car_category) == $concern->id ? 'selected' : '' }}>
|
||||||
@lang($concern->{str_replace('_', '-', app()->getLocale())})
|
@lang($concern->{str_replace('_', '-', app()->getLocale())})
|
||||||
</option>
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
@@ -500,11 +500,11 @@
|
|||||||
@lang('translation.select-diller')
|
@lang('translation.select-diller')
|
||||||
</label>
|
</label>
|
||||||
<select data-choices data-choices-search-false data-choices-multiple-groups="false"
|
<select data-choices data-choices-search-false data-choices-multiple-groups="false"
|
||||||
name="diller" class="form-select @error('diller') is-invalid @enderror"
|
name="diller_id" class="form-select @error('diller_id') is-invalid @enderror"
|
||||||
id="choices-diller-input"
|
id="choices-diller-input"
|
||||||
tabindex="23">
|
tabindex="23">
|
||||||
@foreach($dillers as $diller)
|
@foreach($dillers as $diller)
|
||||||
<option value="{{ $diller->id}}" @if($order->diller== $diller->id) selected @endif>
|
<option value="{{ $diller->id}}" @if((old('diller_id') ?? $order->diller_id) == $diller->id) selected @endif>
|
||||||
{{ $diller->name }}
|
{{ $diller->name }}
|
||||||
</option>
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|||||||
@@ -121,14 +121,22 @@
|
|||||||
{{ __('translation.conclusions') }}
|
{{ __('translation.conclusions') }}
|
||||||
</h4>
|
</h4>
|
||||||
<div class="flex-shrink-0">
|
<div class="flex-shrink-0">
|
||||||
@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, \App\Enums\OrderStatusEnum::FINISHED->name]) || in_array(Auth::user()?->role, ['admin', \App\Enums\RoleEnum::MANAGER->name]))
|
||||||
|
<a href="{{ route('auto.generate_pdf', $order->id) }}"
|
||||||
|
target="_blank"
|
||||||
|
class="btn btn-soft-success btn-sm me-1">
|
||||||
|
<i class="ri-download-2-line me-1 align-bottom"></i>
|
||||||
|
Tayyor xulosani yuklab olish
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
|
@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])))
|
||||||
<a href="{{ route('conclusion.add', ['id' => $order->id,'type'=>\App\Enums\OrderTypeEnum::AUTO->name]) }}"
|
<a href="{{ route('conclusion.add', ['id' => $order->id,'type'=>\App\Enums\OrderTypeEnum::AUTO->name]) }}"
|
||||||
type="button" class="btn btn-soft-info btn-sm">
|
type="button" class="btn btn-soft-info btn-sm">
|
||||||
<i class="ri-upload-2-fill me-1 align-bottom"></i>
|
<i class="ri-upload-2-fill me-1 align-bottom"></i>
|
||||||
{{ __('translation.upload') }}
|
{{ __('translation.upload') }}
|
||||||
</a>
|
</a>
|
||||||
@endif
|
@endif
|
||||||
@if($order->status == \App\Enums\OrderStatusEnum::FINISHED->name && in_array(Auth::user()->role,['admin',\App\Enums\RoleEnum::MANAGER->name]))
|
@if($order->status == \App\Enums\OrderStatusEnum::FINISHED->name && in_array(Auth::user()?->role,['admin',\App\Enums\RoleEnum::MANAGER->name]))
|
||||||
<button type="button" class="btn btn-soft-info btn-sm"
|
<button type="button" class="btn btn-soft-info btn-sm"
|
||||||
data-bs-toggle="modal"
|
data-bs-toggle="modal"
|
||||||
data-bs-target="#givingBonusModal">
|
data-bs-target="#givingBonusModal">
|
||||||
@@ -311,7 +319,7 @@
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header align-items-center d-flex border-bottom-dashed">
|
<div class="card-header align-items-center d-flex border-bottom-dashed">
|
||||||
<h4 class="card-title mb-0 flex-grow-1"> @lang('translation.member-appraisers')</h4>
|
<h4 class="card-title mb-0 flex-grow-1"> @lang('translation.member-appraisers')</h4>
|
||||||
@if(in_array(Auth::user()->role,['admin',\App\Enums\RoleEnum::MANAGER->name]))
|
@if(in_array(Auth::user()?->role,['admin',\App\Enums\RoleEnum::MANAGER->name]))
|
||||||
<div class="flex-shrink-0">
|
<div class="flex-shrink-0">
|
||||||
<button type="button" class="btn btn-soft-danger btn-sm"
|
<button type="button" class="btn btn-soft-danger btn-sm"
|
||||||
data-bs-toggle="modal"
|
data-bs-toggle="modal"
|
||||||
@@ -343,7 +351,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex-shrink-0">
|
<div class="flex-shrink-0">
|
||||||
<div class="d-flex align-items-center gap-1">
|
<div class="d-flex align-items-center gap-1">
|
||||||
@if(in_array(Auth::user()->role,['admin',\App\Enums\RoleEnum::MANAGER->name]))
|
@if(in_array(Auth::user()?->role,['admin',\App\Enums\RoleEnum::MANAGER->name]))
|
||||||
<form name="order-member{{ $member->id }}"
|
<form name="order-member{{ $member->id }}"
|
||||||
action="{{ route('member.remove') }}"
|
action="{{ route('member.remove') }}"
|
||||||
method="post"
|
method="post"
|
||||||
@@ -505,7 +513,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- Page content end row -->
|
<!-- Page content end row -->
|
||||||
|
|
||||||
@if(Auth::user()->role!=\App\Enums\RoleEnum::USER->name)
|
@if(Auth::user()?->role!=\App\Enums\RoleEnum::USER->name)
|
||||||
<!-- Attachment adding Modal -->
|
<!-- Attachment adding Modal -->
|
||||||
<div class="modal fade" id="attachModal" tabindex="-1" aria-labelledby="attachModalLabel" aria-hidden="true">
|
<div class="modal fade" id="attachModal" tabindex="-1" aria-labelledby="attachModalLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
@@ -590,7 +598,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- Attachment adding end modal -->
|
<!-- Attachment adding end modal -->
|
||||||
@endif
|
@endif
|
||||||
@if(in_array(Auth::user()->role,['admin',\App\Enums\RoleEnum::MANAGER->name]))
|
@if(in_array(Auth::user()?->role,['admin',\App\Enums\RoleEnum::MANAGER->name]))
|
||||||
<!-- Invite members Modal -->
|
<!-- Invite members Modal -->
|
||||||
<div class="modal fade" id="inviteMembersModal" tabindex="-1" aria-labelledby="inviteMembersModalLabel"
|
<div class="modal fade" id="inviteMembersModal" tabindex="-1" aria-labelledby="inviteMembersModalLabel"
|
||||||
aria-hidden="true">
|
aria-hidden="true">
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p class="text-muted mb-2"> @lang('translation.conclusion-file-pdf') </p>
|
<p class="text-muted mb-2"> @lang('translation.conclusion-file-pdf') </p>
|
||||||
<input type="file" class="form-control @error('file') is-invalid @enderror" name="file">
|
<input type="file" class="form-control @error('file') is-invalid @enderror" name="file" required accept="application/pdf">
|
||||||
@error('file')
|
@error('file')
|
||||||
<span class="invalid-feedback" role="alert">
|
<span class="invalid-feedback" role="alert">
|
||||||
<strong>@lang($message,['attribute'=>trans('translation.file')])</strong>
|
<strong>@lang($message,['attribute'=>trans('translation.file')])</strong>
|
||||||
|
|||||||
@@ -117,7 +117,7 @@
|
|||||||
{{ __('translation.conclusions') }}
|
{{ __('translation.conclusions') }}
|
||||||
</h4>
|
</h4>
|
||||||
<div class="flex-shrink-0">
|
<div class="flex-shrink-0">
|
||||||
@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])))
|
||||||
<a href="{{ route('conclusion.add', ['id' => $order->id,'type'=>\App\Enums\OrderTypeEnum::ESTATE->name]) }}"
|
<a href="{{ route('conclusion.add', ['id' => $order->id,'type'=>\App\Enums\OrderTypeEnum::ESTATE->name]) }}"
|
||||||
type="button" class="btn btn-soft-info btn-sm">
|
type="button" class="btn btn-soft-info btn-sm">
|
||||||
<i class="ri-upload-2-fill me-1 align-bottom"></i>
|
<i class="ri-upload-2-fill me-1 align-bottom"></i>
|
||||||
|
|||||||
162
routes/web.php
@@ -42,86 +42,88 @@ Route::get('index/{locale}', [HomeController::class, 'lang']);
|
|||||||
|
|
||||||
Route::get('/', [HomeController::class, 'index'])->name('root');
|
Route::get('/', [HomeController::class, 'index'])->name('root');
|
||||||
Route::get('index', [HomeController::class, 'index'])->name('index');
|
Route::get('index', [HomeController::class, 'index'])->name('index');
|
||||||
|
Route::get('v/{type}/{id}', [QrController::class, 'verify'])->name('qr.verify');
|
||||||
//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('/download/{file}', [FileStoreController::class, 'downloadFile'])->name('download');
|
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::group(['middleware' => ['auth']], function () {
|
||||||
Route::resource('/debit', DebitController::class);
|
//Update User Details
|
||||||
Route::resource('bonus', BonusController::class);
|
Route::post('/update-profile/{id}', [ProfileController::class, 'updateProfile'])->name('updateProfile');
|
||||||
Route::resource('certificates', CertificateController::class);
|
Route::post('/update-password/{id}', [ProfileController::class, 'updatePassword'])->name('updatePassword');
|
||||||
Route::resource('purposes', PurposeController::class);
|
Route::get('qr/show/{content}', [QrController::class, 'show'])->name('qr.show');
|
||||||
Route::resource('regions', RegionController::class);
|
Route::get('qr/re-generate/{id}/{type}', [QrController::class, 'reGenerate'])->name('qr.generate');
|
||||||
Route::get('/regions/districts/{id}', [RegionController::class, 'districts'])->name('regions.districts');
|
Route::get('conclusion/test-water-mark', [ConclusionController::class, 'testWaterMark'])->name('wm.show');
|
||||||
Route::resource('districts', DistrictController::class);
|
|
||||||
Route::resource('concerns', ConcernController::class);
|
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');
|
Route::get('{any}', [HomeController::class, 'pages'])->name('pages');
|
||||||
|
|||||||
BIN
storage/app/public/attachments/AUTO7884/qr.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
storage/app/public/attachments/auto_7883/qr.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
storage/app/public/attachments/auto_7884/qr.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
storage/app/public/attachments/auto_7885/qr.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
storage/app/public/attachments/auto_7886/qr.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
storage/app/public/attachments/auto_7887/qr.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
storage/app/public/attachments/auto_7889/qr.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 268 KiB |
|
After Width: | Height: | Size: 4.4 MiB |
|
After Width: | Height: | Size: 19 KiB |
BIN
storage/app/public/test_qr.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |