<?php
namespace App\Form\EventSubscribe\Billing;
use App\Form\Billing\InvoiceAcceptLeadType;
use App\Form\Billing\InvoiceBlacklistLeadType;
use App\Form\Billing\InvoiceLeadType;
use App\Form\Billing\InvoicePingDnpInternalType;
use App\Form\Billing\InvoicePingDnpPingType;
use App\Form\Billing\InvoicePingFilterAttemptType;
use App\Form\Billing\InvoicePingIncomingInNetworkType;
use App\Form\Billing\InvoicePingIncomingOutNetworkType;
use App\Form\Billing\InvoicePingIncomingType;
use App\Form\Billing\InvoicePingOutgoingInNetworkType;
use App\Form\Billing\InvoicePingOutgoingOutNetworkType;
use App\Form\Billing\InvoicePingOutgoingType;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Validator\Constraints\GreaterThanOrEqual;
class EventInvoiceUpdate implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return array(
FormEvents::PRE_SUBMIT => 'preSubmit'
);
}
public function preSubmit(FormEvent $event)
{
$form = $event->getForm();
$data = $event->getData();
$newField = $data['newFields'] ?? null;
$selectOption = [];
if ($newField == 'monthly_base' || isset($data['monthly_base'])) {
$form->add(
'monthly_base',
NumberType::class,
[
'attr' => [
'class' => 'form-control'
],
'mapped' => false,
'scale' => 2,
'constraints' => [
new GreaterThanOrEqual(['value' => 0])
]
]
);
$selectOption['Monthly base'] = ['disabled' => 'disabled'];
} else {
$form->remove('monthly_base');
}
if ($newField == 'conversion_analytic' || isset($data['conversion_analytic'])) {
$form->add(
'conversion_analytic',
NumberType::class, [
'attr' => [
'class' => 'form-control'
],
'mapped' => false,
'scale' => 2,
'constraints' => [
new GreaterThanOrEqual(['value' => 0])
]
]
);
} else {
$form->remove('conversion_analytic');
}
$selectOption['Conversion analytics'] = ['disabled' => 'disabled'];
if ($newField == 'lead' || isset($data['lead'])) {
$form->add(
'lead',
InvoiceLeadType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Lead'] = ['disabled' => 'disabled'];
} else {
$form->remove('lead');
}
if ($newField == 'accept_lead' || isset($data['accept_lead'])) {
$form->add(
'accept_lead',
InvoiceAcceptLeadType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Accept Lead'] = ['disabled' => 'disabled'];
} else {
$form->remove('accept_lead');
}
if ($newField == 'blacklist_lead' || isset($data['blacklist_lead'])) {
$form->add(
'blacklist_lead',
InvoiceBlacklistLeadType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Blacklist Lead'] = ['disabled' => 'disabled'];
} else {
$form->remove('blacklist_lead');
}
if ($newField == 'outgoing_ping_total' || isset($data['outgoing_ping_total'])) {
$form->add(
'outgoing_ping_total',
InvoicePingOutgoingType::class,
[
'label' => false,
'mapped' => false
]
);
$selectOption['Outgoing ping (Total)'] = ['disabled' => 'disabled'];
} else {
$form->remove('outgoing_ping_total');
}
if ($newField == 'outgoing_ping_in_network' || isset($data['outgoing_ping_in_network'])) {
$form->add(
'outgoing_ping_in_network',
InvoicePingOutgoingInNetworkType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Outgoing ping (InNetwork)'] = ['disabled' => 'disabled'];
} else {
$form->remove('outgoing_ping_in_network');
}
if ($newField == 'outgoing_ping_out_network' || isset($data['outgoing_ping_out_network'])) {
$form->add(
'outgoing_ping_out_network',
InvoicePingOutgoingOutNetworkType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Outgoing ping (OutNetwork)'] = ['disabled' => 'disabled'];
} else {
$form->remove('outgoing_ping_out_network');
}
if ($newField == 'incoming_ping_total' || isset($data['incoming_ping_total'])) {
$form->add(
'incoming_ping_total',
InvoicePingIncomingType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Incoming ping'] = ['disabled' => 'disabled'];
} else {
$form->remove('incoming_ping_total');
}
if ($newField == 'incoming_ping_in_network' || isset($data['incoming_ping_in_network'])) {
$form->add(
'incoming_ping_in_network',
InvoicePingIncomingInNetworkType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Incoming ping (InNetwork)'] = ['disabled' => 'disabled'];
} else {
$form->remove('incoming_ping_in_network');
}
if ($newField == 'incoming_ping_out_network' || isset($data['incoming_ping_out_network'])) {
$form->add(
'incoming_ping_out_network',
InvoicePingIncomingOutNetworkType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Incoming ping (InNetwork)'] = ['disabled' => 'disabled'];
} else {
$form->remove('incoming_ping_out_network');
}
if ($newField == 'dnp_internal' || isset($data['dnp_internal'])) {
$form->add(
'dnp_internal',
InvoicePingDnpInternalType::class,
[
'label' => false,
'mapped' => false
]
);
$selectOption['DNP Internal'] = ['disabled' => 'disabled'];
} else {
$form->remove('dnp_internal');
}
if ($newField == 'dnp_ping' || isset($data['dnp_ping'])) {
$form->add(
'dnp_ping',
InvoicePingDnpPingType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['DNP Ping'] = ['disabled' => 'disabled'];
} else {
$form->remove('dnp_ping');
}
if ($newField == 'filter_attempts' || isset($data['filter_attempts'])) {
$form->add(
'filter_attempts',
InvoicePingFilterAttemptType::class, [
'label' => false,
'mapped' => false
]
);
$selectOption['Filter Attempts'] = ['disabled' => 'disabled'];
} else {
$form->remove('filter_attempts');
}
$form->add('newFields', ChoiceType::class, [
'multiple' => false,
'expanded' => false,
'choices' => [
'Select' => 'select',
'Monthly base' => 'monthly_base',
'Conversion analytics' => 'conversion_analytic',
'Lead' => 'lead',
'Accept Lead' => 'accept_lead',
'Outgoing ping (Total)' => 'outgoing_ping_total',
'Outgoing ping (InNetwork)' => 'outgoing_ping_in_network',
'Outgoing ping (OutNetwork)' => 'outgoing_ping_out_network',
'Incoming ping (Total)' => 'incoming_ping_total',
'Incoming ping (InNetwork)' => 'incoming_ping_in_network',
'Incoming ping (OutNetwork)' => 'incoming_ping_out_network',
'DNP Internal' => 'dnp_internal',
'DNP Ping' => 'dnp_ping',
'Filter Attempts' => 'filter_attempts',
'Other' => 'other'
],
'choice_attr' => $selectOption,
'attr' => [
'class' => 'select',
'data-width' => '100%',
],
'mapped' => false,
]);
}
}