I am trying to display wishlist items against each customer. And I am unable to display the multiple products in the grid. Instead of showing wishlist_id, I want to show wishlist product or product id. Here is the code
VendorProjectUiComponentListingColumnsFrontendWishlistProduct.php
<?php
namespace VendorProjectUiComponentListingColumnsFrontend;
use MagentoFrameworkUrlInterface;
use MagentoFrameworkViewElementUiComponentContextInterface;
use MagentoFrameworkViewElementUiComponentFactory;
use MagentoUiComponentListingColumnsColumn;
/**
* Class OrderLink.
*/
class WishlistProduct extends Column
{
/**
* @var UrlInterface
*/
protected $urlBuilder;
/**
* Constructor.
*
* @param ContextInterface $context
* @param UiComponentFactory $uiComponentFactory
* @param UrlInterface $urlBuilder
* @param array $components
* @param array $data
*/
public function __construct(
ContextInterface $context,
UiComponentFactory $uiComponentFactory,
UrlInterface $urlBuilder,
MagentoWishlistModelWishlist $wishlist,
array $components = [],
array $data = []
) {
$this->urlBuilder = $urlBuilder;
$this->wishlist = $wishlist;
parent::__construct($context, $uiComponentFactory, $components, $data);
}
public function prepareDataSource(array $dataSource)
{
if (isset($dataSource['data']['items'])) {
$fieldName = $this->getData('name');
foreach ($dataSource['data']['items'] as &$item) {
if (isset($item['entity_id'])) {
$item['wishlist_id'] = $this->getWishlistByCustomerId($item['customer_id']);
}
}
}
return $dataSource;
}
/**
* @param int $customerId
*/
public function getWishlistByCustomerId($customerId)
{
$wishlistCollection = $this->wishlist->loadByCustomerId($customerId)->getItemCollection();
if(count($wishlistCollection)) {
$productName = '';
foreach ($wishlistCollection as $_item) {
$productName = $_item->getProduct()->getName();
}
}
return $productName;
}
}
VendorProjectviewfrontendui_componentmarketplace_customers_listing.xml
<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<column name="wishlist_id" class="VendorProjectUiComponentListingColumnsFrontendWishlistProduct">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Vendor_Project/js/grid/columns/link</item>
<item name="dataType" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">wishlist</item>
<item name="sortOrder" xsi:type="number">60</item>
</item>
</argument>
</column>
</columns>
</listing>
VendorProjectUiDataProviderCustomerHistoryDataProvider.php
<?php
namespace VendorProjectUiDataProvider;
use VendorProjectModelResourceModelSaleslistCollectionFactory;
use VendorProjectModelResourceModelSaleslistCollection as OrderColl;
use VendorProjectHelperData as HelperData;
use MagentoReportsModelResourceModelWishlistCollection as Wishlist;
use MagentoWishlistModelResourceModelItemCollection as WishlistCollection;
/**
* Class CustomerHistoryDataProvider
*/
class CustomerHistoryDataProvider extends MagentoUiDataProviderAbstractDataProvider
{
/**
* Collection for getting table name
*
* @var VendorProjectModelResourceModelSaleslistCollection
*/
protected $orderColl;
/**
* Saleslist Orders collection
*
* @var VendorProjectModelResourceModelSaleslistCollection
*/
protected $collection;
/**
* @var HelperData
*/
public $helperData;
/**
* @var Wishlist
*/
public $wishlist;
/**
* @var WishlistCollection
*/
public $wishlistCollection;
/**
* Construct
*
* @param string $name
* @param string $primaryFieldName
* @param string $requestFieldName
* @param OrderColl $orderColl
* @param CollectionFactory $collectionFactory
* @param HelperData $helperData
* @param array $meta
* @param array $data
*/
public function __construct(
$name,
$primaryFieldName,
$requestFieldName,
OrderColl $orderColl,
CollectionFactory $collectionFactory,
HelperData $helperData,
array $meta = [],
array $data = [],
Wishlist $wishlist,
WishlistCollection $wishlistCollection
) {
parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
$sellerId = $helperData->getCustomerId();
$customerGridFlat = $orderColl->getTable('customer_grid_flat');
$wishlistTable = $wishlist->getWishlistTable();
$wishlistItemTable = $wishlistCollection->getTable('wishlist_item');
$collectionData = $collectionFactory->create()
->addFieldToFilter('seller_id', $sellerId);
$collectionData->getSelect()
->columns('SUM(actual_seller_amount) AS customer_base_total')
->columns('count(distinct(order_id)) AS order_count')
->group('magebuyer_id');
$collectionData->getSelect()->join(
$customerGridFlat.' as cgf',
'main_table.magebuyer_id = cgf.entity_id',
[
'name' => 'name',
'email' => 'email',
'billing_telephone' => 'billing_telephone',
'gender' => 'gender',
'billing_full' => 'billing_full'
]
)->joinLeft(
$wishlistTable.' as wt',
'main_table.magebuyer_id = wt.customer_id',
[
'customer_id' => 'customer_id',
'wishlist_id' => 'wishlist_id'
]
);
$this->collection = $collectionData;
}
}