<?php
declare(strict_types=0);
/*
* WellCommerce Foundation
*
* This file is part of the WellCommerce package.
*
* (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
*
* For the full copyright and license information,
* please view the LICENSE file that was distributed with this source code.
*/
namespace WellCommerce\Bundle\OrderBundle\EventListener;
use Psr\Container\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use WellCommerce\Bundle\AppBundle\Entity\Shop;
use WellCommerce\Bundle\CoreBundle\DependencyInjection\AbstractServiceSubscriber;
use WellCommerce\Bundle\OrderBundle\Service\Shipment\Adapter\ElektronicznyNadawcaAdapter;
use WellCommerce\Component\Form\Conditions\Equals;
use WellCommerce\Component\Form\Event\FormEvent;
/**
* Class ShipmentSubscriber
*
* @author Adam Piotrowski <adam@wellcommerce.org>
*/
class ShipmentSubscriber extends AbstractServiceSubscriber implements EventSubscriberInterface
{
protected ElektronicznyNadawcaAdapter $elektronicznyNadawcaAdapter;
public function __construct(ContainerInterface $locator, ElektronicznyNadawcaAdapter $elektronicznyNadawcaAdapter)
{
parent::__construct($locator);
$this->elektronicznyNadawcaAdapter = $elektronicznyNadawcaAdapter;
}
public static function getSubscribedEvents()
{
return [
'admin.shop.pre_form_init' => ['onShopFormAdminInit'],
];
}
public function onShopFormAdminInit(FormEvent $event)
{
$resource = $event->getResource();
if ($resource instanceof Shop) {
$form = $event->getForm();
$builder = $event->getFormBuilder();
$fieldset = $form->getChildren()->get('shipment_settings_data');
$ruchData = $fieldset->addChild(
$builder->getElement('nested_fieldset', [
'name' => 'ruch_data',
'label' => 'shipment.fieldset.ruch',
])
);
$ruchData->addChild(
$builder->getElement('text_field', [
'name' => 'ruchPartnerId',
'label' => 'shipment.label.ruch.partner_id',
])
);
$ruchData->addChild(
$builder->getElement('text_field', [
'name' => 'ruchPartnerKey',
'label' => 'shipment.label.ruch.partner_key',
])
);
$ruchData->addChild(
$builder->getElement('select', [
'name' => 'ruchWsdl',
'label' => 'shipment.label.ruch.wsdl',
'options' => [
'https://api.paczkawruchu.pl/WebServicePwRProd/WebServicePwR.asmx?wsdl' => 'https://api.paczkawruchu.pl/WebServicePwRProd/WebServicePwR.asmx?wsdl',
'https://api-test.orlenpaczka.pl/WebServicePwR/WebServicePwR.asmx?wsdl' => 'https://api-test.orlenpaczka.pl/WebServicePwR/WebServicePwR.asmx?wsdl',
],
])
);
$fedexData = $fieldset->addChild(
$builder->getElement('nested_fieldset', [
'name' => 'fedex_data',
'label' => 'shipment.fieldset.fedex',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexLogin',
'label' => 'shipment.label.fedex.login',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexPass',
'label' => 'shipment.label.fedex.pass',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexWsdl',
'label' => 'shipment.label.fedex.wsdl',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexCourier',
'label' => 'shipment.label.fedex.courier',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexAccount',
'label' => 'shipment.label.fedex.account',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexContent',
'label' => 'shipment.label.fedex.content',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexReturnValidity',
'label' => 'shipment.label.fedex.return_validity',
'suffix' => 'dni',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexShipperName',
'label' => 'shipment.label.fedex.name',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexShipperSurname',
'label' => 'shipment.label.fedex.surname',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexShipperEmail',
'label' => 'shipment.label.fedex.email',
])
);
$fedexData->addChild(
$builder->getElement('text_field', [
'name' => 'fedexShipperPhone',
'label' => 'shipment.label.fedex.phone',
])
);
$fedexData->addChild(
$builder->getElement('checkbox', [
'name' => 'fedexEnablePostalCodeValidator',
'label' => 'shipment.label.fedex.enable_postal_code_validator',
])
);
$dhlData = $fieldset->addChild(
$builder->getElement('nested_fieldset', [
'name' => 'dhl_data',
'label' => 'shipment.fieldset.dhl',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'dhlLogin',
'label' => 'shipment.label.dhl.login',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'dhlPass',
'label' => 'shipment.label.dhl.pass',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'parcelShopLogin',
'label' => 'shipment.label.dhl.parcel_shop_login',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'parcelShopPass',
'label' => 'shipment.label.dhl.parcel_shop_pass',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'dhlAccount',
'label' => 'shipment.label.dhl.account',
])
);
$dhlData->addChild(
$builder->getElement('checkbox', [
'name' => 'dhlSandbox',
'label' => 'shipment.label.dhl.sandbox',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'dhlPackageWidth',
'label' => 'shipment.label.dhl.package_width',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'dhlPackageHeight',
'label' => 'shipment.label.dhl.package_height',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'dhlPackageLength',
'label' => 'shipment.label.dhl.package_length',
])
);
$dhlData->addChild(
$builder->getElement('text_field', [
'name' => 'dhlPackageContents',
'label' => 'shipment.label.dhl.package_contents',
])
);
$dpdData = $fieldset->addChild(
$builder->getElement('nested_fieldset', [
'name' => 'dpd_data',
'label' => 'shipment.fieldset.dpd',
])
);
$dpdData->addChild(
$builder->getElement('text_field', [
'name' => 'dpdLogin',
'label' => 'shipment.label.dpd.login',
])
);
$dpdData->addChild(
$builder->getElement('text_field', [
'name' => 'dpdPass',
'label' => 'shipment.label.dpd.pass',
])
);
$dpdData->addChild(
$builder->getElement('text_field', [
'name' => 'dpdMasterFid',
'label' => 'shipment.label.dpd.master_fid',
])
);
$dpdData->addChild(
$builder->getElement('text_field', [
'name' => 'dpdFid',
'label' => 'shipment.label.dpd.fid',
])
);
$dpdData->addChild(
$builder->getElement('checkbox', [
'name' => 'dpdTest',
'label' => 'shipment.label.dpd.test',
])
);
$elektronicznyNadawcaData = $fieldset->addChild(
$builder->getElement('nested_fieldset', [
'name' => 'elektroniczny_nadawca_data',
'label' => 'shipment.fieldset.elektroniczny_nadawca',
])
);
$elektronicznyNadawcaData->addChild(
$builder->getElement('text_field', [
'name' => 'elektronicznyNadawcaUser',
'label' => 'shipment.label.elektroniczny_nadawca.user',
])
);
$elektronicznyNadawcaData->addChild(
$builder->getElement('password', [
'name' => 'elektronicznyNadawcaPass',
'label' => 'shipment.label.elektroniczny_nadawca.pass',
])
);
$elektronicznyNadawcaData->addChild(
$builder->getElement('text_field', [
'name' => 'elektronicznyNadawcaCodAccount',
'label' => 'shipment.label.elektroniczny_nadawca.cod_account',
])
);
$elektronicznyNadawcaData->addChild(
$builder->getElement('checkbox', [
'name' => 'elektronicznyNadawcaTest',
'label' => 'shipment.label.elektroniczny_nadawca.test',
])
);
if ($this->elektronicznyNadawcaAdapter->isEnabled()) {
$elektronicznyNadawcaData->addChild(
$builder->getElement('select', [
'name' => 'elektronicznyNadawcaGabaryt',
'label' => 'Gabaryt',
'options' => $this->elektronicznyNadawcaAdapter->getGabaryty(),
])
);
$urzedy = $this->elektronicznyNadawcaAdapter->getUrzedyNadania($resource);
if (count($urzedy)) {
$elektronicznyNadawcaData->addChild(
$builder->getElement('select', [
'name' => 'elektronicznyNadawcaUrzadNadania',
'label' => 'Urząd nadania',
'options' => $urzedy,
])
);
}
}
$inpostData = $fieldset->addChild(
$builder->getElement('nested_fieldset', [
'name' => 'inpost_data',
'label' => 'shipment.fieldset.inpost',
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostUser',
'label' => 'shipment.label.inpost.user',
])
);
$inpostData->addChild(
$builder->getElement('password', [
'name' => 'inpostPass',
'label' => 'shipment.label.inpost.pass',
])
);
$inpostData->addChild(
$builder->getElement('select', [
'name' => 'inpostUrl',
'label' => 'shipment.label.inpost.url',
'options' => [
'https://sandbox-api.paczkomaty.pl' => 'sandbox-api.paczkomaty.pl',
'https://api.paczkomaty.pl' => 'api.paczkomaty.pl',
],
])
);
$inpostToken = $inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostToken',
'label' => 'shipment.label.inpost.access_token',
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostDropoffPoint',
'label' => 'Paczkomat do zwrotu przesyłek',
])
);
$inpostData->addChild(
$builder->getElement('select', [
'name' => 'inpostOrganization',
'label' => 'shipment.label.inpost.organization',
'dependencies' => [
$builder->getDependency('exchange_options', [
'field' => $inpostToken,
'load_options_route' => 'admin.shipx.organizations',
'form' => $form,
]),
],
])
);
$inpostData->addChild(
$builder->getElement('select', [
'name' => 'inpostService',
'label' => 'shipment.label.inpost.service',
'dependencies' => [
$builder->getDependency('exchange_options', [
'field' => $inpostToken,
'load_options_route' => 'admin.shipx.services',
'form' => $form,
]),
],
])
);
$inpostData->addChild(
$builder->getElement('select', [
'name' => 'inpostEnvironment',
'label' => 'shipment.label.inpost.environment',
'options' => [
'live' => 'live',
'test' => 'test',
],
])
);
$inpostData->addChild(
$builder->getElement('checkbox', [
'name' => 'inpostOrderComment',
'label' => 'Komentarz do zamówienia',
'comment' => 'Zaznacz aby komentarz do zamówienia znalazł się w opisie przesyłki.',
])
);
$inpostData->addChild(
$builder->getElement('checkbox', [
'name' => 'inpostBoxPacker',
'label' => 'Automatyczne obliczanie gabarytu',
'comment' => 'Zaznacz aby system sam obliczył gabaryt przesyłki w oparciu o wymiary pojedynczych produktów',
])
);
$inpostData->addChild(
$builder->getElement('tip', [
'name' => 'inpostSenderTip',
'tip' => '<strong>OPCJONALNIE</strong> możesz podać inne dane nadawcy niż określone w managerze paczek. W przypadku braku podania tych danych zostaną zastosowane domyślne dla organizacji.',
])
);
$forceSender = $inpostData->addChild(
$builder->getElement('checkbox', [
'name' => 'inpostForceSender',
'label' => 'Wymuś inne dane nadawcy',
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostSenderCompanyName',
'label' => 'Firma nadawcy',
'rules' => [
$builder->getRule('required'),
],
'dependencies' => [
$builder->getDependency('show', [
'form' => $form,
'field' => $forceSender,
'condition' => new Equals(1),
]),
],
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostSenderEmail',
'label' => 'E-mail nadawcy',
'rules' => [
$builder->getRule('required'),
],
'dependencies' => [
$builder->getDependency('show', [
'form' => $form,
'field' => $forceSender,
'condition' => new Equals(1),
]),
],
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostSenderPhone',
'label' => 'Numer telefonu nadawcy',
'rules' => [
$builder->getRule('required'),
],
'dependencies' => [
$builder->getDependency('show', [
'form' => $form,
'field' => $forceSender,
'condition' => new Equals(1),
]),
],
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostSenderAddress',
'label' => 'Adres nadawcy',
'rules' => [
$builder->getRule('required'),
],
'dependencies' => [
$builder->getDependency('show', [
'form' => $form,
'field' => $forceSender,
'condition' => new Equals(1),
]),
],
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostSenderCity',
'label' => 'Miasto nadawcy',
'rules' => [
$builder->getRule('required'),
],
'dependencies' => [
$builder->getDependency('show', [
'form' => $form,
'field' => $forceSender,
'condition' => new Equals(1),
]),
],
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostSenderPostalCode',
'label' => 'Kod pocztowy nadawcy',
'rules' => [
$builder->getRule('required'),
],
'dependencies' => [
$builder->getDependency('show', [
'form' => $form,
'field' => $forceSender,
'condition' => new Equals(1),
]),
],
])
);
$inpostData->addChild(
$builder->getElement('text_field', [
'name' => 'inpostSenderCountryCode',
'label' => 'Kod kraju nadawcy',
'rules' => [
$builder->getRule('required'),
],
'dependencies' => [
$builder->getDependency('show', [
'form' => $form,
'field' => $forceSender,
'condition' => new Equals(1),
]),
],
])
);
$upsData = $fieldset->addChild(
$builder->getElement('nested_fieldset', [
'name' => 'ups_data',
'label' => 'shipment.fieldset.ups',
])
);
$upsData->addChild(
$builder->getElement('text_field', [
'name' => 'upsKey',
'label' => 'shipment.label.ups.key',
])
);
$upsData->addChild(
$builder->getElement('text_field', [
'name' => 'upsUser',
'label' => 'shipment.label.ups.user',
])
);
$upsData->addChild(
$builder->getElement('text_field', [
'name' => 'upsPass',
'label' => 'shipment.label.ups.pass',
])
);
$upsData->addChild(
$builder->getElement('text_field', [
'name' => 'upsAccount',
'label' => 'shipment.label.ups.account',
])
);
$upsData->addChild(
$builder->getElement('checkbox', [
'name' => 'upsEnablePostalCodeValidator',
'label' => 'shipment.label.ups.enable_postal_code_validator',
])
);
}
}
}