12345678910111213141516171819202122232425262728293031323334353637 |
- <?php
-
- namespace App\Concerns;
-
- use RuntimeException;
-
- trait GeneratesDocumentNumbers
- {
- public static function getNextDocumentNumber(): string
- {
- $company = auth()->user()->currentCompany;
-
- if (! $company) {
- throw new RuntimeException('No current company is set for the user.');
- }
-
- $settings = $company->{static::getSettingsKey()};
- $numberField = static::getDocumentNumberField();
-
- $latestDocument = static::query()
- ->whereNotNull($numberField)
- ->latest($numberField)
- ->first();
-
- $lastNumberPart = $latestDocument
- ? (int) substr($latestDocument->{$numberField}, strlen($settings->number_prefix))
- : 0;
-
- return $settings->getNumberNext(
- padded: true,
- format: true,
- prefix: $settings->number_prefix,
- digits: $settings->number_digits,
- next: $lastNumberPart + 1
- );
- }
- }
|