new user is assigned, but crash on flush()

This commit is contained in:
Julie Lenaerts 2022-04-08 12:13:19 +02:00
parent 2646fa5b65
commit 084d77c8f4
2 changed files with 37 additions and 22 deletions

View File

@ -87,53 +87,62 @@ class ReassignAccompanyingPeriodController extends AbstractController
$form->handleRequest($request); $form->handleRequest($request);
$total = $this->accompanyingPeriodACLAwareRepository->countByUserOpenedAccompanyingPeriod( $userFrom = $form['user']->getData();
$form['user']->getData()
); $total = $this->accompanyingPeriodACLAwareRepository->countByUserOpenedAccompanyingPeriod($userFrom);
$paginator = $this->paginatorFactory->create($total); $paginator = $this->paginatorFactory->create($total);
$periods = $this->accompanyingPeriodACLAwareRepository $periods = $this->accompanyingPeriodACLAwareRepository
->findByUserOpenedAccompanyingPeriod( ->findByUserOpenedAccompanyingPeriod(
$form['user']->getData(), $userFrom,
['openingDate' => 'ASC'], ['openingDate' => 'ASC'],
$paginator->getItemsPerPage(), $paginator->getItemsPerPage(),
$paginator->getCurrentPageFirstItemNumber() $paginator->getCurrentPageFirstItemNumber()
); );
// Create an array of period id's to pass into assignForm hiddenfield
$periodIds = []; $periodIds = [];
foreach ($periods as $period) { foreach ($periods as $period) {
$periodIds[] = $period->getId(); $periodIds[] = $period->getId();
} }
$assignForm = $this->buildReassignForm($periodIds); $userFromId = null !== $userFrom ? $userFrom->getId() : null;
$assignForm = $this->buildReassignForm($periodIds, $userFromId);
$assignForm->handleRequest($request); $assignForm->handleRequest($request);
if ($assignForm->isSubmitted()) { if ($assignForm->isSubmitted()) {
$userFromId = (int) $assignForm->get('userFrom')->getData();
$assignPeriodIds = json_decode($assignForm->get('periods')->getData(), true); $assignPeriodIds = json_decode($assignForm->get('periods')->getData(), true);
$userAssign = $assignForm->get('assignUser')->getData(); $userTo = $assignForm->get('userTo')->getData();
foreach($assignPeriodIds as $assignPeriodId) { $userFrom = $this->userRepository->find($userFromId);
$assignPeriod = $this->courseRepository->find($assignPeriodId);
$assignPeriod->setUser($userAssign);
$this->em->persist($assignPeriod);
}
$this->em->flush();
$remainingPeriods = $this->accompanyingPeriodACLAwareRepository $remainingPeriods = $this->accompanyingPeriodACLAwareRepository
->findByUserOpenedAccompanyingPeriod( ->findByUserOpenedAccompanyingPeriod(
$form['user']->getData(), $userFrom,
['openingDate' => 'ASC'], ['openingDate' => 'ASC'],
$paginator->getItemsPerPage(), $paginator->getItemsPerPage(),
$paginator->getCurrentPageFirstItemNumber() $paginator->getCurrentPageFirstItemNumber()
); );
foreach($remainingPeriods as $period) {
$id = $period->getId();
if (in_array($id, $assignPeriodIds)) {
$period->setUser($userTo);
$this->em->persist($period);
}
}
$this->em->flush();
return new Response( return new Response(
$this->engine->render('@ChillPerson/AccompanyingPeriod/reassign_list.html.twig', [ $this->engine->render('@ChillPerson/AccompanyingPeriod/reassign_list.html.twig', [
'paginator' => $paginator, 'paginator' => $paginator,
'periods' => $remainingPeriods,
'form' => $form->createView(), 'form' => $form->createView(),
'assignForm' => $assignForm->createView() 'assignForm' => $assignForm->createView()
]) ])
@ -174,11 +183,12 @@ class ReassignAccompanyingPeriodController extends AbstractController
return $builder->getForm(); return $builder->getForm();
} }
private function buildReassignForm(array $periodIds): FormInterface private function buildReassignForm(array $periodIds, ?int $userFromId): FormInterface
{ {
$defaultData = [ $defaultData = [
'user' => null, 'userFrom' => $userFromId,
'periods' => [] 'periods' => [],
'assignTo' => null
]; ];
$periodsJson = json_encode($periodIds); $periodsJson = json_encode($periodIds);
@ -189,7 +199,10 @@ class ReassignAccompanyingPeriodController extends AbstractController
->add('periods', HiddenType::class, [ ->add('periods', HiddenType::class, [
'data' => $periodsJson, 'data' => $periodsJson,
]) ])
->add('assignUser', EntityType::class, [ ->add('userFrom', HiddenType::class, [
'data' => $userFromId
])
->add('userTo', EntityType::class, [
'class' => User::class, 'class' => User::class,
'choices' => $this->userRepository->findByActive(['username' => 'ASC']), 'choices' => $this->userRepository->findByActive(['username' => 'ASC']),
'choice_label' => function (User $u) { 'choice_label' => function (User $u) {

View File

@ -70,8 +70,8 @@
{{ form_start(assignForm) }} {{ form_start(assignForm) }}
<div class="row filter-box"> <div class="row filter-box">
<div class="col-md-6"> <div class="col-md-6">
{{ form_label(assignForm.assignUser ) }} {{ form_label(assignForm.userTo ) }}
{{ form_widget(assignForm.assignUser, {'attr': {'class': 'select2'}}) }} {{ form_widget(assignForm.userTo, {'attr': {'class': 'select2'}}) }}
</div> </div>
</div> </div>
<ul class="record_actions"> <ul class="record_actions">
@ -90,7 +90,9 @@
</div> </div>
{% endif %} {% endif %}
{% if paginator is defined %}
{{ chill_pagination(paginator) }} {{ chill_pagination(paginator) }}
{% endif %}
</div> </div>
{% endblock %} {% endblock %}