58 lines
3.2 KiB
PHP
58 lines
3.2 KiB
PHP
<?php declare(strict_types=1);
|
|
namespace App\Providers;
|
|
|
|
use Illuminate\Support\ServiceProvider;
|
|
use App\Domain\SchoolCore\Reporting\Contracts\ReportRegistryContract;
|
|
use App\Domain\SchoolCore\Reporting\Contracts\ReportRunnerContract;
|
|
use App\Domain\SchoolCore\Reporting\Contracts\ReportAuthorizationPolicyContract;
|
|
use App\Domain\SchoolCore\Reporting\Contracts\ReportExportServiceContract;
|
|
use App\Domain\SchoolCore\Reporting\Contracts\ReportSnapshotServiceContract;
|
|
use App\Domain\SchoolCore\Reporting\Contracts\ScheduledReportServiceContract;
|
|
use App\Domain\SchoolCore\Reporting\Contracts\ReportAuditLoggerContract;
|
|
use App\Domain\SchoolCore\Reporting\Contracts\ReportCacheServiceContract;
|
|
use App\Domain\SchoolCore\Reporting\Services\ReportRegistry;
|
|
use App\Domain\SchoolCore\Reporting\Services\ReportRunner;
|
|
use App\Domain\SchoolCore\Reporting\Services\DefaultReportAuthorizationPolicy;
|
|
use App\Domain\SchoolCore\Reporting\Services\ReportExportService;
|
|
use App\Domain\SchoolCore\Reporting\Services\ReportSnapshotService;
|
|
use App\Domain\SchoolCore\Reporting\Services\ScheduledReportService;
|
|
use App\Domain\SchoolCore\Reporting\Services\ReportAuditLogger;
|
|
use App\Domain\SchoolCore\Reporting\Services\ReportCacheService;
|
|
use App\Domain\SchoolCore\Reporting\Reports\Students\{StudentRosterReport,StudentEnrollmentReport,GuardianContactReport};
|
|
use App\Domain\SchoolCore\Reporting\Reports\Attendance\{AttendanceSummaryReport,StudentAttendanceHistoryReport,StaffAttendanceSummaryReport};
|
|
use App\Domain\SchoolCore\Reporting\Reports\Finance\{InvoiceSummaryReport,OutstandingBalanceReport,PaymentSummaryReport};
|
|
use App\Domain\SchoolCore\Reporting\Reports\Communication\{MessageDeliveryReport,RecipientEngagementReport};
|
|
|
|
final class SchoolCoreReportingServiceProvider extends ServiceProvider
|
|
{
|
|
public function register(): void
|
|
{
|
|
$this->app->singleton(ReportRegistryContract::class, function ($app) {
|
|
$registry = new ReportRegistry();
|
|
foreach ($app->tagged('schoolcore.reports') as $report) { $registry->register($report); }
|
|
return $registry;
|
|
});
|
|
$this->app->bind(ReportRunnerContract::class, ReportRunner::class);
|
|
$this->app->bind(ReportAuthorizationPolicyContract::class, DefaultReportAuthorizationPolicy::class);
|
|
$this->app->bind(ReportExportServiceContract::class, ReportExportService::class);
|
|
$this->app->bind(ReportSnapshotServiceContract::class, ReportSnapshotService::class);
|
|
$this->app->bind(ScheduledReportServiceContract::class, ScheduledReportService::class);
|
|
$this->app->bind(ReportAuditLoggerContract::class, ReportAuditLogger::class);
|
|
$this->app->bind(ReportCacheServiceContract::class, ReportCacheService::class);
|
|
|
|
$this->app->tag([
|
|
StudentRosterReport::class,
|
|
StudentEnrollmentReport::class,
|
|
GuardianContactReport::class,
|
|
AttendanceSummaryReport::class,
|
|
StudentAttendanceHistoryReport::class,
|
|
StaffAttendanceSummaryReport::class,
|
|
InvoiceSummaryReport::class,
|
|
OutstandingBalanceReport::class,
|
|
PaymentSummaryReport::class,
|
|
MessageDeliveryReport::class,
|
|
RecipientEngagementReport::class,
|
|
], 'schoolcore.reports');
|
|
}
|
|
}
|