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

View File

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