<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Customer\Block\Adminhtml\Group\Edit;
use Magento\Customer\Api\GroupExcludedWebsiteRepositoryInterface;
use Magento\Customer\Controller\RegistryConstants;
use Magento\Framework\App\ObjectManager;
use Magento\Store\Model\System\Store as SystemStore;
/**
* Adminhtml customer groups edit form
*/
class Form extends \Magento\Backend\Block\Widget\Form\Generic
{
/**
* @var \Magento\Tax\Model\TaxClass\Source\Customer
*/
protected $_taxCustomer;
/**
* @var \Magento\Tax\Helper\Data
*/
protected $_taxHelper;
/**
* @var \Magento\Customer\Api\GroupRepositoryInterface
*/
protected $_groupRepository;
/**
* @var \Magento\Customer\Api\Data\GroupInterfaceFactory
*/
protected $groupDataFactory;
/**
* @var SystemStore
*/
private $systemStore;
/**
* @var GroupExcludedWebsiteRepositoryInterface
*/
private $groupExcludedWebsiteRepository;
/**
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Framework\Data\FormFactory $formFactory
* @param \Magento\Tax\Model\TaxClass\Source\Customer $taxCustomer
* @param \Magento\Tax\Helper\Data $taxHelper
* @param \Magento\Customer\Api\GroupRepositoryInterface $groupRepository
* @param \Magento\Customer\Api\Data\GroupInterfaceFactory $groupDataFactory
* @param array $data
* @param SystemStore|null $systemStore
* @param GroupExcludedWebsiteRepositoryInterface|null $groupExcludedWebsiteRepository
*/
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Data\FormFactory $formFactory,
\Magento\Tax\Model\TaxClass\Source\Customer $taxCustomer,
\Magento\Tax\Helper\Data $taxHelper,
\Magento\Customer\Api\GroupRepositoryInterface $groupRepository,
\Magento\Customer\Api\Data\GroupInterfaceFactory $groupDataFactory,
array $data = [],
SystemStore $systemStore = null,
GroupExcludedWebsiteRepositoryInterface $groupExcludedWebsiteRepository = null
) {
$this->_taxCustomer = $taxCustomer;
$this->_taxHelper = $taxHelper;
$this->_groupRepository = $groupRepository;
$this->groupDataFactory = $groupDataFactory;
$this->systemStore = $systemStore ?: ObjectManager::getInstance()->get(SystemStore::class);
$this->groupExcludedWebsiteRepository = $groupExcludedWebsiteRepository
?: ObjectManager::getInstance()->get(GroupExcludedWebsiteRepositoryInterface::class);
parent::__construct($context, $registry, $formFactory, $data);
}
/**
* Prepare form for render
*
* @return void
*/
protected function _prepareLayout()
{
parent::_prepareLayout();
/** @var \Magento\Framework\Data\Form $form */
$form = $this->_formFactory->create();
$groupId = $this->_coreRegistry->registry(RegistryConstants::CURRENT_GROUP_ID);
/** @var \Magento\Customer\Api\Data\GroupInterface $customerGroup */
$customerGroupExcludedWebsites = [];
if ($groupId === null) {
$customerGroup = $this->groupDataFactory->create();
$defaultCustomerTaxClass = $this->_taxHelper->getDefaultCustomerTaxClass();
} else {
$customerGroup = $this->_groupRepository->getById($groupId);
$defaultCustomerTaxClass = $customerGroup->getTaxClassId();
$customerGroupExcludedWebsites = $this->groupExcludedWebsiteRepository->getCustomerGroupExcludedWebsites(
$groupId
);
}
$fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Group Information')]);
$validateClass = sprintf(
'required-entry validate-length maximum-length-%d',
\Magento\Customer\Model\GroupManagement::GROUP_CODE_MAX_LENGTH
);
$name = $fieldset->addField(
'customer_group_code',
'text',
[
'name' => 'code',
'label' => __('Group Name'),
'title' => __('Group Name'),
'note' => __(
'Maximum length must be less then %1 characters.',
\Magento\Customer\Model\GroupManagement::GROUP_CODE_MAX_LENGTH
),
'class' => $validateClass,
'required' => true
]
);
if ($customerGroup->getId() == 0 && $customerGroup->getCode()) {
$name->setDisabled(true);
}
$fieldset->addField(
'tax_class_id',
'select',
[
'name' => 'tax_class',
'label' => __('Tax Class'),
'title' => __('Tax Class'),
'class' => 'required-entry',
'required' => true,
'values' => $this->_taxCustomer->toOptionArray(),
]
);
$fieldset->addField(
'customer_group_excluded_website_ids',
'multiselect',
[
'name' => 'customer_group_excluded_websites',
'label' => __('Excluded Website(s)'),
'title' => __('Excluded Website(s)'),
'required' => false,
'can_be_empty' => true,
'values' => $this->systemStore->getWebsiteValuesForForm(),
'note' => __('Select websites you want to exclude from this customer group.')
]
);
if ($customerGroup->getId() !== null) {
// If edit add id
$form->addField('id', 'hidden', ['name' => 'id', 'value' => $customerGroup->getId()]);
}
if ($this->_backendSession->getCustomerGroupData()) {
$form->addValues($this->_backendSession->getCustomerGroupData());
$this->_backendSession->setCustomerGroupData(null);
} else {
// TODO: need to figure out how the DATA can work with forms
$form->addValues(
[
'id' => $customerGroup->getId(),
'customer_group_code' => $customerGroup->getCode(),
'tax_class_id' => $defaultCustomerTaxClass,
'customer_group_excluded_website_ids' => $customerGroupExcludedWebsites
]
);
}
$form->setUseContainer(true);
$form->setId('edit_form');
$form->setAction($this->getUrl('customer/*/save'));
$form->setMethod('post');
$this->setForm($form);
}
}
|