custom/plugins/CioMasterdata/src/Subscriber/CustomerGroupsLoadedSubscriber.php line 35

Open in your IDE?
  1. <?php
  2. namespace CioMasterdata\Subscriber;
  3. use CioCustomerPermissionGroups\Event\CustomerPermissionGroupIdsLoadedEvent;
  4. use CioCustomerPermissionGroups\Service\CustomerPermissionService;
  5. use CioEnergieImport\Service\EnergieImportService;
  6. use CioMasterdata\Definition\Masterdata\MasterdataEntity;
  7. use CioMasterdata\Service\MasterdataService;
  8. use Shopware\Core\System\SystemConfig\SystemConfigService;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class CustomerGroupsLoadedSubscriber implements EventSubscriberInterface
  11. {
  12.     private MasterdataService $masterdataService;
  13.     private CustomerPermissionService $customerPermissionService;
  14.     private EnergieImportService $energieImportService;
  15.     private SystemConfigService $systemConfigService;
  16.     public function __construct(MasterdataService $masterdataServiceCustomerPermissionService $customerPermissionServiceEnergieImportService $energieImportServiceSystemConfigService $systemConfigService)
  17.     {
  18.         $this->masterdataService $masterdataService;
  19.         $this->customerPermissionService $customerPermissionService;
  20.         $this->energieImportService $energieImportService;
  21.         $this->systemConfigService $systemConfigService;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             CustomerPermissionGroupIdsLoadedEvent::class => 'onCustomerGroupsLoadedEvent'
  27.         ];
  28.     }
  29.     public function onCustomerGroupsLoadedEvent(CustomerPermissionGroupIdsLoadedEvent $event)
  30.     {
  31.         $customer $event->getCustomer();
  32.         $groups $event->getPermissionGroupIds();
  33.         /** @var MasterdataEntity $masterData */
  34.         $masterDatas $this->masterdataService->getMasterdatasForCustomer($customer);
  35.         $config $this->systemConfigService->get('CioMasterdata.config.Shop');
  36.         foreach ($masterDatas as $masterData) {
  37.             if ($config && $config == 'energy') {
  38.                 if ($masterData->getVertriebskanal() === 'Handelsvertreter') {
  39.                     $groups[] = $this->customerPermissionService->getPermissionGroupByName('ewe')->getId();
  40.                     $groups[] = $this->customerPermissionService->getPermissionGroupByName('handelsvertreter_' strtolower($masterData->getPartnerstatus()))->getId();
  41.                     if ($masterData->representative && !empty($masterData->representative->getName())) {
  42.                         $technicalname $this->energieImportService->getTechnicalnameByName($masterData->representative->getName());
  43.                         $permissionGroup $this->customerPermissionService->getPermissionGroupByName($technicalname);
  44.                         if (!is_null($permissionGroup)) {
  45.                             $groups[] = $permissionGroup->getId();
  46.                         }
  47.                     }
  48.                 }
  49.             } else {
  50.                 switch ($masterData->getPartnerstatus()) {
  51.                     case MasterdataEntity::PARTNERSTATUS_VALUE_BASIC:
  52.                         if ($masterData->isPartnerDivisionTk()) {
  53.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('basis_tk')->getId();
  54.                         }
  55.                         if ($masterData->isPartnerDivisionTke()) {
  56.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('basis_tke')->getId();
  57.                         }
  58.                         break;
  59.                     case MasterdataEntity::PARTNERSTATUS_VALUE_BRONZE:
  60.                         if ($masterData->isPartnerDivisionTk()) {
  61.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('bronze_tk')->getId();
  62.                         }
  63.                         if ($masterData->isPartnerDivisionTke()) {
  64.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('bronze_tke')->getId();
  65.                         }
  66.                         break;
  67.                     case MasterdataEntity::PARTNERSTATUS_VALUE_SILVER:
  68.                         if ($masterData->isPartnerDivisionTk()) {
  69.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('silber_tk')->getId();
  70.                         }
  71.                         if ($masterData->isPartnerDivisionTke()) {
  72.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('silber_tke')->getId();
  73.                         }
  74.                         break;
  75.                     case MasterdataEntity::PARTNERSTATUS_VALUE_GOLD:
  76.                         if ($masterData->isPartnerDivisionTk()) {
  77.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('gold_tk')->getId();
  78.                         }
  79.                         if ($masterData->isPartnerDivisionTke()) {
  80.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('gold_tke')->getId();
  81.                         }
  82.                         break;
  83.                     case MasterdataEntity::PARTNERSTATUS_LABEL_DOOR2DOOR:
  84.                         if ($masterData->isPartnerDivisionTk()) {
  85.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('door2door_tk')->getId();
  86.                         }
  87.                         if ($masterData->isPartnerDivisionTke()) {
  88.                             $groups[] = $this->customerPermissionService->getPermissionGroupByName('door2door_tke')->getId();
  89.                         }
  90.                         break;
  91.                     case MasterdataEntity::PARTNERSTATUS_VALUE_EWESHOP:
  92.                         //                if ($masterData->isPartnerDivisionTk()) {
  93.                         $groups[] = $this->customerPermissionService->getPermissionGroupByName('ewe_shop')->getId();
  94.                         //                }
  95.                         //
  96.                         //                if ($masterData->isPartnerDivisionTke()) {
  97.                         //                    $groups[] = $this->customerPermissionService->getPermissionGroupByName('ewe_shop')->getId();
  98.                         //                }
  99.                         break;
  100.                 }
  101.                 if ($masterData->isBrandtkEwe()) {
  102.                     $groups[] = $this->customerPermissionService->getPermissionGroupByName('ewe')->getId();
  103.                 }
  104.                 if ($masterData->isBrandtkSwb()) {
  105.                     $groups[] = $this->customerPermissionService->getPermissionGroupByName('swb')->getId();
  106.                 }
  107.                 if ($masterData->isBrandtkOsnatel()) {
  108.                     $groups[] = $this->customerPermissionService->getPermissionGroupByName('osnatel')->getId();
  109.                 }
  110.             }
  111.         }
  112.         $event->setPermissionGroupIds($groups);
  113.     }
  114. }