_invoiceCollectionFactory = $invoiceCollectionFactory; $this->_memoCollectionFactory = $memoCollectionFactory; $this->_shipmentCollectionFactory = $shipmentCollectionFactory; } /** * Sets comments parent model instance * * @param \Magento\Sales\Model\AbstractModel $entity * @return $this */ public function setEntity($entity) { $this->_entity = $entity; $this->_commentCollection = null; // Changing model and resource model can lead to change of comment collection return $this; } /** * Gets comments parent model instance * * @return \Magento\Sales\Model\AbstractModel */ public function getEntity() { return $this->_entity; } /** * Initialize model comments and return comment collection * * @return \Magento\Sales\Model\ResourceModel\Order\Comment\Collection\AbstractCollection * @throws \Magento\Framework\Exception\LocalizedException */ public function getComments() { if ($this->_commentCollection === null) { $entity = $this->getEntity(); if ($entity instanceof \Magento\Sales\Model\Order\Invoice) { $this->_commentCollection = $this->_invoiceCollectionFactory->create(); } elseif ($entity instanceof \Magento\Sales\Model\Order\Creditmemo) { $this->_commentCollection = $this->_memoCollectionFactory->create(); } elseif ($entity instanceof \Magento\Sales\Model\Order\Shipment) { $this->_commentCollection = $this->_shipmentCollectionFactory->create(); } else { throw new \Magento\Framework\Exception\LocalizedException(__('We found an invalid entity model.')); } $this->_commentCollection->setParentFilter($entity)->setCreatedAtOrder()->addVisibleOnFrontFilter(); } return $this->_commentCollection; } /** * Returns whether there are comments to show on frontend * * @return bool */ public function hasComments() { return $this->getComments()->count() > 0; } }