improves create a person with address

* validation: must have an address when 'create a form' is checked;
* minor improvements
This commit is contained in:
2022-05-06 11:43:05 +02:00
parent 64432bb08a
commit 6abbf9bf21
6 changed files with 56 additions and 30 deletions

View File

@@ -11,6 +11,7 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Form;
use Chill\MainBundle\Entity\Address;
use Chill\MainBundle\Form\Event\CustomizeFormEvent;
use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\MainBundle\Form\Type\ChillPhoneNumberType;
@@ -30,6 +31,8 @@ use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
final class CreationPersonType extends AbstractType
{
@@ -84,10 +87,12 @@ final class CreationPersonType extends AbstractType
'label' => 'Create a household and add an address',
'required' => false,
'mapped' => false,
'help' => 'A new household will be created. The person will be member of this household.',
])
->add('address', PickAddressType::class, [
'required' => false,
'mapped' => false,
'label' => false,
]);
if ($this->askCenters) {
@@ -114,6 +119,9 @@ final class CreationPersonType extends AbstractType
{
$resolver->setDefaults([
'data_class' => Person::class,
'constraints' => [
new Callback([$this, 'validateCheckedAddress']),
],
]);
}
@@ -124,4 +132,18 @@ final class CreationPersonType extends AbstractType
{
return self::NAME;
}
public function validateCheckedAddress($data, ExecutionContextInterface $context, $payload): void
{
/** @var bool $addressFrom */
$addressFrom = $context->getObject()->get('addressForm')->getData();
/** @var ?Address $address */
$address = $context->getObject()->get('address')->getData();
if ($addressFrom && null === $address) {
$context->buildViolation('person_creation.If you want to create an household, an address is required')
->atPath('addressForm')
->addViolation();
}
}
}