You can count the no. of Invoice generated for the specific order by order id in Magento 2.
Using Magento\Sales\Api\InvoiceRepositoryInterface interface you need to use getList() method with SearchCriteriaBuilder class to fetch no. of an invoice for the order.
Using Below code snippet you can get the count of invoice for an order,
<?php
namespace Path\To\Class;
use Exception;
use Psr\Log\LoggerInterface;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Sales\Api\InvoiceRepositoryInterface;
class InvoiceCount
{
/**
* @var InvoiceRepositoryInterface
*/
private $invoiceRepository;
/**
* @var SearchCriteriaBuilder
*/
protected $searchCriteriaBuilder;
/**
* @var LoggerInterface
*/
private $logger;
public function __construct(
InvoiceRepositoryInterface $invoiceRepository,
SearchCriteriaBuilder $searchCriteriaBuilder,
LoggerInterface $logger
) {
$this->invoiceRepository = $invoiceRepository;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
$this->logger = $logger;
}
/**
* Get count invoices for the order.
*
* @param int $orderId
* @return int
*/
public function getCountInvoicesForOrder($orderId)
{
$searchCriteria = $this->searchCriteriaBuilder->addFilter('order_id', $orderId)->create();
try {
$invoices = $this->invoiceRepository->getList($searchCriteria);
$totalInvoice = $invoices->getTotalCount();
} catch (Exception $exception) {
$this->logger->critical($exception->getMessage());
$totalInvoice = 0;
}
return $totalInvoice;
}
}
$orderId = 1; // order id
$this->getCountInvoicesForOrder($orderId);
Using the above way, You can fetch no. of an invoice for the single order.