Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 87 |
|
0.00% |
0 / 10 |
CRAP | |
0.00% |
0 / 1 |
| CashActivityRepository | |
0.00% |
0 / 87 |
|
0.00% |
0 / 10 |
272 | |
0.00% |
0 / 1 |
| __construct | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
| save | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
6 | |||
| findByDateRange | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
6 | |||
| findByDate | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
6 | |||
| findById | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
6 | |||
| findAll | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
6 | |||
| update | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
| delete | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
| hydrate | |
0.00% |
0 / 29 |
|
0.00% |
0 / 1 |
2 | |||
| getLatestSafeBalance | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
6 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace BuyerKiosk\Cash; |
| 4 | |
| 5 | use PDO; |
| 6 | use PDOException; |
| 7 | |
| 8 | class CashActivityRepository { |
| 9 | private $db; |
| 10 | private $store; |
| 11 | |
| 12 | public function __construct(\Store $store) { |
| 13 | $this->store = $store; |
| 14 | $this->db = dbConnectByName($this->store->getDbName()); |
| 15 | } |
| 16 | |
| 17 | public function save(CashActivity $activity): bool { |
| 18 | $sql = "INSERT INTO cashActivity ( |
| 19 | timeStamp, userId, transType, register, destination, |
| 20 | pennies, pennyRolls, nickels, nickelRolls, |
| 21 | dimes, dimeRolls, quarters, quarterRolls, |
| 22 | ones, oneRolls, fives, fiveRolls, |
| 23 | tens, tenRolls, twenties, twentyRolls, |
| 24 | fifties, fiftyRolls, hundreds, hundredRolls, |
| 25 | total |
| 26 | ) VALUES ( |
| 27 | :timeStamp, :userId, :transType, :register, :destination, |
| 28 | :pennies, :pennyRolls, :nickels, :nickelRolls, |
| 29 | :dimes, :dimeRolls, :quarters, :quarterRolls, |
| 30 | :ones, :oneRolls, :fives, :fiveRolls, |
| 31 | :tens, :tenRolls, :twenties, :twentyRolls, |
| 32 | :fifties, :fiftyRolls, :hundreds, :hundredRolls, |
| 33 | :total |
| 34 | )"; |
| 35 | |
| 36 | $stmt = $this->db->prepare($sql); |
| 37 | $params = $activity->toArray(); |
| 38 | //error_log('SQL Parameters: ' . print_r($params, true)); |
| 39 | // Remove id from parameters since it's not in the INSERT query |
| 40 | unset($params['id'], $params['userName']); |
| 41 | |
| 42 | // Debug |
| 43 | error_log('SQL Parameters after id removal: ' . print_r($params, true)); |
| 44 | |
| 45 | try { |
| 46 | return $stmt->execute($params); |
| 47 | } catch (PDOException $e) { |
| 48 | error_log('SQL Error: ' . $e->getMessage()); |
| 49 | error_log('SQL Query: ' . $sql); |
| 50 | throw $e; |
| 51 | } |
| 52 | } |
| 53 | public function findByDateRange(string $startDate, string $endDate): array { |
| 54 | $sql = "SELECT * FROM cashActivity |
| 55 | WHERE DATE(timeStamp) BETWEEN :startDate AND :endDate |
| 56 | ORDER BY timeStamp DESC"; |
| 57 | |
| 58 | $stmt = $this->db->prepare($sql); |
| 59 | $stmt->execute([ |
| 60 | ':startDate' => $startDate, |
| 61 | ':endDate' => $endDate |
| 62 | ]); |
| 63 | |
| 64 | $activities = []; |
| 65 | while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { |
| 66 | $activities[] = $this->hydrate($row); |
| 67 | } |
| 68 | return $activities; |
| 69 | } |
| 70 | |
| 71 | public function findByDate(string $date): array { |
| 72 | $sql = "SELECT * FROM cashActivity |
| 73 | WHERE DATE(timeStamp) = :date |
| 74 | ORDER BY timeStamp DESC"; |
| 75 | |
| 76 | $stmt = $this->db->prepare($sql); |
| 77 | $stmt->execute([':date' => $date]); |
| 78 | |
| 79 | $activities = []; |
| 80 | while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { |
| 81 | $activities[] = $this->hydrate($row); |
| 82 | } |
| 83 | return $activities; |
| 84 | } |
| 85 | |
| 86 | |
| 87 | |
| 88 | public function findById(int $id): ?CashActivity { |
| 89 | $sql = "SELECT * FROM cashActivity WHERE id = :id"; |
| 90 | $stmt = $this->db->prepare($sql); |
| 91 | $stmt->execute(['id' => $id]); |
| 92 | |
| 93 | $data = $stmt->fetch(PDO::FETCH_ASSOC); |
| 94 | if (!$data) return null; |
| 95 | |
| 96 | return $this->hydrate($data); |
| 97 | } |
| 98 | |
| 99 | public function findAll(): array { |
| 100 | $sql = "SELECT * FROM cashActivity ORDER BY timeStamp DESC"; |
| 101 | $stmt = $this->db->prepare($sql); |
| 102 | $stmt->execute(); |
| 103 | |
| 104 | $activities = []; |
| 105 | while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { |
| 106 | $activities[] = $this->hydrate($row); |
| 107 | } |
| 108 | return $activities; |
| 109 | } |
| 110 | |
| 111 | public function update(CashActivity $activity): bool { |
| 112 | $sql = "UPDATE cashActivity SET |
| 113 | timeStamp = :timeStamp, |
| 114 | userId = :userId, |
| 115 | transType = :transType, |
| 116 | register = :register, |
| 117 | destination = :destination, |
| 118 | pennies = :pennies, |
| 119 | pennyRolls = :pennyRolls, |
| 120 | nickels = :nickels, |
| 121 | nickelRolls = :nickelRolls, |
| 122 | dimes = :dimes, |
| 123 | dimeRolls = :dimeRolls, |
| 124 | quarters = :quarters, |
| 125 | quarterRolls = :quarterRolls, |
| 126 | ones = :ones, |
| 127 | oneRolls = :oneRolls, |
| 128 | fives = :fives, |
| 129 | fiveRolls = :fiveRolls, |
| 130 | tens = :tens, |
| 131 | tenRolls = :tenRolls, |
| 132 | twenties = :twenties, |
| 133 | twentyRolls = :twentyRolls, |
| 134 | fifties = :fifties, |
| 135 | fiftyRolls = :fiftyRolls, |
| 136 | hundreds = :hundreds, |
| 137 | hundredRolls = :hundredRolls, |
| 138 | total = :total |
| 139 | WHERE id = :id"; |
| 140 | |
| 141 | $stmt = $this->db->prepare($sql); |
| 142 | return $stmt->execute($activity->toArray()); |
| 143 | } |
| 144 | |
| 145 | public function delete(int $id): bool { |
| 146 | $sql = "DELETE FROM cashActivity WHERE id = :id"; |
| 147 | $stmt = $this->db->prepare($sql); |
| 148 | return $stmt->execute(['id' => $id]); |
| 149 | } |
| 150 | |
| 151 | private function hydrate(array $data): CashActivity { |
| 152 | $activity = new CashActivity(); |
| 153 | $activity->setId($data['id']) |
| 154 | ->setTimeStamp($data['timeStamp']) |
| 155 | ->setUserId($data['userId']) |
| 156 | ->setTransType($data['transType']) |
| 157 | ->setRegister($data['register']) |
| 158 | ->setDestination($data['destination']) |
| 159 | ->setPennies($data['pennies']) |
| 160 | ->setPennyRolls($data['pennyRolls']) |
| 161 | ->setNickels($data['nickels']) |
| 162 | ->setNickelRolls($data['nickelRolls']) |
| 163 | ->setDimes($data['dimes']) |
| 164 | ->setDimeRolls($data['dimeRolls']) |
| 165 | ->setQuarters($data['quarters']) |
| 166 | ->setQuarterRolls($data['quarterRolls']) |
| 167 | ->setOnes($data['ones']) |
| 168 | ->setOneRolls($data['oneRolls']) |
| 169 | ->setFives($data['fives']) |
| 170 | ->setFiveRolls($data['fiveRolls']) |
| 171 | ->setTens($data['tens']) |
| 172 | ->setTenRolls($data['tenRolls']) |
| 173 | ->setTwenties($data['twenties']) |
| 174 | ->setTwentyRolls($data['twentyRolls']) |
| 175 | ->setFifties($data['fifties']) |
| 176 | ->setFiftyRolls($data['fiftyRolls']) |
| 177 | ->setHundreds($data['hundreds']) |
| 178 | ->setHundredRolls($data['hundredRolls']) |
| 179 | ->setTotal($data['total']); |
| 180 | return $activity; |
| 181 | } |
| 182 | public function getLatestSafeBalance(): ?CashActivity { |
| 183 | $sql = "SELECT * FROM cashActivity WHERE transType = 'Safe' ORDER BY timeStamp DESC LIMIT 1"; |
| 184 | $stmt = $this->db->prepare($sql); |
| 185 | $stmt->execute(); |
| 186 | |
| 187 | $data = $stmt->fetch(PDO::FETCH_ASSOC); |
| 188 | if (!$data) return null; |
| 189 | |
| 190 | return $this->hydrate($data); |
| 191 | } |
| 192 | |
| 193 | } |