| Current Path : /var/www/v3.cesa.co.za/src/MemberBundle/Form/Type/ |
| Current File : /var/www/v3.cesa.co.za/src/MemberBundle/Form/Type/MemberFirmTransformationPortalType.php |
<?php
namespace App\MemberBundle\Form\Type;
use App\MemberBundle\Form\Model\MemberFirmTransformationCapture;
use App\MemberBundle\Form\TransformationReportingChoices;
use App\MemberBundle\Service\MemberFirmTransformationPortalService;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\GreaterThanOrEqual;
class MemberFirmTransformationPortalType extends AbstractType
{
private const DEMO_LABELS = [
'ma' => 'Male — African',
'mc' => 'Male — Coloured',
'mi' => 'Male — Indian',
'mw' => 'Male — White',
'mn' => 'Male — Foreign national',
'fa' => 'Female — African',
'fc' => 'Female — Coloured',
'fi' => 'Female — Indian',
'fw' => 'Female — White',
'fn' => 'Female — Foreign national',
];
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('smme', ChoiceType::class, [
'label' => 'SMME / turnover category',
'required' => true,
'choices' => TransformationReportingChoices::smmeCategories(),
'placeholder' => false,
])
->add('blackOwned', ChoiceType::class, [
'label' => 'Black ownership',
'required' => true,
'choices' => TransformationReportingChoices::blackOwnership(),
])
->add('blackWomenOwned', ChoiceType::class, [
'label' => 'Black women ownership',
'required' => true,
'choices' => TransformationReportingChoices::blackWomenOwnership(),
])
->add('bbbeeLevel', ChoiceType::class, [
'label' => 'B-BBEE recognition level',
'required' => false,
'choices' => TransformationReportingChoices::bbbeeLevels(),
'placeholder' => 'Not specified',
])
->add('totalStaff', IntegerType::class, [
'label' => 'Total staff',
'required' => true,
'help' => 'Must equal the sum of all occupational band and demographic headcounts below.',
'constraints' => [new GreaterThanOrEqual(0)],
])
->add('threeYearsAverageTurnover', NumberType::class, [
'label' => 'Three-year average turnover (R)',
'required' => false,
'scale' => 2,
]);
foreach (MemberFirmTransformationPortalService::TRANSFORMATION_COUNT_FIELDS as $field) {
$builder->add($field, IntegerType::class, [
'label' => $this->labelForTransField($field),
'property_path' => 'trans['.$field.']',
'required' => false,
'constraints' => [new GreaterThanOrEqual(0)],
]);
}
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$model = $event->getData();
$form = $event->getForm();
if (!$model instanceof MemberFirmTransformationCapture) {
return;
}
$form->remove('smme');
$form->add('smme', ChoiceType::class, [
'label' => 'SMME / turnover category',
'required' => true,
'choices' => TransformationReportingChoices::mergeStoredValue(
TransformationReportingChoices::smmeCategories(),
$model->smme
),
'placeholder' => false,
]);
$form->remove('blackOwned');
$form->add('blackOwned', ChoiceType::class, [
'label' => 'Black ownership',
'required' => true,
'choices' => TransformationReportingChoices::mergeStoredValue(
TransformationReportingChoices::blackOwnership(),
$model->blackOwned
),
]);
$form->remove('blackWomenOwned');
$form->add('blackWomenOwned', ChoiceType::class, [
'label' => 'Black women ownership',
'required' => true,
'choices' => TransformationReportingChoices::mergeStoredValue(
TransformationReportingChoices::blackWomenOwnership(),
$model->blackWomenOwned
),
]);
});
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => MemberFirmTransformationCapture::class,
]);
}
private function labelForTransField(string $field): string
{
$suffix = substr($field, strrpos($field, '_') + 1);
return self::DEMO_LABELS[$suffix] ?? $field;
}
}