Code Coverage  | 
      ||||||||||
Lines  | 
       Functions and Methods  | 
       Classes and Traits  | 
      ||||||||
| Total |         | 
       38.61%  | 
       39 / 101  | 
               | 
       29.41%  | 
       5 / 17  | 
       CRAP |         | 
       0.00%  | 
       0 / 1  | 
      
| ProcessStatus |         | 
       38.61%  | 
       39 / 101  | 
               | 
       29.41%  | 
       5 / 17  | 
       892.75 |         | 
       0.00%  | 
       0 / 1  | 
      
| writeUpdatedStatus |         | 
       100.00%  | 
       26 / 26  | 
               | 
       100.00%  | 
       1 / 1  | 
       3 | |||
| readProcessStatus |         | 
       100.00%  | 
       7 / 7  | 
               | 
       100.00%  | 
       1 / 1  | 
       3 | |||
| setStatusPreconfirmed |         | 
       0.00%  | 
       0 / 2  | 
               | 
       0.00%  | 
       0 / 1  | 
       2 | |||
| setStatusConfirmed |         | 
       100.00%  | 
       2 / 2  | 
               | 
       100.00%  | 
       1 / 1  | 
       1 | |||
| setStatusCalled |         | 
       100.00%  | 
       2 / 2  | 
               | 
       100.00%  | 
       1 / 1  | 
       1 | |||
| setStatusReserved |         | 
       100.00%  | 
       2 / 2  | 
               | 
       100.00%  | 
       1 / 1  | 
       1 | |||
| isBlockedProcess |         | 
       0.00%  | 
       0 / 1  | 
               | 
       0.00%  | 
       0 / 1  | 
       2 | |||
| isQueuedProcess |         | 
       0.00%  | 
       0 / 7  | 
               | 
       0.00%  | 
       0 / 1  | 
       42 | |||
| isPreconfirmedProcess |         | 
       0.00%  | 
       0 / 6  | 
               | 
       0.00%  | 
       0 / 1  | 
       30 | |||
| isConfirmedProcess |         | 
       0.00%  | 
       0 / 6  | 
               | 
       0.00%  | 
       0 / 1  | 
       30 | |||
| isReservedProcess |         | 
       0.00%  | 
       0 / 5  | 
               | 
       0.00%  | 
       0 / 1  | 
       20 | |||
| isCalledProcess |         | 
       0.00%  | 
       0 / 7  | 
               | 
       0.00%  | 
       0 / 1  | 
       42 | |||
| isProcessingProcess |         | 
       0.00%  | 
       0 / 6  | 
               | 
       0.00%  | 
       0 / 1  | 
       30 | |||
| isPendingProcess |         | 
       0.00%  | 
       0 / 7  | 
               | 
       0.00%  | 
       0 / 1  | 
       42 | |||
| isMissedProcess |         | 
       0.00%  | 
       0 / 6  | 
               | 
       0.00%  | 
       0 / 1  | 
       30 | |||
| isParkedProcess |         | 
       0.00%  | 
       0 / 6  | 
               | 
       0.00%  | 
       0 / 1  | 
       30 | |||
| isDeletedProcess |         | 
       0.00%  | 
       0 / 3  | 
               | 
       0.00%  | 
       0 / 1  | 
       6 | |||
| 1 | <?php | 
| 2 | |
| 3 | namespace BO\Zmsdb\Helper; | 
| 4 | |
| 5 | use BO\Zmsdb\Log; | 
| 6 | |
| 7 | /** | 
| 8 | * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) | 
| 9 | */ | 
| 10 | class ProcessStatus extends \BO\Zmsdb\Process | 
| 11 | { | 
| 12 | public function writeUpdatedStatus( | 
| 13 | \BO\Zmsentities\Process $process, | 
| 14 | $status, | 
| 15 | \DateTimeInterface $dateTime, | 
| 16 | $resolveReferences, | 
| 17 | $userAccount | 
| 18 | ) { | 
| 19 | $query = new \BO\Zmsdb\Query\Process(\BO\Zmsdb\Query\Base::UPDATE); | 
| 20 | $query->addConditionProcessId($process['id']); | 
| 21 | $query->addConditionAuthKey($process['authKey']); | 
| 22 | |
| 23 | $statusList = [ | 
| 24 | 'reserved' => 'setStatusReserved', | 
| 25 | 'confirmed' => 'setStatusConfirmed', | 
| 26 | 'preconfirmed' => 'setStatusPreconfirmed', | 
| 27 | 'called' => 'setStatusCalled' | 
| 28 | ]; | 
| 29 | |
| 30 | $entity = call_user_func_array(array($this, $statusList[$status]), array($process)); | 
| 31 | $query->addValuesStatusData($entity, $dateTime); | 
| 32 | $checksum = ($userAccount) ? sha1($process->id . '-' . $userAccount->getId()) : ''; | 
| 33 | |
| 34 | $this->writeItem($query, 'process', $query::TABLE); | 
| 35 | $this->perform(\BO\Zmsdb\Query\Process::QUERY_UPDATE_FOLLOWING_PROCESS, [ | 
| 36 | 'reserved' => ($process->status == 'reserved') ? 1 : 0, | 
| 37 | 'processID' => $process->getId(), | 
| 38 | ]); | 
| 39 | $process = $this->readEntity($process['id'], $process['authKey'], $resolveReferences); | 
| 40 | $process['status'] = $this->readProcessStatus($process['id'], $process['authKey']); | 
| 41 | |
| 42 | Log::writeProcessLog( | 
| 43 | "UPDATE (ProcessStatus::writeUpdatedStatus) $process $checksum", | 
| 44 | Log::ACTION_STATUS_CHANGE, | 
| 45 | $process, | 
| 46 | $userAccount | 
| 47 | ); | 
| 48 | |
| 49 | return $process; | 
| 50 | } | 
| 51 | |
| 52 | /** | 
| 53 | * get the current process status from given Id and authKey | 
| 54 | * | 
| 55 | * @return String | 
| 56 | */ | 
| 57 | public function readProcessStatus($processId, $authKey) | 
| 58 | { | 
| 59 | $processData = $this->getReader()->fetchOne( | 
| 60 | 'SELECT | 
| 61 | * | 
| 62 | FROM buerger AS b | 
| 63 | WHERE | 
| 64 | b.BuergerID = "' . $processId . '" | 
| 65 | AND b.absagecode = "' . $authKey . '" | 
| 66 | LIMIT 1 | 
| 67 | ' | 
| 68 | ); | 
| 69 | |
| 70 | return $processData['status']; | 
| 71 | |
| 72 | $statusList = [ | 
| 73 | 'free' => true, | 
| 74 | 'reserved' => $this->isReservedProcess($processData), | 
| 75 | 'confirmed' => $this->isConfirmedProcess($processData), | 
| 76 | 'preconfirmed' => $this->isPreconfirmedProcess($processData), | 
| 77 | 'queued' => $this->isQueuedProcess($processData), | 
| 78 | 'called' => $this->isCalledProcess($processData), | 
| 79 | 'processing' => $this->isProcessingProcess($processData), | 
| 80 | 'pending' => $this->isPendingProcess($processData), | 
| 81 | 'missed' => $this->isMissedProcess($processData), | 
| 82 | 'parked' => $this->isParkedProcess($processData), | 
| 83 | 'blocked' => $this->isBlockedProcess($processData), | 
| 84 | 'deleted' => $this->isDeletedProcess($processData), | 
| 85 | ]; | 
| 86 | foreach ($statusList as $statusType => $statusCheck) { | 
| 87 | if ($statusCheck) { | 
| 88 | $status = $statusType; | 
| 89 | } | 
| 90 | } | 
| 91 | return $status; | 
| 92 | } | 
| 93 | |
| 94 | protected function setStatusPreconfirmed($process) | 
| 95 | { | 
| 96 | $process['status'] = $process::STATUS_PRECONFIRMED; | 
| 97 | return $process; | 
| 98 | } | 
| 99 | |
| 100 | protected function setStatusConfirmed($process) | 
| 101 | { | 
| 102 | $process['status'] = $process::STATUS_CONFIRMED; | 
| 103 | return $process; | 
| 104 | } | 
| 105 | |
| 106 | protected function setStatusCalled($process) | 
| 107 | { | 
| 108 | $process['status'] = $process::STATUS_CALLED; | 
| 109 | return $process; | 
| 110 | } | 
| 111 | |
| 112 | protected function setStatusReserved($process) | 
| 113 | { | 
| 114 | $process['status'] = $process::STATUS_RESERVED; | 
| 115 | return $process; | 
| 116 | } | 
| 117 | |
| 118 | /** | 
| 119 | * check if it is a blocked appointment | 
| 120 | * | 
| 121 | * @return Bool | 
| 122 | */ | 
| 123 | protected function isBlockedProcess($process) | 
| 124 | { | 
| 125 | return ($process['Name'] == 'dereferenced'); | 
| 126 | } | 
| 127 | |
| 128 | /** | 
| 129 | * check if it is a queued appointment | 
| 130 | * | 
| 131 | * @return Bool | 
| 132 | */ | 
| 133 | protected function isQueuedProcess($process) | 
| 134 | { | 
| 135 | return ($process['Name'] != 'dereferenced' | 
| 136 | && $process['vorlaeufigeBuchung'] == 0 | 
| 137 | && $process['StandortID'] != 0 | 
| 138 | && $process['wsm_aufnahmezeit'] != '00:00:00' | 
| 139 | && $process['aufrufzeit'] != '00:00:00' | 
| 140 | && empty($process['istFolgeterminvon']) | 
| 141 | ); | 
| 142 | } | 
| 143 | |
| 144 | /** | 
| 145 | * check if it is a confirmed appointment | 
| 146 | * | 
| 147 | * @return Bool | 
| 148 | */ | 
| 149 | protected function isPreconfirmedProcess($process) | 
| 150 | { | 
| 151 | return ($process['Name'] != 'dereferenced' | 
| 152 | && $process['vorlaeufigeBuchung'] == 0 | 
| 153 | && $process['StandortID'] != 0 | 
| 154 | && $process['bestaetigt'] == 0 | 
| 155 | && empty($process['istFolgeterminvon']) | 
| 156 | ); | 
| 157 | } | 
| 158 | |
| 159 | /** | 
| 160 | * check if it is a confirmed appointment | 
| 161 | * | 
| 162 | * @return Bool | 
| 163 | */ | 
| 164 | protected function isConfirmedProcess($process) | 
| 165 | { | 
| 166 | return ($process['Name'] != 'dereferenced' | 
| 167 | && $process['vorlaeufigeBuchung'] == 0 | 
| 168 | && $process['bestaetigt'] == 1 | 
| 169 | && $process['StandortID'] != 0 | 
| 170 | && empty($process['istFolgeterminvon']) | 
| 171 | ); | 
| 172 | } | 
| 173 | |
| 174 | /** | 
| 175 | * check if it is a reserved appointment | 
| 176 | * | 
| 177 | * @return Bool | 
| 178 | */ | 
| 179 | protected function isReservedProcess($process) | 
| 180 | { | 
| 181 | return ($process['Name'] != 'dereferenced' | 
| 182 | && $process['vorlaeufigeBuchung'] == 1 | 
| 183 | && $process['StandortID'] != 0 | 
| 184 | && empty($process['istFolgeterminvon']) | 
| 185 | ); | 
| 186 | } | 
| 187 | |
| 188 | /** | 
| 189 | * check if it is a called appointment | 
| 190 | * | 
| 191 | * @return Bool | 
| 192 | */ | 
| 193 | protected function isCalledProcess($process) | 
| 194 | { | 
| 195 | return ($process['Name'] != 'dereferenced' | 
| 196 | && $process['vorlaeufigeBuchung'] == 0 | 
| 197 | && $process['StandortID'] != 0 | 
| 198 | && $process['aufrufzeit'] != '00:00:00' | 
| 199 | && $process['aufruferfolgreich'] == 0 | 
| 200 | && empty($process['istFolgeterminvon']) | 
| 201 | ); | 
| 202 | } | 
| 203 | |
| 204 | /** | 
| 205 | * check if it is a processing appointment | 
| 206 | * | 
| 207 | * @return Bool | 
| 208 | */ | 
| 209 | protected function isProcessingProcess($process) | 
| 210 | { | 
| 211 | return ($process['Name'] != 'dereferenced' | 
| 212 | && $process['vorlaeufigeBuchung'] == 0 | 
| 213 | && $process['StandortID'] != 0 | 
| 214 | && $process['aufruferfolgreich'] != 0 | 
| 215 | && empty($process['istFolgeterminvon']) | 
| 216 | ); | 
| 217 | } | 
| 218 | |
| 219 | /** | 
| 220 | * check if it is a processing appointment | 
| 221 | * | 
| 222 | * @return Bool | 
| 223 | */ | 
| 224 | protected function isPendingProcess($process) | 
| 225 | { | 
| 226 | return ($process['Name'] != 'dereferenced' | 
| 227 | && $process['vorlaeufigeBuchung'] == 0 | 
| 228 | && $process['StandortID'] != 0 | 
| 229 | && $process['Abholer'] != 0 | 
| 230 | && $process['AbholortID'] != 0 | 
| 231 | && empty($process['istFolgeterminvon']) | 
| 232 | ); | 
| 233 | } | 
| 234 | |
| 235 | /** | 
| 236 | * check if it is a missed appointment | 
| 237 | * | 
| 238 | * @return Bool | 
| 239 | */ | 
| 240 | protected function isMissedProcess($process) | 
| 241 | { | 
| 242 | return ($process['Name'] != 'dereferenced' | 
| 243 | && $process['vorlaeufigeBuchung'] == 0 | 
| 244 | && $process['StandortID'] != 0 | 
| 245 | && $process['nicht_erschienen'] != 0 | 
| 246 | && empty($process['istFolgeterminvon']) | 
| 247 | ); | 
| 248 | } | 
| 249 | |
| 250 | /** | 
| 251 | * check if it is a missed appointment | 
| 252 | * | 
| 253 | * @return Bool | 
| 254 | */ | 
| 255 | protected function isParkedProcess($process) | 
| 256 | { | 
| 257 | return ($process['Name'] != 'dereferenced' | 
| 258 | && $process['vorlaeufigeBuchung'] == 0 | 
| 259 | && $process['StandortID'] != 0 | 
| 260 | && $process['parked'] != 0 | 
| 261 | && empty($process['istFolgeterminvon']) | 
| 262 | ); | 
| 263 | } | 
| 264 | |
| 265 | /** | 
| 266 | * check if it is a deleted appointment | 
| 267 | * | 
| 268 | * @return Bool | 
| 269 | */ | 
| 270 | protected function isDeletedProcess($process) | 
| 271 | { | 
| 272 | return ($process['Name'] == '(abgesagt)' | 
| 273 | && empty($process['istFolgeterminvon']) | 
| 274 | ); | 
| 275 | } | 
| 276 | } |