documentStore = $documentStore; } public function buildReference(MerchantInterface $merchant, string $documentType) { $prefix = ''; if ($documentType == DocumentModel::TYPE_DELIVERY_NOTE) { $prefix = 'BL'; } elseif ($documentType == DocumentModel::TYPE_PURCHASE_ORDER) { $prefix = 'BC'; } elseif ($documentType == DocumentModel::TYPE_INVOICE) { $prefix = 'FA'; } elseif ($documentType == DocumentModel::TYPE_QUOTATION) { $prefix = 'DE'; } $oneDocumentExist = $this->documentStore ->setMerchant($merchant) ->getOneLatestByType($documentType) ; if ($oneDocumentExist) { $reference = $oneDocumentExist->getReference(); $pattern = '#([A-Z]+)?([0-9]+)#'; preg_match($pattern, $reference, $matches, PREG_OFFSET_CAPTURE); $sizeNumReference = strlen($matches[2][0]); $numReference = ((int)$matches[2][0]) + 1; $numReference = str_pad($numReference, $sizeNumReference, '0', STR_PAD_LEFT); return $prefix . $numReference; } else { return $prefix . '00001'; } } }