| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
- namespace App\Models;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\Relations\BelongsTo;
- use Illuminate\Support\Facades\DB;
- class Ttn extends Model
- {
- protected $fillable = [
- 'year',
- 'ttn_number',
- 'ttn_number_suffix',
- 'order_number',
- 'order_date',
- 'departure_date',
- 'order_sum',
- 'skus',
- 'file_id',
- ];
- public function file(): BelongsTo
- {
- return $this->belongsTo(File::class);
- }
- public static function getNextTtnNumber(): int
- {
- return Setting::getInt(Setting::KEY_TTN_NEXT_NUMBER, static::detectNextTtnNumber()) ?? 1;
- }
- public static function reserveNextTtnNumber(): int
- {
- return DB::transaction(static function (): int {
- $setting = Setting::query()
- ->lockForUpdate()
- ->firstOrNew(['key' => Setting::KEY_TTN_NEXT_NUMBER]);
- $nextNumber = (int) ($setting->value ?: static::detectNextTtnNumber());
- $setting->value = (string) ($nextNumber + 1);
- $setting->save();
- return $nextNumber;
- });
- }
- private static function detectNextTtnNumber(): int
- {
- return (int) static::query()
- ->where('year', now()->year)
- ->max('ttn_number') + 1;
- }
- }
|