Skip to content

Commit e99f56a

Browse files
petitalbraphodn
authored andcommitted
Déplacer la notion de volant du beneficiary vers le membership (#918)
* Move close/reopen button at the top of the page * Change flying status from beneficiary to membership
1 parent dc7f8bd commit e99f56a

18 files changed

+185
-162
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Application\Migrations;
6+
7+
use Doctrine\DBAL\Schema\Schema;
8+
use Doctrine\Migrations\AbstractMigration;
9+
10+
/**
11+
* Auto-generated Migration: Please modify to your needs!
12+
*/
13+
final class Version20230729100654 extends AbstractMigration
14+
{
15+
public function getDescription() : string
16+
{
17+
return '';
18+
}
19+
20+
public function up(Schema $schema) : void
21+
{
22+
// this up() migration is auto-generated, please modify it to your needs
23+
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
24+
25+
$this->addSql('ALTER TABLE membership ADD flying TINYINT(1) DEFAULT \'0\' NOT NULL');
26+
$this->addSql('UPDATE membership LEFT OUTER JOIN beneficiary ON beneficiary.id = membership.main_beneficiary_id SET membership.flying=beneficiary.flying WHERE beneficiary.flying = 1');
27+
$this->addSql('ALTER TABLE beneficiary DROP flying');
28+
}
29+
30+
public function down(Schema $schema) : void
31+
{
32+
// this down() migration is auto-generated, please modify it to your needs
33+
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
34+
35+
$this->addSql('ALTER TABLE beneficiary ADD flying TINYINT(1) DEFAULT \'0\' NOT NULL');
36+
$this->addSql('ALTER TABLE membership DROP flying');
37+
}
38+
}

app/Resources/views/beneficiary/_partial/info.html.twig

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,6 @@
6161
{% endif %})
6262
{% endif %}
6363
</div>
64-
{% if use_fly_and_fixed %}
65-
<div class="col s12">
66-
<i class="material-icons tiny">accessibility</i>
67-
{% if beneficiary.flying %}
68-
<div class="chip green-text">Equipe volante</div>
69-
{% else %}
70-
<div class="chip green-text">Equipe fixe</div>
71-
{% endif %}
72-
</div>
73-
{% endif %}
7464
{% if beneficiary.formations | length %}
7565
<div class="col s12">
7666
<i class="material-icons tiny">assignment_ind</i>

app/Resources/views/member/show.html.twig

Lines changed: 47 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -219,72 +219,6 @@
219219
</li>
220220
{% endif %}
221221

222-
<!-- Fermer le compte -->
223-
{% if is_granted("ROLE_USER_MANAGER") and is_granted("close",member) %}
224-
<li id="close">
225-
<div class="collapsible-header {% if frontend_cookie and frontend_cookie.user_show is defined and frontend_cookie.user_show.close_open is defined and frontend_cookie.user_show.close_open %}active{% endif %}">
226-
<i class="material-icons">close</i>{% if member.withdrawn %}Ré-ouvrir le compte{% else %}Fermer le compte{% endif %}
227-
</div>
228-
<div class="collapsible-body white">
229-
{% if not member.withdrawn %}
230-
<a href="#close-member-confirmation-modal" class="modal-trigger waves-effect waves-light btn red">
231-
<i class="material-icons left">close</i>Fermer le compte
232-
</a>
233-
{{ form_start(close_form) }}
234-
<div id="close-member-confirmation-modal" class="modal">
235-
<div class="modal-content">
236-
<h5>
237-
<i class="material-icons left small">remove_circle_outline</i>Fermeture du compte membre
238-
</h5>
239-
<p>Attention, vous êtes sur le point de fermer le compte du membre.</p>
240-
<ul>
241-
{% if use_fly_and_fixed %}
242-
<li>Ce membre a {{ period_positions | length }} créneau{% if period_positions | length > 1 %}x{% endif %} fixe.</li>
243-
{% endif %}
244-
<li>Ce membre a {{ in_progress_and_upcoming_shifts | length }} créneau{% if in_progress_and_upcoming_shifts | length > 1 %}x{% endif %} réservé à venir.</li>
245-
</ul>
246-
</div>
247-
<div class="modal-footer">
248-
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat green-text">Retour à la raison</a>
249-
<button type="submit" class="btn waves-effect waves-light orange">
250-
<i class="material-icons left">check</i>Je sais ce que je fais !
251-
</button>
252-
</div>
253-
</div>
254-
{{ form_end(close_form) }}
255-
{% else %}
256-
{% if member.withdrawnDate %}
257-
<p>
258-
Compte fermé le <i>{{ member.withdrawnDate | date_fr }}</i>
259-
{% if member.withdrawnBy %}
260-
par {% include "admin/member/_partial/member_or_user_link.html.twig" with { user: member.withdrawnBy, target_blank: true } %}.
261-
{% endif %}
262-
</p>
263-
{% endif %}
264-
<a href="#open-member-confirmation-modal" class="modal-trigger waves-effect waves-light btn teal">
265-
<i class="material-icons left">check</i>Ré-ouvrir le compte
266-
</a>
267-
{{ form_start(open_form) }}
268-
<div id="open-member-confirmation-modal" class="modal">
269-
<div class="modal-content">
270-
<h5>
271-
<i class="material-icons left small">info_outline</i>Ré-ouverture du compte membre
272-
</h5>
273-
<p>Attention, vous êtes sur le point de ré-ouvrir le compte du membre.</p>
274-
</div>
275-
<div class="modal-footer">
276-
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat green-text">Retour à la raison</a>
277-
<button type="submit" class="btn waves-effect waves-light orange">
278-
<i class="material-icons left">check</i>Je sais ce que je fais !
279-
</button>
280-
</div>
281-
</div>
282-
{{ form_end(open_form) }}
283-
{% endif %}
284-
</div>
285-
</li>
286-
{% endif %}
287-
288222
<!-- Rôles -->
289223
{% if is_granted("ROLE_ADMIN") %}
290224
<li id="super">
@@ -346,6 +280,53 @@
346280
</li>
347281
{% endif %}
348282
</ul>
283+
284+
<div id="withdrawn-member-confirmation-modal" class="modal">
285+
<div class="modal-content">
286+
<h5>
287+
<i class="material-icons left small">remove_circle_outline</i>{% if member.withdrawn %}Ré-ouverture{% else %}Fermeture{% endif %} du compte membre
288+
</h5>
289+
<p>Attention, vous êtes sur le point de {% if member.withdrawn %}ré-ouvrir{% else %}fermer{% endif %} le compte du membre.</p>
290+
{% if not member.withdrawn %}
291+
<ul>
292+
{% if use_fly_and_fixed %}
293+
<li>Ce membre a {{ period_positions | length }} créneau{% if period_positions | length > 1 %}x{% endif %} fixe.</li>
294+
{% endif %}
295+
<li>Ce membre a {{ in_progress_and_upcoming_shifts | length }} créneau{% if in_progress_and_upcoming_shifts | length > 1 %}x{% endif %} réservé à venir.</li>
296+
</ul>
297+
{% endif %}
298+
</div>
299+
<div class="modal-footer">
300+
{{ form_start(withdrawn_form) }}
301+
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat green-text">Retour à la raison</a>
302+
<button type="submit" class="btn waves-effect waves-light orange">
303+
<i class="material-icons left">check</i>Je sais ce que je fais !
304+
</button>
305+
{{ form_end(withdrawn_form) }}
306+
</div>
307+
</div>
308+
309+
<div id="flying-member-confirmation-modal" class="modal">
310+
<div class="modal-content">
311+
<h5>
312+
<i class="material-icons left small">remove_circle_outline</i>Passage du compte en {% if member.flying %}fixe{% else %}volant{% endif %}
313+
</h5>
314+
<p>Attention, vous êtes sur le point de passer le compte du membre en {% if member.flying %}fixe{% else %}volant{% endif %}.</p>
315+
{% if not member.flying %}
316+
<ul>
317+
<li>Ce membre a {{ period_positions | length }} créneau{% if period_positions | length > 1 %}x{% endif %} fixe.</li>
318+
</ul>
319+
{% endif %}
320+
</div>
321+
<div class="modal-footer">
322+
{{ form_start(flying_form) }}
323+
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat green-text">Retour à la raison</a>
324+
<button type="submit" class="btn waves-effect waves-light orange">
325+
<i class="material-icons left">check</i>OK
326+
</button>
327+
{{ form_end(flying_form) }}
328+
</div>
329+
</div>
349330
{% endblock %}
350331

351332
{% block javascripts %}

app/Resources/views/period/_partial/position_shifter_display.html.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
Réservé
1818
</div>
1919
{% else %}
20-
{% set warning = beneficiary_service.hasWarningStatus(shifter) %}
20+
{% set warning = membership_service.hasWarningStatus(shifter.membership) %}
2121
<a href="{{ path('member_show', { 'member_number': shifter.membership.memberNumber }) }}" target="_blank"
2222
class="black-text tooltipped editable-box truncate" data-position="bottom"
2323
data-tooltip="{{ shifter | print_with_number_and_status_icon | raw }} &#013;&#010; ({{ formation }})">

src/AppBundle/Command/ImportUsersCommand.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
168168
$dispatcher->dispatch(BeneficiaryCreatedEvent::NAME, new BeneficiaryCreatedEvent($beneficiary));
169169

170170
$beneficiary->setEmail($email);
171-
$beneficiary->setFlying(false);
172171

173172
$em->persist($beneficiary);
174173
}

src/AppBundle/Controller/MailController.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ public function sendAction(Request $request, \Swift_Mailer $mailer)
119119
$user = $em->getRepository(User::class)->findOneBy(array('email' => $nonMember));
120120
if (is_object($user)) {
121121
$fake_beneficiary = new Beneficiary();
122-
$fake_beneficiary->setFlying(false);
123122
$fake_beneficiary->setUser($user);
124123
$fake_beneficiary->setFirstname($user->getUsername());
125124
$fake_beneficiary->setLastname(' ');

src/AppBundle/Controller/MembershipController.php

Lines changed: 63 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ public function showAction(Membership $member)
9090
$freezeForm = $this->createFreezeForm($member);
9191
$unfreezeForm = $this->createUnfreezeForm($member);
9292
$freezeChangeForm = $this->createFreezeChangeForm($member);
93-
$closeForm = $this->createCloseForm($member);
94-
$openForm = $this->createOpenForm($member);
93+
$flyingForm = $this->createFlyingForm($member);
94+
$withdrawnForm = $this->createWithdrawnForm($member);
9595
$deleteForm = $this->createDeleteForm($member);
9696

9797
$note = new Note();
@@ -197,8 +197,8 @@ public function showAction(Membership $member)
197197
'freeze_form' => $freezeForm->createView(),
198198
'unfreeze_form' => $unfreezeForm->createView(),
199199
'freeze_change_form' => $freezeChangeForm->createView(),
200-
'close_form' => $closeForm->createView(),
201-
'open_form' => $openForm->createView(),
200+
'flying_form' => $flyingForm->createView(),
201+
'withdrawn_form' => $withdrawnForm->createView(),
202202
'delete_form' => $deleteForm->createView(),
203203
'time_log_new_form' => $timeLogNewForm->createView(),
204204
'time_log_delete_forms' => $timeLogDeleteForms,
@@ -501,61 +501,94 @@ public function activeUserAccountAction(Request $request)
501501

502502

503503
/**
504-
* Close member
504+
* Close/Reopen member
505505
*
506-
* @Route("/{id}/close", name="member_close", methods={"POST"})
506+
* @Route("/{id}/withdrawn", name="member_withdrawn", methods={"POST"})
507507
* @param Request $request
508508
* @param Membership $member
509509
* @return \Symfony\Component\HttpFoundation\RedirectResponse
510510
*/
511-
public function closeAction(Request $request, Membership $member)
511+
public function withdrawnAction(Request $request, Membership $member)
512512
{
513-
$this->denyAccessUnlessGranted('close', $member);
514513

515514
$current_user = $this->get('security.token_storage')->getToken()->getUser();
516515
$session = new Session();
517516

518-
$form = $this->createCloseForm($member);
517+
$form = $this->createWithdrawnForm($member);
519518
$form->handleRequest($request);
520519

521520
if ($form->isSubmitted() && $form->isValid()) {
521+
$withdrawn = $form->get("withdrawn")->getData();
522+
if ($withdrawn) {
523+
$this->denyAccessUnlessGranted('close', $member);
524+
if ($member->isWithdrawn()) {
525+
$session->getFlashBag()->add('error', 'Ce compte est déjà fermé');
526+
return $this->redirectToShow($member);
527+
}
528+
$member->setWithdrawnDate(new \DateTime('now'));
529+
$member->setWithdrawnBy($current_user);
530+
} else {
531+
$this->denyAccessUnlessGranted('open', $member);
532+
if (!$member->isWithdrawn()) {
533+
$session->getFlashBag()->add('error', 'Ce compte est déjà ouvert');
534+
return $this->redirectToShow($member);
535+
}
536+
}
537+
$member->setWithdrawn($withdrawn);
522538
$em = $this->getDoctrine()->getManager();
523-
$member->setWithdrawn(true);
524-
$member->setWithdrawnDate(new \DateTime('now'));
525-
$member->setWithdrawnBy($current_user);
526539
$em->persist($member);
527540
$em->flush();
528541

529-
$session->getFlashBag()->add('success', 'Compte fermé !');
542+
if ($withdrawn) {
543+
$session->getFlashBag()->add('success', 'Compte fermé !');
544+
} else {
545+
$session->getFlashBag()->add('success', 'Compte ré-ouvert !');
546+
}
530547
}
531548

532549
return $this->redirectToShow($member);
533550
}
534551

535552
/**
536-
* Open member
553+
* Change flying status member
537554
*
538-
* @Route("/{id}/open", name="member_open", methods={"POST"})
555+
* @Route("/{id}/flying", name="member_flying", methods={"POST"})
539556
* @param Request $request
540557
* @param Membership $member
541558
* @return \Symfony\Component\HttpFoundation\RedirectResponse
542559
*/
543-
public function openAction(Request $request, Membership $member)
560+
public function flyingAction(Request $request, Membership $member)
544561
{
545-
$this->denyAccessUnlessGranted('open', $member);
562+
$this->denyAccessUnlessGranted('flying', $member);
563+
$current_user = $this->get('security.token_storage')->getToken()->getUser();
564+
$session = new Session();
546565

547-
$form = $this->createOpenForm($member);
566+
$form = $this->createFlyingForm($member);
548567
$form->handleRequest($request);
549568

550569
if ($form->isSubmitted() && $form->isValid()) {
551-
$session = new Session();
570+
$flying = $form->get("flying")->getData();
571+
if ($flying) {
572+
if ($member->isFlying()) {
573+
$session->getFlashBag()->add('error', 'Ce compte est déjà volant');
574+
return $this->redirectToShow($member);
575+
}
576+
} else {
577+
if (!$member->isFlying()) {
578+
$session->getFlashBag()->add('error', 'Ce compte est déjà fixe');
579+
return $this->redirectToShow($member);
580+
}
581+
}
582+
$member->setFlying($flying);
552583
$em = $this->getDoctrine()->getManager();
553-
554-
$member->setWithdrawn(false);
555584
$em->persist($member);
556585
$em->flush();
557586

558-
$session->getFlashBag()->add('success', 'Compte ré-ouvert !');
587+
if ($flying) {
588+
$session->getFlashBag()->add('success', 'Le compte est volant !');
589+
} else {
590+
$session->getFlashBag()->add('success', 'Le compte est fixe !');
591+
}
559592
}
560593

561594
return $this->redirectToShow($member);
@@ -732,7 +765,6 @@ public function newAction(Request $request)
732765
$user->setEmail($a_beneficiary->getEmail());
733766
$beneficiary = new Beneficiary();
734767
$beneficiary->setUser($user);
735-
$beneficiary->setFlying(false);
736768
$member->setMainBeneficiary($beneficiary);
737769
}
738770

@@ -880,7 +912,6 @@ public function addBeneficiaryAction(Request $request)
880912

881913
$beneficiary = new Beneficiary();
882914
$beneficiary->setUser(new User());
883-
$beneficiary->setFlying(false);
884915
$beneficiary->setEmail($a_beneficiary->getEmail());
885916

886917
$form->get('beneficiary')->setData($beneficiary);
@@ -1118,29 +1149,31 @@ private function createFreezeChangeForm(Membership $member)
11181149
}
11191150

11201151
/**
1121-
* Creates a form to close a member entity.
1152+
* Creates a form to close or open a member entity.
11221153
*
11231154
* @param Membership $member
11241155
* @return \Symfony\Component\Form\FormInterface
11251156
*/
1126-
private function createCloseForm(Membership $member)
1157+
private function createWithdrawnForm(Membership $member)
11271158
{
11281159
return $this->createFormBuilder()
1129-
->setAction($this->generateUrl('member_close', array('id' => $member->getId())))
1160+
->setAction($this->generateUrl('member_withdrawn', array('id' => $member->getId())))
1161+
->add('withdrawn', HiddenType::class, ['data' => $member->isWithdrawn() ? 0 : 1])
11301162
->setMethod('POST')
11311163
->getForm();
11321164
}
11331165

11341166
/**
1135-
* Creates a form to open a member entity.
1167+
* Creates a form to set flying for a member entity.
11361168
*
11371169
* @param Membership $member
11381170
* @return \Symfony\Component\Form\FormInterface
11391171
*/
1140-
private function createOpenForm(Membership $member)
1172+
private function createFlyingForm(Membership $member)
11411173
{
11421174
return $this->createFormBuilder()
1143-
->setAction($this->generateUrl('member_open', array('id' => $member->getId())))
1175+
->setAction($this->generateUrl('member_flying', array('id' => $member->getId())))
1176+
->add('flying', HiddenType::class, ['data' => $member->isFlying() ? 0 : 1])
11441177
->setMethod('POST')
11451178
->getForm();
11461179
}

0 commit comments

Comments
 (0)