From 1b7e26517aa8c6c7986c6429f09a4f524b95be4a Mon Sep 17 00:00:00 2001 From: joddyabott Date: Sat, 20 Sep 2025 11:37:04 +0330 Subject: [PATCH] create function excel and their dependency for damage --- .../V3/Damage/DamageCartableReport.php | 67 ++++++++++++++++ .../V3/DamageManagementController.php | 32 ++++---- .../Cartables/Damage/DamageService.php | 24 ++++++ .../Damage/DamageCartableReport.blade.php | 77 +++++++++++++++++++ routes/v3.php | 1 + 5 files changed, 187 insertions(+), 14 deletions(-) create mode 100644 app/Exports/V3/Damage/DamageCartableReport.php create mode 100644 app/Services/Cartables/Damage/DamageService.php create mode 100644 resources/views/v3/Reports/Damage/DamageCartableReport.blade.php diff --git a/app/Exports/V3/Damage/DamageCartableReport.php b/app/Exports/V3/Damage/DamageCartableReport.php new file mode 100644 index 00000000..dac30525 --- /dev/null +++ b/app/Exports/V3/Damage/DamageCartableReport.php @@ -0,0 +1,67 @@ + $this->data + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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('f1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/V3/DamageManagementController.php b/app/Http/Controllers/V3/DamageManagementController.php index 53047e18..fe8a1b4e 100644 --- a/app/Http/Controllers/V3/DamageManagementController.php +++ b/app/Http/Controllers/V3/DamageManagementController.php @@ -2,14 +2,19 @@ namespace App\Http\Controllers\V3; +use App\Exports\V3\Damage\DamageCartableReport; use App\Facades\DataTable\DataTableFacade; use App\Http\Controllers\Controller; use App\Http\Requests\V3\Damage\StoreRequest; use App\Http\Requests\V3\Damage\UpdateRequest; use App\Http\Traits\ApiResponse; use App\Models\Damage; +use App\Services\Cartables\Damage\DamageService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Maatwebsite\Excel\Excel; +use PhpOffice\PhpSpreadsheet\Exception; +use Symfony\Component\HttpFoundation\BinaryFileResponse; class DamageManagementController extends Controller { @@ -17,20 +22,9 @@ class DamageManagementController extends Controller /** * Display a listing of the resource. */ - public function index(Request $request): JsonResponse + public function index(Request $request ,DamageService $damageService): JsonResponse { - $allowedFilters = ['*']; - $allowedSortings = ['*']; - - $query = Damage::query(); - - $data = DataTableFacade::run( - $query, - $request, - allowedFilters: $allowedFilters, - allowedSortings: $allowedSortings); - - + $data = $damageService->dataTable($request); return response()->json($data); } @@ -71,7 +65,6 @@ class DamageManagementController extends Controller */ public function update(UpdateRequest $request, Damage $damage): JsonResponse - { $damage->update([ 'title' => $request->title, @@ -92,4 +85,15 @@ class DamageManagementController extends Controller return $this->successResponse(); } + + /** + * @throws Exception + * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception + */ + public function excel(Request $request, DamageService $damageService): BinaryFileResponse + { + $name = 'آیتم خسارات وارده بر ابنیه فنی' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + $data = $damageService->datatable($request); + return Excel::download(new DamageCartableReport($data['data']), $name); + } } diff --git a/app/Services/Cartables/Damage/DamageService.php b/app/Services/Cartables/Damage/DamageService.php new file mode 100644 index 00000000..64578a38 --- /dev/null +++ b/app/Services/Cartables/Damage/DamageService.php @@ -0,0 +1,24 @@ + + + + + + + + مدریت سامانه + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ آیتم خسارت وارده بر ابنیه فنی +
کد + یکتا + عنوان + واحد + فی(ریال) + وضعیت + بروزرسانی
{{ $item['id'] ?? '-' }}{{ $item['title'] ?? '-' }}{{ $item['unit'] ?? '-' }}{{ $item['base_price'] ?? '-' }}{{ $item['status'] ?? '-' }}{{ $item['update_time'] ?? '-' }}
+ + + diff --git a/routes/v3.php b/routes/v3.php index 8a0bebed..23eec06b 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -273,6 +273,7 @@ Route::prefix('damages') Route::get('/{damage}', 'show')->name('show'); Route::post('/{damage}', 'update')->name('update'); Route::post('/activate/{damage}', 'activate')->name('activate'); + Route::get('/excel', 'excel')->name('excel'); }); Route::prefix('receipts')