diff --git a/InventoryInStorePickup/Model/Source/SetExtensionAttributes.php b/InventoryInStorePickup/Model/Source/SetExtensionAttributes.php new file mode 100644 index 000000000000..c53f3f3de3e0 --- /dev/null +++ b/InventoryInStorePickup/Model/Source/SetExtensionAttributes.php @@ -0,0 +1,55 @@ +extensionAttributesFactory = $extensionAttributesFactory; + } + /** + * @param SourceInterface|DataObject $source + */ + public function execute(SourceInterface $source): void + { + $pickupAvailable = $source->getData(PickupLocationInterface::IS_PICKUP_LOCATION_ACTIVE); + $frontendName = $source->getData(PickupLocationInterface::FRONTEND_NAME); + $frontendDescription = $source->getData(PickupLocationInterface::FRONTEND_DESCRIPTION); + + $extensionAttributes = $source->getExtensionAttributes(); + + if ($extensionAttributes === null) { + $extensionAttributes = $this->extensionAttributesFactory->create(SourceInterface::class); + /** @noinspection PhpParamsInspection */ + $source->setExtensionAttributes($extensionAttributes); + } + + $extensionAttributes + ->setIsPickupLocationActive((bool)$pickupAvailable) + ->setFrontendName($frontendName) + ->setFrontendDescription($frontendDescription); + } +} diff --git a/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/LoadInStorePickupOnGetListPlugin.php b/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/LoadInStorePickupOnGetListPlugin.php index 637bc1765803..4fe9ae96d1df 100644 --- a/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/LoadInStorePickupOnGetListPlugin.php +++ b/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/LoadInStorePickupOnGetListPlugin.php @@ -7,25 +7,24 @@ namespace Magento\InventoryInStorePickup\Plugin\InventoryApi\SourceRepository; -use Magento\Framework\Api\ExtensionAttributesFactory; -use Magento\InventoryApi\Api\Data\SourceInterface; use Magento\InventoryApi\Api\Data\SourceSearchResultsInterface; use Magento\InventoryApi\Api\SourceRepositoryInterface; -use Magento\InventoryInStorePickupApi\Api\Data\PickupLocationInterface; +use Magento\InventoryInStorePickup\Model\Source\SetExtensionAttributes; class LoadInStorePickupOnGetListPlugin { /** - * @var ExtensionAttributesFactory + * @var SetExtensionAttributes */ - private $extensionAttributesFactory; + private $setExtensionAttributes; /** - * @param ExtensionAttributesFactory $extensionAttributesFactory + * @param SetExtensionAttributes $setExtensionAttributes */ - public function __construct(ExtensionAttributesFactory $extensionAttributesFactory) - { - $this->extensionAttributesFactory = $extensionAttributesFactory; + public function __construct( + SetExtensionAttributes $setExtensionAttributes + ) { + $this->setExtensionAttributes = $setExtensionAttributes; } /** @@ -40,18 +39,12 @@ public function __construct(ExtensionAttributesFactory $extensionAttributesFacto public function afterGetList( SourceRepositoryInterface $subject, SourceSearchResultsInterface $sourceSearchResults - ):SourceSearchResultsInterface { - foreach ($sourceSearchResults->getItems() as $source) { - $extensionAttributes = $source->getExtensionAttributes(); - - if ($extensionAttributes === null) { - $extensionAttributes = $this->extensionAttributesFactory->create(SourceInterface::class); - $source->setExtensionAttributes($extensionAttributes); - } - - $pickupAvailable = $source->getData(PickupLocationInterface::IS_PICKUP_LOCATION_ACTIVE); - $extensionAttributes->setIsPickupLocationActive((bool)$pickupAvailable); - } + ): SourceSearchResultsInterface { + $items = $sourceSearchResults->getItems(); + array_walk( + $items, + [$this->setExtensionAttributes, 'execute'] + ); return $sourceSearchResults; } diff --git a/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/LoadInStorePickupOnGetPlugin.php b/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/LoadInStorePickupOnGetPlugin.php index e4e947154402..ef02eeb7b74e 100644 --- a/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/LoadInStorePickupOnGetPlugin.php +++ b/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/LoadInStorePickupOnGetPlugin.php @@ -7,31 +7,32 @@ namespace Magento\InventoryInStorePickup\Plugin\InventoryApi\SourceRepository; -use Magento\Framework\Api\ExtensionAttributesFactory; +use Magento\Framework\DataObject; use Magento\InventoryApi\Api\Data\SourceInterface; use Magento\InventoryApi\Api\SourceRepositoryInterface; -use Magento\InventoryInStorePickupApi\Api\Data\PickupLocationInterface; +use Magento\InventoryInStorePickup\Model\Source\SetExtensionAttributes; class LoadInStorePickupOnGetPlugin { /** - * @var \Magento\Framework\Api\ExtensionAttributesFactory + * @var SetExtensionAttributes */ - private $extensionAttributesFactory; + private $setExtensionAttributes; /** - * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionAttributesFactory + * @param SetExtensionAttributes $setExtensionAttributes */ - public function __construct(ExtensionAttributesFactory $extensionAttributesFactory) - { - $this->extensionAttributesFactory = $extensionAttributesFactory; + public function __construct( + SetExtensionAttributes $setExtensionAttributes + ) { + $this->setExtensionAttributes = $setExtensionAttributes; } /** * Enrich the given Source Objects with the In-Store pickup attribute * * @param SourceRepositoryInterface $subject - * @param SourceInterface $source + * @param SourceInterface|DataObject $source * * @return SourceInterface * @SuppressWarnings(PHPMD.UnusedFormalParameter) @@ -39,17 +40,8 @@ public function __construct(ExtensionAttributesFactory $extensionAttributesFacto public function afterGet( SourceRepositoryInterface $subject, SourceInterface $source - ):SourceInterface { - $pickupAvailable = $source->getData(PickupLocationInterface::IS_PICKUP_LOCATION_ACTIVE); - - $extensionAttributes = $source->getExtensionAttributes(); - - if ($extensionAttributes === null) { - $extensionAttributes = $this->extensionAttributesFactory->create(SourceInterface::class); - $source->setExtensionAttributes($extensionAttributes); - } - - $extensionAttributes->setIsPickupLocationActive((bool)$pickupAvailable); + ): SourceInterface { + $this->setExtensionAttributes->execute($source); return $source; } diff --git a/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/SaveInStorePickupPlugin.php b/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/SaveInStorePickupPlugin.php index fd4fd5bac1f9..eb74bf1b2ba8 100644 --- a/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/SaveInStorePickupPlugin.php +++ b/InventoryInStorePickup/Plugin/InventoryApi/SourceRepository/SaveInStorePickupPlugin.php @@ -7,8 +7,10 @@ namespace Magento\InventoryInStorePickup\Plugin\InventoryApi\SourceRepository; +use Magento\Framework\DataObject; use Magento\InventoryApi\Api\Data\SourceInterface; use Magento\InventoryApi\Api\SourceRepositoryInterface; +use Magento\InventoryInStorePickupApi\Api\Data\PickupLocationInterface as Location; class SaveInStorePickupPlugin { @@ -16,7 +18,7 @@ class SaveInStorePickupPlugin * Persist the In-Store pickup attribute on Source save * * @param SourceRepositoryInterface $subject - * @param SourceInterface $source + * @param SourceInterface|DataObject $source * * @return array * @SuppressWarnings(PHPMD.UnusedFormalParameter) @@ -24,11 +26,13 @@ class SaveInStorePickupPlugin public function beforeSave( SourceRepositoryInterface $subject, SourceInterface $source - ):array { + ): array { $extensionAttributes = $source->getExtensionAttributes(); - if ($extensionAttributes !== null && $extensionAttributes->getIsPickupLocationActive() !== null) { - $source->setIsPickupLocationActive($extensionAttributes->getIsPickupLocationActive()); + if ($extensionAttributes !== null) { + $source->setData(Location::IS_PICKUP_LOCATION_ACTIVE, $extensionAttributes->getIsPickupLocationActive()); + $source->setData(Location::FRONTEND_NAME, $extensionAttributes->getFrontendName()); + $source->setData(Location::FRONTEND_DESCRIPTION, $extensionAttributes->getFrontendDescription()); } return [$source]; diff --git a/InventoryInStorePickupAdminUi/view/adminhtml/ui_component/inventory_source_form.xml b/InventoryInStorePickupAdminUi/view/adminhtml/ui_component/inventory_source_form.xml index 2126e728a410..22429152d806 100644 --- a/InventoryInStorePickupAdminUi/view/adminhtml/ui_component/inventory_source_form.xml +++ b/InventoryInStorePickupAdminUi/view/adminhtml/ui_component/inventory_source_form.xml @@ -31,4 +31,38 @@ +
+ + true + + general + + + + extension_attributes.frontend_name + string + + + Pickup Location name visible for the customer on checkout + + + + + + extension_attributes.frontend_description + string + + + Pickup Location description + + + + + + true + + + + +
\ No newline at end of file diff --git a/InventoryInStorePickupApi/Api/Data/PickupLocationInterface.php b/InventoryInStorePickupApi/Api/Data/PickupLocationInterface.php index 11d801ef2147..312c2e4da2a9 100644 --- a/InventoryInStorePickupApi/Api/Data/PickupLocationInterface.php +++ b/InventoryInStorePickupApi/Api/Data/PickupLocationInterface.php @@ -19,6 +19,8 @@ interface PickupLocationInterface extends ExtensibleDataInterface { const IS_PICKUP_LOCATION_ACTIVE = 'is_pickup_location_active'; + const FRONTEND_NAME = 'frontend_name'; + const FRONTEND_DESCRIPTION = 'frontend_description'; /** * Get source code of Pickup Location