uppercese category qoshildi
This commit is contained in:
@@ -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"');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user