3
3
namespace OpinionManagement \Controllers ;
4
4
5
5
use Doctrine \Common \Collections \Criteria ;
6
+ use EvaluationMethodTechnical \Plugin as EvaluationTechnicalPlugin ;
6
7
use MapasCulturais \Controller ,
7
8
MapasCulturais \App ;
9
+ use MapasCulturais \Entities \Opportunity ;
10
+ use MapasCulturais \Entities \EvaluationMethodConfigurationMeta ;
8
11
use MapasCulturais \Entities \Notification ;
12
+ use MapasCulturais \Entities \Registration ;
13
+ use MapasCulturais \Entities \RegistrationEvaluation ;
9
14
use OpinionManagement \Helpers \EvaluationList ;
10
15
11
16
class OpinionManagement extends Controller
@@ -32,14 +37,20 @@ public function GET_opinions(): void
32
37
$ this ->requireAuthentication ();
33
38
34
39
/**
35
- * @var $registration \MapasCulturais\Entities\ Registration
40
+ * @var $registration Registration
36
41
*/
37
- $ registration = $ app ->repo ('Registration ' )->find ($ this ->data ['id ' ]);
38
- if ($ registration ->canUser ('view ' )) {
42
+ $ registration = $ app ->repo (Registration::class)->find ($ this ->data ['id ' ]);
43
+ if ($ registration ->canUser ('view ' )) {
44
+ $ evaluationsAvg = self ::getEvaluationsAvg ($ registration );
45
+ (new EvaluationTechnicalPlugin ())->applyAffirmativePolicies ($ evaluationsAvg , $ registration );
46
+
39
47
$ opinions = new EvaluationList ($ registration );
40
48
$ this ->json ([
49
+ 'appliedAffirmativePolicy ' => $ registration ->appliedAffirmativePolicy ?? false ,
41
50
'evaluationMethod ' => (string ) $ registration ->opportunity ->evaluationMethodConfiguration ->type ,
51
+ 'criteria ' => self ::getCriteriaMeta ($ registration ->opportunity ),
42
52
'opinions ' => $ opinions ,
53
+ 'registration ' => $ registration ,
43
54
]);
44
55
return ;
45
56
}
@@ -60,10 +71,10 @@ public function POST_publishOpinions(): void
60
71
return ;
61
72
}
62
73
63
-
64
- $ opportunity ->setMetadata ('publishedOpinions ' , true );
65
- $ error = $ opportunity ->save (true );
66
- if ( $ error ) {
74
+ try {
75
+ $ opportunity ->setMetadata ('publishedOpinions ' , true );
76
+ $ opportunity ->save (true );
77
+ } catch ( \ Exception $ e ) {
67
78
$ this ->errorJson (['error ' => new \PDOException ('Cannot save this data ' )], 500 );
68
79
return ;
69
80
}
@@ -92,17 +103,46 @@ public static function notificateUsers(int $opportunityId, bool $verifyPublishin
92
103
foreach ($ registrations as $ i => $ registration ) {
93
104
$ notification = new Notification ();
94
105
$ notification ->user = $ registration ->owner ->user ;
95
- $ notification ->message =
96
- sprintf (
97
- "Sua inscrição <a style='font-weight:bold;' href='/inscricao/ {$ registration ->id }'>%s</a> " .
98
- " da oportunidade <a style='font-weight:bold;' href='/oportunidade/ {$ opportunity ->id }'/>%s</a>está com os pareceres publicados. " ,
99
- $ registration ->number ,
100
- $ opportunity ->name
101
- );
106
+ $ notification ->message = sprintf (
107
+ "Sua inscrição <a style='font-weight:bold;' href='/inscricao/ {$ registration ->id }'>%s</a> " .
108
+ " da oportunidade <a style='font-weight:bold;' href='/oportunidade/ {$ opportunity ->id }'/>%s</a>está com os pareceres publicados. " ,
109
+ $ registration ->number ,
110
+ $ opportunity ->name
111
+ );
102
112
$ notification ->save (true );
103
113
$ app ->log ->debug ("Notificação " .($ i +1 )."/ $ count enviada para o usuário {$ registration ->owner ->user ->id } ( {$ registration ->owner ->name }) " );
104
114
}
105
115
106
116
return true ;
107
117
}
118
+
119
+ public static function getCriteriaMeta (Opportunity $ opportunity ): array
120
+ {
121
+ $ app = App::i ();
122
+ $ criteria = $ app ->repo (EvaluationMethodConfigurationMeta::class)->findOneBy ([
123
+ 'key ' => 'criteria ' ,
124
+ 'owner ' => $ opportunity ->evaluationMethodConfiguration ,
125
+ ]);
126
+ $ criteria = json_decode ($ criteria ->value , true );
127
+ $ finalCriteria = [];
128
+ array_walk ($ criteria , function ($ criterion ) use (&$ finalCriteria ){
129
+ $ finalCriteria [$ criterion ['id ' ]] = $ criterion ;
130
+ });
131
+
132
+ return $ finalCriteria ;
133
+ }
134
+
135
+ public static function getEvaluationsAvg (Registration $ registration ): float
136
+ {
137
+ $ app = App::i ();
138
+
139
+ $ evaluations = $ app ->repo (RegistrationEvaluation::class)->findBy (['registration ' => $ registration ]);
140
+ $ evaluationsAvg = 0 ;
141
+ foreach ($ evaluations as $ evaluation ) {
142
+ $ evaluationsAvg += (float ) $ evaluation ->result ;
143
+ }
144
+ $ evaluationsAvg /= count ($ evaluations ); // Necessário utilizar a média das avaliações para aplicar as políticas afirmativas
145
+
146
+ return $ evaluationsAvg ;
147
+ }
108
148
}
0 commit comments