Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | n/a |
0 / 0 |
n/a |
0 / 0 |
CRAP | n/a |
0 / 0 |
|||
AppointmentDeallocateByCron | n/a |
0 / 0 |
n/a |
0 / 0 |
22 | n/a |
0 / 0 |
|||
__construct | n/a |
0 / 0 |
n/a |
0 / 0 |
2 | |||||
log | n/a |
0 / 0 |
n/a |
0 / 0 |
2 | |||||
getCount | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
setLimit | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
setLoopCount | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
startProcessing | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
deallocateProcessList | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
deleteByCallback | n/a |
0 / 0 |
n/a |
0 / 0 |
5 | |||||
handleProcess | n/a |
0 / 0 |
n/a |
0 / 0 |
4 | |||||
writeDeallocatedProcess | n/a |
0 / 0 |
n/a |
0 / 0 |
4 |
1 | <?php |
2 | |
3 | namespace BO\Zmsdb\Helper; |
4 | |
5 | /** |
6 | * @codeCoverageIgnore |
7 | */ |
8 | class AppointmentDeallocateByCron |
9 | { |
10 | protected $verbose = false; |
11 | |
12 | protected $limit = 10000; |
13 | |
14 | protected $loopCount = 500; |
15 | |
16 | protected $time; |
17 | |
18 | protected $statuslist = [ |
19 | "deleted" |
20 | ]; |
21 | |
22 | protected $count = []; |
23 | |
24 | public function __construct(\DateTimeInterface $dateTime, $verbose = false) |
25 | { |
26 | $this->time = $dateTime; |
27 | if ($verbose) { |
28 | $this->log("INFO: Deallocate cancelled appointments by scopes deallocate preference"); |
29 | $this->verbose = true; |
30 | } |
31 | } |
32 | |
33 | protected function log($message) |
34 | { |
35 | if ($this->verbose) { |
36 | error_log($message); |
37 | } |
38 | } |
39 | |
40 | public function getCount() |
41 | { |
42 | return $this->count; |
43 | } |
44 | |
45 | public function setLimit($limit) |
46 | { |
47 | $this->limit = $limit; |
48 | } |
49 | |
50 | public function setLoopCount($loopCount) |
51 | { |
52 | $this->loopCount = $loopCount; |
53 | } |
54 | |
55 | public function startProcessing($commit) |
56 | { |
57 | $this->count['deallocated'] = 0; |
58 | $this->deallocateProcessList($commit); |
59 | $this->log("\nSUMMARY: Deallocated processes: " . var_export($this->count, true)); |
60 | } |
61 | |
62 | protected function deallocateProcessList($commit) |
63 | { |
64 | $this->log("\nDeallocate cancelled processes"); |
65 | $count = $this->deleteByCallback($commit, function ($limit, $offset) { |
66 | $query = new \BO\Zmsdb\Process(); |
67 | $processList = $query->readDeallocateProcessList($this->time, $limit, $offset); |
68 | return $processList; |
69 | }); |
70 | $this->count["deallocated"] += $count; |
71 | } |
72 | |
73 | protected function deleteByCallback($commit, \Closure $callback) |
74 | { |
75 | $processCount = 0; |
76 | $startposition = 0; |
77 | while ($processCount < $this->limit) { |
78 | $processList = $callback($this->loopCount, $startposition); |
79 | if (0 == $processList->count()) { |
80 | break; |
81 | } |
82 | foreach ($processList as $process) { |
83 | if (!$this->handleProcess($process, $commit, $processCount)) { |
84 | $startposition++; |
85 | } |
86 | $processCount++; |
87 | } |
88 | } |
89 | return $processCount; |
90 | } |
91 | |
92 | protected function handleProcess(\BO\Zmsentities\Process $process, $commit, $processCount) |
93 | { |
94 | $verbose = $this->verbose; |
95 | if (in_array($process->status, $this->statuslist)) { |
96 | $this->log("INFO: $processCount. Deallocate $process"); |
97 | if ($commit) { |
98 | $this->writeDeallocatedProcess($process); |
99 | return 1; |
100 | } |
101 | } elseif ($verbose) { |
102 | $this->log("INFO: Keep process $process->id"); |
103 | } |
104 | return 0; |
105 | } |
106 | |
107 | /** |
108 | * It is important to know that the slots in writeBlockedEntity are unblocked again, |
109 | * but the ID remains blocked until the next day |
110 | */ |
111 | protected function writeDeallocatedProcess(\BO\Zmsentities\Process $process) |
112 | { |
113 | $verbose = $this->verbose; |
114 | $query = new \BO\Zmsdb\Process(); |
115 | if ($query->writeBlockedEntity($process, true)) { |
116 | if ($verbose) { |
117 | $this->log("INFO: Process $process->id successfully deallocated"); |
118 | } |
119 | } else { |
120 | if ($verbose) { |
121 | $this->log("WARN: Could not deallocate process '$process->id'!"); |
122 | } |
123 | } |
124 | } |
125 | } |