| 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);
 -     }
 - }
 
 
  |