Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
ServiceQueue
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 6
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getActiveQueue
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 getWaitingCustomers
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 getInProgress
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 getQueueStats
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 getEmployeeStats
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace BuyerKiosk\ServiceQueue;
4
5class ServiceQueue {
6    private $store;
7    private $storeDB;
8
9    public function __construct(\Store $store) {
10        $this->store = $store;
11        $this->storeDB = dbConnectByName($store->getDbName());
12    }
13
14    public function getActiveQueue() {
15        $sql = "SELECT sq.*, 
16                c.firstName AS customerFirstName,
17                c.lastName AS customerLastName,
18                c.phone AS customerPhone,
19                e.employeeFirstName,
20                e.employeeLastName
21            FROM serviceQueue sq
22            LEFT JOIN customers c ON sq.customerID = c.customerID
23            LEFT JOIN employees e ON sq.employeeID = e.employeeID
24            WHERE sq.isFinished = 0
25            ORDER BY sq.timeEntered ASC";
26
27        $stmt = $this->storeDB->prepare($sql);
28        $stmt->execute();
29        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
30    }
31
32    public function getWaitingCustomers() {
33        $sql = "SELECT sq.*, c.firstName, c.lastName, c.phone
34                FROM serviceQueue sq
35                LEFT JOIN customers c ON sq.customerID = c.customerID
36                WHERE sq.isFinished = 0 
37                AND sq.timeStarted IS NULL
38                ORDER BY sq.timeEntered ASC";
39
40        $stmt = $this->storeDB->prepare($sql);
41        $stmt->execute();
42        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
43    }
44
45    public function getInProgress() {
46        $sql = "SELECT sq.*, 
47                c.firstName, c.lastName, c.phone,
48                e.firstName as employeeFirstName, e.lastName as employeeLastName
49                FROM serviceQueue sq
50                LEFT JOIN customers c ON sq.customerID = c.customerID
51                LEFT JOIN employees e ON sq.employeeID = e.employeeID
52                WHERE sq.isFinished = 0 
53                AND sq.timeStarted IS NOT NULL
54                AND sq.timeCompleted IS NULL
55                ORDER BY sq.timeStarted ASC";
56
57        $stmt = $this->storeDB->prepare($sql);
58        $stmt->execute();
59        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
60    }
61
62    public function getQueueStats() {
63        $sql = "SELECT 
64                COUNT(*) as totalInQueue,
65                SUM(CASE WHEN timeStarted IS NULL THEN 1 ELSE 0 END) as waiting,
66                SUM(CASE WHEN timeStarted IS NOT NULL AND timeCompleted IS NULL THEN 1 ELSE 0 END) as inProgress,
67                AVG(TIMESTAMPDIFF(MINUTE, timeEntered, timeStarted)) as avgWaitTime,
68                AVG(TIMESTAMPDIFF(MINUTE, timeStarted, timeCompleted)) as avgServiceTime
69                FROM serviceQueue 
70                WHERE DATE(timeEntered) = CURDATE()";
71
72        $stmt = $this->storeDB->prepare($sql);
73        $stmt->execute();
74        return $stmt->fetch(\PDO::FETCH_ASSOC);
75    }
76
77    public function getEmployeeStats($employeeID) {
78        $sql = "SELECT 
79                COUNT(*) as totalServed,
80                AVG(TIMESTAMPDIFF(MINUTE, timeStarted, timeCompleted)) as avgServiceTime
81                FROM serviceQueue 
82                WHERE employeeID = :employeeID 
83                AND DATE(timeEntered) = CURDATE()
84                AND timeCompleted IS NOT NULL";
85
86        $stmt = $this->storeDB->prepare($sql);
87        $stmt->execute([':employeeID' => $employeeID]);
88        return $stmt->fetch(\PDO::FETCH_ASSOC);
89    }
90}