Forbid building of a part, when the user is not allowed to withdraw parts stock

This commit is contained in:
Jan Böhmer 2023-01-22 23:40:10 +01:00
parent 2f42eb7cff
commit 78eacd3ec1
2 changed files with 14 additions and 1 deletions

View file

@ -92,6 +92,9 @@ class ProjectController extends AbstractController
$form->handleRequest($request); $form->handleRequest($request);
if ($form->isSubmitted()) { if ($form->isSubmitted()) {
if ($form->isValid()) { if ($form->isValid()) {
//Ensure that the user can withdraw stock from all parts
$this->denyAccessUnlessGranted('@parts_stock.withdraw');
//We have to do a flush already here, so that the newly created partLot gets an ID and can be logged to DB later. //We have to do a flush already here, so that the newly created partLot gets an ID and can be logged to DB later.
$entityManager->flush(); $entityManager->flush();
$buildHelper->doBuild($projectBuildRequest); $buildHelper->doBuild($projectBuildRequest);

View file

@ -34,9 +34,17 @@ use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;
class ProjectBuildType extends AbstractType implements DataMapperInterface class ProjectBuildType extends AbstractType implements DataMapperInterface
{ {
private Security $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public function configureOptions(OptionsResolver $resolver) public function configureOptions(OptionsResolver $resolver)
{ {
$resolver->setDefaults([ $resolver->setDefaults([
@ -50,7 +58,8 @@ class ProjectBuildType extends AbstractType implements DataMapperInterface
$builder->setDataMapper($this); $builder->setDataMapper($this);
$builder->add('submit', SubmitType::class, [ $builder->add('submit', SubmitType::class, [
'label' => 'project.build.btn_build' 'label' => 'project.build.btn_build',
'disabled' => !$this->security->isGranted('@parts_stock.withdraw'),
]); ]);
$builder->add('comment', TextType::class, [ $builder->add('comment', TextType::class, [
@ -89,6 +98,7 @@ class ProjectBuildType extends AbstractType implements DataMapperInterface
'label' => false, 'label' => false,
'measurement_unit' => $bomEntry->getPart()->getPartUnit(), 'measurement_unit' => $bomEntry->getPart()->getPartUnit(),
'max' => min($build_request->getNeededAmountForBOMEntry($bomEntry), $lot->getAmount()), 'max' => min($build_request->getNeededAmountForBOMEntry($bomEntry), $lot->getAmount()),
'disabled' => !$this->security->isGranted('withdraw', $lot),
]); ]);
} }
} }