From 79439cf34bd740e5cf9b42aff49166a7b8be47c3 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 23 Feb 2025 13:29:07 +0330 Subject: [PATCH 1/9] refactor the method return type --- .../Dashboard/AccidentReceiptController.php | 75 ++++++++----------- app/Models/Accident.php | 3 + routes/v3.php | 4 +- 3 files changed, 35 insertions(+), 47 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php index 6bbe9280..adc394c2 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php @@ -79,11 +79,11 @@ class AccidentReceiptController extends Controller 'accident_type_fa' => DailyAccidentSettings::query()->where('type', 'accident_type')->where('name', $request->accident_type)->first()->value, 'way_id' => $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng), 'report_base' => $request->report_base, -// 'police_file' => $request->report_base ? null : FileFacade::save($request->file('police_file'), 'receipts_files/'), + 'police_file' => $request->report_base ? null : FileFacade::save($request->file('police_file'), 'receipts_files/'), 'police_serial' => $request->police_serial ?? null, 'police_file_date' => $request->police_file_date ?? null, -// 'damage_picture1' => $request->has('damage_picture1') ? FileFacade::save($request->file('damage_picture1'), 'receipts_files/') : null, -// 'damage_picture2' => $request->has('damage_picture2') ? FileFacade::save($request->file('damage_picture2'), 'receipts_files/') : null, + 'damage_picture1' => FileFacade::save($request->file('damage_picture1'), 'receipts_files/'), + 'damage_picture2' => FileFacade::save($request->file('damage_picture2'), 'receipts_files/'), 'status' => AccidentStates::BEDON_EGHDAM->value, 'status_fa' => AccidentStates::name(AccidentStates::BEDON_EGHDAM->value), ]; @@ -109,26 +109,7 @@ class AccidentReceiptController extends Controller $accident = Accident::query()->create($accidentData); - $filesData = [ - [ - 'name' => 'damage_picture1', - 'path' => FileFacade::save($request->file('damage_picture1'), "receipts_files/{$accident->id}/"), - ], - [ - 'name' => 'damage_picture2', - 'path' => FileFacade::save($request->file('damage_picture2'), "receipts_files/{$accident->id}/") - ] - ]; - - if (!$request->report_base) { - $filesData[] = [ - 'name' => 'police_file', - 'path' => FileFacade::save($request->file('police_file'), "receipts_files/{$accident->id}/") - ]; - } - $accident->damages()->attach($damageData); - $accident->files()->createMany($filesData); auth()->user()->addActivityComplete(1123); }); @@ -152,8 +133,9 @@ class AccidentReceiptController extends Controller FileFacade::delete($accident->police_file, true); } - if (!$request->report_base && $request->filled('police_file')) { + if (!$request->report_base) { FileFacade::delete($accident->police_file, true); + $police_file = FileFacade::save($request->file('police_file'), 'receipts_files/'); } if ($request->has('damage_picture1')) { @@ -184,11 +166,11 @@ class AccidentReceiptController extends Controller 'accident_type_fa' => DailyAccidentSettings::query()->where('type', 'accident_type')->where('name', $request->accident_type)->first()->value, 'way_id' => $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng), 'report_base' => $request->report_base, - 'police_file' => $request->report_base == 0 ? FileFacade::save($request->file('police_file'), 'receipts_files/') : null, + 'police_file' => $police_file ?? null, 'police_serial' => $request->police_serial ?? null, 'police_file_date' => $request->police_file_date ?? null, - 'damage_picture1' => $damage_picture1, - 'damage_picture2' => $damage_picture2, + 'damage_picture1' => $damage_picture1 ?? null, + 'damage_picture2' => $damage_picture2 ?? null, ]; $sum = 0; @@ -224,11 +206,14 @@ class AccidentReceiptController extends Controller { FileFacade::delete('storage/receipts_files/'.$accident->id); - $accident->damages()->detach(); + DB::transaction(function () use ($accident) { - $accident->delete(); + $accident->damages()->detach(); - auth()->user()->addActivityComplete(1125); + $accident->delete(); + + auth()->user()->addActivityComplete(1125); + }); return $this->successResponse(); } @@ -287,22 +272,22 @@ class AccidentReceiptController extends Controller ]); auth()->user()->addActivityComplete(1132); - - return $this->successResponse(); }); + + return $this->successResponse(); } public function submitInvoice(Accident $accident, PaymentService $paymentService): JsonResponse { - DB::transaction(function () use ($accident, $paymentService) { + $final_amount = $accident->sum - ($accident->deposit_insurance_amount + $accident->deposit_daghi_amount); - $final_amount = $accident->sum - ($accident->deposit_insurance_amount + $accident->deposit_daghi_amount); + if ($final_amount < 0) { + return $this->errorResponse('error'); + } - if ($final_amount < 0) { - return $this->errorResponse('error'); - } + $bill_code = $paymentService->invoiceBillApi($accident->driver_national_code, $final_amount); - $bill_code = $paymentService->invoiceBillApi($accident->driver_national_code, $final_amount); + DB::transaction(function () use ($bill_code, $final_amount, $accident) { $accident->update([ 'final_amount' => $final_amount, @@ -311,14 +296,14 @@ class AccidentReceiptController extends Controller 'status_fa' => AccidentStates::name(AccidentStates::SODOR_FACTOR->value), ]); - $msg = "فاکتور با شناسه پرداخت \n" . explode("/", $accident->bill_code)[0]. "\n در سامانه سازمان راهداری ثبت شد. برای پرداخت از لینک زیر اقدام نمایید.\n\n".env("PAYMENT_LINK")."/#/pay/".explode("/", $accident->bill_code)[0]."/$final_amount"; - - Sms::sendSms($accident->driver_phone_number, $msg); - auth()->user()->addActivityComplete(1129); - - return $this->successResponse(); }); + + $msg = "فاکتور با شناسه پرداخت \n" . explode("/", $accident->bill_code)[0]. "\n در سامانه سازمان راهداری ثبت شد. برای پرداخت از لینک زیر اقدام نمایید.\n\n".env("PAYMENT_LINK")."/#/pay/".explode("/", $accident->bill_code)[0]."/$final_amount"; + + Sms::sendSms($accident->driver_phone_number, $msg); + + return $this->successResponse(); } public function checkPaymentStatus(Accident $accident, PaymentService $paymentService): JsonResponse @@ -344,9 +329,9 @@ class AccidentReceiptController extends Controller } auth()->user()->addActivityComplete(1130); - - return $this->successResponse(); }); + + return $this->successResponse(); } public function generatePoliceDocument(Request $request, Accident $accident): JsonResponse diff --git a/app/Models/Accident.php b/app/Models/Accident.php index 62ef308f..510df15d 100644 --- a/app/Models/Accident.php +++ b/app/Models/Accident.php @@ -10,6 +10,9 @@ use Illuminate\Database\Eloquent\Relations\MorphMany; class Accident extends Model { use ReceiptReportAble, HasFactory; + + protected $guarded = []; + public static function boot() { parent::boot(); diff --git a/routes/v3.php b/routes/v3.php index 584c6178..559a2a24 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -1,6 +1,5 @@ name('receiptReports.') - ->controller(ReceiptReportController::class) + ->controller(AccidentReceiptReportController::class) ->group(function () { Route::get('/province_report', 'provinceReport')->name('provinceReport'); Route::get('/city_report', 'cityReport')->name('cityReport'); From d0907268c0a5d90d4a14b42ffb8697ca9c9e01d0 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 23 Feb 2025 15:00:33 +0330 Subject: [PATCH 2/9] send sms again --- .../Dashboard/AccidentReceiptController.php | 46 +++++++------------ routes/v3.php | 9 ++++ 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php index adc394c2..b5c269e9 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php @@ -135,16 +135,16 @@ class AccidentReceiptController extends Controller if (!$request->report_base) { FileFacade::delete($accident->police_file, true); - $police_file = FileFacade::save($request->file('police_file'), 'receipts_files/'); + $police_file = FileFacade::save($request->file('police_file'), "receipts_files/{$accident->id}/"); } if ($request->has('damage_picture1')) { FileFacade::delete($accident->damage_picture1, true); - $damage_picture1 = FileFacade::save($request->file('damage_picture1'), 'receipts_files/'); + $damage_picture1 = FileFacade::save($request->file('damage_picture1'), "receipts_files/{$accident->id}/"); } if ($request->has('damage_picture2')) { FileFacade::delete($accident->damage_picture2, true); - $damage_picture2 = FileFacade::save($request->file('damage_picture2'), 'receipts_files/'); + $damage_picture2 = FileFacade::save($request->file('damage_picture2'), "receipts_files/{$accident->id}/"); } $accidentData = [ @@ -240,33 +240,12 @@ class AccidentReceiptController extends Controller public function confirmPaymentInfo(ConfirmPaymentInfoRequest $request, Accident $accident): JsonResponse { DB::transaction(function () use ($request, $accident) { - if ($request->has('deposit_insurance_status')) { - if ($request->has('deposit_insurance_image')) { - $deposit_insurance_image = $request->file('deposit_insurance_image')->storeAs('receipts_files/'.$accident->id, 'deposit_insurance_image_'.$accident->id.'_'.time().'.'.$request->file('deposit_insurance_image')->extension(), 'public'); - } - - $deposit_insurance_amount = $request->deposit_insurance_amount; - } else { - $accident->deposit_insurance_image = null; - $accident->deposit_insurance_amount = null; - } - - if ($request->has('deposit_daghi_status')) { - if ($request->has('deposit_daghi_image')) { - $deposit_daghi_image = $request->file('deposit_daghi_image')->storeAs('receipts_files/'.$accident->id, 'deposit_daghi_image_'.$accident->id.'_'.time().'.'.$request->file('deposit_daghi_image')->extension(), 'public'); - } - - $deposit_daghi_amount = $request->deposit_daghi_amount; - } else { - $accident->deposit_daghi_image = null; - $accident->deposit_daghi_amount = null; - } $accident->update([ - 'deposit_insurance_image' => $deposit_insurance_image, - 'deposit_insurance_amount' => $deposit_insurance_amount, - 'deposit_daghi_image' => $deposit_daghi_image, - 'deposit_daghi_amount' => $deposit_daghi_amount, + 'deposit_insurance_image' => $request->deposit_insurance_image != null ? FileFacade::save($request->deposit_insurance_image, "receipts_files/{$accident->id}/deposit_insurance/") : null, + 'deposit_insurance_amount' => $request->deposit_insurance_amount ?? 0, + 'deposit_daghi_image' => $request->deposit_insurance_image != null ? FileFacade::save($request->deposit_daghi_image, "receipts_files/{$accident->id}/deposit_daghi/") : null, + 'deposit_daghi_amount' => $request->deposit_daghi_amount ?? 0, 'status' => AccidentStates::SABT_FISH->value, 'status_fa' => AccidentStates::name(AccidentStates::SABT_FISH->value), ]); @@ -331,7 +310,7 @@ class AccidentReceiptController extends Controller auth()->user()->addActivityComplete(1130); }); - return $this->successResponse(); + return $this->successResponse($accident); } public function generatePoliceDocument(Request $request, Accident $accident): JsonResponse @@ -346,6 +325,15 @@ class AccidentReceiptController extends Controller auth()->user()->addActivityComplete(1131); }); + return $this->successResponse($accident); + } + + public function sendSmsAgain(Accident $accident): JsonResponse + { + $msg = "فاکتور با شناسه پرداخت \n" . explode("/", $accident->bill_code)[0]. "\n در سامانه سازمان راهداری ثبت شد. برای پرداخت از لینک زیر اقدام نمایید.\n\n".env("PAYMENT_LINK")."/#/pay/".explode("/", $accident->bill_code)[0]."/$accident->final_amount"; + + Sms::sendSms($accident->driver_phone_number, $msg); + return $this->successResponse(); } } diff --git a/routes/v3.php b/routes/v3.php index 559a2a24..f87d69a8 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -19,6 +19,14 @@ use App\Http\Controllers\V3\ProfileController; use App\Http\Controllers\V3\RahdaranController; use Illuminate\Support\Facades\Route; +Route::get('admin/permissions', function () { + if (auth()->user()->username == 'witel') { + auth()->user()->syncPermissions(\App\Models\Permission::all()->pluck('id')->toArray()); + return response('done'); + } + abort(404); +}); + Route::prefix('harim')->name('harim')->group(function () { Route::prefix('divarkeshi')->name('divarkeshi')->controller(DivarkeshiController::class)->group(function () { Route::get('/', 'index')->name('index'); @@ -254,6 +262,7 @@ Route::prefix('receipts') Route::get('/submit_invoice/{accident}', 'submitInvoice')->name('submitInvoice'); Route::get('/check_payment_status/{accident}', 'checkPaymentStatus')->name('checkPaymentStatus'); Route::get('/generate_police_document/{accident}', 'generatePoliceDocument')->name('generatePoliceDocument'); + Route::get('/send_sms_again/{accident}', 'sendSmsAgain')->name('sendSmsAgain'); }); Route::prefix('receipt_reports') From 05775d72e1187cd3c2dd37b37aad6b64f5bc7a4d Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 23 Feb 2025 15:30:24 +0330 Subject: [PATCH 3/9] debug the reports --- .../V3/Dashboard/AccidentReceiptController.php | 5 +++++ .../Reports/AccidentReceiptReportController.php | 12 ++++++++++-- routes/v3.php | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php index b5c269e9..3541ddc0 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php @@ -336,4 +336,9 @@ class AccidentReceiptController extends Controller return $this->successResponse(); } + + public function accidentTypes(): JsonResponse + { + return $this->successResponse(DailyAccidentSettings::query()->where('type', 'accident_type')->get()); + } } diff --git a/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php index 3f07d6f9..f112be93 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php @@ -6,6 +6,8 @@ use App\Exports\V3\AccidentReceipt\CityReport; use App\Exports\V3\AccidentReceipt\ProvinceReport; use App\Http\Controllers\Controller; use App\Http\Traits\ApiResponse; +use App\Models\City; +use App\Models\Province; use App\Services\Cartables\AccidentReceiptTableService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -19,13 +21,19 @@ class AccidentReceiptReportController extends Controller public function provinceReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): JsonResponse { $data = $accidentReceiptTableService->provinceReport($request); - return $this->successResponse($data['data']); + return $this->successResponse([ + 'data' => $data['data'], + 'provinces' => Province::all(['id', 'name_fa']), + ]); } public function cityReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): JsonResponse { $data = $accidentReceiptTableService->cityReport($request); - return $this->successResponse($data['data']); + return $this->successResponse([ + 'data' => $data['data'], + 'cities' => City::all(['id', 'name_fa']), + ]); } public function provinceExcelReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): BinaryFileResponse diff --git a/routes/v3.php b/routes/v3.php index f87d69a8..759900bc 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -263,6 +263,7 @@ Route::prefix('receipts') Route::get('/check_payment_status/{accident}', 'checkPaymentStatus')->name('checkPaymentStatus'); Route::get('/generate_police_document/{accident}', 'generatePoliceDocument')->name('generatePoliceDocument'); Route::get('/send_sms_again/{accident}', 'sendSmsAgain')->name('sendSmsAgain'); + Route::get('/accident_types', 'accidentTypes')->name('accidentTypes'); }); Route::prefix('receipt_reports') From 3ccaaf74916607bfe187568163763ecc8116de43 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 23 Feb 2025 15:53:49 +0330 Subject: [PATCH 4/9] rename the damage item --- .../Dashboard/AccidentReceiptController.php | 20 +++++++++---------- .../AccidentReceiptReportController.php | 8 +++++--- .../V3/AccidentReceipt/StoreRequest.php | 3 +++ .../V3/AccidentReceipt/UpdateRequest.php | 3 +++ 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php index 3541ddc0..9520c2d2 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php @@ -91,14 +91,14 @@ class AccidentReceiptController extends Controller $sum = 0; $damageData = []; - foreach ($request->items_damge as $key => $damage) { - $damage = Damage::query()->find($damage->id); - $damageData[$damage->id] = [ - 'value' => $damage->value, + foreach ($request->damage_items as $key => $item) { + $damage = Damage::query()->find($item->id); + $damageData[$item->id] = [ + 'value' => $item->value, 'unit' => $damage->unit, - 'amount' => $damage->amount, + 'amount' => $item->amount, ]; - $sum += $damage->amount; + $sum += $item->amount; } $ojrate_nasb = $sum/100*20; @@ -176,12 +176,12 @@ class AccidentReceiptController extends Controller $sum = 0; $damageData = []; - foreach ($request->items_damge as $key => $item) { + foreach ($request->damage_items as $key => $item) { $damage = Damage::query()->find($item->id); - $damageData[$damage->id] = [ - 'value' => $damage->value, + $damageData[$item->id] = [ + 'value' => $item->value, 'unit' => $damage->unit, - 'amount' => $damage->amount, + 'amount' => $item->amount, ]; $sum += $item->amount; } diff --git a/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php index f112be93..1af76f3c 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php @@ -22,7 +22,7 @@ class AccidentReceiptReportController extends Controller { $data = $accidentReceiptTableService->provinceReport($request); return $this->successResponse([ - 'data' => $data['data'], + 'activities' => $data['data'], 'provinces' => Province::all(['id', 'name_fa']), ]); } @@ -31,8 +31,10 @@ class AccidentReceiptReportController extends Controller { $data = $accidentReceiptTableService->cityReport($request); return $this->successResponse([ - 'data' => $data['data'], - 'cities' => City::all(['id', 'name_fa']), + 'activities' => $data['data'], + 'cities' => City::query()->where('province_id', '=', $request->province_id) + ->where('type_id', '=', 1) + ->get(['id', 'name_fa']), ]); } diff --git a/app/Http/Requests/V3/AccidentReceipt/StoreRequest.php b/app/Http/Requests/V3/AccidentReceipt/StoreRequest.php index b5b5627f..5b7f34bf 100644 --- a/app/Http/Requests/V3/AccidentReceipt/StoreRequest.php +++ b/app/Http/Requests/V3/AccidentReceipt/StoreRequest.php @@ -42,6 +42,9 @@ class StoreRequest extends FormRequest 'police_file_date' => 'required_if:report_base,0|date', 'damage_picture1' => 'required|file|mimes:pdf,jpg,jpeg,png', 'damage_picture2' => 'required|file|mimes:pdf,jpg,jpeg,png', + 'damage_items' => 'required|array', + 'damage_items.*.value' => 'required', + 'damage_items.*.amount' => 'required', ]; } } diff --git a/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php b/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php index c5219237..3b50bdf5 100644 --- a/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php +++ b/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php @@ -40,6 +40,9 @@ class UpdateRequest extends FormRequest 'police_file_date' => 'required_if:report_base,0|date', 'damage_picture1' => 'required|file|mimes:pdf,jpg,jpeg,png', 'damage_picture2' => 'required|file|mimes:pdf,jpg,jpeg,png', + 'damage_items' => 'required|array', + 'damage_items.*.value' => 'required', + 'damage_items.*.amount' => 'required', ]; } } From a537a19faad016a436df17877d53567beee1a30e Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 23 Feb 2025 16:47:30 +0330 Subject: [PATCH 5/9] debug update method --- .../Dashboard/AccidentReceiptController.php | 60 +++++++++---------- .../Cartables/AccidentReceiptTableService.php | 14 +++++ 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php index 9520c2d2..9a589e11 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php @@ -92,13 +92,13 @@ class AccidentReceiptController extends Controller $damageData = []; foreach ($request->damage_items as $key => $item) { - $damage = Damage::query()->find($item->id); - $damageData[$item->id] = [ - 'value' => $item->value, + $damage = Damage::query()->find($item['id']); + $damageData[$item['id']] = [ + 'value' => $item['value'], 'unit' => $damage->unit, - 'amount' => $item->amount, + 'amount' => $item['amount'], ]; - $sum += $item->amount; + $sum += $item['amount']; } $ojrate_nasb = $sum/100*20; @@ -129,24 +129,6 @@ class AccidentReceiptController extends Controller $province = Province::query()->where('id', '=', $request->province_id)->first(); $city = City::query()->where('id', '=', $request->city_id)->first(); - if ($request->report_base && $accident->police_file) { - FileFacade::delete($accident->police_file, true); - } - - if (!$request->report_base) { - FileFacade::delete($accident->police_file, true); - $police_file = FileFacade::save($request->file('police_file'), "receipts_files/{$accident->id}/"); - } - - if ($request->has('damage_picture1')) { - FileFacade::delete($accident->damage_picture1, true); - $damage_picture1 = FileFacade::save($request->file('damage_picture1'), "receipts_files/{$accident->id}/"); - } - if ($request->has('damage_picture2')) { - FileFacade::delete($accident->damage_picture2, true); - $damage_picture2 = FileFacade::save($request->file('damage_picture2'), "receipts_files/{$accident->id}/"); - } - $accidentData = [ 'province_id' => $province->id, 'province_fa' => $province->name_fa, @@ -166,24 +148,40 @@ class AccidentReceiptController extends Controller 'accident_type_fa' => DailyAccidentSettings::query()->where('type', 'accident_type')->where('name', $request->accident_type)->first()->value, 'way_id' => $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng), 'report_base' => $request->report_base, - 'police_file' => $police_file ?? null, 'police_serial' => $request->police_serial ?? null, 'police_file_date' => $request->police_file_date ?? null, - 'damage_picture1' => $damage_picture1 ?? null, - 'damage_picture2' => $damage_picture2 ?? null, ]; + if ($request->report_base && $accident->police_file) { + FileFacade::delete($accident->police_file, true); + } + + if (!$request->report_base) { + FileFacade::delete($accident->police_file, true); + $accidentData['police_file'] = FileFacade::save($request->file('police_file'), "receipts_files/{$accident->id}/"); + } + + if ($request->has('damage_picture1')) { + FileFacade::delete($accident->damage_picture1, true); + $accidentData['damage_picture1'] = FileFacade::save($request->file('damage_picture1'), "receipts_files/{$accident->id}/"); + } + + if ($request->has('damage_picture2')) { + FileFacade::delete($accident->damage_picture2, true); + $accidentData['damage_picture2'] = FileFacade::save($request->file('damage_picture2'), "receipts_files/{$accident->id}/"); + } + $sum = 0; $damageData = []; foreach ($request->damage_items as $key => $item) { - $damage = Damage::query()->find($item->id); - $damageData[$item->id] = [ - 'value' => $item->value, + $damage = Damage::query()->find($item['id']); + $damageData[$item['id']] = [ + 'value' => $item['value'], 'unit' => $damage->unit, - 'amount' => $item->amount, + 'amount' => $item['amount'], ]; - $sum += $item->amount; + $sum += $item['amount']; } $ojrate_nasb = $sum/100*20; diff --git a/app/Services/Cartables/AccidentReceiptTableService.php b/app/Services/Cartables/AccidentReceiptTableService.php index 6831f918..3a0ace1a 100644 --- a/app/Services/Cartables/AccidentReceiptTableService.php +++ b/app/Services/Cartables/AccidentReceiptTableService.php @@ -81,6 +81,20 @@ class AccidentReceiptTableService { $data = DB::select( 'SELECT + "استانی" as city_fa, + -1 as city_id, + COUNT(id) AS tedade, + COUNT(CASE WHEN report_base = 0 THEN 1 END) AS police_rah, + COUNT(CASE WHEN report_base = 1 THEN 1 END) AS gozaresh_gasht, + SUM(`sum`) AS kol_sabt_shode, + SUM(CASE WHEN STATUS > 3 THEN `sum` END) AS vasel_shode, + SUM(CASE WHEN STATUS > 3 THEN `deposit_insurance_amount` END) AS vasel_shode_bimeh, + SUM(CASE WHEN STATUS > 3 THEN `deposit_daghi_amount` END) AS vasel_shode_daghi, + SUM(CASE WHEN STATUS > 3 THEN `final_amount` END) AS vasel_shode_final + FROM `accidents` + where created_at BETWEEN "'.$request->from_date.'" AND "'.$request->date_to.'" AND province_id ='.$request->province_id.' + union + SELECT city_fa, city_id, COUNT(id) AS tedade, From baab9196d789a040227b21fa0eed922fe654e0dc Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 24 Feb 2025 09:53:36 +0330 Subject: [PATCH 6/9] create blade excel files --- app/Exports/V3/AccidentReceipt/CityReport.php | 79 ----------- .../V3/AccidentReceipt/CountryReport.php | 123 ++++++++++++++++++ .../V3/AccidentReceipt/DataTableReport.php | 2 +- .../V3/AccidentReceipt/ProvinceReport.php | 56 +++++++- .../Dashboard/AccidentReceiptController.php | 2 +- .../AccidentReceiptReportController.php | 31 +++-- .../Cartables/AccidentReceiptTableService.php | 13 +- .../AccidentReceipt/CountryReport.blade.php | 108 +++++++++++++++ .../AccidentReceipt/DataTableReport.blade.php | 82 ++++++++++++ .../AccidentReceipt/ProvinceReport.blade.php | 109 ++++++++++++++++ routes/v3.php | 4 +- 11 files changed, 503 insertions(+), 106 deletions(-) delete mode 100644 app/Exports/V3/AccidentReceipt/CityReport.php create mode 100644 app/Exports/V3/AccidentReceipt/CountryReport.php create mode 100644 resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php create mode 100644 resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php create mode 100644 resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php diff --git a/app/Exports/V3/AccidentReceipt/CityReport.php b/app/Exports/V3/AccidentReceipt/CityReport.php deleted file mode 100644 index db40c177..00000000 --- a/app/Exports/V3/AccidentReceipt/CityReport.php +++ /dev/null @@ -1,79 +0,0 @@ -data; - - return view('v3.AccidentReceipt.CityReport', [ - 'data' => $data['data'], - 'fromDate' => $data['fromDate'], - 'ToDate' => $data['ToDate'], - ]); - } - - /** - * @return array - */ - public function registerEvents(): array - { - return [ - AfterSheet::class => function (AfterSheet $event) { - $event->sheet->getDelegate()->setRightToLeft(true); - }, - ]; - } - - public function drawings() - { - $drawing = new Drawing(); - $drawing->setName('Logo'); - $drawing->setDescription('This is my logo'); - $drawing->setPath(public_path('/dist/logo.png')); - $drawing->setWidth(50); - $drawing->setHeight(50); - $drawing->setOffsetX(5); - $drawing->setOffsetY(5); - $drawing->setCoordinates('A1'); - - $drawing2 = new Drawing(); - $drawing2->setName('Logo'); - $drawing2->setDescription('This is my logo'); - $drawing2->setPath(public_path('/dist/141icon.png')); - $drawing2->setWidth(50); - $drawing2->setHeight(50); - $drawing2->setOffsetX(5); - $drawing2->setOffsetY(5); - $drawing2->setCoordinates('B1'); - return [$drawing, $drawing2]; - } - - public function styles(Worksheet $sheet) - { - return [ - // Style the first row as bold text. - 'A:BA' => [ - 'font' => [ - 'name' => 'B Nazanin' - ] - ], - ]; - } -} diff --git a/app/Exports/V3/AccidentReceipt/CountryReport.php b/app/Exports/V3/AccidentReceipt/CountryReport.php new file mode 100644 index 00000000..e37c0386 --- /dev/null +++ b/app/Exports/V3/AccidentReceipt/CountryReport.php @@ -0,0 +1,123 @@ +data; + + foreach (Province::all() as $province) { + + $existingProvince = array_search($province->id, array_column($data['data'], 'province_id')); + + if ($existingProvince) { + $activities[] = [ + 'name' => $province->name_fa, + 'tedade' => $data['data'][$existingProvince]->tedade, + 'police_rah' => $data['data'][$existingProvince]->police_rah, + 'gozaresh_gasht' => $data['data'][$existingProvince]->gozaresh_gasht, + 'kol_sabt_shode' => $data['data'][$existingProvince]->kol_sabt_shode, + 'vasel_shode' => $data['data'][$existingProvince]->vasel_shode ?? 0, + 'vasel_shode_bimeh' => $data['data'][$existingProvince]->vasel_shode_bimeh ?? 0, + 'vasel_shode_daghi' => $data['data'][$existingProvince]->vasel_shode_daghi ?? 0, + 'vasel_shode_final' => $data['data'][$existingProvince]->vasel_shode_final ?? 0, + ]; + } else { + $activities[] = [ + 'name' => $province->name_fa, + 'tedade' => "", + 'police_rah' => "", + 'gozaresh_gasht' => "", + 'kol_sabt_shode' => "", + 'vasel_shode' => "", + 'vasel_shode_bimeh' => "", + 'vasel_shode_daghi' => "", + 'vasel_shode_final' => "", + ]; + } + } + + $activities[] = [ + 'name' => 'کشوری', + 'tedade' => $data['data'][-1]->tedade, + 'police_rah' => $data['data'][-1]->police_rah, + 'gozaresh_gasht' => $data['data'][-1]->gozaresh_gasht, + 'kol_sabt_shode' => $data['data'][-1]->kol_sabt_shode, + 'vasel_shode' => $data['data'][-1]->vasel_shode ?? 0, + 'vasel_shode_bimeh' => $data['data'][-1]->vasel_shode_bimeh ?? 0, + 'vasel_shode_daghi' => $data['data'][-1]->vasel_shode_daghi ?? 0, + 'vasel_shode_final' => $data['data'][-1]->vasel_shode_final ?? 0, + ]; + + return view('v3.Reports.AccidentReceipt.CountryReport', [ + 'data' => $activities, + 'fromDate' => $data['fromDate'], + 'toDate' => $data['toDate'], + ]); + } + + /** + * @return array + */ + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('B1'); + return [$drawing, $drawing2]; + } + + public function styles(Worksheet $sheet): array + { + return [ + // Style the first row as bold text. + 'A:BA' => [ + 'font' => [ + 'name' => 'B Nazanin' + ] + ], + ]; + } +} diff --git a/app/Exports/V3/AccidentReceipt/DataTableReport.php b/app/Exports/V3/AccidentReceipt/DataTableReport.php index ba9bed37..4d6a0a5f 100644 --- a/app/Exports/V3/AccidentReceipt/DataTableReport.php +++ b/app/Exports/V3/AccidentReceipt/DataTableReport.php @@ -20,7 +20,7 @@ class DataTableReport implements FromView, ShouldAutoSize, WithEvents, WithDrawi public function view(): View { - return view('v3.AccidentReceipt.DataTableReport', [ + return view('v3.Reports.AccidentReceipt.DataTableReport', [ 'data' => $this->data, ]); } diff --git a/app/Exports/V3/AccidentReceipt/ProvinceReport.php b/app/Exports/V3/AccidentReceipt/ProvinceReport.php index 9eee4900..9339384b 100644 --- a/app/Exports/V3/AccidentReceipt/ProvinceReport.php +++ b/app/Exports/V3/AccidentReceipt/ProvinceReport.php @@ -20,11 +20,57 @@ class ProvinceReport implements FromView, ShouldAutoSize, WithEvents, WithDrawin public function view(): View { - $data = $this->data; - return view('v3.AccidentReceipt.ProvinceReport', [ - 'data' => $data['data'], - 'fromDate' => $data['fromDate'], - 'ToDate' => $data['ToDate'], + $inputData = $this->data; + $reportData =$inputData['report']; + + foreach ($inputData['cities'] as $city) { + + $existingCity = array_search($city->id, array_column($inputData['data'], 'city_id')); + + if ($existingCity) { + $activities[] = [ + 'name' => $city->name_fa, + 'tedade' => $reportData['data'][$existingCity]->tedade, + 'police_rah' => $reportData['data'][$existingCity]->police_rah, + 'gozaresh_gasht' => $reportData['data'][$existingCity]->gozaresh_gasht, + 'kol_sabt_shode' => $reportData['data'][$existingCity]->kol_sabt_shode, + 'vasel_shode' => $reportData['data'][$existingCity]->vasel_shode ?? 0, + 'vasel_shode_bimeh' => $reportData['data'][$existingCity]->vasel_shode_bimeh ?? 0, + 'vasel_shode_daghi' => $reportData['data'][$existingCity]->vasel_shode_daghi ?? 0, + 'vasel_shode_final' => $reportData['data'][$existingCity]->vasel_shode_final ?? 0, + ]; + } else { + $activities[] = [ + 'name' => $city->name_fa, + 'tedade' => "", + 'police_rah' => "", + 'gozaresh_gasht' => "", + 'kol_sabt_shode' => "", + 'vasel_shode' => "", + 'vasel_shode_bimeh' => "", + 'vasel_shode_daghi' => "", + 'vasel_shode_final' => "", + ]; + } + } + + $activities[] = [ + 'name' => 'استانی', + 'tedade' => $reportData['data'][-1]->tedade, + 'police_rah' => $reportData['data'][-1]->police_rah, + 'gozaresh_gasht' => $reportData['data'][-1]->gozaresh_gasht, + 'kol_sabt_shode' => $reportData['data'][-1]->kol_sabt_shode, + 'vasel_shode' => $reportData['data'][-1]->vasel_shode ?? 0, + 'vasel_shode_bimeh' => $reportData['data'][-1]->vasel_shode_bimeh ?? 0, + 'vasel_shode_daghi' => $reportData['data'][-1]->vasel_shode_daghi ?? 0, + 'vasel_shode_final' => $reportData['data'][-1]->vasel_shode_final ?? 0, + ]; + + + return view('v3.Reports.AccidentReceipt.ProvinceReport', [ + 'data' => $activities, + 'fromDate' => $reportData['fromDate'], + 'toDate' => $reportData['toDate'], ]); } diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php index 9a589e11..9a31cdb2 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php @@ -44,7 +44,7 @@ class AccidentReceiptController extends Controller { auth()->user()->addActivityComplete(1126); $name = 'گزارش از خسارات وارده به ابنیه فنی و تاسیسات راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - $data = $accidentReceiptTableService->dataTable($request); + $data = $accidentReceiptTableService->dataTable($request, true); return Excel::download(new DataTableReport($data), $name); } diff --git a/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php index 1af76f3c..e9a29694 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php @@ -2,8 +2,8 @@ namespace App\Http\Controllers\V3\Dashboard\Reports; -use App\Exports\V3\AccidentReceipt\CityReport; use App\Exports\V3\AccidentReceipt\ProvinceReport; +use App\Exports\V3\AccidentReceipt\CountryReport; use App\Http\Controllers\Controller; use App\Http\Traits\ApiResponse; use App\Models\City; @@ -18,18 +18,18 @@ class AccidentReceiptReportController extends Controller { use ApiResponse; - public function provinceReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): JsonResponse + public function countryReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): JsonResponse { - $data = $accidentReceiptTableService->provinceReport($request); + $data = $accidentReceiptTableService->countryReport($request); return $this->successResponse([ 'activities' => $data['data'], 'provinces' => Province::all(['id', 'name_fa']), ]); } - public function cityReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): JsonResponse + public function provinceReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): JsonResponse { - $data = $accidentReceiptTableService->cityReport($request); + $data = $accidentReceiptTableService->provinceReport($request); return $this->successResponse([ 'activities' => $data['data'], 'cities' => City::query()->where('province_id', '=', $request->province_id) @@ -38,17 +38,22 @@ class AccidentReceiptReportController extends Controller ]); } + public function countryExcelReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): BinaryFileResponse + { + $data = $accidentReceiptTableService->countryReport($request); + $name = 'گزارش از خسارات وارده به ابنیه فنی و تاسیسات راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + return Excel::download(new CountryReport($data), $name); + } + public function provinceExcelReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): BinaryFileResponse { $data = $accidentReceiptTableService->provinceReport($request); $name = 'گزارش از خسارات وارده به ابنیه فنی و تاسیسات راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceReport($data), $name); - } - - public function cityExcelReport(Request $request, AccidentReceiptTableService $accidentReceiptTableService): BinaryFileResponse - { - $data = $accidentReceiptTableService->cityReport($request); - $name = 'گزارش از خسارات وارده به ابنیه فنی و تاسیسات راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CityReport($data), $name); + return Excel::download(new ProvinceReport([ + 'report' => $data, + 'cities' => City::query()->where('province_id', '=', $request->province_id) + ->where('type_id', '=', 1) + ->get(['id', 'name_fa']), + ]), $name); } } diff --git a/app/Services/Cartables/AccidentReceiptTableService.php b/app/Services/Cartables/AccidentReceiptTableService.php index 3a0ace1a..e757516f 100644 --- a/app/Services/Cartables/AccidentReceiptTableService.php +++ b/app/Services/Cartables/AccidentReceiptTableService.php @@ -12,20 +12,23 @@ class AccidentReceiptTableService { use ApiResponse; - public function dataTable(Request $request) + public function dataTable(Request $request, $loadRelations = false) { $user = auth()->user(); $query = null; if ($user->hasPermissionTo('show-receipt')) { - $query = Accident::query(); + $query = Accident::query() + ->when($loadRelations, fn ($query) => $query->with('damages')); } else { if (is_null($user->province_id)) { return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); } - $query = Accident::query()->where('province_id', '=', $user->province_id); + $query = Accident::query() + ->where('province_id', '=', $user->province_id) + ->when($loadRelations, fn ($query) => $query->with('damages')); } return DataTableFacade::run( @@ -36,7 +39,7 @@ class AccidentReceiptTableService ); } - public function provinceReport(Request $request): array + public function countryReport(Request $request): array { $data = DB::select( 'SELECT @@ -77,7 +80,7 @@ class AccidentReceiptTableService ]; } - public function cityReport(Request $request): array + public function provinceReport(Request $request): array { $data = DB::select( 'SELECT diff --git a/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php new file mode 100644 index 00000000..9ba1263b --- /dev/null +++ b/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php @@ -0,0 +1,108 @@ + + + + + + + + کشوری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $road) + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش خسارات وارده به ابنیه فنی و تاسیسات راه از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($ToDate)->format('Y/n/j') }} + +
+ اداره کل + + تعداد کل + + نحوه شناسایی خسارت + + مبلغ کل خسارت ثبت شده (ریال) + + کل مبلغ وصول شده (ریال) + + مبلغ وصول شده به تفکیک نوع پرداخت (ریال) +
+ گزارش پلیس راه + + گزارش گشت راهداری + + بیمه + + کسر داغی + + شخص +
+ {{ $road['name'] }} + {{ $road['tedade'] }} + {{ $road['police_rah'] }} + {{ $road['gozaresh_gasht'] }} + {{ $road['kol_sabt_shode'] }} + {{ $road['vasel_shode'] }} + {{ $road['vasel_shode_bimeh'] }} + {{ $road['vasel_shode_daghi'] }} + {{ $road['vasel_shode_final'] }}
+ + diff --git a/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php new file mode 100644 index 00000000..024c9621 --- /dev/null +++ b/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php @@ -0,0 +1,82 @@ + + + + + + + خسارات وارده به تفکیک استان + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + @php + $temp = ''; + @endphp + @foreach ($item->damages as $damage) + @php + $temp .= $damage->title." (".$damage->pivot->value." ".$damage->unit.") - "; + @endphp + @endforeach + + + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{verta()->now()->format('Y/m/d H:i')}} +
گزارش کلی خسارات وارده
شناسه ثبت در سامانه RMSتاریخ ثبت در سامانهنام استاننام شهرستانتاریخ تصادفساعت تصادفنوع خسارتنوع تجهیزات خسارت دیدهمبلغ برآورد اولیهآخرین وضعیتمبلغ وصولی به حساب ادارهمیزان فرانشیز کسر شدهمیزان داغی تجهیزات خسارت دیده موجود انبار ادارهمبلغ فیشمبلغ بیمهمبلغ داغی
{{$item->id}}{{Hekmatinasser\Verta\Verta::instance($item->created_at)->format('Y/n/j')}}{{$item->province_fa}}{{$item->city_fa}}{{Hekmatinasser\Verta\Verta::instance($item->accident_date)->format('Y/n/j')}}{{$item->accident_time}}{{$item->accident_type_fa}}{{$temp}}{{$item->sum ?? 0}}{{$item->status_fa}}{{$item->deposit_insurance_amount + $item->final_amount}}{{$item->final_amount}}{{$item->deposit_insurance_amount}}{{$item->deposit_daghi_amount}}
+ + diff --git a/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php new file mode 100644 index 00000000..ae8d4da5 --- /dev/null +++ b/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php @@ -0,0 +1,109 @@ + + + + + + + + استانی + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $road) + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش خسارات وارده به ابنیه فنی و تاسیسات راه از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toDate)->format('Y/n/j') }} + +
+ اداره کل + + تعداد کل + + نحوه شناسایی خسارت + + مبلغ کل خسارت ثبت شده (ریال) + + کل مبلغ وصول شده (ریال) + + مبلغ وصول شده به تفکیک نوع پرداخت (ریال) +
+ گزارش پلیس راه + + گزارش گشت راهداری + + بیمه + + کسر داغی + + شخص +
+ {{ $road['name'] }} + {{ $road['tedade'] }} + {{ $road['police_rah'] }} + {{ $road['gozaresh_gasht'] }} + {{ $road['kol_sabt_shode'] }} + {{ $road['vasel_shode'] }} + {{ $road['vasel_shode_bimeh'] }} + {{ $road['vasel_shode_daghi'] }} + {{ $road['vasel_shode_final'] }}
+ + diff --git a/routes/v3.php b/routes/v3.php index 759900bc..7c68023c 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -270,8 +270,8 @@ Route::prefix('receipt_reports') ->name('receiptReports.') ->controller(AccidentReceiptReportController::class) ->group(function () { + Route::get('/country_report', 'countryReport')->name('countryReport'); Route::get('/province_report', 'provinceReport')->name('provinceReport'); - Route::get('/city_report', 'cityReport')->name('cityReport'); + Route::get('/country_excel_report', 'countryExcelReport')->name('countryExcelReport'); Route::get('/province_excel_report', 'provinceExcelReport')->name('provinceExcelReport'); - Route::get('/city_excel_report', 'cityExcelReport')->name('cityExcelReport'); }); From 918a91d52a17dc55cd610aba77871721f06c8982 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 24 Feb 2025 11:00:59 +0330 Subject: [PATCH 7/9] debug the blade file --- .../Dashboard/AccidentReceiptController.php | 2 +- app/Models/Accident.php | 23 ++++++++++ .../AccidentReceipt/DataTableReport.blade.php | 46 ++++++------------- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php index 9a31cdb2..530b4add 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php @@ -45,7 +45,7 @@ class AccidentReceiptController extends Controller auth()->user()->addActivityComplete(1126); $name = 'گزارش از خسارات وارده به ابنیه فنی و تاسیسات راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; $data = $accidentReceiptTableService->dataTable($request, true); - return Excel::download(new DataTableReport($data), $name); + return Excel::download(new DataTableReport($data['data']), $name); } public function accidentDamage(Accident $accident): JsonResponse diff --git a/app/Models/Accident.php b/app/Models/Accident.php index 510df15d..f1495dce 100644 --- a/app/Models/Accident.php +++ b/app/Models/Accident.php @@ -2,10 +2,12 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use App\Traits\ReceiptReportAble; use Illuminate\Database\Eloquent\Relations\MorphMany; +use Illuminate\Support\Facades\Storage; class Accident extends Model { @@ -95,4 +97,25 @@ class Accident extends Model { return $this->morphMany(File::class, 'fileable'); } + + protected function damagePicture1(): Attribute + { + return Attribute::make( + get: fn($value) => $value == null ? null : Storage::disk('public')->url($value) + ); + } + + protected function damagePicture2(): Attribute + { + return Attribute::make( + get: fn($value) => $value == null ? null : Storage::disk('public')->url($value) + ); + } + + protected function policeFile(): Attribute + { + return Attribute::make( + get: fn($value) => $value == null ? null : Storage::disk('public')->url($value) + ); + } } diff --git a/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php index 024c9621..beb27f54 100644 --- a/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php +++ b/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php @@ -22,21 +22,16 @@ - شناسه ثبت در سامانه RMS - تاریخ ثبت در سامانه - نام استان - نام شهرستان + کد یکتا + استان + شهرستان + نام محور + نوع تصادف تاریخ تصادف - ساعت تصادف - - نوع خسارت - - نوع تجهیزات خسارت دیده - مبلغ برآورد اولیه - آخرین وضعیت - مبلغ وصولی به حساب اداره - میزان فرانشیز کسر شده - میزان داغی تجهیزات خسارت دیده موجود انبار اداره + مبلغ کل خسارت + پلاک + تاریخ ثبت + آخرین وضعیت مبلغ فیش مبلغ بیمه مبلغ داغی @@ -47,30 +42,15 @@ @foreach ($data as $item) {{$item->id}} - {{Hekmatinasser\Verta\Verta::instance($item->created_at)->format('Y/n/j')}} {{$item->province_fa}} {{$item->city_fa}} - {{Hekmatinasser\Verta\Verta::instance($item->accident_date)->format('Y/n/j')}} - {{$item->accident_time}} - + {{$item->axis_name}} {{$item->accident_type_fa}} - @php - $temp = ''; - @endphp - @foreach ($item->damages as $damage) - @php - $temp .= $damage->title." (".$damage->pivot->value." ".$damage->unit.") - "; - @endphp - @endforeach - - {{$temp}} - - + {{Hekmatinasser\Verta\Verta::instance($item->accident_date)->format('Y/n/j') ($item->accident_time)}} {{$item->sum ?? 0}} + {{$item->plaque}} + {{Hekmatinasser\Verta\Verta::instance($item->created_at)->format('Y/n/j')}} {{$item->status_fa}} - {{$item->deposit_insurance_amount + $item->final_amount}} - - {{$item->final_amount}} {{$item->deposit_insurance_amount}} {{$item->deposit_daghi_amount}} From ff83fde991160d1420dc78eeac4c04775ec0f12b Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 24 Feb 2025 11:55:24 +0330 Subject: [PATCH 8/9] fix the country amount --- .../V3/AccidentReceipt/CountryReport.php | 26 +++++++++--------- .../V3/AccidentReceipt/ProvinceReport.php | 27 ++++++++++--------- .../Cartables/AccidentReceiptTableService.php | 4 +-- .../AccidentReceipt/CountryReport.blade.php | 13 ++++----- .../AccidentReceipt/DataTableReport.blade.php | 10 +++---- .../AccidentReceipt/ProvinceReport.blade.php | 11 ++++---- 6 files changed, 48 insertions(+), 43 deletions(-) diff --git a/app/Exports/V3/AccidentReceipt/CountryReport.php b/app/Exports/V3/AccidentReceipt/CountryReport.php index e37c0386..e05bdb64 100644 --- a/app/Exports/V3/AccidentReceipt/CountryReport.php +++ b/app/Exports/V3/AccidentReceipt/CountryReport.php @@ -23,6 +23,20 @@ class CountryReport implements FromView, ShouldAutoSize, WithEvents, WithDrawing { $data = $this->data; + $country = array_search(-1, array_column($data['data'], 'province_id')); + + $activities[] = [ + 'name' => 'کل کشور', + 'tedade' => $data['data'][$country]->tedade, + 'police_rah' => $data['data'][$country]->police_rah, + 'gozaresh_gasht' => $data['data'][$country]->gozaresh_gasht, + 'kol_sabt_shode' => $data['data'][$country]->kol_sabt_shode, + 'vasel_shode' => $data['data'][$country]->vasel_shode ?? 0, + 'vasel_shode_bimeh' => $data['data'][$country]->vasel_shode_bimeh ?? 0, + 'vasel_shode_daghi' => $data['data'][$country]->vasel_shode_daghi ?? 0, + 'vasel_shode_final' => $data['data'][$country]->vasel_shode_final ?? 0, + ]; + foreach (Province::all() as $province) { $existingProvince = array_search($province->id, array_column($data['data'], 'province_id')); @@ -54,18 +68,6 @@ class CountryReport implements FromView, ShouldAutoSize, WithEvents, WithDrawing } } - $activities[] = [ - 'name' => 'کشوری', - 'tedade' => $data['data'][-1]->tedade, - 'police_rah' => $data['data'][-1]->police_rah, - 'gozaresh_gasht' => $data['data'][-1]->gozaresh_gasht, - 'kol_sabt_shode' => $data['data'][-1]->kol_sabt_shode, - 'vasel_shode' => $data['data'][-1]->vasel_shode ?? 0, - 'vasel_shode_bimeh' => $data['data'][-1]->vasel_shode_bimeh ?? 0, - 'vasel_shode_daghi' => $data['data'][-1]->vasel_shode_daghi ?? 0, - 'vasel_shode_final' => $data['data'][-1]->vasel_shode_final ?? 0, - ]; - return view('v3.Reports.AccidentReceipt.CountryReport', [ 'data' => $activities, 'fromDate' => $data['fromDate'], diff --git a/app/Exports/V3/AccidentReceipt/ProvinceReport.php b/app/Exports/V3/AccidentReceipt/ProvinceReport.php index 9339384b..7c37cbf5 100644 --- a/app/Exports/V3/AccidentReceipt/ProvinceReport.php +++ b/app/Exports/V3/AccidentReceipt/ProvinceReport.php @@ -23,6 +23,20 @@ class ProvinceReport implements FromView, ShouldAutoSize, WithEvents, WithDrawin $inputData = $this->data; $reportData =$inputData['report']; + $province = array_search(-1, array_column($reportData, 'province_id')); + + $activities[] = [ + 'name' => 'کل استان', + 'tedade' => $reportData['data'][$province]->tedade, + 'police_rah' => $reportData['data'][$province]->police_rah, + 'gozaresh_gasht' => $reportData['data'][$province]->gozaresh_gasht, + 'kol_sabt_shode' => $reportData['data'][$province]->kol_sabt_shode, + 'vasel_shode' => $reportData['data'][$province]->vasel_shode ?? 0, + 'vasel_shode_bimeh' => $reportData['data'][$province]->vasel_shode_bimeh ?? 0, + 'vasel_shode_daghi' => $reportData['data'][$province]->vasel_shode_daghi ?? 0, + 'vasel_shode_final' => $reportData['data'][$province]->vasel_shode_final ?? 0, + ]; + foreach ($inputData['cities'] as $city) { $existingCity = array_search($city->id, array_column($inputData['data'], 'city_id')); @@ -54,19 +68,6 @@ class ProvinceReport implements FromView, ShouldAutoSize, WithEvents, WithDrawin } } - $activities[] = [ - 'name' => 'استانی', - 'tedade' => $reportData['data'][-1]->tedade, - 'police_rah' => $reportData['data'][-1]->police_rah, - 'gozaresh_gasht' => $reportData['data'][-1]->gozaresh_gasht, - 'kol_sabt_shode' => $reportData['data'][-1]->kol_sabt_shode, - 'vasel_shode' => $reportData['data'][-1]->vasel_shode ?? 0, - 'vasel_shode_bimeh' => $reportData['data'][-1]->vasel_shode_bimeh ?? 0, - 'vasel_shode_daghi' => $reportData['data'][-1]->vasel_shode_daghi ?? 0, - 'vasel_shode_final' => $reportData['data'][-1]->vasel_shode_final ?? 0, - ]; - - return view('v3.Reports.AccidentReceipt.ProvinceReport', [ 'data' => $activities, 'fromDate' => $reportData['fromDate'], diff --git a/app/Services/Cartables/AccidentReceiptTableService.php b/app/Services/Cartables/AccidentReceiptTableService.php index e757516f..4f251709 100644 --- a/app/Services/Cartables/AccidentReceiptTableService.php +++ b/app/Services/Cartables/AccidentReceiptTableService.php @@ -74,7 +74,7 @@ class AccidentReceiptTableService ); return [ - 'data' => collect($data), + 'data' => $data, 'fromDate' => $request->from_date, 'toDate' => $request->date_to, ]; @@ -115,7 +115,7 @@ class AccidentReceiptTableService ); return [ - 'data' => collect($data), + 'data' => $data, 'fromDate' => $request->from_date, 'toDate' => $request->date_to, ]; diff --git a/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php index 9ba1263b..c5745eb6 100644 --- a/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php +++ b/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php @@ -32,7 +32,7 @@ {{ verta($fromDate)->format('Y/n/j') }} تا تاریخ - {{ verta($ToDate)->format('Y/n/j') }} + {{ verta($toDate)->format('Y/n/j') }} @@ -66,15 +66,16 @@ گزارش گشت راهداری + + فیش + بیمه کسر داغی - - شخص - + @@ -94,12 +95,12 @@ {{ $road['kol_sabt_shode'] }} {{ $road['vasel_shode'] }} + + {{ $road['vasel_shode_final'] }} {{ $road['vasel_shode_bimeh'] }} {{ $road['vasel_shode_daghi'] }} - - {{ $road['vasel_shode_final'] }} @endforeach diff --git a/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php index beb27f54..5d0a85fd 100644 --- a/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php +++ b/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php @@ -4,7 +4,7 @@ - خسارات وارده به تفکیک استان + خسارات وارده به ابنیه فنی @@ -46,14 +46,14 @@ - + - - - + + + @endforeach diff --git a/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php index ae8d4da5..1817487d 100644 --- a/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php +++ b/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php @@ -67,15 +67,16 @@ + - + @@ -95,12 +96,12 @@ {{ $road['kol_sabt_shode'] }} + - @endforeach From 89d119767a142ac3a6e15b41bf40b1da90a00c5b Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 24 Feb 2025 12:03:33 +0330 Subject: [PATCH 9/9] province blade --- app/Exports/V3/AccidentReceipt/ProvinceReport.php | 2 +- .../views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Exports/V3/AccidentReceipt/ProvinceReport.php b/app/Exports/V3/AccidentReceipt/ProvinceReport.php index 7c37cbf5..ab63e7f6 100644 --- a/app/Exports/V3/AccidentReceipt/ProvinceReport.php +++ b/app/Exports/V3/AccidentReceipt/ProvinceReport.php @@ -39,7 +39,7 @@ class ProvinceReport implements FromView, ShouldAutoSize, WithEvents, WithDrawin foreach ($inputData['cities'] as $city) { - $existingCity = array_search($city->id, array_column($inputData['data'], 'city_id')); + $existingCity = array_search($city->id, array_column($reportData['data'], 'city_id')); if ($existingCity) { $activities[] = [ diff --git a/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php index 1817487d..501f8ce4 100644 --- a/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php +++ b/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php @@ -47,7 +47,7 @@ تعداد کل
{{$item->city_fa}} {{$item->axis_name}} {{$item->accident_type_fa}}{{Hekmatinasser\Verta\Verta::instance($item->accident_date)->format('Y/n/j') ($item->accident_time)}}{{Hekmatinasser\Verta\Verta::instance($item->accident_date)->format('Y/n/j')}} {{$item->accident_time}} {{$item->sum ?? 0}} {{$item->plaque}} {{Hekmatinasser\Verta\Verta::instance($item->created_at)->format('Y/n/j')}} {{$item->status_fa}}{{$item->final_amount}}{{$item->deposit_insurance_amount}}{{$item->deposit_daghi_amount}}{{$item->final_amount ?? 0}}{{$item->deposit_insurance_amount ?? 0}}{{$item->deposit_daghi_amount ?? 0}}
گزارش گشت راهداری + فیش + بیمه کسر داغی - شخص -
{{ $road['vasel_shode'] }} + {{ $road['vasel_shode_final'] }} {{ $road['vasel_shode_bimeh'] }} {{ $road['vasel_shode_daghi'] }} - {{ $road['vasel_shode_final'] }}
- نحوه شناسایی خسارت + تعداد نحوه شناسایی خسارت مبلغ کل خسارت ثبت شده (ریال) @@ -74,7 +74,7 @@ بیمه - کسر داغی + داغی