Skip to content

Commit 48eb0d2

Browse files
authored
Merge pull request #28 from secultce/develop
Adição de critérios e políticas afirmativas ao exibir pareceres
2 parents 8a615c2 + 1162132 commit 48eb0d2

File tree

4 files changed

+206
-96
lines changed

4 files changed

+206
-96
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ Todas as mudanças relevantes serão documentadas nesse arquivo.
33

44
O formato é baseado no [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0), e esse projeto adere ao [Semantic Versionning](https://semver.org/spec/v2.0.0.html).
55

6+
## [1.2.1] - 2024-09-13
7+
### Adicionado
8+
- Adicionada seção que mostra a nota final com as políticas afirmativas distinguidas.
9+
- Adicionadas notas individuais dos critérios a avaliação.
10+
611
## [1.2.0] - 2024-08-19
712
### Adicionado
813
- Agora as avaliações não iniciadas também são listadas para o administrador.

Controllers/OpinionManagement.php

+54-14
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,14 @@
33
namespace OpinionManagement\Controllers;
44

55
use Doctrine\Common\Collections\Criteria;
6+
use EvaluationMethodTechnical\Plugin as EvaluationTechnicalPlugin;
67
use MapasCulturais\Controller,
78
MapasCulturais\App;
9+
use MapasCulturais\Entities\Opportunity;
10+
use MapasCulturais\Entities\EvaluationMethodConfigurationMeta;
811
use MapasCulturais\Entities\Notification;
12+
use MapasCulturais\Entities\Registration;
13+
use MapasCulturais\Entities\RegistrationEvaluation;
914
use OpinionManagement\Helpers\EvaluationList;
1015

1116
class OpinionManagement extends Controller
@@ -32,14 +37,20 @@ public function GET_opinions(): void
3237
$this->requireAuthentication();
3338

3439
/**
35-
* @var $registration \MapasCulturais\Entities\Registration
40+
* @var $registration Registration
3641
*/
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+
3947
$opinions = new EvaluationList($registration);
4048
$this->json([
49+
'appliedAffirmativePolicy' => $registration->appliedAffirmativePolicy ?? false,
4150
'evaluationMethod' => (string) $registration->opportunity->evaluationMethodConfiguration->type,
51+
'criteria' => self::getCriteriaMeta($registration->opportunity),
4252
'opinions' => $opinions,
53+
'registration' => $registration,
4354
]);
4455
return;
4556
}
@@ -60,10 +71,10 @@ public function POST_publishOpinions(): void
6071
return;
6172
}
6273

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) {
6778
$this->errorJson(['error' => new \PDOException('Cannot save this data')], 500);
6879
return;
6980
}
@@ -92,17 +103,46 @@ public static function notificateUsers(int $opportunityId, bool $verifyPublishin
92103
foreach ($registrations as $i => $registration) {
93104
$notification = new Notification();
94105
$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+
);
102112
$notification->save(true);
103113
$app->log->debug("Notificação ".($i+1)."/$count enviada para o usuário {$registration->owner->user->id} ({$registration->owner->name})");
104114
}
105115

106116
return true;
107117
}
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+
}
108148
}

assets/OpinionManagement/css/opinionManagement.css

+4
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ div:has(>.showOpinion) {
9090
display: initial;
9191
}
9292

93+
.opinion .criteria-fields {
94+
text-align: justify;
95+
}
96+
9397
.opinion .chk-collapse {display: none}
9498

9599
.opinion .evaluation-title h3,

0 commit comments

Comments
 (0)