orderValidator = $orderValidator; $this->creditmemoValidator = $creditmemoValidator; $this->itemCreationValidator = $itemCreationValidator; $this->invoiceValidator = $invoiceValidator; $this->validatorResultMerger = $validatorResultMerger; } /** * @inheritdoc */ public function validate( InvoiceInterface $invoice, OrderInterface $order, CreditmemoInterface $creditmemo, array $items = [], $isOnline = false, $notify = false, $appendComment = false, \Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment = null, \Magento\Sales\Api\Data\CreditmemoCreationArgumentsInterface $arguments = null ) { $orderValidationResult = $this->orderValidator->validate( $order, [ CanRefund::class ] ); $creditmemoValidationResult = $this->creditmemoValidator->validate( $creditmemo, [ QuantityValidator::class, TotalsValidator::class ] ); $itemsValidation = []; foreach ($items as $item) { $itemsValidation[] = $this->itemCreationValidator->validate( $item, [CreationQuantityValidator::class], $order )->getMessages(); } $invoiceValidationResult = $this->invoiceValidator->validate( $invoice, [ \Magento\Sales\Model\Order\Invoice\Validation\CanRefund::class ] ); return $this->validatorResultMerger->merge( $orderValidationResult, $creditmemoValidationResult, $invoiceValidationResult->getMessages(), ...$itemsValidation ); } }