ReportsModel.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace Models;
  3. class ReportsModel
  4. {
  5. private \PDO $pdo;
  6. public function __construct()
  7. {
  8. $dbFile = $_ENV['DB_FILE'];
  9. $dbPath = __DIR__ . '/../' . $dbFile;
  10. $this->pdo = new \PDO("sqlite:" . $dbPath);
  11. $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
  12. $this->pdo->exec('PRAGMA journal_mode = WAL;');
  13. $this->pdo->exec('PRAGMA busy_timeout = 5000;');
  14. }
  15. public function getReports(int $companyId, int $page = 1, int $limit = 10): array
  16. {
  17. $offset = ($page - 1) * $limit;
  18. $sql = "
  19. SELECT o.order_id,
  20. o.order_finished_at,
  21. o.table_id,
  22. o.order_name,
  23. o.order_flag,
  24. p.product_name,
  25. p.product_price
  26. FROM 'order' o
  27. NATURAL JOIN order_item
  28. NATURAL JOIN product p
  29. NATURAL JOIN status
  30. WHERE o.company_id = :company_id
  31. AND status_status = 'Finalizada'
  32. ORDER BY o.order_finished_at DESC
  33. LIMIT :limit OFFSET :offset;
  34. ";
  35. $stmt = $this->pdo->prepare($sql);
  36. $stmt->bindValue(':company_id', $companyId, \PDO::PARAM_INT);
  37. $stmt->bindValue(':limit', $limit, \PDO::PARAM_INT);
  38. $stmt->bindValue(':offset', $offset, \PDO::PARAM_INT);
  39. $stmt->execute();
  40. $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
  41. // Agrupamento por pedido
  42. $orders = [];
  43. foreach ($rows as $row) {
  44. $orderId = $row['order_id'];
  45. if (!isset($orders[$orderId])) {
  46. $orders[$orderId] = [
  47. 'order_id' => $row['order_id'],
  48. 'order_finished_at'=> $row['order_finished_at'],
  49. 'table_id' => $row['table_id'],
  50. 'order_name' => $row['order_name'],
  51. 'order_flag' => $row['order_flag'],
  52. 'items' => []
  53. ];
  54. }
  55. $orders[$orderId]['items'][] = [
  56. 'product_name' => $row['product_name'],
  57. 'product_price' => $row['product_price']
  58. ];
  59. }
  60. return array_values($orders);
  61. }
  62. }