CprQueryModel.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. FROM cpr
  43. ORDER BY cpr_issue_date DESC
  44. ';
  45. return $this->pdo->query($sql)->fetchAll(\PDO::FETCH_ASSOC);
  46. }
  47. /**
  48. * Detalhe completo
  49. */
  50. public function getByIdAndCompany(int $cprId, int $companyId): ?array
  51. {
  52. $sql = '
  53. SELECT *
  54. FROM cpr
  55. WHERE cpr_id = :cpr_id
  56. AND company_id = :company_id
  57. LIMIT 1
  58. ';
  59. $stmt = $this->pdo->prepare($sql);
  60. $stmt->execute([
  61. 'cpr_id' => $cprId,
  62. 'company_id' => $companyId
  63. ]);
  64. $row = $stmt->fetch(\PDO::FETCH_ASSOC);
  65. if (!$row) {
  66. return null;
  67. }
  68. return $this->filterEmptyFields($row);
  69. }
  70. public function getById(int $cprId): ?array
  71. {
  72. $stmt = $this->pdo->prepare('SELECT * FROM cpr WHERE cpr_id = :cpr_id LIMIT 1');
  73. $stmt->execute(['cpr_id' => $cprId]);
  74. $row = $stmt->fetch(\PDO::FETCH_ASSOC);
  75. if (!$row) {
  76. return null;
  77. }
  78. return $this->filterEmptyFields($row);
  79. }
  80. /**
  81. * Remove NULL e "na"
  82. */
  83. private function filterEmptyFields(array $data): array
  84. {
  85. return array_filter(
  86. $data,
  87. static function ($value) {
  88. if ($value === null) {
  89. return false;
  90. }
  91. if (is_string($value) && strtolower(trim($value)) === 'na') {
  92. return false;
  93. }
  94. return true;
  95. }
  96. );
  97. }
  98. }