CprQueryModel.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace Models;
  3. class CprQueryModel
  4. {
  5. private \PDO $pdo;
  6. public function __construct()
  7. {
  8. if (!isset($GLOBALS['pdo']) || !$GLOBALS['pdo'] instanceof \PDO) {
  9. throw new \RuntimeException('Global PDO not initialized');
  10. }
  11. $this->pdo = $GLOBALS['pdo'];
  12. }
  13. /**
  14. * Lista resumida
  15. */
  16. public function listByCompany(int $companyId): array
  17. {
  18. $sql = '
  19. SELECT
  20. cpr_id,
  21. cpr_product_class_name,
  22. cpr_issue_date,
  23. cpr_issuer_name,
  24. cpr_issue_financial_value
  25. FROM cpr
  26. WHERE company_id = :company_id
  27. ORDER BY cpr_issue_date DESC
  28. ';
  29. $stmt = $this->pdo->prepare($sql);
  30. $stmt->execute(['company_id' => $companyId]);
  31. return $stmt->fetchAll(\PDO::FETCH_ASSOC);
  32. }
  33. public function listAll(): array
  34. {
  35. $sql = '
  36. SELECT
  37. cpr_id,
  38. cpr_product_class_name,
  39. cpr_issue_date,
  40. cpr_issuer_name,
  41. cpr_issue_financial_value,
  42. cpr_ticker
  43. FROM cpr
  44. ORDER BY cpr_issue_date DESC
  45. ';
  46. return $this->pdo->query($sql)->fetchAll(\PDO::FETCH_ASSOC);
  47. }
  48. /**
  49. * Detalhe completo
  50. */
  51. public function getByIdAndCompany(int $cprId, int $companyId): ?array
  52. {
  53. $sql = '
  54. SELECT *
  55. FROM cpr
  56. WHERE cpr_id = :cpr_id
  57. AND company_id = :company_id
  58. LIMIT 1
  59. ';
  60. $stmt = $this->pdo->prepare($sql);
  61. $stmt->execute([
  62. 'cpr_id' => $cprId,
  63. 'company_id' => $companyId
  64. ]);
  65. $row = $stmt->fetch(\PDO::FETCH_ASSOC);
  66. if (!$row) {
  67. return null;
  68. }
  69. return $this->filterEmptyFields($row);
  70. }
  71. public function getById(int $cprId): ?array
  72. {
  73. $stmt = $this->pdo->prepare('SELECT * FROM cpr WHERE cpr_id = :cpr_id LIMIT 1');
  74. $stmt->execute(['cpr_id' => $cprId]);
  75. $row = $stmt->fetch(\PDO::FETCH_ASSOC);
  76. if (!$row) {
  77. return null;
  78. }
  79. return $this->filterEmptyFields($row);
  80. }
  81. /**
  82. * Remove NULL e "na"
  83. */
  84. private function filterEmptyFields(array $data): array
  85. {
  86. return array_filter(
  87. $data,
  88. static function ($value) {
  89. if ($value === null) {
  90. return false;
  91. }
  92. if (is_string($value) && strtolower(trim($value)) === 'na') {
  93. return false;
  94. }
  95. return true;
  96. }
  97. );
  98. }
  99. }