選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

AccountTransactionReportTransformer.php 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Transformers;
  3. use App\DTO\AccountTransactionDTO;
  4. use App\DTO\ReportCategoryDTO;
  5. class AccountTransactionReportTransformer extends BaseReportTransformer
  6. {
  7. public function getPdfView(): string
  8. {
  9. return 'components.company.reports.account-transactions-report-pdf';
  10. }
  11. public function getTitle(): string
  12. {
  13. return 'Account Transactions';
  14. }
  15. /**
  16. * @return ReportCategoryDTO[]
  17. */
  18. public function getCategories(): array
  19. {
  20. $categories = [];
  21. foreach ($this->report->categories as $categoryData) {
  22. $header = [];
  23. foreach ($this->getColumns() as $column) {
  24. if ($column->getName() === 'date') {
  25. $header[0][$column->getName()] = $categoryData['category'];
  26. $header[1][$column->getName()] = $categoryData['under'];
  27. }
  28. }
  29. // Map transaction data
  30. $data = array_map(function (AccountTransactionDTO $transaction) {
  31. $row = [];
  32. foreach ($this->getColumns() as $column) {
  33. $row[$column->getName()] = match ($column->getName()) {
  34. 'date' => $transaction->date,
  35. 'description' => [
  36. 'id' => $transaction->id,
  37. 'description' => $transaction->description,
  38. 'url' => $transaction->url,
  39. ],
  40. 'debit' => $transaction->debit,
  41. 'credit' => $transaction->credit,
  42. 'balance' => $transaction->balance,
  43. default => '',
  44. };
  45. }
  46. return $row;
  47. }, $categoryData['transactions']);
  48. $categories[] = new ReportCategoryDTO(
  49. header: $header,
  50. data: $data,
  51. );
  52. }
  53. return $categories;
  54. }
  55. public function getOverallTotals(): array
  56. {
  57. return [];
  58. }
  59. }