use pick dynamic user type for reassigning + layout stuffs

This commit is contained in:
2022-05-02 15:37:23 +02:00
parent 0ec859e345
commit 8113fddcb2
7 changed files with 92 additions and 79 deletions

View File

@@ -12,6 +12,7 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Controller;
use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Form\Type\PickUserDynamicType;
use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Templating\Entity\UserRender;
@@ -31,7 +32,10 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Templating\EngineInterface;
use Symfony\Component\Validator\Constraints\NotEqualTo;
use Symfony\Component\Validator\Constraints\NotIdenticalTo;
use function is_int;
class ReassignAccompanyingPeriodController extends AbstractController
@@ -129,18 +133,17 @@ class ReassignAccompanyingPeriodController extends AbstractController
$this->em->flush();
// redirect to the first page
return $this->redirectToRoute('chill_course_list_reassign', [
'form' => ['user' => $userFrom->getId()],
]);
return $this->redirectToRoute('chill_course_list_reassign', $request->query->all());
}
}
return new Response(
$this->engine->render('@ChillPerson/AccompanyingPeriod/reassign_list.html.twig', [
'assignForm' => $assignForm->createView(),
'form' => $form->createView(),
'paginator' => $paginator,
'periods' => $periods,
'form' => $form->createView(),
'assignForm' => $assignForm->createView(),
'userFrom' => $userFrom,
])
);
}
@@ -154,15 +157,11 @@ class ReassignAccompanyingPeriodController extends AbstractController
'method' => 'get', 'csrf_protection' => false, ]);
$builder
->add('user', EntityType::class, [
'class' => User::class, // pickUserType or PickDyamicUserType
'choices' => $this->userRepository->findByActive(['username' => 'ASC']),
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
->add('user', PickUserDynamicType::class, [
'multiple' => false,
'label' => 'User',
'label' => 'reassign.Current user',
'required' => false,
'help' => 'reassign.Choose a user and click on "Filter" to apply',
]);
return $builder->getForm();
@@ -173,26 +172,23 @@ class ReassignAccompanyingPeriodController extends AbstractController
$defaultData = [
'userFrom' => $userFrom,
'periods' => json_encode($periodIds),
'assignTo' => null,
];
$builder = $this->formFactory->createBuilder(FormType::class, $defaultData);
$builder = $this->formFactory->createNamedBuilder('reassign', FormType::class, $defaultData);
if (null !== $userFrom) {
$constraints = [new NotIdenticalTo(['value' => $userFrom])];
}
$builder
->add('periods', HiddenType::class)
->add('userFrom', HiddenType::class)
->add('userTo', EntityType::class, [
'class' => User::class, // PickUserType
'choices' => $this->userRepository->findByActive(['username' => 'ASC']),
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'placeholder' => 'Choose a user to reassign to',
->add('userTo', PickUserDynamicType::class, [
'multiple' => false,
'label' => 'User',
'label' => 'reassign.Next user',
'required' => true,
// add a constraint: userFrom is not equal to userTo
//'constraints' => NotEqualToh
'help' => 'reassign.All periods on this list will be reassigned to this user, excepted the one you manually reassigned before',
'constraints' => $constraints ?? [],
]);
$builder->get('userFrom')->addModelTransformer(new CallbackTransformer(

View File

@@ -4,10 +4,12 @@
{% block js %}
{{ encore_entry_script_tags('mod_set_referrer') }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_set_referrer') }}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% macro period_meta(period) %}
@@ -38,61 +40,66 @@
{% import _self as m %}
{% block content %}
<div class="col-10">
<div class="row col-10">
<h1>{{ block('title') }}</h1>
{{ form_start(form) }}
<div class="row filter-box">
<div class="col-md-6">
{{ form_start(form) }}
{{ form_label(form.user ) }}
{{ form_widget(form.user, {'attr': {'class': 'select2'}}) }}
</div>
</div>
<ul class="record_actions">
<li>
<button type="submit" class="btn btn-save change-icon">
<i class="fa fa-filter"></i> {{ 'Filter'|trans }}
</button>
</li>
</ul>
{{ form_end(form) }}
{% if form.user.vars.value is empty %}
<p class="chill-no-data-statement">{{ 'period_by_user_list.Pick a user'|trans }}</p>
{% elseif periods|length == 0 and form.user.vars.value is not empty %}
<p class="chill-no-data-statement">{{ 'period_by_user_list.Any course or no authorization to see them'|trans }}</p>
{% else %}
<h3>{{ 'Attribute parcours in this list to the following user,'|trans }}</h3>
<p><span class="badge rounded-pill bg-primary">{{ paginator.totalItems }}</span> parcours à réassigner (calculé ce jour à {{ null|format_time('medium') }})</p>
{{ form_start(assignForm) }}
<div class="row filter-box">
<div class="col-md-6">
{{ form_label(assignForm.userTo ) }}
{{ form_widget(assignForm.userTo, {'attr': {'class': 'select2'}}) }}
</div>
</div>
<ul class="record_actions">
<li>
<button type="submit" class="btn btn-save change-icon">
{{ 'Reassign'|trans }}
<button type="submit" class="btn btn-misc">
<i class="fa fa-filter"></i> {{ 'Filter'|trans }}
</button>
</li>
</ul>
{{ form_end(assignForm) }}
<div class="flex-table">
{% for period in periods %}
{% include '@ChillPerson/AccompanyingPeriod/_list_item.html.twig' with {'period': period,
'recordAction': m.period_actions(period), 'itemMeta': m.period_meta(period) } %}
{% endfor %}
{{ form_end(form) }}
</div>
<div class="col-md-6">
{% if userFrom is not null %}
<div>
{{ form_start(assignForm) }}
{{ form_label(assignForm.userTo ) }}
{{ form_widget(assignForm.userTo, {'attr': {'class': 'select2'}}) }}
</div>
<ul class="record_actions">
<li>
<button type="submit" class="btn btn-update change-icon">
{{ 'reassign.Reassign'|trans }}
</button>
</li>
</ul>
{{ form_end(assignForm) }}
{% else %}
<div class="alert alert-info">{{ 'reassign.List periods to be able to reassign them'|trans }}</div>
{% endif %}
</div>
</div>
{% if userFrom is not null %}
<p><span class="badge rounded-pill bg-primary">{{ paginator.totalItems }}</span> parcours à réassigner (calculé ce jour à {{ null|format_time('medium') }})</p>
{% endif %}
{% if paginator is defined %}
{{ chill_pagination(paginator) }}
{% endif %}
<div class="flex-table">
{% for period in periods %}
{% include '@ChillPerson/AccompanyingPeriod/_list_item.html.twig' with {'period': period,
'recordAction': m.period_actions(period), 'itemMeta': m.period_meta(period) } %}
{% else %}
{% if userFrom is same as(null) %}
<p class="chill-no-data-statement">{{ 'period_by_user_list.Pick a user'|trans }}</p>
{% else %}
<p class="chill-no-data-statement">{{ 'period_by_user_list.Any course or no authorization to see them'|trans }}</p>
{% endif %}
{% endfor %}
</div>
{% if paginator is defined %}
{{ chill_pagination(paginator) }}
{% endif %}
</div>
{% endblock %}

View File

@@ -596,3 +596,11 @@ period_by_user_list:
Period by user: Parcours d'accompagnement par utilisateur
Pick a user: Choisissez un utilisateur pour obtenir la liste de ses parcours
Any course or no authorization to see them: Aucun parcours pour ce référent, ou aucun droit pour visualiser les parcours de ce référent.
reassign:
Current user: Parcours par référent
Next user: Nouveau référent
Choose a user and click on "Filter" to apply: Choisissez un utilisateur et cliquez sur "Filtrer" pour visualiser ses parcours
All periods on this list will be reassigned to this user, excepted the one you manually reassigned before: Tous les parcours visibles sur cette page seront assignés à cet utilisateur, sauf ceux que vous aurez assigné à un utilisateur manuellement.
Reassign: Assigner le référent
List periods to be able to reassign them: Choisissez un utilisateur et cliquez sur "Filtrer" pour visualiser ses parcours. Vous pourrez ensuite les réassigner.