'date', 'total_debit' => 'integer', 'total_credit' => 'integer', ]; public function lines() { return $this->hasMany(JournalEntryLine::class)->orderBy('line_no'); } public function scopeForTenant($query, $tenantId) { return $query->where('tenant_id', $tenantId); } /** * 전표번호 자동채번: JE-YYYYMMDD-NNN */ public static function generateEntryNo($tenantId, $date) { $dateStr = date('Ymd', strtotime($date)); $prefix = "JE-{$dateStr}-"; $last = static::where('tenant_id', $tenantId) ->where('entry_no', 'like', $prefix . '%') ->lockForUpdate() ->orderByDesc('entry_no') ->value('entry_no'); if ($last) { $seq = (int) substr($last, -3) + 1; } else { $seq = 1; } return $prefix . str_pad($seq, 3, '0', STR_PAD_LEFT); } }