Study_Review_Manager::getAvailableReviewersName()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 5
nc 2
nop 0
dl 0
loc 10
c 1
b 0
f 0
cc 2
rs 10
1
<?php
2
3
/**
4
 Copyright (C) 2018-2020 KANOUN Salim
5
 This program is free software; you can redistribute it and/or modify
6
 it under the terms of the Affero GNU General Public v.3 License as published by
7
 the Free Software Foundation;
8
 This program is distributed in the hope that it will be useful,
9
 but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
 Affero GNU General Public Public for more details.
12
 You should have received a copy of the Affero GNU General Public Public along
13
 with this program; if not, write to the Free Software Foundation, Inc.,
14
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15
 */
16
17
/**
18
 * Review status progress determination
19
 */
20
class Study_Review_Manager
21
{
22
23
	private $studyObject;
24
25
26
	public function __construct(Study $studyObject)
27
	{
28
		$this->studyObject=$studyObject;
29
	}
30
31
	private function getAvailableReviewersName(): Array
32
	{
33
		//List the Reviewers declared in the study
34
		$reviewerUsersObjects=$this->studyObject->getUsersByRoleInStudy(User::REVIEWER);
35
		$availableReviewers=[];
36
		foreach ($reviewerUsersObjects as $reviewerObject) {
37
			$availableReviewers[]=$reviewerObject->lastName." ".$reviewerObject->firstName;
38
		}
39
40
		return $availableReviewers;
41
	}
42
43
	/**
44
	 * List users who have done reviews (and other reviewers missing) for each visit
45
	 * with date of review, status of review, 
46
	 * @return array[]
47
	 */
48
	public function getReviewsDetailsByVisit() : Array
49
	{
50
51
		$availableReviewers=$this->getAvailableReviewersName();
52
		//Retrieve created Visit from the study Object
53
		$createdVisitObjects=$this->studyObject->getAllCreatedVisits();
54
55
		//GlobalMap
56
		$reviewdetailsMap=[];
57
58
		foreach ($createdVisitObjects as $createdVisit) {
59
			if ($createdVisit->stateQualityControl == Visit::QC_ACCEPTED && $createdVisit->visitTypeObject->reviewNeeded) {
60
				//If QC Accepted and review needed we analyze it
61
				$newVisit['visitId']=$createdVisit->id_visit;
62
				$newVisit['visitModality']=$createdVisit->visitGroupObject->groupModality;
63
				$newVisit['patientNumber']=$createdVisit->patientCode;
64
				$newVisit['visit']=$createdVisit->visitType;
65
				$newVisit['acquisitionDate']=$createdVisit->acquisitionDate;
66
				$newVisit['reviewStatus']=$createdVisit->reviewStatus;
67
				//Retrieve review
68
				try {
69
					$reviewObjects=$createdVisit->getReviewsObject(false);
70
				} catch (Exception $e) {
71
					$reviewObjects=[];
72
				}
73
74
				$newVisit['numberOfReview']=count($reviewObjects);
75
				$newVisit['reviewDoneBy']=[];
76
				$newVisit['reviewDetailsArray']=[];
77
				foreach ($reviewObjects as $review) {
78
					$reviewerObject=$review->getUserObject();
79
					$details['user']=$reviewerObject->lastName." ".$reviewerObject->firstName;
80
					$details['date']=$review->reviewDate;
81
					$newVisit['reviewDetailsArray'][]=$details;
82
					$newVisit['reviewDoneBy'][]=$reviewerObject->lastName." ".$reviewerObject->firstName;
83
				}
84
85
				//Determine missing reviewer for this visit
86
				$newVisit['reviewNotDoneBy']=array_diff($availableReviewers, $newVisit['reviewDoneBy']);
87
88
				//Add all data to the global map
89
				$reviewdetailsMap[$createdVisit->id_visit]=$newVisit;
90
			}
91
		}
92
		return $reviewdetailsMap;
93
	}
94
}
95