From 518ae4657ea5836d14bda294b632368b701405f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Tue, 27 Jan 2026 22:40:54 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=98=A4=EB=8A=98=EC=9D=98=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=EB=B1=83=EC=A7=80=20=ED=83=80=EC=9E=85=20source=5F?= =?UTF-8?q?type=20=EA=B8=B0=EB=B0=98=20=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TodayIssue 모델에 SOURCE_TO_BADGE 매핑 상수 추가 - TodayIssueService에서 source_type 기반 badge 매핑 적용 - 입금/출금 소스 타입 및 뱃지 상수 추가 Co-Authored-By: Claude Opus 4.5 --- app/Models/Tenants/TodayIssue.php | 23 ++++++++++++++++++----- app/Services/TodayIssueService.php | 10 ++++++++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/Models/Tenants/TodayIssue.php b/app/Models/Tenants/TodayIssue.php index 9b9dc00..31f7f94 100644 --- a/app/Models/Tenants/TodayIssue.php +++ b/app/Models/Tenants/TodayIssue.php @@ -61,25 +61,38 @@ class TodayIssue extends Model public const SOURCE_WITHDRAWAL = 'withdrawal'; - // 뱃지 타입 상수 + // 뱃지 타입 상수 (최대 4자, 띄어쓰기 없음) public const BADGE_ORDER_REGISTER = '수주등록'; public const BADGE_COLLECTION_ISSUE = '추심이슈'; public const BADGE_SAFETY_STOCK = '안전재고'; - public const BADGE_EXPENSE_PENDING = '지출 승인대기'; + public const BADGE_EXPENSE_PENDING = '지출승인'; - public const BADGE_TAX_REPORT = '세금 신고'; + public const BADGE_TAX_REPORT = '세금신고'; - public const BADGE_APPROVAL_REQUEST = '결재 요청'; + public const BADGE_APPROVAL_REQUEST = '결재요청'; - public const BADGE_NEW_CLIENT = '신규거래처'; + public const BADGE_NEW_CLIENT = '신규업체'; public const BADGE_DEPOSIT = '입금'; public const BADGE_WITHDRAWAL = '출금'; + // source_type → badge 매핑 + public const SOURCE_TO_BADGE = [ + self::SOURCE_ORDER => self::BADGE_ORDER_REGISTER, + self::SOURCE_BAD_DEBT => self::BADGE_COLLECTION_ISSUE, + self::SOURCE_STOCK => self::BADGE_SAFETY_STOCK, + self::SOURCE_EXPENSE => self::BADGE_EXPENSE_PENDING, + self::SOURCE_TAX => self::BADGE_TAX_REPORT, + self::SOURCE_APPROVAL => self::BADGE_APPROVAL_REQUEST, + self::SOURCE_CLIENT => self::BADGE_NEW_CLIENT, + self::SOURCE_DEPOSIT => self::BADGE_DEPOSIT, + self::SOURCE_WITHDRAWAL => self::BADGE_WITHDRAWAL, + ]; + // 뱃지 → notification_type 매핑 public const BADGE_TO_NOTIFICATION_TYPE = [ self::BADGE_ORDER_REGISTER => 'sales_order', diff --git a/app/Services/TodayIssueService.php b/app/Services/TodayIssueService.php index d703bc1..a094546 100644 --- a/app/Services/TodayIssueService.php +++ b/app/Services/TodayIssueService.php @@ -44,9 +44,12 @@ public function summary(int $limit = 30, ?string $badge = null): array $issues = $query->limit($limit)->get(); $items = $issues->map(function (TodayIssue $issue) { + // source_type 기반으로 badge 매핑 (DB 값보다 우선) + $badge = TodayIssue::SOURCE_TO_BADGE[$issue->source_type] ?? $issue->badge ?? '기타'; + return [ 'id' => $issue->source_type.'_'.$issue->source_id, - 'badge' => $issue->badge, + 'badge' => $badge, 'content' => $issue->content, 'time' => $this->formatRelativeTime($issue->created_at), 'date' => $issue->created_at?->toDateString(), @@ -85,9 +88,12 @@ public function getUnreadList(int $limit = 10): array ->count(); $items = $issues->map(function (TodayIssue $issue) { + // source_type 기반으로 badge 매핑 (DB 값보다 우선) + $badge = TodayIssue::SOURCE_TO_BADGE[$issue->source_type] ?? $issue->badge ?? '기타'; + return [ 'id' => $issue->id, - 'badge' => $issue->badge, + 'badge' => $badge, 'notification_type' => $issue->notification_type, 'content' => $issue->content, 'path' => $issue->path,