Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/MemberBundle/Form/Type/
Upload File :
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;
    }
}