src/WellCommerce/Bundle/OrderBundle/EventListener/ClientCouponSubscriber.php line 43

Open in your IDE?
  1. <?php
  2. declare(strict_types=0);
  3. /*
  4.  * WellCommerce Foundation
  5.  *
  6.  * This file is part of the WellCommerce package.
  7.  *
  8.  * (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
  9.  *
  10.  * For the full copyright and license information,
  11.  * please view the LICENSE file that was distributed with this source code.
  12.  */
  13. namespace WellCommerce\Bundle\OrderBundle\EventListener;
  14. use Doctrine\Common\Collections\Collection;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use WellCommerce\Bundle\AppBundle\Entity\Client;
  17. use WellCommerce\Bundle\CoreBundle\DependencyInjection\AbstractServiceSubscriber;
  18. use WellCommerce\Bundle\CoreBundle\Helper\Router\RouterHelper;
  19. use WellCommerce\Bundle\CoreBundle\Helper\Translator\TranslatorHelper;
  20. use WellCommerce\Bundle\OrderBundle\Entity\Coupon;
  21. use WellCommerce\Bundle\OrderBundle\Entity\Order;
  22. use WellCommerce\Component\Form\Elements\Fieldset\FieldsetInterface;
  23. use WellCommerce\Component\Form\Event\FormEvent;
  24. /**
  25.  * Class ClientCouponSubscriber
  26.  *
  27.  * @author  Adam Piotrowski <adam@wellcommerce.org>
  28.  */
  29. class ClientCouponSubscriber extends AbstractServiceSubscriber implements EventSubscriberInterface
  30. {
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             'admin.client.pre_form_init' => ['onClientAdminFormInit'10],
  35.         ];
  36.     }
  37.     public function onClientAdminFormInit(FormEvent $event)
  38.     {
  39.         $resource $event->getResource();
  40.         if ($resource instanceof Client) {
  41.             $form    $event->getForm();
  42.             $builder $event->getFormBuilder();
  43.             /** @var FieldsetInterface $fieldset */
  44.             $fieldset $form->addChild($builder->getElement('nested_fieldset', [
  45.                 'name'  => 'coupons',
  46.                 'label' => 'client.fieldset.coupons',
  47.             ]));
  48.             $orders $this->getClientOrdersWithCoupons($resource);
  49.             if ($orders->count() === 0) {
  50.                 $fieldset->addChild($builder->getElement('tip', [
  51.                     'tip' => $this->getTranslatorHelper()->trans('client.flash.no_coupons'),
  52.                 ]));
  53.             } else {
  54.                 $html '<ul class="changes-detailed">';
  55.                 $orders->map(function (Order $order) use ($form$builder, &$html) {
  56.                     $coupon    $order->getCoupon();
  57.                     $couponUrl $this->getRouterHelper()->generateUrl('admin.coupon.edit', ['id' => $coupon->getId()]);
  58.                     $orderUrl  $this->getRouterHelper()->generateUrl('admin.order.edit', ['id' => $order->getId()]);
  59.                     $html .= '<li style="border-bottom: 1px solid #dfdfdf;list-style: none;margin-bottom: 15px;">';
  60.                     $html .= '    <p><strong>' $this->getTranslatorHelper()->trans('order.email.title') . '</strong> <a href="' $orderUrl '">' $order->getNumber() . '</a></p>';
  61.                     $html .= '    <p><strong>' $this->getTranslatorHelper()->trans('client.label.used_coupon') . '</strong> <a href="' $couponUrl '">' $coupon->getCode() . '</a></p>';
  62.                     $html .= '</li>';
  63.                 });
  64.                 $html .= '</ul>';
  65.                 $fieldset->addChild($builder->getElement('static_text', [
  66.                     'text' => $html,
  67.                 ]));
  68.             }
  69.         }
  70.     }
  71.     private function getClientOrdersWithCoupons(Client $client): Collection
  72.     {
  73.         return $client->getOrders()->filter(function (Order $order) {
  74.             return $order->getCoupon() instanceof Coupon;
  75.         });
  76.     }
  77. }