I installed my custom plugin in Magento 2.4, but after that I'm not able to see the order list in the grid. Here below a screenshot:
My plugin adds three columns in sales_order_grid, here below I'll report the code for the first one as a sample
Vendor/App/view/adminhtml/ui_component/sales_order_grid.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">
<listingToolbar name="listing_top"/> <!-- https://github.com/magento/magento2/issues/5408 -->
<columns name="sales_order_columns">
<column name="create_invoice" class="Vendor\App\Ui\Component\Listing\Column\ColumnCreateInvoice">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Crea fattura</item>
<item name="sortOrder" xsi:type="number">600</item>
<item name="component" xsi:type="string">Vendor_App/js/grid/columns/create_invoice</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="visible" xsi:type="boolean">true</item>
</item>
</argument>
</column>
[... the other two columns]
</columns>
</listing>
Vendor/App/view/base/web/js/grid/columns/create_invoice.js:
define([
'Magento_Ui/js/grid/columns/column',
'jquery',
'mage/template',
'Magento_Ui/js/modal/modal',
'ko',
], function (Column, $, mageTemplate, sendmailPreviewTemplate, ko) {
'use strict';
return Column.extend({
defaults: {
bodyTmpl: 'ui/grid/cells/html',
fieldClass: {
'data-grid-html-cell': true
}
},
getUrl: function (row) {
return row[this.index+'_Url'];
},
getOrderId: function (row) {
return row[this.index + '_orderId'];
},
getLabel: function (row) {
return row[this.index + '_html']
},
preview: function (row)
{
$.post(this.getUrl(row)).then(function(response)
{
if(response.descriptionResponse)
alert(response.descriptionResponse);
})
},
getFieldHandler: function (row)
{
return this.preview.bind(this, row);
}
});
});
Vendor/App/Ui/Component/Listing/Column/ColumnCreateInvoice.php:
<?php
namespace Vendor\App\Ui\Component\Listing\Column;
use Magento\Framework\UrlInterface;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Ui\Component\Listing\Columns\Column;
use \Magento\Sales\Api\OrderRepositoryInterface;
class ColumnCreateInvoice extends Column
{
protected $objectManager;
protected $orderRepository;
public function __construct
(
ContextInterface $context,
\Magento\Framework\ObjectManagerInterface $objectManager,
UiComponentFactory $uiComponentFactory,
OrderRepositoryInterface $orderRepository,
\Vendor\App\Helper\Data $helper,
array $components = [],
array $data = []
)
{
$this->objectManager = $objectManager;
$this->orderRepository = $orderRepository;
$this->helper = $helper;
parent::__construct($context, $uiComponentFactory, $components, $data);
}
/**
* Prepare Data Source
* @param array $dataSource
* @return array
*/
public function prepareDataSource(array $dataSource)
{
if (isset($dataSource['data']['items']))
{
$fieldName = $this->getData('name');
foreach ($dataSource['data']['items'] as & $item)
{
$order = $this->orderRepository->get($item["entity_id"]);
$orderId = $order->getId();
isset($order)? $incrementId = $order->getIncrementId() : $incrementId = $document->getIncrementId();
// uso il nuovo metodo per recuperare il numero del documento nel gestionale Vendor (registrato nella tabella)
$docNumber = $this->helper->getF24DocNumber($incrementId);
// Costruisco l'url associato al controller CreateInvoice
$baseUrl = $this->objectManager
->get('Magento\Store\Model\StoreManagerInterface')
->getStore()
->getBaseUrl();
$url = $baseUrl. "vendor/index/createinvoice/id/". $incrementId;
if($order->isCanceled())
$item[$fieldName . '_html'] = "<center>Ordine cancellato</center>";
else
{
$invoicesIds = $this->helper->getInvoicesIds($incrementId);
if(!$invoicesIds)
$numberInvoices = 0;
else
$numberInvoices = count($invoicesIds);
if($order->canInvoice() || ($order->hasInvoices() > $numberInvoices))
$item[$fieldName . '_html'] = "<center><button class='button' title='Crea la fattura sul server di Vendor'><span>Crea fattura</span></button></center>";
else
//se lo trovo riporto il riferimento al numero della fattura in F24
$item[$fieldName . '_html'] = !empty($docNumber)? "<center><b>Ordine fatturato<br><br> Numero doc in Vendor: " . $docNumber . "</b>" : "<center><b>Ordine fatturato</b></center>";
}
$item[$fieldName . '_orderId'] = $orderId;
$item[$fieldName.'_Url'] = $url;
}
}
return $dataSource;
}
}
I tried to replace the path in sales_order_grid.xml with Vendor/App/view/base/web/js/grid/columns/
but no change also after bin/magento setup:upgrade and bin/magento setup:di:compile
If I remove my plugin from the environment an then run setup:upgrade and setup:di:compile the admin order grid displays correctly. Any ideas?