/** * {@inheritdoc} */ public function save(\Magento\Customer\Api\Data\GroupInterface $group) { $this->_validate($group); /** @var \Magento\Customer\Model\Group $groupModel */ $groupModel = null; if ($group->getId()) { $this->_verifyTaxClassModel($group->getTaxClassId(), $group); $groupModel = $this->groupRegistry->retrieve($group->getId()); $groupDataAttributes = $this->dataObjectProcessor->buildOutputDataArray($group, '\\Magento\\Customer\\Api\\Data\\GroupInterface'); foreach ($groupDataAttributes as $attributeCode => $attributeData) { $groupModel->setDataUsingMethod($attributeCode, $attributeData); } } else { $groupModel = $this->groupFactory->create(); $groupModel->setCode($group->getCode()); $taxClassId = $group->getTaxClassId() ?: self::DEFAULT_TAX_CLASS_ID; $this->_verifyTaxClassModel($taxClassId, $group); $groupModel->setTaxClassId($taxClassId); } try { $this->groupResourceModel->save($groupModel); } catch (\Magento\Framework\Exception\LocalizedException $e) { /** * Would like a better way to determine this error condition but * difficult to do without imposing more database calls */ if ($e->getMessage() == (string) __('Customer Group already exists.')) { throw new InvalidTransitionException(__('Customer Group already exists.')); } throw $e; } $this->groupRegistry->remove($groupModel->getId()); $groupDataObject = $this->groupDataFactory->create()->setId($groupModel->getId())->setCode($groupModel->getCode())->setTaxClassId($groupModel->getTaxClassId())->setTaxClassName($groupModel->getTaxClassName()); return $groupDataObject; }