<?php
declare(strict_types=1);
namespace App\UI\Admin\Form\Type\Site;
use App\Application\Site\Command\EditSiteBillingInformation\EditSiteBillingInformationCommand;
use Symfony\Component\Form\DataMapperInterface;
use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
class SiteEditBillingInformationType extends SiteBillingInformationType implements DataMapperInterface
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
parent::buildForm($builder, $options);
// `isBankWebhook` field is defined in the parent `SiteBillingInformationType`
$builder->add('save', SubmitType::class);
$builder->setDataMapper($this);
}
/**
* @param null|EditSiteBillingInformationCommand $viewData
*/
public function mapDataToForms($viewData, \Traversable $forms): void
{
if (null === $viewData) {
return;
}
if (!$viewData instanceof EditSiteBillingInformationCommand) {
throw new UnexpectedTypeException($viewData, EditSiteBillingInformationCommand::class);
}
$forms = iterator_to_array($forms);
$billingInformation = $viewData->getBillingInformation();
$forms['name']->setData($billingInformation->getName());
$forms['country']->setData($billingInformation->getCountry());
$forms['city']->setData($billingInformation->getCity());
$forms['street']->setData($billingInformation->getStreet());
$forms['streetNumber']->setData($billingInformation->getStreetNumber());
$forms['postalCode']->setData($billingInformation->getPostalCode());
$forms['iban']->setData($billingInformation->getIban());
$forms['iban']->setData($billingInformation->getIban());
$forms['isBankWebhook']->setData($billingInformation->getIsBankWebhook());
}
/**
* @param EditSiteBillingInformationCommand $viewData
*/
public function mapFormsToData(\Traversable $forms, &$viewData): void
{
$forms = iterator_to_array($forms);
$viewData = new EditSiteBillingInformationCommand(
$viewData->id,
$forms['name']->getData(),
$forms['country']->getData(),
$forms['city']->getData(),
$forms['street']->getData(),
$forms['streetNumber']->getData(),
$forms['postalCode']->getData(),
$forms['iban']->getData(),
(bool) $forms['isBankWebhook']->getData()
);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => EditSiteBillingInformationCommand::class,
'empty_data' => null,
'error_mapping' => [
'billingInfoName' => 'name',
'billingInfoCountry' => 'country',
'billingInfoCity' => 'city',
'billingInfoStreet' => 'street',
'billingInfoStreetNumber' => 'streetNumber',
'billingInfoPostalCode' => 'postalCode',
'billingInfoIban' => 'iban',
],
]);
}
}