PHP code example of samuelterra22 / laravel-report-generator

1. Go to this page and download the library: Download samuelterra22/laravel-report-generator library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

samuelterra22 / laravel-report-generator example snippets


// PdfReport Aliases
use PdfReport;

public function displayReport(Request $request)
{
    // Retrieve any filters
    $fromDate = $request->input('from_date');
    $toDate = $request->input('to_date');
    $sortBy = $request->input('sort_by');

    // Report title
    $title = 'Registered User Report';

    // For displaying filters description on header
    $meta = [
        'Registered on' => $fromDate . ' To ' . $toDate,
        'Sort By'       => $sortBy
    ];

    // Do some querying..
    $queryBuilder = User::select([
        'name',
        'balance',
        'registered_at'
    ])
        ->whereBetween('registered_at', [
            $fromDate,
            $toDate
        ])
        ->orderBy($sortBy);

    // Set Column to be displayed
    $columns = [
        'Name' => 'name',
        'Registered At',
        // if no column_name specified, this will automatically seach for snake_case of column name (will be registered_at) column from query result
        'Total Balance' => 'balance',
        'Status' => function ($result) { // You can do if statement or any action do you want inside this closure
            return ($result->balance > 100000) ? 'Rich Man' : 'Normal Guy';
        }
    ];

    /*
        Generate Report with flexibility to manipulate column class even manipulate column value (using Carbon, etc).

        - of()         : Init the title, meta (filters description to show), query, column (to be shown)
        - editColumn() : To Change column class or manipulate its data for displaying to report
        - editColumns(): Mass edit column
        - showTotal()  : Used to sum all value on specified column on the last table (except using groupBy method). 'point' is a type for displaying total with a thousand separator
        - groupBy()    : Show total of value on specific group. Used with showTotal() enabled.
        - limit()      : Limit record to be showed
        - make()       : Will producing DomPDF / SnappyPdf instance so you could do any other DomPDF / snappyPdf method such as stream() or download()
    */
    return PdfReport::of($title, $meta, $queryBuilder, $columns)
        ->editColumn('Registered At', [
            'displayAs' => function ($result) {
                return $result->registered_at->format('d M Y');
            }
        ])
        ->editColumn('Total Balance', [
            'displayAs' => function ($result) {
                return thousandSeparator($result->balance);
            }
        ])
        ->editColumns([
            'Total Balance',
            'Status'
        ], [
            'class' => 'right bold'
        ])
        ->showTotal([
            'Total Balance' => 'point'
            // if you want to show dollar sign ($) then use 'Total Balance' => '$'
        ])
        ->limit(20)
        ->stream(); // or download('filename here..') to download pdf
}


$columns = [
    'Name' => 'name',
    'Registered At' => 'registered_at',
    'Total Balance' => 'balance',
    'Status' => function($result) { // You can do data manipulation, if statement or any action do you want inside this closure
        return ($result->balance > 100000) ? 'Rich Man' : 'Normal Guy';
    }
];

$columns = [
    'Name' => function($result) {
        return $result->name;
    },
    'Registered At' => function($result) {
        return $result->registered_at;
    },
    'Total Balance' => function($result) {
        return $result->balance;
    },
    'Status' => function($result) { // You can do if statement or any action do you want inside this closure
        return ($result->balance > 100000) ? 'Rich Man' : 'Normal Guy';
    }
];

$post = Post::with('comment')->where('active', 1);

$columns = [
    'Post Title' => function($result) {
        return $result->title;
    },
    'Slug' => 'slug',
    'Top Comment' => function($result) {
        return $result->comment->body;
    }
];

    // ...
    // Do some querying..
    $queryBuilder = User::select(['name', 'balance', 'registered_at'])
                        ->whereBetween('registered_at', [$fromDate, $toDate])
                        ->orderBy('registered_at', 'ASC'); // You should sort groupBy column to use groupBy() Method

    // Set Column to be displayed
    $columns = [
        'Registered At' => 'registered_at',
        'Name' => 'name',
        'Total Balance' => 'balance',
        'Status' => function($result) { // You can do if statement or any action do you want inside this closure
            return ($result->balance > 100000) ? 'Rich Man' : 'Normal Guy';
        }
    ];

    return PdfReport::of($title, $meta, $queryBuilder, $columns)
        ->editColumn('Registered At', [
            'displayAs' => function ($result) {
                return $result->registered_at->format('d M Y');
            }
        ])
        ->editColumn('Total Balance', [
            'class'     => 'right bold',
            'displayAs' => function ($result) {
                return thousandSeparator($result->balance);
            }
        ])
        ->editColumn('Status', [
            'class' => 'right bold',
        ])
        ->groupBy('Registered At')
        ->showTotal([
            'Total Balance' => 'point'
        ])
        ->stream();


PdfReport::of($title, $meta, $queryBuilder, $columns)
         ->setPaper('a6')
         ->make();

ExcelReport::of($title, $meta, $queryBuilder, $columns)
    ->editColumn('Registered At', [
        'class' => 'right bolder italic-red'
    ])
    ->setCss([
        '.bolder'     => 'font-weight: 800;',
        '.italic-red' => 'color: red;font-style: italic;'
    ])
    ->make();

PdfReport::of($title, $meta, $queryBuilder, $columns)
         ->setOrientation('landscape')
         ->make();

$queryBuilder = Customer::select(['name', 'age'])->get();
$columns = ['Name', 'Age'];
PdfReport::of($title, $meta, $queryBuilder, $columns)
         ->withoutManipulation()
         ->make();

PdfReport::of($title, $meta, $queryBuilder, $columns)
         ->showMeta(false) // Hide meta
         ->make();

PdfReport::of($title, $meta, $queryBuilder, $columns)
         ->showHeader(false) // Hide column header
         ->make();