storeManager = $storeManager; $this->scopeConfig = $scopeConfig; $this->groupFactory = $groupFactory; $this->groupRepository = $groupRepository; $this->groupDataFactory = $groupDataFactory; $this->searchCriteriaBuilder = $searchCriteriaBuilder; $this->filterBuilder = $filterBuilder; $this->sortOrderBuilder = $sortOrderBuilder ?: ObjectManager::getInstance() ->get(SortOrderBuilder::class); } /** * @inheritdoc */ public function isReadonly($groupId) { /** @var \Magento\Customer\Model\Group $group */ $group = $this->groupFactory->create(); $group->load($groupId); if ($group->getId() === null) { throw NoSuchEntityException::singleField('groupId', $groupId); } return $groupId == self::NOT_LOGGED_IN_ID || $group->usesAsDefault(); } /** * @inheritdoc */ public function getDefaultGroup($storeId = null) { if ($storeId === null) { $storeId = $this->storeManager->getStore()->getCode(); } try { $groupId = $this->scopeConfig->getValue( self::XML_PATH_DEFAULT_ID, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId ); } catch (\Magento\Framework\Exception\State\InitException $e) { throw NoSuchEntityException::singleField('storeId', $storeId); } catch (NoSuchEntityException $e) { throw NoSuchEntityException::singleField('storeId', $storeId); } try { return $this->groupRepository->getById($groupId); } catch (NoSuchEntityException $e) { throw NoSuchEntityException::doubleField('groupId', $groupId, 'storeId', $storeId); } } /** * @inheritdoc */ public function getNotLoggedInGroup() { return $this->groupRepository->getById(self::NOT_LOGGED_IN_ID); } /** * @inheritdoc */ public function getLoggedInGroups() { $notLoggedInFilter[] = $this->filterBuilder ->setField(GroupInterface::ID) ->setConditionType('neq') ->setValue(self::NOT_LOGGED_IN_ID) ->create(); $groupAll[] = $this->filterBuilder ->setField(GroupInterface::ID) ->setConditionType('neq') ->setValue(self::CUST_GROUP_ALL) ->create(); $groupNameSortOrder = $this->sortOrderBuilder ->setField('customer_group_code') ->setAscendingDirection() ->create(); $searchCriteria = $this->searchCriteriaBuilder ->addFilters($notLoggedInFilter) ->addFilters($groupAll) ->addSortOrder($groupNameSortOrder) ->create(); return $this->groupRepository->getList($searchCriteria)->getItems(); } /** * @inheritdoc */ public function getAllCustomersGroup() { $groupDataObject = $this->groupDataFactory->create(); $groupDataObject->setId(self::CUST_GROUP_ALL); return $groupDataObject; } }