## Доброе время суток, коллеги! Сегодня я хотел рассказать о своем пакете для генерации отчетов. Собственно, что означает слово "отчет"? Возможно, в вашей системе есть административная панель и ей пользуются дотошные администраторы или менеджеры. Часто они просят вас выгружать статистические данные, возможно в Excel или PDF, может в более извращенный формат файлов. Для таких вещей многие пользуются этой [библиотекой](https://github.com/Maatwebsite/Laravel-Excel). (Кстати, недавно вышел новый мажорный релиз) Но остаются такие проблемы как: - создание UI - оформление структуры - архитектура - и чтоб все свистело и крутилось - а само может? Да, я решил создать некое решение, сбрасывая часть проблем в этом направлении. Собственно, сам [пакет](https://github.com/agoalofalife/reports). (Note) Под собой он использует тот самый **Maatwebsite**, о котором я написал чуть выше. ### Установка ```php composer require agoalofalife/reports php artisan reports:install ``` ### Подключение UI В шаблоне blade достаточно вставить ```php @include('reports::app') ... ``` ### Cron На данный момент процессы по генерации отчетов выполняются через cron. ```php // App\Console\Kernel use agoalofalife\Reports\Console\ParseReportsCommand; $schedule->command(ParseReportsCommand::class)->everyMinute(); ``` Основные предустановки мы совершили, теперь создадим класс для отчета. ```php php artisan make:report NameReport ``` Новый класс необходимо добавить в конфигурационный файл `config/reports.php` ```php 'reports' => [ \App\Reports\TestReport::class ], ``` И рассмотрим наш класс более подробно: ```php sheet('Sheetname', function ($sheet) { $sheet->rows(array( array('test1', 'test2'), array('test3', 'test4') )); }); return true; } } ``` - Свойство `disk` это диск, где складируются ваши файлы. - Свойство `extension`, расширение файла - Метод `getFilename`, возвращает название файла - Метод `getTitle`, заголовок в UI - Метод `getDescription`, описание в UI - Метод `handler` получает в аргументе класс из пакета **Maatwebsite**. Здесь вы генерируете вашу информацию и возвращаете `true` в случае успеха. ### Уведомления Так же можно получать уведомления, после генерации вашего отчета. Необходимо реализовать интерфейс `agoalofalife\Reports\Contracts\NotificationReport`. Пакет использует интерфейс уведомлений из Laravel, если что-то непонятно, обратитесь к официальной документации. Если он будет вам полезен - значит, все не зря, ну, и спасибо, что уделили немного времени!