Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 69
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
SafeConfigurationRepository
0.00% covered (danger)
0.00%
0 / 69
0.00% covered (danger)
0.00%
0 / 5
56
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
 getLatest
0.00% covered (danger)
0.00%
0 / 52
0.00% covered (danger)
0.00%
0 / 1
6
 save
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 create
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 update
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace BuyerKiosk\Cash;
4
5use PDO;
6use DateTime;
7
8class SafeConfigurationRepository {
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 getLatest(): SafeConfiguration {
18        $sql = "SELECT * FROM safeConfiguration ORDER BY timeStamp DESC LIMIT 1";
19        $stmt = $this->db->prepare($sql);
20        $stmt->execute();
21
22        $result = $stmt->fetch(PDO::FETCH_ASSOC);
23
24        $config = new SafeConfiguration($this->store);
25        if ($result) {
26            $config->setId($result['id'])
27                ->setTimeStamp($result['timeStamp'])
28                ->setUserId($result['userId'])
29                ->setLowPennies($result['lowPennies'])
30                ->setCriticalPennies($result['criticalPennies'])
31                ->setPenniesPerRoll($result['penniesPerRoll'])
32                ->setLowNickels($result['lowNickels'])
33                ->setCriticalNickels($result['criticalNickels'])
34                ->setNickelsPerRoll($result['nickelsPerRoll'])
35                ->setLowDimes($result['lowDimes'])
36                ->setCriticalDimes($result['criticalDimes'])
37                ->setDimesPerRoll($result['dimesPerRoll'])
38                ->setLowQuarters($result['lowQuarters'])
39                ->setCriticalQuarters($result['criticalQuarters'])
40                ->setQuartersPerRoll($result['quartersPerRoll'])
41                ->setLowOnes($result['lowOnes'])
42                ->setCriticalOnes($result['criticalOnes'])
43                ->setOnesPerBundle($result['onesPerBundle'])
44                ->setLowFives($result['lowFives'])
45                ->setCriticalFives($result['criticalFives'])
46                ->setFivesPerBundle($result['fivesPerBundle'])
47                ->setLowTens($result['lowTens'])
48                ->setCriticalTens($result['criticalTens'])
49                ->setTensPerBundle($result['tensPerBundle'])
50                ->setLowTwenties($result['lowTwenties'])
51                ->setCriticalTwenties($result['criticalTwenties'])
52                ->setTwentiesPerBundle($result['twentiesPerBundle'])
53                ->setLowFifties($result['lowFifties'])
54                ->setCriticalFifties($result['criticalFifties'])
55                ->setFiftiesPerBundle($result['fiftiesPerBundle'])
56                ->setLowHundreds($result['lowHundreds'])
57                ->setCriticalHundreds($result['criticalHundreds'])
58                ->setHundredsPerBundle($result['hundredsPerBundle'])
59                ->setWantedPennies($result['wantedPennies'])
60                ->setWantedNickels($result['wantedNickels'])
61                ->setWantedDimes($result['wantedDimes'])
62                ->setWantedQuarters($result['wantedQuarters'])
63                ->setWantedOnes($result['wantedOnes'])
64                ->setWantedFives($result['wantedFives'])
65                ->setWantedTens($result['wantedTens'])
66                ->setWantedTwenties($result['wantedTwenties'])
67                ->setWantedFifties($result['wantedFifties'])
68                ->setWantedHundreds($result['wantedHundreds'])
69                ->setDrsPaidOutPassword($result['drsPaidOutPassword']);
70        }
71        error_log("SafeConfigurationRepository::getLatest() - config: " . json_encode($config));
72
73        return $config;
74    }
75
76    public function save(SafeConfiguration $config): bool {
77        if ($config->getId()) {
78            return $this->update($config);
79        }
80        return $this->create($config);
81    }
82
83    private function create(SafeConfiguration $config): bool {
84        $sql = "INSERT INTO safeConfiguration (
85        timeStamp, userId,
86        lowPennies, criticalPennies, penniesPerRoll,
87        lowNickels, criticalNickels, nickelsPerRoll,
88        lowDimes, criticalDimes, dimesPerRoll,
89        lowQuarters, criticalQuarters, quartersPerRoll,
90        lowOnes, criticalOnes, onesPerBundle,
91        lowFives, criticalFives, fivesPerBundle,
92        lowTens, criticalTens, tensPerBundle,
93        lowTwenties, criticalTwenties, twentiesPerBundle,
94        lowFifties, criticalFifties, fiftiesPerBundle,
95        lowHundreds, criticalHundreds, hundredsPerBundle,
96        wantedPennies, wantedNickels, wantedDimes, wantedQuarters,
97        wantedOnes, wantedFives, wantedTens, wantedTwenties,
98        wantedFifties, wantedHundreds, drsPaidOutPassword
99    ) VALUES (
100        :timeStamp, :userId,
101        :lowPennies, :criticalPennies, :penniesPerRoll,
102        :lowNickels, :criticalNickels, :nickelsPerRoll,
103        :lowDimes, :criticalDimes, :dimesPerRoll,
104        :lowQuarters, :criticalQuarters, :quartersPerRoll,
105        :lowOnes, :criticalOnes, :onesPerBundle,
106        :lowFives, :criticalFives, :fivesPerBundle,
107        :lowTens, :criticalTens, :tensPerBundle,
108        :lowTwenties, :criticalTwenties, :twentiesPerBundle,
109        :lowFifties, :criticalFifties, :fiftiesPerBundle,
110        :lowHundreds, :criticalHundreds, :hundredsPerBundle,
111        :wantedPennies, :wantedNickels, :wantedDimes, :wantedQuarters,
112        :wantedOnes, :wantedFives, :wantedTens, :wantedTwenties,
113        :wantedFifties, :wantedHundreds, :drsPaidOutPassword
114    )";
115
116        $stmt = $this->db->prepare($sql);
117
118        // Convert the configuration to an array and remove the 'id' key
119        $params = $config->toArray();
120        unset($params['id']);
121
122        // Debugging: Log the SQL query and parameters
123        error_log("SQL Query: " . $sql);
124        error_log("Parameters: " . print_r($params, true));
125
126        return $stmt->execute($params);
127    }
128
129
130    private function update(SafeConfiguration $config): bool {
131        $sql = "UPDATE safeConfiguration SET 
132            timeStamp = :timeStamp,
133            userId = :userId,
134            lowPennies = :lowPennies,
135            criticalPennies = :criticalPennies,
136            penniesPerRoll = :penniesPerRoll,
137            lowNickels = :lowNickels,
138            criticalNickels = :criticalNickels,
139            nickelsPerRoll = :nickelsPerRoll,
140            lowDimes = :lowDimes,
141            criticalDimes = :criticalDimes,
142            dimesPerRoll = :dimesPerRoll,
143            lowQuarters = :lowQuarters,
144            criticalQuarters = :criticalQuarters,
145            quartersPerRoll = :quartersPerRoll,
146            lowOnes = :lowOnes,
147            criticalOnes = :criticalOnes,
148            onesPerBundle = :onesPerBundle,
149            lowFives = :lowFives,
150            criticalFives = :criticalFives,
151            fivesPerBundle = :fivesPerBundle,
152            lowTens = :lowTens,
153            criticalTens = :criticalTens,
154            tensPerBundle = :tensPerBundle,
155            lowTwenties = :lowTwenties,
156            criticalTwenties = :criticalTwenties,
157            twentiesPerBundle = :twentiesPerBundle,
158            lowFifties = :lowFifties,
159            criticalFifties = :criticalFifties,
160            fiftiesPerBundle = :fiftiesPerBundle,
161            lowHundreds = :lowHundreds,
162            criticalHundreds = :criticalHundreds,
163            hundredsPerBundle = :hundredsPerBundle,
164            wantedPennies = :wantedPennies,
165            wantedNickels = :wantedNickels,
166            wantedDimes = :wantedDimes,
167            wantedQuarters = :wantedQuarters,
168            wantedOnes = :wantedOnes,
169            wantedFives = :wantedFives,
170            wantedTens = :wantedTens,
171            wantedTwenties = :wantedTwenties,
172            wantedFifties = :wantedFifties,
173            wantedHundreds = :wantedHundreds,
174            drsPaidOutPassword = :drsPaidOutPassword
175            WHERE id = :id";
176
177        $stmt = $this->db->prepare($sql);
178        return $stmt->execute($config->toArray());
179    }
180}