add homeless to addresses

This commit is contained in:
2020-05-01 15:49:18 +02:00
parent 5f282ecedb
commit fd9511e745
10 changed files with 163 additions and 18 deletions

View File

@@ -60,6 +60,9 @@ class AddressDataMapper implements DataMapperInterface
case 'validFrom':
$form->setData($address->getValidFrom());
break;
case 'isNoAddress':
$form->setData($address->isNoAddress());
break;
default:
break;
}
@@ -77,18 +80,25 @@ class AddressDataMapper implements DataMapperInterface
$address = new Address();
}
$isNoAddress = false;
foreach ($forms as $key => $form) {
if ($key === 'isNoAddress') {
$isNoAddress = $form->get('isNoAddress')->getData();
}
}
foreach ($forms as $key => $form) {
/** @var FormInterface $form */
switch($key) {
case 'postCode':
if (!$form->getData() instanceof PostalCode) {
if (!$form->getData() instanceof PostalCode && !$isNoAddress) {
$address = null;
return;
}
$address->setPostcode($form->getData());
break;
case 'streetAddress1':
if (empty($form->getData())) {
if (empty($form->getData()) && !$isNoAddress) {
$address = null;
return;
}
@@ -100,6 +110,9 @@ class AddressDataMapper implements DataMapperInterface
case 'validFrom':
$address->setValidFrom($form->getData());
break;
case 'isNoAddress':
$address->setIsNoAddress($form->getData());
break;
default:
break;
}

View File

@@ -27,6 +27,7 @@ use Symfony\Component\Form\Extension\Core\Type\DateType;
use Chill\MainBundle\Entity\Address;
use Chill\MainBundle\Form\Type\PostalCodeType;
use Chill\MainBundle\Form\DataMapper\AddressDataMapper;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
/**
* A type to create/update Address entity
@@ -45,7 +46,7 @@ class AddressType extends AbstractType
{
$builder
->add('streetAddress1', TextType::class, array(
'required' => true
'required' => !$options['has_no_address'] // true if has no address is false
))
->add('streetAddress2', TextType::class, array(
'required' => false
@@ -53,7 +54,7 @@ class AddressType extends AbstractType
->add('postCode', PostalCodeType::class, array(
'label' => 'Postal code',
'placeholder' => 'Choose a postal code',
'required' => true
'required' => !$options['has_no_address'] // true if has no address is false
))
;
@@ -67,7 +68,19 @@ class AddressType extends AbstractType
);
}
if ($options['null_if_emtpy'] === TRUE) {
if ($options['has_no_address']) {
$builder
->add('isNoAddress', ChoiceType::class, [
'required' => true,
'choices' => [
'address.consider homeless' => true,
'address.real address' => false
],
'label' => 'address.address_homeless'
]);
}
if ($options['null_if_empty'] === TRUE) {
$builder->setDataMapper(new AddressDataMapper());
}
}
@@ -79,6 +92,9 @@ class AddressType extends AbstractType
->setDefined('has_valid_from')
->setAllowedTypes('has_valid_from', 'bool')
->setDefault('has_valid_from', true)
->setDefined('has_no_address')
->setDefault('has_no_address', false)
->setAllowedTypes('has_no_address', 'bool')
->setDefined('null_if_empty')
->setDefault('null_if_empty', false)
->setAllowedTypes('null_if_empty', 'bool')