Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

AccountTransactionReportTransformer.php 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Transformers;
  3. use App\DTO\AccountDTO;
  4. use App\DTO\AccountTransactionDTO;
  5. use App\DTO\ReportCategoryDTO;
  6. use App\Support\Column;
  7. class AccountTransactionReportTransformer extends BaseReportTransformer
  8. {
  9. public function getTitle(): string
  10. {
  11. return 'Account Transactions';
  12. }
  13. public function getHeaders(): array
  14. {
  15. return array_map(fn (Column $column) => $column->getLabel(), $this->getColumns());
  16. }
  17. /**
  18. * @return ReportCategoryDTO[]
  19. */
  20. public function getCategories(): array
  21. {
  22. $categories = [];
  23. foreach ($this->report->categories as $categoryData) {
  24. // Initialize header with account and category information
  25. $header = [
  26. [
  27. 'column' => 'category',
  28. 'value' => $categoryData['category'],
  29. ],
  30. [
  31. 'column' => 'under',
  32. 'value' => $categoryData['under'],
  33. ],
  34. ];
  35. // Map transaction data
  36. $data = array_map(function (AccountTransactionDTO $transaction) {
  37. $row = [];
  38. foreach ($this->getColumns() as $column) {
  39. $row[] = match ($column->getName()) {
  40. 'date' => $transaction->date,
  41. 'description' => $transaction->description,
  42. 'debit' => $transaction->debit,
  43. 'credit' => $transaction->credit,
  44. 'balance' => $transaction->balance,
  45. default => '',
  46. };
  47. }
  48. return $row;
  49. }, $categoryData['transactions']);
  50. // Extract summary from the last transaction if it's "Totals and Ending Balance"
  51. $summary = [];
  52. if (count($data) > 1) {
  53. $summaryTransaction = end($data);
  54. $summary = array_slice($summaryTransaction, 1); // Skip the first element, which is the date
  55. }
  56. $categories[] = new ReportCategoryDTO(
  57. header: $header,
  58. data: $data,
  59. summary: $summary
  60. );
  61. }
  62. return $categories;
  63. }
  64. public function getOverallTotals(): array
  65. {
  66. return [];
  67. }
  68. }