Adding pdf download for an order with all its items

Step 01: Adding routes for exporting pdf inside auth middleware

// so whole auth routes will be like below 
Route::group(['middleware'=> [ 'auth']], function() {

    Route::get('/orders/export_to_pdf/{order}', [\App\Http\Controllers\OrderController::class,'export_pdf'])->name('export_pdf'); // added route
    Route::resource('orders', \App\Http\Controllers\OrderController::class);

    Route::get( '/order_items/show_addi_req/{item}', [\App\Http\Controllers\OrderItemController::class, 'show_addi_req']  ); 
    Route::post( '/order_items/save_req/{item}', [\App\Http\Controllers\OrderItemController::class, 'save_req']  );   
    
    Route::post('/order_items/cal_cost', [\App\Http\Controllers\OrderItemController::class, 'calculateOrderPrice'])->name('calCost');    
    Route::resource('order_items', \App\Http\Controllers\OrderItemController::class);
    
    Route::group(['middleware'=> ['is_admin']], function() {
        Route::resource('users', \App\Http\Controllers\UserController::class);

        Route::post('/products/save_order/{product}', [\App\Http\Controllers\ProductController::class, 'saveOrder'])->name('products.save_order');
        Route::post('/profiles/save_order/{profile}', [\App\Http\Controllers\ProfileController::class, 'saveOrder'])->name('profiles.save_order');
        Route::post('/frame_widths/save_order/{frame_width}', [\App\Http\Controllers\FrameWidthController::class, 'saveOrder'])->name('frame_widths.save_order');

        Route::resource('products', \App\Http\Controllers\ProductController::class);
        Route::resource('profiles', \App\Http\Controllers\ProfileController::class);
        Route::resource('frame_widths', \App\Http\Controllers\FrameWidthController::class);

    });    

});

Step 02: Adding route for download link inside td element like below inside resources/views/orders/list.blade.php

<a class="text-black" href="{{ route('export_pdf',$order->id) }}" title="Download Order Invoice"><i class="bi bi-download"></i></a> &nbsp;

Step 03: Adding export_pdf() like below in OrderController.php

public function export_pdf( Order $order ) {
	return view( 'orders.pdf', compact('order') );
} 

Step 04: Getting dompdf package from github link ( https://github.com/dompdf/dompdf ) like below and setup in random folder

composer require dompdf/dompdf

afterwards, zip the whole folder and take to project's public folder and create a folder named dompdf and unzip the zip there.

Step 05: creating pdf.blade.php under resources/views/orders folder and use the following snippet

@php 
require_once public_path().'/dompdf/vendor/autoload.php';
use Dompdf\Dompdf;

$orderData ='
                
            Order # '.$order->id.'         
'
; $orderData.='
                
Company '.$order->company_name.'
Phone '.$order->phone_number.'
Emails '.$order->email.'
Job / Post No '.$order->job_number.'
    
'
; $orderData.='                 
            '.$order->order_items->count().' Order Items         
'
; $count = 1; foreach ($order->order_items as $orderItem) { $orderData.='
                
Material# '.$count.' '.$orderItem->product->name.' - $'.number_format($orderItem->product->cost,2).' /sf
Profile '.$orderItem->profile->name.'
Width(In) '.$orderItem->width.'
Height(In) '.$orderItem->height.'
Frame Width '.$orderItem->fwidth->name.'
Total Sqare Ft '.number_format($orderItem->calculateTotSqFeet($orderItem->width,$orderItem->height),2).'
Quantity '.$orderItem->quantity.'
Cost '.$orderItem->cost.'
Additional Requests '.(!empty($orderItem->additional_request) ?? $orderItem->additional_request).'
    
'
;     $count++; }   //echo $orderData; exit;   $dompdf = new Dompdf();   $dompdf->loadHtml($orderData);   $dompdf->setPaper('A4', 'portrait');   $dompdf->render();   $dompdf->stream('invoice_'.$order->id.'.pdf'); @endphp

Now if we click on download invoice link in order list page for an order we will get the pdf exported and ready for download as pdf having all its order items.

Related Posts


Building mini ecommerce in Laravel

Listing rows of users - crud

Adding user data - crud of users

Editing user data - crud of users

Deleting user data - crud of users

Listing rows of products - crud

Listing rows of profiles - crud

Listing rows of orders - crud

Listing rows of order items - crud