12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
-
- namespace App\Services;
-
- use App\DTO\AccountBalanceReportDTO;
- use App\Models\Company;
- use Symfony\Component\HttpFoundation\StreamedResponse;
-
- class AccountBalancesExportService
- {
- public function exportToCsv(Company $company, AccountBalanceReportDTO $accountBalanceReport, string $startDate, string $endDate): StreamedResponse
- {
- // Construct the filename
- $filename = $company->name . ' Account Balances ' . $startDate . ' to ' . $endDate . '.csv';
-
- $headers = [
- 'Content-Type' => 'text/csv',
- 'Content-Disposition' => 'attachment; filename="' . $filename . '"',
- ];
-
- $callback = static function () use ($company, $startDate, $endDate, $accountBalanceReport) {
- $file = fopen('php://output', 'wb');
-
- fputcsv($file, ['Account Balances']);
- fputcsv($file, [$company->name]);
- fputcsv($file, ['Date Range: ' . $startDate . ' to ' . $endDate]);
- fputcsv($file, []);
-
- fputcsv($file, ['ACCOUNT CODE', 'ACCOUNT', 'STARTING BALANCE', 'DEBIT', 'CREDIT', 'NET MOVEMENT', 'ENDING BALANCE']);
-
- foreach ($accountBalanceReport->categories as $accountCategoryName => $accountCategory) {
- fputcsv($file, ['', $accountCategoryName]);
-
- foreach ($accountCategory->accounts as $account) {
- fputcsv($file, [
- $account->accountCode,
- $account->accountName,
- $account->balance->startingBalance ?? '',
- $account->balance->debitBalance,
- $account->balance->creditBalance,
- $account->balance->netMovement,
- $account->balance->endingBalance ?? '',
- ]);
- }
-
- // Category Summary row
- fputcsv($file, [
- '',
- 'Total ' . $accountCategoryName,
- $accountCategory->summary->startingBalance ?? '',
- $accountCategory->summary->debitBalance,
- $accountCategory->summary->creditBalance,
- $accountCategory->summary->netMovement,
- $accountCategory->summary->endingBalance ?? '',
- ]);
-
- fputcsv($file, []);
- }
-
- // Final Row for overall totals
- fputcsv($file, [
- '',
- 'Total for all accounts',
- '',
- $accountBalanceReport->overallTotal->debitBalance,
- $accountBalanceReport->overallTotal->creditBalance,
- '',
- '',
- ]);
-
- fclose($file);
- };
-
- return response()->streamDownload($callback, $filename, $headers);
- }
- }
|