From dd69e0bb5f40f9ef696fe5b16f2b89a69d10f940 Mon Sep 17 00:00:00 2001 From: Arend <19819601+Aarhunt@users.noreply.github.com> Date: Sun, 9 Jun 2024 15:52:41 +0200 Subject: [PATCH] Fix decision --- .idea/codeception.xml | 15 ++++ .idea/gewisdb.iml | 11 ++- module/Database/config/module.config.php | 8 +- module/Database/src/Form/Fieldset/Minutes.php | 58 -------------- module/Database/src/Form/Minutes.php | 1 + module/Database/src/Hydrator/Minutes.php | 2 +- .../src/Model/SubDecision/Minutes.php | 75 +++++++++---------- .../view/database/meeting/minutesform.phtml | 16 +++- module/Report/src/Service/Meeting.php | 2 +- 9 files changed, 81 insertions(+), 107 deletions(-) create mode 100644 .idea/codeception.xml delete mode 100644 module/Database/src/Form/Fieldset/Minutes.php diff --git a/.idea/codeception.xml b/.idea/codeception.xml new file mode 100644 index 000000000..9da375464 --- /dev/null +++ b/.idea/codeception.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gewisdb.iml b/.idea/gewisdb.iml index 94598f200..52b366c21 100644 --- a/.idea/gewisdb.iml +++ b/.idea/gewisdb.iml @@ -2,8 +2,15 @@ - - + + + + + + + + + diff --git a/module/Database/config/module.config.php b/module/Database/config/module.config.php index 6f1c94855..fd9c1067e 100644 --- a/module/Database/config/module.config.php +++ b/module/Database/config/module.config.php @@ -171,28 +171,28 @@ 'info' => [ 'type' => Segment::class, 'options' => [ - 'route' => '/info/:type/:number/:point/:decision/:sequence', + 'route' => '/info/:type/:number/:point/:decision/:subdecision', 'defaults' => ['action' => 'info'], 'constraints' => [ 'type' => 'ALV|BV|VV|Virt', 'number' => '[0-9]*', 'point' => '[0-9]*', 'decision' => '[0-9]*', - 'sequence' => '[0-9]*', + 'subdecision' => '[0-9]*', ], ], ], 'view' => [ 'type' => Segment::class, 'options' => [ - 'route' => '/:type/:number/:point/:decision/:sequence', + 'route' => '/:type/:number/:point/:decision/:subdecision', 'defaults' => ['action' => 'view'], 'constraints' => [ 'type' => 'ALV|BV|VV|Virt', 'number' => '[0-9]*', 'point' => '[0-9]*', 'decision' => '[0-9]*', - 'sequence' => '[0-9]*', + 'subdecision' => '[0-9]*', ], ], ], diff --git a/module/Database/src/Form/Fieldset/Minutes.php b/module/Database/src/Form/Fieldset/Minutes.php deleted file mode 100644 index 1f48812ac..000000000 --- a/module/Database/src/Form/Fieldset/Minutes.php +++ /dev/null @@ -1,58 +0,0 @@ -add([ - 'name' => 'meeting_type', - 'type' => Hidden::class, - ]); - - $this->add([ - 'name' => 'meeting_number', - 'type' => Hidden::class, - ]); - } - - /** - * Specification for input filters. - */ - public function getInputFilterSpecification(): array - { - return [ - 'meeting_type' => [ - 'required' => true, - 'validators' => [ - [ - 'name' => InArray::class, - 'options' => [ - 'haystack' => MeetingTypes::values(), - ], - ], - ], - ], - 'meeting_number' => [ - 'required' => true, - 'validators' => [ - [ - 'name' => Digits::class, - ], - ], - ], - ]; - } -} diff --git a/module/Database/src/Form/Minutes.php b/module/Database/src/Form/Minutes.php index 2dcc0bcb4..a6f9925c8 100644 --- a/module/Database/src/Form/Minutes.php +++ b/module/Database/src/Form/Minutes.php @@ -67,6 +67,7 @@ public function __construct( ], ]); + $minutes->setName('fmeeting'); $this->add($minutes); } diff --git a/module/Database/src/Hydrator/Minutes.php b/module/Database/src/Hydrator/Minutes.php index 92a2c1379..78c7e6636 100644 --- a/module/Database/src/Hydrator/Minutes.php +++ b/module/Database/src/Hydrator/Minutes.php @@ -25,7 +25,7 @@ public function hydrate( $subdecision = new MinutesModel(); - $subdecision->setMeeting($data['meeting']); + $subdecision->setTarget($data['fmeeting']); $subdecision->setMember($data['author']); $subdecision->setApproval(boolval($data['approve'])); diff --git a/module/Database/src/Model/SubDecision/Minutes.php b/module/Database/src/Model/SubDecision/Minutes.php index ef8dc464f..db09de96e 100644 --- a/module/Database/src/Model/SubDecision/Minutes.php +++ b/module/Database/src/Model/SubDecision/Minutes.php @@ -19,7 +19,7 @@ class Minutes extends SubDecision { /** - * Reference to the meetings + * Reference to the meeting. */ #[OneToOne( targetEntity: Meeting::class, @@ -50,7 +50,7 @@ class Minutes extends SubDecision /** * Get the target. */ - public function getMeeting(): Meeting + public function getTarget(): Meeting { return $this->meeting; } @@ -58,7 +58,7 @@ public function getMeeting(): Meeting /** * Set the target. */ - public function setMeeting(Meeting $meeting): void + public function setTarget(Meeting $meeting): void { $this->meeting = $meeting; } @@ -95,6 +95,16 @@ public function setChanges(bool $changes): void $this->changes = $changes; } + #[\Override] protected function getTemplate(): string + { + return 'De notulen van de %NUMBER%e %TYPE%%AUTHOR% worden%APPROVAL%%THANK%%CHANGES%.'; + } + + #[\Override] protected function getAlternativeTemplate(): string + { + return 'The minutes of the %NUMBER%th %TYPE%%AUTHOR% are%APPROVAL%%THANK%%CHANGES%.'; + } + /** * Get the content. * @@ -102,42 +112,31 @@ public function setChanges(bool $changes): void */ public function getContent(): string { - $target = $this->getMeeting(); - $template = $this->getTemplate(); - $template = str_replace('%TYPE%', $this->getMeetingType()->value, $template); - $template = str_replace('%NUMBER%', strval($this->getMeetingNumber()), $template); - - if (MeetingTypes::ALV === $target->getType()) { - if (null !== $this->getMember()) { - $template = str_replace('%AUTHOR%', ' door ' . $this->getMember()->getFullName(), $template); - $template = str_replace('%THANK%', '', $template); - } - } else { - $template = str_replace('%AUTHOR%', '', $template); - } - - if ($this->getApproval()) { - $template = str_replace('%APPROVAL%', ' goedgekeurd', $template); - if ($this->getChanges()) { - $template = str_replace('%CHANGES%', ' met genoemde wijzigingen en', $template); - } else { - $template = str_replace('%CHANGES%', '', $template); - } - $template = str_replace('%THANK%', ' met dank aan de notulist', $template); - } else { - $template = str_replace('%APPROVAL%', ' afgekeurd', $template); - $template = str_replace('%CHANGES%', '', $template); - $template = str_replace('%THANK%', '', $template); - } - - return $template; - } - /** - * Decision template - */ - protected function getTemplate(): string + $replacements = [ + '%TYPE%' => $this->getTarget()->getType()->value, + '%NUMBER%' => strval($this->getTarget()->getNumber()), + '%APPROVAL%' => $this->getApproval() ? ' goedgekeurd' : ' afgekeurd', + '%AUTHOR%' => MeetingTypes::BV === $this->getTarget()->getType() ? '' + : ' door ' . $this->getMember()->getFullName(), + '%CHANGES%' => $this->getApproval() && $this->getChanges() ? ' met genoemde wijzigingen' : '', + '%THANK%' => MeetingTypes::BV === $this->getTarget()->getType() ? ' met dank aan de notulist' : '', + ]; + + return $this->replaceContentPlaceholders($this->getTemplate(), $replacements); + } + #[\Override] public function getAlternativeContent(): string { - return 'De notulen van de %NUMBER%e %TYPE%%AUTHOR% worden %APPROVAL%%CHANGES%%THANK%.'; + $replacements = [ + '%TYPE%' => $this->getTarget()->getType()->value, + '%NUMBER%' => strval($this->getTarget()->getNumber()), + '%APPROVAL%' => $this->getApproval() ? ' approved' : ' disapproved', + '%AUTHOR%' => MeetingTypes::BV === $this->getTarget()->getType() ? '' + : ' by ' . $this->getMember()->getFullName(), + '%CHANGES%' => $this->getApproval() && $this->getChanges() ? ' with mentioned changes' : '', + '%THANK%' => MeetingTypes::BV === $this->getTarget()->getType() ? ' thanks to the minute taker' : '', + ]; + + return $this->replaceContentPlaceholders($this->getAlternativeTemplate(), $replacements); } } diff --git a/module/Database/view/database/meeting/minutesform.phtml b/module/Database/view/database/meeting/minutesform.phtml index c8b4cbe97..35dc4bdb7 100644 --- a/module/Database/view/database/meeting/minutesform.phtml +++ b/module/Database/view/database/meeting/minutesform.phtml @@ -21,6 +21,7 @@ use Laminas\View\Renderer\PhpRenderer; var ret = []; $.each(data.json, function (idx, meeting) { var result = meeting.meeting_type + ' ' + meeting.meeting_number; + ret.push({ label: result, value: result, @@ -32,6 +33,9 @@ use Laminas\View\Renderer\PhpRenderer; }); }, select: function(event, ui) { + let meeting = ui.item.id; + $('#minutes-meeting-type').val(meeting.meeting_type); + $('#minutes-meeting-number').val(meeting.meeting_number); } }); }); @@ -105,9 +109,15 @@ $element->setAttribute('placeholder', $this->translate('Meeting')); formElementErrors($element) ?> - +get('fmeeting'); +$minutesMeetingType = $fs->get('type'); +$minutesMeetingType->setAttribute('id', 'minutes-meeting-type'); +$minutesMeetingNum = $fs->get('number'); +$minutesMeetingNum->setAttribute('id', 'minutes-meeting-number'); +?> +formHidden($minutesMeetingType) ?> +formHidden($minutesMeetingNum) ?> get('author'); diff --git a/module/Report/src/Service/Meeting.php b/module/Report/src/Service/Meeting.php index a52dd76d5..792e0cf9d 100644 --- a/module/Report/src/Service/Meeting.php +++ b/module/Report/src/Service/Meeting.php @@ -247,7 +247,7 @@ public function generateSubDecision( $reportSubDecision->setOrganType($subdecision->getOrganType()); } } elseif ($subdecision instanceof DatabaseSubDecisionModel\Minutes) { - $ref = $subdecision->getMeeting(); + $ref = $subdecision->getTarget(); $meeting = $meetingRepo->find([ 'type' => $ref->getType(), 'number' => $ref->getNumber(),