'decimal:2', 'manager_commission_rate' => 'decimal:2', 'total_contracts' => 'integer', 'total_commission' => 'decimal:2', 'approved_at' => 'datetime', ]; /** * 연결된 사용자 */ public function user(): BelongsTo { return $this->belongsTo(User::class); } /** * 승인자 */ public function approver(): BelongsTo { return $this->belongsTo(User::class, 'approved_by'); } /** * 담당 테넌트 관리 목록 */ public function tenantManagements(): HasMany { return $this->hasMany(SalesTenantManagement::class, 'sales_partner_id'); } /** * 파트너 코드 자동 생성 */ public static function generatePartnerCode(): string { $prefix = 'SP'; $year = now()->format('y'); $lastPartner = self::whereYear('created_at', now()->year) ->orderBy('id', 'desc') ->first(); $sequence = $lastPartner ? (int) substr($lastPartner->partner_code, -4) + 1 : 1; return $prefix . $year . str_pad($sequence, 4, '0', STR_PAD_LEFT); } /** * 활성 파트너 스코프 */ public function scopeActive($query) { return $query->where('status', 'active'); } /** * 승인 대기 스코프 */ public function scopePending($query) { return $query->where('status', 'pending'); } }